[Bf-blender-cvs] [34862b5] master: Workaround T40317: Ghost/Win32 keys sticking for new windows

Campbell Barton noreply at git.blender.org
Mon May 26 08:46:12 CEST 2014


Commit: 34862b5b57a6ddaa8989ad0c693450de92666af9
Author: Campbell Barton
Date:   Mon May 26 16:31:06 2014 +1000
https://developer.blender.org/rB34862b5b57a6ddaa8989ad0c693450de92666af9

Workaround T40317: Ghost/Win32 keys sticking for new windows

Ghost win32 ignores key-up events for newly activated windows.
for now just disable code for win32 to initialize modifiers for new windows.

===================================================================

M	source/blender/windowmanager/intern/wm_window.c

===================================================================

diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index ddc20e3..f18146c 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -751,7 +751,12 @@ static int ghost_event_proc(GHOST_EventHandle evt, GHOST_TUserDataPtr C_void_ptr
 				                         (query_qual(CONTROL)   ? KM_CTRL  : 0) |
 				                         (query_qual(ALT)       ? KM_ALT   : 0) |
 				                         (query_qual(OS)        ? KM_OSKEY : 0));
-				
+
+				/* Win23/GHOST modifier bug, see T40317 */
+#ifndef WIN32
+#  define USE_WIN_ACTIVATE
+#endif
+
 				wm->winactive = win; /* no context change! c->wm->windrawable is drawable, or for area queues */
 				
 				win->active = 1;
@@ -773,44 +778,55 @@ static int ghost_event_proc(GHOST_EventHandle evt, GHOST_TUserDataPtr C_void_ptr
 						wm_event_add_ghostevent(wm, win, GHOST_kEventKeyUp, time, &kdata);
 					}
 				}
+#ifdef USE_WIN_ACTIVATE
 				else {
 					if (keymodifier & KM_SHIFT) {
 						win->eventstate->shift = KM_MOD_FIRST;
 					}
 				}
+#endif
 				if (win->eventstate->ctrl) {
 					if ((keymodifier & KM_CTRL) == 0) {
 						kdata.key = GHOST_kKeyLeftControl;
 						wm_event_add_ghostevent(wm, win, GHOST_kEventKeyUp, time, &kdata);
 					}
 				}
+#ifdef USE_WIN_ACTIVATE
 				else {
 					if (keymodifier & KM_CTRL) {
 						win->eventstate->ctrl = KM_MOD_FIRST;
 					}
 				}
+#endif
 				if (win->eventstate->alt) {
 					if ((keymodifier & KM_ALT) == 0) {
 						kdata.key = GHOST_kKeyLeftAlt;
 						wm_event_add_ghostevent(wm, win, GHOST_kEventKeyUp, time, &kdata);
 					}
 				}
+#ifdef USE_WIN_ACTIVATE
 				else {
 					if (keymodifier & KM_ALT) {
 						win->eventstate->alt = KM_MOD_FIRST;
 					}
 				}
+#endif
 				if (win->eventstate->oskey) {
 					if ((keymodifier & KM_OSKEY) == 0) {
 						kdata.key = GHOST_kKeyOS;
 						wm_event_add_ghostevent(wm, win, GHOST_kEventKeyUp, time, &kdata);
 					}
 				}
+#ifdef USE_WIN_ACTIVATE
 				else {
 					if (keymodifier & KM_OSKEY) {
 						win->eventstate->oskey = KM_MOD_FIRST;
 					}
 				}
+#endif
+
+#undef USE_WIN_ACTIVATE
+
 
 				/* keymodifier zero, it hangs on hotkeys that open windows otherwise */
 				win->eventstate->keymodifier = 0;




More information about the Bf-blender-cvs mailing list