diff --git a/src/compositor/compositor-private.h b/src/compositor/compositor-private.h index 4e4194f12..2916e5e4e 100644 --- a/src/compositor/compositor-private.h +++ b/src/compositor/compositor-private.h @@ -44,14 +44,6 @@ void meta_compositor_remove_window_actor (MetaCompositor *compositor, void meta_switch_workspace_completed (MetaCompositor *compositor); -gboolean meta_begin_modal_for_plugin (MetaCompositor *compositor, - MetaPlugin *plugin, - MetaModalOptions options, - guint32 timestamp); -void meta_end_modal_for_plugin (MetaCompositor *compositor, - MetaPlugin *plugin, - guint32 timestamp); - MetaPluginManager * meta_compositor_get_plugin_manager (MetaCompositor *compositor); int64_t meta_compositor_monotonic_to_high_res_xserver_time (MetaCompositor *compositor, diff --git a/src/compositor/compositor.c b/src/compositor/compositor.c index f6aaf028c..e558d48b5 100644 --- a/src/compositor/compositor.c +++ b/src/compositor/compositor.c @@ -146,12 +146,6 @@ static void on_top_window_actor_destroyed (MetaWindowActor *window_actor, MetaCompositor *compositor); -static gboolean -is_modal (MetaDisplay *display) -{ - return display->event_route == META_EVENT_ROUTE_COMPOSITOR_GRAB; -} - static void sync_actor_stacking (MetaCompositor *compositor); static void @@ -348,32 +342,6 @@ meta_stage_is_focused (MetaDisplay *display) return (display->x11_display->focus_xwindow == window); } -static gboolean -grab_devices (MetaModalOptions options, - guint32 timestamp) -{ - MetaBackend *backend = META_BACKEND (meta_get_backend ()); - - if ((options & META_MODAL_POINTER_ALREADY_GRABBED) == 0) - { - if (!meta_backend_grab_device (backend, META_VIRTUAL_CORE_POINTER_ID, timestamp)) - goto fail; - } - - if ((options & META_MODAL_KEYBOARD_ALREADY_GRABBED) == 0) - { - if (!meta_backend_grab_device (backend, META_VIRTUAL_CORE_KEYBOARD_ID, timestamp)) - goto ungrab_pointer; - } - - return TRUE; - - ungrab_pointer: - meta_backend_ungrab_device (backend, META_VIRTUAL_CORE_POINTER_ID, timestamp); - fail: - return FALSE; -} - void meta_compositor_grab_begin (MetaCompositor *compositor) { @@ -386,86 +354,6 @@ meta_compositor_grab_end (MetaCompositor *compositor) META_COMPOSITOR_GET_CLASS (compositor)->grab_end (compositor); } -gboolean -meta_begin_modal_for_plugin (MetaCompositor *compositor, - MetaPlugin *plugin, - MetaModalOptions options, - guint32 timestamp) -{ - /* To some extent this duplicates code in meta_display_begin_grab_op(), but there - * are significant differences in how we handle grabs that make it difficult to - * merge the two. - */ - MetaCompositorPrivate *priv = - meta_compositor_get_instance_private (compositor); - MetaDisplay *display = priv->display; - -#ifdef HAVE_WAYLAND - if (display->grab_op == META_GRAB_OP_WAYLAND_POPUP) - { - MetaWaylandSeat *seat = meta_wayland_compositor_get_default ()->seat; - meta_wayland_pointer_end_popup_grab (seat->pointer); - } -#endif - - if (is_modal (display) || display->grab_op != META_GRAB_OP_NONE) - return FALSE; - - if (display->x11_display) - { - /* XXX: why is this needed? */ - XIUngrabDevice (display->x11_display->xdisplay, - META_VIRTUAL_CORE_POINTER_ID, - timestamp); - XSync (display->x11_display->xdisplay, False); - } - - if (!grab_devices (options, timestamp)) - return FALSE; - - display->grab_op = META_GRAB_OP_COMPOSITOR; - display->event_route = META_EVENT_ROUTE_COMPOSITOR_GRAB; - display->grab_window = NULL; - display->grab_have_pointer = TRUE; - display->grab_have_keyboard = TRUE; - - g_signal_emit_by_name (display, "grab-op-begin", - display->grab_window, display->grab_op); - - meta_compositor_grab_begin (compositor); - - return TRUE; -} - -void -meta_end_modal_for_plugin (MetaCompositor *compositor, - MetaPlugin *plugin, - guint32 timestamp) -{ - MetaCompositorPrivate *priv = - meta_compositor_get_instance_private (compositor); - MetaDisplay *display = priv->display; - MetaBackend *backend = meta_get_backend (); - MetaWindow *grab_window = display->grab_window; - MetaGrabOp grab_op = display->grab_op; - - g_return_if_fail (is_modal (display)); - - display->grab_op = META_GRAB_OP_NONE; - display->event_route = META_EVENT_ROUTE_NORMAL; - display->grab_window = NULL; - display->grab_have_pointer = FALSE; - display->grab_have_keyboard = FALSE; - - meta_backend_ungrab_device (backend, META_VIRTUAL_CORE_POINTER_ID, timestamp); - meta_backend_ungrab_device (backend, META_VIRTUAL_CORE_KEYBOARD_ID, timestamp); - - meta_compositor_grab_end (compositor); - - g_signal_emit_by_name (display, "grab-op-end", - grab_window, grab_op); -} - static void redirect_windows (MetaX11Display *x11_display) { diff --git a/src/compositor/meta-plugin.c b/src/compositor/meta-plugin.c index 188675a4d..7f000b653 100644 --- a/src/compositor/meta-plugin.c +++ b/src/compositor/meta-plugin.c @@ -135,58 +135,6 @@ meta_plugin_destroy_completed (MetaPlugin *plugin, meta_plugin_window_effect_completed (plugin, actor, META_PLUGIN_DESTROY); } -/** - * meta_plugin_begin_modal: - * @plugin: a #MetaPlugin - * @options: flags that modify the behavior of the modal grab - * @timestamp: the timestamp used for establishing grabs - * - * This function is used to grab the keyboard and mouse for the exclusive - * use of the plugin. Correct operation requires that both the keyboard - * and mouse are grabbed, or thing will break. (In particular, other - * passive X grabs in Meta can trigger but not be handled by the normal - * keybinding handling code.) However, the plugin can establish the keyboard - * and/or mouse grabs ahead of time and pass in the - * %META_MODAL_POINTER_ALREADY_GRABBED and/or %META_MODAL_KEYBOARD_ALREADY_GRABBED - * options. This facility is provided for two reasons: first to allow using - * this function to establish modality after a passive grab, and second to - * allow using obscure features of XGrabPointer() and XGrabKeyboard() without - * having to add them to this API. - * - * Return value: whether we successfully grabbed the keyboard and - * mouse and made the plugin modal. - */ -gboolean -meta_plugin_begin_modal (MetaPlugin *plugin, - MetaModalOptions options, - guint32 timestamp) -{ - MetaPluginPrivate *priv = meta_plugin_get_instance_private (plugin); - - return meta_begin_modal_for_plugin (priv->compositor, plugin, - options, timestamp); -} - -/** - * meta_plugin_end_modal: - * @plugin: a #MetaPlugin - * @timestamp: the time used for releasing grabs - * - * Ends the modal operation begun with meta_plugin_begin_modal(). This - * ungrabs both the mouse and keyboard even when - * %META_MODAL_POINTER_ALREADY_GRABBED or - * %META_MODAL_KEYBOARD_ALREADY_GRABBED were provided as options - * when beginnning the modal operation. - */ -void -meta_plugin_end_modal (MetaPlugin *plugin, - guint32 timestamp) -{ - MetaPluginPrivate *priv = meta_plugin_get_instance_private (plugin); - - meta_end_modal_for_plugin (priv->compositor, plugin, timestamp); -} - /** * meta_plugin_get_display: * @plugin: a #MetaPlugin diff --git a/src/meta/meta-plugin.h b/src/meta/meta-plugin.h index 1bc19a5f0..663a75fa9 100644 --- a/src/meta/meta-plugin.h +++ b/src/meta/meta-plugin.h @@ -332,32 +332,6 @@ void meta_plugin_complete_display_change (MetaPlugin *plugin, gboolean ok); -/** - * MetaModalOptions: - * @META_MODAL_POINTER_ALREADY_GRABBED: if set the pointer is already - * grabbed by the plugin and should not be grabbed again. - * @META_MODAL_KEYBOARD_ALREADY_GRABBED: if set the keyboard is already - * grabbed by the plugin and should not be grabbed again. - * - * Options that can be provided when calling meta_plugin_begin_modal(). - */ -typedef enum -{ - META_MODAL_POINTER_ALREADY_GRABBED = 1 << 0, - META_MODAL_KEYBOARD_ALREADY_GRABBED = 1 << 1 -} MetaModalOptions; - -META_EXPORT -gboolean -meta_plugin_begin_modal (MetaPlugin *plugin, - MetaModalOptions options, - guint32 timestamp); - -META_EXPORT -void -meta_plugin_end_modal (MetaPlugin *plugin, - guint32 timestamp); - META_EXPORT MetaDisplay *meta_plugin_get_display (MetaPlugin *plugin);