[Xfce4-commits] <xfwm4:ochosi/tabwin> Restore grab mouse pointer based on commit 380c869 and restrict mouse interactions inside tabwin
Simon Steinbeiss
noreply at xfce.org
Mon Dec 9 19:36:01 CET 2013
Updating branch refs/heads/ochosi/tabwin
to cad561ca3a5f20aef750296be4d4d93b3c5a8fa3 (commit)
from 135067df3617c637a335faef1f8bf8e231d6a0a9 (commit)
commit cad561ca3a5f20aef750296be4d4d93b3c5a8fa3
Author: Cédric Leporcq <cedl38 at gmail.com>
Date: Thu Dec 5 00:08:30 2013 +0100
Restore grab mouse pointer based on commit 380c869 and restrict mouse interactions inside tabwin
Signed-off-by: Simon Steinbeiss <simon.steinbeiss at elfenbeinturm.at>
src/cycle.c | 54 ++++++++++++++++++++++++++----------------------------
src/events.c | 2 +-
src/moveresize.c | 6 ++++--
src/screen.c | 4 ++--
src/screen.h | 1 +
5 files changed, 34 insertions(+), 33 deletions(-)
diff --git a/src/cycle.c b/src/cycle.c
index 3af6aea..6051d61 100644
--- a/src/cycle.c
+++ b/src/cycle.c
@@ -227,12 +227,14 @@ clientCycleEventFilter (XEvent * xevent, gpointer data)
DisplayInfo *display_info;
ClientCycleData *passdata;
Client *c, *removed;
+ Client *c2 = NULL;
eventFilterStatus status;
KeyCode cancel, left, right, up, down;
int key, modifiers;
gboolean key_pressed, cycling, gone;
GList *li;
Window mouse_window = 0;
+ XButtonEvent ev;
TRACE ("entering clientCycleEventFilter");
@@ -281,7 +283,6 @@ clientCycleEventFilter (XEvent * xevent, gpointer data)
{
if (key_pressed)
{
- Client *c2 = NULL;
key = myScreenGetKeyPressed (screen_info, (XKeyEvent *) xevent);
/*
* We cannot simply check for key == KEY_CANCEL here because of the
@@ -360,30 +361,31 @@ clientCycleEventFilter (XEvent * xevent, gpointer data)
}
break;
case ButtonPress:
- case ButtonRelease:
status = EVENT_FILTER_STOP;
- cycling = FALSE;
+ ev = xevent->xbutton;
/* window of the event, we might accept it later */
mouse_window = xevent->xbutton.window;
+ if (mouse_window != 0)
+ {
+ /* only accept events for the tab windows */
+ for (li = passdata->tabwin->tabwin_list; li != NULL; li = li->next)
+ {
+ if (GDK_WINDOW_XID (gtk_widget_get_window (li->data)) == mouse_window)
+ {
+ if (ev.button == Button1)
+ {
+ cycling = FALSE;
+ c = tabwinSelectHoveredWidget (passdata->tabwin);
+ break;
+ }
+ }
+ }
+ }
break;
default:
status = EVENT_FILTER_CONTINUE;
break;
}
-
- if (mouse_window != 0)
- {
- /* only accept events for the tab windows */
- for (li = passdata->tabwin->tabwin_list; li != NULL; li = li->next)
- {
- if (GDK_WINDOW_XID (gtk_widget_get_window (li->data)) == mouse_window)
- {
- c = tabwinSelectHoveredWidget (passdata->tabwin);
-
- break;
- }
- }
- }
if (!cycling)
{
@@ -391,14 +393,6 @@ clientCycleEventFilter (XEvent * xevent, gpointer data)
gtk_main_quit ();
}
- if (status == EVENT_FILTER_STOP)
- {
- /* If there's any chance of a leftover grab, release it. This happens
- * when the user clicks outside of the tabwin window area onto another
- * window */
- myScreenUngrabPointer (screen_info, myDisplayGetCurrentTime (display_info));
- }
-
return status;
}
@@ -409,7 +403,7 @@ clientCycle (Client * c, XKeyEvent * ev)
DisplayInfo *display_info;
ClientCycleData passdata;
GList *client_list, *selected;
- gboolean g1;
+ gboolean g1, g2;
int key, modifier;
Client *c2;
@@ -456,13 +450,16 @@ clientCycle (Client * c, XKeyEvent * ev)
}
g1 = myScreenGrabKeyboard (screen_info, ev->time);
+ g2 = myScreenGrabPointer (screen_info, TRUE, LeaveWindowMask, None, ev->time);
+
- if (!g1)
+ if (!g1 || !g2)
{
TRACE ("grab failed in clientCycle");
gdk_beep ();
myScreenUngrabKeyboard (screen_info, myDisplayGetCurrentTime (display_info));
+ myScreenUngrabPointer (screen_info, myDisplayGetCurrentTime (display_info));
g_list_free (client_list);
return;
@@ -477,7 +474,7 @@ clientCycle (Client * c, XKeyEvent * ev)
}
passdata.tabwin = tabwinCreate (&client_list, selected, screen_info->params->cycle_workspaces);
eventFilterPush (display_info->xfilter, clientCycleEventFilter, &passdata);
-
+
c2 = myScreenGetClientFromWindow (screen_info, GDK_WINDOW_XID (gtk_widget_get_window ( passdata.tabwin->tabwin_list->data)), SEARCH_FRAME);
g_message ("%p", c2);
clientSetFocus (screen_info, c2, ev->time, NO_FOCUS_FLAG);
@@ -502,6 +499,7 @@ clientCycle (Client * c, XKeyEvent * ev)
g_list_free (client_list);
myScreenUngrabKeyboard (screen_info, myDisplayGetCurrentTime (display_info));
+ myScreenUngrabPointer (screen_info, myDisplayGetCurrentTime (display_info));
}
gboolean
diff --git a/src/events.c b/src/events.c
index 4b49171..23dca2e 100644
--- a/src/events.c
+++ b/src/events.c
@@ -235,7 +235,7 @@ typeOfClick (ScreenInfo *screen_info, Window w, XEvent * ev, gboolean allow_doub
g_return_val_if_fail (w != None, XFWM_BUTTON_UNDEFINED);
display_info = screen_info->display_info;
- g = myScreenGrabPointer (screen_info, DOUBLE_CLICK_GRAB, None, ev->xbutton.time);
+ g = myScreenGrabPointer (screen_info, FALSE, DOUBLE_CLICK_GRAB, None, ev->xbutton.time);
if (!g)
{
diff --git a/src/moveresize.c b/src/moveresize.c
index a98bdf7..ec0e423 100644
--- a/src/moveresize.c
+++ b/src/moveresize.c
@@ -1123,7 +1123,9 @@ clientMove (Client * c, XEvent * ev)
}
g1 = myScreenGrabKeyboard (screen_info, myDisplayGetCurrentTime (display_info));
- g2 = myScreenGrabPointer (screen_info, MOVERESIZE_EVENT_MASK,
+ g2 = myScreenGrabPointer (screen_info,
+ FALSE,
+ MOVERESIZE_EVENT_MASK,
myDisplayGetCursorMove (display_info),
myDisplayGetCurrentTime (display_info));
if (!g1 || !g2)
@@ -1694,7 +1696,7 @@ clientResize (Client * c, int handle, XEvent * ev)
}
g1 = myScreenGrabKeyboard (screen_info, myDisplayGetCurrentTime (display_info));
- g2 = myScreenGrabPointer (screen_info, MOVERESIZE_EVENT_MASK,
+ g2 = myScreenGrabPointer (screen_info, FALSE, MOVERESIZE_EVENT_MASK,
cursor, myDisplayGetCurrentTime (display_info));
if (!g1 || !g2)
diff --git a/src/screen.c b/src/screen.c
index 0db586d..b57f523 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -456,7 +456,7 @@ myScreenGrabKeyboard (ScreenInfo *screen_info, guint32 timestamp)
}
gboolean
-myScreenGrabPointer (ScreenInfo *screen_info, unsigned int event_mask, Cursor cursor, guint32 timestamp)
+myScreenGrabPointer (ScreenInfo *screen_info, gboolean owner_events, unsigned int event_mask, Cursor cursor, guint32 timestamp)
{
gboolean grab;
@@ -468,7 +468,7 @@ myScreenGrabPointer (ScreenInfo *screen_info, unsigned int event_mask, Cursor cu
{
grab = (XGrabPointer (myScreenGetXDisplay (screen_info),
screen_info->xroot,
- FALSE, event_mask,
+ owner_events, event_mask,
GrabModeAsync, GrabModeAsync,
screen_info->xroot,
cursor,
diff --git a/src/screen.h b/src/screen.h
index a2b25c0..a2f4d4a 100644
--- a/src/screen.h
+++ b/src/screen.h
@@ -210,6 +210,7 @@ GdkWindow *myScreenGetGdkWindow (ScreenInfo *);
gboolean myScreenGrabKeyboard (ScreenInfo *,
guint32);
gboolean myScreenGrabPointer (ScreenInfo *,
+ gboolean,
unsigned int,
Cursor,
guint32);
More information about the Xfce4-commits
mailing list