Ticket #2300: 0001-Resolving-Alt-Tab-and-other-key-bindings-to-work-in-.patch

File 0001-Resolving-Alt-Tab-and-other-key-bindings-to-work-in-.patch, 4.6 KB (added by seeta, 14 years ago)

Makes "metacity-message disable-keybindings" to work again, which allows Alt+Tab and other key bindings to work in Sugar

  • src/core/display.c

    From 66450368b15169d7dc93559f641ef4c114944eb7 Mon Sep 17 00:00:00 2001
    From: Mukul Gupta <mukul@seeta.in>
    Date: Wed, 8 Sep 2010 02:45:38 +0530
    Subject: [PATCH] Resolving Alt+Tab and other key bindings to work in sugar (SL#2300)
    
    The patch makes "metacity-message disable-keybindings" to work again,
    which allows Alt+Tab and other key bindings to work in Sugar
    ---
     src/core/display.c     |    2 +-
     src/core/keybindings.c |   30 +++++++++++++++---------------
     src/core/keybindings.h |    3 ++-
     3 files changed, 18 insertions(+), 17 deletions(-)
    
    diff --git a/src/core/display.c b/src/core/display.c
    index f5cbdce..de4fb9f 100644
    a b event_callback (XEvent *event, 
    23112311                {
    23122312                  meta_verbose ("Received set keybindings request = %d\n",
    23132313                                (int) event->xclient.data.l[0]);
    2314                   meta_set_keybindings_disabled (!event->xclient.data.l[0]);
     2314                  meta_set_keybindings_disabled (screen, !event->xclient.data.l[0]);
    23152315                }
    23162316              else if (event->xclient.message_type ==
    23172317                       display->atom__METACITY_TOGGLE_VERBOSE)
  • src/core/keybindings.c

    diff --git a/src/core/keybindings.c b/src/core/keybindings.c
    index 63596bb..c05e529 100644
    a b meta_change_keygrab (MetaDisplay *display, 
    692692}
    693693
    694694static void
    695 meta_grab_key (MetaDisplay *display,
    696                Window       xwindow,
    697                int          keysym,
    698                unsigned int keycode,
    699                int          modmask)
    700 {
    701   meta_change_keygrab (display, xwindow, TRUE, keysym, keycode, modmask);
    702 }
    703 
    704 static void
    705695grab_keys (MetaKeyBinding *bindings,
    706696           int             n_bindings,
    707697           MetaDisplay    *display,
    708698           Window          xwindow,
     699           gboolean        grab,
    709700           gboolean        binding_per_window)
    710701{
    711702  int i;
    grab_keys (MetaKeyBinding *bindings, 
    721712          !!(bindings[i].handler->flags & BINDING_PER_WINDOW) &&
    722713          bindings[i].keycode != 0)
    723714        {
    724           meta_grab_key (display, xwindow,
     715          meta_change_keygrab (display, xwindow,
     716                         grab,
    725717                         bindings[i].keysym,
    726718                         bindings[i].keycode,
    727719                         bindings[i].mask);
    meta_screen_grab_keys (MetaScreen *screen) 
    771763  grab_keys (screen->display->key_bindings,
    772764             screen->display->n_key_bindings,
    773765             screen->display, screen->xroot,
    774              FALSE);
     766             TRUE, FALSE);
    775767
    776768  screen->keys_grabbed = TRUE;
    777769}
    meta_screen_ungrab_keys (MetaScreen *screen) 
    781773{
    782774  if (screen->keys_grabbed)
    783775    {
    784       ungrab_all_keys (screen->display, screen->xroot);
     776            grab_keys (screen->display->key_bindings,
     777                       screen->display->n_key_bindings,
     778                       screen->display, screen->xroot,
     779                       FALSE, FALSE);
    785780      screen->keys_grabbed = FALSE;
    786781    }
    787782}
    meta_window_grab_keys (MetaWindow *window) 
    815810             window->display->n_key_bindings,
    816811             window->display,
    817812             window->frame ? window->frame->xwindow : window->xwindow,
    818              TRUE);
     813             TRUE, TRUE);
    819814
    820815  window->keys_grabbed = TRUE;
    821816  window->grab_on_frame = window->frame != NULL;
    handle_set_spew_mark (MetaDisplay *display, 
    33073302}
    33083303
    33093304void
    3310 meta_set_keybindings_disabled (gboolean setting)
     3305meta_set_keybindings_disabled (MetaScreen *screen, gboolean setting)
    33113306{
    33123307  all_bindings_disabled = setting;
     3308  if (all_bindings_disabled)
     3309    meta_screen_ungrab_keys (screen);
     3310  else
     3311    meta_screen_grab_keys (screen);
     3312
    33133313  meta_topic (META_DEBUG_KEYBINDINGS,
    33143314              "Keybindings %s\n", all_bindings_disabled ? "disabled" : "enabled");
    33153315}
  • src/core/keybindings.h

    diff --git a/src/core/keybindings.h b/src/core/keybindings.h
    index 618520b..8a76214 100644
    a b void meta_window_ungrab_all_keys (MetaWindow *window, 
    4949void     meta_display_process_key_event     (MetaDisplay *display,
    5050                                             MetaWindow  *window,
    5151                                             XEvent      *event);
    52 void     meta_set_keybindings_disabled      (gboolean     setting);
     52void     meta_set_keybindings_disabled      (MetaScreen  *screen,
     53                                             gboolean     setting);
    5354void     meta_display_process_mapping_event (MetaDisplay *display,
    5455                                             XEvent      *event);
    5556