mirror of
https://github.com/brl/mutter.git
synced 2024-12-26 04:42:14 +00:00
compositor: Remove meta_plugin_begin/end_modal
Amazingly, this is no longer used. This way to let Clutter grab input is no longer necessary. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2100>
This commit is contained in:
parent
527cc51665
commit
b6de66e353
@ -44,14 +44,6 @@ void meta_compositor_remove_window_actor (MetaCompositor *compositor,
|
|||||||
|
|
||||||
void meta_switch_workspace_completed (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);
|
MetaPluginManager * meta_compositor_get_plugin_manager (MetaCompositor *compositor);
|
||||||
|
|
||||||
int64_t meta_compositor_monotonic_to_high_res_xserver_time (MetaCompositor *compositor,
|
int64_t meta_compositor_monotonic_to_high_res_xserver_time (MetaCompositor *compositor,
|
||||||
|
@ -146,12 +146,6 @@ static void
|
|||||||
on_top_window_actor_destroyed (MetaWindowActor *window_actor,
|
on_top_window_actor_destroyed (MetaWindowActor *window_actor,
|
||||||
MetaCompositor *compositor);
|
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 sync_actor_stacking (MetaCompositor *compositor);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -348,32 +342,6 @@ meta_stage_is_focused (MetaDisplay *display)
|
|||||||
return (display->x11_display->focus_xwindow == window);
|
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
|
void
|
||||||
meta_compositor_grab_begin (MetaCompositor *compositor)
|
meta_compositor_grab_begin (MetaCompositor *compositor)
|
||||||
{
|
{
|
||||||
@ -386,86 +354,6 @@ meta_compositor_grab_end (MetaCompositor *compositor)
|
|||||||
META_COMPOSITOR_GET_CLASS (compositor)->grab_end (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
|
static void
|
||||||
redirect_windows (MetaX11Display *x11_display)
|
redirect_windows (MetaX11Display *x11_display)
|
||||||
{
|
{
|
||||||
|
@ -135,58 +135,6 @@ meta_plugin_destroy_completed (MetaPlugin *plugin,
|
|||||||
meta_plugin_window_effect_completed (plugin, actor, META_PLUGIN_DESTROY);
|
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:
|
* meta_plugin_get_display:
|
||||||
* @plugin: a #MetaPlugin
|
* @plugin: a #MetaPlugin
|
||||||
|
@ -332,32 +332,6 @@ void
|
|||||||
meta_plugin_complete_display_change (MetaPlugin *plugin,
|
meta_plugin_complete_display_change (MetaPlugin *plugin,
|
||||||
gboolean ok);
|
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
|
META_EXPORT
|
||||||
MetaDisplay *meta_plugin_get_display (MetaPlugin *plugin);
|
MetaDisplay *meta_plugin_get_display (MetaPlugin *plugin);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user