dbus-session: Make some properties part of the interface
The pointer to the manager, the peer name and the ID are things that are always metadata related to a session, so make them properties on the interface instead of duplicating them. The implementations still need to keep track of them, but their existance is shared. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2713>
This commit is contained in:
parent
5731268087
commit
849766652a
@ -288,7 +288,7 @@ on_session_closed (MetaDbusSession *session,
|
|||||||
{
|
{
|
||||||
MetaDbusSessionManagerPrivate *priv =
|
MetaDbusSessionManagerPrivate *priv =
|
||||||
meta_dbus_session_manager_get_instance_private (session_manager);
|
meta_dbus_session_manager_get_instance_private (session_manager);
|
||||||
const char *session_id;
|
g_autofree char *session_id = NULL;
|
||||||
|
|
||||||
session_id = meta_dbus_session_get_id (session);
|
session_id = meta_dbus_session_get_id (session);
|
||||||
g_hash_table_remove (priv->sessions, session_id);
|
g_hash_table_remove (priv->sessions, session_id);
|
||||||
|
@ -26,6 +26,8 @@
|
|||||||
|
|
||||||
#include <gio/gio.h>
|
#include <gio/gio.h>
|
||||||
|
|
||||||
|
#include "backends/meta-dbus-session-manager.h"
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
SESSION_SIGNAL_SESSION_CLOSED,
|
SESSION_SIGNAL_SESSION_CLOSED,
|
||||||
@ -186,9 +188,52 @@ meta_dbus_session_notify_closed (MetaDbusSession *session)
|
|||||||
g_signal_emit (session, session_signals[SESSION_SIGNAL_SESSION_CLOSED], 0);
|
g_signal_emit (session, session_signals[SESSION_SIGNAL_SESSION_CLOSED], 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
meta_dbus_session_install_properties (GObjectClass *object_class,
|
||||||
|
unsigned int first_prop)
|
||||||
|
{
|
||||||
|
g_object_class_override_property (object_class,
|
||||||
|
first_prop + META_DBUS_SESSION_PROP_SESSION_MANAGER,
|
||||||
|
"session-manager");
|
||||||
|
g_object_class_override_property (object_class,
|
||||||
|
first_prop + META_DBUS_SESSION_PROP_PEER_NAME,
|
||||||
|
"peer-name");
|
||||||
|
g_object_class_override_property (object_class,
|
||||||
|
first_prop + META_DBUS_SESSION_PROP_ID,
|
||||||
|
"id");
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
meta_dbus_session_default_init (MetaDbusSessionInterface *iface)
|
meta_dbus_session_default_init (MetaDbusSessionInterface *iface)
|
||||||
{
|
{
|
||||||
|
g_object_interface_install_property (
|
||||||
|
iface,
|
||||||
|
g_param_spec_object ("session-manager",
|
||||||
|
"session manager",
|
||||||
|
"D-Bus session manager",
|
||||||
|
META_TYPE_DBUS_SESSION_MANAGER,
|
||||||
|
G_PARAM_READWRITE |
|
||||||
|
G_PARAM_CONSTRUCT_ONLY |
|
||||||
|
G_PARAM_STATIC_STRINGS));
|
||||||
|
g_object_interface_install_property (
|
||||||
|
iface,
|
||||||
|
g_param_spec_string ("peer-name",
|
||||||
|
"peer name",
|
||||||
|
"D-Bus peer name",
|
||||||
|
NULL,
|
||||||
|
G_PARAM_READWRITE |
|
||||||
|
G_PARAM_CONSTRUCT_ONLY |
|
||||||
|
G_PARAM_STATIC_STRINGS));
|
||||||
|
g_object_interface_install_property (
|
||||||
|
iface,
|
||||||
|
g_param_spec_string ("id",
|
||||||
|
"session id",
|
||||||
|
"Unique ID of the session",
|
||||||
|
NULL,
|
||||||
|
G_PARAM_READWRITE |
|
||||||
|
G_PARAM_CONSTRUCT_ONLY |
|
||||||
|
G_PARAM_STATIC_STRINGS));
|
||||||
|
|
||||||
session_signals[SESSION_SIGNAL_SESSION_CLOSED] =
|
session_signals[SESSION_SIGNAL_SESSION_CLOSED] =
|
||||||
g_signal_new ("session-closed",
|
g_signal_new ("session-closed",
|
||||||
G_TYPE_FROM_INTERFACE (iface),
|
G_TYPE_FROM_INTERFACE (iface),
|
||||||
@ -232,8 +277,32 @@ meta_dbus_session_close (MetaDbusSession *session)
|
|||||||
META_DBUS_SESSION_GET_IFACE (session)->close (session);
|
META_DBUS_SESSION_GET_IFACE (session)->close (session);
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *
|
MetaDbusSessionManager *
|
||||||
|
meta_dbus_session_manager (MetaDbusSessionManager *session)
|
||||||
|
{
|
||||||
|
MetaDbusSessionManager *manager;
|
||||||
|
|
||||||
|
g_object_get (session, "session-manager", &manager, NULL);
|
||||||
|
|
||||||
|
return manager;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
meta_dbus_session_get_peer_name (MetaDbusSession *session)
|
||||||
|
{
|
||||||
|
char *peer_name;
|
||||||
|
|
||||||
|
g_object_get (session, "peer-name", &peer_name, NULL);
|
||||||
|
|
||||||
|
return peer_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
meta_dbus_session_get_id (MetaDbusSession *session)
|
meta_dbus_session_get_id (MetaDbusSession *session)
|
||||||
{
|
{
|
||||||
return META_DBUS_SESSION_GET_IFACE (session)->get_id (session);
|
char *id;
|
||||||
|
|
||||||
|
g_object_get (session, "id", &id, NULL);
|
||||||
|
|
||||||
|
return id;
|
||||||
}
|
}
|
||||||
|
@ -25,6 +25,15 @@
|
|||||||
|
|
||||||
#include <glib-object.h>
|
#include <glib-object.h>
|
||||||
|
|
||||||
|
#include "backends/meta-backend-types.h"
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
META_DBUS_SESSION_PROP_SESSION_MANAGER,
|
||||||
|
META_DBUS_SESSION_PROP_PEER_NAME,
|
||||||
|
META_DBUS_SESSION_PROP_ID,
|
||||||
|
};
|
||||||
|
|
||||||
#define META_TYPE_DBUS_SESSION (meta_dbus_session_get_type ())
|
#define META_TYPE_DBUS_SESSION (meta_dbus_session_get_type ())
|
||||||
G_DECLARE_INTERFACE (MetaDbusSession, meta_dbus_session,
|
G_DECLARE_INTERFACE (MetaDbusSession, meta_dbus_session,
|
||||||
META, DBUS_SESSION,
|
META, DBUS_SESSION,
|
||||||
@ -35,7 +44,6 @@ struct _MetaDbusSessionInterface
|
|||||||
GTypeInterface parent_iface;
|
GTypeInterface parent_iface;
|
||||||
|
|
||||||
void (* close) (MetaDbusSession *session);
|
void (* close) (MetaDbusSession *session);
|
||||||
const char * (* get_id) (MetaDbusSession *session);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#define META_TYPE_DBUS_SESSION_WATCHER (meta_dbus_session_watcher_get_type ())
|
#define META_TYPE_DBUS_SESSION_WATCHER (meta_dbus_session_watcher_get_type ())
|
||||||
@ -48,10 +56,17 @@ void meta_dbus_session_watcher_watch_session (MetaDbusSessionWatcher *session_wa
|
|||||||
const char *client_dbus_name,
|
const char *client_dbus_name,
|
||||||
MetaDbusSession *session);
|
MetaDbusSession *session);
|
||||||
|
|
||||||
|
void meta_dbus_session_install_properties (GObjectClass *object_class,
|
||||||
|
unsigned int first_prop);
|
||||||
|
|
||||||
void meta_dbus_session_notify_closed (MetaDbusSession *session);
|
void meta_dbus_session_notify_closed (MetaDbusSession *session);
|
||||||
|
|
||||||
void meta_dbus_session_close (MetaDbusSession *session);
|
void meta_dbus_session_close (MetaDbusSession *session);
|
||||||
|
|
||||||
const char * meta_dbus_session_get_id (MetaDbusSession *session);
|
MetaDbusSessionManager * meta_dbus_session_manager (MetaDbusSessionManager *session);
|
||||||
|
|
||||||
|
char * meta_dbus_session_get_peer_name (MetaDbusSession *session);
|
||||||
|
|
||||||
|
char * meta_dbus_session_get_id (MetaDbusSession *session);
|
||||||
|
|
||||||
#endif /* META_DBUS_SESSION_WATCHER_H */
|
#endif /* META_DBUS_SESSION_WATCHER_H */
|
||||||
|
@ -54,15 +54,9 @@ enum
|
|||||||
{
|
{
|
||||||
PROP_0,
|
PROP_0,
|
||||||
|
|
||||||
PROP_SESSION_MANAGER,
|
|
||||||
PROP_PEER_NAME,
|
|
||||||
PROP_ID,
|
|
||||||
|
|
||||||
N_PROPS
|
N_PROPS
|
||||||
};
|
};
|
||||||
|
|
||||||
static GParamSpec *obj_props[N_PROPS];
|
|
||||||
|
|
||||||
typedef enum _MetaRemoteDesktopNotifyAxisFlags
|
typedef enum _MetaRemoteDesktopNotifyAxisFlags
|
||||||
{
|
{
|
||||||
META_REMOTE_DESKTOP_NOTIFY_AXIS_FLAGS_NONE = 0,
|
META_REMOTE_DESKTOP_NOTIFY_AXIS_FLAGS_NONE = 0,
|
||||||
@ -265,14 +259,6 @@ meta_remote_desktop_session_close (MetaDbusSession *dbus_session)
|
|||||||
g_object_unref (session);
|
g_object_unref (session);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *
|
|
||||||
meta_remote_desktop_session_get_id (MetaDbusSession *dbus_session)
|
|
||||||
{
|
|
||||||
MetaRemoteDesktopSession *session = META_REMOTE_DESKTOP_SESSION (dbus_session);
|
|
||||||
|
|
||||||
return session->session_id;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *
|
char *
|
||||||
meta_remote_desktop_session_get_object_path (MetaRemoteDesktopSession *session)
|
meta_remote_desktop_session_get_object_path (MetaRemoteDesktopSession *session)
|
||||||
{
|
{
|
||||||
@ -1706,7 +1692,6 @@ static void
|
|||||||
meta_dbus_session_init_iface (MetaDbusSessionInterface *iface)
|
meta_dbus_session_init_iface (MetaDbusSessionInterface *iface)
|
||||||
{
|
{
|
||||||
iface->close = meta_remote_desktop_session_close;
|
iface->close = meta_remote_desktop_session_close;
|
||||||
iface->get_id = meta_remote_desktop_session_get_id;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -1741,13 +1726,13 @@ meta_remote_desktop_session_set_property (GObject *object,
|
|||||||
|
|
||||||
switch (prop_id)
|
switch (prop_id)
|
||||||
{
|
{
|
||||||
case PROP_SESSION_MANAGER:
|
case N_PROPS + META_DBUS_SESSION_PROP_SESSION_MANAGER:
|
||||||
session->session_manager = g_value_get_object (value);
|
session->session_manager = g_value_get_object (value);
|
||||||
break;
|
break;
|
||||||
case PROP_PEER_NAME:
|
case N_PROPS + META_DBUS_SESSION_PROP_PEER_NAME:
|
||||||
session->peer_name = g_value_dup_string (value);
|
session->peer_name = g_value_dup_string (value);
|
||||||
break;
|
break;
|
||||||
case PROP_ID:
|
case N_PROPS + META_DBUS_SESSION_PROP_ID:
|
||||||
session->session_id = g_value_dup_string (value);
|
session->session_id = g_value_dup_string (value);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -1766,13 +1751,13 @@ meta_remote_desktop_session_get_property (GObject *object,
|
|||||||
|
|
||||||
switch (prop_id)
|
switch (prop_id)
|
||||||
{
|
{
|
||||||
case PROP_SESSION_MANAGER:
|
case N_PROPS + META_DBUS_SESSION_PROP_SESSION_MANAGER:
|
||||||
g_value_set_object (value, session->session_manager);
|
g_value_set_object (value, session->session_manager);
|
||||||
break;
|
break;
|
||||||
case PROP_PEER_NAME:
|
case N_PROPS + META_DBUS_SESSION_PROP_PEER_NAME:
|
||||||
g_value_set_string (value, session->peer_name);
|
g_value_set_string (value, session->peer_name);
|
||||||
break;
|
break;
|
||||||
case PROP_ID:
|
case N_PROPS + META_DBUS_SESSION_PROP_ID:
|
||||||
g_value_set_string (value, session->session_id);
|
g_value_set_string (value, session->session_id);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -1803,31 +1788,7 @@ meta_remote_desktop_session_class_init (MetaRemoteDesktopSessionClass *klass)
|
|||||||
object_class->set_property = meta_remote_desktop_session_set_property;
|
object_class->set_property = meta_remote_desktop_session_set_property;
|
||||||
object_class->get_property = meta_remote_desktop_session_get_property;
|
object_class->get_property = meta_remote_desktop_session_get_property;
|
||||||
|
|
||||||
obj_props[PROP_SESSION_MANAGER] =
|
meta_dbus_session_install_properties (object_class, N_PROPS);
|
||||||
g_param_spec_object ("session-manager",
|
|
||||||
"session manager",
|
|
||||||
"D-Bus session manager",
|
|
||||||
META_TYPE_DBUS_SESSION_MANAGER,
|
|
||||||
G_PARAM_READWRITE |
|
|
||||||
G_PARAM_CONSTRUCT_ONLY |
|
|
||||||
G_PARAM_STATIC_STRINGS);
|
|
||||||
obj_props[PROP_PEER_NAME] =
|
|
||||||
g_param_spec_string ("peer-name",
|
|
||||||
"peer name",
|
|
||||||
"D-Bus peer name",
|
|
||||||
NULL,
|
|
||||||
G_PARAM_READWRITE |
|
|
||||||
G_PARAM_CONSTRUCT_ONLY |
|
|
||||||
G_PARAM_STATIC_STRINGS);
|
|
||||||
obj_props[PROP_ID] =
|
|
||||||
g_param_spec_string ("id",
|
|
||||||
"session id",
|
|
||||||
"Unique ID of the session",
|
|
||||||
NULL,
|
|
||||||
G_PARAM_READWRITE |
|
|
||||||
G_PARAM_CONSTRUCT_ONLY |
|
|
||||||
G_PARAM_STATIC_STRINGS);
|
|
||||||
g_object_class_install_properties (object_class, N_PROPS, obj_props);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static MetaRemoteDesktopSessionHandle *
|
static MetaRemoteDesktopSessionHandle *
|
||||||
|
@ -43,9 +43,6 @@ enum
|
|||||||
{
|
{
|
||||||
PROP_0,
|
PROP_0,
|
||||||
|
|
||||||
PROP_SESSION_MANAGER,
|
|
||||||
PROP_PEER_NAME,
|
|
||||||
PROP_ID,
|
|
||||||
PROP_SESSION_TYPE,
|
PROP_SESSION_TYPE,
|
||||||
|
|
||||||
N_PROPS
|
N_PROPS
|
||||||
@ -186,14 +183,6 @@ meta_screen_cast_session_close (MetaDbusSession *dbus_session)
|
|||||||
g_object_unref (session);
|
g_object_unref (session);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *
|
|
||||||
meta_screen_cast_session_get_id (MetaDbusSession *dbus_session)
|
|
||||||
{
|
|
||||||
MetaScreenCastSession *session = META_SCREEN_CAST_SESSION (dbus_session);
|
|
||||||
|
|
||||||
return session->session_id;
|
|
||||||
}
|
|
||||||
|
|
||||||
MetaScreenCastStream *
|
MetaScreenCastStream *
|
||||||
meta_screen_cast_session_get_stream (MetaScreenCastSession *session,
|
meta_screen_cast_session_get_stream (MetaScreenCastSession *session,
|
||||||
const char *path)
|
const char *path)
|
||||||
@ -777,7 +766,6 @@ static void
|
|||||||
meta_dbus_session_init_iface (MetaDbusSessionInterface *iface)
|
meta_dbus_session_init_iface (MetaDbusSessionInterface *iface)
|
||||||
{
|
{
|
||||||
iface->close = meta_screen_cast_session_close;
|
iface->close = meta_screen_cast_session_close;
|
||||||
iface->get_id = meta_screen_cast_session_get_id;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -803,18 +791,19 @@ meta_screen_cast_session_set_property (GObject *object,
|
|||||||
|
|
||||||
switch (prop_id)
|
switch (prop_id)
|
||||||
{
|
{
|
||||||
case PROP_SESSION_MANAGER:
|
|
||||||
session->session_manager = g_value_get_object (value);
|
|
||||||
break;
|
|
||||||
case PROP_PEER_NAME:
|
|
||||||
session->peer_name = g_value_dup_string (value);
|
|
||||||
break;
|
|
||||||
case PROP_ID:
|
|
||||||
session->session_id = g_value_dup_string (value);
|
|
||||||
break;
|
|
||||||
case PROP_SESSION_TYPE:
|
case PROP_SESSION_TYPE:
|
||||||
session->session_type = g_value_get_enum (value);
|
session->session_type = g_value_get_enum (value);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case N_PROPS + META_DBUS_SESSION_PROP_SESSION_MANAGER:
|
||||||
|
session->session_manager = g_value_get_object (value);
|
||||||
|
break;
|
||||||
|
case N_PROPS + META_DBUS_SESSION_PROP_PEER_NAME:
|
||||||
|
session->peer_name = g_value_dup_string (value);
|
||||||
|
break;
|
||||||
|
case N_PROPS + META_DBUS_SESSION_PROP_ID:
|
||||||
|
session->session_id = g_value_dup_string (value);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
@ -831,18 +820,19 @@ meta_screen_cast_session_get_property (GObject *object,
|
|||||||
|
|
||||||
switch (prop_id)
|
switch (prop_id)
|
||||||
{
|
{
|
||||||
case PROP_SESSION_MANAGER:
|
|
||||||
g_value_set_object (value, session->session_manager);
|
|
||||||
break;
|
|
||||||
case PROP_PEER_NAME:
|
|
||||||
g_value_set_string (value, session->peer_name);
|
|
||||||
break;
|
|
||||||
case PROP_ID:
|
|
||||||
g_value_set_string (value, session->session_id);
|
|
||||||
break;
|
|
||||||
case PROP_SESSION_TYPE:
|
case PROP_SESSION_TYPE:
|
||||||
g_value_set_enum (value, session->session_type);
|
g_value_set_enum (value, session->session_type);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case N_PROPS + META_DBUS_SESSION_PROP_SESSION_MANAGER:
|
||||||
|
g_value_set_object (value, session->session_manager);
|
||||||
|
break;
|
||||||
|
case N_PROPS + META_DBUS_SESSION_PROP_PEER_NAME:
|
||||||
|
g_value_set_string (value, session->peer_name);
|
||||||
|
break;
|
||||||
|
case N_PROPS + META_DBUS_SESSION_PROP_ID:
|
||||||
|
g_value_set_string (value, session->session_id);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
@ -863,30 +853,6 @@ meta_screen_cast_session_class_init (MetaScreenCastSessionClass *klass)
|
|||||||
object_class->set_property = meta_screen_cast_session_set_property;
|
object_class->set_property = meta_screen_cast_session_set_property;
|
||||||
object_class->get_property = meta_screen_cast_session_get_property;
|
object_class->get_property = meta_screen_cast_session_get_property;
|
||||||
|
|
||||||
obj_props[PROP_SESSION_MANAGER] =
|
|
||||||
g_param_spec_object ("session-manager",
|
|
||||||
"session manager",
|
|
||||||
"D-Bus session manager",
|
|
||||||
META_TYPE_DBUS_SESSION_MANAGER,
|
|
||||||
G_PARAM_READWRITE |
|
|
||||||
G_PARAM_CONSTRUCT_ONLY |
|
|
||||||
G_PARAM_STATIC_STRINGS);
|
|
||||||
obj_props[PROP_PEER_NAME] =
|
|
||||||
g_param_spec_string ("peer-name",
|
|
||||||
"peer name",
|
|
||||||
"D-Bus peer name",
|
|
||||||
NULL,
|
|
||||||
G_PARAM_READWRITE |
|
|
||||||
G_PARAM_CONSTRUCT_ONLY |
|
|
||||||
G_PARAM_STATIC_STRINGS);
|
|
||||||
obj_props[PROP_ID] =
|
|
||||||
g_param_spec_string ("id",
|
|
||||||
"session id",
|
|
||||||
"Unique ID of the session",
|
|
||||||
NULL,
|
|
||||||
G_PARAM_READWRITE |
|
|
||||||
G_PARAM_CONSTRUCT_ONLY |
|
|
||||||
G_PARAM_STATIC_STRINGS);
|
|
||||||
obj_props[PROP_SESSION_TYPE] =
|
obj_props[PROP_SESSION_TYPE] =
|
||||||
g_param_spec_enum ("session-type",
|
g_param_spec_enum ("session-type",
|
||||||
"session type",
|
"session type",
|
||||||
@ -897,6 +863,7 @@ meta_screen_cast_session_class_init (MetaScreenCastSessionClass *klass)
|
|||||||
G_PARAM_CONSTRUCT_ONLY |
|
G_PARAM_CONSTRUCT_ONLY |
|
||||||
G_PARAM_STATIC_STRINGS);
|
G_PARAM_STATIC_STRINGS);
|
||||||
g_object_class_install_properties (object_class, N_PROPS, obj_props);
|
g_object_class_install_properties (object_class, N_PROPS, obj_props);
|
||||||
|
meta_dbus_session_install_properties (object_class, N_PROPS);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
Loading…
x
Reference in New Issue
Block a user