Diff Keymaps
User edited keymaps now no longer override the builtin keymaps entirely, but
rather save only the difference and reapply those changes. This means they can
stay better in sync when the builtin keymaps change. The diff/patch algorithm
is not perfect, but better for the common case where only a few items are changed
rather than entire keymaps The main weakness is that if a builtin keymap item
changes, user modification of that item may need to be redone in some cases.
Keymap Editor
The most noticeable change here is that there is no longer an "Edit" button for
keymaps, all are editable immediately, but a "Restore" buttons shows for keymaps
and items that have been edited. Shortcuts for addons can also be edited in the
keymap editor.
Addons
Addons now should only modify the new addon keyconfiguration, the keymap items
there will be added to the builtin ones for handling events, and not get lost
when starting new files. Example code of register/unregister:
km = wm.keyconfigs.addon.keymaps.new("3D View", space_type="VIEW_3D")
km.keymap_items.new('my.operator', 'ESC', 'PRESS')
km = wm.keyconfigs.addon.keymaps["3D View"]
km.keymap_items.remove(km.keymap_items["my.operator"])
Compatibility
The changes made are not forward compatible, i.e. if you save user preferences
with newer versions, older versions will not have key configuration changes that
were made.
On clicking in a non-active Blender window (when you activated others),
the mouse position of the first click was still the old position.
Problem is in GHOST; it sends out the 'activate window' event after the
mouseclick event itself. Code now checks for this case and reads the
correct mouse position.
mouse coords would with cont. grab would wrap at short.
use mouse coords as int rather then short.
this problem still happens on linux because of XTranslateCoordinates
Top bar: Add -> Mesh -> UV Sphere + Enter crashed.
It didn't crash with leftmouse, but that was coincidentally working.
Menus were freeing modal handlers in Window, while handlers were still
in use. Fix provides to tag handlers for being freed now.
Will add on my attention list for more elaborate checking work here, for
upcoming 2.57a I rather stick to minimal change in code here.
Gave the report-timer (in top header) an own TIMER define, to not
confuse with timers in use for UI. Easier for debugging. :)
Also gave better malloc names to regions in 3d window.
All this for testing proper buffer drawing in Intel cards... which
is still unsolved.
- Tooltip-hanging fix made the 'active' button be removed when mouse
enters another subwindow. Caused by commit of a week ago.
- Reverted the eventsystem change that sets 'active subwindow' before
it calls modal handlers. This made editors become active on using
menus, buttons, or other modal ops.
Side effect is that for transform operators called via toolbar, the
overlay-extra draw with helplines now gets skipped. Will check on
good ways for it.
Hanging Tooltips solved!
It appeared to be that an active button remained in that state when
another region/editor became active. It then kept the button-activate
state, and therefore also the optional tooltip.
This only happened on fast moves, when a mousemove event was not passed
on anymore to the previously active subwindow.
It has been solved with a new notifier (SWINACTIVE), which gets sent on
new active regions. The screen listener then calls uiFreeActiveButtons()
to find out if buttons were still active somewhere else.
Arrows-move-cursor is back!
It now works for any running modal operator that doesn't handle own
arrow keys. Might need to become more restricted though, some modal
ops don't need it. Want to investigate that still where conflicts are.
Transform started with button in Toolbar was drawing the helper
line badly.
This needed two fixes:
- helper line now has poll() callback to check for correct region
- event system needs to set 'subwinactive' for modal handlers too
The latter might fix issues with cursor/overlay drawing in other
cases?
available on many keyboards these days, so that they can be used for
animation playback (giving more options over alt-a and alt-a ad-
infinitum).
Currently, this is Windows only as I don't have a Linux/Mac system to
test on (it should compile with both mingw and msvc, at least using
scons). Maintainers for those systems can probably easily add this in
once they find out the relevant mappings for those systems.
WM_modal_tweak_exit() was making incorrect use of the user-pref option
"Release Confirms Transform", indicated by confused coder comment
(<quote>"XXX: WTH is this?"</quote>).
This manisfested when moving markers by just click-dragging and
existing marker, and having it "drop" whereever the mouse was released
regardless of the user-pref option. This was quite confusing as it was
inconsistent with the way that all other transforms worked when this
option is off, where you would usually start the transform (click-
drag), release the button, move around a bit, and then finally click
to end.
most local modifier,GPU,ImBuf and Interface functions are now static.
also fixed an error were the fluid modifier definition and the header didnt have the same number of args.
- File Window: when opened with operator (save, load, etc), you
couldn't start a new one, causing memleaks. Now it nicely
refreshes file window for new operator.
Also means you can make CTRL+F3 screenies of filewindow now.
- CTRL+F3 screenshot had memleak on cancel.
Drag/drop now has a User preset for dragging threshold.
Noticed this was set to 3 pixels even, made it 5 as default.
Tablet owners can put it larger too :)
Note: the tweak-threshold (3d win) is 10 pixels now, I think
this needs another preset too, leave this for now.
Also: fixed crash in filewindow: drag .blend icon and drop it.
You can't test anything in Blender or you get a bug :)