backend: Create MetaLauncher in backend and not in backend native
It also adds a vfunc so the MetaBackend subclasses can add more constraints on what the launcher must support. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4130>
This commit is contained in:
parent
7b944a52fc
commit
30c6104620
@ -80,6 +80,10 @@ struct _MetaBackendClass
|
||||
ClutterSeat * (* create_default_seat) (MetaBackend *backend,
|
||||
GError **error);
|
||||
|
||||
gboolean (* create_launcher) (MetaBackend *backend,
|
||||
MetaLauncher **launcher_out,
|
||||
GError **error);
|
||||
|
||||
MetaBackendCapabilities (* get_capabilities) (MetaBackend *backend);
|
||||
|
||||
MetaCursorRenderer * (* get_cursor_renderer) (MetaBackend *backend,
|
||||
@ -154,6 +158,9 @@ MetaIdleManager * meta_backend_get_idle_manager (MetaBackend *backend);
|
||||
META_EXPORT_TEST
|
||||
MetaColorManager * meta_backend_get_color_manager (MetaBackend *backend);
|
||||
|
||||
META_EXPORT_TEST
|
||||
MetaLauncher * meta_backend_get_launcher (MetaBackend *backend);
|
||||
|
||||
MetaCursorRenderer * meta_backend_get_cursor_renderer_for_device (MetaBackend *backend,
|
||||
ClutterInputDevice *device);
|
||||
META_EXPORT_TEST
|
||||
|
@ -62,6 +62,7 @@
|
||||
#include "backends/meta-input-capture.h"
|
||||
#include "backends/meta-input-mapper-private.h"
|
||||
#include "backends/meta-input-settings-private.h"
|
||||
#include "backends/meta-launcher.h"
|
||||
#include "backends/meta-logical-monitor.h"
|
||||
#include "backends/meta-monitor-manager-dummy.h"
|
||||
#include "backends/meta-remote-access-controller-private.h"
|
||||
@ -144,6 +145,7 @@ struct _MetaBackendPrivate
|
||||
MetaIdleManager *idle_manager;
|
||||
MetaRenderer *renderer;
|
||||
MetaColorManager *color_manager;
|
||||
MetaLauncher *launcher;
|
||||
#ifdef HAVE_EGL
|
||||
MetaEgl *egl;
|
||||
#endif
|
||||
@ -256,6 +258,8 @@ meta_backend_finalize (GObject *object)
|
||||
g_cancellable_cancel (priv->cancellable);
|
||||
g_clear_object (&priv->cancellable);
|
||||
|
||||
g_clear_object (&priv->launcher);
|
||||
|
||||
if (priv->sleep_signal_id)
|
||||
{
|
||||
g_dbus_connection_signal_unsubscribe (priv->system_bus, priv->sleep_signal_id);
|
||||
@ -923,6 +927,16 @@ meta_backend_class_init (MetaBackendClass *klass)
|
||||
G_TYPE_NONE, 0);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_backend_create_launcher (MetaBackend *backend,
|
||||
MetaLauncher **launcher_out,
|
||||
GError **error)
|
||||
{
|
||||
return META_BACKEND_GET_CLASS (backend)->create_launcher (backend,
|
||||
launcher_out,
|
||||
error);
|
||||
}
|
||||
|
||||
static MetaMonitorManager *
|
||||
meta_backend_create_monitor_manager (MetaBackend *backend,
|
||||
GError **error)
|
||||
@ -1217,6 +1231,7 @@ meta_backend_initable_init (GInitable *initable,
|
||||
MetaBackend *backend = META_BACKEND (initable);
|
||||
MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
|
||||
MetaDebugControl *debug_control;
|
||||
g_autoptr (GError) local_error = NULL;
|
||||
|
||||
priv->in_init = TRUE;
|
||||
|
||||
@ -1229,6 +1244,9 @@ meta_backend_initable_init (GInitable *initable,
|
||||
system_bus_gotten_cb,
|
||||
backend);
|
||||
|
||||
if (!meta_backend_create_launcher (backend, &priv->launcher, error))
|
||||
return FALSE;
|
||||
|
||||
priv->settings = meta_settings_new (backend);
|
||||
|
||||
priv->dnd = meta_dnd_new (backend);
|
||||
@ -1429,6 +1447,17 @@ meta_backend_get_color_manager (MetaBackend *backend)
|
||||
return priv->color_manager;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_backend_get_launcher: (skip)
|
||||
*/
|
||||
MetaLauncher *
|
||||
meta_backend_get_launcher (MetaBackend *backend)
|
||||
{
|
||||
MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
|
||||
|
||||
return priv->launcher;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_backend_get_orientation_manager:
|
||||
*
|
||||
|
@ -83,7 +83,6 @@ typedef struct _MetaBackendNativePrivate
|
||||
{
|
||||
MetaBackend parent;
|
||||
|
||||
MetaLauncher *launcher;
|
||||
MetaDevicePool *device_pool;
|
||||
MetaUdev *udev;
|
||||
MetaKms *kms;
|
||||
@ -101,6 +100,10 @@ G_DEFINE_TYPE_WITH_PRIVATE (MetaBackendNative,
|
||||
meta_backend_native,
|
||||
META_TYPE_BACKEND)
|
||||
|
||||
static void meta_backend_native_resume (MetaBackendNative *native);
|
||||
|
||||
static void meta_backend_native_pause (MetaBackendNative *native);
|
||||
|
||||
static void
|
||||
meta_backend_native_dispose (GObject *object)
|
||||
{
|
||||
@ -114,7 +117,6 @@ meta_backend_native_dispose (GObject *object)
|
||||
g_clear_object (&priv->kms);
|
||||
g_clear_object (&priv->udev);
|
||||
g_clear_object (&priv->device_pool);
|
||||
g_clear_object (&priv->launcher);
|
||||
}
|
||||
|
||||
static ClutterBackend *
|
||||
@ -339,12 +341,14 @@ meta_backend_native_get_seat_id (MetaBackendNative *backend_native)
|
||||
{
|
||||
MetaBackendNativePrivate *priv =
|
||||
meta_backend_native_get_instance_private (backend_native);
|
||||
MetaLauncher *launcher =
|
||||
meta_backend_get_launcher (META_BACKEND (backend_native));
|
||||
|
||||
switch (priv->mode)
|
||||
{
|
||||
case META_BACKEND_NATIVE_MODE_DEFAULT:
|
||||
case META_BACKEND_NATIVE_MODE_TEST_VKMS:
|
||||
return meta_launcher_get_seat_id (priv->launcher);
|
||||
return meta_launcher_get_seat_id (launcher);
|
||||
case META_BACKEND_NATIVE_MODE_HEADLESS:
|
||||
case META_BACKEND_NATIVE_MODE_TEST_HEADLESS:
|
||||
return "seat0";
|
||||
@ -745,19 +749,18 @@ on_session_active_changed (MetaLauncher *launcher,
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_backend_native_init_basic (MetaBackend *backend,
|
||||
GError **error)
|
||||
meta_backend_native_create_launcher (MetaBackend *backend,
|
||||
MetaLauncher **launcher_out,
|
||||
GError **error)
|
||||
{
|
||||
MetaBackendNative *native = META_BACKEND_NATIVE (backend);
|
||||
MetaBackendNativePrivate *priv =
|
||||
meta_backend_native_get_instance_private (native);
|
||||
MetaKmsFlags kms_flags;
|
||||
g_autoptr (MetaLauncher) launcher = NULL;
|
||||
const char *session_id = NULL;
|
||||
const char *seat_id = NULL;
|
||||
|
||||
priv->startup_render_devices =
|
||||
g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||
g_free, g_object_unref);
|
||||
*launcher_out = NULL;
|
||||
|
||||
switch (priv->mode)
|
||||
{
|
||||
@ -772,31 +775,47 @@ meta_backend_native_init_basic (MetaBackend *backend,
|
||||
break;
|
||||
}
|
||||
|
||||
if (priv->mode != META_BACKEND_NATIVE_MODE_HEADLESS &&
|
||||
priv->mode != META_BACKEND_NATIVE_MODE_TEST_HEADLESS)
|
||||
if (priv->mode == META_BACKEND_NATIVE_MODE_HEADLESS ||
|
||||
priv->mode == META_BACKEND_NATIVE_MODE_TEST_HEADLESS)
|
||||
return TRUE;
|
||||
|
||||
launcher = meta_launcher_new (backend, session_id, seat_id, error);
|
||||
if (!launcher)
|
||||
return FALSE;
|
||||
|
||||
if (!meta_launcher_get_seat_id (launcher))
|
||||
{
|
||||
priv->launcher = meta_launcher_new (backend,
|
||||
session_id, seat_id,
|
||||
error);
|
||||
if (!priv->launcher)
|
||||
return FALSE;
|
||||
|
||||
if (!meta_launcher_get_seat_id (priv->launcher))
|
||||
{
|
||||
priv->mode = META_BACKEND_NATIVE_MODE_HEADLESS;
|
||||
g_message ("No seat assigned, running headlessly");
|
||||
}
|
||||
else if (!meta_launcher_is_session_controller (priv->launcher))
|
||||
{
|
||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||
"Native backend mode needs to be session controller");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
g_signal_connect (priv->launcher, "notify::session-active",
|
||||
G_CALLBACK (on_session_active_changed),
|
||||
native);
|
||||
priv->mode = META_BACKEND_NATIVE_MODE_HEADLESS;
|
||||
g_message ("No seat assigned, running headlessly");
|
||||
}
|
||||
else if (!meta_launcher_is_session_controller (launcher))
|
||||
{
|
||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||
"Native backend mode needs to be session controller");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
g_signal_connect (launcher, "notify::session-active",
|
||||
G_CALLBACK (on_session_active_changed),
|
||||
native);
|
||||
|
||||
*launcher_out = g_steal_pointer (&launcher);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
static gboolean
|
||||
meta_backend_native_init_basic (MetaBackend *backend,
|
||||
GError **error)
|
||||
{
|
||||
MetaBackendNative *native = META_BACKEND_NATIVE (backend);
|
||||
MetaBackendNativePrivate *priv =
|
||||
meta_backend_native_get_instance_private (native);
|
||||
MetaKmsFlags kms_flags;
|
||||
|
||||
priv->startup_render_devices =
|
||||
g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||
g_free, g_object_unref);
|
||||
|
||||
priv->device_pool = meta_device_pool_new (native);
|
||||
priv->udev = meta_udev_new (native);
|
||||
@ -857,6 +876,7 @@ meta_backend_native_class_init (MetaBackendNativeClass *klass)
|
||||
backend_class->init_post = meta_backend_native_init_post;
|
||||
backend_class->get_capabilities = meta_backend_native_get_capabilities;
|
||||
|
||||
backend_class->create_launcher = meta_backend_native_create_launcher;
|
||||
backend_class->create_monitor_manager = meta_backend_native_create_monitor_manager;
|
||||
backend_class->create_color_manager = meta_backend_native_create_color_manager;
|
||||
backend_class->get_cursor_renderer = meta_backend_native_get_cursor_renderer;
|
||||
@ -893,10 +913,7 @@ meta_backend_native_init (MetaBackendNative *backend_native)
|
||||
MetaLauncher *
|
||||
meta_backend_native_get_launcher (MetaBackendNative *backend_native)
|
||||
{
|
||||
MetaBackendNativePrivate *priv =
|
||||
meta_backend_native_get_instance_private (backend_native);
|
||||
|
||||
return priv->launcher;
|
||||
return meta_backend_get_launcher (META_BACKEND (backend_native));
|
||||
}
|
||||
|
||||
MetaDevicePool *
|
||||
@ -951,7 +968,7 @@ meta_backend_native_activate_vt (MetaBackendNative *backend_native,
|
||||
g_assert_not_reached ();
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
meta_backend_native_pause (MetaBackendNative *backend_native)
|
||||
{
|
||||
MetaBackendNativePrivate *priv =
|
||||
@ -976,7 +993,8 @@ meta_backend_native_pause (MetaBackendNative *backend_native)
|
||||
meta_monitor_manager_native_pause (monitor_manager_native);
|
||||
}
|
||||
|
||||
void meta_backend_native_resume (MetaBackendNative *native)
|
||||
static void
|
||||
meta_backend_native_resume (MetaBackendNative *native)
|
||||
{
|
||||
MetaBackendNativePrivate *priv =
|
||||
meta_backend_native_get_instance_private (native);
|
||||
|
@ -41,10 +41,6 @@ gboolean meta_backend_native_activate_vt (MetaBackendNative *backend_native,
|
||||
int vt,
|
||||
GError **error);
|
||||
|
||||
void meta_backend_native_pause (MetaBackendNative *backend_native);
|
||||
|
||||
void meta_backend_native_resume (MetaBackendNative *backend_native);
|
||||
|
||||
MetaLauncher * meta_backend_native_get_launcher (MetaBackendNative *native);
|
||||
|
||||
META_EXPORT_TEST
|
||||
|
@ -43,6 +43,7 @@
|
||||
#include "backends/meta-color-manager.h"
|
||||
#include "backends/meta-idle-monitor-private.h"
|
||||
#include "backends/meta-keymap-utils.h"
|
||||
#include "backends/meta-launcher.h"
|
||||
#include "backends/meta-stage-private.h"
|
||||
#include "backends/x11/meta-barrier-x11.h"
|
||||
#include "backends/x11/meta-clutter-backend-x11.h"
|
||||
@ -611,6 +612,31 @@ meta_backend_x11_init_post (MetaBackend *backend,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_backend_x11_create_launcher (MetaBackend *backend,
|
||||
MetaLauncher **launcher_out,
|
||||
GError **error)
|
||||
{
|
||||
g_autoptr (MetaLauncher) launcher = NULL;
|
||||
g_autoptr (GError) local_error = NULL;
|
||||
|
||||
*launcher_out = NULL;
|
||||
|
||||
launcher = meta_launcher_new (backend, NULL, NULL, &local_error);
|
||||
|
||||
if (!launcher)
|
||||
{
|
||||
meta_topic (META_DEBUG_BACKEND,
|
||||
"Creating launcher for the X11 backend failed: %s",
|
||||
local_error->message);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
*launcher_out = g_steal_pointer (&launcher);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static ClutterBackend *
|
||||
meta_backend_x11_create_clutter_backend (MetaBackend *backend,
|
||||
ClutterContext *context)
|
||||
@ -1052,9 +1078,12 @@ meta_backend_x11_class_init (MetaBackendX11Class *klass)
|
||||
|
||||
object_class->dispose = meta_backend_x11_dispose;
|
||||
object_class->finalize = meta_backend_x11_finalize;
|
||||
|
||||
backend_class->init_basic = meta_backend_x11_init_basic;
|
||||
backend_class->init_render = meta_backend_x11_init_render;
|
||||
backend_class->init_post = meta_backend_x11_init_post;
|
||||
|
||||
backend_class->create_launcher = meta_backend_x11_create_launcher;
|
||||
backend_class->create_clutter_backend = meta_backend_x11_create_clutter_backend;
|
||||
backend_class->create_color_manager = meta_backend_x11_create_color_manager;
|
||||
backend_class->create_default_seat = meta_backend_x11_create_default_seat;
|
||||
|
Loading…
x
Reference in New Issue
Block a user