[mutter/wip/xinput2r: 64/66] keybindings



commit a418c415e031765ef5d8545640f84941229284f8
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Thu Oct 18 16:47:13 2012 -0400

    keybindings

 src/core/keybindings.c |  191 +++++++++++++++++++++++++++++-------------------
 src/meta/prefs.h       |    1 +
 2 files changed, 117 insertions(+), 75 deletions(-)
---
diff --git a/src/core/keybindings.c b/src/core/keybindings.c
index 999335c..6e17aa3 100644
--- a/src/core/keybindings.c
+++ b/src/core/keybindings.c
@@ -105,6 +105,7 @@ static void handle_workspace_switch  (MetaDisplay    *display,
                                       MetaScreen     *screen,
                                       MetaWindow     *window,
                                       XEvent         *event,
+                                      MetaDevice     *device,
                                       MetaKeyBinding *binding,
                                       gpointer        dummy);
 
@@ -1365,6 +1366,7 @@ invoke_handler (MetaDisplay    *display,
                 MetaKeyHandler *handler,
                 MetaWindow     *window,
                 XEvent         *event,
+                MetaDevice     *device,
                 MetaKeyBinding *binding)
 
 {
@@ -1373,6 +1375,7 @@ invoke_handler (MetaDisplay    *display,
                        handler->flags & META_KEY_BINDING_PER_WINDOW ?
                            window : NULL,
                        event,
+                       device,
                        binding,
                        handler->user_data);
   else
@@ -1380,6 +1383,7 @@ invoke_handler (MetaDisplay    *display,
                                handler->flags & META_KEY_BINDING_PER_WINDOW ?
                                    window: NULL,
                                event,
+                               device,
                                binding,
                                NULL);
 }
@@ -1389,13 +1393,14 @@ invoke_handler_by_name (MetaDisplay    *display,
                         MetaScreen     *screen,
                         const char     *handler_name,
                         MetaWindow     *window,
-                        XEvent         *event)
+                        XEvent         *event,
+                        MetaDevice     *device)
 {
   MetaKeyHandler *handler;
 
   handler = HANDLER (handler_name);
   if (handler)
-    invoke_handler (display, screen, handler, window, event, NULL);
+    invoke_handler (display, screen, handler, window, event, device, NULL);
 }
 
 /* now called from only one place, may be worth merging */
@@ -1409,6 +1414,7 @@ process_event (MetaKeyBinding       *bindings,
                KeySym                keysym,
                gboolean              on_window)
 {
+  MetaDevice *device;
   guint evtype, keycode, state;
   int i;
 
@@ -1421,6 +1427,8 @@ process_event (MetaKeyBinding       *bindings,
   if (evtype == KeyRelease)
     return FALSE;
 
+  device = meta_input_event_get_device (display, event);;
+
   /*
    * TODO: This would be better done with a hash table;
    * it doesn't suit to use O(n) for such a common operation.
@@ -1460,7 +1468,7 @@ process_event (MetaKeyBinding       *bindings,
        */
       display->allow_terminal_deactivation = TRUE;
 
-      invoke_handler (display, screen, handler, window, event, &bindings[i]);
+      invoke_handler (display, screen, handler, window, event, device, &bindings[i]);
 
       return TRUE;
     }
@@ -2380,7 +2388,7 @@ process_tab_grab (MetaDisplay *display,
         {
           if (end_keyboard_grab (display, device, keycode))
             {
-              invoke_handler_by_name (display, screen, "tab-popup-select", NULL, event);
+              invoke_handler_by_name (display, screen, "tab-popup-select", NULL, event, device);
 
               /* We return FALSE to end the grab; if the handler ended the grab itself
                * that will be a noop. If the handler didn't end the grab, then it's a
@@ -2417,7 +2425,7 @@ process_tab_grab (MetaDisplay *display,
               binding->handler->func &&
               binding->handler->func != binding->handler->default_func)
             {
-              invoke_handler (display, screen, binding->handler, NULL, event, binding);
+              invoke_handler (display, screen, binding->handler, NULL, event, device, binding);
               return TRUE;
             }
           break;
@@ -2436,7 +2444,7 @@ process_tab_grab (MetaDisplay *display,
         }
 
       /* Some unhandled key press */
-      invoke_handler_by_name (display, screen, "tab-popup-cancel", NULL, event);
+      invoke_handler_by_name (display, screen, "tab-popup-cancel", NULL, event, device);
       return FALSE;
     }
 
@@ -2662,11 +2670,12 @@ process_tab_grab (MetaDisplay *display,
 
 static void
 handle_switch_to_workspace (MetaDisplay    *display,
-                           MetaScreen     *screen,
-                           MetaWindow     *event_window,
-                           XEvent         *event,
-                           MetaKeyBinding *binding,
-                           gpointer        dummy)
+                            MetaScreen     *screen,
+                            MetaWindow     *event_window,
+                            XEvent         *event,
+                            MetaDevice     *device,
+                            MetaKeyBinding *binding,
+                            gpointer        dummy)
 {
   gint which = binding->handler->data;
   MetaWorkspace *workspace;
@@ -2683,8 +2692,8 @@ handle_switch_to_workspace (MetaDisplay    *display,
        * Note that we're the only caller of that function, so perhaps
        * we should merge with it.
        */
-      handle_workspace_switch (display, screen, event_window, event, binding,
-                               dummy);
+      handle_workspace_switch (display, screen, event_window, event,
+                               device, binding, dummy);
       return;
     }
 
@@ -2703,11 +2712,12 @@ handle_switch_to_workspace (MetaDisplay    *display,
 
 static void
 handle_maximize_vertically (MetaDisplay    *display,
-                      MetaScreen     *screen,
-                      MetaWindow     *window,
-                      XEvent         *event,
-                      MetaKeyBinding *binding,
-                      gpointer        dummy)
+                            MetaScreen     *screen,
+                            MetaWindow     *window,
+                            XEvent         *event,
+                            MetaDevice     *device,
+                            MetaKeyBinding *binding,
+                            gpointer        dummy)
 {
   if (window->has_resize_func)
     {
@@ -2720,11 +2730,12 @@ handle_maximize_vertically (MetaDisplay    *display,
 
 static void
 handle_maximize_horizontally (MetaDisplay    *display,
-                       MetaScreen     *screen,
-                       MetaWindow     *window,
-                       XEvent         *event,
-                       MetaKeyBinding *binding,
-                       gpointer        dummy)
+                              MetaScreen     *screen,
+                              MetaWindow     *window,
+                              XEvent         *event,
+                              MetaDevice     *device,
+                              MetaKeyBinding *binding,
+                              gpointer        dummy)
 {
   if (window->has_resize_func)
     {
@@ -2787,6 +2798,7 @@ handle_move_to_corner_nw  (MetaDisplay    *display,
                            MetaScreen     *screen,
                            MetaWindow     *window,
                            XEvent         *event,
+                           MetaDevice     *device,
                            MetaKeyBinding *binding,
                            gpointer        dummy)
 {
@@ -2798,6 +2810,7 @@ handle_move_to_corner_ne  (MetaDisplay    *display,
                            MetaScreen     *screen,
                            MetaWindow     *window,
                            XEvent         *event,
+                           MetaDevice     *device,
                            MetaKeyBinding *binding,
                            gpointer        dummy)
 {
@@ -2809,6 +2822,7 @@ handle_move_to_corner_sw  (MetaDisplay    *display,
                            MetaScreen     *screen,
                            MetaWindow     *window,
                            XEvent         *event,
+                           MetaDevice     *device,
                            MetaKeyBinding *binding,
                            gpointer        dummy)
 {
@@ -2820,6 +2834,7 @@ handle_move_to_corner_se  (MetaDisplay    *display,
                            MetaScreen     *screen,
                            MetaWindow     *window,
                            XEvent         *event,
+                           MetaDevice     *device,
                            MetaKeyBinding *binding,
                            gpointer        dummy)
 {
@@ -2831,6 +2846,7 @@ handle_move_to_side_n     (MetaDisplay    *display,
                            MetaScreen     *screen,
                            MetaWindow     *window,
                            XEvent         *event,
+                           MetaDevice     *device,
                            MetaKeyBinding *binding,
                            gpointer        dummy)
 {
@@ -2842,6 +2858,7 @@ handle_move_to_side_s     (MetaDisplay    *display,
                            MetaScreen     *screen,
                            MetaWindow     *window,
                            XEvent         *event,
+                           MetaDevice     *device,
                            MetaKeyBinding *binding,
                            gpointer        dummy)
 {
@@ -2853,6 +2870,7 @@ handle_move_to_side_e     (MetaDisplay    *display,
                            MetaScreen     *screen,
                            MetaWindow     *window,
                            XEvent         *event,
+                           MetaDevice     *device,
                            MetaKeyBinding *binding,
                            gpointer        dummy)
 {
@@ -2864,6 +2882,7 @@ handle_move_to_side_w     (MetaDisplay    *display,
                            MetaScreen     *screen,
                            MetaWindow     *window,
                            XEvent         *event,
+                           MetaDevice     *device,
                            MetaKeyBinding *binding,
                            gpointer        dummy)
 {
@@ -2875,6 +2894,7 @@ handle_move_to_center  (MetaDisplay    *display,
                         MetaScreen     *screen,
                         MetaWindow     *window,
                         XEvent         *event,
+                        MetaDevice     *device,
                         MetaKeyBinding *binding,
                         gpointer        dummy)
 {
@@ -3029,11 +3049,12 @@ process_workspace_switch_grab (MetaDisplay *display,
 
 static void
 handle_show_desktop (MetaDisplay    *display,
-                       MetaScreen     *screen,
-                       MetaWindow     *window,
-                       XEvent         *event,
-                       MetaKeyBinding *binding,
-                       gpointer        dummy)
+                     MetaScreen     *screen,
+                     MetaWindow     *window,
+                     XEvent         *event,
+                     MetaDevice     *device,
+                     MetaKeyBinding *binding,
+                     gpointer        dummy)
 {
   Time evtime;
 
@@ -3056,11 +3077,12 @@ handle_show_desktop (MetaDisplay    *display,
 
 static void
 handle_panel (MetaDisplay    *display,
-                         MetaScreen     *screen,
-                         MetaWindow     *window,
-                         XEvent         *event,
-                         MetaKeyBinding *binding,
-                         gpointer        dummy)
+              MetaScreen     *screen,
+              MetaWindow     *window,
+              XEvent         *event,
+              MetaDevice     *device,
+              MetaKeyBinding *binding,
+              gpointer        dummy)
 {
   MetaKeyBindingAction action = binding->handler->data;
   Atom action_atom;
@@ -3111,16 +3133,15 @@ handle_panel (MetaDisplay    *display,
 
 static void
 handle_activate_window_menu (MetaDisplay    *display,
-                      MetaScreen     *screen,
-                      MetaWindow     *event_window,
-                      XEvent         *event,
-                      MetaKeyBinding *binding,
-                      gpointer        dummy)
+                             MetaScreen     *screen,
+                             MetaWindow     *event_window,
+                             XEvent         *event,
+                             MetaDevice     *device,
+                             MetaKeyBinding *binding,
+                             gpointer        dummy)
 {
   MetaFocusInfo *focus_info;
-  MetaDevice *device;
 
-  device = meta_input_event_get_device (display, event);
   focus_info = meta_display_get_focus_info (display, device);
 
   if (focus_info->focus_window &&
@@ -3210,8 +3231,8 @@ do_choose_window (MetaDisplay    *display,
   if (state & ShiftMask)
     backward = !backward;
 
-  evtime = meta_input_event_get_time (display, event);
   device = meta_input_event_get_device (display, event);
+  evtime = meta_input_event_get_time (display, event);
 
   initial_selection = meta_display_get_tab_next (display,
                                                  type,
@@ -3302,11 +3323,12 @@ do_choose_window (MetaDisplay    *display,
 
 static void
 handle_switch (MetaDisplay    *display,
-                    MetaScreen     *screen,
-                    MetaWindow     *event_window,
-                    XEvent         *event,
-                    MetaKeyBinding *binding,
-                    gpointer        dummy)
+               MetaScreen     *screen,
+               MetaWindow     *event_window,
+               XEvent         *event,
+               MetaDevice     *device,
+               MetaKeyBinding *binding,
+               gpointer        dummy)
 {
   gint backwards = (binding->handler->flags & META_KEY_BINDING_IS_REVERSED) != 0;
 
@@ -3316,11 +3338,12 @@ handle_switch (MetaDisplay    *display,
 
 static void
 handle_cycle (MetaDisplay    *display,
-                    MetaScreen     *screen,
-                    MetaWindow     *event_window,
-                    XEvent         *event,
-                    MetaKeyBinding *binding,
-                    gpointer        dummy)
+              MetaScreen     *screen,
+              MetaWindow     *event_window,
+              XEvent         *event,
+              MetaDevice     *device,
+              MetaKeyBinding *binding,
+              gpointer        dummy)
 {
   gint backwards = (binding->handler->flags & META_KEY_BINDING_IS_REVERSED) != 0;
 
@@ -3333,6 +3356,7 @@ handle_tab_popup_select (MetaDisplay    *display,
                          MetaScreen     *screen,
                          MetaWindow     *window,
                          XEvent         *event,
+                         MetaDevice     *device,
                          MetaKeyBinding *binding,
                          gpointer        dummy)
 {
@@ -3344,6 +3368,7 @@ handle_tab_popup_cancel (MetaDisplay    *display,
                          MetaScreen     *screen,
                          MetaWindow     *window,
                          XEvent         *event,
+                         MetaDevice     *device,
                          MetaKeyBinding *binding,
                          gpointer        dummy)
 {
@@ -3355,6 +3380,7 @@ handle_toggle_fullscreen  (MetaDisplay    *display,
                            MetaScreen     *screen,
                            MetaWindow     *window,
                            XEvent         *event,
+                           MetaDevice     *device,
                            MetaKeyBinding *binding,
                            gpointer        dummy)
 {
@@ -3369,6 +3395,7 @@ handle_toggle_above       (MetaDisplay    *display,
                            MetaScreen     *screen,
                            MetaWindow     *window,
                            XEvent         *event,
+                           MetaDevice     *device,
                            MetaKeyBinding *binding,
                            gpointer        dummy)
 {
@@ -3383,27 +3410,29 @@ handle_toggle_tiled (MetaDisplay    *display,
                      MetaScreen     *screen,
                      MetaWindow     *window,
                      XEvent         *event,
+                     MetaDevice     *device,
                      MetaKeyBinding *binding,
                      gpointer        dummy)
 {
   MetaTileMode mode = binding->handler->data;
+  MetaDevice *pointer = meta_device_get_paired_device (device);
 
   if ((META_WINDOW_TILED_LEFT (window) && mode == META_TILE_LEFT) ||
       (META_WINDOW_TILED_RIGHT (window) && mode == META_TILE_RIGHT))
     {
       window->tile_monitor_number = window->saved_maximize ? window->monitor->number
-                                                           : -1;
+        : -1;
       window->tile_mode = window->saved_maximize ? META_TILE_MAXIMIZED
-                                                 : META_TILE_NONE;
+        : META_TILE_NONE;
 
       if (window->saved_maximize)
         meta_window_maximize (window, META_MAXIMIZE_VERTICAL |
-                                      META_MAXIMIZE_HORIZONTAL);
+                              META_MAXIMIZE_HORIZONTAL);
       else
         meta_window_unmaximize (window, META_MAXIMIZE_VERTICAL |
-                                        META_MAXIMIZE_HORIZONTAL);
+                                META_MAXIMIZE_HORIZONTAL);
     }
-  else if (meta_window_can_tile_side_by_side (window))
+  else if (meta_window_can_tile_side_by_side (window, pointer))
     {
       window->tile_monitor_number = window->monitor->number;
       window->tile_mode = mode;
@@ -3420,11 +3449,12 @@ handle_toggle_tiled (MetaDisplay    *display,
 
 static void
 handle_toggle_maximized    (MetaDisplay    *display,
-                           MetaScreen     *screen,
-                           MetaWindow     *window,
-                           XEvent         *event,
-                           MetaKeyBinding *binding,
-                           gpointer        dummy)
+                            MetaScreen     *screen,
+                            MetaWindow     *window,
+                            XEvent         *event,
+                            MetaDevice     *device,
+                            MetaKeyBinding *binding,
+                            gpointer        dummy)
 {
   if (META_WINDOW_MAXIMIZED (window))
     meta_window_unmaximize (window,
@@ -3441,6 +3471,7 @@ handle_maximize           (MetaDisplay    *display,
                            MetaScreen     *screen,
                            MetaWindow     *window,
                            XEvent         *event,
+                           MetaDevice     *device,
                            MetaKeyBinding *binding,
                            gpointer        dummy)
 {
@@ -3455,6 +3486,7 @@ handle_unmaximize         (MetaDisplay    *display,
                            MetaScreen     *screen,
                            MetaWindow     *window,
                            XEvent         *event,
+                           MetaDevice     *device,
                            MetaKeyBinding *binding,
                            gpointer        dummy)
 {
@@ -3469,6 +3501,7 @@ handle_toggle_shaded      (MetaDisplay    *display,
                            MetaScreen     *screen,
                            MetaWindow     *window,
                            XEvent         *event,
+                           MetaDevice     *device,
                            MetaKeyBinding *binding,
                            gpointer        dummy)
 {
@@ -3487,6 +3520,7 @@ handle_close              (MetaDisplay    *display,
                            MetaScreen     *screen,
                            MetaWindow     *window,
                            XEvent         *event,
+                           MetaDevice     *device,
                            MetaKeyBinding *binding,
                            gpointer        dummy)
 {
@@ -3501,6 +3535,7 @@ handle_minimize        (MetaDisplay    *display,
                         MetaScreen     *screen,
                         MetaWindow     *window,
                         XEvent         *event,
+                        MetaDevice     *device,
                         MetaKeyBinding *binding,
                         gpointer        dummy)
 {
@@ -3513,6 +3548,7 @@ handle_begin_move         (MetaDisplay    *display,
                            MetaScreen     *screen,
                            MetaWindow     *window,
                            XEvent         *event,
+                           MetaDevice     *device,
                            MetaKeyBinding *binding,
                            gpointer        dummy)
 {
@@ -3531,6 +3567,7 @@ handle_begin_resize       (MetaDisplay    *display,
                            MetaScreen     *screen,
                            MetaWindow     *window,
                            XEvent         *event,
+                           MetaDevice     *device,
                            MetaKeyBinding *binding,
                            gpointer        dummy)
 {
@@ -3546,11 +3583,12 @@ handle_begin_resize       (MetaDisplay    *display,
 
 static void
 handle_toggle_on_all_workspaces (MetaDisplay    *display,
-                           MetaScreen     *screen,
-                           MetaWindow     *window,
-                           XEvent         *event,
-                           MetaKeyBinding *binding,
-                           gpointer        dummy)
+                                 MetaScreen     *screen,
+                                 MetaWindow     *window,
+                                 XEvent         *event,
+                                 MetaDevice     *device,
+                                 MetaKeyBinding *binding,
+                                 gpointer        dummy)
 {
   if (window->on_all_workspaces_requested)
     meta_window_unstick (window);
@@ -3560,9 +3598,10 @@ handle_toggle_on_all_workspaces (MetaDisplay    *display,
 
 static void
 handle_move_to_workspace  (MetaDisplay    *display,
-                              MetaScreen     *screen,
-                              MetaWindow     *window,
-                              XEvent         *event,
+                           MetaScreen     *screen,
+                           MetaWindow     *window,
+                           XEvent         *event,
+                           MetaDevice     *device,
                            MetaKeyBinding *binding,
                            gpointer        dummy)
 {
@@ -3618,6 +3657,7 @@ handle_raise_or_lower (MetaDisplay    *display,
                        MetaScreen     *screen,
 		       MetaWindow     *window,
 		       XEvent         *event,
+                       MetaDevice     *device,
 		       MetaKeyBinding *binding,
                        gpointer        dummy)
 {
@@ -3665,6 +3705,7 @@ handle_raise (MetaDisplay    *display,
               MetaScreen     *screen,
               MetaWindow     *window,
               XEvent         *event,
+              MetaDevice     *device,
               MetaKeyBinding *binding,
               gpointer        dummy)
 {
@@ -3676,17 +3717,18 @@ handle_lower (MetaDisplay    *display,
               MetaScreen     *screen,
               MetaWindow     *window,
               XEvent         *event,
+              MetaDevice     *device,
               MetaKeyBinding *binding,
               gpointer        dummy)
 {
   meta_window_lower (window);
 }
-
 static void
 handle_workspace_switch  (MetaDisplay    *display,
                           MetaScreen     *screen,
                           MetaWindow     *window,
                           XEvent         *event,
+                          MetaDevice     *device,
                           MetaKeyBinding *binding,
                           gpointer        dummy)
 {
@@ -3694,7 +3736,6 @@ handle_workspace_switch  (MetaDisplay    *display,
   unsigned int grab_mask;
   MetaWorkspace *next;
   gboolean grabbed_before_release;
-  MetaDevice *device;
   guint state;
   Time evtime;
 
@@ -3709,7 +3750,6 @@ handle_workspace_switch  (MetaDisplay    *display,
   /* FIXME should we use binding->mask ? */
   grab_mask = state & ~(display->ignored_modifier_mask);
   evtime = meta_input_event_get_time (display, event);
-  device = meta_input_event_get_device (display, event);
 
   if (!meta_display_begin_grab_op (display,
                                    screen,
@@ -3750,9 +3790,10 @@ handle_workspace_switch  (MetaDisplay    *display,
 
 static void
 handle_set_spew_mark (MetaDisplay    *display,
-                  MetaScreen     *screen,
-                  MetaWindow     *window,
-                  XEvent         *event,
+                      MetaScreen     *screen,
+                      MetaWindow     *window,
+                      XEvent         *event,
+                      MetaDevice     *device,
                       MetaKeyBinding *binding,
                       gpointer        dummy)
 {
diff --git a/src/meta/prefs.h b/src/meta/prefs.h
index ff6984c..5bad398 100644
--- a/src/meta/prefs.h
+++ b/src/meta/prefs.h
@@ -253,6 +253,7 @@ typedef void (* MetaKeyHandlerFunc) (MetaDisplay    *display,
                                      MetaScreen     *screen,
                                      MetaWindow     *window,
                                      XEvent         *event,
+                                     MetaDevice     *device,
                                      MetaKeyBinding *binding,
                                      gpointer        user_data);
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]