New "Click" behavior ruins 3dsmax keymap #34206

Closed
opened 2013-02-11 16:59:11 +01:00 by Nik Prodanov · 21 comments
Member

%%%For a 3dsmax-like keymap it is very important that all objects can be deselected by clicking on empty space. In 2.62 and all previous versions i have done this by using the mouse "Click" event to invoke a "Deselect All" command. This works well because "Click" activates only while the mouse is not hovering over the object. Recently there have been changes in the way the "Click" event works that will cause it to activate regardless of where the mouse is. This ruins the whole 3dsmax-like keymap experience i have been using and trying to replicate for years now.

If you can't revert it to the old behavior, then PLEASE add some sort of flag for the Select all/Deselect operator to check whether the cursor is currently placed above an object. This means for all versions of this operator for every mode- object.select_all, mesh.select_all, pose.select_all etc.%%%

%%%For a 3dsmax-like keymap it is very important that all objects can be deselected by clicking on empty space. In 2.62 and all previous versions i have done this by using the mouse "Click" event to invoke a "Deselect All" command. This works well because "Click" activates only while the mouse is not hovering over the object. Recently there have been changes in the way the "Click" event works that will cause it to activate regardless of where the mouse is. This ruins the whole 3dsmax-like keymap experience i have been using and trying to replicate for years now. If you can't revert it to the old behavior, then PLEASE add some sort of flag for the Select all/Deselect operator to check whether the cursor is currently placed above an object. This means for all versions of this operator for every mode- object.select_all, mesh.select_all, pose.select_all etc.%%%
Author
Member

Changed status to: 'Open'

Changed status to: 'Open'
Author
Member

%%%Just a side-note: a flag in the Select/Deselect All operator is not a very good solution either because it will get triggered more times than necessary and flood the "Last Operator" panel with itself whenever something is selected. Another solution would be a way to toggle the "Click" behavior (old vs. new) through the user-preferences panel.%%%

%%%Just a side-note: a flag in the Select/Deselect All operator is not a very good solution either because it will get triggered more times than necessary and flood the "Last Operator" panel with itself whenever something is selected. Another solution would be a way to toggle the "Click" behavior (old vs. new) through the user-preferences panel.%%%
Member

%%%Please confirm if you verified this with the 2.66 testbuild? I saw this report coming by a month ago or so too...%%%

%%%Please confirm if you verified this with the 2.66 testbuild? I saw this report coming by a month ago or so too...%%%
Author
Member

%%%Yes, i tested it with the 2.66 test build, it's where i discovered this behavior. The last version with the old behavior is 2.64 - this has been introduced somewhere in 2.65 because it's the first official release to do it.%%%

%%%Yes, i tested it with the 2.66 test build, it's where i discovered this behavior. The last version with the old behavior is 2.64 - this has been introduced somewhere in 2.65 because it's the first official release to do it.%%%
Member

%%%Here is the other report:
http://projects.blender.org/tracker/index.php?func=detail&aid=33724&group_id=9&atid=498

I just could never get a "click outside objects" do deselect to work.
Can you give a .blend startup here with keymap configuration that used to work in 2.62?%%%

%%%Here is the other report: http://projects.blender.org/tracker/index.php?func=detail&aid=33724&group_id=9&atid=498 I just could never get a "click outside objects" do deselect to work. Can you give a .blend startup here with keymap configuration that used to work in 2.62?%%%
Author
Member

%%%Yes, this other report is talking about the same thing!

I am attaching a startup.blend made with 2.64-release because it's the last version where the old behavior works. I am also attaching a .PY file that has the Object Mode keymap changed. Object Mode is used here as an example, but this is true for the Edit, Pose Mode etc.

This was probably an accidental feature to begin with, but it has worked like a charm so far.%%%

%%%Yes, this other report is talking about the same thing! I am attaching a startup.blend made with 2.64-release because it's the last version where the old behavior works. I am also attaching a .PY file that has the Object Mode keymap changed. Object Mode is used here as an example, but this is true for the Edit, Pose Mode etc. This was probably an accidental feature to begin with, but it has worked like a charm so far.%%%
Member

%%%I spent 90+ minutes on it, but cannot figure out how this could ever work...

The "Click" mouse event was added to allow "tweaks" - cases when a border-select or tweak-drag or lasso don't get handled. Such tools then have an unhandled release event. In that sense, the release gets converted to 'Click". So the code works fine, because it doesn't (wasn't) meant to register the unhandled select event.

We're just a few days before a release, I will sleep it over a night to see if there's a good new implementation for your (indeed useful) case.
%%%

%%%I spent 90+ minutes on it, but cannot figure out how this could ever work... The "Click" mouse event was added to allow "tweaks" - cases when a border-select or tweak-drag or lasso don't get handled. Such tools then have an unhandled release event. In that sense, the release gets converted to 'Click". So the code works fine, because it doesn't (wasn't) meant to register the unhandled select event. We're just a few days before a release, I will sleep it over a night to see if there's a good new implementation for your (indeed useful) case. %%%
Author
Member

%%%Perhaps there used to be something wrong with the way it differentiated between "tweaks" and normal mouse button presses? In any case - a proper, more elegant solution to "deselect by clicking on empty space" space would be best. Thanks for looking into it!%%%

%%%Perhaps there used to be something wrong with the way it differentiated between "tweaks" and normal mouse button presses? In any case - a proper, more elegant solution to "deselect by clicking on empty space" space would be best. Thanks for looking into it!%%%
Member

%%%Sergey suggested to solve this with a tiny python script, to define a new operator called "exclusive select" or so.
That's a 2 line script just combining two operators: deselect-all + select-activate.

That would work satisfying for you (and everyone), without the need for trying to hack the event system for it.

Sergey will test it and commit, i'll post here if that's working.%%%

%%%Sergey suggested to solve this with a tiny python script, to define a new operator called "exclusive select" or so. That's a 2 line script just combining two operators: deselect-all + select-activate. That would work satisfying for you (and everyone), without the need for trying to hack the event system for it. Sergey will test it and commit, i'll post here if that's working.%%%

%%%Checked on such operator. Unfortunately, it's not so easy -- View3D.select is only implements invoke(), meaning it couldn't be called from a script.

However, found a wirkwround which i've commited for Maya preset. Basically it works now this way:

  • Border select is using TWEAK, for which you need to hold LMB down and move mouse. This prevents operators using RELEASE/CLICK events from being fired.
  • LMB select is using RELEASE event, this is no selection happens before border if you do border select. And this prevents any operator uses CLICK event from being fired.
  • Delect all happens by CLICK, which would be fired only in case no operators were handled with PRESS/RELEASE.

So, Maya preset shall work for you now. If you've got own keymap you want to make behave the same way, you shall use RELEASE for view3d.select and CLICK for deselect_all.

Not so much straightforward and maybe Ton would like to rethink all this CLICK/DBL_CLICK/RELEASE/etc events for 2.67.%%%

%%%Checked on such operator. Unfortunately, it's not so easy -- View3D.select is only implements invoke(), meaning it couldn't be called from a script. However, found a wirkwround which i've commited for Maya preset. Basically it works now this way: - Border select is using TWEAK, for which you need to hold LMB down and move mouse. This prevents operators using RELEASE/CLICK events from being fired. - LMB select is using RELEASE event, this is no selection happens before border if you do border select. And this prevents any operator uses CLICK event from being fired. - Delect all happens by CLICK, which would be fired only in case no operators were handled with PRESS/RELEASE. So, Maya preset shall work for you now. If you've got own keymap you want to make behave the same way, you shall use RELEASE for view3d.select and CLICK for deselect_all. Not so much straightforward and maybe Ton would like to rethink all this CLICK/DBL_CLICK/RELEASE/etc events for 2.67.%%%
Author
Member

%%%Hmm, it's a workaround but it does work well. With the release of 2.66 being so near, this solution will do for now, but as Sergey mentions, it's better to have this implemented in a more straight-forward fashion for 2.67.

Since it's long overdue, i will use this workaround to update my "3dsmax" keymap to be (i hope) officially included in 2.67 as well.%%%

%%%Hmm, it's a workaround but it does work well. With the release of 2.66 being so near, this solution will do for now, but as Sergey mentions, it's better to have this implemented in a more straight-forward fashion for 2.67. Since it's long overdue, i will use this workaround to update my "3dsmax" keymap to be (i hope) officially included in 2.67 as well.%%%

%%%Well, i do not consider this a workaround. This is actually much more clear than the same shortcut for different actions in which behavior is not so much well defined.%%%

%%%Well, i do not consider this a workaround. This is actually much more clear than the same shortcut for different actions in which behavior is not so much well defined.%%%
Author
Member

%%%I consider it a workaround because it requires you to make a compromise with the way regular selection works - on release rather than on press. Even if that is not important (perhaps better in some cases), versions prior to 2.65 didn't need that and worked equally well with both "Press" and "Release". So what has changed?%%%

%%%I consider it a workaround because it requires you to make a compromise with the way regular selection works - on release rather than on press. Even if that is not important (perhaps better in some cases), versions prior to 2.65 didn't need that and worked equally well with both "Press" and "Release". So what has changed?%%%
Member

%%%I've marked this as todo item in our wiki here:
http://wiki.blender.org/index.php/Dev:2.5/Source/Development/Todo/UserInterface#Events

For 2.67 I'll study on cleanup of the code here. I think our 'tweak' system needs recode to make event handlers behave more predictably.%%%

%%%I've marked this as todo item in our wiki here: http://wiki.blender.org/index.php/Dev:2.5/Source/Development/Todo/UserInterface#Events For 2.67 I'll study on cleanup of the code here. I think our 'tweak' system needs recode to make event handlers behave more predictably.%%%
Member

Changed status from 'Open' to: 'Archived'

Changed status from 'Open' to: 'Archived'
Author
Member

%%%Just noticed an annoying by-product of this "select on release" workaround. When using the manipulator arrows you hold down the mouse button. If you are doing this and decide to cancel by pressing Esc, releasing the mouse will select anything that is currently under it. This became very noticeable when posing an armature because you have many bones that are bunched in the same place.%%%

%%%Just noticed an annoying by-product of this "select on release" workaround. When using the manipulator arrows you hold down the mouse button. If you are doing this and decide to cancel by pressing Esc, releasing the mouse will select anything that is currently under it. This became very noticeable when posing an armature because you have many bones that are bunched in the same place.%%%
Author
Member

Well, it's been 4 years and this is still on the ToDo. Perhaps it's time to take another look at this click/doubleclick/passthrough issue for 2.8?

Well, it's been 4 years and this is still on the ToDo. Perhaps it's time to take another look at this click/doubleclick/passthrough issue for 2.8?
Author
Member

Changed status from 'Archived' to: 'Open'

Changed status from 'Archived' to: 'Open'
Member

Added subscriber: @JulianEisel

Added subscriber: @JulianEisel
Member

Changed status from 'Confirmed' to: 'Resolved'

Changed status from 'Confirmed' to: 'Resolved'
Julian Eisel self-assigned this 2020-08-03 14:02:15 +02:00
Member

This is an old report. There's no official 3ds Max keyboard layout anymore and the behavior to deselect when clicking on empty space is default now.
Time to close this for good I guess :)

This is an old report. There's no official 3ds Max keyboard layout anymore and the behavior to deselect when clicking on empty space is default now. Time to close this for good I guess :)
Sign in to join this conversation.
No Label
Interest
Alembic
Interest
Animation & Rigging
Interest
Asset Browser
Interest
Asset Browser Project Overview
Interest
Audio
Interest
Automated Testing
Interest
Blender Asset Bundle
Interest
BlendFile
Interest
Collada
Interest
Compatibility
Interest
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
Interest
EEVEE
Interest
EEVEE & Viewport
Interest
Freestyle
Interest
Geometry Nodes
Interest
Grease Pencil
Interest
ID Management
Interest
Images & Movies
Interest
Import Export
Interest
Line Art
Interest
Masking
Interest
Metal
Interest
Modeling
Interest
Modifiers
Interest
Motion Tracking
Interest
Nodes & Physics
Interest
OpenGL
Interest
Overlay
Interest
Overrides
Interest
Performance
Interest
Physics
Interest
Pipeline, Assets & IO
Interest
Platforms, Builds & Tests
Interest
Python API
Interest
Render & Cycles
Interest
Render Pipeline
Interest
Sculpt, Paint & Texture
Interest
Text Editor
Interest
Translations
Interest
Triaging
Interest
Undo
Interest
USD
Interest
User Interface
Interest
UV Editing
Interest
VFX & Video
Interest
Video Sequencer
Interest
Virtual Reality
Interest
Vulkan
Interest
Wayland
Interest
Workbench
Interest: X11
Legacy
Blender 2.8 Project
Legacy
Milestone 1: Basic, Local Asset Browser
Legacy
OpenGL Error
Meta
Good First Issue
Meta
Papercut
Meta
Retrospective
Meta
Security
Module
Animation & Rigging
Module
Core
Module
Development Management
Module
EEVEE & Viewport
Module
Grease Pencil
Module
Modeling
Module
Nodes & Physics
Module
Pipeline, Assets & IO
Module
Platforms, Builds & Tests
Module
Python API
Module
Render & Cycles
Module
Sculpt, Paint & Texture
Module
Triaging
Module
User Interface
Module
VFX & Video
Platform
FreeBSD
Platform
Linux
Platform
macOS
Platform
Windows
Priority
High
Priority
Low
Priority
Normal
Priority
Unbreak Now!
Status
Archived
Status
Confirmed
Status
Duplicate
Status
Needs Info from Developers
Status
Needs Information from User
Status
Needs Triage
Status
Resolved
Type
Bug
Type
Design
Type
Known Issue
Type
Patch
Type
Report
Type
To Do
No Milestone
No project
No Assignees
4 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: blender/blender#34206
No description provided.