[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