compositor: Refactor backend-specific code into MetaCompositor vfuncs
Do these Wayland operations (that apply on both native and nested backends) in the MetaCompositorServer subclass. We want to add more backend specific behavior here in the future. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1659>
This commit is contained in:
parent
5a1e942f3b
commit
00c7f45a0f
@ -32,6 +32,8 @@ struct _MetaCompositorClass
|
|||||||
MetaWindow *window);
|
MetaWindow *window);
|
||||||
int64_t (* monotonic_to_high_res_xserver_time) (MetaCompositor *compositor,
|
int64_t (* monotonic_to_high_res_xserver_time) (MetaCompositor *compositor,
|
||||||
int64_t time_us);
|
int64_t time_us);
|
||||||
|
void (* grab_begin) (MetaCompositor *compositor);
|
||||||
|
void (* grab_end) (MetaCompositor *compositor);
|
||||||
};
|
};
|
||||||
|
|
||||||
gboolean meta_compositor_do_manage (MetaCompositor *compositor,
|
gboolean meta_compositor_do_manage (MetaCompositor *compositor,
|
||||||
|
@ -56,7 +56,6 @@
|
|||||||
|
|
||||||
#include <X11/extensions/Xcomposite.h>
|
#include <X11/extensions/Xcomposite.h>
|
||||||
|
|
||||||
#include "backends/meta-dnd-private.h"
|
|
||||||
#include "backends/x11/meta-backend-x11.h"
|
#include "backends/x11/meta-backend-x11.h"
|
||||||
#include "backends/x11/meta-event-x11.h"
|
#include "backends/x11/meta-event-x11.h"
|
||||||
#include "backends/x11/meta-stage-x11.h"
|
#include "backends/x11/meta-stage-x11.h"
|
||||||
@ -66,7 +65,6 @@
|
|||||||
#include "compositor/meta-window-actor-x11.h"
|
#include "compositor/meta-window-actor-x11.h"
|
||||||
#include "compositor/meta-window-actor-private.h"
|
#include "compositor/meta-window-actor-private.h"
|
||||||
#include "compositor/meta-window-group-private.h"
|
#include "compositor/meta-window-group-private.h"
|
||||||
#include "core/display-private.h"
|
|
||||||
#include "core/frame.h"
|
#include "core/frame.h"
|
||||||
#include "core/util-private.h"
|
#include "core/util-private.h"
|
||||||
#include "core/window-private.h"
|
#include "core/window-private.h"
|
||||||
@ -384,6 +382,18 @@ grab_devices (MetaModalOptions options,
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_compositor_grab_begin (MetaCompositor *compositor)
|
||||||
|
{
|
||||||
|
META_COMPOSITOR_GET_CLASS (compositor)->grab_begin (compositor);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_compositor_grab_end (MetaCompositor *compositor)
|
||||||
|
{
|
||||||
|
META_COMPOSITOR_GET_CLASS (compositor)->grab_end (compositor);
|
||||||
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
meta_begin_modal_for_plugin (MetaCompositor *compositor,
|
meta_begin_modal_for_plugin (MetaCompositor *compositor,
|
||||||
MetaPlugin *plugin,
|
MetaPlugin *plugin,
|
||||||
@ -431,15 +441,7 @@ meta_begin_modal_for_plugin (MetaCompositor *compositor,
|
|||||||
meta_plugin_get_display (plugin),
|
meta_plugin_get_display (plugin),
|
||||||
display->grab_window, display->grab_op);
|
display->grab_window, display->grab_op);
|
||||||
|
|
||||||
if (meta_is_wayland_compositor ())
|
meta_compositor_grab_begin (compositor);
|
||||||
{
|
|
||||||
meta_display_sync_wayland_input_focus (display);
|
|
||||||
meta_display_cancel_touch (display);
|
|
||||||
|
|
||||||
#ifdef HAVE_WAYLAND
|
|
||||||
meta_dnd_wayland_handle_begin_modal (compositor);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@ -467,13 +469,7 @@ meta_end_modal_for_plugin (MetaCompositor *compositor,
|
|||||||
meta_backend_ungrab_device (backend, META_VIRTUAL_CORE_POINTER_ID, timestamp);
|
meta_backend_ungrab_device (backend, META_VIRTUAL_CORE_POINTER_ID, timestamp);
|
||||||
meta_backend_ungrab_device (backend, META_VIRTUAL_CORE_KEYBOARD_ID, timestamp);
|
meta_backend_ungrab_device (backend, META_VIRTUAL_CORE_KEYBOARD_ID, timestamp);
|
||||||
|
|
||||||
#ifdef HAVE_WAYLAND
|
meta_compositor_grab_end (compositor);
|
||||||
if (meta_is_wayland_compositor ())
|
|
||||||
{
|
|
||||||
meta_dnd_wayland_handle_end_modal (compositor);
|
|
||||||
meta_display_sync_wayland_input_focus (display);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
g_signal_emit_by_name (display, "grab-op-end",
|
g_signal_emit_by_name (display, "grab-op-end",
|
||||||
meta_plugin_get_display (plugin),
|
meta_plugin_get_display (plugin),
|
||||||
|
@ -20,7 +20,9 @@
|
|||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
|
#include "backends/meta-dnd-private.h"
|
||||||
#include "compositor/meta-compositor-server.h"
|
#include "compositor/meta-compositor-server.h"
|
||||||
|
#include "core/display-private.h"
|
||||||
|
|
||||||
G_DEFINE_TYPE (MetaCompositorServer, meta_compositor_server, META_TYPE_COMPOSITOR)
|
G_DEFINE_TYPE (MetaCompositorServer, meta_compositor_server, META_TYPE_COMPOSITOR)
|
||||||
|
|
||||||
@ -43,6 +45,32 @@ meta_compositor_server_monotonic_to_high_res_xserver_time (MetaCompositor *compo
|
|||||||
return meta_translate_to_high_res_xserver_time (monotonic_time_us);
|
return meta_translate_to_high_res_xserver_time (monotonic_time_us);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_compositor_server_grab_begin (MetaCompositor *compositor)
|
||||||
|
{
|
||||||
|
MetaDisplay *display;
|
||||||
|
|
||||||
|
display = meta_compositor_get_display (compositor);
|
||||||
|
meta_display_sync_wayland_input_focus (display);
|
||||||
|
meta_display_cancel_touch (display);
|
||||||
|
|
||||||
|
#ifdef HAVE_WAYLAND
|
||||||
|
meta_dnd_wayland_handle_begin_modal (compositor);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_compositor_server_grab_end (MetaCompositor *compositor)
|
||||||
|
{
|
||||||
|
MetaDisplay *display;
|
||||||
|
|
||||||
|
display = meta_compositor_get_display (compositor);
|
||||||
|
#ifdef HAVE_WAYLAND
|
||||||
|
meta_dnd_wayland_handle_end_modal (compositor);
|
||||||
|
#endif
|
||||||
|
meta_display_sync_wayland_input_focus (display);
|
||||||
|
}
|
||||||
|
|
||||||
MetaCompositorServer *
|
MetaCompositorServer *
|
||||||
meta_compositor_server_new (MetaDisplay *display,
|
meta_compositor_server_new (MetaDisplay *display,
|
||||||
MetaBackend *backend)
|
MetaBackend *backend)
|
||||||
@ -67,4 +95,6 @@ meta_compositor_server_class_init (MetaCompositorServerClass *klass)
|
|||||||
compositor_class->unmanage = meta_compositor_server_unmanage;
|
compositor_class->unmanage = meta_compositor_server_unmanage;
|
||||||
compositor_class->monotonic_to_high_res_xserver_time =
|
compositor_class->monotonic_to_high_res_xserver_time =
|
||||||
meta_compositor_server_monotonic_to_high_res_xserver_time;
|
meta_compositor_server_monotonic_to_high_res_xserver_time;
|
||||||
|
compositor_class->grab_begin = meta_compositor_server_grab_begin;
|
||||||
|
compositor_class->grab_end = meta_compositor_server_grab_end;
|
||||||
}
|
}
|
||||||
|
@ -439,6 +439,16 @@ meta_compositor_x11_monotonic_to_high_res_xserver_time (MetaCompositor *composit
|
|||||||
return monotonic_time_us + compositor_x11->xserver_time_offset_us;
|
return monotonic_time_us + compositor_x11->xserver_time_offset_us;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_compositor_x11_grab_begin (MetaCompositor *compositor)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_compositor_x11_grab_end (MetaCompositor *compositor)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
Window
|
Window
|
||||||
meta_compositor_x11_get_output_xwindow (MetaCompositorX11 *compositor_x11)
|
meta_compositor_x11_get_output_xwindow (MetaCompositorX11 *compositor_x11)
|
||||||
{
|
{
|
||||||
@ -508,4 +518,6 @@ meta_compositor_x11_class_init (MetaCompositorX11Class *klass)
|
|||||||
compositor_class->remove_window = meta_compositor_x11_remove_window;
|
compositor_class->remove_window = meta_compositor_x11_remove_window;
|
||||||
compositor_class->monotonic_to_high_res_xserver_time =
|
compositor_class->monotonic_to_high_res_xserver_time =
|
||||||
meta_compositor_x11_monotonic_to_high_res_xserver_time;
|
meta_compositor_x11_monotonic_to_high_res_xserver_time;
|
||||||
|
compositor_class->grab_begin = meta_compositor_x11_grab_begin;
|
||||||
|
compositor_class->grab_end = meta_compositor_x11_grab_end;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user