launcher: Add session-active property to decouple from backend native

By connecting to changes of the new property in backend native itself.
This removes the dependency on the native backend and allows us to move
it to the generic backend.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4130>
This commit is contained in:
Sebastian Wick 2024-11-12 15:54:02 +01:00
parent 6c5f552088
commit 9169ffade0
3 changed files with 65 additions and 8 deletions

View File

@ -734,6 +734,17 @@ on_started (MetaContext *context,
meta_seat_native_start (META_SEAT_NATIVE (seat)); meta_seat_native_start (META_SEAT_NATIVE (seat));
} }
static void
on_session_active_changed (MetaLauncher *launcher,
GParamSpec *pspec,
MetaBackendNative *native)
{
if (meta_launcher_is_session_active (launcher))
meta_backend_native_resume (native);
else
meta_backend_native_pause (native);
}
static gboolean static gboolean
meta_backend_native_init_basic (MetaBackend *backend, meta_backend_native_init_basic (MetaBackend *backend,
GError **error) GError **error)
@ -776,6 +787,10 @@ meta_backend_native_init_basic (MetaBackend *backend,
priv->mode = META_BACKEND_NATIVE_MODE_HEADLESS; priv->mode = META_BACKEND_NATIVE_MODE_HEADLESS;
g_message ("No seat assigned, running headlessly"); g_message ("No seat assigned, running headlessly");
} }
g_signal_connect (priv->launcher, "notify::session-active",
G_CALLBACK (on_session_active_changed),
native);
} }
priv->device_pool = meta_device_pool_new (native); priv->device_pool = meta_device_pool_new (native);

View File

@ -33,10 +33,20 @@
#include "backends/meta-backend-private.h" #include "backends/meta-backend-private.h"
#include "backends/meta-dbus-utils.h" #include "backends/meta-dbus-utils.h"
#include "backends/native/meta-backend-native.h"
#include "meta-dbus-login1.h" #include "meta-dbus-login1.h"
enum
{
PROP_0,
PROP_SESSION_ACTIVE,
N_PROPS
};
static GParamSpec *obj_props[N_PROPS];
struct _MetaLauncher struct _MetaLauncher
{ {
GObject parent; GObject parent;
@ -59,6 +69,25 @@ meta_launcher_get_seat_id (MetaLauncher *launcher)
return launcher->seat_id; return launcher->seat_id;
} }
static void
meta_launcher_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
MetaLauncher *launcher = META_LAUNCHER (object);
switch (prop_id)
{
case PROP_SESSION_ACTIVE:
g_value_set_boolean (value, launcher->session_active);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void static void
meta_launcher_dispose (GObject *object) meta_launcher_dispose (GObject *object)
{ {
@ -77,6 +106,15 @@ meta_launcher_class_init (MetaLauncherClass *klass)
GObjectClass *object_class = G_OBJECT_CLASS (klass); GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->dispose = meta_launcher_dispose; object_class->dispose = meta_launcher_dispose;
object_class->get_property = meta_launcher_get_property;
obj_props[PROP_SESSION_ACTIVE] =
g_param_spec_boolean ("session-active", NULL, NULL,
TRUE,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, N_PROPS, obj_props);
} }
static void static void
@ -334,8 +372,6 @@ get_seat_proxy (char *seat_id,
static void static void
sync_active (MetaLauncher *self) sync_active (MetaLauncher *self)
{ {
MetaBackend *backend = self->backend;
MetaBackendNative *backend_native = META_BACKEND_NATIVE (backend);
MetaDBusLogin1Session *session_proxy = self->session_proxy; MetaDBusLogin1Session *session_proxy = self->session_proxy;
gboolean active; gboolean active;
@ -344,11 +380,8 @@ sync_active (MetaLauncher *self)
return; return;
self->session_active = active; self->session_active = active;
g_object_notify_by_pspec (G_OBJECT (self),
if (active) obj_props[PROP_SESSION_ACTIVE]);
meta_backend_native_resume (backend_native);
else
meta_backend_native_pause (backend_native);
} }
static void static void
@ -454,6 +487,7 @@ meta_launcher_new (MetaBackend *backend,
} }
g_signal_connect (self->session_proxy, "notify::active", G_CALLBACK (on_active_changed), self); g_signal_connect (self->session_proxy, "notify::active", G_CALLBACK (on_active_changed), self);
sync_active (self);
return self; return self;
@ -477,6 +511,12 @@ meta_launcher_activate_vt (MetaLauncher *launcher,
NULL, error); NULL, error);
} }
gboolean
meta_launcher_is_session_active (MetaLauncher *launcher)
{
return launcher->session_active;
}
MetaBackend * MetaBackend *
meta_launcher_get_backend (MetaLauncher *launcher) meta_launcher_get_backend (MetaLauncher *launcher)
{ {

View File

@ -38,6 +38,8 @@ gboolean meta_launcher_activate_vt (MetaLauncher *self,
signed char vt, signed char vt,
GError **error); GError **error);
gboolean meta_launcher_is_session_active (MetaLauncher *launcher);
const char * meta_launcher_get_seat_id (MetaLauncher *launcher); const char * meta_launcher_get_seat_id (MetaLauncher *launcher);
MetaDBusLogin1Session * meta_launcher_get_session_proxy (MetaLauncher *launcher); MetaDBusLogin1Session * meta_launcher_get_session_proxy (MetaLauncher *launcher);