[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23917] trunk/blender: minor changes to x11 cursor grab wrapping
Campbell Barton
ideasman42 at gmail.com
Sun Oct 18 11:55:40 CEST 2009
Revision: 23917
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23917
Author: campbellbarton
Date: 2009-10-18 11:55:39 +0200 (Sun, 18 Oct 2009)
Log Message:
-----------
minor changes to x11 cursor grab wrapping
- when wrapping 2 mouse events were added.
- on release blender still had the last event (possibly outside the screen), where menus would fail to show. Add a mouse event by calling XWarpPointer with no movement when leaving grab.
Modified Paths:
--------------
trunk/blender/intern/ghost/intern/GHOST_SystemX11.cpp
trunk/blender/intern/ghost/intern/GHOST_WindowX11.cpp
trunk/blender/source/blender/windowmanager/intern/wm_cursors.c
Modified: trunk/blender/intern/ghost/intern/GHOST_SystemX11.cpp
===================================================================
--- trunk/blender/intern/ghost/intern/GHOST_SystemX11.cpp 2009-10-18 05:19:46 UTC (rev 23916)
+++ trunk/blender/intern/ghost/intern/GHOST_SystemX11.cpp 2009-10-18 09:55:39 UTC (rev 23917)
@@ -405,19 +405,21 @@
window->getCursorGrabAccum(x_accum, y_accum);
if(x_new != xme.x_root || y_new != xme.y_root) {
+ /* when wrapping we don't need to add an event because the
+ * setCursorPosition call will cause a new event after */
setCursorPosition(x_new, y_new); /* wrap */
window->setCursorGrabAccum(x_accum + (xme.x_root - x_new), y_accum + (xme.y_root - y_new));
}
-
- g_event = new
- GHOST_EventCursor(
- getMilliSeconds(),
- GHOST_kEventCursorMove,
- window,
- xme.x_root + x_accum,
- xme.y_root + y_accum
- );
-
+ else {
+ g_event = new
+ GHOST_EventCursor(
+ getMilliSeconds(),
+ GHOST_kEventCursorMove,
+ window,
+ xme.x_root + x_accum,
+ xme.y_root + y_accum
+ );
+ }
}
else {
g_event = new
Modified: trunk/blender/intern/ghost/intern/GHOST_WindowX11.cpp
===================================================================
--- trunk/blender/intern/ghost/intern/GHOST_WindowX11.cpp 2009-10-18 05:19:46 UTC (rev 23916)
+++ trunk/blender/intern/ghost/intern/GHOST_WindowX11.cpp 2009-10-18 09:55:39 UTC (rev 23917)
@@ -1419,6 +1419,13 @@
setWindowCursorVisibility(true);
}
+ if(m_cursorGrab != GHOST_kGrabNormal) {
+ /* use to generate a mouse move event, otherwise the last event
+ * blender gets can be outside the screen causing menus not to show
+ * properly unless the user moves the mouse */
+ XWarpPointer(m_display,None,None,0,0,0,0,0,0);
+ }
+
/* Almost works without but important otherwise the mouse GHOST location can be incorrect on exit */
setCursorGrabAccum(0, 0);
m_cursorGrabBounds.m_l= m_cursorGrabBounds.m_r= -1; /* disable */
Modified: trunk/blender/source/blender/windowmanager/intern/wm_cursors.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_cursors.c 2009-10-18 05:19:46 UTC (rev 23916)
+++ trunk/blender/source/blender/windowmanager/intern/wm_cursors.c 2009-10-18 09:55:39 UTC (rev 23917)
@@ -169,7 +169,6 @@
* It helps not to get a stuck WM when hitting a breakpoint
* */
GHOST_TGrabCursorMode mode = GHOST_kGrabNormal;
- int bounds_arr[4] = {-1, -1, -1, -1}; /* l/t/r/b */
if(hide) mode = GHOST_kGrabHide;
else if(wrap) mode = GHOST_kGrabWrap;
More information about the Bf-blender-cvs
mailing list