[Xfce4-commits] <xfwm4:master> Experiment with button events.
Nick Schermer
noreply at xfce.org
Sun Feb 23 21:10:15 CET 2014
Updating branch refs/heads/master
to 7c87af29befcc91ba2e890dd822a4a69cb3263d9 (commit)
from 306ab75e13fa0c9c2696f6be8e2e3bf5f943bd13 (commit)
commit 7c87af29befcc91ba2e890dd822a4a69cb3263d9
Author: Nick Schermer <nick at xfce.org>
Date: Wed Aug 7 19:51:56 2013 +0200
Experiment with button events.
src/cycle.c | 28 ++++++++++++++++++++++++++--
src/screen.c | 2 +-
src/tabwin.c | 4 +++-
3 files changed, 30 insertions(+), 4 deletions(-)
diff --git a/src/cycle.c b/src/cycle.c
index b5e45f1..6913ff4 100644
--- a/src/cycle.c
+++ b/src/cycle.c
@@ -231,6 +231,8 @@ clientCycleEventFilter (XEvent * xevent, gpointer data)
KeyCode cancel, left, right, up, down;
int key, modifiers;
gboolean key_pressed, cycling, gone;
+ GList *li;
+ Window mouse_window = 0;
TRACE ("entering clientCycleEventFilter");
@@ -359,13 +361,29 @@ clientCycleEventFilter (XEvent * xevent, gpointer data)
break;
case ButtonPress:
case ButtonRelease:
+ /* window of the event, we might accept it later */
+ mouse_window = xevent->xbutton.window;
+ break;
case EnterNotify:
- case MotionNotify:
+ case LeaveNotify:
+ /* window of the event, we might accept it later */
+ mouse_window = xevent->xcrossing.window;
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)
+ {
+ status = EVENT_FILTER_CONTINUE;
+ break;
+ }
+ }
if (!cycling)
{
@@ -385,6 +403,7 @@ clientCycle (Client * c, XKeyEvent * ev)
GList *client_list, *selected;
gboolean g1, g2;
int key, modifier;
+ Client *c2;
g_return_if_fail (c != NULL);
TRACE ("entering clientCycle");
@@ -429,7 +448,7 @@ clientCycle (Client * c, XKeyEvent * ev)
}
g1 = myScreenGrabKeyboard (screen_info, ev->time);
- g2 = myScreenGrabPointer (screen_info, LeaveWindowMask, None, ev->time);
+ g2 = myScreenGrabPointer (screen_info, EnterWindowMask | LeaveWindowMask | ButtonPressMask | ButtonMotionMask | PointerMotionMask | ButtonReleaseMask, None, ev->time);
if (!g1 || !g2)
{
@@ -452,6 +471,11 @@ 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);
+
gtk_main ();
eventFilterPop (display_info->xfilter);
TRACE ("leaving cycle loop");
diff --git a/src/screen.c b/src/screen.c
index 09490fe..0db586d 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -486,7 +486,7 @@ myScreenChangeGrabPointer (ScreenInfo *screen_info, unsigned int event_mask, Cur
gboolean grab;
g_return_val_if_fail (screen_info, FALSE);
- TRACE ("entering myScreenGrabPointer");
+ TRACE ("entering myScreenChangeGrabPointer");
grab = FALSE;
if (screen_info->pointer_grabs > 0)
diff --git a/src/tabwin.c b/src/tabwin.c
index 28d6ab0..bad1e56 100644
--- a/src/tabwin.c
+++ b/src/tabwin.c
@@ -552,6 +552,7 @@ tabwinCreate (GList **client_list, GList *selected, gboolean display_workspace)
Client *c;
Tabwin *tabwin;
int num_monitors, i;
+ TabwinWidget *win;
g_return_val_if_fail (selected, NULL);
g_return_val_if_fail (client_list, NULL);
@@ -571,7 +572,8 @@ tabwinCreate (GList **client_list, GList *selected, gboolean display_workspace)
gint monitor_index;
monitor_index = myScreenGetMonitorIndex(screen_info, i);
- tabwin->tabwin_list = g_list_append (tabwin->tabwin_list, tabwinCreateWidget (tabwin, screen_info, monitor_index));
+ win = tabwinCreateWidget (tabwin, screen_info, monitor_index);
+ tabwin->tabwin_list = g_list_append (tabwin->tabwin_list, win);
}
return tabwin;
More information about the Xfce4-commits
mailing list