diff --git a/src/core/display.c b/src/core/display.c index 5aac698a3..4784af679 100644 --- a/src/core/display.c +++ b/src/core/display.c @@ -167,6 +167,7 @@ enum { PROP_0, + PROP_COMPOSITOR_MODIFIERS, PROP_FOCUS_WINDOW }; @@ -199,6 +200,9 @@ meta_display_get_property(GObject *object, switch (prop_id) { + case PROP_COMPOSITOR_MODIFIERS: + g_value_set_flags (value, meta_display_get_compositor_modifiers (display)); + break; case PROP_FOCUS_WINDOW: g_value_set_object (value, display->focus_window); break; @@ -512,6 +516,15 @@ meta_display_class_init (MetaDisplayClass *klass) NULL, NULL, G_TYPE_BOOLEAN, 1, G_TYPE_TASK); + g_object_class_install_property (object_class, + PROP_COMPOSITOR_MODIFIERS, + g_param_spec_flags ("compositor-modifiers", + "Compositor modifiers", + "Modifiers reserved for compositor actions", + CLUTTER_TYPE_MODIFIER_TYPE, + 0, + G_PARAM_READABLE)); + g_object_class_install_property (object_class, PROP_FOCUS_WINDOW, g_param_spec_object ("focus-window", diff --git a/src/core/events.c b/src/core/events.c index f75e53829..2edbeb00c 100644 --- a/src/core/events.c +++ b/src/core/events.c @@ -273,7 +273,7 @@ meta_display_handle_event (MetaDisplay *display, { ClutterModifierType grab_mods; - grab_mods = meta_display_get_window_grab_modifiers (display); + grab_mods = meta_display_get_compositor_modifiers (display); if ((clutter_event_get_state (event) & grab_mods) != 0) { bypass_wayland = TRUE; diff --git a/src/core/keybindings-private.h b/src/core/keybindings-private.h index ab1ab52fe..56792c200 100644 --- a/src/core/keybindings-private.h +++ b/src/core/keybindings-private.h @@ -141,8 +141,6 @@ gboolean meta_keybindings_process_event (MetaDisplay *display, MetaWindow *window, const ClutterEvent *event); -ClutterModifierType meta_display_get_window_grab_modifiers (MetaDisplay *display); - gboolean meta_prefs_add_keybinding (const char *name, GSettings *settings, MetaKeyBindingAction action, diff --git a/src/core/keybindings.c b/src/core/keybindings.c index 8e752a979..3c8ec86a1 100644 --- a/src/core/keybindings.c +++ b/src/core/keybindings.c @@ -1227,7 +1227,7 @@ meta_change_button_grab (MetaKeyBindingManager *keys, } ClutterModifierType -meta_display_get_window_grab_modifiers (MetaDisplay *display) +meta_display_get_compositor_modifiers (MetaDisplay *display) { MetaKeyBindingManager *keys = &display->key_binding_manager; return keys->window_grab_modifiers; @@ -1297,15 +1297,20 @@ meta_display_ungrab_window_buttons (MetaDisplay *display, } static void -update_window_grab_modifiers (MetaKeyBindingManager *keys) +update_window_grab_modifiers (MetaDisplay *display) { + MetaKeyBindingManager *keys = &display->key_binding_manager; MetaVirtualModifier virtual_mods; unsigned int mods; virtual_mods = meta_prefs_get_mouse_button_mods (); devirtualize_modifiers (keys, virtual_mods, &mods); - keys->window_grab_modifiers = mods; + if (keys->window_grab_modifiers != mods) + { + keys->window_grab_modifiers = mods; + g_object_notify (G_OBJECT (display), "compositor-modifiers"); + } } void @@ -1378,7 +1383,7 @@ prefs_changed_callback (MetaPreference pref, meta_display_ungrab_window_buttons (display, w->xwindow); } - update_window_grab_modifiers (keys); + update_window_grab_modifiers (display); for (l = windows; l; l = l->next) { @@ -4559,7 +4564,7 @@ meta_display_init_keys (MetaDisplay *display) reload_combos (keys); - update_window_grab_modifiers (keys); + update_window_grab_modifiers (display); /* Keys are actually grabbed in meta_screen_grab_keys() */ diff --git a/src/core/window.c b/src/core/window.c index 94db84067..8c7f49b21 100644 --- a/src/core/window.c +++ b/src/core/window.c @@ -6499,7 +6499,7 @@ meta_window_handle_mouse_grab_op_event (MetaWindow *window, { case CLUTTER_BUTTON_PRESS: { - ClutterModifierType grab_mods = meta_display_get_window_grab_modifiers (window->display); + ClutterModifierType grab_mods = meta_display_get_compositor_modifiers (window->display); /* This is the keybinding or menu case where we've * been dragging around the window without the button @@ -8426,7 +8426,7 @@ meta_window_handle_ungrabbed_event (MetaWindow *window, * care about. Just let the event through. */ - grab_mods = meta_display_get_window_grab_modifiers (display); + grab_mods = meta_display_get_compositor_modifiers (display); event_mods = clutter_event_get_state (event); unmodified = (event_mods & grab_mods) == 0; source = clutter_event_get_source_device (event); diff --git a/src/meta/display.h b/src/meta/display.h index 5cf99cfea..cddd8c656 100644 --- a/src/meta/display.h +++ b/src/meta/display.h @@ -170,6 +170,9 @@ guint meta_display_get_keybinding_action (MetaDisplay *display, unsigned int keycode, unsigned long mask); +META_EXPORT +ClutterModifierType meta_display_get_compositor_modifiers (MetaDisplay *display); + META_EXPORT GSList *meta_display_sort_windows_by_stacking (MetaDisplay *display, GSList *windows);