summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Ancell <robert.ancell@canonical.com>2018-08-30 14:12:54 +1200
committerRobert Ancell <robert.ancell@canonical.com>2018-08-30 14:12:54 +1200
commit816e36cf5d34930e2e6cba24ad2828026547b2d7 (patch)
treef5cf4115fd488913d8eb68f031b0dd06c15183a8
parent84ce7787adf90721241d7bb1bccd87e1fb118039 (diff)
downloadlightdm-git-816e36cf5d34930e2e6cba24ad2828026547b2d7.tar.gz
Use more modern *_get_instance_private() method for storing private data
-rw-r--r--src/Makefile.am3
-rw-r--r--src/accounts.c38
-rw-r--r--src/accounts.h5
-rw-r--r--src/display-manager-service.c169
-rw-r--r--src/display-manager-service.h5
-rw-r--r--src/display-manager.c50
-rw-r--r--src/display-manager.h5
-rw-r--r--src/display-server.c20
-rw-r--r--src/display-server.h5
-rw-r--r--src/greeter-session.c22
-rw-r--r--src/greeter-session.h5
-rw-r--r--src/greeter-socket.c76
-rw-r--r--src/greeter-socket.h5
-rw-r--r--src/greeter.c331
-rw-r--r--src/greeter.h5
-rw-r--r--src/login1.c149
-rw-r--r--src/login1.h10
-rw-r--r--src/process.c161
-rw-r--r--src/process.h5
-rw-r--r--src/seat-local.c118
-rw-r--r--src/seat-local.h5
-rw-r--r--src/seat-unity.c118
-rw-r--r--src/seat-unity.h5
-rw-r--r--src/seat-xdmcp-session.c26
-rw-r--r--src/seat-xdmcp-session.h5
-rw-r--r--src/seat-xremote.h2
-rw-r--r--src/seat-xvnc.c25
-rw-r--r--src/seat-xvnc.h5
-rw-r--r--src/seat.c301
-rw-r--r--src/seat.h5
-rw-r--r--src/session-config.c47
-rw-r--r--src/session-config.h5
-rw-r--r--src/session.c475
-rw-r--r--src/session.h5
-rw-r--r--src/shared-data-manager.c37
-rw-r--r--src/shared-data-manager.h5
-rw-r--r--src/unity-system-compositor.c240
-rw-r--r--src/unity-system-compositor.h5
-rw-r--r--src/vnc-server.c46
-rw-r--r--src/vnc-server.h5
-rw-r--r--src/wayland-session.c30
-rw-r--r--src/wayland-session.h5
-rw-r--r--src/x-authority.c121
-rw-r--r--src/x-authority.h3
-rw-r--r--src/x-server-local.c239
-rw-r--r--src/x-server-local.h5
-rw-r--r--src/x-server-remote.c11
-rw-r--r--src/x-server-remote.h5
-rw-r--r--src/x-server-xmir.c63
-rw-r--r--src/x-server-xmir.h5
-rw-r--r--src/x-server-xvnc.c42
-rw-r--r--src/x-server-xvnc.h5
-rw-r--r--src/x-server.c70
-rw-r--r--src/x-server.h5
-rw-r--r--src/xdmcp-server.c246
-rw-r--r--src/xdmcp-server.h5
-rw-r--r--src/xdmcp-session-private.h39
-rw-r--r--src/xdmcp-session.c74
-rw-r--r--src/xdmcp-session.h13
-rw-r--r--tests/src/x-authority.c91
-rw-r--r--tests/src/x-authority.h6
-rw-r--r--tests/src/x-server.c76
-rw-r--r--tests/src/x-server.h13
-rw-r--r--tests/src/xdmcp-client.c52
-rw-r--r--tests/src/xdmcp-client.h10
65 files changed, 2105 insertions, 1683 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index e4501975..98468e70 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -76,8 +76,7 @@ lightdm_SOURCES = \
xdmcp-server.c \
xdmcp-server.h \
xdmcp-session.c \
- xdmcp-session.h \
- xdmcp-session-private.h
+ xdmcp-session.h
lightdm_CFLAGS = \
$(WARN_CFLAGS) \
diff --git a/src/accounts.c b/src/accounts.c
index ee5ec8e0..2f2c263f 100644
--- a/src/accounts.c
+++ b/src/accounts.c
@@ -16,11 +16,11 @@
#include "accounts.h"
#include "user-list.h"
-struct UserPrivate
+typedef struct
{
/* Internal user object */
CommonUser *common_user;
-};
+} UserPrivate;
G_DEFINE_TYPE_WITH_PRIVATE (User, user, G_TYPE_OBJECT)
@@ -34,7 +34,8 @@ accounts_get_user_by_name (const gchar *username)
return NULL;
User *user = g_object_new (USER_TYPE, NULL);
- user->priv->common_user = common_user;
+ UserPrivate *priv = user_get_instance_private (user);
+ priv->common_user = common_user;
return user;
}
@@ -51,78 +52,87 @@ accounts_get_current_user ()
const gchar *
user_get_name (User *user)
{
+ UserPrivate *priv = user_get_instance_private (user);
g_return_val_if_fail (user != NULL, NULL);
- return common_user_get_name (user->priv->common_user);
+ return common_user_get_name (priv->common_user);
}
uid_t
user_get_uid (User *user)
{
+ UserPrivate *priv = user_get_instance_private (user);
g_return_val_if_fail (user != NULL, 0);
- return common_user_get_uid (user->priv->common_user);
+ return common_user_get_uid (priv->common_user);
}
gid_t
user_get_gid (User *user)
{
+ UserPrivate *priv = user_get_instance_private (user);
g_return_val_if_fail (user != NULL, 0);
- return common_user_get_gid (user->priv->common_user);
+ return common_user_get_gid (priv->common_user);
}
const gchar *
user_get_home_directory (User *user)
{
+ UserPrivate *priv = user_get_instance_private (user);
g_return_val_if_fail (user != NULL, NULL);
- return common_user_get_home_directory (user->priv->common_user);
+ return common_user_get_home_directory (priv->common_user);
}
const gchar *
user_get_shell (User *user)
{
+ UserPrivate *priv = user_get_instance_private (user);
g_return_val_if_fail (user != NULL, NULL);
- return common_user_get_shell (user->priv->common_user);
+ return common_user_get_shell (priv->common_user);
}
void
user_set_language (User *user, const gchar *language)
{
+ UserPrivate *priv = user_get_instance_private (user);
g_return_if_fail (user != NULL);
- common_user_set_language (user->priv->common_user, language);
+ common_user_set_language (priv->common_user, language);
}
const gchar *
user_get_language (User *user)
{
+ UserPrivate *priv = user_get_instance_private (user);
g_return_val_if_fail (user != NULL, NULL);
- return common_user_get_language (user->priv->common_user);
+ return common_user_get_language (priv->common_user);
}
void
user_set_xsession (User *user, const gchar *xsession)
{
+ UserPrivate *priv = user_get_instance_private (user);
g_return_if_fail (user != NULL);
- common_user_set_session (user->priv->common_user, xsession);
+ common_user_set_session (priv->common_user, xsession);
}
const gchar *
user_get_xsession (User *user)
{
+ UserPrivate *priv = user_get_instance_private (user);
g_return_val_if_fail (user != NULL, NULL);
- return common_user_get_session (user->priv->common_user);
+ return common_user_get_session (priv->common_user);
}
static void
user_init (User *user)
{
- user->priv = G_TYPE_INSTANCE_GET_PRIVATE (user, USER_TYPE, UserPrivate);
}
static void
user_finalize (GObject *object)
{
User *self = USER (object);
+ UserPrivate *priv = user_get_instance_private (self);
- g_clear_object (&self->priv->common_user);
+ g_clear_object (&priv->common_user);
G_OBJECT_CLASS (user_parent_class)->finalize (object);
}
diff --git a/src/accounts.h b/src/accounts.h
index e6bf4e47..67142ca7 100644
--- a/src/accounts.h
+++ b/src/accounts.h
@@ -21,12 +21,9 @@ G_BEGIN_DECLS
#define USER_TYPE (user_get_type())
#define USER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), USER_TYPE, User));
-typedef struct UserPrivate UserPrivate;
-
typedef struct
{
- GObject parent_instance;
- UserPrivate *priv;
+ GObject parent_instance;
} User;
typedef struct
diff --git a/src/display-manager-service.c b/src/display-manager-service.c
index c3f14e99..f25392bc 100644
--- a/src/display-manager-service.c
+++ b/src/display-manager-service.c
@@ -20,7 +20,7 @@ enum {
};
static guint signals[LAST_SIGNAL] = { 0 };
-struct DisplayManagerServicePrivate
+typedef struct
{
/* Display manager being exposed on D-Bus */
DisplayManager *manager;
@@ -45,7 +45,7 @@ struct DisplayManagerServicePrivate
/* Bus entries for seats / session */
GHashTable *seat_bus_entries;
GHashTable *session_bus_entries;
-};
+} DisplayManagerServicePrivate;
G_DEFINE_TYPE_WITH_PRIVATE (DisplayManagerService, display_manager_service, G_TYPE_OBJECT)
@@ -71,7 +71,9 @@ DisplayManagerService *
display_manager_service_new (DisplayManager *manager)
{
DisplayManagerService *service = g_object_new (DISPLAY_MANAGER_SERVICE_TYPE, NULL);
- service->priv->manager = g_object_ref (manager);
+ DisplayManagerServicePrivate *priv = display_manager_service_get_instance_private (service);
+
+ priv->manager = g_object_ref (manager);
return service;
}
@@ -153,11 +155,13 @@ session_bus_entry_free (gpointer data)
static GVariant *
get_seat_list (DisplayManagerService *service)
{
+ DisplayManagerServicePrivate *priv = display_manager_service_get_instance_private (service);
+
GVariantBuilder builder;
g_variant_builder_init (&builder, G_VARIANT_TYPE ("ao"));
GHashTableIter iter;
- g_hash_table_iter_init (&iter, service->priv->seat_bus_entries);
+ g_hash_table_iter_init (&iter, priv->seat_bus_entries);
gpointer value;
while (g_hash_table_iter_next (&iter, NULL, &value))
{
@@ -171,11 +175,13 @@ get_seat_list (DisplayManagerService *service)
static GVariant *
get_session_list (DisplayManagerService *service, const gchar *seat_path)
{
+ DisplayManagerServicePrivate *priv = display_manager_service_get_instance_private (service);
+
GVariantBuilder builder;
g_variant_builder_init (&builder, G_VARIANT_TYPE ("ao"));
GHashTableIter iter;
- g_hash_table_iter_init (&iter, service->priv->session_bus_entries);
+ g_hash_table_iter_init (&iter, priv->session_bus_entries);
gpointer value;
while (g_hash_table_iter_next (&iter, NULL, &value))
{
@@ -217,6 +223,7 @@ handle_display_manager_call (GDBusConnection *connection,
gpointer user_data)
{
DisplayManagerService *service = user_data;
+ DisplayManagerServicePrivate *priv = display_manager_service_get_instance_private (service);
if (g_strcmp0 (method_name, "AddSeat") == 0)
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "AddSeat is deprecated");
@@ -239,7 +246,7 @@ handle_display_manager_call (GDBusConnection *connection,
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, "Unable to create local X seat");
return;
}
- SeatBusEntry *entry = g_hash_table_lookup (service->priv->seat_bus_entries, seat);
+ SeatBusEntry *entry = g_hash_table_lookup (priv->seat_bus_entries, seat);
g_dbus_method_invocation_return_value (invocation, g_variant_new ("(o)", entry->path));
}
else
@@ -337,7 +344,9 @@ handle_seat_call (GDBusConnection *connection,
static Seat *
get_seat_for_session (DisplayManagerService *service, Session *session)
{
- for (GList *seat_link = display_manager_get_seats (service->priv->manager); seat_link; seat_link = seat_link->next)
+ DisplayManagerServicePrivate *priv = display_manager_service_get_instance_private (service);
+
+ for (GList *seat_link = display_manager_get_seats (priv->manager); seat_link; seat_link = seat_link->next)
{
Seat *seat = seat_link->data;
@@ -401,16 +410,18 @@ handle_session_call (GDBusConnection *connection,
static void
running_user_session_cb (Seat *seat, Session *session, DisplayManagerService *service)
{
+ DisplayManagerServicePrivate *priv = display_manager_service_get_instance_private (service);
+
/* Set environment variables when session runs */
- SeatBusEntry *seat_entry = g_hash_table_lookup (service->priv->seat_bus_entries, seat);
+ SeatBusEntry *seat_entry = g_hash_table_lookup (priv->seat_bus_entries, seat);
session_set_env (session, "XDG_SEAT_PATH", seat_entry->path);
- g_autofree gchar *path = g_strdup_printf ("/org/freedesktop/DisplayManager/Session%d", service->priv->session_index);
- service->priv->session_index++;
+ g_autofree gchar *path = g_strdup_printf ("/org/freedesktop/DisplayManager/Session%d", priv->session_index);
+ priv->session_index++;
session_set_env (session, "XDG_SESSION_PATH", path);
g_object_set_data_full (G_OBJECT (session), "XDG_SESSION_PATH", g_steal_pointer (&path), g_free);
SessionBusEntry *session_entry = session_bus_entry_new (service, session, g_object_get_data (G_OBJECT (session), "XDG_SESSION_PATH"), seat_entry ? seat_entry->path : NULL);
- g_hash_table_insert (service->priv->session_bus_entries, g_object_ref (session), session_entry);
+ g_hash_table_insert (priv->session_bus_entries, g_object_ref (session), session_entry);
g_debug ("Registering session with bus path %s", session_entry->path);
@@ -420,54 +431,58 @@ running_user_session_cb (Seat *seat, Session *session, DisplayManagerService *se
handle_session_get_property
};
g_autoptr(GError) error = NULL;
- session_entry->bus_id = g_dbus_connection_register_object (service->priv->bus,
+ session_entry->bus_id = g_dbus_connection_register_object (priv->bus,
session_entry->path,
- service->priv->session_info->interfaces[0],
+ priv->session_info->interfaces[0],
&session_vtable,
session_entry, NULL,
&error);
if (session_entry->bus_id == 0)
g_warning ("Failed to register user session: %s", error->message);
- emit_object_value_changed (service->priv->bus, "/org/freedesktop/DisplayManager", "org.freedesktop.DisplayManager", "Sessions", get_session_list (service, NULL));
- emit_object_signal (service->priv->bus, "/org/freedesktop/DisplayManager", "SessionAdded", session_entry->path);
+ emit_object_value_changed (priv->bus, "/org/freedesktop/DisplayManager", "org.freedesktop.DisplayManager", "Sessions", get_session_list (service, NULL));
+ emit_object_signal (priv->bus, "/org/freedesktop/DisplayManager", "SessionAdded", session_entry->path);
- emit_object_value_changed (service->priv->bus, seat_entry->path, "org.freedesktop.DisplayManager.Seat", "Sessions", get_session_list (service, session_entry->seat_path));
- emit_object_signal (service->priv->bus, seat_entry->path, "SessionAdded", session_entry->path);
+ emit_object_value_changed (priv->bus, seat_entry->path, "org.freedesktop.DisplayManager.Seat", "Sessions", get_session_list (service, session_entry->seat_path));
+ emit_object_signal (priv->bus, seat_entry->path, "SessionAdded", session_entry->path);
}
static void
session_removed_cb (Seat *seat, Session *session, DisplayManagerService *service)
{
+ DisplayManagerServicePrivate *priv = display_manager_service_get_instance_private (service);
+
g_signal_handlers_disconnect_matched (session, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, seat);
- SessionBusEntry *entry = g_hash_table_lookup (service->priv->session_bus_entries, session);
+ SessionBusEntry *entry = g_hash_table_lookup (priv->session_bus_entries, session);
g_autofree gchar *seat_path = NULL;
if (entry)
{
- g_dbus_connection_unregister_object (service->priv->bus, entry->bus_id);
- emit_object_signal (service->priv->bus, "/org/freedesktop/DisplayManager", "SessionRemoved", entry->path);
- emit_object_signal (service->priv->bus, entry->seat_path, "SessionRemoved", entry->path);
+ g_dbus_connection_unregister_object (priv->bus, entry->bus_id);
+ emit_object_signal (priv->bus, "/org/freedesktop/DisplayManager", "SessionRemoved", entry->path);
+ emit_object_signal (priv->bus, entry->seat_path, "SessionRemoved", entry->path);
seat_path = g_strdup (entry->seat_path);
}
- g_hash_table_remove (service->priv->session_bus_entries, session);
+ g_hash_table_remove (priv->session_bus_entries, session);
if (seat_path)
{
- emit_object_value_changed (service->priv->bus, "/org/freedesktop/DisplayManager", "org.freedesktop.DisplayManager", "Sessions", get_session_list (service, NULL));
- emit_object_value_changed (service->priv->bus, seat_path, "org.freedesktop.DisplayManager.Seat", "Sessions", get_session_list (service, seat_path));
+ emit_object_value_changed (priv->bus, "/org/freedesktop/DisplayManager", "org.freedesktop.DisplayManager", "Sessions", get_session_list (service, NULL));
+ emit_object_value_changed (priv->bus, seat_path, "org.freedesktop.DisplayManager.Seat", "Sessions", get_session_list (service, seat_path));
}
}
static void
seat_added_cb (DisplayManager *display_manager, Seat *seat, DisplayManagerService *service)
{
- g_autofree gchar *path = g_strdup_printf ("/org/freedesktop/DisplayManager/Seat%d", service->priv->seat_index);
- service->priv->seat_index++;
+ DisplayManagerServicePrivate *priv = display_manager_service_get_instance_private (service);
+
+ g_autofree gchar *path = g_strdup_printf ("/org/freedesktop/DisplayManager/Seat%d", priv->seat_index);
+ priv->seat_index++;
SeatBusEntry *entry = seat_bus_entry_new (service, seat, path);
- g_hash_table_insert (service->priv->seat_bus_entries, g_object_ref (seat), entry);
+ g_hash_table_insert (priv->seat_bus_entries, g_object_ref (seat), entry);
g_debug ("Registering seat with bus path %s", entry->path);
@@ -477,17 +492,17 @@ seat_added_cb (DisplayManager *display_manager, Seat *seat, DisplayManagerServic
handle_seat_get_property
};
g_autoptr(GError) error = NULL;
- entry->bus_id = g_dbus_connection_register_object (service->priv->bus,
+ entry->bus_id = g_dbus_connection_register_object (priv->bus,
entry->path,
- service->priv->seat_info->interfaces[0],
+ priv->seat_info->interfaces[0],
&seat_vtable,
entry, NULL,
&error);
if (entry->bus_id == 0)
g_warning ("Failed to register seat: %s", error->message);
- emit_object_value_changed (service->priv->bus, "/org/freedesktop/DisplayManager", "org.freedesktop.DisplayManager", "Seats", get_seat_list (service));
- emit_object_signal (service->priv->bus, "/org/freedesktop/DisplayManager", "SeatAdded", entry->path);
+ emit_object_value_changed (priv->bus, "/org/freedesktop/DisplayManager", "org.freedesktop.DisplayManager", "Seats", get_seat_list (service));
+ emit_object_signal (priv->bus, "/org/freedesktop/DisplayManager", "SeatAdded", entry->path);
g_signal_connect (seat, SEAT_SIGNAL_RUNNING_USER_SESSION, G_CALLBACK (running_user_session_cb), service);
g_signal_connect (seat, SEAT_SIGNAL_SESSION_REMOVED, G_CALLBACK (session_removed_cb), service);
@@ -496,16 +511,18 @@ seat_added_cb (DisplayManager *display_manager, Seat *seat, DisplayManagerServic
static void
seat_removed_cb (DisplayManager *display_manager, Seat *seat, DisplayManagerService *service)
{
- SeatBusEntry *entry = g_hash_table_lookup (service->priv->seat_bus_entries, seat);
+ DisplayManagerServicePrivate *priv = display_manager_service_get_instance_private (service);
+
+ SeatBusEntry *entry = g_hash_table_lookup (priv->seat_bus_entries, seat);
if (entry)
{
- g_dbus_connection_unregister_object (service->priv->bus, entry->bus_id);
- emit_object_signal (service->priv->bus, "/org/freedesktop/DisplayManager", "SeatRemoved", entry->path);
+ g_dbus_connection_unregister_object (priv->bus, entry->bus_id);
+ emit_object_signal (priv->bus, "/org/freedesktop/DisplayManager", "SeatRemoved", entry->path);
}
- g_hash_table_remove (service->priv->seat_bus_entries, seat);
+ g_hash_table_remove (priv->seat_bus_entries, seat);
- emit_object_value_changed (service->priv->bus, "/org/freedesktop/DisplayManager", "org.freedesktop.DisplayManager", "Seats", get_seat_list (service));
+ emit_object_value_changed (priv->bus, "/org/freedesktop/DisplayManager", "org.freedesktop.DisplayManager", "Seats", get_seat_list (service));
}
static void
@@ -514,10 +531,11 @@ bus_acquired_cb (GDBusConnection *connection,
gpointer user_data)
{
DisplayManagerService *service = user_data;
+ DisplayManagerServicePrivate *priv = display_manager_service_get_instance_private (service);
g_debug ("Acquired bus name %s", name);
- service->priv->bus = g_object_ref (connection);
+ priv->bus = g_object_ref (connection);
const gchar *display_manager_interface =
"<node>"
@@ -573,8 +591,8 @@ bus_acquired_cb (GDBusConnection *connection,
" </signal>"
" </interface>"
"</node>";
- service->priv->seat_info = g_dbus_node_info_new_for_xml (seat_interface, NULL);
- g_assert (service->priv->seat_info != NULL);
+ priv->seat_info = g_dbus_node_info_new_for_xml (seat_interface, NULL);
+ g_assert (priv->seat_info != NULL);
const gchar *session_interface =
"<node>"
@@ -584,8 +602,8 @@ bus_acquired_cb (GDBusConnection *connection,
" <method name='Lock'/>"
" </interface>"
"</node>";
- service->priv->session_info = g_dbus_node_info_new_for_xml (session_interface, NULL);
- g_assert (service->priv->session_info != NULL);
+ priv->session_info = g_dbus_node_info_new_for_xml (session_interface, NULL);
+ g_assert (priv->session_info != NULL);
static const GDBusInterfaceVTable display_manager_vtable =
{
@@ -593,21 +611,21 @@ bus_acquired_cb (GDBusConnection *connection,
handle_display_manager_get_property
};
g_autoptr(GError) error = NULL;
- service->priv->reg_id = g_dbus_connection_register_object (connection,
- "/org/freedesktop/DisplayManager",
- display_manager_info->interfaces[0],
- &display_manager_vtable,
- service, NULL,
- &error);
- if (service->priv->reg_id == 0)
+ priv->reg_id = g_dbus_connection_register_object (connection,
+ "/org/freedesktop/DisplayManager",
+ display_manager_info->interfaces[0],
+ &display_manager_vtable,
+ service, NULL,
+ &error);
+ if (priv->reg_id == 0)
g_warning ("Failed to register display manager: %s", error->message);
g_dbus_node_info_unref (display_manager_info);
/* Add objects for existing seats and listen to new ones */
- g_signal_connect (service->priv->manager, DISPLAY_MANAGER_SIGNAL_SEAT_ADDED, G_CALLBACK (seat_added_cb), service);
- g_signal_connect (service->priv->manager, DISPLAY_MANAGER_SIGNAL_SEAT_REMOVED, G_CALLBACK (seat_removed_cb), service);
- for (GList *link = display_manager_get_seats (service->priv->manager); link; link = link->next)
- seat_added_cb (service->priv->manager, (Seat *) link->data, service);
+ g_signal_connect (priv->manager, DISPLAY_MANAGER_SIGNAL_SEAT_ADDED, G_CALLBACK (seat_added_cb), service);
+ g_signal_connect (priv->manager, DISPLAY_MANAGER_SIGNAL_SEAT_REMOVED, G_CALLBACK (seat_removed_cb), service);
+ for (GList *link = display_manager_get_seats (priv->manager); link; link = link->next)
+ seat_added_cb (priv->manager, (Seat *) link->data, service);
g_signal_emit (service, signals[READY], 0);
}
@@ -630,42 +648,45 @@ name_lost_cb (GDBusConnection *connection,
void
display_manager_service_start (DisplayManagerService *service)
{
+ DisplayManagerServicePrivate *priv = display_manager_service_get_instance_private (service);
+
g_return_if_fail (service != NULL);
g_debug ("Using D-Bus name %s", LIGHTDM_BUS_NAME);
- service->priv->bus_id = g_bus_own_name (getuid () == 0 ? G_BUS_TYPE_SYSTEM : G_BUS_TYPE_SESSION,
- LIGHTDM_BUS_NAME,
- G_BUS_NAME_OWNER_FLAGS_NONE,
- bus_acquired_cb,
- NULL,
- name_lost_cb,
- service,
- NULL);
+ priv->bus_id = g_bus_own_name (getuid () == 0 ? G_BUS_TYPE_SYSTEM : G_BUS_TYPE_SESSION,
+ LIGHTDM_BUS_NAME,
+ G_BUS_NAME_OWNER_FLAGS_NONE,
+ bus_acquired_cb,
+ NULL,
+ name_lost_cb,
+ service,
+ NULL);
}
static void
display_manager_service_init (DisplayManagerService *service)
{
- service->priv = G_TYPE_INSTANCE_GET_PRIVATE (service, DISPLAY_MANAGER_SERVICE_TYPE, DisplayManagerServicePrivate);
- service->priv->seat_bus_entries = g_hash_table_new_full (g_direct_hash, g_direct_equal, g_object_unref, seat_bus_entry_free);
- service->priv->session_bus_entries = g_hash_table_new_full (g_direct_hash, g_direct_equal, g_object_unref, session_bus_entry_free);
+ DisplayManagerServicePrivate *priv = display_manager_service_get_instance_private (service);
+ priv->seat_bus_entries = g_hash_table_new_full (g_direct_hash, g_direct_equal, g_object_unref, seat_bus_entry_free);
+ priv->session_bus_entries = g_hash_table_new_full (g_direct_hash, g_direct_equal, g_object_unref, session_bus_entry_free);
}
static void
display_manager_service_finalize (GObject *object)
{
DisplayManagerService *self = DISPLAY_MANAGER_SERVICE (object);
-
- g_dbus_connection_unregister_object (self->priv->bus, self->priv->reg_id);
- g_bus_unown_name (self->priv->bus_id);
- if (self->priv->seat_info)
- g_dbus_node_info_unref (self->priv->seat_info);
- if (self->priv->session_info)
- g_dbus_node_info_unref (self->priv->session_info);
- g_hash_table_unref (self->priv->seat_bus_entries);
- g_hash_table_unref (self->priv->session_bus_entries);
- g_object_unref (self->priv->bus);
- g_clear_object (&self->priv->manager);
+ DisplayManagerServicePrivate *priv = display_manager_service_get_instance_private (self);
+
+ g_dbus_connection_unregister_object (priv->bus, priv->reg_id);
+ g_bus_unown_name (priv->bus_id);
+ if (priv->seat_info)
+ g_dbus_node_info_unref (priv->seat_info);
+ if (priv->session_info)
+ g_dbus_node_info_unref (priv->session_info);
+ g_hash_table_unref (priv->seat_bus_entries);
+ g_hash_table_unref (priv->session_bus_entries);
+ g_object_unref (priv->bus);
+ g_clear_object (&priv->manager);
G_OBJECT_CLASS (display_manager_service_parent_class)->finalize (object);
}
diff --git a/src/display-manager-service.h b/src/display-manager-service.h
index 65dba65a..e7559ad0 100644
--- a/src/display-manager-service.h
+++ b/src/display-manager-service.h
@@ -24,12 +24,9 @@ G_BEGIN_DECLS
#define DISPLAY_MANAGER_SERVICE_SIGNAL_ADD_XLOCAL_SEAT "add-xlocal-seat"
#define DISPLAY_MANAGER_SERVICE_SIGNAL_NAME_LOST "name-lost"
-typedef struct DisplayManagerServicePrivate DisplayManagerServicePrivate;
-
typedef struct
{
- GObject parent_instance;
- DisplayManagerServicePrivate *priv;
+ GObject parent_instance;
} DisplayManagerService;
typedef struct
diff --git a/src/display-manager.c b/src/display-manager.c
index 7cc64af9..f5cc0afa 100644
--- a/src/display-manager.c
+++ b/src/display-manager.c
@@ -30,7 +30,7 @@ enum {
};
static guint signals[LAST_SIGNAL] = { 0 };
-struct DisplayManagerPrivate
+typedef struct
{
/* The seats available */
GList *seats;
@@ -40,7 +40,7 @@ struct DisplayManagerPrivate
/* TRUE if stopped */
gboolean stopped;
-};
+} DisplayManagerPrivate;
G_DEFINE_TYPE_WITH_PRIVATE (DisplayManager, display_manager, G_TYPE_OBJECT)
@@ -53,13 +53,16 @@ display_manager_new (void)
GList *
display_manager_get_seats (DisplayManager *manager)
{
- return manager->priv->seats;
+ DisplayManagerPrivate *priv = display_manager_get_instance_private (manager);
+ return priv->seats;
}
Seat *
display_manager_get_seat (DisplayManager *manager, const gchar *name)
{
- for (GList *link = manager->priv->seats; link; link = link->next)
+ DisplayManagerPrivate *priv = display_manager_get_instance_private (manager);
+
+ for (GList *link = priv->seats; link; link = link->next)
{
Seat *seat = link->data;
@@ -73,11 +76,13 @@ display_manager_get_seat (DisplayManager *manager, const gchar *name)
static void
check_stopped (DisplayManager *manager)
{
- if (manager->priv->stopping &&
- !manager->priv->stopped &&
- g_list_length (manager->priv->seats) == 0)
+ DisplayManagerPrivate *priv = display_manager_get_instance_private (manager);
+
+ if (priv->stopping &&
+ !priv->stopped &&
+ g_list_length (priv->seats) == 0)
{
- manager->priv->stopped = TRUE;
+ priv->stopped = TRUE;
g_debug ("Display manager stopped");
g_signal_emit (manager, signals[STOPPED], 0);
}
@@ -86,10 +91,12 @@ check_stopped (DisplayManager *manager)
static void
seat_stopped_cb (Seat *seat, DisplayManager *manager)
{
- manager->priv->seats = g_list_remove (manager->priv->seats, seat);
+ DisplayManagerPrivate *priv = display_manager_get_instance_private (manager);
+
+ priv->seats = g_list_remove (priv->seats, seat);
g_signal_handlers_disconnect_matched (seat, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, manager);
- if (!manager->priv->stopping)
+ if (!priv->stopping)
g_signal_emit (manager, signals[SEAT_REMOVED], 0, seat);
g_object_unref (seat);
@@ -100,15 +107,15 @@ seat_stopped_cb (Seat *seat, DisplayManager *manager)
gboolean
display_manager_add_seat (DisplayManager *manager, Seat *seat)
{
- gboolean result;
+ DisplayManagerPrivate *priv = display_manager_get_instance_private (manager);
- g_return_val_if_fail (!manager->priv->stopping, FALSE);
+ g_return_val_if_fail (!priv->stopping, FALSE);
- result = seat_start (SEAT (seat));
+ gboolean result = seat_start (SEAT (seat));
if (!result)
return FALSE;
- manager->priv->seats = g_list_append (manager->priv->seats, g_object_ref (seat));
+ priv->seats = g_list_append (priv->seats, g_object_ref (seat));
g_signal_connect (seat, SEAT_SIGNAL_STOPPED, G_CALLBACK (seat_stopped_cb), manager);
g_signal_emit (manager, signals[SEAT_ADDED], 0, seat);
@@ -131,17 +138,19 @@ display_manager_start (DisplayManager *manager)
void
display_manager_stop (DisplayManager *manager)
{
+ DisplayManagerPrivate *priv = display_manager_get_instance_private (manager);
+
g_return_if_fail (manager != NULL);
- if (manager->priv->stopping)
+ if (priv->stopping)
return;
g_debug ("Stopping display manager");
- manager->priv->stopping = TRUE;
+ priv->stopping = TRUE;
/* Stop all the seats. Copy the list as it might be modified if a seat stops during this loop */
- GList *seats = g_list_copy (manager->priv->seats);
+ GList *seats = g_list_copy (priv->seats);
for (GList *link = seats; link; link = link->next)
{
Seat *seat = link->data;
@@ -155,8 +164,6 @@ display_manager_stop (DisplayManager *manager)
static void
display_manager_init (DisplayManager *manager)
{
- manager->priv = G_TYPE_INSTANCE_GET_PRIVATE (manager, DISPLAY_MANAGER_TYPE, DisplayManagerPrivate);
-
/* Load the seat modules */
seat_register_module ("local", SEAT_LOCAL_TYPE);
seat_register_module ("xremote", SEAT_XREMOTE_TYPE);
@@ -167,13 +174,14 @@ static void
display_manager_finalize (GObject *object)
{
DisplayManager *self = DISPLAY_MANAGER (object);
+ DisplayManagerPrivate *priv = display_manager_get_instance_private (self);
- for (GList *link = self->priv->seats; link; link = link->next)
+ for (GList *link = priv->seats; link; link = link->next)
{
Seat *seat = link->data;
g_signal_handlers_disconnect_matched (seat, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, self);
}
- g_list_free_full (self->priv->seats, g_object_unref);
+ g_list_free_full (priv->seats, g_object_unref);
G_OBJECT_CLASS (display_manager_parent_class)->finalize (object);
}
diff --git a/src/display-manager.h b/src/display-manager.h
index bc3ec517..1877645f 100644
--- a/src/display-manager.h
+++ b/src/display-manager.h
@@ -25,12 +25,9 @@ G_BEGIN_DECLS
#define DISPLAY_MANAGER_SIGNAL_SEAT_REMOVED "seat-removed"
#define DISPLAY_MANAGER_SIGNAL_STOPPED "stopped"
-typedef struct DisplayManagerPrivate DisplayManagerPrivate;
-
typedef struct
{
- GObject parent_instance;
- DisplayManagerPrivate *priv;
+ GObject parent_instance;
} DisplayManager;
typedef struct
diff --git a/src/display-server.c b/src/display-server.c
index b746affc..3d56c9d9 100644
--- a/src/display-server.c
+++ b/src/display-server.c
@@ -20,7 +20,7 @@ enum {
};
static guint signals[LAST_SIGNAL] = { 0 };
-struct DisplayServerPrivate
+typedef struct
{
/* TRUE when started */
gboolean is_ready;
@@ -30,7 +30,7 @@ struct DisplayServerPrivate
/* TRUE when the display server has stopped */
gboolean stopped;
-};
+} DisplayServerPrivate;
static void display_server_logger_iface_init (LoggerInterface *iface);
@@ -93,14 +93,16 @@ display_server_start (DisplayServer *server)
gboolean
display_server_get_is_ready (DisplayServer *server)
{
+ DisplayServerPrivate *priv = display_server_get_instance_private (server);
g_return_val_if_fail (server != NULL, FALSE);
- return server->priv->is_ready;
+ return priv->is_ready;
}
static gboolean
display_server_real_start (DisplayServer *server)
{
- server->priv->is_ready = TRUE;
+ DisplayServerPrivate *priv = display_server_get_instance_private (server);
+ priv->is_ready = TRUE;
g_signal_emit (server, signals[READY], 0);
return TRUE;
}
@@ -130,11 +132,13 @@ display_server_real_disconnect_session (DisplayServer *server, Session *session)
void
display_server_stop (DisplayServer *server)
{
+ DisplayServerPrivate *priv = display_server_get_instance_private (server);
+
g_return_if_fail (server != NULL);
- if (server->priv->stopping)
+ if (priv->stopping)
return;
- server->priv->stopping = TRUE;
+ priv->stopping = TRUE;
DISPLAY_SERVER_GET_CLASS (server)->stop (server);
}
@@ -142,8 +146,9 @@ display_server_stop (DisplayServer *server)
gboolean
display_server_get_is_stopping (DisplayServer *server)
{
+ DisplayServerPrivate *priv = display_server_get_instance_private (server);
g_return_val_if_fail (server != NULL, FALSE);
- return server->priv->stopping;
+ return priv->stopping;
}
static void
@@ -155,7 +160,6 @@ display_server_real_stop (DisplayServer *server)
static void
display_server_init (DisplayServer *server)
{
- server->priv = G_TYPE_INSTANCE_GET_PRIVATE (server, DISPLAY_SERVER_TYPE, DisplayServerPrivate);
}
static void
diff --git a/src/display-server.h b/src/display-server.h
index 08eb7b4e..34c43713 100644
--- a/src/display-server.h
+++ b/src/display-server.h
@@ -29,12 +29,9 @@ G_BEGIN_DECLS
#define DISPLAY_SERVER_SIGNAL_READY "ready"
#define DISPLAY_SERVER_SIGNAL_STOPPED "stopped"
-typedef struct DisplayServerPrivate DisplayServerPrivate;
-
struct DisplayServer
{
- GObject parent_instance;
- DisplayServerPrivate *priv;
+ GObject parent_instance;
};
typedef struct
diff --git a/src/greeter-session.c b/src/greeter-session.c
index 93552f51..845cfa05 100644
--- a/src/greeter-session.c
+++ b/src/greeter-session.c
@@ -17,11 +17,11 @@
#include "greeter-session.h"
-struct GreeterSessionPrivate
+typedef struct
{
/* Greeter running inside this session */
Greeter *greeter;
-};
+} GreeterSessionPrivate;
G_DEFINE_TYPE_WITH_PRIVATE (GreeterSession, greeter_session, SESSION_TYPE)
@@ -34,14 +34,15 @@ greeter_session_new (void)
Greeter *
greeter_session_get_greeter (GreeterSession *session)
{
+ GreeterSessionPrivate *priv = greeter_session_get_instance_private (session);
g_return_val_if_fail (session != NULL, NULL);
- return session->priv->greeter;
+ return priv->greeter;
}
static gboolean
greeter_session_start (Session *session)
{
- GreeterSession *s = GREETER_SESSION (session);
+ GreeterSessionPrivate *priv = greeter_session_get_instance_private (GREETER_SESSION (session));
/* Create a pipe to talk with the greeter */
int to_greeter_pipe[2], from_greeter_pipe[2];
@@ -55,7 +56,7 @@ greeter_session_start (Session *session)
int to_greeter_output = to_greeter_pipe[0];
int from_greeter_input = from_greeter_pipe[1];
int from_greeter_output = from_greeter_pipe[0];
- greeter_set_file_descriptors (s->priv->greeter, to_greeter_input, from_greeter_output);
+ greeter_set_file_descriptors (priv->greeter, to_greeter_input, from_greeter_output);
/* Don't allow the daemon end of the pipes to be accessed in child processes */
fcntl (to_greeter_input, F_SETFD, FD_CLOEXEC);
@@ -79,9 +80,9 @@ greeter_session_start (Session *session)
static void
greeter_session_stop (Session *session)
{
- GreeterSession *s = GREETER_SESSION (session);
+ GreeterSessionPrivate *priv = greeter_session_get_instance_private (GREETER_SESSION (session));
- greeter_stop (s->priv->greeter);
+ greeter_stop (priv->greeter);
SESSION_CLASS (greeter_session_parent_class)->stop (session);
}
@@ -89,16 +90,17 @@ greeter_session_stop (Session *session)
static void
greeter_session_init (GreeterSession *session)
{
- session->priv = G_TYPE_INSTANCE_GET_PRIVATE (session, GREETER_SESSION_TYPE, GreeterSessionPrivate);
- session->priv->greeter = greeter_new ();
+ GreeterSessionPrivate *priv = greeter_session_get_instance_private (session);
+ priv->greeter = greeter_new ();
}
static void
greeter_session_finalize (GObject *object)
{
GreeterSession *self = GREETER_SESSION (object);
+ GreeterSessionPrivate *priv = greeter_session_get_instance_private (self);
- g_clear_object (&self->priv->greeter);
+ g_clear_object (&priv->greeter);
G_OBJECT_CLASS (greeter_session_parent_class)->finalize (object);
}
diff --git a/src/greeter-session.h b/src/greeter-session.h
index ea43da2d..a5cccf62 100644
--- a/src/greeter-session.h
+++ b/src/greeter-session.h
@@ -23,12 +23,9 @@ G_BEGIN_DECLS
#define GREETER_SESSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GREETER_SESSION_TYPE, GreeterSessionClass))
#define IS_GREETER_SESSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GREETER_SESSION_TYPE))
-typedef struct GreeterSessionPrivate GreeterSessionPrivate;
-
typedef struct
{
- Session parent_instance;
- GreeterSessionPrivate *priv;
+ Session parent_instance;
} GreeterSession;
typedef struct
diff --git a/src/greeter-socket.c b/src/greeter-socket.c
index 94ba1d19..7400b932 100644
--- a/src/greeter-socket.c
+++ b/src/greeter-socket.c
@@ -23,7 +23,7 @@ enum {
};
static guint signals[LAST_SIGNAL] = { 0 };
-struct GreeterSocketPrivate
+typedef struct
{
/* Path of socket to use */
gchar *path;
@@ -39,7 +39,7 @@ struct GreeterSocketPrivate
/* Greeter connected on this socket */
Greeter *greeter;
-};
+} GreeterSocketPrivate;
G_DEFINE_TYPE_WITH_PRIVATE (GreeterSocket, greeter_socket, G_TYPE_OBJECT)
@@ -47,7 +47,9 @@ GreeterSocket *
greeter_socket_new (const gchar *path)
{
GreeterSocket *socket = g_object_new (GREETER_SOCKET_TYPE, NULL);
- socket->priv->path = g_strdup (path);
+ GreeterSocketPrivate *priv = greeter_socket_get_instance_private (socket);
+
+ priv->path = g_strdup (path);
return socket;
}
@@ -55,34 +57,38 @@ greeter_socket_new (const gchar *path)
static void
greeter_disconnected_cb (Greeter *greeter, GreeterSocket *socket)
{
- if (greeter == socket->priv->greeter)
+ GreeterSocketPrivate *priv = greeter_socket_get_instance_private (socket);
+
+ if (greeter == priv->greeter)
{
- g_clear_object (&socket->priv->greeter);
- g_clear_object (&socket->priv->greeter_socket);
+ g_clear_object (&priv->greeter);
+ g_clear_object (&priv->greeter_socket);
}
}
static gboolean
greeter_connect_cb (GSocket *s, GIOCondition condition, GreeterSocket *socket)
{
+ GreeterSocketPrivate *priv = greeter_socket_get_instance_private (socket);
+
g_autoptr(GError) error = NULL;
- g_autoptr(GSocket) new_socket = g_socket_accept (socket->priv->socket, NULL, &error);
+ g_autoptr(GSocket) new_socket = g_socket_accept (priv->socket, NULL, &error);
if (error)
g_warning ("Failed to accept greeter connection: %s", error->message);
if (!new_socket)
return G_SOURCE_CONTINUE;
/* Greeter already connected */
- if (socket->priv->greeter)
+ if (priv->greeter)
{
g_socket_close (new_socket, NULL);
return G_SOURCE_CONTINUE;
}
- socket->priv->greeter_socket = g_steal_pointer (&new_socket);
- g_signal_emit (socket, signals[CREATE_GREETER], 0, &socket->priv->greeter);
- g_signal_connect (socket->priv->greeter, GREETER_SIGNAL_DISCONNECTED, G_CALLBACK (greeter_disconnected_cb), socket);
- greeter_set_file_descriptors (socket->priv->greeter, g_socket_get_fd (socket->priv->greeter_socket), g_socket_get_fd (socket->priv->greeter_socket));
+ priv->greeter_socket = g_steal_pointer (&new_socket);
+ g_signal_emit (socket, signals[CREATE_GREETER], 0, &priv->greeter);
+ g_signal_connect (priv->greeter, GREETER_SIGNAL_DISCONNECTED, G_CALLBACK (greeter_disconnected_cb), socket);
+ greeter_set_file_descriptors (priv->greeter, g_socket_get_fd (priv->greeter_socket), g_socket_get_fd (priv->greeter_socket));
return G_SOURCE_CONTINUE;
}
@@ -90,34 +96,36 @@ greeter_connect_cb (GSocket *s, GIOCondition condition, GreeterSocket *socket)
gboolean
greeter_socket_start (GreeterSocket *socket, GError **error)
{
+ GreeterSocketPrivate *priv = greeter_socket_get_instance_private (socket);
+
g_return_val_if_fail (socket != NULL, FALSE);
- g_return_val_if_fail (socket->priv->socket == NULL, FALSE);
+ g_return_val_if_fail (priv->socket == NULL, FALSE);
- socket->priv->socket = g_socket_new (G_SOCKET_FAMILY_UNIX, G_SOCKET_TYPE_STREAM, G_SOCKET_PROTOCOL_DEFAULT, error);
- if (!socket->priv->socket)
+ priv->socket = g_socket_new (G_SOCKET_FAMILY_UNIX, G_SOCKET_TYPE_STREAM, G_SOCKET_PROTOCOL_DEFAULT, error);
+ if (!priv->socket)
return FALSE;
- unlink (socket->priv->path);
- g_autoptr(GSocketAddress) address = g_unix_socket_address_new (socket->priv->path);
- gboolean result = g_socket_bind (socket->priv->socket, address, FALSE, error);
+ unlink (priv->path);
+ g_autoptr(GSocketAddress) address = g_unix_socket_address_new (priv->path);
+ gboolean result = g_socket_bind (priv->socket, address, FALSE, error);
if (!result)
return FALSE;
- if (!g_socket_listen (socket->priv->socket, error))
+ if (!g_socket_listen (priv->socket, error))
return FALSE;
- socket->priv->source = g_socket_create_source (socket->priv->socket, G_IO_IN, NULL);
- g_source_set_callback (socket->priv->source, (GSourceFunc) greeter_connect_cb, socket, NULL);
- g_source_attach (socket->priv->source, NULL);
+ priv->source = g_socket_create_source (priv->socket, G_IO_IN, NULL);
+ g_source_set_callback (priv->source, (GSourceFunc) greeter_connect_cb, socket, NULL);
+ g_source_attach (priv->source, NULL);
/* Allow to be written to */
- if (chmod (socket->priv->path, S_IRWXU | S_IRWXG | S_IRWXO) < 0)
+ if (chmod (priv->path, S_IRWXU | S_IRWXG | S_IRWXO) < 0)
{
g_set_error (error,
G_FILE_ERROR,
g_file_error_from_errno (errno),
"Failed to set permissions on greeter socket %s: %s",
- socket->priv->path,
- g_strerror (errno));
+ priv->path,
+ g_strerror (errno));
return FALSE;
}
@@ -127,21 +135,21 @@ greeter_socket_start (GreeterSocket *socket, GError **error)
static void
greeter_socket_init (GreeterSocket *socket)
{
- socket->priv = G_TYPE_INSTANCE_GET_PRIVATE (socket, GREETER_SOCKET_TYPE, GreeterSocketPrivate);
}
static void
greeter_socket_finalize (GObject *object)
{
GreeterSocket *self = GREETER_SOCKET (object);
-
- if (self->priv->path)
- unlink (self->priv->path);
- g_clear_pointer (&self->priv->path, g_free);
- g_clear_object (&self->priv->socket);
- g_clear_object (&self->priv->source);
- g_clear_object (&self->priv->greeter_socket);
- g_clear_object (&self->priv->greeter);
+ GreeterSocketPrivate *priv = greeter_socket_get_instance_private (self);
+
+ if (priv->path)
+ unlink (priv->path);
+ g_clear_pointer (&priv->path, g_free);
+ g_clear_object (&priv->socket);
+ g_clear_object (&priv->source);
+ g_clear_object (&priv->greeter_socket);
+ g_clear_object (&priv->greeter);
G_OBJECT_CLASS (greeter_socket_parent_class)->finalize (object);
}
diff --git a/src/greeter-socket.h b/src/greeter-socket.h
index da490bad..de1c508d 100644
--- a/src/greeter-socket.h
+++ b/src/greeter-socket.h
@@ -25,12 +25,9 @@ G_BEGIN_DECLS
#define GREETER_SOCKET_SIGNAL_CREATE_GREETER "create-greeter"
-typedef struct GreeterSocketPrivate GreeterSocketPrivate;
-
typedef struct
{
- GObject parent_instance;
- GreeterSocketPrivate *priv;
+ GObject parent_instance;
} GreeterSocket;
typedef struct
diff --git a/src/greeter.c b/src/greeter.c
index c3423967..383e1f89 100644
--- a/src/greeter.c
+++ b/src/greeter.c
@@ -31,7 +31,7 @@ enum {
};
static guint signals[LAST_SIGNAL] = { 0 };
-struct GreeterPrivate
+typedef struct
{
/* PAM service to authenticate with */
gchar *pam_service;
@@ -81,7 +81,7 @@ struct GreeterPrivate
GIOChannel *to_greeter_channel;
GIOChannel *from_greeter_channel;
guint from_greeter_watch;
-};
+} GreeterPrivate;
G_DEFINE_TYPE_WITH_PRIVATE (Greeter, greeter, G_TYPE_OBJECT)
@@ -125,71 +125,80 @@ greeter_new (void)
void
greeter_set_file_descriptors (Greeter *greeter, int to_greeter_fd, int from_greeter_fd)
{
+ GreeterPrivate *priv = greeter_get_instance_private (greeter);
+
g_return_if_fail (greeter != NULL);
- g_return_if_fail (greeter->priv->to_greeter_input < 0);
- g_return_if_fail (greeter->priv->from_greeter_output < 0);
+ g_return_if_fail (priv->to_greeter_input < 0);
+ g_return_if_fail (priv->from_greeter_output < 0);
- greeter->priv->to_greeter_input = to_greeter_fd;
- greeter->priv->to_greeter_channel = g_io_channel_unix_new (greeter->priv->to_greeter_input);
+ priv->to_greeter_input = to_greeter_fd;
+ priv->to_greeter_channel = g_io_channel_unix_new (priv->to_greeter_input);
g_autoptr(GError) to_error = NULL;
- g_io_channel_set_encoding (greeter->priv->to_greeter_channel, NULL, &to_error);
+ g_io_channel_set_encoding (priv->to_greeter_channel, NULL, &to_error);
if (to_error)
g_warning ("Failed to set encoding on to greeter channel to binary: %s\n", to_error->message);
- greeter->priv->from_greeter_output = from_greeter_fd;
- greeter->priv->from_greeter_channel = g_io_channel_unix_new (greeter->priv->from_greeter_output);
+ priv->from_greeter_output = from_greeter_fd;
+ priv->from_greeter_channel = g_io_channel_unix_new (priv->from_greeter_output);
g_autoptr(GError) from_error = NULL;
- g_io_channel_set_encoding (greeter->priv->from_greeter_channel, NULL, &from_error);
+ g_io_channel_set_encoding (priv->from_greeter_channel, NULL, &from_error);
if (from_error)
g_warning ("Failed to set encoding on from greeter channel to binary: %s\n", from_error->message);
- g_io_channel_set_buffered (greeter->priv->from_greeter_channel, FALSE);
+ g_io_channel_set_buffered (priv->from_greeter_channel, FALSE);
- greeter->priv->from_greeter_watch = g_io_add_watch (greeter->priv->from_greeter_channel, G_IO_IN | G_IO_HUP, read_cb, greeter);
+ priv->from_greeter_watch = g_io_add_watch (priv->from_greeter_channel, G_IO_IN | G_IO_HUP, read_cb, greeter);
}
void
greeter_stop (Greeter *greeter)
{
+ GreeterPrivate *priv = greeter_get_instance_private (greeter);
+
/* Stop any events occurring after we've stopped */
- if (greeter->priv->authentication_session)
- g_signal_handlers_disconnect_matched (greeter->priv->authentication_session, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, greeter);
+ if (priv->authentication_session)
+ g_signal_handlers_disconnect_matched (priv->authentication_session, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, greeter);
}
void
greeter_set_pam_services (Greeter *greeter, const gchar *pam_service, const gchar *autologin_pam_service)
{
+ GreeterPrivate *priv = greeter_get_instance_private (greeter);
g_return_if_fail (greeter != NULL);
- g_free (greeter->priv->pam_service);
- greeter->priv->pam_service = g_strdup (pam_service);
- g_free (greeter->priv->autologin_pam_service);
- greeter->priv->autologin_pam_service = g_strdup (autologin_pam_service);
+ g_free (priv->pam_service);
+ priv->pam_service = g_strdup (pam_service);
+ g_free (priv->autologin_pam_service);
+ priv->autologin_pam_service = g_strdup (autologin_pam_service);
}
void
greeter_set_allow_guest (Greeter *greeter, gboolean allow_guest)
{
+ GreeterPrivate *priv = greeter_get_instance_private (greeter);
g_return_if_fail (greeter != NULL);
- greeter->priv->allow_guest = allow_guest;
+ priv->allow_guest = allow_guest;
}
void
greeter_clear_hints (Greeter *greeter)
{
+ GreeterPrivate *priv = greeter_get_instance_private (greeter);
g_return_if_fail (greeter != NULL);
- g_hash_table_remove_all (greeter->priv->hints);
+ g_hash_table_remove_all (priv->hints);
}
void
greeter_set_hint (Greeter *greeter, const gchar *name, const gchar *value)
{
+ GreeterPrivate *priv = greeter_get_instance_private (greeter);
g_return_if_fail (greeter != NULL);
- g_hash_table_insert (greeter->priv->hints, g_strdup (name), g_strdup (value));
+ g_hash_table_insert (priv->hints, g_strdup (name), g_strdup (value));
}
static void *
secure_malloc (Greeter *greeter, size_t n)
{
- if (greeter->priv->use_secure_memory)
+ GreeterPrivate *priv = greeter_get_instance_private (greeter);
+ if (priv->use_secure_memory)
return gcry_malloc_secure (n);
else
return g_malloc (n);
@@ -198,7 +207,8 @@ secure_malloc (Greeter *greeter, size_t n)
static void *
secure_realloc (Greeter *greeter, void *ptr, size_t n)
{
- if (greeter->priv->use_secure_memory)
+ GreeterPrivate *priv = greeter_get_instance_private (greeter);
+ if (priv->use_secure_memory)
return gcry_realloc (ptr, n);
else
return g_realloc (ptr, n);
@@ -207,7 +217,8 @@ secure_realloc (Greeter *greeter, void *ptr, size_t n)
static void
secure_free (Greeter *greeter, void *ptr)
{
- if (greeter->priv->use_secure_memory)
+ GreeterPrivate *priv = greeter_get_instance_private (greeter);
+ if (priv->use_secure_memory)
return gcry_free (ptr);
else
return g_free (ptr);
@@ -233,6 +244,8 @@ int_length (void)
static void
write_message (Greeter *greeter, guint8 *message, gsize message_length)
{
+ GreeterPrivate *priv = greeter_get_instance_private (greeter);
+
gchar *data = (gchar *) message;
gsize data_length = message_length;
while (data_length > 0)
@@ -241,7 +254,7 @@ write_message (Greeter *greeter, guint8 *message, gsize message_length)
gsize n_written;
g_autoptr(GError) error = NULL;
- status = g_io_channel_write_chars (greeter->priv->to_greeter_channel, data, data_length, &n_written, &error);
+ status = g_io_channel_write_chars (priv->to_greeter_channel, data, data_length, &n_written, &error);
if (error)
g_warning ("Error writing to greeter: %s", error->message);
if (status != G_IO_STATUS_NORMAL)
@@ -251,7 +264,7 @@ write_message (Greeter *greeter, guint8 *message, gsize message_length)
}
g_autoptr(GError) error = NULL;
- g_io_channel_flush (greeter->priv->to_greeter_channel, &error);
+ g_io_channel_flush (priv->to_greeter_channel, &error);
if (error)
g_warning ("Failed to flush data to greeter: %s", error->message);
}
@@ -305,14 +318,16 @@ string_length (const gchar *value)
static void
handle_connect (Greeter *greeter, const gchar *version, gboolean resettable, guint32 api_version)
{
+ GreeterPrivate *priv = greeter_get_instance_private (greeter);
+
g_debug ("Greeter connected version=%s api=%u resettable=%s", version, api_version, resettable ? "true" : "false");
- greeter->priv->api_version = api_version;
- greeter->priv->resettable = resettable;
+ priv->api_version = api_version;
+ priv->resettable = resettable;
guint32 env_length = 0;
GHashTableIter iter;
- g_hash_table_iter_init (&iter, greeter->priv->hints);
+ g_hash_table_iter_init (&iter, priv->hints);
gpointer key, value;
while (g_hash_table_iter_next (&iter, &key, &value))
env_length += string_length (key) + string_length (value);
@@ -323,7 +338,7 @@ handle_connect (Greeter *greeter, const gchar *version, gboolean resettable, gui
{
write_header (message, MAX_MESSAGE_LENGTH, SERVER_MESSAGE_CONNECTED, string_length (VERSION) + env_length, &offset);
write_string (message, MAX_MESSAGE_LENGTH, VERSION, &offset);
- g_hash_table_iter_init (&iter, greeter->priv->hints);
+ g_hash_table_iter_init (&iter, priv->hints);
while (g_hash_table_iter_next (&iter, &key, &value))
{
write_string (message, MAX_MESSAGE_LENGTH, key, &offset);
@@ -335,8 +350,8 @@ handle_connect (Greeter *greeter, const gchar *version, gboolean resettable, gui
write_header (message, MAX_MESSAGE_LENGTH, SERVER_MESSAGE_CONNECTED_V2, string_length (VERSION) + int_length () * 2 + env_length, &offset);
write_int (message, MAX_MESSAGE_LENGTH, api_version <= API_VERSION ? api_version : API_VERSION, &offset);
write_string (message, MAX_MESSAGE_LENGTH, VERSION, &offset);
- write_int (message, MAX_MESSAGE_LENGTH, g_hash_table_size (greeter->priv->hints), &offset);
- g_hash_table_iter_init (&iter, greeter->priv->hints);
+ write_int (message, MAX_MESSAGE_LENGTH, g_hash_table_size (priv->hints), &offset);
+ g_hash_table_iter_init (&iter, priv->hints);
while (g_hash_table_iter_next (&iter, &key, &value))
{
write_string (message, MAX_MESSAGE_LENGTH, key, &offset);
@@ -351,6 +366,8 @@ handle_connect (Greeter *greeter, const gchar *version, gboolean resettable, gui
static void
pam_messages_cb (Session *session, Greeter *greeter)
{
+ GreeterPrivate *priv = greeter_get_instance_private (greeter);
+
const struct pam_message *messages = session_get_messages (session);
int messages_length = session_get_messages_length (session);
@@ -363,7 +380,7 @@ pam_messages_cb (Session *session, Greeter *greeter)
guint8 message[MAX_MESSAGE_LENGTH];
gsize offset = 0;
write_header (message, MAX_MESSAGE_LENGTH, SERVER_MESSAGE_PROMPT_AUTHENTICATION, size, &offset);
- write_int (message, MAX_MESSAGE_LENGTH, greeter->priv->authentication_sequence_number, &offset);
+ write_int (message, MAX_MESSAGE_LENGTH, priv->authentication_sequence_number, &offset);
write_string (message, MAX_MESSAGE_LENGTH, session_get_username (session), &offset);
write_int (message, MAX_MESSAGE_LENGTH, messages_length, &offset);
int n_prompts = 0;
@@ -383,7 +400,7 @@ pam_messages_cb (Session *session, Greeter *greeter)
{
struct pam_response *response;
response = calloc (messages_length, sizeof (struct pam_response));
- session_respond (greeter->priv->authentication_session, response);
+ session_respond (priv->authentication_session, response);
free (response);
}
}
@@ -412,10 +429,12 @@ greeter_idle (Greeter *greeter)
void
greeter_reset (Greeter *greeter)
{
+ GreeterPrivate *priv = greeter_get_instance_private (greeter);
+
g_return_if_fail (greeter != NULL);
GHashTableIter iter;
- g_hash_table_iter_init (&iter, greeter->priv->hints);
+ g_hash_table_iter_init (&iter, priv->hints);
gpointer key, value;
guint32 length = 0;
while (g_hash_table_iter_next (&iter, &key, &value))
@@ -424,7 +443,7 @@ greeter_reset (Greeter *greeter)
guint8 message[MAX_MESSAGE_LENGTH];
gsize offset = 0;
write_header (message, MAX_MESSAGE_LENGTH, SERVER_MESSAGE_RESET, length, &offset);
- g_hash_table_iter_init (&iter, greeter->priv->hints);
+ g_hash_table_iter_init (&iter, priv->hints);
while (g_hash_table_iter_next (&iter, &key, &value))
{
write_string (message, MAX_MESSAGE_LENGTH, key, &offset);
@@ -436,6 +455,8 @@ greeter_reset (Greeter *greeter)
static void
authentication_complete_cb (Session *session, Greeter *greeter)
{
+ GreeterPrivate *priv = greeter_get_instance_private (greeter);
+
g_debug ("Authenticate result for user %s: %s", session_get_username (session), session_get_authentication_result_string (session));
int result = session_get_authentication_result (session);
@@ -450,27 +471,31 @@ authentication_complete_cb (Session *session, Greeter *greeter)
}
}
- send_end_authentication (greeter, greeter->priv->authentication_sequence_number, session_get_username (session), result);
+ send_end_authentication (greeter, priv->authentication_sequence_number, session_get_username (session), result);
}
static void
reset_session (Greeter *greeter)
{
- g_free (greeter->priv->remote_session);
- greeter->priv->remote_session = NULL;
- if (greeter->priv->authentication_session)
+ GreeterPrivate *priv = greeter_get_instance_private (greeter);
+
+ g_free (priv->remote_session);
+ priv->remote_session = NULL;
+ if (priv->authentication_session)
{
- g_signal_handlers_disconnect_matched (greeter->priv->authentication_session, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, greeter);
- session_stop (greeter->priv->authentication_session);
- g_clear_object (&greeter->priv->authentication_session);
+ g_signal_handlers_disconnect_matched (priv->authentication_session, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, greeter);
+ session_stop (priv->authentication_session);
+ g_clear_object (&priv->authentication_session);
}
- greeter->priv->guest_account_authenticated = FALSE;
+ priv->guest_account_authenticated = FALSE;
}
static void
handle_authenticate (Greeter *greeter, guint32 sequence_number, const gchar *username)
{
+ GreeterPrivate *priv = greeter_get_instance_private (greeter);
+
if (username[0] == '\0')
{
g_debug ("Greeter start authentication");
@@ -481,60 +506,62 @@ handle_authenticate (Greeter *greeter, guint32 sequence_number, const gchar *use
reset_session (greeter);
- if (greeter->priv->active_username)
- g_free (greeter->priv->active_username);
- greeter->priv->active_username = g_strdup (username);
+ if (priv->active_username)
+ g_free (priv->active_username);
+ priv->active_username = g_strdup (username);
g_object_notify (G_OBJECT (greeter), GREETER_PROPERTY_ACTIVE_USERNAME);
- greeter->priv->authentication_sequence_number = sequence_number;
- g_signal_emit (greeter, signals[CREATE_SESSION], 0, &greeter->priv->authentication_session);
- if (!greeter->priv->authentication_session)
+ priv->authentication_sequence_number = sequence_number;
+ g_signal_emit (greeter, signals[CREATE_SESSION], 0, &priv->authentication_session);
+ if (!priv->authentication_session)
{
send_end_authentication (greeter, sequence_number, "", PAM_USER_UNKNOWN);
return;
}
- g_signal_connect (G_OBJECT (greeter->priv->authentication_session), SESSION_SIGNAL_GOT_MESSAGES, G_CALLBACK (pam_messages_cb), greeter);
- g_signal_connect (G_OBJECT (greeter->priv->authentication_session), SESSION_SIGNAL_AUTHENTICATION_COMPLETE, G_CALLBACK (authentication_complete_cb), greeter);
+ g_signal_connect (G_OBJECT (priv->authentication_session), SESSION_SIGNAL_GOT_MESSAGES, G_CALLBACK (pam_messages_cb), greeter);
+ g_signal_connect (G_OBJECT (priv->authentication_session), SESSION_SIGNAL_AUTHENTICATION_COMPLETE, G_CALLBACK (authentication_complete_cb), greeter);
/* Use non-interactive service for autologin user */
- const gchar *autologin_username = g_hash_table_lookup (greeter->priv->hints, "autologin-user");
+ const gchar *autologin_username = g_hash_table_lookup (priv->hints, "autologin-user");
const gchar *service;
gboolean is_interactive;
if (autologin_username != NULL && g_strcmp0 (username, autologin_username) == 0)
{
- service = greeter->priv->autologin_pam_service;
+ service = priv->autologin_pam_service;
is_interactive = FALSE;
}
else
{
- service = greeter->priv->pam_service;
+ service = priv->pam_service;
is_interactive = TRUE;
}
/* Run the session process */
- session_set_pam_service (greeter->priv->authentication_session, service);
- session_set_username (greeter->priv->authentication_session, username);
- session_set_do_authenticate (greeter->priv->authentication_session, TRUE);
- session_set_is_interactive (greeter->priv->authentication_session, is_interactive);
- session_start (greeter->priv->authentication_session);
+ session_set_pam_service (priv->authentication_session, service);
+ session_set_username (priv->authentication_session, username);
+ session_set_do_authenticate (priv->authentication_session, TRUE);
+ session_set_is_interactive (priv->authentication_session, is_interactive);
+ session_start (priv->authentication_session);
}
static void
handle_authenticate_as_guest (Greeter *greeter, guint32 sequence_number)
{
+ GreeterPrivate *priv = greeter_get_instance_private (greeter);
+
g_debug ("Greeter start authentication for guest account");
reset_session (greeter);
- if (!greeter->priv->allow_guest)
+ if (!priv->allow_guest)
{
g_debug ("Guest account is disabled");
send_end_authentication (greeter, sequence_number, "", PAM_USER_UNKNOWN);
return;
}
- greeter->priv->guest_account_authenticated = TRUE;
+ priv->guest_account_authenticated = TRUE;
send_end_authentication (greeter, sequence_number, "", PAM_SUCCESS);
}
@@ -566,6 +593,8 @@ get_remote_session_service (const gchar *session_name)
static void
handle_authenticate_remote (Greeter *greeter, const gchar *session_name, const gchar *username, guint32 sequence_number)
{
+ GreeterPrivate *priv = greeter_get_instance_private (greeter);
+
if (username[0] == '\0')
{
g_debug ("Greeter start authentication for remote session %s", session_name);
@@ -583,24 +612,24 @@ handle_authenticate_remote (Greeter *greeter, const gchar *session_name, const g
return;
}
- greeter->priv->authentication_sequence_number = sequence_number;
- greeter->priv->remote_session = g_strdup (session_name);
- g_signal_emit (greeter, signals[CREATE_SESSION], 0, &greeter->priv->authentication_session);
- if (greeter->priv->authentication_session)
+ priv->authentication_sequence_number = sequence_number;
+ priv->remote_session = g_strdup (session_name);
+ g_signal_emit (greeter, signals[CREATE_SESSION], 0, &priv->authentication_session);
+ if (priv->authentication_session)
{
- g_signal_connect (G_OBJECT (greeter->priv->authentication_session), SESSION_SIGNAL_GOT_MESSAGES, G_CALLBACK (pam_messages_cb), greeter);
- g_signal_connect (G_OBJECT (greeter->priv->authentication_session), SESSION_SIGNAL_AUTHENTICATION_COMPLETE, G_CALLBACK (authentication_complete_cb), greeter);
+ g_signal_connect (G_OBJECT (priv->authentication_session), SESSION_SIGNAL_GOT_MESSAGES, G_CALLBACK (pam_messages_cb), greeter);
+ g_signal_connect (G_OBJECT (priv->authentication_session), SESSION_SIGNAL_AUTHENTICATION_COMPLETE, G_CALLBACK (authentication_complete_cb), greeter);
/* Run the session process */
- session_set_pam_service (greeter->priv->authentication_session, service);
- session_set_username (greeter->priv->authentication_session, username);
- session_set_do_authenticate (greeter->priv->authentication_session, TRUE);
- session_set_is_interactive (greeter->priv->authentication_session, TRUE);
- session_set_is_guest (greeter->priv->authentication_session, TRUE);
- session_start (greeter->priv->authentication_session);
+ session_set_pam_service (priv->authentication_session, service);
+ session_set_username (priv->authentication_session, username);
+ session_set_do_authenticate (priv->authentication_session, TRUE);
+ session_set_is_interactive (priv->authentication_session, TRUE);
+ session_set_is_guest (priv->authentication_session, TRUE);
+ session_start (priv->authentication_session);
}
- if (!greeter->priv->authentication_session)
+ if (!priv->authentication_session)
{
send_end_authentication (greeter, sequence_number, "", PAM_USER_UNKNOWN);
return;
@@ -610,12 +639,14 @@ handle_authenticate_remote (Greeter *greeter, const gchar *session_name, const g
static void
handle_continue_authentication (Greeter *greeter, gchar **secrets)
{
+ GreeterPrivate *priv = greeter_get_instance_private (greeter);
+
/* Not in authentication */
- if (greeter->priv->authentication_session == NULL)
+ if (priv->authentication_session == NULL)
return;
- int messages_length = session_get_messages_length (greeter->priv->authentication_session);
- const struct pam_message *messages = session_get_messages (greeter->priv->authentication_session);
+ int messages_length = session_get_messages_length (priv->authentication_session);
+ const struct pam_message *messages = session_get_messages (priv->authentication_session);
/* Check correct number of responses */
int n_prompts = 0;
@@ -627,7 +658,7 @@ handle_continue_authentication (Greeter *greeter, gchar **secrets)
}
if (g_strv_length (secrets) != n_prompts)
{
- session_respond_error (greeter->priv->authentication_session, PAM_CONV_ERR);
+ session_respond_error (priv->authentication_session, PAM_CONV_ERR);
return;
}
@@ -647,7 +678,7 @@ handle_continue_authentication (Greeter *greeter, gchar **secrets)
}
}
- session_respond (greeter->priv->authentication_session, response);
+ session_respond (priv->authentication_session, response);
for (int i = 0; i < messages_length; i++)
secure_free (greeter, response[i].resp);
@@ -657,8 +688,10 @@ handle_continue_authentication (Greeter *greeter, gchar **secrets)
static void
handle_cancel_authentication (Greeter *greeter)
{
+ GreeterPrivate *priv = greeter_get_instance_private (greeter);
+
/* Not in authentication */
- if (greeter->priv->authentication_session == NULL)
+ if (priv->authentication_session == NULL)
return;
g_debug ("Cancel authentication");
@@ -668,25 +701,27 @@ handle_cancel_authentication (Greeter *greeter)
static void
handle_start_session (Greeter *greeter, const gchar *session)
{
+ GreeterPrivate *priv = greeter_get_instance_private (greeter);
+
if (strcmp (session, "") == 0)
session = NULL;
/* Use session type chosen in remote session */
SessionType session_type = SESSION_TYPE_LOCAL;
- if (greeter->priv->remote_session)
+ if (priv->remote_session)
{
session_type = SESSION_TYPE_REMOTE;
- session = greeter->priv->remote_session;
+ session = priv->remote_session;
}
gboolean result;
- if (greeter->priv->guest_account_authenticated || session_get_is_authenticated (greeter->priv->authentication_session))
+ if (priv->guest_account_authenticated || session_get_is_authenticated (priv->authentication_session))
{
if (session)
g_debug ("Greeter requests session %s", session);
else
g_debug ("Greeter requests default session");
- greeter->priv->start_session = TRUE;
+ priv->start_session = TRUE;
g_signal_emit (greeter, signals[START_SESSION], 0, session_type, session, &result);
}
else
@@ -705,21 +740,23 @@ handle_start_session (Greeter *greeter, const gchar *session)
static void
handle_set_language (Greeter *greeter, const gchar *language)
{
- if (!greeter->priv->guest_account_authenticated && !session_get_is_authenticated (greeter->priv->authentication_session))
+ GreeterPrivate *priv = greeter_get_instance_private (greeter);
+
+ if (!priv->guest_account_authenticated && !session_get_is_authenticated (priv->authentication_session))
{
g_debug ("Ignoring set language request, user is not authorized");
return;
}
// FIXME: Could use this
- if (greeter->priv->guest_account_authenticated)
+ if (priv->guest_account_authenticated)
{
g_debug ("Ignoring set language request for guest user");
return;
}
g_debug ("Greeter sets language %s", language);
- User *user = session_get_user (greeter->priv->authentication_session);
+ User *user = session_get_user (priv->authentication_session);
user_set_language (user, language);
}
@@ -740,12 +777,14 @@ handle_ensure_shared_dir (Greeter *greeter, const gchar *username)
static guint32
read_int (Greeter *greeter, gsize *offset)
{
- if (greeter->priv->n_read - *offset < sizeof (guint32))
+ GreeterPrivate *priv = greeter_get_instance_private (greeter);
+
+ if (priv->n_read - *offset < sizeof (guint32))
{
- g_warning ("Not enough space for int, need %zu, got %zu", sizeof (guint32), greeter->priv->n_read - *offset);
+ g_warning ("Not enough space for int, need %zu, got %zu", sizeof (guint32), priv->n_read - *offset);
return 0;
}
- guint8 *buffer = greeter->priv->read_buffer + *offset;
+ guint8 *buffer = priv->read_buffer + *offset;
guint32 value = buffer[0] << 24 | buffer[1] << 16 | buffer[2] << 8 | buffer[3];
*offset += int_length ();
return value;
@@ -772,15 +811,17 @@ get_message_length (Greeter *greeter)
static gchar *
read_string_full (Greeter *greeter, gsize *offset, void* (*alloc_fn)(size_t n))
{
+ GreeterPrivate *priv = greeter_get_instance_private (greeter);
+
guint32 length = read_int (greeter, offset);
- if (greeter->priv->n_read - *offset < length)
+ if (priv->n_read - *offset < length)
{
- g_warning ("Not enough space for string, need %u, got %zu", length, greeter->priv->n_read - *offset);
+ g_warning ("Not enough space for string, need %u, got %zu", length, priv->n_read - *offset);
return g_strdup ("");
}
gchar *value = (*alloc_fn) (sizeof (gchar) * (length + 1));
- memcpy (value, greeter->priv->read_buffer + *offset, length);
+ memcpy (value, priv->read_buffer + *offset, length);
value[length] = '\0';
*offset += length;
@@ -796,7 +837,8 @@ read_string (Greeter *greeter, gsize *offset)
static gchar *
read_secret (Greeter *greeter, gsize *offset)
{
- if (greeter->priv->use_secure_memory)
+ GreeterPrivate *priv = greeter_get_instance_private (greeter);
+ if (priv->use_secure_memory)
return read_string_full (greeter, offset, gcry_malloc_secure);
else
return read_string_full (greeter, offset, g_malloc);
@@ -806,31 +848,32 @@ static gboolean
read_cb (GIOChannel *source, GIOCondition condition, gpointer data)
{
Greeter *greeter = data;
+ GreeterPrivate *priv = greeter_get_instance_private (greeter);
if (condition == G_IO_HUP)
{
g_debug ("Greeter closed communication channel");
- greeter->priv->from_greeter_watch = 0;
+ priv->from_greeter_watch = 0;
g_signal_emit (greeter, signals[DISCONNECTED], 0);
return FALSE;
}
gsize n_to_read = HEADER_SIZE;
- if (greeter->priv->n_read >= HEADER_SIZE)
+ if (priv->n_read >= HEADER_SIZE)
{
n_to_read = get_message_length (greeter);
if (n_to_read <= HEADER_SIZE)
{
- greeter->priv->from_greeter_watch = 0;
+ priv->from_greeter_watch = 0;
return FALSE;
}
}
gsize n_read;
g_autoptr(GError) error = NULL;
- GIOStatus status = g_io_channel_read_chars (greeter->priv->from_greeter_channel,
- (gchar *) greeter->priv->read_buffer + greeter->priv->n_read,
- n_to_read - greeter->priv->n_read,
+ GIOStatus status = g_io_channel_read_chars (priv->from_greeter_channel,
+ (gchar *) priv->read_buffer + priv->n_read,
+ n_to_read - priv->n_read,
&n_read,
&error);
if (error)
@@ -838,24 +881,24 @@ read_cb (GIOChannel *source, GIOCondition condition, gpointer data)
if (status == G_IO_STATUS_EOF)
{
g_debug ("Greeter closed communication channel");
- greeter->priv->from_greeter_watch = 0;
+ priv->from_greeter_watch = 0;
g_signal_emit (greeter, signals[DISCONNECTED], 0);
return FALSE;
}
else if (status != G_IO_STATUS_NORMAL)
return TRUE;
- greeter->priv->n_read += n_read;
- if (greeter->priv->n_read != n_to_read)
+ priv->n_read += n_read;
+ if (priv->n_read != n_to_read)
return TRUE;
/* If have header, rerun for content */
- if (greeter->priv->n_read == HEADER_SIZE)
+ if (priv->n_read == HEADER_SIZE)
{
n_to_read = get_message_length (greeter);
if (n_to_read > HEADER_SIZE)
{
- greeter->priv->read_buffer = secure_realloc (greeter, greeter->priv->read_buffer, n_to_read);
+ priv->read_buffer = secure_realloc (greeter, priv->read_buffer, n_to_read);
read_cb (source, condition, greeter);
return TRUE;
}
@@ -906,7 +949,7 @@ read_cb (GIOChannel *source, GIOCondition condition, gpointer data)
if (n_secrets > max_secrets)
{
g_warning ("Array length of %u elements too long", n_secrets);
- greeter->priv->from_greeter_watch = 0;
+ priv->from_greeter_watch = 0;
return FALSE;
}
gchar **secrets = g_malloc (sizeof (gchar *) * (n_secrets + 1));
@@ -944,7 +987,7 @@ read_cb (GIOChannel *source, GIOCondition condition, gpointer data)
break;
}
- greeter->priv->n_read = 0;
+ priv->n_read = 0;
return TRUE;
}
@@ -952,19 +995,22 @@ read_cb (GIOChannel *source, GIOCondition condition, gpointer data)
gboolean
greeter_get_guest_authenticated (Greeter *greeter)
{
+ GreeterPrivate *priv = greeter_get_instance_private (greeter);
g_return_val_if_fail (greeter != NULL, FALSE);
- return greeter->priv->guest_account_authenticated;
+ return priv->guest_account_authenticated;
}
Session *
greeter_take_authentication_session (Greeter *greeter)
{
+ GreeterPrivate *priv = greeter_get_instance_private (greeter);
+
g_return_val_if_fail (greeter != NULL, NULL);
- Session *session = greeter->priv->authentication_session;
- if (greeter->priv->authentication_session)
- g_signal_handlers_disconnect_matched (greeter->priv->authentication_session, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, greeter);
- greeter->priv->authentication_session = NULL;
+ Session *session = priv->authentication_session;
+ if (priv->authentication_session)
+ g_signal_handlers_disconnect_matched (priv->authentication_session, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, greeter);
+ priv->authentication_session = NULL;
return session;
}
@@ -972,22 +1018,25 @@ greeter_take_authentication_session (Greeter *greeter)
gboolean
greeter_get_resettable (Greeter *greeter)
{
+ GreeterPrivate *priv = greeter_get_instance_private (greeter);
g_return_val_if_fail (greeter != NULL, FALSE);
- return greeter->priv->resettable;
+ return priv->resettable;
}
gboolean
greeter_get_start_session (Greeter *greeter)
{
+ GreeterPrivate *priv = greeter_get_instance_private (greeter);
g_return_val_if_fail (greeter != NULL, FALSE);
- return greeter->priv->start_session;
+ return priv->start_session;
}
const gchar *
greeter_get_active_username (Greeter *greeter)
{
+ GreeterPrivate *priv = greeter_get_instance_private (greeter);
g_return_val_if_fail (greeter != NULL, NULL);
- return greeter->priv->active_username;
+ return priv->active_username;
}
static Session *
@@ -1005,38 +1054,40 @@ greeter_real_start_session (Greeter *greeter, SessionType type, const gchar *ses
static void
greeter_init (Greeter *greeter)
{
- greeter->priv = G_TYPE_INSTANCE_GET_PRIVATE (greeter, GREETER_TYPE, GreeterPrivate);
- greeter->priv->read_buffer = secure_malloc (greeter, HEADER_SIZE);
- greeter->priv->hints = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
- greeter->priv->use_secure_memory = config_get_boolean (config_get_instance (), "LightDM", "lock-memory");
- greeter->priv->to_greeter_input = -1;
- greeter->priv->from_greeter_output = -1;
+ GreeterPrivate *priv = greeter_get_instance_private (greeter);
+
+ priv->read_buffer = secure_malloc (greeter, HEADER_SIZE);
+ priv->hints = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ priv->use_secure_memory = config_get_boolean (config_get_instance (), "LightDM", "lock-memory");
+ priv->to_greeter_input = -1;
+ priv->from_greeter_output = -1;
}
static void
greeter_finalize (GObject *object)
{
Greeter *self = GREETER (object);
-
- g_clear_pointer (&self->priv->pam_service, g_free);
- g_clear_pointer (&self->priv->autologin_pam_service, g_free);
- secure_free (self, self->priv->read_buffer);
- g_hash_table_unref (self->priv->hints);
- g_clear_pointer (&self->priv->remote_session, g_free);
- g_clear_pointer (&self->priv->active_username, g_free);
- if (self->priv->authentication_session)
+ GreeterPrivate *priv = greeter_get_instance_private (self);
+
+ g_clear_pointer (&priv->pam_service, g_free);
+ g_clear_pointer (&priv->autologin_pam_service, g_free);
+ secure_free (self, priv->read_buffer);
+ g_hash_table_unref (priv->hints);
+ g_clear_pointer (&priv->remote_session, g_free);
+ g_clear_pointer (&priv->active_username, g_free);
+ if (priv->authentication_session)
{
- g_signal_handlers_disconnect_matched (self->priv->authentication_session, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, self);
- g_object_unref (self->priv->authentication_session);
+ g_signal_handlers_disconnect_matched (priv->authentication_session, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, self);
+ g_object_unref (priv->authentication_session);
}
- close (self->priv->to_greeter_input);
- close (self->priv->from_greeter_output);
- if (self->priv->to_greeter_channel)
- g_io_channel_unref (self->priv->to_greeter_channel);
- if (self->priv->from_greeter_channel)
- g_io_channel_unref (self->priv->from_greeter_channel);
- if (self->priv->from_greeter_watch)
- g_source_remove (self->priv->from_greeter_watch);
+ close (priv->to_greeter_input);
+ close (priv->from_greeter_output);
+ if (priv->to_greeter_channel)
+ g_io_channel_unref (priv->to_greeter_channel);
+ if (priv->from_greeter_channel)
+ g_io_channel_unref (priv->from_greeter_channel);
+ if (priv->from_greeter_watch)
+ g_source_remove (priv->from_greeter_watch);
G_OBJECT_CLASS (greeter_parent_class)->finalize (object);
}
diff --git a/src/greeter.h b/src/greeter.h
index 5cba26ef..4038e694 100644
--- a/src/greeter.h
+++ b/src/greeter.h
@@ -32,12 +32,9 @@ G_BEGIN_DECLS
#define GREETER_SIGNAL_ACTIVE_USERNAME_CHANGED "notify::" GREETER_PROPERTY_ACTIVE_USERNAME
-typedef struct GreeterPrivate GreeterPrivate;
-
struct Greeter
{
- GObject parent_instance;
- GreeterPrivate *priv;
+ GObject parent_instance;
};
typedef struct
diff --git a/src/login1.c b/src/login1.c
index 4eefb889..a6e9b9dc 100644
--- a/src/login1.c
+++ b/src/login1.c
@@ -26,7 +26,7 @@ enum {
};
static guint service_signals[LAST_SERVICE_SIGNAL] = { 0 };
-struct Login1ServicePrivate
+typedef struct
{
/* Connection to bus service is running on */
GDBusConnection *connection;
@@ -39,7 +39,7 @@ struct Login1ServicePrivate
/* Handle to signal subscription */
guint signal_id;
-};
+} Login1ServicePrivate;
enum {
CAN_GRAPHICAL_CHANGED,
@@ -48,7 +48,7 @@ enum {
};
static guint seat_signals[LAST_SEAT_SIGNAL] = { 0 };
-struct Login1SeatPrivate
+typedef struct
{
/* Connection to bus seat is running on */
GDBusConnection *connection;
@@ -67,7 +67,7 @@ struct Login1SeatPrivate
/* TRUE if can do session switching */
gboolean can_multi_session;
-};
+} Login1SeatPrivate;
G_DEFINE_TYPE_WITH_PRIVATE (Login1Service, login1_service, G_TYPE_OBJECT)
G_DEFINE_TYPE_WITH_PRIVATE (Login1Seat, login1_seat, G_TYPE_OBJECT)
@@ -87,9 +87,11 @@ login1_service_get_instance (void)
static void
update_property (Login1Seat *seat, const gchar *name, GVariant *value)
{
+ Login1SeatPrivate *priv = login1_seat_get_instance_private (seat);
+
if (strcmp (name, "CanGraphical") == 0 && g_variant_is_of_type (value, G_VARIANT_TYPE_BOOLEAN))
{
- seat->priv->can_graphical = g_variant_get_boolean (value);
+ priv->can_graphical = g_variant_get_boolean (value);
g_signal_emit (seat, seat_signals[CAN_GRAPHICAL_CHANGED], 0);
}
else if (strcmp (name, "ActiveSession") == 0 && g_variant_is_of_type (value, G_VARIANT_TYPE ("(so)")))
@@ -110,6 +112,7 @@ seat_properties_changed_cb (GDBusConnection *connection,
gpointer user_data)
{
Login1Seat *seat = user_data;
+ Login1SeatPrivate *priv = login1_seat_get_instance_private (seat);
GVariantIter *iter;
GVariantIter *invalidated_properties;
@@ -126,7 +129,7 @@ seat_properties_changed_cb (GDBusConnection *connection,
g_autoptr(GError) error = NULL;
g_autoptr(GVariant) result = g_dbus_connection_call_sync (connection,
LOGIN1_SERVICE_NAME,
- seat->priv->path,
+ priv->path,
"org.freedesktop.DBus.Properties",
"Get",
g_variant_new ("(ss)", "org.freedesktop.login1.Seat", name),
@@ -150,25 +153,29 @@ seat_properties_changed_cb (GDBusConnection *connection,
static Login1Seat *
add_seat (Login1Service *service, const gchar *id, const gchar *path)
{
+ Login1ServicePrivate *priv = login1_service_get_instance_private (service);
+
Login1Seat *seat = g_object_new (LOGIN1_SEAT_TYPE, NULL);
- seat->priv->connection = g_object_ref (service->priv->connection);
- seat->priv->id = g_strdup (id);
- seat->priv->path = g_strdup (path);
-
- seat->priv->signal_id = g_dbus_connection_signal_subscribe (seat->priv->connection,
- LOGIN1_SERVICE_NAME,
- "org.freedesktop.DBus.Properties",
- "PropertiesChanged",
- path,
- "org.freedesktop.login1.Seat",
- G_DBUS_SIGNAL_FLAGS_NONE,
- seat_properties_changed_cb,
- g_object_ref (seat),
- g_object_unref);
+ Login1SeatPrivate *s_priv = login1_seat_get_instance_private (seat);
+
+ s_priv->connection = g_object_ref (priv->connection);
+ s_priv->id = g_strdup (id);
+ s_priv->path = g_strdup (path);
+
+ s_priv->signal_id = g_dbus_connection_signal_subscribe (s_priv->connection,
+ LOGIN1_SERVICE_NAME,
+ "org.freedesktop.DBus.Properties",
+ "PropertiesChanged",
+ path,
+ "org.freedesktop.login1.Seat",
+ G_DBUS_SIGNAL_FLAGS_NONE,
+ seat_properties_changed_cb,
+ g_object_ref (seat),
+ g_object_unref);
/* Get properties for this seat */
g_autoptr(GError) error = NULL;
- g_autoptr(GVariant) result = g_dbus_connection_call_sync (seat->priv->connection,
+ g_autoptr(GVariant) result = g_dbus_connection_call_sync (s_priv->connection,
LOGIN1_SERVICE_NAME,
path,
"org.freedesktop.DBus.Properties",
@@ -191,14 +198,14 @@ add_seat (Login1Service *service, const gchar *id, const gchar *path)
while (g_variant_iter_loop (properties, "{&sv}", &name, &value))
{
if (strcmp (name, "CanGraphical") == 0 && g_variant_is_of_type (value, G_VARIANT_TYPE_BOOLEAN))
- seat->priv->can_graphical = g_variant_get_boolean (value);
+ s_priv->can_graphical = g_variant_get_boolean (value);
else if (strcmp (name, "CanMultiSession") == 0 && g_variant_is_of_type (value, G_VARIANT_TYPE_BOOLEAN))
- seat->priv->can_multi_session = g_variant_get_boolean (value);
+ s_priv->can_multi_session = g_variant_get_boolean (value);
}
g_variant_iter_free (properties);
}
- service->priv->seats = g_list_append (service->priv->seats, seat);
+ priv->seats = g_list_append (priv->seats, seat);
return seat;
}
@@ -213,6 +220,7 @@ signal_cb (GDBusConnection *connection,
gpointer user_data)
{
Login1Service *service = user_data;
+ Login1ServicePrivate *priv = login1_service_get_instance_private (service);
if (strcmp (signal_name, "SeatNew") == 0)
{
@@ -234,7 +242,7 @@ signal_cb (GDBusConnection *connection,
g_autoptr(Login1Seat) seat = login1_service_get_seat (service, id);
if (seat)
{
- service->priv->seats = g_list_remove (service->priv->seats, seat);
+ priv->seats = g_list_remove (priv->seats, seat);
g_signal_emit (service, service_signals[SEAT_REMOVED], 0, seat);
}
}
@@ -243,30 +251,32 @@ signal_cb (GDBusConnection *connection,
gboolean
login1_service_connect (Login1Service *service)
{
+ Login1ServicePrivate *priv = login1_service_get_instance_private (service);
+
g_return_val_if_fail (service != NULL, FALSE);
- if (service->priv->connected)
+ if (priv->connected)
return TRUE;
g_autoptr(GError) error = NULL;
- service->priv->connection = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error);
+ priv->connection = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error);
if (error)
g_warning ("Failed to get system bus: %s", error->message);
- if (!service->priv->connection)
+ if (!priv->connection)
return FALSE;
- service->priv->signal_id = g_dbus_connection_signal_subscribe (service->priv->connection,
- LOGIN1_SERVICE_NAME,
- LOGIN1_MANAGER_INTERFACE_NAME,
- NULL,
- LOGIN1_OBJECT_NAME,
- NULL,
- G_DBUS_SIGNAL_FLAGS_NONE,
- signal_cb,
- g_object_ref (service),
- g_object_unref);
-
- g_autoptr(GVariant) result = g_dbus_connection_call_sync (service->priv->connection,
+ priv->signal_id = g_dbus_connection_signal_subscribe (priv->connection,
+ LOGIN1_SERVICE_NAME,
+ LOGIN1_MANAGER_INTERFACE_NAME,
+ NULL,
+ LOGIN1_OBJECT_NAME,
+ NULL,
+ G_DBUS_SIGNAL_FLAGS_NONE,
+ signal_cb,
+ g_object_ref (service),
+ g_object_unref);
+
+ g_autoptr(GVariant) result = g_dbus_connection_call_sync (priv->connection,
LOGIN1_SERVICE_NAME,
LOGIN1_OBJECT_NAME,
LOGIN1_MANAGER_INTERFACE_NAME,
@@ -290,7 +300,7 @@ login1_service_connect (Login1Service *service)
add_seat (service, id, path);
g_variant_iter_free (seat_iter);
- service->priv->connected = TRUE;
+ priv->connected = TRUE;
return TRUE;
}
@@ -298,26 +308,32 @@ login1_service_connect (Login1Service *service)
gboolean
login1_service_get_is_connected (Login1Service *service)
{
+ Login1ServicePrivate *priv = login1_service_get_instance_private (service);
g_return_val_if_fail (service != NULL, FALSE);
- return service->priv->connected;
+ return priv->connected;
}
GList *
login1_service_get_seats (Login1Service *service)
{
+ Login1ServicePrivate *priv = login1_service_get_instance_private (service);
g_return_val_if_fail (service != NULL, NULL);
- return service->priv->seats;
+ return priv->seats;
}
Login1Seat *
login1_service_get_seat (Login1Service *service, const gchar *id)
{
+ Login1ServicePrivate *priv = login1_service_get_instance_private (service);
+
g_return_val_if_fail (service != NULL, NULL);
- for (GList *link = service->priv->seats; link; link = link->next)
+ for (GList *link = priv->seats; link; link = link->next)
{
Login1Seat *seat = link->data;
- if (strcmp (seat->priv->id, id) == 0)
+ Login1SeatPrivate *s_priv = login1_seat_get_instance_private (seat);
+
+ if (strcmp (s_priv->id, id) == 0)
return seat;
}
@@ -327,6 +343,8 @@ login1_service_get_seat (Login1Service *service, const gchar *id)
void
login1_service_lock_session (Login1Service *service, const gchar *session_id)
{
+ Login1ServicePrivate *priv = login1_service_get_instance_private (service);
+
g_return_if_fail (service != NULL);
g_return_if_fail (session_id != NULL);
@@ -336,7 +354,7 @@ login1_service_lock_session (Login1Service *service, const gchar *session_id)
return;
g_autoptr(GError) error = NULL;
- g_autoptr(GVariant) result = g_dbus_connection_call_sync (service->priv->connection,
+ g_autoptr(GVariant) result = g_dbus_connection_call_sync (priv->connection,
LOGIN1_SERVICE_NAME,
LOGIN1_OBJECT_NAME,
LOGIN1_MANAGER_INTERFACE_NAME,
@@ -354,6 +372,8 @@ login1_service_lock_session (Login1Service *service, const gchar *session_id)
void
login1_service_unlock_session (Login1Service *service, const gchar *session_id)
{
+ Login1ServicePrivate *priv = login1_service_get_instance_private (service);
+
g_return_if_fail (service != NULL);
g_return_if_fail (session_id != NULL);
@@ -363,7 +383,7 @@ login1_service_unlock_session (Login1Service *service, const gchar *session_id)
return;
g_autoptr(GError) error = NULL;
- g_autoptr(GVariant) result = g_dbus_connection_call_sync (service->priv->connection,
+ g_autoptr(GVariant) result = g_dbus_connection_call_sync (priv->connection,
LOGIN1_SERVICE_NAME,
LOGIN1_OBJECT_NAME,
LOGIN1_MANAGER_INTERFACE_NAME,
@@ -381,6 +401,8 @@ login1_service_unlock_session (Login1Service *service, const gchar *session_id)
void
login1_service_activate_session (Login1Service *service, const gchar *session_id)
{
+ Login1ServicePrivate *priv = login1_service_get_instance_private (service);
+
g_return_if_fail (service != NULL);
g_return_if_fail (session_id != NULL);
@@ -390,7 +412,7 @@ login1_service_activate_session (Login1Service *service, const gchar *session_id
return;
g_autoptr(GError) error = NULL;
- g_autoptr(GVariant) result = g_dbus_connection_call_sync (service->priv->connection,
+ g_autoptr(GVariant) result = g_dbus_connection_call_sync (priv->connection,
LOGIN1_SERVICE_NAME,
LOGIN1_OBJECT_NAME,
LOGIN1_MANAGER_INTERFACE_NAME,
@@ -408,6 +430,8 @@ login1_service_activate_session (Login1Service *service, const gchar *session_id
void
login1_service_terminate_session (Login1Service *service, const gchar *session_id)
{
+ Login1ServicePrivate *priv = login1_service_get_instance_private (service);
+
g_return_if_fail (service != NULL);
g_return_if_fail (session_id != NULL);
@@ -417,7 +441,7 @@ login1_service_terminate_session (Login1Service *service, const gchar *session_i
return;
g_autoptr(GError) error = NULL;
- g_autoptr(GVariant) result = g_dbus_connection_call_sync (service->priv->connection,
+ g_autoptr(GVariant) result = g_dbus_connection_call_sync (priv->connection,
LOGIN1_SERVICE_NAME,
LOGIN1_OBJECT_NAME,
LOGIN1_MANAGER_INTERFACE_NAME,
@@ -435,17 +459,17 @@ login1_service_terminate_session (Login1Service *service, const gchar *session_i
static void
login1_service_init (Login1Service *service)
{
- service->priv = G_TYPE_INSTANCE_GET_PRIVATE (service, LOGIN1_SERVICE_TYPE, Login1ServicePrivate);
}
static void
login1_service_finalize (GObject *object)
{
Login1Service *self = LOGIN1_SERVICE (object);
+ Login1ServicePrivate *priv = login1_service_get_instance_private (self);
- g_list_free_full (self->priv->seats, g_object_unref);
- g_dbus_connection_signal_unsubscribe (self->priv->connection, self->priv->signal_id);
- g_clear_object (&self->priv->connection);
+ g_list_free_full (priv->seats, g_object_unref);
+ g_dbus_connection_signal_unsubscribe (priv->connection, priv->signal_id);
+ g_clear_object (&priv->connection);
G_OBJECT_CLASS (login1_service_parent_class)->finalize (object);
}
@@ -478,39 +502,42 @@ login1_service_class_init (Login1ServiceClass *klass)
const gchar *
login1_seat_get_id (Login1Seat *seat)
{
+ Login1SeatPrivate *priv = login1_seat_get_instance_private (seat);
g_return_val_if_fail (seat != NULL, NULL);
- return seat->priv->id;
+ return priv->id;
}
gboolean
login1_seat_get_can_graphical (Login1Seat *seat)
{
+ Login1SeatPrivate *priv = login1_seat_get_instance_private (seat);
g_return_val_if_fail (seat != NULL, FALSE);
- return seat->priv->can_graphical;
+ return priv->can_graphical;
}
gboolean
login1_seat_get_can_multi_session (Login1Seat *seat)
{
+ Login1SeatPrivate *priv = login1_seat_get_instance_private (seat);
g_return_val_if_fail (seat != NULL, FALSE);
- return seat->priv->can_multi_session;
+ return priv->can_multi_session;
}
static void
login1_seat_init (Login1Seat *seat)
{
- seat->priv = G_TYPE_INSTANCE_GET_PRIVATE (seat, LOGIN1_SEAT_TYPE, Login1SeatPrivate);
}
static void
login1_seat_finalize (GObject *object)
{
Login1Seat *self = LOGIN1_SEAT (object);
+ Login1SeatPrivate *priv = login1_seat_get_instance_private (self);
- g_clear_pointer (&self->priv->id, g_free);
- g_clear_pointer (&self->priv->path, g_free);
- g_dbus_connection_signal_unsubscribe (self->priv->connection, self->priv->signal_id);
- g_clear_object (&self->priv->connection);
+ g_clear_pointer (&priv->id, g_free);
+ g_clear_pointer (&priv->path, g_free);
+ g_dbus_connection_signal_unsubscribe (priv->connection, priv->signal_id);
+ g_clear_object (&priv->connection);
G_OBJECT_CLASS (login1_seat_parent_class)->finalize (object);
}
diff --git a/src/login1.h b/src/login1.h
index 9377dba8..b2885521 100644
--- a/src/login1.h
+++ b/src/login1.h
@@ -28,12 +28,9 @@ G_BEGIN_DECLS
#define LOGIN1_SEAT_SIGNAL_CAN_GRAPHICAL_CHANGED "can-graphical-changed"
#define LOGIN1_SIGNAL_ACTIVE_SESION_CHANGED "active-session-changed"
-typedef struct Login1SeatPrivate Login1SeatPrivate;
-
typedef struct
{
- GObject parent_instance;
- Login1SeatPrivate *priv;
+ GObject parent_instance;
} Login1Seat;
typedef struct
@@ -43,12 +40,9 @@ typedef struct
void (*active_session_changed)(Login1Seat *seat, const gchar *login1_session_id);
} Login1SeatClass;
-typedef struct Login1ServicePrivate Login1ServicePrivate;
-
typedef struct
{
- GObject parent_instance;
- Login1ServicePrivate *priv;
+ GObject parent_instance;
} Login1Service;
typedef struct
diff --git a/src/process.c b/src/process.c
index 24416671..fc1652f1 100644
--- a/src/process.c
+++ b/src/process.c
@@ -30,7 +30,7 @@ enum {
};
static guint signals[LAST_SIGNAL] = { 0 };
-struct ProcessPrivate
+typedef struct
{
/* Function to run inside subprocess before exec */
ProcessRunFunc run_func;
@@ -64,7 +64,7 @@ struct ProcessPrivate
/* Watch on process */
guint watch;
-};
+} ProcessPrivate;
G_DEFINE_TYPE_WITH_PRIVATE (Process, process, G_TYPE_OBJECT)
@@ -80,7 +80,8 @@ process_get_current (void)
return current_process;
current_process = process_new (NULL, NULL);
- current_process->priv->pid = getpid ();
+ ProcessPrivate *priv = process_get_instance_private (current_process);
+ priv->pid = getpid ();
return current_process;
}
@@ -89,85 +90,96 @@ Process *
process_new (ProcessRunFunc run_func, gpointer run_func_data)
{
Process *process = g_object_new (PROCESS_TYPE, NULL);
- process->priv->run_func = run_func;
- process->priv->run_func_data = run_func_data;
- process->priv->log_mode = LOG_MODE_INVALID;
+ ProcessPrivate *priv = process_get_instance_private (process);
+
+ priv->run_func = run_func;
+ priv->run_func_data = run_func_data;
+ priv->log_mode = LOG_MODE_INVALID;
return process;
}
void
process_set_log_file (Process *process, const gchar *path, gboolean log_stdout, LogMode log_mode)
{
+ ProcessPrivate *priv = process_get_instance_private (process);
+
g_return_if_fail (process != NULL);
- g_free (process->priv->log_file);
- process->priv->log_file = g_strdup (path);
- process->priv->log_stdout = log_stdout;
- process->priv->log_mode = log_mode;
+
+ g_free (priv->log_file);
+ priv->log_file = g_strdup (path);
+ priv->log_stdout = log_stdout;
+ priv->log_mode = log_mode;
}
void
process_set_clear_environment (Process *process, gboolean clear_environment)
{
+ ProcessPrivate *priv = process_get_instance_private (process);
g_return_if_fail (process != NULL);
- process->priv->clear_environment = clear_environment;
+ priv->clear_environment = clear_environment;
}
gboolean
process_get_clear_environment (Process *process)
{
+ ProcessPrivate *priv = process_get_instance_private (process);
g_return_val_if_fail (process != NULL, FALSE);
- return process->priv->clear_environment;
+ return priv->clear_environment;
}
void
process_set_env (Process *process, const gchar *name, const gchar *value)
{
+ ProcessPrivate *priv = process_get_instance_private (process);
g_return_if_fail (process != NULL);
g_return_if_fail (name != NULL);
- g_hash_table_insert (process->priv->env, g_strdup (name), g_strdup (value));
+ g_hash_table_insert (priv->env, g_strdup (name), g_strdup (value));
}
const gchar *
process_get_env (Process *process, const gchar *name)
{
+ ProcessPrivate *priv = process_get_instance_private (process);
g_return_val_if_fail (process != NULL, NULL);
g_return_val_if_fail (name != NULL, NULL);
- return g_hash_table_lookup (process->priv->env, name);
+ return g_hash_table_lookup (priv->env, name);
}
void
process_set_command (Process *process, const gchar *command)
{
+ ProcessPrivate *priv = process_get_instance_private (process);
g_return_if_fail (process != NULL);
-
- g_free (process->priv->command);
- process->priv->command = g_strdup (command);
+ g_free (priv->command);
+ priv->command = g_strdup (command);
}
const gchar *
process_get_command (Process *process)
{
+ ProcessPrivate *priv = process_get_instance_private (process);
g_return_val_if_fail (process != NULL, NULL);
- return process->priv->command;
+ return priv->command;
}
static void
process_watch_cb (GPid pid, gint status, gpointer data)
{
Process *process = data;
+ ProcessPrivate *priv = process_get_instance_private (process);
- process->priv->watch = 0;
- process->priv->exit_status = status;
+ priv->watch = 0;
+ priv->exit_status = status;
if (WIFEXITED (status))
g_debug ("Process %d exited with return value %d", pid, WEXITSTATUS (status));
else if (WIFSIGNALED (status))
g_debug ("Process %d terminated with signal %d", pid, WTERMSIG (status));
- if (process->priv->quit_timeout)
- g_source_remove (process->priv->quit_timeout);
- process->priv->quit_timeout = 0;
- process->priv->pid = 0;
+ if (priv->quit_timeout)
+ g_source_remove (priv->quit_timeout);
+ priv->quit_timeout = 0;
+ priv->pid = 0;
g_hash_table_remove (processes, GINT_TO_POINTER (pid));
g_signal_emit (process, signals[STOPPED], 0);
@@ -176,33 +188,35 @@ process_watch_cb (GPid pid, gint status, gpointer data)
gboolean
process_start (Process *process, gboolean block)
{
+ ProcessPrivate *priv = process_get_instance_private (process);
+
g_return_val_if_fail (process != NULL, FALSE);
- g_return_val_if_fail (process->priv->command != NULL, FALSE);
- g_return_val_if_fail (process->priv->pid == 0, FALSE);
+ g_return_val_if_fail (priv->command != NULL, FALSE);
+ g_return_val_if_fail (priv->pid == 0, FALSE);
gint argc;
g_auto(GStrv) argv = NULL;
g_autoptr(GError) error = NULL;
- if (!g_shell_parse_argv (process->priv->command, &argc, &argv, &error))
+ if (!g_shell_parse_argv (priv->command, &argc, &argv, &error))
{
- g_warning ("Error parsing command %s: %s", process->priv->command, error->message);
+ g_warning ("Error parsing command %s: %s", priv->command, error->message);
return FALSE;
}
int log_fd = -1;
- if (process->priv->log_file)
- log_fd = log_file_open (process->priv->log_file, process->priv->log_mode);
+ if (priv->log_file)
+ log_fd = log_file_open (priv->log_file, priv->log_mode);
/* Work out variables to set */
- guint env_length = g_hash_table_size (process->priv->env);
+ guint env_length = g_hash_table_size (priv->env);
g_autofree gchar **env_keys = g_malloc (sizeof (gchar *) * env_length);
g_autofree gchar **env_values = g_malloc (sizeof (gchar *) * env_length);
- GList *keys = g_hash_table_get_keys (process->priv->env);
+ GList *keys = g_hash_table_get_keys (priv->env);
guint i = 0;
for (GList *link = keys; i < env_length; i++, link = link->next)
{
env_keys[i] = link->data;
- env_values[i] = g_hash_table_lookup (process->priv->env, env_keys[i]);
+ env_values[i] = g_hash_table_lookup (priv->env, env_keys[i]);
}
g_list_free (keys);
@@ -210,20 +224,20 @@ process_start (Process *process, gboolean block)
if (pid == 0)
{
/* Do custom setup */
- if (process->priv->run_func)
- process->priv->run_func (process, process->priv->run_func_data);
+ if (priv->run_func)
+ priv->run_func (process, priv->run_func_data);
/* Redirect output to logfile */
if (log_fd >= 0)
{
- if (process->priv->log_stdout)
+ if (priv->log_stdout)
dup2 (log_fd, STDOUT_FILENO);
dup2 (log_fd, STDERR_FILENO);
close (log_fd);
}
/* Set environment */
- if (process->priv->clear_environment)
+ if (priv->clear_environment)
#ifdef HAVE_CLEARENV
clearenv ();
#else
@@ -247,20 +261,20 @@ process_start (Process *process, gboolean block)
return FALSE;
}
- g_debug ("Launching process %d: %s", pid, process->priv->command);
+ g_debug ("Launching process %d: %s", pid, priv->command);
- process->priv->pid = pid;
+ priv->pid = pid;
if (block)
{
int exit_status;
- waitpid (process->priv->pid, &exit_status, 0);
- process_watch_cb (process->priv->pid, exit_status, process);
+ waitpid (priv->pid, &exit_status, 0);
+ process_watch_cb (priv->pid, exit_status, process);
}
else
{
- g_hash_table_insert (processes, GINT_TO_POINTER (process->priv->pid), g_object_ref (process));
- process->priv->watch = g_child_watch_add (process->priv->pid, process_watch_cb, process);
+ g_hash_table_insert (processes, GINT_TO_POINTER (priv->pid), g_object_ref (process));
+ priv->watch = g_child_watch_add (priv->pid, process_watch_cb, process);
}
return TRUE;
@@ -269,73 +283,83 @@ process_start (Process *process, gboolean block)
gboolean
process_get_is_running (Process *process)
{
+ ProcessPrivate *priv = process_get_instance_private (process);
g_return_val_if_fail (process != NULL, FALSE);
- return process->priv->pid != 0;
+ return priv->pid != 0;
}
GPid
process_get_pid (Process *process)
{
+ ProcessPrivate *priv = process_get_instance_private (process);
g_return_val_if_fail (process != NULL, 0);
- return process->priv->pid;
+ return priv->pid;
}
void
process_signal (Process *process, int signum)
{
+ ProcessPrivate *priv = process_get_instance_private (process);
+
g_return_if_fail (process != NULL);
- if (process->priv->pid == 0)
+ if (priv->pid == 0)
return;
- g_debug ("Sending signal %d to process %d", signum, process->priv->pid);
+ g_debug ("Sending signal %d to process %d", signum, priv->pid);
- if (kill (process->priv->pid, signum) < 0)
+ if (kill (priv->pid, signum) < 0)
{
/* Ignore ESRCH, we will pick that up in our wait */
if (errno != ESRCH)
- g_warning ("Error sending signal %d to process %d: %s", signum, process->priv->pid, strerror (errno));
+ g_warning ("Error sending signal %d to process %d: %s", signum, priv->pid, strerror (errno));
}
}
static gboolean
quit_timeout_cb (Process *process)
{
- process->priv->quit_timeout = 0;
+ ProcessPrivate *priv = process_get_instance_private (process);
+
+ priv->quit_timeout = 0;
process_signal (process, SIGKILL);
+
return FALSE;
}
void
process_stop (Process *process)
{
+ ProcessPrivate *priv = process_get_instance_private (process);
+
g_return_if_fail (process != NULL);
- if (process->priv->stopping)
+ if (priv->stopping)
return;
- process->priv->stopping = TRUE;
+ priv->stopping = TRUE;
/* If already stopped then we're done! */
- if (process->priv->pid == 0)
+ if (priv->pid == 0)
return;
/* Send SIGTERM, and then SIGKILL if no response */
- process->priv->quit_timeout = g_timeout_add (5000, (GSourceFunc) quit_timeout_cb, process);
+ priv->quit_timeout = g_timeout_add (5000, (GSourceFunc) quit_timeout_cb, process);
process_signal (process, SIGTERM);
}
int
process_get_exit_status (Process *process)
{
+ ProcessPrivate *priv = process_get_instance_private (process);
g_return_val_if_fail (process != NULL, -1);
- return process->priv->exit_status;
+ return priv->exit_status;
}
static void
process_init (Process *process)
{
- process->priv = G_TYPE_INSTANCE_GET_PRIVATE (process, PROCESS_TYPE, ProcessPrivate);
- process->priv->env = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ ProcessPrivate *priv = process_get_instance_private (process);
+ priv->env = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
}
static void
@@ -347,20 +371,21 @@ static void
process_finalize (GObject *object)
{
Process *self = PROCESS (object);
+ ProcessPrivate *priv = process_get_instance_private (self);
- if (self->priv->pid > 0)
- g_hash_table_remove (processes, GINT_TO_POINTER (self->priv->pid));
+ if (priv->pid > 0)
+ g_hash_table_remove (processes, GINT_TO_POINTER (priv->pid));
- g_clear_pointer (&self->priv->log_file, g_free);
- g_clear_pointer (&self->priv->command, g_free);
- g_hash_table_unref (self->priv->env);
- if (self->priv->quit_timeout)
- g_source_remove (self->priv->quit_timeout);
- if (self->priv->watch)
- g_source_remove (self->priv->watch);
+ g_clear_pointer (&priv->log_file, g_free);
+ g_clear_pointer (&priv->command, g_free);
+ g_hash_table_unref (priv->env);
+ if (priv->quit_timeout)
+ g_source_remove (priv->quit_timeout);
+ if (priv->watch)
+ g_source_remove (priv->watch);
- if (self->priv->pid)
- kill (self->priv->pid, SIGTERM);
+ if (priv->pid)
+ kill (priv->pid, SIGTERM);
G_OBJECT_CLASS (process_parent_class)->finalize (object);
}
diff --git a/src/process.h b/src/process.h
index 395762fe..fc45e5a0 100644
--- a/src/process.h
+++ b/src/process.h
@@ -27,12 +27,9 @@ G_BEGIN_DECLS
#define PROCESS_SIGNAL_GOT_SIGNAL "got-signal"
#define PROCESS_SIGNAL_STOPPED "stopped"
-typedef struct ProcessPrivate ProcessPrivate;
-
typedef struct
{
- GObject parent_instance;
- ProcessPrivate *priv;
+ GObject parent_instance;
} Process;
typedef struct
diff --git a/src/seat-local.c b/src/seat-local.c
index a83da26e..69a71f8f 100644
--- a/src/seat-local.c
+++ b/src/seat-local.c
@@ -20,7 +20,7 @@
#include "plymouth.h"
#include "vt.h"
-struct SeatLocalPrivate
+typedef struct
{
/* System compositor being used for Mir sessions */
UnitySystemCompositor *compositor;
@@ -33,7 +33,7 @@ struct SeatLocalPrivate
/* X server being used for XDMCP */
XServerLocal *xdmcp_x_server;
-};
+} SeatLocalPrivate;
G_DEFINE_TYPE_WITH_PRIVATE (SeatLocal, seat_local, SEAT_TYPE)
@@ -50,17 +50,20 @@ seat_local_setup (Seat *seat)
static void
check_stopped (SeatLocal *seat)
{
- if (!seat->priv->compositor && !seat->priv->xdmcp_x_server)
+ SeatLocalPrivate *priv = seat_local_get_instance_private (seat);
+ if (!priv->compositor && !priv->xdmcp_x_server)
SEAT_CLASS (seat_local_parent_class)->stop (SEAT (seat));
}
static void
xdmcp_x_server_stopped_cb (DisplayServer *display_server, SeatLocal *seat)
{
+ SeatLocalPrivate *priv = seat_local_get_instance_private (seat);
+
l_debug (seat, "XDMCP X server stopped");
- g_signal_handlers_disconnect_matched (seat->priv->xdmcp_x_server, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, seat);
- g_clear_object (&seat->priv->xdmcp_x_server);
+ g_signal_handlers_disconnect_matched (priv->xdmcp_x_server, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, seat);
+ g_clear_object (&priv->xdmcp_x_server);
if (seat_get_is_stopping (SEAT (seat)))
check_stopped (seat);
@@ -71,9 +74,11 @@ xdmcp_x_server_stopped_cb (DisplayServer *display_server, SeatLocal *seat)
static void
compositor_stopped_cb (UnitySystemCompositor *compositor, SeatLocal *seat)
{
+ SeatLocalPrivate *priv = seat_local_get_instance_private (seat);
+
l_debug (seat, "Compositor stopped");
- g_clear_object (&seat->priv->compositor);
+ g_clear_object (&priv->compositor);
if (seat_get_is_stopping (SEAT (seat)))
check_stopped (seat);
@@ -82,17 +87,17 @@ compositor_stopped_cb (UnitySystemCompositor *compositor, SeatLocal *seat)
static gboolean
seat_local_start (Seat *seat)
{
+ SeatLocalPrivate *priv = seat_local_get_instance_private (SEAT_LOCAL (seat));
+
/* If running as an XDMCP client then just start an X server */
const gchar *xdmcp_manager = seat_get_string_property (seat, "xdmcp-manager");
if (xdmcp_manager)
{
- SeatLocal *s = SEAT_LOCAL (seat);
-
- s->priv->xdmcp_x_server = create_x_server (s);
- x_server_local_set_xdmcp_server (s->priv->xdmcp_x_server, xdmcp_manager);
+ priv->xdmcp_x_server = create_x_server (SEAT_LOCAL (seat));
+ x_server_local_set_xdmcp_server (priv->xdmcp_x_server, xdmcp_manager);
gint port = seat_get_integer_property (seat, "xdmcp-port");
if (port > 0)
- x_server_local_set_xdmcp_port (s->priv->xdmcp_x_server, port);
+ x_server_local_set_xdmcp_port (priv->xdmcp_x_server, port);
const gchar *key_name = seat_get_string_property (seat, "xdmcp-key");
if (key_name)
{
@@ -113,12 +118,12 @@ seat_local_start (Seat *seat)
l_debug (seat, "Key %s not defined", key_name);
if (key)
- x_server_local_set_xdmcp_key (s->priv->xdmcp_x_server, key);
+ x_server_local_set_xdmcp_key (priv->xdmcp_x_server, key);
}
}
- g_signal_connect (s->priv->xdmcp_x_server, DISPLAY_SERVER_SIGNAL_STOPPED, G_CALLBACK (xdmcp_x_server_stopped_cb), seat);
- return display_server_start (DISPLAY_SERVER (s->priv->xdmcp_x_server));
+ g_signal_connect (priv->xdmcp_x_server, DISPLAY_SERVER_SIGNAL_STOPPED, G_CALLBACK (xdmcp_x_server_stopped_cb), seat);
+ return display_server_start (DISPLAY_SERVER (priv->xdmcp_x_server));
}
return SEAT_CLASS (seat_local_parent_class)->start (seat);
@@ -173,33 +178,36 @@ get_vt (SeatLocal *seat, DisplayServer *display_server)
static UnitySystemCompositor *
get_unity_system_compositor (SeatLocal *seat)
{
- if (seat->priv->compositor)
- return seat->priv->compositor;
+ SeatLocalPrivate *priv = seat_local_get_instance_private (seat);
+
+ if (priv->compositor)
+ return priv->compositor;
- seat->priv->compositor = unity_system_compositor_new ();
+ priv->compositor = unity_system_compositor_new ();
const gchar *command = seat_get_string_property (SEAT (seat), "unity-compositor-command");
if (command)
- unity_system_compositor_set_command (seat->priv->compositor, command);
+ unity_system_compositor_set_command (priv->compositor, command);
gint timeout = seat_get_integer_property (SEAT (seat), "unity-compositor-timeout");
if (timeout <= 0)
timeout = 60;
- unity_system_compositor_set_timeout (seat->priv->compositor, timeout);
+ unity_system_compositor_set_timeout (priv->compositor, timeout);
- gint vt = get_vt (seat, DISPLAY_SERVER (seat->priv->compositor));
+ gint vt = get_vt (seat, DISPLAY_SERVER (priv->compositor));
if (vt >= 0)
- unity_system_compositor_set_vt (seat->priv->compositor, vt);
+ unity_system_compositor_set_vt (priv->compositor, vt);
- seat->priv->next_xmir_id = 0;
- g_signal_connect (seat->priv->compositor, DISPLAY_SERVER_SIGNAL_STOPPED, G_CALLBACK (compositor_stopped_cb), seat);
+ priv->next_xmir_id = 0;
+ g_signal_connect (priv->compositor, DISPLAY_SERVER_SIGNAL_STOPPED, G_CALLBACK (compositor_stopped_cb), seat);
- return seat->priv->compositor;
+ return priv->compositor;
}
static XServerLocal *
create_x_server (SeatLocal *seat)
{
+ SeatLocalPrivate *priv = seat_local_get_instance_private (seat);
g_autoptr(XServerLocal) x_server = NULL;
const gchar *x_server_backend = seat_get_string_property (SEAT (seat), "xserver-backend");
@@ -212,8 +220,8 @@ create_x_server (SeatLocal *seat)
if (command)
x_server_local_set_command (x_server, command);
- g_autofree gchar *id = g_strdup_printf ("x-%d", seat->priv->next_xmir_id);
- seat->priv->next_xmir_id++;
+ g_autofree gchar *id = g_strdup_printf ("x-%d", priv->next_xmir_id);
+ priv->next_xmir_id++;
x_server_xmir_set_mir_id (X_SERVER_XMIR (x_server), id);
x_server_xmir_set_mir_socket (X_SERVER_XMIR (x_server), unity_system_compositor_get_socket (compositor));
}
@@ -294,7 +302,9 @@ seat_local_create_display_server (Seat *s, Session *session)
static gboolean
seat_local_display_server_is_used (Seat *seat, DisplayServer *display_server)
{
- if (display_server == DISPLAY_SERVER (SEAT_LOCAL (seat)->priv->compositor))
+ SeatLocalPrivate *priv = seat_local_get_instance_private (SEAT_LOCAL (seat));
+
+ if (display_server == DISPLAY_SERVER (priv->compositor))
return TRUE;
return SEAT_CLASS (seat_local_parent_class)->display_server_is_used (seat, display_server);
@@ -319,9 +329,9 @@ seat_local_create_session (Seat *seat)
}
static void
-seat_local_set_active_session (Seat *s, Session *session)
+seat_local_set_active_session (Seat *seat, Session *session)
{
- SeatLocal *seat = SEAT_LOCAL (s);
+ SeatLocalPrivate *priv = seat_local_get_instance_private (SEAT_LOCAL (seat));
DisplayServer *display_server = session_get_display_server (session);
@@ -329,36 +339,36 @@ seat_local_set_active_session (Seat *s, Session *session)
if (vt >= 0)
vt_set_active (vt);
- g_clear_object (&seat->priv->active_compositor_session);
+ g_clear_object (&priv->active_compositor_session);
if (IS_UNITY_SYSTEM_COMPOSITOR (display_server))
{
unity_system_compositor_set_active_session (UNITY_SYSTEM_COMPOSITOR (display_server), session_get_env (session, "MIR_SERVER_NAME"));
- seat->priv->active_compositor_session = g_object_ref (session);
+ priv->active_compositor_session = g_object_ref (session);
}
if (IS_X_SERVER_XMIR (display_server))
{
- unity_system_compositor_set_active_session (seat->priv->compositor, x_server_xmir_get_mir_id (X_SERVER_XMIR (display_server)));
- seat->priv->active_compositor_session = g_object_ref (session);
+ unity_system_compositor_set_active_session (priv->compositor, x_server_xmir_get_mir_id (X_SERVER_XMIR (display_server)));
+ priv->active_compositor_session = g_object_ref (session);
}
- SEAT_CLASS (seat_local_parent_class)->set_active_session (s, session);
+ SEAT_CLASS (seat_local_parent_class)->set_active_session (seat, session);
}
static Session *
-seat_local_get_active_session (Seat *s)
+seat_local_get_active_session (Seat *seat)
{
- SeatLocal *seat = SEAT_LOCAL (s);
+ SeatLocalPrivate *priv = seat_local_get_instance_private (SEAT_LOCAL (seat));
gint vt = vt_get_active ();
if (vt < 0)
return NULL;
/* If the compositor is active return the session it is displaying */
- if (seat->priv->compositor && display_server_get_vt (DISPLAY_SERVER (seat->priv->compositor)) == vt)
- return seat->priv->active_compositor_session;
+ if (priv->compositor && display_server_get_vt (DISPLAY_SERVER (priv->compositor)) == vt)
+ return priv->active_compositor_session;
/* Otherwise find out which session is on this VT */
- for (GList *link = seat_get_sessions (s); link; link = link->next)
+ for (GList *link = seat_get_sessions (seat); link; link = link->next)
{
Session *session = link->data;
DisplayServer *display_server;
@@ -374,6 +384,8 @@ seat_local_get_active_session (Seat *s)
static void
seat_local_set_next_session (Seat *seat, Session *session)
{
+ SeatLocalPrivate *priv = seat_local_get_instance_private (SEAT_LOCAL (seat));
+
if (!session)
return;
@@ -388,7 +400,7 @@ seat_local_set_next_session (Seat *seat, Session *session)
if (id)
{
l_debug (seat, "Marking Mir session %s as the next session", id);
- unity_system_compositor_set_next_session (SEAT_LOCAL (seat)->priv->compositor, id);
+ unity_system_compositor_set_next_session (priv->compositor, id);
}
SEAT_CLASS (seat_local_parent_class)->set_next_session (seat, session);
@@ -408,37 +420,37 @@ seat_local_run_script (Seat *seat, DisplayServer *display_server, Process *scrip
}
static void
-seat_local_stop (Seat *s)
+seat_local_stop (Seat *seat)
{
- SeatLocal *seat = SEAT_LOCAL (s);
+ SeatLocalPrivate *priv = seat_local_get_instance_private (SEAT_LOCAL (seat));
/* Stop the compositor */
- if (seat->priv->compositor)
- display_server_stop (DISPLAY_SERVER (seat->priv->compositor));
+ if (priv->compositor)
+ display_server_stop (DISPLAY_SERVER (priv->compositor));
/* Stop the XDMCP X server */
- if (seat->priv->xdmcp_x_server)
- display_server_stop (DISPLAY_SERVER (seat->priv->xdmcp_x_server));
+ if (priv->xdmcp_x_server)
+ display_server_stop (DISPLAY_SERVER (priv->xdmcp_x_server));
- check_stopped (seat);
+ check_stopped (SEAT_LOCAL (seat));
}
static void
seat_local_init (SeatLocal *seat)
{
- seat->priv = G_TYPE_INSTANCE_GET_PRIVATE (seat, SEAT_LOCAL_TYPE, SeatLocalPrivate);
}
static void
seat_local_finalize (GObject *object)
{
SeatLocal *seat = SEAT_LOCAL (object);
+ SeatLocalPrivate *priv = seat_local_get_instance_private (seat);
- g_clear_object (&seat->priv->compositor);
- g_clear_object (&seat->priv->active_compositor_session);
- if (seat->priv->xdmcp_x_server)
- g_signal_handlers_disconnect_matched (seat->priv->xdmcp_x_server, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, seat);
- g_clear_object (&seat->priv->xdmcp_x_server);
+ g_clear_object (&priv->compositor);
+ g_clear_object (&priv->active_compositor_session);
+ if (priv->xdmcp_x_server)
+ g_signal_handlers_disconnect_matched (priv->xdmcp_x_server, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, seat);
+ g_clear_object (&priv->xdmcp_x_server);
G_OBJECT_CLASS (seat_local_parent_class)->finalize (object);
}
diff --git a/src/seat-local.h b/src/seat-local.h
index 6e9679a4..f83039f8 100644
--- a/src/seat-local.h
+++ b/src/seat-local.h
@@ -20,12 +20,9 @@ G_BEGIN_DECLS
#define SEAT_LOCAL_TYPE (seat_local_get_type())
#define SEAT_LOCAL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SEAT_LOCAL_TYPE, SeatLocal))
-typedef struct SeatLocalPrivate SeatLocalPrivate;
-
typedef struct
{
- Seat parent_instance;
- SeatLocalPrivate *priv;
+ Seat parent_instance;
} SeatLocal;
typedef struct
diff --git a/src/seat-unity.c b/src/seat-unity.c
index 5d6d4ce1..649c94d1 100644
--- a/src/seat-unity.c
+++ b/src/seat-unity.c
@@ -21,7 +21,7 @@
#include "vt.h"
#include "plymouth.h"
-struct SeatUnityPrivate
+typedef struct
{
/* System compositor */
UnitySystemCompositor *compositor;
@@ -35,7 +35,7 @@ struct SeatUnityPrivate
/* The currently visible session */
Session *active_session;
DisplayServer *active_display_server;
-};
+} SeatUnityPrivate;
G_DEFINE_TYPE_WITH_PRIVATE (SeatUnity, seat_unity, SEAT_TYPE)
@@ -51,17 +51,20 @@ seat_unity_setup (Seat *seat)
static void
check_stopped (SeatUnity *seat)
{
- if (!seat->priv->compositor && !seat->priv->xdmcp_x_server)
+ SeatUnityPrivate *priv = seat_unity_get_instance_private (seat);
+ if (!priv->compositor && !priv->xdmcp_x_server)
SEAT_CLASS (seat_unity_parent_class)->stop (SEAT (seat));
}
static void
xdmcp_x_server_stopped_cb (DisplayServer *display_server, Seat *seat)
{
+ SeatUnityPrivate *priv = seat_unity_get_instance_private (SEAT_UNITY (seat));
+
l_debug (seat, "XDMCP X server stopped");
- g_signal_handlers_disconnect_matched (SEAT_UNITY (seat)->priv->xdmcp_x_server, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, seat);
- SEAT_UNITY (seat)->priv->xdmcp_x_server = NULL;
+ g_signal_handlers_disconnect_matched (priv->xdmcp_x_server, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, seat);
+ priv->xdmcp_x_server = NULL;
g_object_unref (display_server);
@@ -74,17 +77,19 @@ xdmcp_x_server_stopped_cb (DisplayServer *display_server, Seat *seat)
static void
compositor_ready_cb (UnitySystemCompositor *compositor, SeatUnity *seat)
{
+ SeatUnityPrivate *priv = seat_unity_get_instance_private (seat);
+
l_debug (seat, "Compositor ready");
/* If running as an XDMCP client then just start an X server */
const gchar *xdmcp_manager = seat_get_string_property (SEAT (seat), "xdmcp-manager");
if (xdmcp_manager)
{
- seat->priv->xdmcp_x_server = create_x_server (SEAT (seat));
- x_server_local_set_xdmcp_server (X_SERVER_LOCAL (seat->priv->xdmcp_x_server), xdmcp_manager);
+ priv->xdmcp_x_server = create_x_server (SEAT (seat));
+ x_server_local_set_xdmcp_server (X_SERVER_LOCAL (priv->xdmcp_x_server), xdmcp_manager);
gint port = seat_get_integer_property (SEAT (seat), "xdmcp-port");
if (port > 0)
- x_server_local_set_xdmcp_port (X_SERVER_LOCAL (seat->priv->xdmcp_x_server), port);
+ x_server_local_set_xdmcp_port (X_SERVER_LOCAL (priv->xdmcp_x_server), port);
const gchar *key_name = seat_get_string_property (SEAT (seat), "xdmcp-key");
if (key_name)
{
@@ -102,15 +107,15 @@ compositor_ready_cb (UnitySystemCompositor *compositor, SeatUnity *seat)
{
g_autofree gchar *key = g_key_file_get_string (keys, "keyring", key_name, NULL);
if (key)
- x_server_local_set_xdmcp_key (X_SERVER_LOCAL (seat->priv->xdmcp_x_server), key);
+ x_server_local_set_xdmcp_key (X_SERVER_LOCAL (priv->xdmcp_x_server), key);
}
else
l_debug (seat, "Key %s not defined", key_name);
}
}
- g_signal_connect (seat->priv->xdmcp_x_server, DISPLAY_SERVER_SIGNAL_STOPPED, G_CALLBACK (xdmcp_x_server_stopped_cb), seat);
- if (!display_server_start (DISPLAY_SERVER (seat->priv->xdmcp_x_server)))
+ g_signal_connect (priv->xdmcp_x_server, DISPLAY_SERVER_SIGNAL_STOPPED, G_CALLBACK (xdmcp_x_server_stopped_cb), seat);
+ if (!display_server_start (DISPLAY_SERVER (priv->xdmcp_x_server)))
seat_stop (SEAT (seat));
}
@@ -120,9 +125,11 @@ compositor_ready_cb (UnitySystemCompositor *compositor, SeatUnity *seat)
static void
compositor_stopped_cb (UnitySystemCompositor *compositor, SeatUnity *seat)
{
+ SeatUnityPrivate *priv = seat_unity_get_instance_private (seat);
+
l_debug (seat, "Compositor stopped");
- g_clear_object (&seat->priv->compositor);
+ g_clear_object (&priv->compositor);
if (seat_get_is_stopping (SEAT (seat)))
check_stopped (seat);
@@ -133,6 +140,8 @@ compositor_stopped_cb (UnitySystemCompositor *compositor, SeatUnity *seat)
static gboolean
seat_unity_start (Seat *seat)
{
+ SeatUnityPrivate *priv = seat_unity_get_instance_private (SEAT_UNITY (seat));
+
/* Replace Plymouth if it is running */
gint vt = -1;
if (plymouth_get_is_active () && plymouth_has_active_vt ())
@@ -160,30 +169,32 @@ seat_unity_start (Seat *seat)
if (timeout <= 0)
timeout = 60;
- SEAT_UNITY (seat)->priv->compositor = unity_system_compositor_new ();
- g_signal_connect (SEAT_UNITY (seat)->priv->compositor, DISPLAY_SERVER_SIGNAL_READY, G_CALLBACK (compositor_ready_cb), seat);
- g_signal_connect (SEAT_UNITY (seat)->priv->compositor, DISPLAY_SERVER_SIGNAL_STOPPED, G_CALLBACK (compositor_stopped_cb), seat);
- unity_system_compositor_set_command (SEAT_UNITY (seat)->priv->compositor, seat_get_string_property (SEAT (seat), "unity-compositor-command"));
- unity_system_compositor_set_vt (SEAT_UNITY (seat)->priv->compositor, vt);
- unity_system_compositor_set_timeout (SEAT_UNITY (seat)->priv->compositor, timeout);
+ priv->compositor = unity_system_compositor_new ();
+ g_signal_connect (priv->compositor, DISPLAY_SERVER_SIGNAL_READY, G_CALLBACK (compositor_ready_cb), seat);
+ g_signal_connect (priv->compositor, DISPLAY_SERVER_SIGNAL_STOPPED, G_CALLBACK (compositor_stopped_cb), seat);
+ unity_system_compositor_set_command (priv->compositor, seat_get_string_property (SEAT (seat), "unity-compositor-command"));
+ unity_system_compositor_set_vt (priv->compositor, vt);
+ unity_system_compositor_set_timeout (priv->compositor, timeout);
- return display_server_start (DISPLAY_SERVER (SEAT_UNITY (seat)->priv->compositor));
+ return display_server_start (DISPLAY_SERVER (priv->compositor));
}
static XServerXmir *
create_x_server (Seat *seat)
{
+ SeatUnityPrivate *priv = seat_unity_get_instance_private (SEAT_UNITY (seat));
+
l_debug (seat, "Starting X server on Unity compositor");
- g_autoptr(XServerXmir) x_server = x_server_xmir_new (SEAT_UNITY (seat)->priv->compositor);
+ g_autoptr(XServerXmir) x_server = x_server_xmir_new (priv->compositor);
const gchar *command = seat_get_string_property (seat, "xmir-command");
x_server_local_set_command (X_SERVER_LOCAL (x_server), command);
- g_autofree gchar *id = g_strdup_printf ("x-%d", SEAT_UNITY (seat)->priv->next_x_server_id);
- SEAT_UNITY (seat)->priv->next_x_server_id++;
+ g_autofree gchar *id = g_strdup_printf ("x-%d", priv->next_x_server_id);
+ priv->next_x_server_id++;
x_server_xmir_set_mir_id (x_server, id);
- x_server_xmir_set_mir_socket (x_server, unity_system_compositor_get_socket (SEAT_UNITY (seat)->priv->compositor));
+ x_server_xmir_set_mir_socket (x_server, unity_system_compositor_get_socket (priv->compositor));
g_autofree gchar *number = g_strdup_printf ("%d", x_server_get_display_number (X_SERVER (x_server)));
g_autoptr(XAuthority) cookie = x_authority_new_local_cookie (number);
@@ -208,11 +219,13 @@ create_x_server (Seat *seat)
static DisplayServer *
seat_unity_create_display_server (Seat *seat, Session *session)
{
+ SeatUnityPrivate *priv = seat_unity_get_instance_private (SEAT_UNITY (seat));
+
const gchar *session_type = session_get_session_type (session);
if (strcmp (session_type, "x") == 0)
return DISPLAY_SERVER (create_x_server (seat));
else if (strcmp (session_type, "mir") == 0)
- return g_object_ref (DISPLAY_SERVER (SEAT_UNITY (seat)->priv->compositor));
+ return g_object_ref (DISPLAY_SERVER (priv->compositor));
else
{
l_warning (seat, "Can't create unsupported display server '%s'", session_type);
@@ -223,7 +236,9 @@ seat_unity_create_display_server (Seat *seat, Session *session)
static gboolean
seat_unity_display_server_is_used (Seat *seat, DisplayServer *display_server)
{
- if (display_server == DISPLAY_SERVER (SEAT_UNITY (seat)->priv->compositor))
+ SeatUnityPrivate *priv = seat_unity_get_instance_private (SEAT_UNITY (seat));
+
+ if (display_server == DISPLAY_SERVER (priv->compositor))
return TRUE;
return SEAT_CLASS (seat_unity_parent_class)->display_server_is_used (seat, display_server);
@@ -232,10 +247,12 @@ seat_unity_display_server_is_used (Seat *seat, DisplayServer *display_server)
static GreeterSession *
seat_unity_create_greeter_session (Seat *seat)
{
+ SeatUnityPrivate *priv = seat_unity_get_instance_private (SEAT_UNITY (seat));
+
GreeterSession *greeter_session = SEAT_CLASS (seat_unity_parent_class)->create_greeter_session (seat);
session_set_env (SESSION (greeter_session), "XDG_SEAT", seat_get_name (seat));
- gint vt = display_server_get_vt (DISPLAY_SERVER (SEAT_UNITY (seat)->priv->compositor));
+ gint vt = display_server_get_vt (DISPLAY_SERVER (priv->compositor));
if (vt >= 0)
{
g_autofree gchar *value = g_strdup_printf ("%d", vt);
@@ -248,10 +265,12 @@ seat_unity_create_greeter_session (Seat *seat)
static Session *
seat_unity_create_session (Seat *seat)
{
+ SeatUnityPrivate *priv = seat_unity_get_instance_private (SEAT_UNITY (seat));
+
Session *session = SEAT_CLASS (seat_unity_parent_class)->create_session (seat);
session_set_env (session, "XDG_SEAT", seat_get_name (seat));
- gint vt = display_server_get_vt (DISPLAY_SERVER (SEAT_UNITY (seat)->priv->compositor));
+ gint vt = display_server_get_vt (DISPLAY_SERVER (priv->compositor));
if (vt >= 0)
{
g_autofree gchar *value = g_strdup_printf ("%d", vt);
@@ -277,31 +296,34 @@ get_mir_id (Session *session)
}
static void
-seat_unity_set_active_session (Seat *s, Session *session)
+seat_unity_set_active_session (Seat *seat, Session *session)
{
- SeatUnity *seat = SEAT_UNITY (s);
+ SeatUnityPrivate *priv = seat_unity_get_instance_private (SEAT_UNITY (seat));
- const gchar *old_id = get_mir_id (seat->priv->active_session);
+ const gchar *old_id = get_mir_id (priv->active_session);
const gchar *new_id = get_mir_id (session);
- g_clear_object (&seat->priv->active_session);
- seat->priv->active_session = g_object_ref (session);
+ g_clear_object (&priv->active_session);
+ priv->active_session = g_object_ref (session);
if (g_strcmp0 (old_id, new_id) != 0)
- unity_system_compositor_set_active_session (seat->priv->compositor, new_id);
+ unity_system_compositor_set_active_session (priv->compositor, new_id);
- SEAT_CLASS (seat_unity_parent_class)->set_active_session (s, session);
+ SEAT_CLASS (seat_unity_parent_class)->set_active_session (seat, session);
}
static Session *
seat_unity_get_active_session (Seat *seat)
{
- return SEAT_UNITY (seat)->priv->active_session;
+ SeatUnityPrivate *priv = seat_unity_get_instance_private (SEAT_UNITY (seat));
+ return priv->active_session;
}
static void
seat_unity_set_next_session (Seat *seat, Session *session)
{
+ SeatUnityPrivate *priv = seat_unity_get_instance_private (SEAT_UNITY (seat));
+
if (!session)
return;
@@ -316,7 +338,7 @@ seat_unity_set_next_session (Seat *seat, Session *session)
if (id)
{
l_debug (seat, "Marking Mir session %s as the next session", id);
- unity_system_compositor_set_next_session (SEAT_UNITY (seat)->priv->compositor, id);
+ unity_system_compositor_set_next_session (priv->compositor, id);
}
else
{
@@ -343,13 +365,15 @@ seat_unity_run_script (Seat *seat, DisplayServer *display_server, Process *scrip
static void
seat_unity_stop (Seat *seat)
{
+ SeatUnityPrivate *priv = seat_unity_get_instance_private (SEAT_UNITY (seat));
+
/* Stop the compositor first */
- if (SEAT_UNITY (seat)->priv->compositor)
- display_server_stop (DISPLAY_SERVER (SEAT_UNITY (seat)->priv->compositor));
+ if (priv->compositor)
+ display_server_stop (DISPLAY_SERVER (priv->compositor));
/* Stop the XDMCP X server first */
- if (SEAT_UNITY (seat)->priv->xdmcp_x_server)
- display_server_stop (DISPLAY_SERVER (SEAT_UNITY (seat)->priv->xdmcp_x_server));
+ if (priv->xdmcp_x_server)
+ display_server_stop (DISPLAY_SERVER (priv->xdmcp_x_server));
check_stopped (SEAT_UNITY (seat));
}
@@ -357,22 +381,22 @@ seat_unity_stop (Seat *seat)
static void
seat_unity_init (SeatUnity *seat)
{
- seat->priv = G_TYPE_INSTANCE_GET_PRIVATE (seat, SEAT_UNITY_TYPE, SeatUnityPrivate);
}
static void
seat_unity_finalize (GObject *object)
{
SeatUnity *seat = SEAT_UNITY (object);
+ SeatUnityPrivate *priv = seat_unity_get_instance_private (seat);
- g_clear_object (&seat->priv->compositor);
- if (seat->priv->xdmcp_x_server)
+ g_clear_object (&priv->compositor);
+ if (priv->xdmcp_x_server)
{
- g_signal_handlers_disconnect_matched (seat->priv->xdmcp_x_server, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, seat);
- g_object_unref (seat->priv->xdmcp_x_server);
+ g_signal_handlers_disconnect_matched (priv->xdmcp_x_server, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, seat);
+ g_object_unref (priv->xdmcp_x_server);
}
- g_clear_object (&seat->priv->active_session);
- g_clear_object (&seat->priv->active_display_server);
+ g_clear_object (&priv->active_session);
+ g_clear_object (&priv->active_display_server);
G_OBJECT_CLASS (seat_unity_parent_class)->finalize (object);
}
diff --git a/src/seat-unity.h b/src/seat-unity.h
index 7a446cde..e97ba3a9 100644
--- a/src/seat-unity.h
+++ b/src/seat-unity.h
@@ -20,12 +20,9 @@ G_BEGIN_DECLS
#define SEAT_UNITY_TYPE (seat_unity_get_type())
#define SEAT_UNITY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SEAT_UNITY_TYPE, SeatUnity))
-typedef struct SeatUnityPrivate SeatUnityPrivate;
-
typedef struct
{
- Seat parent_instance;
- SeatUnityPrivate *priv;
+ Seat parent_instance;
} SeatUnity;
typedef struct
diff --git a/src/seat-xdmcp-session.c b/src/seat-xdmcp-session.c
index 38431083..a180d67c 100644
--- a/src/seat-xdmcp-session.c
+++ b/src/seat-xdmcp-session.c
@@ -14,14 +14,14 @@
#include "seat-xdmcp-session.h"
#include "x-server-remote.h"
-struct SeatXDMCPSessionPrivate
+typedef struct
{
/* Session being serviced */
XDMCPSession *session;
/* X server using XDMCP connection */
XServerRemote *x_server;
-};
+} SeatXDMCPSessionPrivate;
G_DEFINE_TYPE_WITH_PRIVATE (SeatXDMCPSession, seat_xdmcp_session, SEAT_TYPE)
@@ -29,7 +29,9 @@ SeatXDMCPSession *
seat_xdmcp_session_new (XDMCPSession *session)
{
SeatXDMCPSession *seat = g_object_new (SEAT_XDMCP_SESSION_TYPE, NULL);
- seat->priv->session = g_object_ref (session);
+ SeatXDMCPSessionPrivate *priv = seat_xdmcp_session_get_instance_private (seat);
+
+ priv->session = g_object_ref (session);
return seat;
}
@@ -37,34 +39,36 @@ seat_xdmcp_session_new (XDMCPSession *session)
static DisplayServer *
seat_xdmcp_session_create_display_server (Seat *seat, Session *session)
{
+ SeatXDMCPSessionPrivate *priv = seat_xdmcp_session_get_instance_private (SEAT_XDMCP_SESSION (seat));
+
if (strcmp (session_get_session_type (session), "x") != 0)
return NULL;
/* Only create one server for the lifetime of this seat (XDMCP clients reconnect on logout) */
- if (SEAT_XDMCP_SESSION (seat)->priv->x_server)
+ if (priv->x_server)
return NULL;
- XAuthority *authority = xdmcp_session_get_authority (SEAT_XDMCP_SESSION (seat)->priv->session);
- g_autofree gchar *host = g_inet_address_to_string (xdmcp_session_get_address (SEAT_XDMCP_SESSION (seat)->priv->session));
+ XAuthority *authority = xdmcp_session_get_authority (priv->session);
+ g_autofree gchar *host = g_inet_address_to_string (xdmcp_session_get_address (priv->session));
- SEAT_XDMCP_SESSION (seat)->priv->x_server = x_server_remote_new (host, xdmcp_session_get_display_number (SEAT_XDMCP_SESSION (seat)->priv->session), authority);
+ priv->x_server = x_server_remote_new (host, xdmcp_session_get_display_number (priv->session), authority);
- return g_object_ref (DISPLAY_SERVER (SEAT_XDMCP_SESSION (seat)->priv->x_server));
+ return g_object_ref (DISPLAY_SERVER (priv->x_server));
}
static void
seat_xdmcp_session_init (SeatXDMCPSession *seat)
{
- seat->priv = G_TYPE_INSTANCE_GET_PRIVATE (seat, SEAT_XDMCP_SESSION_TYPE, SeatXDMCPSessionPrivate);
}
static void
seat_xdmcp_session_finalize (GObject *object)
{
SeatXDMCPSession *self = SEAT_XDMCP_SESSION (object);
+ SeatXDMCPSessionPrivate *priv = seat_xdmcp_session_get_instance_private (self);
- g_clear_object (&self->priv->session);
- g_clear_object (&self->priv->x_server);
+ g_clear_object (&priv->session);
+ g_clear_object (&priv->x_server);
G_OBJECT_CLASS (seat_xdmcp_session_parent_class)->finalize (object);
}
diff --git a/src/seat-xdmcp-session.h b/src/seat-xdmcp-session.h
index a8a3621e..eee5b1f2 100644
--- a/src/seat-xdmcp-session.h
+++ b/src/seat-xdmcp-session.h
@@ -20,12 +20,9 @@ G_BEGIN_DECLS
#define SEAT_XDMCP_SESSION_TYPE (seat_xdmcp_session_get_type())
#define SEAT_XDMCP_SESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SEAT_XDMCP_SESSION_TYPE, SeatXDMCPSession))
-typedef struct SeatXDMCPSessionPrivate SeatXDMCPSessionPrivate;
-
typedef struct
{
- Seat parent_instance;
- SeatXDMCPSessionPrivate *priv;
+ Seat parent_instance;
} SeatXDMCPSession;
typedef struct
diff --git a/src/seat-xremote.h b/src/seat-xremote.h
index 2e14d36c..1e996706 100644
--- a/src/seat-xremote.h
+++ b/src/seat-xremote.h
@@ -22,7 +22,7 @@ G_BEGIN_DECLS
typedef struct
{
- Seat parent_instance;
+ Seat parent_instance;
} SeatXRemote;
typedef struct
diff --git a/src/seat-xvnc.c b/src/seat-xvnc.c
index 17e50448..a726a9d6 100644
--- a/src/seat-xvnc.c
+++ b/src/seat-xvnc.c
@@ -15,21 +15,23 @@
#include "x-server-xvnc.h"
#include "configuration.h"
-struct SeatXVNCPrivate
+typedef struct
{
/* VNC connection */
GSocket *connection;
/* X server using VNC connection */
XServerXVNC *x_server;
-};
+} SeatXVNCPrivate;
G_DEFINE_TYPE_WITH_PRIVATE (SeatXVNC, seat_xvnc, SEAT_TYPE)
SeatXVNC *seat_xvnc_new (GSocket *connection)
{
SeatXVNC *seat = g_object_new (SEAT_XVNC_TYPE, NULL);
- seat->priv->connection = g_object_ref (connection);
+ SeatXVNCPrivate *priv = seat_xvnc_get_instance_private (seat);
+
+ priv->connection = g_object_ref (connection);
return seat;
}
@@ -44,19 +46,21 @@ seat_xvnc_setup (Seat *seat)
static DisplayServer *
seat_xvnc_create_display_server (Seat *seat, Session *session)
{
+ SeatXVNCPrivate *priv = seat_xvnc_get_instance_private (SEAT_XVNC (seat));
+
if (strcmp (session_get_session_type (session), "x") != 0)
return NULL;
/* Can only create one server for the lifetime of this seat (can't re-use VNC connection) */
- if (SEAT_XVNC (seat)->priv->x_server)
+ if (priv->x_server)
return NULL;
g_autoptr(XServerXVNC) x_server = x_server_xvnc_new ();
- SEAT_XVNC (seat)->priv->x_server = g_object_ref (x_server);
+ priv->x_server = g_object_ref (x_server);
g_autofree gchar *number = g_strdup_printf ("%d", x_server_get_display_number (X_SERVER (x_server)));
g_autoptr(XAuthority) cookie = x_authority_new_local_cookie (number);
x_server_set_authority (X_SERVER (x_server), cookie);
- x_server_xvnc_set_socket (x_server, g_socket_get_fd (SEAT_XVNC (seat)->priv->connection));
+ x_server_xvnc_set_socket (x_server, g_socket_get_fd (priv->connection));
const gchar *command = config_get_string (config_get_instance (), "VNCServer", "command");
if (command)
@@ -85,9 +89,10 @@ seat_xvnc_create_display_server (Seat *seat, Session *session)
static void
seat_xvnc_run_script (Seat *seat, DisplayServer *display_server, Process *script)
{
+ SeatXVNCPrivate *priv = seat_xvnc_get_instance_private (SEAT_XVNC (seat));
XServerXVNC *x_server = X_SERVER_XVNC (display_server);
- GInetSocketAddress *address = G_INET_SOCKET_ADDRESS (g_socket_get_remote_address (SEAT_XVNC (seat)->priv->connection, NULL));
+ GInetSocketAddress *address = G_INET_SOCKET_ADDRESS (g_socket_get_remote_address (priv->connection, NULL));
g_autofree gchar *hostname = g_inet_address_to_string (g_inet_socket_address_get_address (address));
const gchar *path = x_server_local_get_authority_file_path (X_SERVER_LOCAL (x_server));
@@ -101,16 +106,16 @@ seat_xvnc_run_script (Seat *seat, DisplayServer *display_server, Process *script
static void
seat_xvnc_init (SeatXVNC *seat)
{
- seat->priv = G_TYPE_INSTANCE_GET_PRIVATE (seat, SEAT_XVNC_TYPE, SeatXVNCPrivate);
}
static void
seat_xvnc_session_finalize (GObject *object)
{
SeatXVNC *self = SEAT_XVNC (object);
+ SeatXVNCPrivate *priv = seat_xvnc_get_instance_private (self);
- g_clear_object (&self->priv->connection);
- g_clear_object (&self->priv->x_server);
+ g_clear_object (&priv->connection);
+ g_clear_object (&priv->x_server);
G_OBJECT_CLASS (seat_xvnc_parent_class)->finalize (object);
}
diff --git a/src/seat-xvnc.h b/src/seat-xvnc.h
index f167e236..2348a31f 100644
--- a/src/seat-xvnc.h
+++ b/src/seat-xvnc.h
@@ -20,12 +20,9 @@ G_BEGIN_DECLS
#define SEAT_XVNC_TYPE (seat_xvnc_get_type())
#define SEAT_XVNC(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SEAT_XVNC_TYPE, SeatXVNC))
-typedef struct SeatXVNCPrivate SeatXVNCPrivate;
-
typedef struct
{
- Seat parent_instance;
- SeatXVNCPrivate *priv;
+ Seat parent_instance;
} SeatXVNC;
typedef struct
diff --git a/src/seat.c b/src/seat.c
index 7e6c4462..85134180 100644
--- a/src/seat.c
+++ b/src/seat.c
@@ -28,7 +28,7 @@ enum {
};
static guint signals[LAST_SIGNAL] = { 0 };
-struct SeatPrivate
+typedef struct
{
/* XDG name for this seat */
gchar *name;
@@ -68,7 +68,7 @@ struct SeatPrivate
/* The greeter to be started to replace the current one */
GreeterSession *replacement_greeter;
-};
+} SeatPrivate;
static void seat_logger_iface_init (LoggerInterface *iface);
@@ -129,30 +129,35 @@ seat_new (const gchar *module_name)
void
seat_set_name (Seat *seat, const gchar *name)
{
+ SeatPrivate *priv = seat_get_instance_private (seat);
+
g_return_if_fail (seat != NULL);
- g_free (seat->priv->name);
- seat->priv->name = g_strdup (name);
+ g_free (priv->name);
+ priv->name = g_strdup (name);
}
void
seat_set_property (Seat *seat, const gchar *name, const gchar *value)
{
+ SeatPrivate *priv = seat_get_instance_private (seat);
g_return_if_fail (seat != NULL);
- g_hash_table_insert (seat->priv->properties, g_strdup (name), g_strdup (value));
+ g_hash_table_insert (priv->properties, g_strdup (name), g_strdup (value));
}
const gchar *
seat_get_string_property (Seat *seat, const gchar *name)
{
+ SeatPrivate *priv = seat_get_instance_private (seat);
g_return_val_if_fail (seat != NULL, NULL);
- return g_hash_table_lookup (seat->priv->properties, name);
+ return g_hash_table_lookup (priv->properties, name);
}
gchar **
seat_get_string_list_property (Seat *seat, const gchar *name)
{
+ SeatPrivate *priv = seat_get_instance_private (seat);
g_return_val_if_fail (seat != NULL, NULL);
- return g_strsplit (g_hash_table_lookup (seat->priv->properties, name), ";", 0);
+ return g_strsplit (g_hash_table_lookup (priv->properties, name), ";", 0);
}
gboolean
@@ -181,41 +186,48 @@ seat_get_integer_property (Seat *seat, const gchar *name)
const gchar *
seat_get_name (Seat *seat)
{
- return seat->priv->name;
+ SeatPrivate *priv = seat_get_instance_private (seat);
+ g_return_val_if_fail (seat != NULL, NULL);
+ return priv->name;
}
void
seat_set_supports_multi_session (Seat *seat, gboolean supports_multi_session)
{
+ SeatPrivate *priv = seat_get_instance_private (seat);
g_return_if_fail (seat != NULL);
- seat->priv->supports_multi_session = supports_multi_session;
+ priv->supports_multi_session = supports_multi_session;
}
void
seat_set_share_display_server (Seat *seat, gboolean share_display_server)
{
+ SeatPrivate *priv = seat_get_instance_private (seat);
g_return_if_fail (seat != NULL);
- seat->priv->share_display_server = share_display_server;
+ priv->share_display_server = share_display_server;
}
gboolean
seat_start (Seat *seat)
{
+ SeatPrivate *priv = seat_get_instance_private (seat);
+
g_return_val_if_fail (seat != NULL, FALSE);
l_debug (seat, "Starting");
SEAT_GET_CLASS (seat)->setup (seat);
- seat->priv->started = SEAT_GET_CLASS (seat)->start (seat);
+ priv->started = SEAT_GET_CLASS (seat)->start (seat);
- return seat->priv->started;
+ return priv->started;
}
GList *
seat_get_sessions (Seat *seat)
{
+ SeatPrivate *priv = seat_get_instance_private (seat);
g_return_val_if_fail (seat != NULL, NULL);
- return seat->priv->sessions;
+ return priv->sessions;
}
static gboolean
@@ -228,12 +240,14 @@ set_greeter_idle (gpointer greeter)
void
seat_set_active_session (Seat *seat, Session *session)
{
+ SeatPrivate *priv = seat_get_instance_private (seat);
+
g_return_if_fail (seat != NULL);
SEAT_GET_CLASS (seat)->set_active_session (seat, session);
/* Stop any greeters */
- for (GList *link = seat->priv->sessions; link; link = link->next)
+ for (GList *link = priv->sessions; link; link = link->next)
{
Session *s = link->data;
@@ -245,7 +259,7 @@ seat_set_active_session (Seat *seat, Session *session)
Greeter *greeter = greeter_session_get_greeter (GREETER_SESSION (s));
if (greeter_get_resettable (greeter))
{
- if (seat->priv->active_session == s)
+ if (priv->active_session == s)
{
l_debug (seat, "Idling greeter");
/* Do this in an idle callback, because we might very well
@@ -264,12 +278,12 @@ seat_set_active_session (Seat *seat, Session *session)
}
/* Lock previous sessions */
- if (seat->priv->active_session && session != seat->priv->active_session && !IS_GREETER_SESSION (seat->priv->active_session))
- session_lock (seat->priv->active_session);
+ if (priv->active_session && session != priv->active_session && !IS_GREETER_SESSION (priv->active_session))
+ session_lock (priv->active_session);
session_activate (session);
- g_clear_object (&seat->priv->active_session);
- seat->priv->active_session = g_object_ref (session);
+ g_clear_object (&priv->active_session);
+ priv->active_session = g_object_ref (session);
}
Session *
@@ -282,8 +296,9 @@ seat_get_active_session (Seat *seat)
Session *
seat_get_next_session (Seat *seat)
{
+ SeatPrivate *priv = seat_get_instance_private (seat);
g_return_val_if_fail (seat != NULL, NULL);
- return seat->priv->next_session;
+ return priv->next_session;
}
/**
@@ -298,8 +313,9 @@ seat_get_next_session (Seat *seat)
Session *
seat_get_expected_active_session (Seat *seat)
{
+ SeatPrivate *priv = seat_get_instance_private (seat);
g_return_val_if_fail (seat != NULL, NULL);
- return seat->priv->active_session;
+ return priv->active_session;
}
/**
@@ -313,15 +329,18 @@ seat_get_expected_active_session (Seat *seat)
void
seat_set_externally_activated_session (Seat *seat, Session *session)
{
+ SeatPrivate *priv = seat_get_instance_private (seat);
g_return_if_fail (seat != NULL);
- g_clear_object (&seat->priv->active_session);
- seat->priv->active_session = g_object_ref (session);
+ g_clear_object (&priv->active_session);
+ priv->active_session = g_object_ref (session);
}
Session *
seat_find_session_by_login1_id (Seat *seat, const gchar *login1_session_id)
{
- for (GList *session_link = seat->priv->sessions; session_link; session_link = session_link->next)
+ SeatPrivate *priv = seat_get_instance_private (seat);
+
+ for (GList *session_link = priv->sessions; session_link; session_link = session_link->next)
{
Session *session = session_link->data;
if (g_strcmp0 (login1_session_id, session_get_login1_session_id (session)) == 0)
@@ -334,8 +353,9 @@ seat_find_session_by_login1_id (Seat *seat, const gchar *login1_session_id)
gboolean
seat_get_can_switch (Seat *seat)
{
+ SeatPrivate *priv = seat_get_instance_private (seat);
g_return_val_if_fail (seat != NULL, FALSE);
- return seat_get_boolean_property (seat, "allow-user-switching") && seat->priv->supports_multi_session;
+ return seat_get_boolean_property (seat, "allow-user-switching") && priv->supports_multi_session;
}
gboolean
@@ -415,12 +435,14 @@ emit_upstart_signal (const gchar *signal)
static void
check_stopped (Seat *seat)
{
- if (seat->priv->stopping &&
- !seat->priv->stopped &&
- g_list_length (seat->priv->display_servers) == 0 &&
- g_list_length (seat->priv->sessions) == 0)
+ SeatPrivate *priv = seat_get_instance_private (seat);
+
+ if (priv->stopping &&
+ !priv->stopped &&
+ g_list_length (priv->display_servers) == 0 &&
+ g_list_length (priv->sessions) == 0)
{
- seat->priv->stopped = TRUE;
+ priv->stopped = TRUE;
l_debug (seat, "Stopped");
g_signal_emit (seat, signals[STOPPED], 0);
}
@@ -429,6 +451,8 @@ check_stopped (Seat *seat)
static void
display_server_stopped_cb (DisplayServer *display_server, Seat *seat)
{
+ SeatPrivate *priv = seat_get_instance_private (seat);
+
l_debug (seat, "Display server stopped");
/* Run a script right after stopping the display server */
@@ -437,9 +461,9 @@ display_server_stopped_cb (DisplayServer *display_server, Seat *seat)
run_script (seat, NULL, script, NULL);
g_signal_handlers_disconnect_matched (display_server, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, seat);
- seat->priv->display_servers = g_list_remove (seat->priv->display_servers, display_server);
+ priv->display_servers = g_list_remove (priv->display_servers, display_server);
- if (seat->priv->stopping || !seat->priv->started)
+ if (priv->stopping || !priv->started)
{
check_stopped (seat);
g_object_unref (display_server);
@@ -447,7 +471,7 @@ display_server_stopped_cb (DisplayServer *display_server, Seat *seat)
}
/* Stop all sessions on this display server */
- GList *list = g_list_copy (seat->priv->sessions);
+ GList *list = g_list_copy (priv->sessions);
for (GList *link = list; link; link = link->next)
g_object_ref (link->data);
for (GList *link = list; link; link = link->next)
@@ -464,7 +488,7 @@ display_server_stopped_cb (DisplayServer *display_server, Seat *seat)
/* Stop seat if this is the only display server and it failed to start a greeter */
if (is_failed_greeter &&
- g_list_length (seat->priv->display_servers) == 0)
+ g_list_length (priv->display_servers) == 0)
{
l_debug (seat, "Stopping; greeter display server failed to start");
seat_stop (seat);
@@ -472,7 +496,7 @@ display_server_stopped_cb (DisplayServer *display_server, Seat *seat)
}
g_list_free_full (list, g_object_unref);
- if (!seat->priv->stopping)
+ if (!priv->stopping)
{
/* If we were the active session, switch to a greeter */
Session *active_session = seat_get_active_session (seat);
@@ -493,13 +517,16 @@ display_server_stopped_cb (DisplayServer *display_server, Seat *seat)
static gboolean
can_share_display_server (Seat *seat, DisplayServer *display_server)
{
- return seat->priv->share_display_server && display_server_get_can_share (display_server);
+ SeatPrivate *priv = seat_get_instance_private (seat);
+ return priv->share_display_server && display_server_get_can_share (display_server);
}
static GreeterSession *
find_greeter_session (Seat *seat)
{
- for (GList *link = seat->priv->sessions; link; link = link->next)
+ SeatPrivate *priv = seat_get_instance_private (seat);
+
+ for (GList *link = priv->sessions; link; link = link->next)
{
Session *session = link->data;
if (!session_get_is_stopping (session) && IS_GREETER_SESSION (session))
@@ -512,7 +539,9 @@ find_greeter_session (Seat *seat)
static GreeterSession *
find_resettable_greeter (Seat *seat)
{
- for (GList *link = seat->priv->sessions; link; link = link->next)
+ SeatPrivate *priv = seat_get_instance_private (seat);
+
+ for (GList *link = priv->sessions; link; link = link->next)
{
Session *session = link->data;
if (!session_get_is_stopping (session) && IS_GREETER_SESSION (session) &&
@@ -537,6 +566,8 @@ set_greeter_hints (Seat *seat, Greeter *greeter)
static void
switch_to_greeter_from_failed_session (Seat *seat, Session *session)
{
+ SeatPrivate *priv = seat_get_instance_private (seat);
+
/* Switch to greeter if one open */
GreeterSession *greeter_session = find_resettable_greeter (seat);
gboolean existing = FALSE;
@@ -564,8 +595,8 @@ switch_to_greeter_from_failed_session (Seat *seat, Session *session)
}
else
{
- g_clear_object (&seat->priv->session_to_activate);
- seat->priv->session_to_activate = g_object_ref (SESSION (greeter_session));
+ g_clear_object (&priv->session_to_activate);
+ priv->session_to_activate = g_object_ref (SESSION (greeter_session));
if (can_share_display_server (seat, session_get_display_server (session)))
session_set_display_server (SESSION (greeter_session), session_get_display_server (session));
@@ -594,7 +625,7 @@ start_session (Seat *seat, Session *session)
if (IS_GREETER_SESSION (session))
{
g_autofree gchar *log_dir = config_get_string (config_get_instance (), "LightDM", "log-directory");
- g_autofree gchar *filename = g_strdup_printf ("%s-greeter.log", seat->priv->name);
+ g_autofree gchar *filename = g_strdup_printf ("%s-greeter.log", seat_get_name (seat));
g_autofree gchar *log_filename = g_build_filename (log_dir, filename, NULL);
gboolean backup_logs = config_get_boolean (config_get_instance (), "LightDM", "backup-logs");
session_set_log_file (session, log_filename, backup_logs ? LOG_MODE_BACKUP_AND_TRUNCATE : LOG_MODE_APPEND);
@@ -617,6 +648,8 @@ start_session (Seat *seat, Session *session)
static void
run_session (Seat *seat, Session *session)
{
+ SeatPrivate *priv = seat_get_instance_private (seat);
+
const gchar *script;
if (IS_GREETER_SESSION (session))
script = seat_get_string_property (seat, "greeter-setup-script");
@@ -639,12 +672,12 @@ run_session (Seat *seat, Session *session)
// FIXME: Wait until the session is ready
- if (session == seat->priv->session_to_activate)
+ if (session == priv->session_to_activate)
{
seat_set_active_session (seat, session);
- g_clear_object (&seat->priv->session_to_activate);
+ g_clear_object (&priv->session_to_activate);
}
- else if (seat->priv->active_session)
+ else if (priv->active_session)
{
/* Multiple sessions can theoretically be on the same VT (especially
if using Mir). If a new session appears on an existing active VT,
@@ -653,17 +686,19 @@ run_session (Seat *seat, Session *session)
session that we want to be active. So let's be explicit and
re-activate the correct session whenever a new session starts.
There's no harm to do this in seats that enforce separate VTs. */
- session_activate (seat->priv->active_session);
+ session_activate (priv->active_session);
}
}
static Session *
find_user_session (Seat *seat, const gchar *username, Session *ignore_session)
{
+ SeatPrivate *priv = seat_get_instance_private (seat);
+
if (!username)
return NULL;
- for (GList *link = seat->priv->sessions; link; link = link->next)
+ for (GList *link = priv->sessions; link; link = link->next)
{
Session *session = link->data;
@@ -680,10 +715,11 @@ find_user_session (Seat *seat, const gchar *username, Session *ignore_session)
static void
greeter_active_username_changed_cb (Greeter *greeter, GParamSpec *pspec, Seat *seat)
{
- Session *session = find_user_session (seat, greeter_get_active_username (greeter), seat->priv->active_session);
+ SeatPrivate *priv = seat_get_instance_private (seat);
+ Session *session = find_user_session (seat, greeter_get_active_username (greeter), priv->active_session);
- g_clear_object (&seat->priv->next_session);
- seat->priv->next_session = session ? g_object_ref (session) : NULL;
+ g_clear_object (&priv->next_session);
+ priv->next_session = session ? g_object_ref (session) : NULL;
SEAT_GET_CLASS (seat)->set_next_session (seat, session);
}
@@ -721,16 +757,18 @@ session_authentication_complete_cb (Session *session, Seat *seat)
static void
session_stopped_cb (Session *session, Seat *seat)
{
+ SeatPrivate *priv = seat_get_instance_private (seat);
+
l_debug (seat, "Session stopped");
g_signal_handlers_disconnect_matched (session, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, seat);
- seat->priv->sessions = g_list_remove (seat->priv->sessions, session);
- if (session == seat->priv->active_session)
- g_clear_object (&seat->priv->active_session);
- if (session == seat->priv->next_session)
- g_clear_object (&seat->priv->next_session);
- if (session == seat->priv->session_to_activate)
- g_clear_object (&seat->priv->session_to_activate);
+ priv->sessions = g_list_remove (priv->sessions, session);
+ if (session == priv->active_session)
+ g_clear_object (&priv->active_session);
+ if (session == priv->next_session)
+ g_clear_object (&priv->next_session);
+ if (session == priv->session_to_activate)
+ g_clear_object (&priv->session_to_activate);
DisplayServer *display_server = session_get_display_server (session);
@@ -744,10 +782,10 @@ session_stopped_cb (Session *session, Seat *seat)
/* We were waiting for this session, but it didn't start :( */
// FIXME: Start a greeter on this?
- if (session == seat->priv->session_to_activate)
- g_clear_object (&seat->priv->session_to_activate);
+ if (session == priv->session_to_activate)
+ g_clear_object (&priv->session_to_activate);
- if (seat->priv->stopping)
+ if (priv->stopping)
{
check_stopped (seat);
g_object_unref (session);
@@ -755,10 +793,10 @@ session_stopped_cb (Session *session, Seat *seat)
}
/* If there is a pending replacement greeter, start it */
- if (IS_GREETER_SESSION (session) && seat->priv->replacement_greeter)
+ if (IS_GREETER_SESSION (session) && priv->replacement_greeter)
{
- GreeterSession *replacement_greeter = seat->priv->replacement_greeter;
- seat->priv->replacement_greeter = NULL;
+ GreeterSession *replacement_greeter = priv->replacement_greeter;
+ priv->replacement_greeter = NULL;
if (session_get_is_authenticated (SESSION (replacement_greeter)))
{
@@ -778,7 +816,7 @@ session_stopped_cb (Session *session, Seat *seat)
can_share_display_server (seat, display_server) &&
greeter_get_start_session (greeter_session_get_greeter (GREETER_SESSION (session))))
{
- for (GList *link = seat->priv->sessions; link; link = link->next)
+ for (GList *link = priv->sessions; link; link = link->next)
{
Session *s = link->data;
@@ -802,8 +840,8 @@ session_stopped_cb (Session *session, Seat *seat)
/* If this is the greeter and nothing else is running then stop the seat */
else if (IS_GREETER_SESSION (session) &&
!greeter_get_start_session (greeter_session_get_greeter (GREETER_SESSION (session))) &&
- g_list_length (seat->priv->display_servers) == 1 &&
- g_list_nth_data (seat->priv->display_servers, 0) == display_server)
+ g_list_length (priv->display_servers) == 1 &&
+ g_list_nth_data (priv->display_servers, 0) == display_server)
{
l_debug (seat, "Stopping; failed to start a greeter");
seat_stop (seat);
@@ -860,8 +898,10 @@ set_session_env (Session *session)
static Session *
create_session (Seat *seat, gboolean autostart)
{
+ SeatPrivate *priv = seat_get_instance_private (seat);
+
Session *session = SEAT_GET_CLASS (seat)->create_session (seat);
- seat->priv->sessions = g_list_append (seat->priv->sessions, session);
+ priv->sessions = g_list_append (priv->sessions, session);
if (autostart)
g_signal_connect (session, SESSION_SIGNAL_AUTHENTICATION_COMPLETE, G_CALLBACK (session_authentication_complete_cb), seat);
g_signal_connect (session, SESSION_SIGNAL_STOPPED, G_CALLBACK (session_stopped_cb), seat);
@@ -1046,8 +1086,10 @@ create_guest_session (Seat *seat, const gchar *session_name)
static Session *
get_greeter_session (Seat *seat, Greeter *greeter)
{
+ SeatPrivate *priv = seat_get_instance_private (seat);
+
/* Stop any greeters */
- for (GList *link = seat->priv->sessions; link; link = link->next)
+ for (GList *link = priv->sessions; link; link = link->next)
{
Session *session = link->data;
@@ -1074,6 +1116,8 @@ greeter_create_session_cb (Greeter *greeter, Seat *seat)
static gboolean
greeter_start_session_cb (Greeter *greeter, SessionType type, const gchar *session_name, Seat *seat)
{
+ SeatPrivate *priv = seat_get_instance_private (seat);
+
/* Get the session to use */
Session *session;
if (greeter_get_guest_authenticated (greeter))
@@ -1134,8 +1178,8 @@ greeter_start_session_cb (Greeter *greeter, SessionType type, const gchar *sessi
}
/* Switch to this session when it is ready */
- g_clear_object (&seat->priv->session_to_activate);
- seat->priv->session_to_activate = session;
+ g_clear_object (&priv->session_to_activate);
+ priv->session_to_activate = session;
/* Return to existing session if it is open */
const gchar *username = session_get_username (session);
@@ -1186,6 +1230,8 @@ greeter_start_session_cb (Greeter *greeter, SessionType type, const gchar *sessi
static GreeterSession *
create_greeter_session (Seat *seat)
{
+ SeatPrivate *priv = seat_get_instance_private (seat);
+
l_debug (seat, "Creating greeter session");
g_autofree gchar *sessions_dir = config_get_string (config_get_instance (), "LightDM", "greeters-directory");
@@ -1204,7 +1250,7 @@ create_greeter_session (Seat *seat)
GreeterSession *greeter_session = SEAT_GET_CLASS (seat)->create_greeter_session (seat);
Greeter *greeter = greeter_session_get_greeter (greeter_session);
session_set_config (SESSION (greeter_session), session_config);
- seat->priv->sessions = g_list_append (seat->priv->sessions, SESSION (greeter_session));
+ priv->sessions = g_list_append (priv->sessions, SESSION (greeter_session));
g_signal_connect (greeter, GREETER_SIGNAL_ACTIVE_USERNAME_CHANGED, G_CALLBACK (greeter_active_username_changed_cb), seat);
g_signal_connect (greeter_session, SESSION_SIGNAL_AUTHENTICATION_COMPLETE, G_CALLBACK (session_authentication_complete_cb), seat);
g_signal_connect (greeter_session, SESSION_SIGNAL_STOPPED, G_CALLBACK (session_stopped_cb), seat);
@@ -1262,7 +1308,9 @@ create_greeter_session (Seat *seat)
static Session *
find_session_for_display_server (Seat *seat, DisplayServer *display_server)
{
- for (GList *link = seat->priv->sessions; link; link = link->next)
+ SeatPrivate *priv = seat_get_instance_private (seat);
+
+ for (GList *link = priv->sessions; link; link = link->next)
{
Session *session = link->data;
@@ -1314,6 +1362,8 @@ display_server_ready_cb (DisplayServer *display_server, Seat *seat)
static DisplayServer *
create_display_server (Seat *seat, Session *session)
{
+ SeatPrivate *priv = seat_get_instance_private (seat);
+
l_debug (seat, "Creating display server of type %s", session_get_session_type (session));
DisplayServer *display_server = SEAT_GET_CLASS (seat)->create_display_server (seat, session);
@@ -1321,9 +1371,9 @@ create_display_server (Seat *seat, Session *session)
return NULL;
/* Remember this display server */
- if (!g_list_find (seat->priv->display_servers, display_server))
+ if (!g_list_find (priv->display_servers, display_server))
{
- seat->priv->display_servers = g_list_append (seat->priv->display_servers, display_server);
+ priv->display_servers = g_list_append (priv->display_servers, display_server);
g_signal_connect (display_server, DISPLAY_SERVER_SIGNAL_READY, G_CALLBACK (display_server_ready_cb), seat);
g_signal_connect (display_server, DISPLAY_SERVER_SIGNAL_STOPPED, G_CALLBACK (display_server_stopped_cb), seat);
}
@@ -1346,9 +1396,11 @@ start_display_server (Seat *seat, DisplayServer *display_server)
gboolean
seat_switch_to_greeter (Seat *seat)
{
+ SeatPrivate *priv = seat_get_instance_private (seat);
+
g_return_val_if_fail (seat != NULL, FALSE);
- if (!seat_get_can_switch (seat) && seat->priv->sessions != NULL)
+ if (!seat_get_can_switch (seat) && priv->sessions != NULL)
return FALSE;
/* Switch to greeter if one open */
@@ -1364,12 +1416,12 @@ seat_switch_to_greeter (Seat *seat)
if (!greeter_session)
return FALSE;
- g_clear_object (&seat->priv->session_to_activate);
- seat->priv->session_to_activate = g_object_ref (SESSION (greeter_session));
+ g_clear_object (&priv->session_to_activate);
+ priv->session_to_activate = g_object_ref (SESSION (greeter_session));
DisplayServer *display_server = create_display_server (seat, SESSION (greeter_session));
if (!display_server) {
- g_clear_object (&seat->priv->session_to_activate);
+ g_clear_object (&priv->session_to_activate);
return FALSE;
}
session_set_display_server (SESSION (greeter_session), display_server);
@@ -1380,6 +1432,8 @@ seat_switch_to_greeter (Seat *seat)
static void
switch_authentication_complete_cb (Session *session, Seat *seat)
{
+ SeatPrivate *priv = seat_get_instance_private (seat);
+
/* If authenticated, then unlock existing session or start new one */
if (session_get_is_authenticated (session))
{
@@ -1394,8 +1448,8 @@ switch_authentication_complete_cb (Session *session, Seat *seat)
else
{
l_debug (seat, "Session authenticated, starting display server");
- g_clear_object (&seat->priv->session_to_activate);
- seat->priv->session_to_activate = g_object_ref (session);
+ g_clear_object (&priv->session_to_activate);
+ priv->session_to_activate = g_object_ref (session);
DisplayServer *display_server = create_display_server (seat, session);
session_set_display_server (session, display_server);
start_display_server (seat, display_server);
@@ -1434,8 +1488,8 @@ switch_authentication_complete_cb (Session *session, Seat *seat)
}
else
{
- g_clear_object (&seat->priv->session_to_activate);
- seat->priv->session_to_activate = g_object_ref (SESSION (greeter_session));
+ g_clear_object (&priv->session_to_activate);
+ priv->session_to_activate = g_object_ref (SESSION (greeter_session));
DisplayServer *display_server = create_display_server (seat, SESSION (greeter_session));
session_set_display_server (SESSION (greeter_session), display_server);
@@ -1446,6 +1500,8 @@ switch_authentication_complete_cb (Session *session, Seat *seat)
gboolean
seat_switch_to_user (Seat *seat, const gchar *username, const gchar *session_name)
{
+ SeatPrivate *priv = seat_get_instance_private (seat);
+
g_return_val_if_fail (seat != NULL, FALSE);
g_return_val_if_fail (username != NULL, FALSE);
@@ -1454,7 +1510,7 @@ seat_switch_to_user (Seat *seat, const gchar *username, const gchar *session_nam
/* If we're already on this session, then ignore */
Session *session = find_user_session (seat, username, NULL);
- if (session && session == seat->priv->active_session)
+ if (session && session == priv->active_session)
return TRUE;
l_debug (seat, "Switching to user %s", username);
@@ -1470,7 +1526,9 @@ seat_switch_to_user (Seat *seat, const gchar *username, const gchar *session_nam
static Session *
find_guest_session (Seat *seat)
{
- for (GList *link = seat->priv->sessions; link; link = link->next)
+ SeatPrivate *priv = seat_get_instance_private (seat);
+
+ for (GList *link = priv->sessions; link; link = link->next)
{
Session *session = link->data;
if (!session_get_is_stopping (session) && session_get_is_guest (session))
@@ -1483,6 +1541,8 @@ find_guest_session (Seat *seat)
gboolean
seat_switch_to_guest (Seat *seat, const gchar *session_name)
{
+ SeatPrivate *priv = seat_get_instance_private (seat);
+
g_return_val_if_fail (seat != NULL, FALSE);
if (!seat_get_can_switch (seat) || !seat_get_allow_guest (seat))
@@ -1503,8 +1563,8 @@ seat_switch_to_guest (Seat *seat, const gchar *session_name)
DisplayServer *display_server = create_display_server (seat, session);
- g_clear_object (&seat->priv->session_to_activate);
- seat->priv->session_to_activate = g_object_ref (session);
+ g_clear_object (&priv->session_to_activate);
+ priv->session_to_activate = g_object_ref (session);
session_set_pam_service (session, seat_get_string_property (seat, "pam-autologin-service"));
session_set_display_server (session, display_server);
@@ -1514,6 +1574,8 @@ seat_switch_to_guest (Seat *seat, const gchar *session_name)
gboolean
seat_lock (Seat *seat, const gchar *username)
{
+ SeatPrivate *priv = seat_get_instance_private (seat);
+
g_return_val_if_fail (seat != NULL, FALSE);
if (!seat_get_can_switch (seat))
@@ -1571,13 +1633,13 @@ seat_lock (Seat *seat, const gchar *username)
display_server = create_display_server (seat, SESSION (greeter_session));
session_set_display_server (SESSION (greeter_session), display_server);
- g_clear_object (&seat->priv->session_to_activate);
- seat->priv->session_to_activate = g_object_ref (SESSION (greeter_session));
+ g_clear_object (&priv->session_to_activate);
+ priv->session_to_activate = g_object_ref (SESSION (greeter_session));
if (reuse_xserver)
{
- g_clear_object (&seat->priv->replacement_greeter);
- seat->priv->replacement_greeter = g_object_ref (greeter_session);
+ g_clear_object (&priv->replacement_greeter);
+ priv->replacement_greeter = g_object_ref (greeter_session);
return TRUE;
}
else
@@ -1588,21 +1650,24 @@ seat_lock (Seat *seat, const gchar *username)
void
seat_stop (Seat *seat)
{
+ SeatPrivate *priv = seat_get_instance_private (seat);
+
g_return_if_fail (seat != NULL);
- if (seat->priv->stopping)
+ if (priv->stopping)
return;
l_debug (seat, "Stopping");
- seat->priv->stopping = TRUE;
+ priv->stopping = TRUE;
SEAT_GET_CLASS (seat)->stop (seat);
}
gboolean
seat_get_is_stopping (Seat *seat)
{
+ SeatPrivate *priv = seat_get_instance_private (seat);
g_return_val_if_fail (seat != NULL, FALSE);
- return seat->priv->stopping;
+ return priv->stopping;
}
static void
@@ -1613,6 +1678,8 @@ seat_real_setup (Seat *seat)
static gboolean
seat_real_start (Seat *seat)
{
+ SeatPrivate *priv = seat_get_instance_private (seat);
+
/* Get autologin settings */
const gchar *autologin_username = seat_get_string_property (seat, "autologin-user");
if (g_strcmp0 (autologin_username, "") == 0)
@@ -1642,8 +1709,8 @@ seat_real_start (Seat *seat)
if (session)
{
- g_clear_object (&seat->priv->session_to_activate);
- seat->priv->session_to_activate = g_object_ref (session);
+ g_clear_object (&priv->session_to_activate);
+ priv->session_to_activate = g_object_ref (session);
DisplayServer *display_server = create_display_server (seat, session);
session_set_display_server (session, display_server);
@@ -1668,9 +1735,9 @@ seat_real_start (Seat *seat)
return FALSE;
}
- g_clear_object (&seat->priv->session_to_activate);
+ g_clear_object (&priv->session_to_activate);
session = SESSION (greeter_session);
- seat->priv->session_to_activate = g_object_ref (session);
+ priv->session_to_activate = g_object_ref (session);
DisplayServer *display_server = create_display_server (seat, session);
session_set_display_server (session, display_server);
@@ -1712,7 +1779,9 @@ seat_real_create_display_server (Seat *seat, Session *session)
static gboolean
seat_real_display_server_is_used (Seat *seat, DisplayServer *display_server)
{
- for (GList *link = seat->priv->sessions; link; link = link->next)
+ SeatPrivate *priv = seat_get_instance_private (seat);
+
+ for (GList *link = priv->sessions; link; link = link->next)
{
Session *session = link->data;
@@ -1785,13 +1854,15 @@ seat_real_get_active_session (Seat *seat)
static void
seat_real_stop (Seat *seat)
{
+ SeatPrivate *priv = seat_get_instance_private (seat);
+
check_stopped (seat);
- if (seat->priv->stopped)
+ if (priv->stopped)
return;
/* Stop all the display servers and sessions on the seat. Copy the list as
* it might be modified if a display server / session stops during this loop */
- GList *list = g_list_copy (seat->priv->display_servers);
+ GList *list = g_list_copy (priv->display_servers);
for (GList *link = list; link; link = link->next)
g_object_ref (link->data);
for (GList *link = list; link; link = link->next)
@@ -1804,7 +1875,7 @@ seat_real_stop (Seat *seat)
}
}
g_list_free_full (list, g_object_unref);
- list = g_list_copy (seat->priv->sessions);
+ list = g_list_copy (priv->sessions);
for (GList *link = list; link; link = link->next)
g_object_ref (link->data);
for (GList *link = list; link; link = link->next)
@@ -1822,34 +1893,36 @@ seat_real_stop (Seat *seat)
static void
seat_init (Seat *seat)
{
- seat->priv = G_TYPE_INSTANCE_GET_PRIVATE (seat, SEAT_TYPE, SeatPrivate);
- seat->priv->properties = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
- seat->priv->share_display_server = TRUE;
+ SeatPrivate *priv = seat_get_instance_private (seat);
+
+ priv->properties = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+ priv->share_display_server = TRUE;
}
static void
seat_finalize (GObject *object)
{
Seat *self = SEAT (object);
+ SeatPrivate *priv = seat_get_instance_private (SEAT (self));
- g_free (self->priv->name);
- g_hash_table_unref (self->priv->properties);
- for (GList *link = self->priv->display_servers; link; link = link->next)
+ g_free (priv->name);
+ g_hash_table_unref (priv->properties);
+ for (GList *link = priv->display_servers; link; link = link->next)
{
DisplayServer *display_server = link->data;
g_signal_handlers_disconnect_matched (display_server, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, self);
}
- g_list_free_full (self->priv->display_servers, g_object_unref);
- for (GList *link = self->priv->sessions; link; link = link->next)
+ g_list_free_full (priv->display_servers, g_object_unref);
+ for (GList *link = priv->sessions; link; link = link->next)
{
Session *session = link->data;
g_signal_handlers_disconnect_matched (session, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, self);
}
- g_list_free_full (self->priv->sessions, g_object_unref);
- g_clear_object (&self->priv->active_session);
- g_clear_object (&self->priv->next_session);
- g_clear_object (&self->priv->session_to_activate);
- g_clear_object (&self->priv->replacement_greeter);
+ g_list_free_full (priv->sessions, g_object_unref);
+ g_clear_object (&priv->active_session);
+ g_clear_object (&priv->next_session);
+ g_clear_object (&priv->session_to_activate);
+ g_clear_object (&priv->replacement_greeter);
G_OBJECT_CLASS (seat_parent_class)->finalize (object);
}
@@ -1910,7 +1983,7 @@ seat_class_init (SeatClass *klass)
static gint
seat_real_logprefix (Logger *self, gchar *buf, gulong buflen)
{
- return g_snprintf (buf, buflen, "Seat %s: ", SEAT (self)->priv->name);
+ return g_snprintf (buf, buflen, "Seat %s: ", seat_get_name (SEAT (self)));
}
static void
diff --git a/src/seat.h b/src/seat.h
index 6fa6474e..56228833 100644
--- a/src/seat.h
+++ b/src/seat.h
@@ -31,12 +31,9 @@ G_BEGIN_DECLS
#define SEAT_SIGNAL_SESSION_REMOVED "session-removed"
#define SEAT_SIGNAL_STOPPED "stopped"
-typedef struct SeatPrivate SeatPrivate;
-
typedef struct
{
- GObject parent_instance;
- SeatPrivate *priv;
+ GObject parent_instance;
} Seat;
typedef struct
diff --git a/src/session-config.c b/src/session-config.c
index 04b0f974..e0bca920 100644
--- a/src/session-config.c
+++ b/src/session-config.c
@@ -11,7 +11,7 @@
#include "session-config.h"
-struct SessionConfigPrivate
+typedef struct
{
/* Session type */
gchar *session_type;
@@ -24,7 +24,7 @@ struct SessionConfigPrivate
/* TRUE if can run a greeter inside the session */
gboolean allow_greeter;
-};
+} SessionConfigPrivate;
G_DEFINE_TYPE_WITH_PRIVATE (SessionConfig, session_config, G_TYPE_OBJECT)
@@ -45,25 +45,26 @@ session_config_new_from_file (const gchar *filename, const gchar *default_sessio
}
g_autoptr(SessionConfig) config = g_object_new (SESSION_CONFIG_TYPE, NULL);
- config->priv->command = g_steal_pointer (&command);
- config->priv->session_type = g_key_file_get_string (desktop_file, G_KEY_FILE_DESKTOP_GROUP, "X-LightDM-Session-Type", NULL);
- if (!config->priv->session_type)
- config->priv->session_type = g_strdup (default_session_type);
-
- config->priv->desktop_names = g_key_file_get_string_list (desktop_file, G_KEY_FILE_DESKTOP_GROUP, "DesktopNames", NULL, NULL);
- if (!config->priv->desktop_names)
+ SessionConfigPrivate *priv = session_config_get_instance_private (config);
+ priv->command = g_steal_pointer (&command);
+ priv->session_type = g_key_file_get_string (desktop_file, G_KEY_FILE_DESKTOP_GROUP, "X-LightDM-Session-Type", NULL);
+ if (!priv->session_type)
+ priv->session_type = g_strdup (default_session_type);
+
+ priv->desktop_names = g_key_file_get_string_list (desktop_file, G_KEY_FILE_DESKTOP_GROUP, "DesktopNames", NULL, NULL);
+ if (!priv->desktop_names)
{
gchar *name;
name = g_key_file_get_string (desktop_file, G_KEY_FILE_DESKTOP_GROUP, "X-LightDM-DesktopName", NULL);
if (name)
{
- config->priv->desktop_names = g_malloc (sizeof (gchar *) * 2);
- config->priv->desktop_names[0] = name;
- config->priv->desktop_names[1] = NULL;
+ priv->desktop_names = g_malloc (sizeof (gchar *) * 2);
+ priv->desktop_names[0] = name;
+ priv->desktop_names[1] = NULL;
}
}
- config->priv->allow_greeter = g_key_file_get_boolean (desktop_file, G_KEY_FILE_DESKTOP_GROUP, "X-LightDM-Allow-Greeter", NULL);
+ priv->allow_greeter = g_key_file_get_boolean (desktop_file, G_KEY_FILE_DESKTOP_GROUP, "X-LightDM-Allow-Greeter", NULL);
return g_steal_pointer (&config);
}
@@ -71,45 +72,49 @@ session_config_new_from_file (const gchar *filename, const gchar *default_sessio
const gchar *
session_config_get_command (SessionConfig *config)
{
+ SessionConfigPrivate *priv = session_config_get_instance_private (config);
g_return_val_if_fail (config != NULL, NULL);
- return config->priv->command;
+ return priv->command;
}
const gchar *
session_config_get_session_type (SessionConfig *config)
{
+ SessionConfigPrivate *priv = session_config_get_instance_private (config);
g_return_val_if_fail (config != NULL, NULL);
- return config->priv->session_type;
+ return priv->session_type;
}
gchar **
session_config_get_desktop_names (SessionConfig *config)
{
+ SessionConfigPrivate *priv = session_config_get_instance_private (config);
g_return_val_if_fail (config != NULL, NULL);
- return config->priv->desktop_names;
+ return priv->desktop_names;
}
gboolean
session_config_get_allow_greeter (SessionConfig *config)
{
+ SessionConfigPrivate *priv = session_config_get_instance_private (config);
g_return_val_if_fail (config != NULL, FALSE);
- return config->priv->allow_greeter;
+ return priv->allow_greeter;
}
static void
session_config_init (SessionConfig *config)
{
- config->priv = G_TYPE_INSTANCE_GET_PRIVATE (config, SESSION_CONFIG_TYPE, SessionConfigPrivate);
}
static void
session_config_finalize (GObject *object)
{
SessionConfig *self = SESSION_CONFIG (object);
+ SessionConfigPrivate *priv = session_config_get_instance_private (self);
- g_clear_pointer (&self->priv->session_type, g_free);
- g_clear_pointer (&self->priv->desktop_names, g_strfreev);
- g_clear_pointer (&self->priv->command, g_free);
+ g_clear_pointer (&priv->session_type, g_free);
+ g_clear_pointer (&priv->desktop_names, g_strfreev);
+ g_clear_pointer (&priv->command, g_free);
G_OBJECT_CLASS (session_config_parent_class)->finalize (object);
}
diff --git a/src/session-config.h b/src/session-config.h
index 226aa7dc..247abb37 100644
--- a/src/session-config.h
+++ b/src/session-config.h
@@ -21,12 +21,9 @@ G_BEGIN_DECLS
#define SESSION_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SESSION_CONFIG_TYPE, SessionConfigClass))
#define SESSION_CONFIG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SESSION_CONFIG_TYPE, SessionConfigClass))
-typedef struct SessionConfigPrivate SessionConfigPrivate;
-
typedef struct
{
- GObject parent_instance;
- SessionConfigPrivate *priv;
+ GObject parent_instance;
} SessionConfig;
typedef struct
diff --git a/src/session.c b/src/session.c
index 43b9d382..2ea9352a 100644
--- a/src/session.c
+++ b/src/session.c
@@ -38,7 +38,7 @@ enum {
};
static guint signals[LAST_SIGNAL] = { 0 };
-struct SessionPrivate
+typedef struct
{
/* Configuration for this session */
SessionConfig *config;
@@ -119,7 +119,7 @@ struct SessionPrivate
/* TRUE if stopping this session */
gboolean stopping;
-};
+} SessionPrivate;
/* Maximum length of a string to pass between daemon and session */
#define MAX_STRING_LENGTH 65535
@@ -140,139 +140,159 @@ session_new (void)
void
session_set_config (Session *session, SessionConfig *config)
{
+ SessionPrivate *priv = session_get_instance_private (session);
+
g_return_if_fail (session != NULL);
- g_clear_object (&session->priv->config);
- session->priv->config = g_object_ref (config);
+ g_clear_object (&priv->config);
+ priv->config = g_object_ref (config);
}
SessionConfig *
session_get_config (Session *session)
{
+ SessionPrivate *priv = session_get_instance_private (session);
g_return_val_if_fail (session != NULL, NULL);
- return session->priv->config;
+ return priv->config;
}
const gchar *
session_get_session_type (Session *session)
{
+ SessionPrivate *priv = session_get_instance_private (session);
g_return_val_if_fail (session != NULL, NULL);
- return session_config_get_session_type (session->priv->config);
+ return session_config_get_session_type (priv->config);
}
void
session_set_pam_service (Session *session, const gchar *pam_service)
{
+ SessionPrivate *priv = session_get_instance_private (session);
g_return_if_fail (session != NULL);
- g_free (session->priv->pam_service);
- session->priv->pam_service = g_strdup (pam_service);
+ g_free (priv->pam_service);
+ priv->pam_service = g_strdup (pam_service);
}
void
session_set_username (Session *session, const gchar *username)
{
+ SessionPrivate *priv = session_get_instance_private (session);
g_return_if_fail (session != NULL);
- g_free (session->priv->username);
- session->priv->username = g_strdup (username);
+ g_free (priv->username);
+ priv->username = g_strdup (username);
}
void
session_set_do_authenticate (Session *session, gboolean do_authenticate)
{
+ SessionPrivate *priv = session_get_instance_private (session);
g_return_if_fail (session != NULL);
- session->priv->do_authenticate = do_authenticate;
+ priv->do_authenticate = do_authenticate;
}
void
session_set_is_interactive (Session *session, gboolean is_interactive)
{
+ SessionPrivate *priv = session_get_instance_private (session);
g_return_if_fail (session != NULL);
- session->priv->is_interactive = is_interactive;
+ priv->is_interactive = is_interactive;
}
void
session_set_is_guest (Session *session, gboolean is_guest)
{
+ SessionPrivate *priv = session_get_instance_private (session);
g_return_if_fail (session != NULL);
- session->priv->is_guest = is_guest;
+ priv->is_guest = is_guest;
}
gboolean
session_get_is_guest (Session *session)
{
+ SessionPrivate *priv = session_get_instance_private (session);
g_return_val_if_fail (session != NULL, FALSE);
- return session->priv->is_guest;
+ return priv->is_guest;
}
void
session_set_log_file (Session *session, const gchar *filename, LogMode log_mode)
{
+ SessionPrivate *priv = session_get_instance_private (session);
g_return_if_fail (session != NULL);
- g_free (session->priv->log_filename);
- session->priv->log_filename = g_strdup (filename);
- session->priv->log_mode = log_mode;
+ g_free (priv->log_filename);
+ priv->log_filename = g_strdup (filename);
+ priv->log_mode = log_mode;
}
void
session_set_display_server (Session *session, DisplayServer *display_server)
{
+ SessionPrivate *priv = session_get_instance_private (session);
+
g_return_if_fail (session != NULL);
g_return_if_fail (display_server != NULL);
- if (session->priv->display_server == display_server)
+ if (priv->display_server == display_server)
return;
- if (session->priv->display_server)
- display_server_disconnect_session (session->priv->display_server, session);
- g_clear_object (&session->priv->display_server);
- session->priv->display_server = g_object_ref (display_server);
+ if (priv->display_server)
+ display_server_disconnect_session (priv->display_server, session);
+ g_clear_object (&priv->display_server);
+ priv->display_server = g_object_ref (display_server);
}
DisplayServer *
session_get_display_server (Session *session)
{
+ SessionPrivate *priv = session_get_instance_private (session);
g_return_val_if_fail (session != NULL, NULL);
- return session->priv->display_server;
+ return priv->display_server;
}
void
session_set_tty (Session *session, const gchar *tty)
{
+ SessionPrivate *priv = session_get_instance_private (session);
g_return_if_fail (session != NULL);
- g_free (session->priv->tty);
- session->priv->tty = g_strdup (tty);
+ g_free (priv->tty);
+ priv->tty = g_strdup (tty);
}
void
session_set_xdisplay (Session *session, const gchar *xdisplay)
{
+ SessionPrivate *priv = session_get_instance_private (session);
g_return_if_fail (session != NULL);
- g_free (session->priv->xdisplay);
- session->priv->xdisplay = g_strdup (xdisplay);
+ g_free (priv->xdisplay);
+ priv->xdisplay = g_strdup (xdisplay);
}
void
session_set_x_authority (Session *session, XAuthority *authority, gboolean use_system_location)
{
+ SessionPrivate *priv = session_get_instance_private (session);
g_return_if_fail (session != NULL);
- g_clear_object (&session->priv->x_authority);
+ g_clear_object (&priv->x_authority);
if (authority)
- session->priv->x_authority = g_object_ref (authority);
- session->priv->x_authority_use_system_location = use_system_location;
+ priv->x_authority = g_object_ref (authority);
+ priv->x_authority_use_system_location = use_system_location;
}
void
session_set_remote_host_name (Session *session, const gchar *remote_host_name)
{
+ SessionPrivate *priv = session_get_instance_private (session);
g_return_if_fail (session != NULL);
- g_free (session->priv->remote_host_name);
- session->priv->remote_host_name = g_strdup (remote_host_name);
+ g_free (priv->remote_host_name);
+ priv->remote_host_name = g_strdup (remote_host_name);
}
static GList *
find_env_entry (Session *session, const gchar *name)
{
- for (GList *link = session->priv->env; link; link = link->next)
+ SessionPrivate *priv = session_get_instance_private (session);
+
+ for (GList *link = priv->env; link; link = link->next)
{
const gchar *entry = link->data;
@@ -286,6 +306,8 @@ find_env_entry (Session *session, const gchar *name)
void
session_set_env (Session *session, const gchar *name, const gchar *value)
{
+ SessionPrivate *priv = session_get_instance_private (session);
+
g_return_if_fail (session != NULL);
g_return_if_fail (value != NULL);
@@ -298,7 +320,7 @@ session_set_env (Session *session, const gchar *name, const gchar *value)
link->data = entry;
}
else
- session->priv->env = g_list_append (session->priv->env, entry);
+ priv->env = g_list_append (priv->env, entry);
}
const gchar *
@@ -316,6 +338,8 @@ session_get_env (Session *session, const gchar *name)
void
session_unset_env (Session *session, const gchar *name)
{
+ SessionPrivate *priv = session_get_instance_private (session);
+
g_return_if_fail (session != NULL);
GList *link = find_env_entry (session, name);
@@ -323,34 +347,38 @@ session_unset_env (Session *session, const gchar *name)
return;
g_free (link->data);
- session->priv->env = g_list_delete_link (session->priv->env, link);
+ priv->env = g_list_delete_link (priv->env, link);
}
void
session_set_argv (Session *session, gchar **argv)
{
+ SessionPrivate *priv = session_get_instance_private (session);
g_return_if_fail (session != NULL);
- session->priv->argv = g_strdupv (argv);
+ priv->argv = g_strdupv (argv);
}
User *
session_get_user (Session *session)
{
+ SessionPrivate *priv = session_get_instance_private (session);
+
g_return_val_if_fail (session != NULL, NULL);
- if (session->priv->username == NULL)
+ if (priv->username == NULL)
return NULL;
- if (!session->priv->user)
- session->priv->user = accounts_get_user_by_name (session->priv->username);
+ if (!priv->user)
+ priv->user = accounts_get_user_by_name (priv->username);
- return session->priv->user;
+ return priv->user;
}
static void
write_data (Session *session, const void *buf, size_t count)
{
- if (write (session->priv->to_child_input, buf, count) != count)
+ SessionPrivate *priv = session_get_instance_private (session);
+ if (write (priv->to_child_input, buf, count) != count)
l_warning (session, "Error writing to session: %s", strerror (errno));
}
@@ -366,28 +394,32 @@ write_string (Session *session, const char *value)
static void
write_xauth (Session *session, XAuthority *x_authority)
{
+ SessionPrivate *priv = session_get_instance_private (session);
+
if (!x_authority)
{
write_string (session, NULL);
return;
}
- write_string (session, x_authority_get_authorization_name (session->priv->x_authority));
- guint16 family = x_authority_get_family (session->priv->x_authority);
+ write_string (session, x_authority_get_authorization_name (priv->x_authority));
+ guint16 family = x_authority_get_family (priv->x_authority);
write_data (session, &family, sizeof (family));
- gsize length = x_authority_get_address_length (session->priv->x_authority);
+ gsize length = x_authority_get_address_length (priv->x_authority);
write_data (session, &length, sizeof (length));
- write_data (session, x_authority_get_address (session->priv->x_authority), length);
- write_string (session, x_authority_get_number (session->priv->x_authority));
- length = x_authority_get_authorization_data_length (session->priv->x_authority);
+ write_data (session, x_authority_get_address (priv->x_authority), length);
+ write_string (session, x_authority_get_number (priv->x_authority));
+ length = x_authority_get_authorization_data_length (priv->x_authority);
write_data (session, &length, sizeof (length));
- write_data (session, x_authority_get_authorization_data (session->priv->x_authority), length);
+ write_data (session, x_authority_get_authorization_data (priv->x_authority), length);
}
static ssize_t
read_from_child (Session *session, void *buf, size_t count)
{
- ssize_t n_read = read (session->priv->from_child_output, buf, count);
+ SessionPrivate *priv = session_get_instance_private (session);
+
+ ssize_t n_read = read (priv->from_child_output, buf, count);
if (n_read < 0)
l_warning (session, "Error reading from session: %s", strerror (errno));
return n_read;
@@ -418,8 +450,9 @@ static void
session_watch_cb (GPid pid, gint status, gpointer data)
{
Session *session = data;
+ SessionPrivate *priv = session_get_instance_private (session);
- session->priv->child_watch = 0;
+ priv->child_watch = 0;
if (WIFEXITED (status))
l_debug (session, "Exited with return value %d", WEXITSTATUS (status));
@@ -427,24 +460,24 @@ session_watch_cb (GPid pid, gint status, gpointer data)
l_debug (session, "Terminated with signal %d", WTERMSIG (status));
/* do this as late as possible for log messages prefix */
- session->priv->pid = 0;
+ priv->pid = 0;
/* If failed during authentication then report this as an authentication failure */
- if (session->priv->authentication_started && !session->priv->authentication_complete)
+ if (priv->authentication_started && !priv->authentication_complete)
{
l_debug (session, "Failed during authentication");
- session->priv->authentication_complete = TRUE;
- session->priv->authentication_result = PAM_CONV_ERR;
- g_free (session->priv->authentication_result_string);
- session->priv->authentication_result_string = g_strdup ("Authentication stopped before completion");
+ priv->authentication_complete = TRUE;
+ priv->authentication_result = PAM_CONV_ERR;
+ g_free (priv->authentication_result_string);
+ priv->authentication_result_string = g_strdup ("Authentication stopped before completion");
g_signal_emit (G_OBJECT (session), signals[AUTHENTICATION_COMPLETE], 0);
}
g_signal_emit (G_OBJECT (session), signals[STOPPED], 0);
/* Delete account if it is a guest one */
- if (session->priv->is_guest)
- guest_account_cleanup (session->priv->username);
+ if (priv->is_guest)
+ guest_account_cleanup (priv->username);
/* Drop our reference on the child process, it has terminated */
g_object_unref (session);
@@ -454,21 +487,22 @@ static gboolean
from_child_cb (GIOChannel *source, GIOCondition condition, gpointer data)
{
Session *session = data;
+ SessionPrivate *priv = session_get_instance_private (session);
/* Remote end gone */
if (condition == G_IO_HUP)
{
- session->priv->from_child_watch = 0;
+ priv->from_child_watch = 0;
return FALSE;
}
/* Get the username currently being authenticated (may change during authentication) */
g_autofree gchar *username = read_string_from_child (session);
- if (g_strcmp0 (username, session->priv->username) != 0)
+ if (g_strcmp0 (username, priv->username) != 0)
{
- g_free (session->priv->username);
- session->priv->username = g_steal_pointer (&username);
- g_clear_object (&session->priv->user);
+ g_free (priv->username);
+ priv->username = g_steal_pointer (&username);
+ g_clear_object (&priv->user);
}
/* Check if authentication completed */
@@ -478,21 +512,21 @@ from_child_cb (GIOChannel *source, GIOCondition condition, gpointer data)
l_debug (session, "Error reading from child: %s", strerror (errno));
if (n_read <= 0)
{
- session->priv->from_child_watch = 0;
+ priv->from_child_watch = 0;
return FALSE;
}
if (auth_complete)
{
- session->priv->authentication_complete = TRUE;
- read_from_child (session, &session->priv->authentication_result, sizeof (session->priv->authentication_result));
- g_free (session->priv->authentication_result_string);
- session->priv->authentication_result_string = read_string_from_child (session);
+ priv->authentication_complete = TRUE;
+ read_from_child (session, &priv->authentication_result, sizeof (priv->authentication_result));
+ g_free (priv->authentication_result_string);
+ priv->authentication_result_string = read_string_from_child (session);
- l_debug (session, "Authentication complete with return value %d: %s", session->priv->authentication_result, session->priv->authentication_result_string);
+ l_debug (session, "Authentication complete with return value %d: %s", priv->authentication_result, priv->authentication_result_string);
/* No longer expect any more messages */
- session->priv->from_child_watch = 0;
+ priv->from_child_watch = 0;
g_signal_emit (G_OBJECT (session), signals[AUTHENTICATION_COMPLETE], 0);
@@ -500,17 +534,17 @@ from_child_cb (GIOChannel *source, GIOCondition condition, gpointer data)
}
else
{
- session->priv->messages_length = 0;
- read_from_child (session, &session->priv->messages_length, sizeof (session->priv->messages_length));
- session->priv->messages = calloc (session->priv->messages_length, sizeof (struct pam_message));
- for (int i = 0; i < session->priv->messages_length; i++)
+ priv->messages_length = 0;
+ read_from_child (session, &priv->messages_length, sizeof (priv->messages_length));
+ priv->messages = calloc (priv->messages_length, sizeof (struct pam_message));
+ for (int i = 0; i < priv->messages_length; i++)
{
- struct pam_message *m = &session->priv->messages[i];
+ struct pam_message *m = &priv->messages[i];
read_from_child (session, &m->msg_style, sizeof (m->msg_style));
m->msg = read_string_from_child (session);
}
- l_debug (session, "Got %d message(s) from PAM", session->priv->messages_length);
+ l_debug (session, "Got %d message(s) from PAM", priv->messages_length);
g_signal_emit (G_OBJECT (session), signals[GOT_MESSAGES], 0);
}
@@ -528,7 +562,8 @@ session_start (Session *session)
gboolean
session_get_is_started (Session *session)
{
- return session->priv->pid != 0;
+ SessionPrivate *priv = session_get_instance_private (session);
+ return priv->pid != 0;
}
static Greeter *
@@ -542,10 +577,12 @@ create_greeter_cb (GreeterSocket *socket, Session *session)
static gboolean
session_real_start (Session *session)
{
- g_return_val_if_fail (session->priv->pid == 0, FALSE);
+ SessionPrivate *priv = session_get_instance_private (session);
- if (session->priv->display_server)
- display_server_connect_session (session->priv->display_server, session);
+ g_return_val_if_fail (priv->pid == 0, FALSE);
+
+ if (priv->display_server)
+ display_server_connect_session (priv->display_server, session);
/* Create pipes to talk to the child */
int to_child_pipe[2], from_child_pipe[2];
@@ -555,29 +592,29 @@ session_real_start (Session *session)
return FALSE;
}
int to_child_output = to_child_pipe[0];
- session->priv->to_child_input = to_child_pipe[1];
- session->priv->from_child_output = from_child_pipe[0];
+ priv->to_child_input = to_child_pipe[1];
+ priv->from_child_output = from_child_pipe[0];
int from_child_input = from_child_pipe[1];
- session->priv->from_child_channel = g_io_channel_unix_new (session->priv->from_child_output);
- session->priv->from_child_watch = g_io_add_watch (session->priv->from_child_channel, G_IO_IN | G_IO_HUP, from_child_cb, session);
+ priv->from_child_channel = g_io_channel_unix_new (priv->from_child_output);
+ priv->from_child_watch = g_io_add_watch (priv->from_child_channel, G_IO_IN | G_IO_HUP, from_child_cb, session);
/* Don't allow the daemon end of the pipes to be accessed in child processes */
- fcntl (session->priv->to_child_input, F_SETFD, FD_CLOEXEC);
- fcntl (session->priv->from_child_output, F_SETFD, FD_CLOEXEC);
+ fcntl (priv->to_child_input, F_SETFD, FD_CLOEXEC);
+ fcntl (priv->from_child_output, F_SETFD, FD_CLOEXEC);
/* Create the guest account if it is one */
- if (session->priv->is_guest && session->priv->username == NULL)
+ if (priv->is_guest && priv->username == NULL)
{
- session->priv->username = guest_account_setup ();
- if (!session->priv->username)
+ priv->username = guest_account_setup ();
+ if (!priv->username)
return FALSE;
}
/* Run the child */
g_autofree gchar *arg0 = g_strdup_printf ("%d", to_child_output);
g_autofree gchar *arg1 = g_strdup_printf ("%d", from_child_input);
- session->priv->pid = fork ();
- if (session->priv->pid == 0)
+ priv->pid = fork ();
+ if (priv->pid == 0)
{
/* Run us again in session child mode */
execlp ("lightdm",
@@ -587,7 +624,7 @@ session_real_start (Session *session)
_exit (EXIT_FAILURE);
}
- if (session->priv->pid < 0)
+ if (priv->pid < 0)
{
g_debug ("Failed to fork session child process: %s", strerror (errno));
return FALSE;
@@ -599,8 +636,8 @@ session_real_start (Session *session)
g_object_ref (session);
/* Listen for session termination */
- session->priv->authentication_started = TRUE;
- session->priv->child_watch = g_child_watch_add (session->priv->pid, session_watch_cb, session);
+ priv->authentication_started = TRUE;
+ priv->child_watch = g_child_watch_add (priv->pid, session_watch_cb, session);
/* Close the ends of the pipes we don't need */
close (to_child_output);
@@ -611,17 +648,17 @@ session_real_start (Session *session)
write_data (session, &version, sizeof (version));
/* Send configuration */
- write_string (session, session->priv->pam_service);
- write_string (session, session->priv->username);
- write_data (session, &session->priv->do_authenticate, sizeof (session->priv->do_authenticate));
- write_data (session, &session->priv->is_interactive, sizeof (session->priv->is_interactive));
+ write_string (session, priv->pam_service);
+ write_string (session, priv->username);
+ write_data (session, &priv->do_authenticate, sizeof (priv->do_authenticate));
+ write_data (session, &priv->is_interactive, sizeof (priv->is_interactive));
write_string (session, NULL); /* Used to be class, now we just use the environment variable */
- write_string (session, session->priv->tty);
- write_string (session, session->priv->remote_host_name);
- write_string (session, session->priv->xdisplay);
- write_xauth (session, session->priv->x_authority);
+ write_string (session, priv->tty);
+ write_string (session, priv->remote_host_name);
+ write_string (session, priv->xdisplay);
+ write_xauth (session, priv->x_authority);
- l_debug (session, "Started with service '%s', username '%s'", session->priv->pam_service, session->priv->username);
+ l_debug (session, "Started with service '%s', username '%s'", priv->pam_service, priv->username);
return TRUE;
}
@@ -629,43 +666,48 @@ session_real_start (Session *session)
const gchar *
session_get_username (Session *session)
{
+ SessionPrivate *priv = session_get_instance_private (session);
g_return_val_if_fail (session != NULL, NULL);
- return session->priv->username;
+ return priv->username;
}
const gchar *
session_get_login1_session_id (Session *session)
{
+ SessionPrivate *priv = session_get_instance_private (session);
g_return_val_if_fail (session != NULL, NULL);
- return session->priv->login1_session_id;
+ return priv->login1_session_id;
}
const gchar *
session_get_console_kit_cookie (Session *session)
{
+ SessionPrivate *priv = session_get_instance_private (session);
g_return_val_if_fail (session != NULL, NULL);
- return session->priv->console_kit_cookie;
+ return priv->console_kit_cookie;
}
void
session_respond (Session *session, struct pam_response *response)
{
+ SessionPrivate *priv = session_get_instance_private (session);
+
g_return_if_fail (session != NULL);
int error = PAM_SUCCESS;
write_data (session, &error, sizeof (error));
- for (int i = 0; i < session->priv->messages_length; i++)
+ for (int i = 0; i < priv->messages_length; i++)
{
write_string (session, response[i].resp);
write_data (session, &response[i].resp_retcode, sizeof (response[i].resp_retcode));
}
/* Delete the old messages */
- for (int i = 0; i < session->priv->messages_length; i++)
- g_free ((char *) session->priv->messages[i].msg);
- g_free (session->priv->messages);
- session->priv->messages = NULL;
- session->priv->messages_length = 0;
+ for (int i = 0; i < priv->messages_length; i++)
+ g_free ((char *) priv->messages[i].msg);
+ g_free (priv->messages);
+ priv->messages = NULL;
+ priv->messages_length = 0;
}
void
@@ -680,75 +722,84 @@ session_respond_error (Session *session, int error)
int
session_get_messages_length (Session *session)
{
+ SessionPrivate *priv = session_get_instance_private (session);
g_return_val_if_fail (session != NULL, 0);
- return session->priv->messages_length;
+ return priv->messages_length;
}
const struct pam_message *
session_get_messages (Session *session)
{
+ SessionPrivate *priv = session_get_instance_private (session);
g_return_val_if_fail (session != NULL, NULL);
- return session->priv->messages;
+ return priv->messages;
}
gboolean
session_get_is_authenticated (Session *session)
{
+ SessionPrivate *priv = session_get_instance_private (session);
g_return_val_if_fail (session != NULL, FALSE);
- return session->priv->authentication_complete && session->priv->authentication_result == PAM_SUCCESS;
+ return priv->authentication_complete && priv->authentication_result == PAM_SUCCESS;
}
int
session_get_authentication_result (Session *session)
{
+ SessionPrivate *priv = session_get_instance_private (session);
g_return_val_if_fail (session != NULL, 0);
- return session->priv->authentication_result;
+ return priv->authentication_result;
}
const gchar *
session_get_authentication_result_string (Session *session)
{
+ SessionPrivate *priv = session_get_instance_private (session);
g_return_val_if_fail (session != NULL, NULL);
- return session->priv->authentication_result_string;
+ return priv->authentication_result_string;
}
void
session_run (Session *session)
{
+ SessionPrivate *priv = session_get_instance_private (session);
g_return_if_fail (session != NULL);
- g_return_if_fail (session->priv->display_server != NULL);
+ g_return_if_fail (priv->display_server != NULL);
return SESSION_GET_CLASS (session)->run (session);
}
gboolean
session_get_is_run (Session *session)
{
+ SessionPrivate *priv = session_get_instance_private (session);
g_return_val_if_fail (session != NULL, FALSE);
- return session->priv->command_run;
+ return priv->command_run;
}
static void
session_real_run (Session *session)
{
+ SessionPrivate *priv = session_get_instance_private (session);
+
g_return_if_fail (session != NULL);
- g_return_if_fail (!session->priv->command_run);
+ g_return_if_fail (!priv->command_run);
g_return_if_fail (session_get_is_authenticated (session));
- g_return_if_fail (session->priv->argv != NULL);
- g_return_if_fail (session->priv->pid != 0);
+ g_return_if_fail (priv->argv != NULL);
+ g_return_if_fail (priv->pid != 0);
- display_server_connect_session (session->priv->display_server, session);
+ display_server_connect_session (priv->display_server, session);
- session->priv->command_run = TRUE;
+ priv->command_run = TRUE;
- g_autofree gchar *command = g_strjoinv (" ", session->priv->argv);
+ g_autofree gchar *command = g_strjoinv (" ", priv->argv);
l_debug (session, "Running command %s", command);
/* Create authority location */
g_autofree gchar *x_authority_filename = NULL;
- if (session->priv->x_authority_use_system_location)
+ if (priv->x_authority_use_system_location)
{
g_autofree gchar *run_dir = config_get_string (config_get_instance (), "LightDM", "run-directory");
- g_autofree gchar *dir = g_build_filename (run_dir, session->priv->username, NULL);
+ g_autofree gchar *dir = g_build_filename (run_dir, priv->username, NULL);
if (g_mkdir_with_parents (dir, S_IRWXU) < 0)
l_warning (session, "Failed to set create system authority dir %s: %s", dir, strerror (errno));
@@ -764,18 +815,18 @@ session_real_run (Session *session)
x_authority_filename = g_build_filename (user_get_home_directory (session_get_user (session)), ".Xauthority", NULL);
/* Make sure shared user directory for this user exists */
- if (!session->priv->remote_host_name)
+ if (!priv->remote_host_name)
{
- g_autofree gchar *data_dir = shared_data_manager_ensure_user_dir (shared_data_manager_get_instance (), session->priv->username);
+ g_autofree gchar *data_dir = shared_data_manager_ensure_user_dir (shared_data_manager_get_instance (), priv->username);
if (data_dir)
session_set_env (session, "XDG_GREETER_DATA_DIR", data_dir);
}
/* Open socket to allow in-session greeter */
- if (session->priv->config && session_config_get_allow_greeter (session->priv->config))
+ if (priv->config && session_config_get_allow_greeter (priv->config))
{
g_autofree gchar *run_dir = config_get_string (config_get_instance (), "LightDM", "run-directory");
- g_autofree gchar *dir = g_build_filename (run_dir, session->priv->username, NULL);
+ g_autofree gchar *dir = g_build_filename (run_dir, priv->username, NULL);
if (g_mkdir_with_parents (dir, S_IRWXU) < 0)
l_warning (session, "Failed to create greeter socket dir %s: %s", dir, strerror (errno));
@@ -786,93 +837,104 @@ session_real_run (Session *session)
}
g_autofree gchar *path = g_build_filename (dir, "greeter-socket", NULL);
- session->priv->greeter_socket = greeter_socket_new (path);
- g_signal_connect (session->priv->greeter_socket, GREETER_SOCKET_SIGNAL_CREATE_GREETER, G_CALLBACK (create_greeter_cb), session);
+ priv->greeter_socket = greeter_socket_new (path);
+ g_signal_connect (priv->greeter_socket, GREETER_SOCKET_SIGNAL_CREATE_GREETER, G_CALLBACK (create_greeter_cb), session);
session_set_env (session, "LIGHTDM_GREETER_PIPE", path);
g_autoptr(GError) error = NULL;
- if (!greeter_socket_start (session->priv->greeter_socket, &error))
+ if (!greeter_socket_start (priv->greeter_socket, &error))
l_warning (session, "Failed to start greeter socket: %s\n", error->message);
}
- if (session->priv->log_filename)
- l_debug (session, "Logging to %s", session->priv->log_filename);
- write_string (session, session->priv->log_filename);
- write_data (session, &session->priv->log_mode, sizeof (session->priv->log_mode));
- write_string (session, session->priv->tty);
+ if (priv->log_filename)
+ l_debug (session, "Logging to %s", priv->log_filename);
+ write_string (session, priv->log_filename);
+ write_data (session, &priv->log_mode, sizeof (priv->log_mode));
+ write_string (session, priv->tty);
write_string (session, x_authority_filename);
- write_string (session, session->priv->xdisplay);
- write_xauth (session, session->priv->x_authority);
- gsize argc = g_list_length (session->priv->env);
+ write_string (session, priv->xdisplay);
+ write_xauth (session, priv->x_authority);
+ gsize argc = g_list_length (priv->env);
write_data (session, &argc, sizeof (argc));
- for (GList *link = session->priv->env; link; link = link->next)
+ for (GList *link = priv->env; link; link = link->next)
write_string (session, (gchar *) link->data);
- argc = g_strv_length (session->priv->argv);
+ argc = g_strv_length (priv->argv);
write_data (session, &argc, sizeof (argc));
for (gsize i = 0; i < argc; i++)
- write_string (session, session->priv->argv[i]);
+ write_string (session, priv->argv[i]);
- session->priv->login1_session_id = read_string_from_child (session);
- session->priv->console_kit_cookie = read_string_from_child (session);
+ priv->login1_session_id = read_string_from_child (session);
+ priv->console_kit_cookie = read_string_from_child (session);
}
void
session_lock (Session *session)
{
+ SessionPrivate *priv = session_get_instance_private (session);
+
g_return_if_fail (session != NULL);
+
if (getuid () == 0)
{
- if (session->priv->login1_session_id)
- login1_service_lock_session (login1_service_get_instance (), session->priv->login1_session_id);
- else if (session->priv->console_kit_cookie)
- ck_lock_session (session->priv->console_kit_cookie);
+ if (priv->login1_session_id)
+ login1_service_lock_session (login1_service_get_instance (), priv->login1_session_id);
+ else if (priv->console_kit_cookie)
+ ck_lock_session (priv->console_kit_cookie);
}
}
void
session_unlock (Session *session)
{
+ SessionPrivate *priv = session_get_instance_private (session);
+
g_return_if_fail (session != NULL);
+
if (getuid () == 0)
{
- if (session->priv->login1_session_id)
- login1_service_unlock_session (login1_service_get_instance (), session->priv->login1_session_id);
- else if (session->priv->console_kit_cookie)
- ck_unlock_session (session->priv->console_kit_cookie);
+ if (priv->login1_session_id)
+ login1_service_unlock_session (login1_service_get_instance (), priv->login1_session_id);
+ else if (priv->console_kit_cookie)
+ ck_unlock_session (priv->console_kit_cookie);
}
}
void
session_activate (Session *session)
{
+ SessionPrivate *priv = session_get_instance_private (session);
+
g_return_if_fail (session != NULL);
+
if (getuid () == 0)
{
- if (session->priv->login1_session_id)
- login1_service_activate_session (login1_service_get_instance (), session->priv->login1_session_id);
- else if (session->priv->console_kit_cookie)
- ck_activate_session (session->priv->console_kit_cookie);
+ if (priv->login1_session_id)
+ login1_service_activate_session (login1_service_get_instance (), priv->login1_session_id);
+ else if (priv->console_kit_cookie)
+ ck_activate_session (priv->console_kit_cookie);
}
}
void
session_stop (Session *session)
{
+ SessionPrivate *priv = session_get_instance_private (session);
+
g_return_if_fail (session != NULL);
- if (session->priv->stopping)
+ if (priv->stopping)
return;
- session->priv->stopping = TRUE;
+ priv->stopping = TRUE;
/* Kill remaining processes in our logind session to avoid them leaking
* to the user session (they share the same $DISPLAY) */
- if (getuid () == 0 && session->priv->login1_session_id)
- login1_service_terminate_session (login1_service_get_instance (), session->priv->login1_session_id);
+ if (getuid () == 0 && priv->login1_session_id)
+ login1_service_terminate_session (login1_service_get_instance (), priv->login1_session_id);
/* If can cleanly stop then do that */
- if (session_get_is_authenticated (session) && !session->priv->command_run)
+ if (session_get_is_authenticated (session) && !priv->command_run)
{
- session->priv->command_run = TRUE;
+ priv->command_run = TRUE;
write_string (session, NULL); // log filename
LogMode log_mode = LOG_MODE_INVALID;
write_data (session, &log_mode, sizeof (log_mode)); // log mode
@@ -892,12 +954,14 @@ session_stop (Session *session)
static void
session_real_stop (Session *session)
{
+ SessionPrivate *priv = session_get_instance_private (session);
+
g_return_if_fail (session != NULL);
- if (session->priv->pid > 0)
+ if (priv->pid > 0)
{
l_debug (session, "Sending SIGTERM");
- kill (session->priv->pid, SIGTERM);
+ kill (priv->pid, SIGTERM);
// FIXME: Handle timeout
}
else
@@ -907,52 +971,55 @@ session_real_stop (Session *session)
gboolean
session_get_is_stopping (Session *session)
{
+ SessionPrivate *priv = session_get_instance_private (session);
g_return_val_if_fail (session != NULL, FALSE);
- return session->priv->stopping;
+ return priv->stopping;
}
static void
session_init (Session *session)
{
- session->priv = G_TYPE_INSTANCE_GET_PRIVATE (session, SESSION_TYPE, SessionPrivate);
- session->priv->log_filename = g_strdup (".xsession-errors");
- session->priv->log_mode = LOG_MODE_BACKUP_AND_TRUNCATE;
- session->priv->to_child_input = -1;
- session->priv->from_child_output = -1;
+ SessionPrivate *priv = session_get_instance_private (session);
+
+ priv->log_filename = g_strdup (".xsession-errors");
+ priv->log_mode = LOG_MODE_BACKUP_AND_TRUNCATE;
+ priv->to_child_input = -1;
+ priv->from_child_output = -1;
}
static void
session_finalize (GObject *object)
{
Session *self = SESSION (object);
-
- g_clear_object (&self->priv->config);
- g_clear_object (&self->priv->display_server);
- if (self->priv->pid)
- kill (self->priv->pid, SIGKILL);
- close (self->priv->to_child_input);
- close (self->priv->from_child_output);
- g_clear_pointer (&self->priv->from_child_channel, g_io_channel_unref);
- if (self->priv->from_child_watch)
- g_source_remove (self->priv->from_child_watch);
- if (self->priv->child_watch)
- g_source_remove (self->priv->child_watch);
- g_clear_pointer (&self->priv->username, g_free);
- g_clear_object (&self->priv->user);
- g_clear_pointer (&self->priv->pam_service, g_free);
- for (int i = 0; i < self->priv->messages_length; i++)
- g_free ((char *) self->priv->messages[i].msg);
- g_clear_pointer (&self->priv->messages, g_free);
- g_clear_pointer (&self->priv->authentication_result_string, g_free);
- g_clear_pointer (&self->priv->log_filename, g_free);
- g_clear_pointer (&self->priv->tty, g_free);
- g_clear_pointer (&self->priv->xdisplay, g_free);
- g_clear_object (&self->priv->x_authority);
- g_clear_pointer (&self->priv->remote_host_name, g_free);
- g_clear_pointer (&self->priv->login1_session_id, g_free);
- g_clear_pointer (&self->priv->console_kit_cookie, g_free);
- g_list_free_full (self->priv->env, g_free);
- g_clear_pointer (&self->priv->argv, g_strfreev);
+ SessionPrivate *priv = session_get_instance_private (self);
+
+ g_clear_object (&priv->config);
+ g_clear_object (&priv->display_server);
+ if (priv->pid)
+ kill (priv->pid, SIGKILL);
+ close (priv->to_child_input);
+ close (priv->from_child_output);
+ g_clear_pointer (&priv->from_child_channel, g_io_channel_unref);
+ if (priv->from_child_watch)
+ g_source_remove (priv->from_child_watch);
+ if (priv->child_watch)
+ g_source_remove (priv->child_watch);
+ g_clear_pointer (&priv->username, g_free);
+ g_clear_object (&priv->user);
+ g_clear_pointer (&priv->pam_service, g_free);
+ for (int i = 0; i < priv->messages_length; i++)
+ g_free ((char *) priv->messages[i].msg);
+ g_clear_pointer (&priv->messages, g_free);
+ g_clear_pointer (&priv->authentication_result_string, g_free);
+ g_clear_pointer (&priv->log_filename, g_free);
+ g_clear_pointer (&priv->tty, g_free);
+ g_clear_pointer (&priv->xdisplay, g_free);
+ g_clear_object (&priv->x_authority);
+ g_clear_pointer (&priv->remote_host_name, g_free);
+ g_clear_pointer (&priv->login1_session_id, g_free);
+ g_clear_pointer (&priv->console_kit_cookie, g_free);
+ g_list_free_full (priv->env, g_free);
+ g_clear_pointer (&priv->argv, g_strfreev);
G_OBJECT_CLASS (session_parent_class)->finalize (object);
}
@@ -1009,8 +1076,10 @@ static gint
session_real_logprefix (Logger *self, gchar *buf, gulong buflen)
{
Session *session = SESSION (self);
- if (session->priv->pid != 0)
- return g_snprintf (buf, buflen, "Session pid=%d: ", session->priv->pid);
+ SessionPrivate *priv = session_get_instance_private (session);
+
+ if (priv->pid != 0)
+ return g_snprintf (buf, buflen, "Session pid=%d: ", priv->pid);
else
return g_snprintf (buf, buflen, "Session: ");
}
diff --git a/src/session.h b/src/session.h
index eb3f0c0e..350cf3bb 100644
--- a/src/session.h
+++ b/src/session.h
@@ -44,12 +44,9 @@ G_BEGIN_DECLS
#define SESSION_SIGNAL_AUTHENTICATION_COMPLETE "authentication-complete"
#define SESSION_SIGNAL_STOPPED "stopped"
-typedef struct SessionPrivate SessionPrivate;
-
struct Session
{
- GObject parent_instance;
- SessionPrivate *priv;
+ GObject parent_instance;
};
typedef struct
diff --git a/src/shared-data-manager.c b/src/shared-data-manager.c
index 79a551b3..50a9d014 100644
--- a/src/shared-data-manager.c
+++ b/src/shared-data-manager.c
@@ -21,12 +21,12 @@
#define NUM_ENUMERATION_FILES 100
-struct SharedDataManagerPrivate
+typedef struct
{
gchar *greeter_user;
guint32 greeter_gid;
GHashTable *starting_dirs;
-};
+} SharedDataManagerPrivate;
struct OwnerInfo
{
@@ -74,6 +74,8 @@ delete_unused_user (gpointer key, gpointer value, gpointer user_data)
gchar *
shared_data_manager_ensure_user_dir (SharedDataManager *manager, const gchar *user)
{
+ SharedDataManagerPrivate *priv = shared_data_manager_get_instance_private (manager);
+
struct passwd *entry = getpwnam (user);
if (!entry)
return NULL;
@@ -106,7 +108,7 @@ shared_data_manager_ensure_user_dir (SharedDataManager *manager, const gchar *us
runs. */
g_autoptr(GFileInfo) info = g_file_info_new ();
g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_UID, entry->pw_uid);
- g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_GID, manager->priv->greeter_gid);
+ g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_GID, priv->greeter_gid);
g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_MODE, 0770);
result = g_file_set_attributes_from_info (file, info, G_FILE_QUERY_INFO_NONE, NULL, &error);
if (error)
@@ -122,6 +124,7 @@ next_user_dirs_cb (GObject *object, GAsyncResult *res, gpointer user_data)
{
GFileEnumerator *enumerator = G_FILE_ENUMERATOR (object);
SharedDataManager *manager = SHARED_DATA_MANAGER (user_data);
+ SharedDataManagerPrivate *priv = shared_data_manager_get_instance_private (manager);
g_autoptr(GError) error = NULL;
GList *files = g_file_enumerator_next_files_finish (enumerator, res, &error);
@@ -135,7 +138,7 @@ next_user_dirs_cb (GObject *object, GAsyncResult *res, gpointer user_data)
for (GList *link = files; link; link = link->next)
{
GFileInfo *info = link->data;
- g_hash_table_insert (manager->priv->starting_dirs, g_strdup (g_file_info_get_name (info)), NULL);
+ g_hash_table_insert (priv->starting_dirs, g_strdup (g_file_info_get_name (info)), NULL);
}
if (files != NULL)
@@ -152,11 +155,11 @@ next_user_dirs_cb (GObject *object, GAsyncResult *res, gpointer user_data)
for (GList *link = users; link; link = link->next)
{
CommonUser *user = link->data;
- g_hash_table_remove (manager->priv->starting_dirs, common_user_get_name (user));
+ g_hash_table_remove (priv->starting_dirs, common_user_get_name (user));
}
- g_hash_table_foreach (manager->priv->starting_dirs, delete_unused_user, manager);
- g_hash_table_destroy (manager->priv->starting_dirs);
- manager->priv->starting_dirs = NULL;
+ g_hash_table_foreach (priv->starting_dirs, delete_unused_user, manager);
+ g_hash_table_destroy (priv->starting_dirs);
+ priv->starting_dirs = NULL;
g_object_unref (manager);
}
@@ -167,6 +170,7 @@ list_user_dirs_cb (GObject *object, GAsyncResult *res, gpointer user_data)
{
GFile *file = G_FILE (object);
g_autoptr(SharedDataManager) manager = SHARED_DATA_MANAGER (user_data);
+ SharedDataManagerPrivate *priv = shared_data_manager_get_instance_private (manager);
g_autoptr(GError) error = NULL;
GFileEnumerator *enumerator = g_file_enumerate_children_finish (file, res, &error);
@@ -175,7 +179,7 @@ list_user_dirs_cb (GObject *object, GAsyncResult *res, gpointer user_data)
if (!enumerator)
return;
- manager->priv->starting_dirs = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+ priv->starting_dirs = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
g_file_enumerator_next_files_async (enumerator, NUM_ENUMERATION_FILES,
G_PRIORITY_DEFAULT, NULL,
next_user_dirs_cb, g_steal_pointer (&manager));
@@ -204,28 +208,29 @@ shared_data_manager_start (SharedDataManager *manager)
static void
shared_data_manager_init (SharedDataManager *manager)
{
- manager->priv = G_TYPE_INSTANCE_GET_PRIVATE (manager, SHARED_DATA_MANAGER_TYPE, SharedDataManagerPrivate);
+ SharedDataManagerPrivate *priv = shared_data_manager_get_instance_private (manager);
/* Grab current greeter-user gid */
- manager->priv->greeter_user = config_get_string (config_get_instance (), "LightDM", "greeter-user");
- struct passwd *greeter_entry = getpwnam (manager->priv->greeter_user);
+ priv->greeter_user = config_get_string (config_get_instance (), "LightDM", "greeter-user");
+ struct passwd *greeter_entry = getpwnam (priv->greeter_user);
if (greeter_entry)
- manager->priv->greeter_gid = greeter_entry->pw_gid;
+ priv->greeter_gid = greeter_entry->pw_gid;
}
static void
shared_data_manager_finalize (GObject *object)
{
SharedDataManager *self = SHARED_DATA_MANAGER (object);
+ SharedDataManagerPrivate *priv = shared_data_manager_get_instance_private (self);
/* Should also cancel outstanding GIO operations, but whatever, let them do their thing. */
g_signal_handlers_disconnect_by_data (common_user_list_get_instance (), self);
- if (self->priv->starting_dirs)
- g_hash_table_destroy (self->priv->starting_dirs);
+ if (priv->starting_dirs)
+ g_hash_table_destroy (priv->starting_dirs);
- g_clear_pointer (&self->priv->greeter_user, g_free);
+ g_clear_pointer (&priv->greeter_user, g_free);
G_OBJECT_CLASS (shared_data_manager_parent_class)->finalize (object);
}
diff --git a/src/shared-data-manager.h b/src/shared-data-manager.h
index 6099bd8a..a53de85b 100644
--- a/src/shared-data-manager.h
+++ b/src/shared-data-manager.h
@@ -23,12 +23,9 @@ G_BEGIN_DECLS
#define SHARED_DATA_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SHARED_DATA_MANAGER_TYPE, SharedDataManagerClass))
#define SHARED_DATA_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SHARED_DATA_MANAGER_TYPE, SharedDataManagerClass))
-typedef struct SharedDataManagerPrivate SharedDataManagerPrivate;
-
struct SharedDataManager
{
- GObject parent_instance;
- SharedDataManagerPrivate *priv;
+ GObject parent_instance;
};
typedef struct
diff --git a/src/unity-system-compositor.c b/src/unity-system-compositor.c
index e75f1bf9..8558a80f 100644
--- a/src/unity-system-compositor.c
+++ b/src/unity-system-compositor.c
@@ -24,7 +24,7 @@
#include "greeter-session.h"
#include "vt.h"
-struct UnitySystemCompositorPrivate
+typedef struct
{
/* Compositor process */
Process *process;
@@ -62,7 +62,7 @@ struct UnitySystemCompositorPrivate
/* Counters for Mir IDs to use */
int next_session_id;
int next_greeter_id;
-};
+} UnitySystemCompositorPrivate;
static void unity_system_compositor_logger_iface_init (LoggerInterface *iface);
@@ -89,54 +89,63 @@ unity_system_compositor_new (void)
void
unity_system_compositor_set_command (UnitySystemCompositor *compositor, const gchar *command)
{
+ UnitySystemCompositorPrivate *priv = unity_system_compositor_get_instance_private (compositor);
+
g_return_if_fail (compositor != NULL);
g_return_if_fail (command != NULL);
- g_free (compositor->priv->command);
- compositor->priv->command = g_strdup (command);
+ g_free (priv->command);
+ priv->command = g_strdup (command);
}
void
unity_system_compositor_set_socket (UnitySystemCompositor *compositor, const gchar *socket)
{
+ UnitySystemCompositorPrivate *priv = unity_system_compositor_get_instance_private (compositor);
g_return_if_fail (compositor != NULL);
- g_free (compositor->priv->socket);
- compositor->priv->socket = g_strdup (socket);
+ g_free (priv->socket);
+ priv->socket = g_strdup (socket);
}
const gchar *
unity_system_compositor_get_socket (UnitySystemCompositor *compositor)
{
+ UnitySystemCompositorPrivate *priv = unity_system_compositor_get_instance_private (compositor);
g_return_val_if_fail (compositor != NULL, NULL);
- return compositor->priv->socket;
+ return priv->socket;
}
void
unity_system_compositor_set_vt (UnitySystemCompositor *compositor, gint vt)
{
+ UnitySystemCompositorPrivate *priv = unity_system_compositor_get_instance_private (compositor);
+
g_return_if_fail (compositor != NULL);
- if (compositor->priv->have_vt_ref)
- vt_unref (compositor->priv->vt);
- compositor->priv->have_vt_ref = FALSE;
- compositor->priv->vt = vt;
+ if (priv->have_vt_ref)
+ vt_unref (priv->vt);
+ priv->have_vt_ref = FALSE;
+ priv->vt = vt;
if (vt > 0)
{
vt_ref (vt);
- compositor->priv->have_vt_ref = TRUE;
+ priv->have_vt_ref = TRUE;
}
}
void
unity_system_compositor_set_timeout (UnitySystemCompositor *compositor, gint timeout)
{
+ UnitySystemCompositorPrivate *priv = unity_system_compositor_get_instance_private (compositor);
g_return_if_fail (compositor != NULL);
- compositor->priv->timeout = timeout;
+ priv->timeout = timeout;
}
static void
write_message (UnitySystemCompositor *compositor, guint16 id, const guint8 *payload, guint16 payload_length)
{
+ UnitySystemCompositorPrivate *priv = unity_system_compositor_get_instance_private (compositor);
+
gsize data_length = 4 + payload_length;
g_autofree guint8 *data = g_malloc (data_length);
data[0] = id >> 8;
@@ -147,7 +156,7 @@ write_message (UnitySystemCompositor *compositor, guint16 id, const guint8 *payl
memcpy (data + 4, payload, payload_length);
errno = 0;
- if (write (compositor->priv->to_compositor_pipe[1], data, data_length) != data_length)
+ if (write (priv->to_compositor_pipe[1], data, data_length) != data_length)
l_warning (compositor, "Failed to write to compositor: %s", strerror (errno));
}
@@ -168,39 +177,41 @@ unity_system_compositor_set_next_session (UnitySystemCompositor *compositor, con
static gint
unity_system_compositor_get_vt (DisplayServer *server)
{
+ UnitySystemCompositorPrivate *priv = unity_system_compositor_get_instance_private (UNITY_SYSTEM_COMPOSITOR (server));
g_return_val_if_fail (server != NULL, 0);
- return UNITY_SYSTEM_COMPOSITOR (server)->priv->vt;
+ return priv->vt;
}
static void
unity_system_compositor_connect_session (DisplayServer *display_server, Session *session)
{
UnitySystemCompositor *compositor = UNITY_SYSTEM_COMPOSITOR (display_server);
+ UnitySystemCompositorPrivate *priv = unity_system_compositor_get_instance_private (compositor);
session_set_env (session, "XDG_SESSION_TYPE", "mir");
- if (compositor->priv->socket)
- session_set_env (session, "MIR_SERVER_HOST_SOCKET", compositor->priv->socket);
+ if (priv->socket)
+ session_set_env (session, "MIR_SERVER_HOST_SOCKET", priv->socket);
if (!session_get_env (session, "MIR_SERVER_NAME"))
{
g_autofree gchar *name = NULL;
if (IS_GREETER_SESSION (session))
{
- name = g_strdup_printf ("greeter-%d", compositor->priv->next_greeter_id);
- compositor->priv->next_greeter_id++;
+ name = g_strdup_printf ("greeter-%d", priv->next_greeter_id);
+ priv->next_greeter_id++;
}
else
{
- name = g_strdup_printf ("session-%d", compositor->priv->next_session_id);
- compositor->priv->next_session_id++;
+ name = g_strdup_printf ("session-%d", priv->next_session_id);
+ priv->next_session_id++;
}
session_set_env (session, "MIR_SERVER_NAME", name);
}
- if (compositor->priv->vt >= 0)
+ if (priv->vt >= 0)
{
- g_autofree gchar *value = g_strdup_printf ("%d", compositor->priv->vt);
+ g_autofree gchar *value = g_strdup_printf ("%d", priv->vt);
session_set_env (session, "XDG_VTNR", value);
}
}
@@ -236,35 +247,36 @@ static gboolean
read_cb (GIOChannel *source, GIOCondition condition, gpointer data)
{
UnitySystemCompositor *compositor = data;
+ UnitySystemCompositorPrivate *priv = unity_system_compositor_get_instance_private (compositor);
if (condition == G_IO_HUP)
{
l_debug (compositor, "Compositor closed communication channel");
- compositor->priv->from_compositor_watch = 0;
+ priv->from_compositor_watch = 0;
return FALSE;
}
/* Work out how much required for a message */
gsize n_to_read = 0;
- if (compositor->priv->read_buffer_n_used < 4)
- n_to_read = 4 - compositor->priv->read_buffer_n_used;
+ if (priv->read_buffer_n_used < 4)
+ n_to_read = 4 - priv->read_buffer_n_used;
else
{
- guint16 payload_length = compositor->priv->read_buffer[2] << 8 | compositor->priv->read_buffer[3];
- n_to_read = 4 + payload_length - compositor->priv->read_buffer_n_used;
+ guint16 payload_length = priv->read_buffer[2] << 8 | priv->read_buffer[3];
+ n_to_read = 4 + payload_length - priv->read_buffer_n_used;
}
/* Read from compositor */
if (n_to_read > 0)
{
- gsize n_total = compositor->priv->read_buffer_n_used + n_to_read;
- if (compositor->priv->read_buffer_length < n_total)
- compositor->priv->read_buffer = g_realloc (compositor->priv->read_buffer, n_total);
+ gsize n_total = priv->read_buffer_n_used + n_to_read;
+ if (priv->read_buffer_length < n_total)
+ priv->read_buffer = g_realloc (priv->read_buffer, n_total);
g_autoptr(GError) error = NULL;
gsize n_read = 0;
GIOStatus status = g_io_channel_read_chars (source,
- (gchar *)compositor->priv->read_buffer + compositor->priv->read_buffer_n_used,
+ (gchar *)priv->read_buffer + priv->read_buffer_n_used,
n_to_read,
&n_read,
&error);
@@ -272,19 +284,19 @@ read_cb (GIOChannel *source, GIOCondition condition, gpointer data)
l_warning (compositor, "Failed to read from compositor: %s", error->message);
if (status != G_IO_STATUS_NORMAL)
return TRUE;
- compositor->priv->read_buffer_n_used += n_read;
+ priv->read_buffer_n_used += n_read;
}
/* Read header */
- if (compositor->priv->read_buffer_n_used < 4)
+ if (priv->read_buffer_n_used < 4)
return TRUE;
- guint16 id = compositor->priv->read_buffer[0] << 8 | compositor->priv->read_buffer[1];
- guint16 payload_length = compositor->priv->read_buffer[2] << 8 | compositor->priv->read_buffer[3];
+ guint16 id = priv->read_buffer[0] << 8 | priv->read_buffer[1];
+ guint16 payload_length = priv->read_buffer[2] << 8 | priv->read_buffer[3];
/* Read payload */
- if (compositor->priv->read_buffer_n_used < 4 + payload_length)
+ if (priv->read_buffer_n_used < 4 + payload_length)
return TRUE;
- /*guint8 *payload = compositor->priv->read_buffer + 4;*/
+ /*guint8 *payload = priv->read_buffer + 4;*/
switch (id)
{
@@ -297,12 +309,12 @@ read_cb (GIOChannel *source, GIOCondition condition, gpointer data)
break;
case USC_MESSAGE_READY:
l_debug (compositor, "READY");
- if (!compositor->priv->is_ready)
+ if (!priv->is_ready)
{
- compositor->priv->is_ready = TRUE;
+ priv->is_ready = TRUE;
l_debug (compositor, "Compositor ready");
- g_source_remove (compositor->priv->timeout_source);
- compositor->priv->timeout_source = 0;
+ g_source_remove (priv->timeout_source);
+ priv->timeout_source = 0;
DISPLAY_SERVER_CLASS (unity_system_compositor_parent_class)->start (DISPLAY_SERVER (compositor));
}
break;
@@ -315,7 +327,7 @@ read_cb (GIOChannel *source, GIOCondition condition, gpointer data)
}
/* Clear buffer */
- compositor->priv->read_buffer_n_used = 0;
+ priv->read_buffer_n_used = 0;
return TRUE;
}
@@ -333,11 +345,12 @@ static gboolean
timeout_cb (gpointer data)
{
UnitySystemCompositor *compositor = data;
+ UnitySystemCompositorPrivate *priv = unity_system_compositor_get_instance_private (compositor);
/* Stop the compositor - it is not working */
display_server_stop (DISPLAY_SERVER (compositor));
- compositor->priv->timeout_source = 0;
+ priv->timeout_source = 0;
return TRUE;
}
@@ -345,17 +358,19 @@ timeout_cb (gpointer data)
static void
stopped_cb (Process *process, UnitySystemCompositor *compositor)
{
+ UnitySystemCompositorPrivate *priv = unity_system_compositor_get_instance_private (compositor);
+
l_debug (compositor, "Unity system compositor stopped");
- if (compositor->priv->timeout_source != 0)
- g_source_remove (compositor->priv->timeout_source);
- compositor->priv->timeout_source = 0;
+ if (priv->timeout_source != 0)
+ g_source_remove (priv->timeout_source);
+ priv->timeout_source = 0;
/* Release VT and display number for re-use */
- if (compositor->priv->have_vt_ref)
+ if (priv->have_vt_ref)
{
- vt_unref (compositor->priv->vt);
- compositor->priv->have_vt_ref = FALSE;
+ vt_unref (priv->vt);
+ priv->have_vt_ref = FALSE;
}
DISPLAY_SERVER_CLASS (unity_system_compositor_parent_class)->stop (DISPLAY_SERVER (compositor));
@@ -365,27 +380,28 @@ static gboolean
unity_system_compositor_start (DisplayServer *server)
{
UnitySystemCompositor *compositor = UNITY_SYSTEM_COMPOSITOR (server);
+ UnitySystemCompositorPrivate *priv = unity_system_compositor_get_instance_private (compositor);
- g_return_val_if_fail (compositor->priv->process == NULL, FALSE);
+ g_return_val_if_fail (priv->process == NULL, FALSE);
- compositor->priv->is_ready = FALSE;
+ priv->is_ready = FALSE;
- g_return_val_if_fail (compositor->priv->command != NULL, FALSE);
+ g_return_val_if_fail (priv->command != NULL, FALSE);
/* Create pipes to talk to compositor */
- if (pipe (compositor->priv->to_compositor_pipe) < 0 || pipe (compositor->priv->from_compositor_pipe) < 0)
+ if (pipe (priv->to_compositor_pipe) < 0 || pipe (priv->from_compositor_pipe) < 0)
{
l_debug (compositor, "Failed to create compositor pipes: %s", g_strerror (errno));
return FALSE;
}
/* Don't allow the daemon end of the pipes to be accessed in the compositor */
- fcntl (compositor->priv->to_compositor_pipe[1], F_SETFD, FD_CLOEXEC);
- fcntl (compositor->priv->from_compositor_pipe[0], F_SETFD, FD_CLOEXEC);
+ fcntl (priv->to_compositor_pipe[1], F_SETFD, FD_CLOEXEC);
+ fcntl (priv->from_compositor_pipe[0], F_SETFD, FD_CLOEXEC);
/* Listen for messages from the compositor */
- compositor->priv->from_compositor_channel = g_io_channel_unix_new (compositor->priv->from_compositor_pipe[0]);
- compositor->priv->from_compositor_watch = g_io_add_watch (compositor->priv->from_compositor_channel, G_IO_IN | G_IO_HUP, read_cb, compositor);
+ priv->from_compositor_channel = g_io_channel_unix_new (priv->from_compositor_pipe[0]);
+ priv->from_compositor_watch = g_io_add_watch (priv->from_compositor_channel, G_IO_IN | G_IO_HUP, read_cb, compositor);
/* Setup logging */
g_autofree gchar *dir = config_get_string (config_get_instance (), "LightDM", "log-directory");
@@ -393,53 +409,53 @@ unity_system_compositor_start (DisplayServer *server)
l_debug (compositor, "Logging to %s", log_file);
/* Setup environment */
- compositor->priv->process = process_new (run_cb, compositor);
+ priv->process = process_new (run_cb, compositor);
gboolean backup_logs = config_get_boolean (config_get_instance (), "LightDM", "backup-logs");
- process_set_log_file (compositor->priv->process, log_file, TRUE, backup_logs ? LOG_MODE_BACKUP_AND_TRUNCATE : LOG_MODE_APPEND);
- process_set_clear_environment (compositor->priv->process, TRUE);
- process_set_env (compositor->priv->process, "XDG_SEAT", "seat0");
- g_autofree gchar *value = g_strdup_printf ("%d", compositor->priv->vt);
- process_set_env (compositor->priv->process, "XDG_VTNR", value);
+ process_set_log_file (priv->process, log_file, TRUE, backup_logs ? LOG_MODE_BACKUP_AND_TRUNCATE : LOG_MODE_APPEND);
+ process_set_clear_environment (priv->process, TRUE);
+ process_set_env (priv->process, "XDG_SEAT", "seat0");
+ g_autofree gchar *value = g_strdup_printf ("%d", priv->vt);
+ process_set_env (priv->process, "XDG_VTNR", value);
/* Variable required for regression tests */
if (g_getenv ("LIGHTDM_TEST_ROOT"))
{
- process_set_env (compositor->priv->process, "LIGHTDM_TEST_ROOT", g_getenv ("LIGHTDM_TEST_ROOT"));
- process_set_env (compositor->priv->process, "LD_PRELOAD", g_getenv ("LD_PRELOAD"));
- process_set_env (compositor->priv->process, "LD_LIBRARY_PATH", g_getenv ("LD_LIBRARY_PATH"));
+ process_set_env (priv->process, "LIGHTDM_TEST_ROOT", g_getenv ("LIGHTDM_TEST_ROOT"));
+ process_set_env (priv->process, "LD_PRELOAD", g_getenv ("LD_PRELOAD"));
+ process_set_env (priv->process, "LD_LIBRARY_PATH", g_getenv ("LD_LIBRARY_PATH"));
}
/* Generate command line to run */
- g_autofree gchar *absolute_command = get_absolute_command (compositor->priv->command);
+ g_autofree gchar *absolute_command = get_absolute_command (priv->command);
if (!absolute_command)
{
- l_debug (compositor, "Can't launch compositor %s, not found in path", compositor->priv->command);
+ l_debug (compositor, "Can't launch compositor %s, not found in path", priv->command);
return FALSE;
}
g_autoptr(GString) command = g_string_new (absolute_command);
- g_string_append_printf (command, " --file '%s'", compositor->priv->socket);
- g_string_append_printf (command, " --from-dm-fd %d --to-dm-fd %d", compositor->priv->to_compositor_pipe[0], compositor->priv->from_compositor_pipe[1]);
- if (compositor->priv->vt > 0)
- g_string_append_printf (command, " --vt %d", compositor->priv->vt);
- process_set_command (compositor->priv->process, command->str);
+ g_string_append_printf (command, " --file '%s'", priv->socket);
+ g_string_append_printf (command, " --from-dm-fd %d --to-dm-fd %d", priv->to_compositor_pipe[0], priv->from_compositor_pipe[1]);
+ if (priv->vt > 0)
+ g_string_append_printf (command, " --vt %d", priv->vt);
+ process_set_command (priv->process, command->str);
/* Start the compositor */
- g_signal_connect (compositor->priv->process, PROCESS_SIGNAL_STOPPED, G_CALLBACK (stopped_cb), compositor);
- gboolean result = process_start (compositor->priv->process, FALSE);
+ g_signal_connect (priv->process, PROCESS_SIGNAL_STOPPED, G_CALLBACK (stopped_cb), compositor);
+ gboolean result = process_start (priv->process, FALSE);
/* Close compositor ends of the pipes */
- close (compositor->priv->to_compositor_pipe[0]);
- compositor->priv->to_compositor_pipe[0] = -1;
- close (compositor->priv->from_compositor_pipe[1]);
- compositor->priv->from_compositor_pipe[1] = -1;
+ close (priv->to_compositor_pipe[0]);
+ priv->to_compositor_pipe[0] = -1;
+ close (priv->from_compositor_pipe[1]);
+ priv->from_compositor_pipe[1] = -1;
if (!result)
return FALSE;
/* Connect to the compositor */
- if (compositor->priv->timeout > 0)
+ if (priv->timeout > 0)
{
- l_debug (compositor, "Waiting for system compositor for %ds", compositor->priv->timeout);
- compositor->priv->timeout_source = g_timeout_add (compositor->priv->timeout * 1000, timeout_cb, compositor);
+ l_debug (compositor, "Waiting for system compositor for %ds", priv->timeout);
+ priv->timeout_source = g_timeout_add (priv->timeout * 1000, timeout_cb, compositor);
}
return TRUE;
@@ -448,45 +464,47 @@ unity_system_compositor_start (DisplayServer *server)
static void
unity_system_compositor_stop (DisplayServer *server)
{
- process_stop (UNITY_SYSTEM_COMPOSITOR (server)->priv->process);
+ UnitySystemCompositorPrivate *priv = unity_system_compositor_get_instance_private (UNITY_SYSTEM_COMPOSITOR (server));
+ process_stop (priv->process);
}
static void
unity_system_compositor_init (UnitySystemCompositor *compositor)
{
- compositor->priv = G_TYPE_INSTANCE_GET_PRIVATE (compositor, UNITY_SYSTEM_COMPOSITOR_TYPE, UnitySystemCompositorPrivate);
- compositor->priv->vt = -1;
- compositor->priv->command = g_strdup ("unity-system-compositor");
- compositor->priv->socket = g_strdup ("/run/mir_socket");
- compositor->priv->timeout = -1;
- compositor->priv->to_compositor_pipe[0] = -1;
- compositor->priv->to_compositor_pipe[1] = -1;
- compositor->priv->from_compositor_pipe[0] = -1;
- compositor->priv->from_compositor_pipe[1] = -1;
+ UnitySystemCompositorPrivate *priv = unity_system_compositor_get_instance_private (compositor);
+ priv->vt = -1;
+ priv->command = g_strdup ("unity-system-compositor");
+ priv->socket = g_strdup ("/run/mir_socket");
+ priv->timeout = -1;
+ priv->to_compositor_pipe[0] = -1;
+ priv->to_compositor_pipe[1] = -1;
+ priv->from_compositor_pipe[0] = -1;
+ priv->from_compositor_pipe[1] = -1;
}
static void
unity_system_compositor_finalize (GObject *object)
{
UnitySystemCompositor *self = UNITY_SYSTEM_COMPOSITOR (object);
-
- if (self->priv->process)
- g_signal_handlers_disconnect_matched (self->priv->process, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, self);
- g_clear_object (&self->priv->process);
- g_clear_pointer (&self->priv->command, g_free);
- g_clear_pointer (&self->priv->socket, g_free);
- if (self->priv->have_vt_ref)
- vt_unref (self->priv->vt);
- close (self->priv->to_compositor_pipe[0]);
- close (self->priv->to_compositor_pipe[1]);
- close (self->priv->from_compositor_pipe[0]);
- close (self->priv->from_compositor_pipe[1]);
- g_clear_pointer (&self->priv->from_compositor_channel, g_io_channel_unref);
- if (self->priv->from_compositor_watch)
- g_source_remove (self->priv->from_compositor_watch);
- g_clear_pointer (&self->priv->read_buffer, g_free);
- if (self->priv->timeout_source)
- g_source_remove (self->priv->timeout_source);
+ UnitySystemCompositorPrivate *priv = unity_system_compositor_get_instance_private (self);
+
+ if (priv->process)
+ g_signal_handlers_disconnect_matched (priv->process, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, self);
+ g_clear_object (&priv->process);
+ g_clear_pointer (&priv->command, g_free);
+ g_clear_pointer (&priv->socket, g_free);
+ if (priv->have_vt_ref)
+ vt_unref (priv->vt);
+ close (priv->to_compositor_pipe[0]);
+ close (priv->to_compositor_pipe[1]);
+ close (priv->from_compositor_pipe[0]);
+ close (priv->from_compositor_pipe[1]);
+ g_clear_pointer (&priv->from_compositor_channel, g_io_channel_unref);
+ if (priv->from_compositor_watch)
+ g_source_remove (priv->from_compositor_watch);
+ g_clear_pointer (&priv->read_buffer, g_free);
+ if (priv->timeout_source)
+ g_source_remove (priv->timeout_source);
G_OBJECT_CLASS (unity_system_compositor_parent_class)->finalize (object);
}
diff --git a/src/unity-system-compositor.h b/src/unity-system-compositor.h
index cc74935d..546a8cc6 100644
--- a/src/unity-system-compositor.h
+++ b/src/unity-system-compositor.h
@@ -21,12 +21,9 @@ G_BEGIN_DECLS
#define UNITY_SYSTEM_COMPOSITOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), UNITY_SYSTEM_COMPOSITOR_TYPE, UnitySystemCompositor))
#define IS_UNITY_SYSTEM_COMPOSITOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), UNITY_SYSTEM_COMPOSITOR_TYPE))
-typedef struct UnitySystemCompositorPrivate UnitySystemCompositorPrivate;
-
typedef struct
{
- DisplayServer parent_instance;
- UnitySystemCompositorPrivate *priv;
+ DisplayServer parent_instance;
} UnitySystemCompositor;
typedef struct
diff --git a/src/vnc-server.c b/src/vnc-server.c
index e5612b2f..d3500764 100644
--- a/src/vnc-server.c
+++ b/src/vnc-server.c
@@ -19,7 +19,7 @@ enum {
};
static guint signals[LAST_SIGNAL] = { 0 };
-struct VNCServerPrivate
+typedef struct
{
/* Port to listen on */
guint port;
@@ -29,7 +29,7 @@ struct VNCServerPrivate
/* Listening sockets */
GSocket *socket, *socket6;
-};
+} VNCServerPrivate;
G_DEFINE_TYPE_WITH_PRIVATE (VNCServer, vnc_server, G_TYPE_OBJECT)
@@ -42,31 +42,36 @@ vnc_server_new (void)
void
vnc_server_set_port (VNCServer *server, guint port)
{
+ VNCServerPrivate *priv = vnc_server_get_instance_private (server);
g_return_if_fail (server != NULL);
- server->priv->port = port;
+ priv->port = port;
}
guint
vnc_server_get_port (VNCServer *server)
{
+ VNCServerPrivate *priv = vnc_server_get_instance_private (server);
g_return_val_if_fail (server != NULL, 0);
- return server->priv->port;
+ return priv->port;
}
void
vnc_server_set_listen_address (VNCServer *server, const gchar *listen_address)
{
+ VNCServerPrivate *priv = vnc_server_get_instance_private (server);
+
g_return_if_fail (server != NULL);
- g_free (server->priv->listen_address);
- server->priv->listen_address = g_strdup (listen_address);
+ g_free (priv->listen_address);
+ priv->listen_address = g_strdup (listen_address);
}
const gchar *
vnc_server_get_listen_address (VNCServer *server)
{
+ VNCServerPrivate *priv = vnc_server_get_instance_private (server);
g_return_val_if_fail (server != NULL, NULL);
- return server->priv->listen_address;
+ return priv->listen_address;
}
static gboolean
@@ -117,33 +122,35 @@ open_tcp_socket (GSocketFamily family, guint port, const gchar *listen_address,
gboolean
vnc_server_start (VNCServer *server)
{
+ VNCServerPrivate *priv = vnc_server_get_instance_private (server);
+
g_return_val_if_fail (server != NULL, FALSE);
g_autoptr(GError) ipv4_error = NULL;
- server->priv->socket = open_tcp_socket (G_SOCKET_FAMILY_IPV4, server->priv->port, server->priv->listen_address, &ipv4_error);
+ priv->socket = open_tcp_socket (G_SOCKET_FAMILY_IPV4, priv->port, priv->listen_address, &ipv4_error);
if (ipv4_error)
g_warning ("Failed to create IPv4 VNC socket: %s", ipv4_error->message);
- if (server->priv->socket)
+ if (priv->socket)
{
- GSource *source = g_socket_create_source (server->priv->socket, G_IO_IN, NULL);
+ GSource *source = g_socket_create_source (priv->socket, G_IO_IN, NULL);
g_source_set_callback (source, (GSourceFunc) read_cb, server, NULL);
g_source_attach (source, NULL);
}
g_autoptr(GError) ipv6_error = NULL;
- server->priv->socket6 = open_tcp_socket (G_SOCKET_FAMILY_IPV6, server->priv->port, server->priv->listen_address, &ipv6_error);
+ priv->socket6 = open_tcp_socket (G_SOCKET_FAMILY_IPV6, priv->port, priv->listen_address, &ipv6_error);
if (ipv6_error)
g_warning ("Failed to create IPv6 VNC socket: %s", ipv6_error->message);
- if (server->priv->socket6)
+ if (priv->socket6)
{
- GSource *source = g_socket_create_source (server->priv->socket6, G_IO_IN, NULL);
+ GSource *source = g_socket_create_source (priv->socket6, G_IO_IN, NULL);
g_source_set_callback (source, (GSourceFunc) read_cb, server, NULL);
g_source_attach (source, NULL);
}
- if (!server->priv->socket && !server->priv->socket6)
+ if (!priv->socket && !priv->socket6)
return FALSE;
return TRUE;
@@ -152,18 +159,19 @@ vnc_server_start (VNCServer *server)
static void
vnc_server_init (VNCServer *server)
{
- server->priv = G_TYPE_INSTANCE_GET_PRIVATE (server, VNC_SERVER_TYPE, VNCServerPrivate);
- server->priv->port = 5900;
+ VNCServerPrivate *priv = vnc_server_get_instance_private (server);
+ priv->port = 5900;
}
static void
vnc_server_finalize (GObject *object)
{
VNCServer *self = VNC_SERVER (object);
+ VNCServerPrivate *priv = vnc_server_get_instance_private (self);
- g_clear_pointer (&self->priv->listen_address, g_free);
- g_clear_object (&self->priv->socket);
- g_clear_object (&self->priv->socket6);
+ g_clear_pointer (&priv->listen_address, g_free);
+ g_clear_object (&priv->socket);
+ g_clear_object (&priv->socket6);
G_OBJECT_CLASS (vnc_server_parent_class)->finalize (object);
}
diff --git a/src/vnc-server.h b/src/vnc-server.h
index 889fdb74..d493995b 100644
--- a/src/vnc-server.h
+++ b/src/vnc-server.h
@@ -21,12 +21,9 @@ G_BEGIN_DECLS
#define VNC_SERVER_SIGNAL_NEW_CONNECTION "new-connection"
-typedef struct VNCServerPrivate VNCServerPrivate;
-
typedef struct
{
- GObject parent_instance;
- VNCServerPrivate *priv;
+ GObject parent_instance;
} VNCServer;
typedef struct
diff --git a/src/wayland-session.c b/src/wayland-session.c
index 576b2e60..187bf1f0 100644
--- a/src/wayland-session.c
+++ b/src/wayland-session.c
@@ -12,12 +12,12 @@
#include "wayland-session.h"
#include "vt.h"
-struct WaylandSessionPrivate
+typedef struct
{
/* VT to run on */
gint vt;
gboolean have_vt_ref;
-};
+} WaylandSessionPrivate;
G_DEFINE_TYPE_WITH_PRIVATE (WaylandSession, wayland_session, DISPLAY_SERVER_TYPE)
@@ -30,36 +30,40 @@ wayland_session_new (void)
void
wayland_session_set_vt (WaylandSession *session, gint vt)
{
+ WaylandSessionPrivate *priv = wayland_session_get_instance_private (session);
+
g_return_if_fail (session != NULL);
- if (session->priv->have_vt_ref)
- vt_unref (session->priv->vt);
- session->priv->have_vt_ref = FALSE;
- session->priv->vt = vt;
+ if (priv->have_vt_ref)
+ vt_unref (priv->vt);
+ priv->have_vt_ref = FALSE;
+ priv->vt = vt;
if (vt > 0)
{
vt_ref (vt);
- session->priv->have_vt_ref = TRUE;
+ priv->have_vt_ref = TRUE;
}
}
static gint
wayland_session_get_vt (DisplayServer *server)
{
+ WaylandSessionPrivate *priv = wayland_session_get_instance_private (WAYLAND_SESSION (server));
g_return_val_if_fail (server != NULL, 0);
- return WAYLAND_SESSION (server)->priv->vt;
+ return priv->vt;
}
static void
wayland_session_connect_session (DisplayServer *display_server, Session *session)
{
WaylandSession *wayland_session = WAYLAND_SESSION (display_server);
+ WaylandSessionPrivate *priv = wayland_session_get_instance_private (wayland_session);
session_set_env (session, "XDG_SESSION_TYPE", "wayland");
- if (wayland_session->priv->vt >= 0)
+ if (priv->vt >= 0)
{
- g_autofree gchar *value = g_strdup_printf ("%d", wayland_session->priv->vt);
+ g_autofree gchar *value = g_strdup_printf ("%d", priv->vt);
session_set_env (session, "XDG_VTNR", value);
}
}
@@ -74,16 +78,16 @@ wayland_session_disconnect_session (DisplayServer *display_server, Session *sess
static void
wayland_session_init (WaylandSession *session)
{
- session->priv = G_TYPE_INSTANCE_GET_PRIVATE (session, WAYLAND_SESSION_TYPE, WaylandSessionPrivate);
}
static void
wayland_session_finalize (GObject *object)
{
WaylandSession *self = WAYLAND_SESSION (object);
+ WaylandSessionPrivate *priv = wayland_session_get_instance_private (self);
- if (self->priv->have_vt_ref)
- vt_unref (self->priv->vt);
+ if (priv->have_vt_ref)
+ vt_unref (priv->vt);
G_OBJECT_CLASS (wayland_session_parent_class)->finalize (object);
}
diff --git a/src/wayland-session.h b/src/wayland-session.h
index 240c19fb..8547be5e 100644
--- a/src/wayland-session.h
+++ b/src/wayland-session.h
@@ -21,12 +21,9 @@ G_BEGIN_DECLS
#define WAYLAND_SESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WAYLAND_SESSION_TYPE, WaylandSession))
#define IS_WAYLAND_SESSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WAYLAND_SESSION_TYPE))
-typedef struct WaylandSessionPrivate WaylandSessionPrivate;
-
typedef struct
{
- DisplayServer parent_instance;
- WaylandSessionPrivate *priv;
+ DisplayServer parent_instance;
} WaylandSession;
typedef struct
diff --git a/src/x-authority.c b/src/x-authority.c
index 6f4a06b5..baaf4bea 100644
--- a/src/x-authority.c
+++ b/src/x-authority.c
@@ -19,7 +19,7 @@
#include "x-authority.h"
-struct XAuthorityPrivate
+typedef struct
{
/* Protocol family */
guint16 family;
@@ -37,7 +37,7 @@ struct XAuthorityPrivate
/* Authorization data */
guint8 *authorization_data;
gsize authorization_data_length;
-};
+} XAuthorityPrivate;
G_DEFINE_TYPE_WITH_PRIVATE (XAuthority, x_authority, G_TYPE_OBJECT)
@@ -76,103 +76,117 @@ x_authority_new_local_cookie (const gchar *number)
void
x_authority_set_family (XAuthority *auth, guint16 family)
{
+ XAuthorityPrivate *priv = x_authority_get_instance_private (auth);
g_return_if_fail (auth != NULL);
- auth->priv->family = family;
+ priv->family = family;
}
guint16
x_authority_get_family (XAuthority *auth)
{
+ XAuthorityPrivate *priv = x_authority_get_instance_private (auth);
g_return_val_if_fail (auth != NULL, 0);
- return auth->priv->family;
+ return priv->family;
}
void
x_authority_set_address (XAuthority *auth, const guint8 *address, gsize address_length)
{
+ XAuthorityPrivate *priv = x_authority_get_instance_private (auth);
g_return_if_fail (auth != NULL);
- g_free (auth->priv->address);
- auth->priv->address = g_malloc (address_length);
- memcpy (auth->priv->address, address, address_length);
- auth->priv->address_length = address_length;
+ g_free (priv->address);
+ priv->address = g_malloc (address_length);
+ memcpy (priv->address, address, address_length);
+ priv->address_length = address_length;
}
const guint8 *
x_authority_get_address (XAuthority *auth)
{
+ XAuthorityPrivate *priv = x_authority_get_instance_private (auth);
g_return_val_if_fail (auth != NULL, NULL);
- return auth->priv->address;
+ return priv->address;
}
gsize
x_authority_get_address_length (XAuthority *auth)
{
+ XAuthorityPrivate *priv = x_authority_get_instance_private (auth);
g_return_val_if_fail (auth != NULL, 0);
- return auth->priv->address_length;
+ return priv->address_length;
}
void
x_authority_set_number (XAuthority *auth, const gchar *number)
{
+ XAuthorityPrivate *priv = x_authority_get_instance_private (auth);
g_return_if_fail (auth != NULL);
- g_free (auth->priv->number);
- auth->priv->number = g_strdup (number);
+ g_free (priv->number);
+ priv->number = g_strdup (number);
}
const gchar *
x_authority_get_number (XAuthority *auth)
{
+ XAuthorityPrivate *priv = x_authority_get_instance_private (auth);
g_return_val_if_fail (auth != NULL, NULL);
- return auth->priv->number;
+ return priv->number;
}
void
x_authority_set_authorization_name (XAuthority *auth, const gchar *name)
{
+ XAuthorityPrivate *priv = x_authority_get_instance_private (auth);
g_return_if_fail (auth != NULL);
- g_free (auth->priv->authorization_name);
- auth->priv->authorization_name = g_strdup (name);
+ g_free (priv->authorization_name);
+ priv->authorization_name = g_strdup (name);
}
const gchar *
x_authority_get_authorization_name (XAuthority *auth)
{
+ XAuthorityPrivate *priv = x_authority_get_instance_private (auth);
g_return_val_if_fail (auth != NULL, NULL);
- return auth->priv->authorization_name;
+ return priv->authorization_name;
}
void
x_authority_set_authorization_data (XAuthority *auth, const guint8 *data, gsize data_length)
{
+ XAuthorityPrivate *priv = x_authority_get_instance_private (auth);
g_return_if_fail (auth != NULL);
- g_free (auth->priv->authorization_data);
- auth->priv->authorization_data = g_malloc (data_length);
- memcpy (auth->priv->authorization_data, data, data_length);
- auth->priv->authorization_data_length = data_length;
+ g_free (priv->authorization_data);
+ priv->authorization_data = g_malloc (data_length);
+ memcpy (priv->authorization_data, data, data_length);
+ priv->authorization_data_length = data_length;
}
const guint8 *
x_authority_get_authorization_data (XAuthority *auth)
{
+ XAuthorityPrivate *priv = x_authority_get_instance_private (auth);
g_return_val_if_fail (auth != NULL, NULL);
- return auth->priv->authorization_data;
+ return priv->authorization_data;
}
guint8 *
x_authority_copy_authorization_data (XAuthority *auth)
{
+ XAuthorityPrivate *priv = x_authority_get_instance_private (auth);
+
g_return_val_if_fail (auth != NULL, NULL);
- guint8 *data = g_malloc (auth->priv->authorization_data_length);
- memcpy (data, auth->priv->authorization_data, auth->priv->authorization_data_length);
+ guint8 *data = g_malloc (priv->authorization_data_length);
+ memcpy (data, priv->authorization_data, priv->authorization_data_length);
return data;
}
gsize
x_authority_get_authorization_data_length (XAuthority *auth)
{
+ XAuthorityPrivate *priv = x_authority_get_instance_private (auth);
g_return_val_if_fail (auth != NULL, 0);
- return auth->priv->authorization_data_length;
+ return priv->authorization_data_length;
}
static gboolean
@@ -239,6 +253,8 @@ write_string (int fd, const gchar *value)
gboolean
x_authority_write (XAuthority *auth, XAuthWriteMode mode, const gchar *filename, GError **error)
{
+ XAuthorityPrivate *priv = x_authority_get_instance_private (auth);
+
g_return_val_if_fail (auth != NULL, FALSE);
g_return_val_if_fail (filename != NULL, FALSE);
@@ -257,41 +273,42 @@ x_authority_write (XAuthority *auth, XAuthWriteMode mode, const gchar *filename,
while (input_offset != input_length)
{
g_autoptr(XAuthority) a = g_object_new (X_AUTHORITY_TYPE, NULL);
+ XAuthorityPrivate *a_priv = x_authority_get_instance_private (a);
guint16 address_length = 0;
guint16 authorization_data_length = 0;
- gboolean result = read_uint16 (input, input_length, &input_offset, &a->priv->family) &&
+ gboolean result = read_uint16 (input, input_length, &input_offset, &a_priv->family) &&
read_uint16 (input, input_length, &input_offset, &address_length) &&
- read_data (input, input_length, &input_offset, address_length, &a->priv->address) &&
- read_string (input, input_length, &input_offset, &a->priv->number) &&
- read_string (input, input_length, &input_offset, &a->priv->authorization_name) &&
+ read_data (input, input_length, &input_offset, address_length, &a_priv->address) &&
+ read_string (input, input_length, &input_offset, &a_priv->number) &&
+ read_string (input, input_length, &input_offset, &a_priv->authorization_name) &&
read_uint16 (input, input_length, &input_offset, &authorization_data_length) &&
- read_data (input, input_length, &input_offset, authorization_data_length, &a->priv->authorization_data);
- a->priv->address_length = address_length;
- a->priv->authorization_data_length = authorization_data_length;
+ read_data (input, input_length, &input_offset, authorization_data_length, &a_priv->authorization_data);
+ a_priv->address_length = address_length;
+ a_priv->authorization_data_length = authorization_data_length;
if (!result)
break;
gboolean address_matches = FALSE;
- if (auth->priv->address_length == a->priv->address_length)
+ if (priv->address_length == a_priv->address_length)
{
guint16 i;
- for (i = 0; i < auth->priv->address_length && auth->priv->address[i] == a->priv->address[i]; i++);
- address_matches = i == auth->priv->address_length;
+ for (i = 0; i < priv->address_length && priv->address[i] == a_priv->address[i]; i++);
+ address_matches = i == priv->address_length;
}
/* If this record matches, then update or delete it */
if (!matched &&
- auth->priv->family == a->priv->family &&
+ priv->family == a_priv->family &&
address_matches &&
- strcmp (auth->priv->number, a->priv->number) == 0)
+ strcmp (priv->number, a_priv->number) == 0)
{
matched = TRUE;
if (mode == XAUTH_WRITE_MODE_REMOVE)
continue;
else
- x_authority_set_authorization_data (a, auth->priv->authorization_data, auth->priv->authorization_data_length);
+ x_authority_set_authorization_data (a, priv->authorization_data, priv->authorization_data_length);
}
records = g_list_append (records, g_steal_pointer (&a));
@@ -320,14 +337,15 @@ x_authority_write (XAuthority *auth, XAuthWriteMode mode, const gchar *filename,
for (GList *link = records; link && result; link = link->next)
{
XAuthority *a = link->data;
-
- result = write_uint16 (output_fd, a->priv->family) &&
- write_uint16 (output_fd, a->priv->address_length) &&
- write_data (output_fd, a->priv->address, a->priv->address_length) &&
- write_string (output_fd, a->priv->number) &&
- write_string (output_fd, a->priv->authorization_name) &&
- write_uint16 (output_fd, a->priv->authorization_data_length) &&
- write_data (output_fd, a->priv->authorization_data, a->priv->authorization_data_length);
+ XAuthorityPrivate *a_priv = x_authority_get_instance_private (a);
+
+ result = write_uint16 (output_fd, a_priv->family) &&
+ write_uint16 (output_fd, a_priv->address_length) &&
+ write_data (output_fd, a_priv->address, a_priv->address_length) &&
+ write_string (output_fd, a_priv->number) &&
+ write_string (output_fd, a_priv->authorization_name) &&
+ write_uint16 (output_fd, a_priv->authorization_data_length) &&
+ write_data (output_fd, a_priv->authorization_data, a_priv->authorization_data_length);
}
g_list_free_full (records, g_object_unref);
@@ -351,19 +369,20 @@ x_authority_write (XAuthority *auth, XAuthWriteMode mode, const gchar *filename,
static void
x_authority_init (XAuthority *auth)
{
- auth->priv = G_TYPE_INSTANCE_GET_PRIVATE (auth, X_AUTHORITY_TYPE, XAuthorityPrivate);
- auth->priv->number = g_strdup ("");
+ XAuthorityPrivate *priv = x_authority_get_instance_private (auth);
+ priv->number = g_strdup ("");
}
static void
x_authority_finalize (GObject *object)
{
XAuthority *self = X_AUTHORITY (object);
+ XAuthorityPrivate *priv = x_authority_get_instance_private (self);
- g_clear_pointer (&self->priv->address, g_free);
- g_clear_pointer (&self->priv->number, g_free);
- g_clear_pointer (&self->priv->authorization_name, g_free);
- g_clear_pointer (&self->priv->authorization_data, g_free);
+ g_clear_pointer (&priv->address, g_free);
+ g_clear_pointer (&priv->number, g_free);
+ g_clear_pointer (&priv->authorization_name, g_free);
+ g_clear_pointer (&priv->authorization_data, g_free);
G_OBJECT_CLASS (x_authority_parent_class)->finalize (object);
}
diff --git a/src/x-authority.h b/src/x-authority.h
index 748e3f18..1ddb8526 100644
--- a/src/x-authority.h
+++ b/src/x-authority.h
@@ -19,12 +19,9 @@ G_BEGIN_DECLS
#define X_AUTHORITY_TYPE (x_authority_get_type())
#define X_AUTHORITY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), X_AUTHORITY_TYPE, XAuthority));
-typedef struct XAuthorityPrivate XAuthorityPrivate;
-
typedef struct
{
GObject parent_instance;
- XAuthorityPrivate *priv;
} XAuthority;
typedef struct
diff --git a/src/x-server-local.c b/src/x-server-local.c
index 223593e1..47286f29 100644
--- a/src/x-server-local.c
+++ b/src/x-server-local.c
@@ -22,7 +22,7 @@
#include "process.h"
#include "vt.h"
-struct XServerLocalPrivate
+typedef struct
{
/* X server process */
Process *x_server_process;
@@ -66,7 +66,7 @@ struct XServerLocalPrivate
/* Background to set */
gchar *background;
-};
+} XServerLocalPrivate;
static void x_server_local_logger_iface_init (LoggerInterface *iface);
@@ -188,120 +188,137 @@ x_server_local_new (void)
void
x_server_local_set_command (XServerLocal *server, const gchar *command)
{
+ XServerLocalPrivate *priv = x_server_local_get_instance_private (server);
g_return_if_fail (server != NULL);
- g_free (server->priv->command);
- server->priv->command = g_strdup (command);
+ g_free (priv->command);
+ priv->command = g_strdup (command);
}
void
x_server_local_set_vt (XServerLocal *server, gint vt)
{
+ XServerLocalPrivate *priv = x_server_local_get_instance_private (server);
+
g_return_if_fail (server != NULL);
- if (server->priv->have_vt_ref)
- vt_unref (server->priv->vt);
- server->priv->have_vt_ref = FALSE;
- server->priv->vt = vt;
+
+ if (priv->have_vt_ref)
+ vt_unref (priv->vt);
+ priv->have_vt_ref = FALSE;
+ priv->vt = vt;
if (vt > 0)
{
vt_ref (vt);
- server->priv->have_vt_ref = TRUE;
+ priv->have_vt_ref = TRUE;
}
}
void
x_server_local_set_config (XServerLocal *server, const gchar *path)
{
+ XServerLocalPrivate *priv = x_server_local_get_instance_private (server);
g_return_if_fail (server != NULL);
- g_free (server->priv->config_file);
- server->priv->config_file = g_strdup (path);
+ g_free (priv->config_file);
+ priv->config_file = g_strdup (path);
}
void
x_server_local_set_layout (XServerLocal *server, const gchar *layout)
{
+ XServerLocalPrivate *priv = x_server_local_get_instance_private (server);
g_return_if_fail (server != NULL);
- g_free (server->priv->layout);
- server->priv->layout = g_strdup (layout);
+ g_free (priv->layout);
+ priv->layout = g_strdup (layout);
}
void
x_server_local_set_xdg_seat (XServerLocal *server, const gchar *xdg_seat)
{
+ XServerLocalPrivate *priv = x_server_local_get_instance_private (server);
g_return_if_fail (server != NULL);
- g_free (server->priv->xdg_seat);
- server->priv->xdg_seat = g_strdup (xdg_seat);
+ g_free (priv->xdg_seat);
+ priv->xdg_seat = g_strdup (xdg_seat);
}
void
x_server_local_set_allow_tcp (XServerLocal *server, gboolean allow_tcp)
{
+ XServerLocalPrivate *priv = x_server_local_get_instance_private (server);
g_return_if_fail (server != NULL);
- server->priv->allow_tcp = allow_tcp;
+ priv->allow_tcp = allow_tcp;
}
void
x_server_local_set_xdmcp_server (XServerLocal *server, const gchar *hostname)
{
+ XServerLocalPrivate *priv = x_server_local_get_instance_private (server);
g_return_if_fail (server != NULL);
- g_free (server->priv->xdmcp_server);
- server->priv->xdmcp_server = g_strdup (hostname);
+ g_free (priv->xdmcp_server);
+ priv->xdmcp_server = g_strdup (hostname);
}
const gchar *
x_server_local_get_xdmcp_server (XServerLocal *server)
{
+ XServerLocalPrivate *priv = x_server_local_get_instance_private (server);
g_return_val_if_fail (server != NULL, 0);
- return server->priv->xdmcp_server;
+ return priv->xdmcp_server;
}
void
x_server_local_set_xdmcp_port (XServerLocal *server, guint port)
{
+ XServerLocalPrivate *priv = x_server_local_get_instance_private (server);
g_return_if_fail (server != NULL);
- server->priv->xdmcp_port = port;
+ priv->xdmcp_port = port;
}
guint
x_server_local_get_xdmcp_port (XServerLocal *server)
{
+ XServerLocalPrivate *priv = x_server_local_get_instance_private (server);
g_return_val_if_fail (server != NULL, 0);
- return server->priv->xdmcp_port;
+ return priv->xdmcp_port;
}
void
x_server_local_set_xdmcp_key (XServerLocal *server, const gchar *key)
{
+ XServerLocalPrivate *priv = x_server_local_get_instance_private (server);
g_return_if_fail (server != NULL);
- g_free (server->priv->xdmcp_key);
- server->priv->xdmcp_key = g_strdup (key);
+ g_free (priv->xdmcp_key);
+ priv->xdmcp_key = g_strdup (key);
x_server_set_authority (X_SERVER (server), NULL);
}
void
x_server_local_set_background (XServerLocal *server, const gchar *background)
{
+ XServerLocalPrivate *priv = x_server_local_get_instance_private (server);
g_return_if_fail (server != NULL);
- g_free (server->priv->background);
- server->priv->background = g_strdup (background);
+ g_free (priv->background);
+ priv->background = g_strdup (background);
}
static guint
x_server_local_get_display_number (XServer *server)
{
- return X_SERVER_LOCAL (server)->priv->display_number;
+ XServerLocalPrivate *priv = x_server_local_get_instance_private (X_SERVER_LOCAL (server));
+ return priv->display_number;
}
static gint
x_server_local_get_vt (DisplayServer *server)
{
- return X_SERVER_LOCAL (server)->priv->vt;
+ XServerLocalPrivate *priv = x_server_local_get_instance_private (X_SERVER_LOCAL (server));
+ return priv->vt;
}
const gchar *
x_server_local_get_authority_file_path (XServerLocal *server)
{
+ XServerLocalPrivate *priv = x_server_local_get_instance_private (server);
g_return_val_if_fail (server != NULL, 0);
- return server->priv->authority_file;
+ return priv->authority_file;
}
static gchar *
@@ -348,10 +365,12 @@ x_server_local_get_log_stdout (XServerLocal *server)
static void
got_signal_cb (Process *process, int signum, XServerLocal *server)
{
- if (signum == SIGUSR1 && !server->priv->got_signal)
+ XServerLocalPrivate *priv = x_server_local_get_instance_private (server);
+
+ if (signum == SIGUSR1 && !priv->got_signal)
{
- server->priv->got_signal = TRUE;
- l_debug (server, "Got signal from X server :%d", server->priv->display_number);
+ priv->got_signal = TRUE;
+ l_debug (server, "Got signal from X server :%d", priv->display_number);
// FIXME: Check return value
DISPLAY_SERVER_CLASS (x_server_local_parent_class)->start (DISPLAY_SERVER (server));
@@ -361,24 +380,26 @@ got_signal_cb (Process *process, int signum, XServerLocal *server)
static void
stopped_cb (Process *process, XServerLocal *server)
{
+ XServerLocalPrivate *priv = x_server_local_get_instance_private (server);
+
l_debug (server, "X server stopped");
/* Release VT and display number for re-use */
- if (server->priv->have_vt_ref)
+ if (priv->have_vt_ref)
{
- vt_unref (server->priv->vt);
- server->priv->have_vt_ref = FALSE;
+ vt_unref (priv->vt);
+ priv->have_vt_ref = FALSE;
}
- x_server_local_release_display_number (server->priv->display_number);
+ x_server_local_release_display_number (priv->display_number);
- if (x_server_get_authority (X_SERVER (server)) && server->priv->authority_file)
+ if (x_server_get_authority (X_SERVER (server)) && priv->authority_file)
{
- l_debug (server, "Removing X server authority %s", server->priv->authority_file);
+ l_debug (server, "Removing X server authority %s", priv->authority_file);
- g_unlink (server->priv->authority_file);
+ g_unlink (priv->authority_file);
- g_free (server->priv->authority_file);
- server->priv->authority_file = NULL;
+ g_free (priv->authority_file);
+ priv->authority_file = NULL;
}
DISPLAY_SERVER_CLASS (x_server_local_parent_class)->stop (DISPLAY_SERVER (server));
@@ -387,12 +408,14 @@ stopped_cb (Process *process, XServerLocal *server)
static void
write_authority_file (XServerLocal *server)
{
+ XServerLocalPrivate *priv = x_server_local_get_instance_private (server);
+
XAuthority *authority = x_server_get_authority (X_SERVER (server));
if (!authority)
return;
/* Get file to write to if have authority */
- if (!server->priv->authority_file)
+ if (!priv->authority_file)
{
g_autofree gchar *run_dir = NULL;
g_autofree gchar *dir = NULL;
@@ -402,13 +425,13 @@ write_authority_file (XServerLocal *server)
if (g_mkdir_with_parents (dir, S_IRWXU) < 0)
l_warning (server, "Failed to make authority directory %s: %s", dir, strerror (errno));
- server->priv->authority_file = g_build_filename (dir, x_server_get_address (X_SERVER (server)), NULL);
+ priv->authority_file = g_build_filename (dir, x_server_get_address (X_SERVER (server)), NULL);
}
- l_debug (server, "Writing X server authority to %s", server->priv->authority_file);
+ l_debug (server, "Writing X server authority to %s", priv->authority_file);
g_autoptr(GError) error = NULL;
- x_authority_write (authority, XAUTH_WRITE_MODE_REPLACE, server->priv->authority_file, &error);
+ x_authority_write (authority, XAUTH_WRITE_MODE_REPLACE, priv->authority_file, &error);
if (error)
l_warning (server, "Failed to write authority: %s", error->message);
}
@@ -417,61 +440,62 @@ static gboolean
x_server_local_start (DisplayServer *display_server)
{
XServerLocal *server = X_SERVER_LOCAL (display_server);
+ XServerLocalPrivate *priv = x_server_local_get_instance_private (server);
- g_return_val_if_fail (server->priv->x_server_process == NULL, FALSE);
+ g_return_val_if_fail (priv->x_server_process == NULL, FALSE);
- server->priv->got_signal = FALSE;
+ priv->got_signal = FALSE;
- g_return_val_if_fail (server->priv->command != NULL, FALSE);
+ g_return_val_if_fail (priv->command != NULL, FALSE);
ProcessRunFunc run_cb = X_SERVER_LOCAL_GET_CLASS (server)->get_run_function (server);
- server->priv->x_server_process = process_new (run_cb, server);
- process_set_clear_environment (server->priv->x_server_process, TRUE);
- g_signal_connect (server->priv->x_server_process, PROCESS_SIGNAL_GOT_SIGNAL, G_CALLBACK (got_signal_cb), server);
- g_signal_connect (server->priv->x_server_process, PROCESS_SIGNAL_STOPPED, G_CALLBACK (stopped_cb), server);
+ priv->x_server_process = process_new (run_cb, server);
+ process_set_clear_environment (priv->x_server_process, TRUE);
+ g_signal_connect (priv->x_server_process, PROCESS_SIGNAL_GOT_SIGNAL, G_CALLBACK (got_signal_cb), server);
+ g_signal_connect (priv->x_server_process, PROCESS_SIGNAL_STOPPED, G_CALLBACK (stopped_cb), server);
/* Setup logging */
g_autofree gchar *filename = g_strdup_printf ("x-%d.log", x_server_get_display_number (X_SERVER (server)));
g_autofree gchar *dir = config_get_string (config_get_instance (), "LightDM", "log-directory");
g_autofree gchar *log_file = g_build_filename (dir, filename, NULL);
gboolean backup_logs = config_get_boolean (config_get_instance (), "LightDM", "backup-logs");
- process_set_log_file (server->priv->x_server_process, log_file, X_SERVER_LOCAL_GET_CLASS (server)->get_log_stdout (server), backup_logs ? LOG_MODE_BACKUP_AND_TRUNCATE : LOG_MODE_APPEND);
+ process_set_log_file (priv->x_server_process, log_file, X_SERVER_LOCAL_GET_CLASS (server)->get_log_stdout (server), backup_logs ? LOG_MODE_BACKUP_AND_TRUNCATE : LOG_MODE_APPEND);
l_debug (display_server, "Logging to %s", log_file);
- g_autofree gchar *absolute_command = get_absolute_command (server->priv->command);
+ g_autofree gchar *absolute_command = get_absolute_command (priv->command);
if (!absolute_command)
{
- l_debug (display_server, "Can't launch X server %s, not found in path", server->priv->command);
- stopped_cb (server->priv->x_server_process, X_SERVER_LOCAL (server));
+ l_debug (display_server, "Can't launch X server %s, not found in path", priv->command);
+ stopped_cb (priv->x_server_process, X_SERVER_LOCAL (server));
return FALSE;
}
g_autoptr(GString) command = g_string_new (absolute_command);
- g_string_append_printf (command, " :%d", server->priv->display_number);
+ g_string_append_printf (command, " :%d", priv->display_number);
- if (server->priv->config_file)
- g_string_append_printf (command, " -config %s", server->priv->config_file);
+ if (priv->config_file)
+ g_string_append_printf (command, " -config %s", priv->config_file);
- if (server->priv->layout)
- g_string_append_printf (command, " -layout %s", server->priv->layout);
+ if (priv->layout)
+ g_string_append_printf (command, " -layout %s", priv->layout);
- if (server->priv->xdg_seat)
- g_string_append_printf (command, " -seat %s", server->priv->xdg_seat);
+ if (priv->xdg_seat)
+ g_string_append_printf (command, " -seat %s", priv->xdg_seat);
write_authority_file (server);
- if (server->priv->authority_file)
- g_string_append_printf (command, " -auth %s", server->priv->authority_file);
+ if (priv->authority_file)
+ g_string_append_printf (command, " -auth %s", priv->authority_file);
/* Connect to a remote server using XDMCP */
- if (server->priv->xdmcp_server != NULL)
+ if (priv->xdmcp_server != NULL)
{
- if (server->priv->xdmcp_port != 0)
- g_string_append_printf (command, " -port %d", server->priv->xdmcp_port);
- g_string_append_printf (command, " -query %s", server->priv->xdmcp_server);
- if (server->priv->xdmcp_key)
- g_string_append_printf (command, " -cookie %s", server->priv->xdmcp_key);
+ if (priv->xdmcp_port != 0)
+ g_string_append_printf (command, " -port %d", priv->xdmcp_port);
+ g_string_append_printf (command, " -query %s", priv->xdmcp_server);
+ if (priv->xdmcp_key)
+ g_string_append_printf (command, " -cookie %s", priv->xdmcp_key);
}
- else if (server->priv->allow_tcp)
+ else if (priv->allow_tcp)
{
if (x_server_local_version_compare (1, 17) >= 0)
g_string_append (command, " -listen tcp");
@@ -479,50 +503,50 @@ x_server_local_start (DisplayServer *display_server)
else
g_string_append (command, " -nolisten tcp");
- if (server->priv->vt >= 0)
- g_string_append_printf (command, " vt%d -novtswitch", server->priv->vt);
+ if (priv->vt >= 0)
+ g_string_append_printf (command, " vt%d -novtswitch", priv->vt);
- if (server->priv->background)
- g_string_append_printf (command, " -background %s", server->priv->background);
+ if (priv->background)
+ g_string_append_printf (command, " -background %s", priv->background);
/* Allow sub-classes to add arguments */
if (X_SERVER_LOCAL_GET_CLASS (server)->add_args)
X_SERVER_LOCAL_GET_CLASS (server)->add_args (server, command);
- process_set_command (server->priv->x_server_process, command->str);
+ process_set_command (priv->x_server_process, command->str);
l_debug (display_server, "Launching X Server");
/* If running inside another display then pass through those variables */
if (g_getenv ("DISPLAY"))
{
- process_set_env (server->priv->x_server_process, "DISPLAY", g_getenv ("DISPLAY"));
+ process_set_env (priv->x_server_process, "DISPLAY", g_getenv ("DISPLAY"));
if (g_getenv ("XAUTHORITY"))
- process_set_env (server->priv->x_server_process, "XAUTHORITY", g_getenv ("XAUTHORITY"));
+ process_set_env (priv->x_server_process, "XAUTHORITY", g_getenv ("XAUTHORITY"));
else
{
g_autofree gchar *path = g_build_filename (g_get_home_dir (), ".Xauthority", NULL);
- process_set_env (server->priv->x_server_process, "XAUTHORITY", path);
+ process_set_env (priv->x_server_process, "XAUTHORITY", path);
}
}
/* Pass through library variables */
if (g_getenv ("LD_PRELOAD"))
- process_set_env (server->priv->x_server_process, "LD_PRELOAD", g_getenv ("LD_PRELOAD"));
+ process_set_env (priv->x_server_process, "LD_PRELOAD", g_getenv ("LD_PRELOAD"));
if (g_getenv ("LD_LIBRARY_PATH"))
- process_set_env (server->priv->x_server_process, "LD_LIBRARY_PATH", g_getenv ("LD_LIBRARY_PATH"));
+ process_set_env (priv->x_server_process, "LD_LIBRARY_PATH", g_getenv ("LD_LIBRARY_PATH"));
if (g_getenv ("PATH"))
- process_set_env (server->priv->x_server_process, "PATH", g_getenv ("PATH"));
+ process_set_env (priv->x_server_process, "PATH", g_getenv ("PATH"));
/* Variable required for regression tests */
if (g_getenv ("LIGHTDM_TEST_ROOT"))
- process_set_env (server->priv->x_server_process, "LIGHTDM_TEST_ROOT", g_getenv ("LIGHTDM_TEST_ROOT"));
+ process_set_env (priv->x_server_process, "LIGHTDM_TEST_ROOT", g_getenv ("LIGHTDM_TEST_ROOT"));
- gboolean result = process_start (server->priv->x_server_process, FALSE);
+ gboolean result = process_start (priv->x_server_process, FALSE);
if (result)
- l_debug (display_server, "Waiting for ready signal from X server :%d", server->priv->display_number);
+ l_debug (display_server, "Waiting for ready signal from X server :%d", priv->display_number);
else
- stopped_cb (server->priv->x_server_process, X_SERVER_LOCAL (server));
+ stopped_cb (priv->x_server_process, X_SERVER_LOCAL (server));
return result;
}
@@ -530,36 +554,38 @@ x_server_local_start (DisplayServer *display_server)
static void
x_server_local_stop (DisplayServer *server)
{
- process_stop (X_SERVER_LOCAL (server)->priv->x_server_process);
+ XServerLocalPrivate *priv = x_server_local_get_instance_private (X_SERVER_LOCAL (server));
+ process_stop (priv->x_server_process);
}
static void
x_server_local_init (XServerLocal *server)
{
- server->priv = G_TYPE_INSTANCE_GET_PRIVATE (server, X_SERVER_LOCAL_TYPE, XServerLocalPrivate);
- server->priv->vt = -1;
- server->priv->command = g_strdup ("X");
- server->priv->display_number = x_server_local_get_unused_display_number ();
+ XServerLocalPrivate *priv = x_server_local_get_instance_private (server);
+ priv->vt = -1;
+ priv->command = g_strdup ("X");
+ priv->display_number = x_server_local_get_unused_display_number ();
}
static void
x_server_local_finalize (GObject *object)
{
XServerLocal *self = X_SERVER_LOCAL (object);
-
- if (self->priv->x_server_process)
- g_signal_handlers_disconnect_matched (self->priv->x_server_process, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, self);
- g_clear_object (&self->priv->x_server_process);
- g_clear_pointer (&self->priv->command, g_free);
- g_clear_pointer (&self->priv->config_file, g_free);
- g_clear_pointer (&self->priv->layout, g_free);
- g_clear_pointer (&self->priv->xdg_seat, g_free);
- g_clear_pointer (&self->priv->xdmcp_server, g_free);
- g_clear_pointer (&self->priv->xdmcp_key, g_free);
- g_clear_pointer (&self->priv->authority_file, g_free);
- if (self->priv->have_vt_ref)
- vt_unref (self->priv->vt);
- g_clear_pointer (&self->priv->background, g_free);
+ XServerLocalPrivate *priv = x_server_local_get_instance_private (self);
+
+ if (priv->x_server_process)
+ g_signal_handlers_disconnect_matched (priv->x_server_process, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, self);
+ g_clear_object (&priv->x_server_process);
+ g_clear_pointer (&priv->command, g_free);
+ g_clear_pointer (&priv->config_file, g_free);
+ g_clear_pointer (&priv->layout, g_free);
+ g_clear_pointer (&priv->xdg_seat, g_free);
+ g_clear_pointer (&priv->xdmcp_server, g_free);
+ g_clear_pointer (&priv->xdmcp_key, g_free);
+ g_clear_pointer (&priv->authority_file, g_free);
+ if (priv->have_vt_ref)
+ vt_unref (priv->vt);
+ g_clear_pointer (&priv->background, g_free);
G_OBJECT_CLASS (x_server_local_parent_class)->finalize (object);
}
@@ -584,7 +610,8 @@ static gint
x_server_local_real_logprefix (Logger *self, gchar *buf, gulong buflen)
{
XServerLocal *server = X_SERVER_LOCAL (self);
- return g_snprintf (buf, buflen, "XServer %d: ", server->priv->display_number);
+ XServerLocalPrivate *priv = x_server_local_get_instance_private (server);
+ return g_snprintf (buf, buflen, "XServer %d: ", priv->display_number);
}
static void
diff --git a/src/x-server-local.h b/src/x-server-local.h
index c1714585..41b41865 100644
--- a/src/x-server-local.h
+++ b/src/x-server-local.h
@@ -23,12 +23,9 @@ G_BEGIN_DECLS
#define X_SERVER_LOCAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), X_SERVER_LOCAL_TYPE, XServerLocalClass))
#define IS_X_SERVER_LOCAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), X_SERVER_LOCAL_TYPE))
-typedef struct XServerLocalPrivate XServerLocalPrivate;
-
typedef struct
{
- XServer parent_instance;
- XServerLocalPrivate *priv;
+ XServer parent_instance;
} XServerLocal;
typedef struct
diff --git a/src/x-server-remote.c b/src/x-server-remote.c
index 675e3f80..4e0a9dad 100644
--- a/src/x-server-remote.c
+++ b/src/x-server-remote.c
@@ -13,11 +13,11 @@
#include "x-server-remote.h"
-struct XServerRemotePrivate
+typedef struct
{
/* Display number to use */
guint display_number;
-};
+} XServerRemotePrivate;
G_DEFINE_TYPE_WITH_PRIVATE (XServerRemote, x_server_remote, X_SERVER_TYPE)
@@ -25,8 +25,9 @@ XServerRemote *
x_server_remote_new (const gchar *hostname, guint number, XAuthority *authority)
{
XServerRemote *server = g_object_new (X_SERVER_REMOTE_TYPE, NULL);
+ XServerRemotePrivate *priv = x_server_remote_get_instance_private (server);
- server->priv->display_number = number;
+ priv->display_number = number;
x_server_set_hostname (X_SERVER (server), hostname);
x_server_set_authority (X_SERVER (server), authority);
@@ -37,13 +38,13 @@ x_server_remote_new (const gchar *hostname, guint number, XAuthority *authority)
static guint
x_server_remote_get_display_number (XServer *server)
{
- return X_SERVER_REMOTE (server)->priv->display_number;
+ XServerRemotePrivate *priv = x_server_remote_get_instance_private (X_SERVER_REMOTE (server));
+ return priv->display_number;
}
static void
x_server_remote_init (XServerRemote *server)
{
- server->priv = G_TYPE_INSTANCE_GET_PRIVATE (server, X_SERVER_REMOTE_TYPE, XServerRemotePrivate);
}
static void
diff --git a/src/x-server-remote.h b/src/x-server-remote.h
index c1c160d3..024b8c3b 100644
--- a/src/x-server-remote.h
+++ b/src/x-server-remote.h
@@ -19,12 +19,9 @@ G_BEGIN_DECLS
#define X_SERVER_REMOTE_TYPE (x_server_remote_get_type())
#define X_SERVER_REMOTE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), X_SERVER_REMOTE_TYPE, XServerRemote))
-typedef struct XServerRemotePrivate XServerRemotePrivate;
-
typedef struct
{
- XServer parent_instance;
- XServerRemotePrivate *priv;
+ XServer parent_instance;
} XServerRemote;
typedef struct
diff --git a/src/x-server-xmir.c b/src/x-server-xmir.c
index 05e6ccc0..38cb8656 100644
--- a/src/x-server-xmir.c
+++ b/src/x-server-xmir.c
@@ -12,7 +12,7 @@
#include "x-server-xmir.h"
-struct XServerXmirPrivate
+typedef struct
{
/* Compositor we are running under */
UnitySystemCompositor *compositor;
@@ -25,16 +25,18 @@ struct XServerXmirPrivate
/* Filename of socket Mir is listening on */
gchar *mir_socket;
-};
+} XServerXmirPrivate;
G_DEFINE_TYPE_WITH_PRIVATE (XServerXmir, x_server_xmir, X_SERVER_LOCAL_TYPE)
static void
compositor_ready_cb (UnitySystemCompositor *compositor, XServerXmir *server)
{
- if (!server->priv->waiting_for_compositor)
+ XServerXmirPrivate *priv = x_server_xmir_get_instance_private (server);
+
+ if (!priv->waiting_for_compositor)
return;
- server->priv->waiting_for_compositor = FALSE;
+ priv->waiting_for_compositor = FALSE;
gboolean result = X_SERVER_LOCAL_CLASS (x_server_xmir_parent_class)->start (DISPLAY_SERVER (server));
if (!result)
@@ -51,8 +53,10 @@ XServerXmir *
x_server_xmir_new (UnitySystemCompositor *compositor)
{
XServerXmir *server = g_object_new (X_SERVER_XMIR_TYPE, NULL);
+ XServerXmirPrivate *priv = x_server_xmir_get_instance_private (server);
+
x_server_local_set_command (X_SERVER_LOCAL (server), "Xmir");
- server->priv->compositor = g_object_ref (compositor);
+ priv->compositor = g_object_ref (compositor);
g_signal_connect (compositor, DISPLAY_SERVER_SIGNAL_READY, G_CALLBACK (compositor_ready_cb), server);
g_signal_connect (compositor, DISPLAY_SERVER_SIGNAL_STOPPED, G_CALLBACK (compositor_stopped_cb), server);
@@ -62,63 +66,70 @@ x_server_xmir_new (UnitySystemCompositor *compositor)
void
x_server_xmir_set_mir_id (XServerXmir *server, const gchar *id)
{
+ XServerXmirPrivate *priv = x_server_xmir_get_instance_private (server);
g_return_if_fail (server != NULL);
- g_free (server->priv->mir_id);
- server->priv->mir_id = g_strdup (id);
+ g_free (priv->mir_id);
+ priv->mir_id = g_strdup (id);
}
const gchar *
x_server_xmir_get_mir_id (XServerXmir *server)
{
+ XServerXmirPrivate *priv = x_server_xmir_get_instance_private (server);
g_return_val_if_fail (server != NULL, NULL);
- return server->priv->mir_id;
+ return priv->mir_id;
}
void
x_server_xmir_set_mir_socket (XServerXmir *server, const gchar *socket)
{
+ XServerXmirPrivate *priv = x_server_xmir_get_instance_private (server);
g_return_if_fail (server != NULL);
- g_free (server->priv->mir_socket);
- server->priv->mir_socket = g_strdup (socket);
+ g_free (priv->mir_socket);
+ priv->mir_socket = g_strdup (socket);
}
static void
x_server_xmir_add_args (XServerLocal *x_server, GString *command)
{
XServerXmir *server = X_SERVER_XMIR (x_server);
+ XServerXmirPrivate *priv = x_server_xmir_get_instance_private (server);
- if (server->priv->mir_id)
- g_string_append_printf (command, " -mir %s", server->priv->mir_id);
+ if (priv->mir_id)
+ g_string_append_printf (command, " -mir %s", priv->mir_id);
- if (server->priv->mir_socket)
- g_string_append_printf (command, " -mirSocket %s", server->priv->mir_socket);
+ if (priv->mir_socket)
+ g_string_append_printf (command, " -mirSocket %s", priv->mir_socket);
}
static DisplayServer *
x_server_xmir_get_parent (DisplayServer *server)
{
- return DISPLAY_SERVER (X_SERVER_XMIR (server)->priv->compositor);
+ XServerXmirPrivate *priv = x_server_xmir_get_instance_private (X_SERVER_XMIR (server));
+ return DISPLAY_SERVER (priv->compositor);
}
static gint
x_server_xmir_get_vt (DisplayServer *server)
{
- return display_server_get_vt (DISPLAY_SERVER (X_SERVER_XMIR (server)->priv->compositor));
+ XServerXmirPrivate *priv = x_server_xmir_get_instance_private (X_SERVER_XMIR (server));
+ return display_server_get_vt (DISPLAY_SERVER (priv->compositor));
}
static gboolean
x_server_xmir_start (DisplayServer *display_server)
{
XServerXmir *server = X_SERVER_XMIR (display_server);
+ XServerXmirPrivate *priv = x_server_xmir_get_instance_private (server);
- if (display_server_get_is_ready (DISPLAY_SERVER (server->priv->compositor)))
+ if (display_server_get_is_ready (DISPLAY_SERVER (priv->compositor)))
return X_SERVER_LOCAL_CLASS (x_server_xmir_parent_class)->start (display_server);
else
{
- if (!server->priv->waiting_for_compositor)
+ if (!priv->waiting_for_compositor)
{
- server->priv->waiting_for_compositor = TRUE;
- if (!display_server_start (DISPLAY_SERVER (server->priv->compositor)))
+ priv->waiting_for_compositor = TRUE;
+ if (!display_server_start (DISPLAY_SERVER (priv->compositor)))
return FALSE;
}
return TRUE;
@@ -128,19 +139,19 @@ x_server_xmir_start (DisplayServer *display_server)
static void
x_server_xmir_init (XServerXmir *server)
{
- server->priv = G_TYPE_INSTANCE_GET_PRIVATE (server, X_SERVER_XMIR_TYPE, XServerXmirPrivate);
}
static void
x_server_xmir_finalize (GObject *object)
{
XServerXmir *self = X_SERVER_XMIR (object);
+ XServerXmirPrivate *priv = x_server_xmir_get_instance_private (self);
- if (self->priv->compositor)
- g_signal_handlers_disconnect_matched (self->priv->compositor, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, self);
- g_clear_object (&self->priv->compositor);
- g_clear_pointer (&self->priv->mir_id, g_free);
- g_clear_pointer (&self->priv->mir_socket, g_free);
+ if (priv->compositor)
+ g_signal_handlers_disconnect_matched (priv->compositor, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, self);
+ g_clear_object (&priv->compositor);
+ g_clear_pointer (&priv->mir_id, g_free);
+ g_clear_pointer (&priv->mir_socket, g_free);
G_OBJECT_CLASS (x_server_xmir_parent_class)->finalize (object);
}
diff --git a/src/x-server-xmir.h b/src/x-server-xmir.h
index 6d1d45de..24b631c4 100644
--- a/src/x-server-xmir.h
+++ b/src/x-server-xmir.h
@@ -20,12 +20,9 @@ G_BEGIN_DECLS
#define X_SERVER_XMIR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), X_SERVER_XMIR_TYPE, XServerXmir))
#define IS_X_SERVER_XMIR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), X_SERVER_XMIR_TYPE))
-typedef struct XServerXmirPrivate XServerXmirPrivate;
-
typedef struct
{
- XServerLocal parent_instance;
- XServerXmirPrivate *priv;
+ XServerLocal parent_instance;
} XServerXmir;
typedef struct
diff --git a/src/x-server-xvnc.c b/src/x-server-xvnc.c
index 601240ef..68340d53 100644
--- a/src/x-server-xvnc.c
+++ b/src/x-server-xvnc.c
@@ -20,14 +20,14 @@
#include "configuration.h"
#include "process.h"
-struct XServerXVNCPrivate
+typedef struct
{
/* File descriptor to use for standard input */
gint socket_fd;
/* Geometry and colour depth */
gint width, height, depth;
-};
+} XServerXVNCPrivate;
G_DEFINE_TYPE_WITH_PRIVATE (XServerXVNC, x_server_xvnc, X_SERVER_LOCAL_TYPE)
@@ -43,41 +43,46 @@ x_server_xvnc_new (void)
void
x_server_xvnc_set_socket (XServerXVNC *server, int fd)
{
+ XServerXVNCPrivate *priv = x_server_xvnc_get_instance_private (server);
g_return_if_fail (server != NULL);
- server->priv->socket_fd = fd;
+ priv->socket_fd = fd;
}
int
x_server_xvnc_get_socket (XServerXVNC *server)
{
+ XServerXVNCPrivate *priv = x_server_xvnc_get_instance_private (server);
g_return_val_if_fail (server != NULL, 0);
- return server->priv->socket_fd;
+ return priv->socket_fd;
}
void
x_server_xvnc_set_geometry (XServerXVNC *server, gint width, gint height)
{
+ XServerXVNCPrivate *priv = x_server_xvnc_get_instance_private (server);
g_return_if_fail (server != NULL);
- server->priv->width = width;
- server->priv->height = height;
+ priv->width = width;
+ priv->height = height;
}
void
x_server_xvnc_set_depth (XServerXVNC *server, gint depth)
{
+ XServerXVNCPrivate *priv = x_server_xvnc_get_instance_private (server);
g_return_if_fail (server != NULL);
- server->priv->depth = depth;
+ priv->depth = depth;
}
static void
x_server_xvnc_run (Process *process, gpointer user_data)
{
XServerXVNC *server = user_data;
+ XServerXVNCPrivate *priv = x_server_xvnc_get_instance_private (server);
/* Connect input */
- dup2 (server->priv->socket_fd, STDIN_FILENO);
- dup2 (server->priv->socket_fd, STDOUT_FILENO);
- close (server->priv->socket_fd);
+ dup2 (priv->socket_fd, STDIN_FILENO);
+ dup2 (priv->socket_fd, STDOUT_FILENO);
+ close (priv->socket_fd);
/* Set SIGUSR1 to ignore so the X server can indicate it when it is ready */
signal (SIGUSR1, SIG_IGN);
@@ -105,23 +110,24 @@ static void
x_server_xvnc_add_args (XServerLocal *x_server, GString *command)
{
XServerXVNC *server = X_SERVER_XVNC (x_server);
+ XServerXVNCPrivate *priv = x_server_xvnc_get_instance_private (server);
g_string_append (command, " -inetd");
- if (server->priv->width > 0 && server->priv->height > 0)
- g_string_append_printf (command, " -geometry %dx%d", server->priv->width, server->priv->height);
+ if (priv->width > 0 && priv->height > 0)
+ g_string_append_printf (command, " -geometry %dx%d", priv->width, priv->height);
- if (server->priv->depth > 0)
- g_string_append_printf (command, " -depth %d", server->priv->depth);
+ if (priv->depth > 0)
+ g_string_append_printf (command, " -depth %d", priv->depth);
}
static void
x_server_xvnc_init (XServerXVNC *server)
{
- server->priv = G_TYPE_INSTANCE_GET_PRIVATE (server, X_SERVER_XVNC_TYPE, XServerXVNCPrivate);
- server->priv->width = 1024;
- server->priv->height = 768;
- server->priv->depth = 8;
+ XServerXVNCPrivate *priv = x_server_xvnc_get_instance_private (server);
+ priv->width = 1024;
+ priv->height = 768;
+ priv->depth = 8;
}
static void
diff --git a/src/x-server-xvnc.h b/src/x-server-xvnc.h
index accea198..eb71c80f 100644
--- a/src/x-server-xvnc.h
+++ b/src/x-server-xvnc.h
@@ -20,12 +20,9 @@ G_BEGIN_DECLS
#define X_SERVER_XVNC(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), X_SERVER_XVNC_TYPE, XServerXVNC))
#define IS_X_SERVER_XVNC(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), X_SERVER_XVNC_TYPE))
-typedef struct XServerXVNCPrivate XServerXVNCPrivate;
-
typedef struct
{
- XServerLocal parent_instance;
- XServerXVNCPrivate *priv;
+ XServerLocal parent_instance;
} XServerXVNC;
typedef struct
diff --git a/src/x-server.c b/src/x-server.c
index dc99d837..ae64808a 100644
--- a/src/x-server.c
+++ b/src/x-server.c
@@ -16,7 +16,7 @@
#include "x-server.h"
#include "configuration.h"
-struct XServerPrivate
+typedef struct
{
/* Host running the server */
gchar *hostname;
@@ -29,25 +29,29 @@ struct XServerPrivate
/* Connection to this X server */
xcb_connection_t *connection;
-};
+} XServerPrivate;
G_DEFINE_TYPE_WITH_PRIVATE (XServer, x_server, DISPLAY_SERVER_TYPE)
void
x_server_set_hostname (XServer *server, const gchar *hostname)
{
+ XServerPrivate *priv = x_server_get_instance_private (server);
+
g_return_if_fail (server != NULL);
- g_free (server->priv->hostname);
- server->priv->hostname = g_strdup (hostname);
- g_free (server->priv->address);
- server->priv->address = NULL;
+
+ g_free (priv->hostname);
+ priv->hostname = g_strdup (hostname);
+ g_free (priv->address);
+ priv->address = NULL;
}
gchar *
x_server_get_hostname (XServer *server)
{
+ XServerPrivate *priv = x_server_get_instance_private (server);
g_return_val_if_fail (server != NULL, NULL);
- return server->priv->hostname;
+ return priv->hostname;
}
guint
@@ -60,34 +64,39 @@ x_server_get_display_number (XServer *server)
const gchar *
x_server_get_address (XServer *server)
{
+ XServerPrivate *priv = x_server_get_instance_private (server);
+
g_return_val_if_fail (server != NULL, NULL);
- if (!server->priv->address)
+ if (!priv->address)
{
- if (server->priv->hostname)
- server->priv->address = g_strdup_printf("%s:%d", server->priv->hostname, x_server_get_display_number (server));
+ if (priv->hostname)
+ priv->address = g_strdup_printf("%s:%d", priv->hostname, x_server_get_display_number (server));
else
- server->priv->address = g_strdup_printf(":%d", x_server_get_display_number (server));
+ priv->address = g_strdup_printf(":%d", x_server_get_display_number (server));
}
- return server->priv->address;
+ return priv->address;
}
void
x_server_set_authority (XServer *server, XAuthority *authority)
{
+ XServerPrivate *priv = x_server_get_instance_private (server);
+
g_return_if_fail (server != NULL);
- g_clear_object (&server->priv->authority);
+ g_clear_object (&priv->authority);
if (authority)
- server->priv->authority = g_object_ref (authority);
+ priv->authority = g_object_ref (authority);
}
XAuthority *
x_server_get_authority (XServer *server)
{
+ XServerPrivate *priv = x_server_get_instance_private (server);
g_return_val_if_fail (server != NULL, NULL);
- return server->priv->authority;
+ return priv->authority;
}
static const gchar *
@@ -106,21 +115,22 @@ static gboolean
x_server_start (DisplayServer *display_server)
{
XServer *server = X_SERVER (display_server);
+ XServerPrivate *priv = x_server_get_instance_private (server);
xcb_auth_info_t *auth = NULL, a;
- if (server->priv->authority)
+ if (priv->authority)
{
- a.namelen = strlen (x_authority_get_authorization_name (server->priv->authority));
- a.name = (char *) x_authority_get_authorization_name (server->priv->authority);
- a.datalen = x_authority_get_authorization_data_length (server->priv->authority);
- a.data = (char *) x_authority_get_authorization_data (server->priv->authority);
+ a.namelen = strlen (x_authority_get_authorization_name (priv->authority));
+ a.name = (char *) x_authority_get_authorization_name (priv->authority);
+ a.datalen = x_authority_get_authorization_data_length (priv->authority);
+ a.data = (char *) x_authority_get_authorization_data (priv->authority);
auth = &a;
}
/* Open connection */
l_debug (server, "Connecting to XServer %s", x_server_get_address (server));
- server->priv->connection = xcb_connect_to_display_with_auth_info (x_server_get_address (server), auth, NULL);
- if (xcb_connection_has_error (server->priv->connection))
+ priv->connection = xcb_connect_to_display_with_auth_info (x_server_get_address (server), auth, NULL);
+ if (xcb_connection_has_error (priv->connection))
{
l_debug (server, "Error connecting to XServer %s", x_server_get_address (server));
return FALSE;
@@ -178,20 +188,20 @@ x_server_disconnect_session (DisplayServer *display_server, Session *session)
void
x_server_init (XServer *server)
{
- server->priv = G_TYPE_INSTANCE_GET_PRIVATE (server, X_SERVER_TYPE, XServerPrivate);
}
static void
x_server_finalize (GObject *object)
{
XServer *self = X_SERVER (object);
-
- g_clear_pointer (&self->priv->hostname, g_free);
- g_clear_pointer (&self->priv->address, g_free);
- g_clear_object (&self->priv->authority);
- if (self->priv->connection)
- xcb_disconnect (self->priv->connection);
- self->priv->connection = NULL;
+ XServerPrivate *priv = x_server_get_instance_private (self);
+
+ g_clear_pointer (&priv->hostname, g_free);
+ g_clear_pointer (&priv->address, g_free);
+ g_clear_object (&priv->authority);
+ if (priv->connection)
+ xcb_disconnect (priv->connection);
+ priv->connection = NULL;
G_OBJECT_CLASS (x_server_parent_class)->finalize (object);
}
diff --git a/src/x-server.h b/src/x-server.h
index 2d38cb2f..18b91634 100644
--- a/src/x-server.h
+++ b/src/x-server.h
@@ -24,12 +24,9 @@ G_BEGIN_DECLS
#define X_SERVER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), X_SERVER_TYPE, XServerClass))
#define IS_X_SERVER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), X_SERVER_TYPE))
-typedef struct XServerPrivate XServerPrivate;
-
typedef struct
{
- DisplayServer parent_instance;
- XServerPrivate *priv;
+ DisplayServer parent_instance;
} XServer;
typedef struct
diff --git a/src/xdmcp-server.c b/src/xdmcp-server.c
index f7c66c4c..5ebcacfa 100644
--- a/src/xdmcp-server.c
+++ b/src/xdmcp-server.c
@@ -18,7 +18,6 @@
#include "xdmcp-server.h"
#include "xdmcp-protocol.h"
-#include "xdmcp-session-private.h"
#include "x-authority.h"
enum {
@@ -27,7 +26,7 @@ enum {
};
static guint signals[LAST_SIGNAL] = { 0 };
-struct XDMCPServerPrivate
+typedef struct
{
/* Port to listen on */
guint port;
@@ -47,9 +46,9 @@ struct XDMCPServerPrivate
/* XDM-AUTHENTICATION-1 key */
gchar *key;
- /* Active XDMCP sessions */
+ /* Known XDMCP sessions */
GHashTable *sessions;
-};
+} XDMCPServerPrivate;
G_DEFINE_TYPE_WITH_PRIVATE (XDMCPServer, xdmcp_server, G_TYPE_OBJECT)
@@ -72,104 +71,133 @@ xdmcp_server_new (void)
void
xdmcp_server_set_port (XDMCPServer *server, guint port)
{
+ XDMCPServerPrivate *priv = xdmcp_server_get_instance_private (server);
g_return_if_fail (server != NULL);
- server->priv->port = port;
+ priv->port = port;
}
guint
xdmcp_server_get_port (XDMCPServer *server)
{
+ XDMCPServerPrivate *priv = xdmcp_server_get_instance_private (server);
g_return_val_if_fail (server != NULL, 0);
- return server->priv->port;
+ return priv->port;
}
void
xdmcp_server_set_listen_address (XDMCPServer *server, const gchar *listen_address)
{
+ XDMCPServerPrivate *priv = xdmcp_server_get_instance_private (server);
g_return_if_fail (server != NULL);
-
- g_free (server->priv->listen_address);
- server->priv->listen_address = g_strdup (listen_address);
+ g_free (priv->listen_address);
+ priv->listen_address = g_strdup (listen_address);
}
const gchar *
xdmcp_server_get_listen_address (XDMCPServer *server)
{
+ XDMCPServerPrivate *priv = xdmcp_server_get_instance_private (server);
g_return_val_if_fail (server != NULL, NULL);
- return server->priv->listen_address;
+ return priv->listen_address;
}
void
xdmcp_server_set_hostname (XDMCPServer *server, const gchar *hostname)
{
+ XDMCPServerPrivate *priv = xdmcp_server_get_instance_private (server);
g_return_if_fail (server != NULL);
-
- g_free (server->priv->hostname);
- server->priv->hostname = g_strdup (hostname);
+ g_free (priv->hostname);
+ priv->hostname = g_strdup (hostname);
}
const gchar *
xdmcp_server_get_hostname (XDMCPServer *server)
{
+ XDMCPServerPrivate *priv = xdmcp_server_get_instance_private (server);
g_return_val_if_fail (server != NULL, NULL);
- return server->priv->hostname;
+ return priv->hostname;
}
void
xdmcp_server_set_status (XDMCPServer *server, const gchar *status)
{
+ XDMCPServerPrivate *priv = xdmcp_server_get_instance_private (server);
g_return_if_fail (server != NULL);
-
- g_free (server->priv->status);
- server->priv->status = g_strdup (status);
+ g_free (priv->status);
+ priv->status = g_strdup (status);
}
const gchar *
xdmcp_server_get_status (XDMCPServer *server)
{
+ XDMCPServerPrivate *priv = xdmcp_server_get_instance_private (server);
g_return_val_if_fail (server != NULL, NULL);
- return server->priv->status;
+ return priv->status;
}
void
xdmcp_server_set_key (XDMCPServer *server, const gchar *key)
{
+ XDMCPServerPrivate *priv = xdmcp_server_get_instance_private (server);
g_return_if_fail (server != NULL);
- g_free (server->priv->key);
- server->priv->key = g_strdup (key);
+ g_free (priv->key);
+ priv->key = g_strdup (key);
}
+typedef struct
+{
+ XDMCPServer *server;
+ XDMCPSession *session;
+ guint timeout_source;
+} SessionData;
+
+static void
+session_data_free (SessionData *data)
+{
+ g_object_unref (data->session);
+ if (data->timeout_source != 0)
+ g_source_remove (data->timeout_source);
+ g_free (data);
+}
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC (SessionData, session_data_free)
+
static gboolean
-session_timeout_cb (XDMCPSession *session)
+session_timeout_cb (gpointer user_data)
{
- session->priv->inactive_timeout = 0;
+ g_autoptr(SessionData) data = user_data;
+ XDMCPServerPrivate *priv = xdmcp_server_get_instance_private (data->server);
- g_debug ("Timing out unmanaged session %d", session->priv->id);
- g_hash_table_remove (session->priv->server->priv->sessions, GINT_TO_POINTER ((gint) session->priv->id));
- return FALSE;
+ g_debug ("Timing out unmanaged session %d", xdmcp_session_get_id (data->session));
+ g_hash_table_remove (priv->sessions, GINT_TO_POINTER ((gint) xdmcp_session_get_id (data->session)));
+ return G_SOURCE_REMOVE;
}
static XDMCPSession *
-add_session (XDMCPServer *server)
+add_session (XDMCPServer *server, GInetAddress *address, guint16 display_number, XAuthority *authority)
{
+ XDMCPServerPrivate *priv = xdmcp_server_get_instance_private (server);
+
guint16 id;
do
{
id = g_random_int () & 0xFFFFFFFF;
- } while (g_hash_table_lookup (server->priv->sessions, GINT_TO_POINTER ((gint) id)));
+ } while (g_hash_table_lookup (priv->sessions, GINT_TO_POINTER ((gint) id)));
- XDMCPSession *session = xdmcp_session_new (id);
- session->priv->server = server;
- g_hash_table_insert (server->priv->sessions, GINT_TO_POINTER ((gint) id), session);
- session->priv->inactive_timeout = g_timeout_add (MANAGE_TIMEOUT, (GSourceFunc) session_timeout_cb, session);
+ SessionData *data = g_malloc0 (sizeof (SessionData));
+ data->server = server;
+ data->session = xdmcp_session_new (id, address, display_number, authority);
+ data->timeout_source = g_timeout_add (MANAGE_TIMEOUT, session_timeout_cb, data);
+ g_hash_table_insert (priv->sessions, GINT_TO_POINTER ((gint) id), data);
- return session;
+ return data->session;
}
-static XDMCPSession *
-get_session (XDMCPServer *server, guint16 id)
+static SessionData *
+get_session_data (XDMCPServer *server, guint16 id)
{
- return g_hash_table_lookup (server->priv->sessions, GINT_TO_POINTER ((gint) id));
+ XDMCPServerPrivate *priv = xdmcp_server_get_instance_private (server);
+ return g_hash_table_lookup (priv->sessions, GINT_TO_POINTER ((gint) id));
}
static gchar *
@@ -201,7 +229,8 @@ send_packet (GSocket *socket, GSocketAddress *address, XDMCPPacket *packet)
static const gchar *
get_authentication_name (XDMCPServer *server)
{
- if (server->priv->key)
+ XDMCPServerPrivate *priv = xdmcp_server_get_instance_private (server);
+ if (priv->key)
return "XDM-AUTHENTICATION-1";
else
return "";
@@ -210,14 +239,16 @@ get_authentication_name (XDMCPServer *server)
static void
handle_query (XDMCPServer *server, GSocket *socket, GSocketAddress *address, gchar **authentication_names)
{
+ XDMCPServerPrivate *priv = xdmcp_server_get_instance_private (server);
+
/* If no authentication requested and we are configured for none then allow */
const gchar *authentication_name = NULL;
- if (authentication_names[0] == NULL && server->priv->key == NULL)
+ if (authentication_names[0] == NULL && priv->key == NULL)
authentication_name = "";
for (gchar **i = authentication_names; *i; i++)
{
- if (strcmp (*i, get_authentication_name (server)) == 0 && server->priv->key != NULL)
+ if (strcmp (*i, get_authentication_name (server)) == 0 && priv->key != NULL)
{
authentication_name = *i;
break;
@@ -229,14 +260,14 @@ handle_query (XDMCPServer *server, GSocket *socket, GSocketAddress *address, gch
{
response = xdmcp_packet_alloc (XDMCP_Willing);
response->Willing.authentication_name = g_strdup (authentication_name);
- response->Willing.hostname = g_strdup (server->priv->hostname);
- response->Willing.status = g_strdup (server->priv->status);
+ response->Willing.hostname = g_strdup (priv->hostname);
+ response->Willing.status = g_strdup (priv->status);
}
else
{
response = xdmcp_packet_alloc (XDMCP_Unwilling);
- response->Unwilling.hostname = g_strdup (server->priv->hostname);
- if (server->priv->key)
+ response->Unwilling.hostname = g_strdup (priv->hostname);
+ if (priv->key)
response->Unwilling.status = g_strdup_printf ("No matching authentication, server requires %s", get_authentication_name (server));
else
response->Unwilling.status = g_strdup ("No matching authentication");
@@ -428,6 +459,8 @@ has_string (gchar **list, const gchar *text)
static void
handle_request (XDMCPServer *server, GSocket *socket, GSocketAddress *address, XDMCPPacket *packet)
{
+ XDMCPServerPrivate *priv = xdmcp_server_get_instance_private (server);
+
/* Check authentication */
g_autofree gchar *authentication_name = NULL;
g_autofree guint8 *authentication_data = NULL;
@@ -436,7 +469,7 @@ handle_request (XDMCPServer *server, GSocket *socket, GSocketAddress *address, X
XdmAuthKeyRec rho;
if (strcmp (packet->Request.authentication_name, "") == 0)
{
- if (!server->priv->key)
+ if (!priv->key)
{
if (!has_string (packet->Request.authorization_names, "MIT-MAGIC-COOKIE-1"))
decline_status = g_strdup ("No matching authorization, server requires MIT-MAGIC-COOKIE-1");
@@ -444,7 +477,7 @@ handle_request (XDMCPServer *server, GSocket *socket, GSocketAddress *address, X
else
decline_status = g_strdup ("No matching authentication, server requires XDM-AUTHENTICATION-1");
}
- else if (strcmp (packet->Request.authentication_name, "XDM-AUTHENTICATION-1") == 0 && server->priv->key)
+ else if (strcmp (packet->Request.authentication_name, "XDM-AUTHENTICATION-1") == 0 && priv->key)
{
if (packet->Request.authentication_data.length == 8)
{
@@ -453,7 +486,7 @@ handle_request (XDMCPServer *server, GSocket *socket, GSocketAddress *address, X
memcpy (input, packet->Request.authentication_data.data, packet->Request.authentication_data.length);
/* Setup key */
- decode_key (server->priv->key, key);
+ decode_key (priv->key, key);
/* Decode message from server */
authentication_name = g_strdup ("XDM-AUTHENTICATION-1");
@@ -474,7 +507,7 @@ handle_request (XDMCPServer *server, GSocket *socket, GSocketAddress *address, X
{
if (strcmp (packet->Request.authentication_name, "") == 0)
decline_status = g_strdup_printf ("No matching authentication, server does not support unauthenticated connections");
- else if (server->priv->key)
+ else if (priv->key)
decline_status = g_strdup ("No matching authentication, server requires XDM-AUTHENTICATION-1");
else
decline_status = g_strdup ("No matching authentication, server only supports unauthenticated connections");
@@ -507,11 +540,11 @@ handle_request (XDMCPServer *server, GSocket *socket, GSocketAddress *address, X
gsize authorization_data_length = 0;
g_autofree guint8 *session_authorization_data = NULL;
gsize session_authorization_data_length = 0;
- if (server->priv->key)
+ if (priv->key)
{
/* Setup key */
guint8 key[8];
- decode_key (server->priv->key, key);
+ decode_key (priv->key, key);
/* Generate a private session key */
// FIXME: Pick a good DES key?
@@ -544,35 +577,35 @@ handle_request (XDMCPServer *server, GSocket *socket, GSocketAddress *address, X
session_authorization_data_length = x_authority_get_authorization_data_length (auth);
}
- XDMCPSession *session = add_session (server);
- session->priv->address = connection_to_address (connection);
- session->priv->display_number = packet->Request.display_number;
- g_autofree gchar *display_number = g_strdup_printf ("%d", packet->Request.display_number);
-
/* We need to check if this is the loopback address and set the authority
* for a local connection if this is so as XCB treats "127.0.0.1" as local
* always */
- if (g_inet_address_get_is_loopback (session->priv->address))
+ g_autoptr(GInetAddress) session_address = connection_to_address (connection);
+ g_autofree gchar *display_number = g_strdup_printf ("%d", packet->Request.display_number);
+ g_autoptr(XAuthority) authority = NULL;
+ if (g_inet_address_get_is_loopback (session_address))
{
gchar hostname[1024];
gethostname (hostname, 1024);
- session->priv->authority = x_authority_new (XAUTH_FAMILY_LOCAL,
- (guint8 *) hostname,
- strlen (hostname),
- display_number,
- authorization_name,
- session_authorization_data,
- session_authorization_data_length);
+ authority = x_authority_new (XAUTH_FAMILY_LOCAL,
+ (guint8 *) hostname,
+ strlen (hostname),
+ display_number,
+ authorization_name,
+ session_authorization_data,
+ session_authorization_data_length);
}
else
- session->priv->authority = x_authority_new (connection->type,
- connection->address.data,
- connection->address.length,
- display_number,
- authorization_name,
- session_authorization_data,
- session_authorization_data_length);
+ authority = x_authority_new (connection->type,
+ connection->address.data,
+ connection->address.length,
+ display_number,
+ authorization_name,
+ session_authorization_data,
+ session_authorization_data_length);
+
+ XDMCPSession *session = add_session (server, session_address, packet->Request.display_number, authority);
XDMCPPacket *response = xdmcp_packet_alloc (XDMCP_Accept);
response->Accept.session_id = xdmcp_session_get_id (session);
@@ -589,8 +622,8 @@ handle_request (XDMCPServer *server, GSocket *socket, GSocketAddress *address, X
static void
handle_manage (XDMCPServer *server, GSocket *socket, GSocketAddress *address, XDMCPPacket *packet)
{
- XDMCPSession *session = get_session (server, packet->Manage.session_id);
- if (!session)
+ SessionData *data = get_session_data (server, packet->Manage.session_id);
+ if (!data->session)
{
XDMCPPacket *response = xdmcp_packet_alloc (XDMCP_Refuse);
response->Refuse.session_id = packet->Manage.session_id;
@@ -600,37 +633,36 @@ handle_manage (XDMCPServer *server, GSocket *socket, GSocketAddress *address, XD
}
/* Ignore duplicate requests */
- if (session->priv->started)
+ if (data->timeout_source == 0)
{
- if (session->priv->display_number != packet->Manage.display_number ||
- strcmp (session->priv->display_class, packet->Manage.display_class) != 0)
+ if (xdmcp_session_get_display_number (data->session) != packet->Manage.display_number ||
+ strcmp (xdmcp_session_get_display_class (data->session), packet->Manage.display_class) != 0)
g_debug ("Ignoring duplicate Manage with different data");
return;
}
/* Reject if has changed display number */
- if (packet->Manage.display_number != session->priv->display_number)
+ if (packet->Manage.display_number != xdmcp_session_get_display_number (data->session))
{
XDMCPPacket *response;
- g_debug ("Received Manage for display number %d, but Request was %d", packet->Manage.display_number, session->priv->display_number);
+ g_debug ("Received Manage for display number %d, but Request was %d", packet->Manage.display_number, xdmcp_session_get_display_number (data->session));
response = xdmcp_packet_alloc (XDMCP_Refuse);
response->Refuse.session_id = packet->Manage.session_id;
send_packet (socket, address, response);
xdmcp_packet_free (response);
}
- session->priv->display_class = g_strdup (packet->Manage.display_class);
+ xdmcp_session_set_display_class (data->session, packet->Manage.display_class);
gboolean result = FALSE;
- g_signal_emit (server, signals[NEW_SESSION], 0, session, &result);
+ g_signal_emit (server, signals[NEW_SESSION], 0, data->session, &result);
if (result)
{
/* Cancel the inactive timer */
- if (session->priv->inactive_timeout)
- g_source_remove (session->priv->inactive_timeout);
-
- session->priv->started = TRUE;
+ if (data->timeout_source != 0)
+ g_source_remove (data->timeout_source);
+ data->timeout_source = 0;
}
else
{
@@ -647,15 +679,12 @@ handle_manage (XDMCPServer *server, GSocket *socket, GSocketAddress *address, XD
static void
handle_keep_alive (XDMCPServer *server, GSocket *socket, GSocketAddress *address, XDMCPPacket *packet)
{
- XDMCPPacket *response;
- XDMCPSession *session;
+ SessionData *data = get_session_data (server, packet->KeepAlive.session_id);
gboolean alive = FALSE;
-
- session = get_session (server, packet->KeepAlive.session_id);
- if (session)
+ if (data)
alive = TRUE; // FIXME: xdmcp_session_get_alive (session);
- response = xdmcp_packet_alloc (XDMCP_Alive);
+ XDMCPPacket *response = xdmcp_packet_alloc (XDMCP_Alive);
response->Alive.session_running = alive;
response->Alive.session_id = alive ? packet->KeepAlive.session_id : 0;
send_packet (socket, address, response);
@@ -752,33 +781,35 @@ open_udp_socket (GSocketFamily family, guint port, const gchar *listen_address,
gboolean
xdmcp_server_start (XDMCPServer *server)
{
+ XDMCPServerPrivate *priv = xdmcp_server_get_instance_private (server);
+
g_return_val_if_fail (server != NULL, FALSE);
g_autoptr(GError) ipv4_error = NULL;
- server->priv->socket = open_udp_socket (G_SOCKET_FAMILY_IPV4, server->priv->port, server->priv->listen_address, &ipv4_error);
+ priv->socket = open_udp_socket (G_SOCKET_FAMILY_IPV4, priv->port, priv->listen_address, &ipv4_error);
if (ipv4_error)
g_warning ("Failed to create IPv4 XDMCP socket: %s", ipv4_error->message);
- if (server->priv->socket)
+ if (priv->socket)
{
- GSource *source = g_socket_create_source (server->priv->socket, G_IO_IN, NULL);
+ GSource *source = g_socket_create_source (priv->socket, G_IO_IN, NULL);
g_source_set_callback (source, (GSourceFunc) read_cb, server, NULL);
g_source_attach (source, NULL);
}
g_autoptr(GError) ipv6_error = NULL;
- server->priv->socket6 = open_udp_socket (G_SOCKET_FAMILY_IPV6, server->priv->port, server->priv->listen_address, &ipv6_error);
+ priv->socket6 = open_udp_socket (G_SOCKET_FAMILY_IPV6, priv->port, priv->listen_address, &ipv6_error);
if (ipv6_error)
g_warning ("Failed to create IPv6 XDMCP socket: %s", ipv6_error->message);
- if (server->priv->socket6)
+ if (priv->socket6)
{
- GSource *source = g_socket_create_source (server->priv->socket6, G_IO_IN, NULL);
+ GSource *source = g_socket_create_source (priv->socket6, G_IO_IN, NULL);
g_source_set_callback (source, (GSourceFunc) read_cb, server, NULL);
g_source_attach (source, NULL);
}
- if (!server->priv->socket && !server->priv->socket6)
+ if (!priv->socket && !priv->socket6)
return FALSE;
return TRUE;
@@ -787,26 +818,27 @@ xdmcp_server_start (XDMCPServer *server)
static void
xdmcp_server_init (XDMCPServer *server)
{
- server->priv = G_TYPE_INSTANCE_GET_PRIVATE (server, XDMCP_SERVER_TYPE, XDMCPServerPrivate);
+ XDMCPServerPrivate *priv = xdmcp_server_get_instance_private (server);
- server->priv->port = XDM_UDP_PORT;
- server->priv->hostname = g_strdup ("");
- server->priv->status = g_strdup ("");
- server->priv->sessions = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_object_unref);
+ priv->port = XDM_UDP_PORT;
+ priv->hostname = g_strdup ("");
+ priv->status = g_strdup ("");
+ priv->sessions = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, (GDestroyNotify) session_data_free);
}
static void
xdmcp_server_finalize (GObject *object)
{
XDMCPServer *self = XDMCP_SERVER (object);
-
- g_clear_object (&self->priv->socket);
- g_clear_object (&self->priv->socket6);
- g_clear_pointer (&self->priv->listen_address, g_free);
- g_clear_pointer (&self->priv->hostname, g_free);
- g_clear_pointer (&self->priv->status, g_free);
- g_clear_pointer (&self->priv->key, g_free);
- g_clear_pointer (&self->priv->sessions, g_hash_table_unref);
+ XDMCPServerPrivate *priv = xdmcp_server_get_instance_private (self);
+
+ g_clear_object (&priv->socket);
+ g_clear_object (&priv->socket6);
+ g_clear_pointer (&priv->listen_address, g_free);
+ g_clear_pointer (&priv->hostname, g_free);
+ g_clear_pointer (&priv->status, g_free);
+ g_clear_pointer (&priv->key, g_free);
+ g_clear_pointer (&priv->sessions, g_hash_table_unref);
G_OBJECT_CLASS (xdmcp_server_parent_class)->finalize (object);
}
diff --git a/src/xdmcp-server.h b/src/xdmcp-server.h
index d3b824b9..1bc554a1 100644
--- a/src/xdmcp-server.h
+++ b/src/xdmcp-server.h
@@ -23,12 +23,9 @@ G_BEGIN_DECLS
#define XDMCP_SERVER_SIGNAL_NEW_SESSION "new-session"
-typedef struct XDMCPServerPrivate XDMCPServerPrivate;
-
typedef struct
{
- GObject parent_instance;
- XDMCPServerPrivate *priv;
+ GObject parent_instance;
} XDMCPServer;
typedef struct
diff --git a/src/xdmcp-session-private.h b/src/xdmcp-session-private.h
deleted file mode 100644
index a40568a1..00000000
--- a/src/xdmcp-session-private.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2010-2011 Robert Ancell.
- * Author: Robert Ancell <robert.ancell@canonical.com>
- *
- * This program is free software: you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation, either version 3 of the License, or (at your option) any later
- * version. See http://www.gnu.org/copyleft/gpl.html the full text of the
- * license.
- */
-
-#ifndef XDMCP_SESSION_PRIVATE_H_
-#define XDMCP_SESSION_PRIVATE_H_
-
-#include "xdmcp-server.h"
-#include "x-authority.h"
-
-struct XDMCPSessionPrivate
-{
- XDMCPServer *server;
-
- guint16 id;
-
- gchar *manufacturer_display_id;
-
- GInetAddress *address;
-
- guint inactive_timeout;
-
- XAuthority *authority;
-
- gboolean started;
-
- guint16 display_number;
-
- gchar *display_class;
-};
-
-#endif /* XDMCP_SESSION_PRIVATE_H_ */
diff --git a/src/xdmcp-session.c b/src/xdmcp-session.c
index 10724119..54b90d99 100644
--- a/src/xdmcp-session.c
+++ b/src/xdmcp-session.c
@@ -10,16 +10,35 @@
*/
#include "xdmcp-session.h"
-#include "xdmcp-session-private.h"
+#include "x-authority.h"
+
+typedef struct
+{
+ guint16 id;
+
+ GInetAddress *address;
+
+ guint inactive_timeout;
+
+ XAuthority *authority;
+
+ guint16 display_number;
+
+ gchar *display_class;
+} XDMCPSessionPrivate;
G_DEFINE_TYPE_WITH_PRIVATE (XDMCPSession, xdmcp_session, G_TYPE_OBJECT)
XDMCPSession *
-xdmcp_session_new (guint16 id)
+xdmcp_session_new (guint16 id, GInetAddress *address, guint16 display_number, XAuthority *authority)
{
XDMCPSession *self = g_object_new (XDMCP_SESSION_TYPE, NULL);
+ XDMCPSessionPrivate *priv = xdmcp_session_get_instance_private (self);
- self->priv->id = id;
+ priv->id = id;
+ priv->address = g_object_ref (address);
+ priv->display_number = display_number;
+ priv->authority = g_object_ref (authority);
return self;
}
@@ -27,62 +46,69 @@ xdmcp_session_new (guint16 id)
guint16
xdmcp_session_get_id (XDMCPSession *session)
{
+ XDMCPSessionPrivate *priv = xdmcp_session_get_instance_private (session);
g_return_val_if_fail (session != NULL, 0);
- return session->priv->id;
+ return priv->id;
}
-const gchar *
-xdmcp_session_get_manufacturer_display_id (XDMCPSession *session)
+GInetAddress *
+xdmcp_session_get_address (XDMCPSession *session)
{
+ XDMCPSessionPrivate *priv = xdmcp_session_get_instance_private (session);
g_return_val_if_fail (session != NULL, NULL);
- return session->priv->manufacturer_display_id;
+ return priv->address;
}
-GInetAddress *
-xdmcp_session_get_address (XDMCPSession *session)
+guint16
+xdmcp_session_get_display_number (XDMCPSession *session)
{
- g_return_val_if_fail (session != NULL, NULL);
- return session->priv->address;
+ XDMCPSessionPrivate *priv = xdmcp_session_get_instance_private (session);
+ g_return_val_if_fail (session != NULL, 0);
+ return priv->display_number;
}
XAuthority *
xdmcp_session_get_authority (XDMCPSession *session)
{
+ XDMCPSessionPrivate *priv = xdmcp_session_get_instance_private (session);
g_return_val_if_fail (session != NULL, NULL);
- return session->priv->authority;
+ return priv->authority;
}
-guint16
-xdmcp_session_get_display_number (XDMCPSession *session)
+void
+xdmcp_session_set_display_class (XDMCPSession *session, const gchar *display_class)
{
- g_return_val_if_fail (session != NULL, 0);
- return session->priv->display_number;
+ XDMCPSessionPrivate *priv = xdmcp_session_get_instance_private (session);
+ g_return_if_fail (session != NULL);
+ g_free (priv->display_class);
+ priv->display_class = g_strdup (display_class);
}
const gchar *
xdmcp_session_get_display_class (XDMCPSession *session)
{
+ XDMCPSessionPrivate *priv = xdmcp_session_get_instance_private (session);
g_return_val_if_fail (session != NULL, NULL);
- return session->priv->display_class;
+ return priv->display_class;
}
static void
xdmcp_session_init (XDMCPSession *session)
{
- session->priv = G_TYPE_INSTANCE_GET_PRIVATE (session, XDMCP_SESSION_TYPE, XDMCPSessionPrivate);
- session->priv->manufacturer_display_id = g_strdup ("");
- session->priv->display_class = g_strdup ("");
+ XDMCPSessionPrivate *priv = xdmcp_session_get_instance_private (session);
+
+ priv->display_class = g_strdup ("");
}
static void
xdmcp_session_finalize (GObject *object)
{
XDMCPSession *self = XDMCP_SESSION (object);
+ XDMCPSessionPrivate *priv = xdmcp_session_get_instance_private (self);
- g_clear_pointer (&self->priv->manufacturer_display_id, g_free);
- g_clear_object (&self->priv->address);
- g_clear_object (&self->priv->authority);
- g_clear_pointer (&self->priv->display_class, g_free);
+ g_clear_object (&priv->address);
+ g_clear_object (&priv->authority);
+ g_clear_pointer (&priv->display_class, g_free);
G_OBJECT_CLASS (xdmcp_session_parent_class)->finalize (object);
}
diff --git a/src/xdmcp-session.h b/src/xdmcp-session.h
index 63b3f367..c9edb2c0 100644
--- a/src/xdmcp-session.h
+++ b/src/xdmcp-session.h
@@ -22,12 +22,9 @@ G_BEGIN_DECLS
#define XDMCP_SESSION_TYPE (xdmcp_session_get_type())
#define XDMCP_SESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), XDMCP_SESSION_TYPE, XDMCPSession));
-typedef struct XDMCPSessionPrivate XDMCPSessionPrivate;
-
typedef struct
{
- GObject parent_instance;
- XDMCPSessionPrivate *priv;
+ GObject parent_instance;
} XDMCPSession;
typedef struct
@@ -37,17 +34,17 @@ typedef struct
GType xdmcp_session_get_type (void);
-XDMCPSession *xdmcp_session_new (guint16 id);
+XDMCPSession *xdmcp_session_new (guint16 id, GInetAddress *address, guint16 display_number, XAuthority *authority);
guint16 xdmcp_session_get_id (XDMCPSession *session);
-const gchar *xdmcp_session_get_manufacturer_display_id (XDMCPSession *session);
-
GInetAddress *xdmcp_session_get_address (XDMCPSession *session);
+guint16 xdmcp_session_get_display_number (XDMCPSession *session);
+
XAuthority *xdmcp_session_get_authority (XDMCPSession *session);
-guint16 xdmcp_session_get_display_number (XDMCPSession *session);
+void xdmcp_session_set_display_class (XDMCPSession *session, const gchar *display_class);
const gchar *xdmcp_session_get_display_class (XDMCPSession *session);
diff --git a/tests/src/x-authority.c b/tests/src/x-authority.c
index 8c0aa508..e63a051f 100644
--- a/tests/src/x-authority.c
+++ b/tests/src/x-authority.c
@@ -3,12 +3,12 @@
#include "x-authority.h"
#include "x-common.h"
-struct XAuthorityPrivate
+typedef struct
{
GList *records;
-};
+} XAuthorityPrivate;
-struct XAuthorityRecordPrivate
+typedef struct
{
guint16 family;
guint16 address_length;
@@ -17,7 +17,7 @@ struct XAuthorityRecordPrivate
gchar *authorization_name;
guint16 authorization_data_length;
guint8 *authorization_data;
-};
+} XAuthorityRecordPrivate;
G_DEFINE_TYPE_WITH_PRIVATE (XAuthority, x_authority, G_TYPE_OBJECT)
G_DEFINE_TYPE_WITH_PRIVATE (XAuthorityRecord, x_authority_record, G_TYPE_OBJECT)
@@ -31,6 +31,8 @@ x_authority_new (void)
gboolean
x_authority_load (XAuthority *authority, const gchar *filename, GError **error)
{
+ XAuthorityPrivate *priv = x_authority_get_instance_private (authority);
+
guint8 *xauth_data;
gsize xauth_length;
if (!g_file_get_contents (filename, (gchar **) &xauth_data, &xauth_length, error))
@@ -40,17 +42,19 @@ x_authority_load (XAuthority *authority, const gchar *filename, GError **error)
while (offset < xauth_length)
{
XAuthorityRecord *record = g_object_new (x_authority_record_get_type (), NULL);
- record->priv->family = read_card16 (xauth_data, xauth_length, X_BYTE_ORDER_MSB, &offset);
- record->priv->address_length = read_card16 (xauth_data, xauth_length, X_BYTE_ORDER_MSB, &offset);
- record->priv->address = read_string8 (xauth_data, xauth_length, record->priv->address_length, &offset);
+ XAuthorityRecordPrivate *r_priv = x_authority_record_get_instance_private (record);
+
+ r_priv->family = read_card16 (xauth_data, xauth_length, X_BYTE_ORDER_MSB, &offset);
+ r_priv->address_length = read_card16 (xauth_data, xauth_length, X_BYTE_ORDER_MSB, &offset);
+ r_priv->address = read_string8 (xauth_data, xauth_length, r_priv->address_length, &offset);
guint16 length = read_card16 (xauth_data, xauth_length, X_BYTE_ORDER_MSB, &offset);
- record->priv->number = (gchar *) read_string8 (xauth_data, xauth_length, length, &offset);
+ r_priv->number = (gchar *) read_string8 (xauth_data, xauth_length, length, &offset);
length = read_card16 (xauth_data, xauth_length, X_BYTE_ORDER_MSB, &offset);
- record->priv->authorization_name = (gchar *) read_string8 (xauth_data, xauth_length, length, &offset);
- record->priv->authorization_data_length = read_card16 (xauth_data, xauth_length, X_BYTE_ORDER_MSB, &offset);
- record->priv->authorization_data = read_string8 (xauth_data, xauth_length, record->priv->authorization_data_length, &offset);
+ r_priv->authorization_name = (gchar *) read_string8 (xauth_data, xauth_length, length, &offset);
+ r_priv->authorization_data_length = read_card16 (xauth_data, xauth_length, X_BYTE_ORDER_MSB, &offset);
+ r_priv->authorization_data = read_string8 (xauth_data, xauth_length, r_priv->authorization_data_length, &offset);
- authority->priv->records = g_list_append (authority->priv->records, record);
+ priv->records = g_list_append (priv->records, record);
}
return TRUE;
@@ -59,14 +63,17 @@ x_authority_load (XAuthority *authority, const gchar *filename, GError **error)
XAuthorityRecord *
x_authority_match_local (XAuthority *authority, const gchar *authorization_name)
{
- for (GList *link = authority->priv->records; link; link = link->next)
+ XAuthorityPrivate *priv = x_authority_get_instance_private (authority);
+
+ for (GList *link = priv->records; link; link = link->next)
{
XAuthorityRecord *record = link->data;
+ XAuthorityRecordPrivate *r_priv = x_authority_record_get_instance_private (record);
- if (strcmp (record->priv->authorization_name, authorization_name) != 0)
+ if (strcmp (r_priv->authorization_name, authorization_name) != 0)
continue;
- if (record->priv->family == XAUTH_FAMILY_WILD || record->priv->family == XAUTH_FAMILY_LOCAL)
+ if (r_priv->family == XAUTH_FAMILY_WILD || r_priv->family == XAUTH_FAMILY_LOCAL)
return record;
}
@@ -76,14 +83,17 @@ x_authority_match_local (XAuthority *authority, const gchar *authorization_name)
XAuthorityRecord *
x_authority_match_localhost (XAuthority *authority, const gchar *authorization_name)
{
- for (GList *link = authority->priv->records; link; link = link->next)
+ XAuthorityPrivate *priv = x_authority_get_instance_private (authority);
+
+ for (GList *link = priv->records; link; link = link->next)
{
XAuthorityRecord *record = link->data;
+ XAuthorityRecordPrivate *r_priv = x_authority_record_get_instance_private (record);
- if (strcmp (record->priv->authorization_name, authorization_name) != 0)
+ if (strcmp (r_priv->authorization_name, authorization_name) != 0)
continue;
- if (record->priv->family == XAUTH_FAMILY_WILD || record->priv->family == XAUTH_FAMILY_LOCALHOST)
+ if (r_priv->family == XAUTH_FAMILY_WILD || r_priv->family == XAUTH_FAMILY_LOCALHOST)
return record;
}
@@ -93,6 +103,8 @@ x_authority_match_localhost (XAuthority *authority, const gchar *authorization_n
XAuthorityRecord *
x_authority_match_inet (XAuthority *authority, GInetAddress *address, const gchar *authorization_name)
{
+ XAuthorityPrivate *priv = x_authority_get_instance_private (authority);
+
guint16 family;
switch (g_inet_address_get_family (address))
{
@@ -108,26 +120,27 @@ x_authority_match_inet (XAuthority *authority, GInetAddress *address, const gcha
gssize address_data_length = g_inet_address_get_native_size (address);
const guint8 *address_data = g_inet_address_to_bytes (address);
- for (GList *link = authority->priv->records; link; link = link->next)
+ for (GList *link = priv->records; link; link = link->next)
{
XAuthorityRecord *record = link->data;
+ XAuthorityRecordPrivate *r_priv = x_authority_record_get_instance_private (record);
- if (strcmp (record->priv->authorization_name, authorization_name) != 0)
+ if (strcmp (r_priv->authorization_name, authorization_name) != 0)
continue;
- if (record->priv->family == XAUTH_FAMILY_WILD)
+ if (r_priv->family == XAUTH_FAMILY_WILD)
return record;
- if (record->priv->family != family)
+ if (r_priv->family != family)
continue;
- if (record->priv->address_length != address_data_length)
+ if (r_priv->address_length != address_data_length)
continue;
gboolean matches = TRUE;
for (int i = 0; i < address_data_length; i++)
{
- if (address_data[i] != record->priv->address[i])
+ if (address_data[i] != r_priv->address[i])
{
matches = FALSE;
break;
@@ -143,14 +156,15 @@ x_authority_match_inet (XAuthority *authority, GInetAddress *address, const gcha
static void
x_authority_init (XAuthority *authority)
{
- authority->priv = G_TYPE_INSTANCE_GET_PRIVATE (authority, x_authority_get_type (), XAuthorityPrivate);
}
static void
x_authority_finalize (GObject *object)
{
XAuthority *authority = (XAuthority *) object;
- g_list_free_full (authority->priv->records, g_object_unref);
+ XAuthorityPrivate *priv = x_authority_get_instance_private (authority);
+
+ g_list_free_full (priv->records, g_object_unref);
}
static void
@@ -163,26 +177,30 @@ x_authority_class_init (XAuthorityClass *klass)
guint16
x_authority_record_get_authorization_data_length (XAuthorityRecord *record)
{
- return record->priv->authorization_data_length;
+ XAuthorityRecordPrivate *priv = x_authority_record_get_instance_private (record);
+ return priv->authorization_data_length;
}
const guint8 *
x_authority_record_get_authorization_data (XAuthorityRecord *record)
{
- return record->priv->authorization_data;
+ XAuthorityRecordPrivate *priv = x_authority_record_get_instance_private (record);
+ return priv->authorization_data;
}
gboolean
x_authority_record_check_cookie (XAuthorityRecord *record, const guint8 *cookie_data, guint16 cookie_data_length)
{
- if (strcmp (record->priv->authorization_name, "MIT-MAGIC-COOKIE-1") != 0)
+ XAuthorityRecordPrivate *priv = x_authority_record_get_instance_private (record);
+
+ if (strcmp (priv->authorization_name, "MIT-MAGIC-COOKIE-1") != 0)
return FALSE;
- if (cookie_data_length != record->priv->authorization_data_length)
+ if (cookie_data_length != priv->authorization_data_length)
return FALSE;
for (guint16 i = 0; i < cookie_data_length; i++)
- if (cookie_data[i] != record->priv->authorization_data[i])
+ if (cookie_data[i] != priv->authorization_data[i])
return FALSE;
return TRUE;
@@ -191,17 +209,18 @@ x_authority_record_check_cookie (XAuthorityRecord *record, const guint8 *cookie_
static void
x_authority_record_init (XAuthorityRecord *record)
{
- record->priv = G_TYPE_INSTANCE_GET_PRIVATE (record, x_authority_record_get_type (), XAuthorityRecordPrivate);
}
static void
x_authority_record_finalize (GObject *object)
{
XAuthorityRecord *record = (XAuthorityRecord *) object;
- g_free (record->priv->address);
- g_free (record->priv->number);
- g_free (record->priv->authorization_name);
- g_free (record->priv->authorization_data);
+ XAuthorityRecordPrivate *priv = x_authority_record_get_instance_private (record);
+
+ g_free (priv->address);
+ g_free (priv->number);
+ g_free (priv->authorization_name);
+ g_free (priv->authorization_data);
}
static void
diff --git a/tests/src/x-authority.h b/tests/src/x-authority.h
index 9f329f31..f3a57e83 100644
--- a/tests/src/x-authority.h
+++ b/tests/src/x-authority.h
@@ -20,12 +20,9 @@ enum
XAUTH_FAMILY_WILD = 65535
};
-typedef struct XAuthorityPrivate XAuthorityPrivate;
-
typedef struct
{
GObjectClass parent_instance;
- XAuthorityPrivate *priv;
} XAuthority;
typedef struct
@@ -33,12 +30,9 @@ typedef struct
GObjectClass parent_class;
} XAuthorityClass;
-typedef struct XAuthorityRecordPrivate XAuthorityRecordPrivate;
-
typedef struct
{
GObjectClass parent_instance;
- XAuthorityRecordPrivate *priv;
} XAuthorityRecord;
typedef struct
diff --git a/tests/src/x-server.c b/tests/src/x-server.c
index e603fc03..cdfcbd32 100644
--- a/tests/src/x-server.c
+++ b/tests/src/x-server.c
@@ -22,7 +22,7 @@ enum {
};
static guint x_server_signals[X_SERVER_LAST_SIGNAL] = { 0 };
-struct XServerPrivate
+typedef struct
{
gint display_number;
@@ -30,16 +30,16 @@ struct XServerPrivate
GSocket *socket;
GIOChannel *channel;
GHashTable *clients;
-};
+} XServerPrivate;
G_DEFINE_TYPE_WITH_PRIVATE (XServer, x_server, G_TYPE_OBJECT)
-struct XClientPrivate
+typedef struct
{
XServer *server;
GSocket *socket;
GIOChannel *channel;
-};
+} XClientPrivate;
G_DEFINE_TYPE_WITH_PRIVATE (XClient, x_client, G_TYPE_OBJECT)
@@ -53,31 +53,33 @@ static guint x_client_signals[X_CLIENT_LAST_SIGNAL] = { 0 };
void
x_client_send_failed (XClient *client, const gchar *reason)
{
+ XClientPrivate *priv = x_client_get_instance_private (client);
g_autofree gchar *message = g_strdup_printf ("FAILED:%s", reason);
errno = 0;
- if (send (g_io_channel_unix_get_fd (client->priv->channel), message, strlen (message), 0) != strlen (message))
+ if (send (g_io_channel_unix_get_fd (priv->channel), message, strlen (message), 0) != strlen (message))
g_printerr ("Failed to send FAILED: %s\n", strerror (errno));
}
void
x_client_send_success (XClient *client)
{
+ XClientPrivate *priv = x_client_get_instance_private (client);
g_autofree gchar *message = g_strdup ("SUCCESS");
errno = 0;
- if (send (g_io_channel_unix_get_fd (client->priv->channel), message, strlen (message), 0) != strlen (message))
+ if (send (g_io_channel_unix_get_fd (priv->channel), message, strlen (message), 0) != strlen (message))
g_printerr ("Failed to send SUCCESS: %s\n", strerror (errno));
}
void
x_client_disconnect (XClient *client)
{
- g_io_channel_shutdown (client->priv->channel, TRUE, NULL);
+ XClientPrivate *priv = x_client_get_instance_private (client);
+ g_io_channel_shutdown (priv->channel, TRUE, NULL);
}
static void
x_client_init (XClient *client)
{
- client->priv = G_TYPE_INSTANCE_GET_PRIVATE (client, x_client_get_type (), XClientPrivate);
}
static void
@@ -97,7 +99,8 @@ XServer *
x_server_new (gint display_number)
{
XServer *server = g_object_new (x_server_get_type (), NULL);
- server->priv->display_number = display_number;
+ XServerPrivate *priv = x_server_get_instance_private (server);
+ priv->display_number = display_number;
return server;
}
@@ -105,19 +108,21 @@ static gboolean
client_read_cb (GIOChannel *channel, GIOCondition condition, gpointer data)
{
XClient *client = data;
+ XClientPrivate *priv = x_client_get_instance_private (client);
g_autofree gchar *d = NULL;
gsize d_length;
if (g_io_channel_read_to_end (channel, &d, &d_length, NULL) == G_IO_STATUS_NORMAL && d_length == 0)
{
- XServer *server = client->priv->server;
+ XServer *server = priv->server;
+ XServerPrivate *s_priv = x_server_get_instance_private (server);
g_signal_emit (client, x_client_signals[X_CLIENT_DISCONNECTED], 0);
g_signal_emit (server, x_server_signals[X_SERVER_CLIENT_DISCONNECTED], 0, client);
- g_hash_table_remove (server->priv->clients, client->priv->channel);
+ g_hash_table_remove (s_priv->clients, priv->channel);
- if (g_hash_table_size (server->priv->clients) == 0)
+ if (g_hash_table_size (s_priv->clients) == 0)
g_signal_emit (server, x_server_signals[X_SERVER_RESET], 0);
return G_SOURCE_REMOVE;
@@ -130,20 +135,22 @@ static gboolean
socket_connect_cb (GIOChannel *channel, GIOCondition condition, gpointer data)
{
XServer *server = data;
+ XServerPrivate *priv = x_server_get_instance_private (server);
g_autoptr(GError) error = NULL;
- g_autoptr(GSocket) data_socket = g_socket_accept (server->priv->socket, NULL, &error);
+ g_autoptr(GSocket) data_socket = g_socket_accept (priv->socket, NULL, &error);
if (error)
g_warning ("Error accepting connection: %s", strerror (errno));
if (!data_socket)
return FALSE;
XClient *client = g_object_new (x_client_get_type (), NULL);
- client->priv->server = server;
- client->priv->socket = g_steal_pointer (&data_socket);
- client->priv->channel = g_io_channel_unix_new (g_socket_get_fd (client->priv->socket));
- g_io_add_watch (client->priv->channel, G_IO_IN | G_IO_HUP, client_read_cb, client);
- g_hash_table_insert (server->priv->clients, client->priv->channel, client);
+ XClientPrivate *c_priv = x_client_get_instance_private (client);
+ c_priv->server = server;
+ c_priv->socket = g_steal_pointer (&data_socket);
+ c_priv->channel = g_io_channel_unix_new (g_socket_get_fd (c_priv->socket));
+ g_io_add_watch (c_priv->channel, G_IO_IN | G_IO_HUP, client_read_cb, client);
+ g_hash_table_insert (priv->clients, c_priv->channel, client);
g_signal_emit (server, x_server_signals[X_SERVER_CLIENT_CONNECTED], 0, client);
@@ -153,20 +160,22 @@ socket_connect_cb (GIOChannel *channel, GIOCondition condition, gpointer data)
gboolean
x_server_start (XServer *server)
{
- g_autofree gchar *name = g_strdup_printf (".x:%d", server->priv->display_number);
- server->priv->socket_path = g_build_filename (g_getenv ("LIGHTDM_TEST_ROOT"), name, NULL);
+ XServerPrivate *priv = x_server_get_instance_private (server);
+
+ g_autofree gchar *name = g_strdup_printf (".x:%d", priv->display_number);
+ priv->socket_path = g_build_filename (g_getenv ("LIGHTDM_TEST_ROOT"), name, NULL);
g_autoptr(GError) error = NULL;
- server->priv->socket = g_socket_new (G_SOCKET_FAMILY_UNIX, G_SOCKET_TYPE_STREAM, G_SOCKET_PROTOCOL_DEFAULT, &error);
- if (!server->priv->socket ||
- !g_socket_bind (server->priv->socket, g_unix_socket_address_new (server->priv->socket_path), TRUE, &error) ||
- !g_socket_listen (server->priv->socket, &error))
+ priv->socket = g_socket_new (G_SOCKET_FAMILY_UNIX, G_SOCKET_TYPE_STREAM, G_SOCKET_PROTOCOL_DEFAULT, &error);
+ if (!priv->socket ||
+ !g_socket_bind (priv->socket, g_unix_socket_address_new (priv->socket_path), TRUE, &error) ||
+ !g_socket_listen (priv->socket, &error))
{
g_warning ("Error creating Unix X socket: %s", error->message);
return FALSE;
}
- server->priv->channel = g_io_channel_unix_new (g_socket_get_fd (server->priv->socket));
- g_io_add_watch (server->priv->channel, G_IO_IN, socket_connect_cb, server);
+ priv->channel = g_io_channel_unix_new (g_socket_get_fd (priv->socket));
+ g_io_add_watch (priv->channel, G_IO_IN, socket_connect_cb, server);
return TRUE;
}
@@ -174,22 +183,25 @@ x_server_start (XServer *server)
gsize
x_server_get_n_clients (XServer *server)
{
- return g_hash_table_size (server->priv->clients);
+ XServerPrivate *priv = x_server_get_instance_private (server);
+ return g_hash_table_size (priv->clients);
}
static void
x_server_init (XServer *server)
{
- server->priv = G_TYPE_INSTANCE_GET_PRIVATE (server, x_server_get_type (), XServerPrivate);
- server->priv->clients = g_hash_table_new_full (g_direct_hash, g_direct_equal, (GDestroyNotify) g_io_channel_unref, g_object_unref);
+ XServerPrivate *priv = x_server_get_instance_private (server);
+ priv->clients = g_hash_table_new_full (g_direct_hash, g_direct_equal, (GDestroyNotify) g_io_channel_unref, g_object_unref);
}
static void
x_server_finalize (GObject *object)
{
- XServer *server = (XServer *) object;
- if (server->priv->socket_path)
- unlink (server->priv->socket_path);
+ XServer *server = X_SERVER (object);
+ XServerPrivate *priv = x_server_get_instance_private (server);
+
+ if (priv->socket_path)
+ unlink (priv->socket_path);
G_OBJECT_CLASS (x_server_parent_class)->finalize (object);
}
diff --git a/tests/src/x-server.h b/tests/src/x-server.h
index 32f00da9..46fcc35a 100644
--- a/tests/src/x-server.h
+++ b/tests/src/x-server.h
@@ -6,18 +6,18 @@
G_BEGIN_DECLS
+#define X_SERVER_TYPE (x_server_get_type())
+#define X_SERVER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), X_SERVER_TYPE, XServer))
+
#define X_CLIENT_SIGNAL_DISCONNECTED "disconnected"
#define X_SERVER_SIGNAL_CLIENT_CONNECTED "client-connected"
#define X_SERVER_SIGNAL_CLIENT_DISCONNECTED "client-disconnected"
#define X_SERVER_SIGNAL_RESET "reset"
-typedef struct XClientPrivate XClientPrivate;
-
typedef struct
{
- GObject parent_instance;
- XClientPrivate *priv;
+ GObject parent_instance;
} XClient;
typedef struct
@@ -26,12 +26,9 @@ typedef struct
void (*disconnected)(XClient *client);
} XClientClass;
-typedef struct XServerPrivate XServerPrivate;
-
typedef struct
{
- GObject parent_instance;
- XServerPrivate *priv;
+ GObject parent_instance;
} XServer;
typedef struct
diff --git a/tests/src/xdmcp-client.c b/tests/src/xdmcp-client.c
index de40702b..49040e05 100644
--- a/tests/src/xdmcp-client.c
+++ b/tests/src/xdmcp-client.c
@@ -29,7 +29,7 @@ typedef enum
XDMCP_Alive = 14
} XDMCPOpcode;
-struct XDMCPClientPrivate
+typedef struct
{
gchar *host;
gint port;
@@ -38,7 +38,7 @@ struct XDMCPClientPrivate
gchar *authorization_name;
gint authorization_data_length;
guint8 *authorization_data;
-};
+} XDMCPClientPrivate;
G_DEFINE_TYPE_WITH_PRIVATE (XDMCPClient, xdmcp_client, G_TYPE_OBJECT)
@@ -56,8 +56,10 @@ static guint xdmcp_client_signals[XDMCP_CLIENT_LAST_SIGNAL] = { 0 };
static void
xdmcp_write (XDMCPClient *client, const guint8 *buffer, gssize buffer_length)
{
+ XDMCPClientPrivate *priv = xdmcp_client_get_instance_private (client);
+
g_autoptr(GError) error = NULL;
- gssize n_written = g_socket_send (client->priv->socket, (const gchar *) buffer, buffer_length, NULL, &error);
+ gssize n_written = g_socket_send (priv->socket, (const gchar *) buffer, buffer_length, NULL, &error);
if (n_written < 0)
g_warning ("Failed to send XDMCP request: %s", error->message);
else if (n_written != buffer_length)
@@ -256,30 +258,34 @@ xdmcp_client_new (void)
void
xdmcp_client_set_hostname (XDMCPClient *client, const gchar *hostname)
{
- g_free (client->priv->host);
- client->priv->host = g_strdup (hostname);
+ XDMCPClientPrivate *priv = xdmcp_client_get_instance_private (client);
+ g_free (priv->host);
+ priv->host = g_strdup (hostname);
}
void
xdmcp_client_set_port (XDMCPClient *client, guint16 port)
{
- client->priv->port = port;
+ XDMCPClientPrivate *priv = xdmcp_client_get_instance_private (client);
+ priv->port = port;
}
gboolean
xdmcp_client_start (XDMCPClient *client)
{
- if (client->priv->socket)
+ XDMCPClientPrivate *priv = xdmcp_client_get_instance_private (client);
+
+ if (priv->socket)
return TRUE;
g_autoptr(GError) error = NULL;
- client->priv->socket = g_socket_new (G_SOCKET_FAMILY_IPV4, G_SOCKET_TYPE_DATAGRAM, G_SOCKET_PROTOCOL_UDP, &error);
+ priv->socket = g_socket_new (G_SOCKET_FAMILY_IPV4, G_SOCKET_TYPE_DATAGRAM, G_SOCKET_PROTOCOL_UDP, &error);
if (error)
g_warning ("Error creating XDMCP socket: %s", error->message);
- if (!client->priv->socket)
+ if (!priv->socket)
return FALSE;
- GSocketConnectable *address = g_network_address_new (client->priv->host, client->priv->port);
+ GSocketConnectable *address = g_network_address_new (priv->host, priv->port);
GSocketAddressEnumerator *enumerator = g_socket_connectable_enumerate (address);
while (TRUE)
{
@@ -290,13 +296,13 @@ xdmcp_client_start (XDMCPClient *client)
if (!socket_address)
return FALSE;
- if (!g_socket_connect (client->priv->socket, socket_address, NULL, &e))
+ if (!g_socket_connect (priv->socket, socket_address, NULL, &e))
{
g_warning ("Unable to connect XDMCP socket: %s", error->message);
continue;
}
- g_io_add_watch (g_io_channel_unix_new (g_socket_get_fd (client->priv->socket)), G_IO_IN, xdmcp_data_cb, client);
+ g_io_add_watch (g_io_channel_unix_new (g_socket_get_fd (priv->socket)), G_IO_IN, xdmcp_data_cb, client);
return TRUE;
}
@@ -305,18 +311,20 @@ xdmcp_client_start (XDMCPClient *client)
GInetAddress *
xdmcp_client_get_local_address (XDMCPClient *client)
{
- if (!client->priv->socket)
+ XDMCPClientPrivate *priv = xdmcp_client_get_instance_private (client);
+
+ if (!priv->socket)
return NULL;
- GSocketAddress *socket_address = g_socket_get_local_address (client->priv->socket, NULL);
+ GSocketAddress *socket_address = g_socket_get_local_address (priv->socket, NULL);
return g_inet_socket_address_get_address (G_INET_SOCKET_ADDRESS (socket_address));
}
static void
xdmcp_client_init (XDMCPClient *client)
{
- client->priv = G_TYPE_INSTANCE_GET_PRIVATE (client, xdmcp_client_get_type (), XDMCPClientPrivate);
- client->priv->port = XDMCP_PORT;
+ XDMCPClientPrivate *priv = xdmcp_client_get_instance_private (client);
+ priv->port = XDMCP_PORT;
}
static void
@@ -458,11 +466,13 @@ xdmcp_client_send_keep_alive (XDMCPClient *client, guint16 display_number, guint
static void
xdmcp_client_finalize (GObject *object)
{
- XDMCPClient *client = (XDMCPClient *) object;
- g_clear_pointer (&client->priv->host, g_free);
- g_clear_object (&client->priv->socket);
- g_clear_pointer (&client->priv->authorization_name, g_free);
- g_clear_pointer (&client->priv->authorization_data, g_free);
+ XDMCPClient *self = XDMCP_CLIENT (object);
+ XDMCPClientPrivate *priv = xdmcp_client_get_instance_private (self);
+
+ g_clear_pointer (&priv->host, g_free);
+ g_clear_object (&priv->socket);
+ g_clear_pointer (&priv->authorization_name, g_free);
+ g_clear_pointer (&priv->authorization_data, g_free);
}
static void
diff --git a/tests/src/xdmcp-client.h b/tests/src/xdmcp-client.h
index 89e97b7b..44f1f387 100644
--- a/tests/src/xdmcp-client.h
+++ b/tests/src/xdmcp-client.h
@@ -4,6 +4,11 @@
#include <glib-object.h>
#include <gio/gio.h>
+G_BEGIN_DECLS
+
+#define XDMCP_CLIENT_TYPE (xdmcp_client_get_type())
+#define XDMCP_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), XDMCP_CLIENT_TYPE, XDMCPClient))
+
#define XDMCP_VERSION 1
#define XDMCP_PORT 177
@@ -58,12 +63,9 @@ typedef struct
guint32 session_id;
} XDMCPAlive;
-typedef struct XDMCPClientPrivate XDMCPClientPrivate;
-
typedef struct
{
- GObject parent_instance;
- XDMCPClientPrivate *priv;
+ GObject parent_instance;
} XDMCPClient;
typedef struct