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, |
2311 | 2311 | { |
2312 | 2312 | meta_verbose ("Received set keybindings request = %d\n", |
2313 | 2313 | (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]); |
2315 | 2315 | } |
2316 | 2316 | else if (event->xclient.message_type == |
2317 | 2317 | display->atom__METACITY_TOGGLE_VERBOSE) |
diff --git a/src/core/keybindings.c b/src/core/keybindings.c
index 63596bb..c05e529 100644
a
|
b
|
meta_change_keygrab (MetaDisplay *display, |
692 | 692 | } |
693 | 693 | |
694 | 694 | static 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 |
705 | 695 | grab_keys (MetaKeyBinding *bindings, |
706 | 696 | int n_bindings, |
707 | 697 | MetaDisplay *display, |
708 | 698 | Window xwindow, |
| 699 | gboolean grab, |
709 | 700 | gboolean binding_per_window) |
710 | 701 | { |
711 | 702 | int i; |
… |
… |
grab_keys (MetaKeyBinding *bindings, |
721 | 712 | !!(bindings[i].handler->flags & BINDING_PER_WINDOW) && |
722 | 713 | bindings[i].keycode != 0) |
723 | 714 | { |
724 | | meta_grab_key (display, xwindow, |
| 715 | meta_change_keygrab (display, xwindow, |
| 716 | grab, |
725 | 717 | bindings[i].keysym, |
726 | 718 | bindings[i].keycode, |
727 | 719 | bindings[i].mask); |
… |
… |
meta_screen_grab_keys (MetaScreen *screen) |
771 | 763 | grab_keys (screen->display->key_bindings, |
772 | 764 | screen->display->n_key_bindings, |
773 | 765 | screen->display, screen->xroot, |
774 | | FALSE); |
| 766 | TRUE, FALSE); |
775 | 767 | |
776 | 768 | screen->keys_grabbed = TRUE; |
777 | 769 | } |
… |
… |
meta_screen_ungrab_keys (MetaScreen *screen) |
781 | 773 | { |
782 | 774 | if (screen->keys_grabbed) |
783 | 775 | { |
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); |
785 | 780 | screen->keys_grabbed = FALSE; |
786 | 781 | } |
787 | 782 | } |
… |
… |
meta_window_grab_keys (MetaWindow *window) |
815 | 810 | window->display->n_key_bindings, |
816 | 811 | window->display, |
817 | 812 | window->frame ? window->frame->xwindow : window->xwindow, |
818 | | TRUE); |
| 813 | TRUE, TRUE); |
819 | 814 | |
820 | 815 | window->keys_grabbed = TRUE; |
821 | 816 | window->grab_on_frame = window->frame != NULL; |
… |
… |
handle_set_spew_mark (MetaDisplay *display, |
3307 | 3302 | } |
3308 | 3303 | |
3309 | 3304 | void |
3310 | | meta_set_keybindings_disabled (gboolean setting) |
| 3305 | meta_set_keybindings_disabled (MetaScreen *screen, gboolean setting) |
3311 | 3306 | { |
3312 | 3307 | all_bindings_disabled = setting; |
| 3308 | if (all_bindings_disabled) |
| 3309 | meta_screen_ungrab_keys (screen); |
| 3310 | else |
| 3311 | meta_screen_grab_keys (screen); |
| 3312 | |
3313 | 3313 | meta_topic (META_DEBUG_KEYBINDINGS, |
3314 | 3314 | "Keybindings %s\n", all_bindings_disabled ? "disabled" : "enabled"); |
3315 | 3315 | } |
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, |
49 | 49 | void meta_display_process_key_event (MetaDisplay *display, |
50 | 50 | MetaWindow *window, |
51 | 51 | XEvent *event); |
52 | | void meta_set_keybindings_disabled (gboolean setting); |
| 52 | void meta_set_keybindings_disabled (MetaScreen *screen, |
| 53 | gboolean setting); |
53 | 54 | void meta_display_process_mapping_event (MetaDisplay *display, |
54 | 55 | XEvent *event); |
55 | 56 | |