summaryrefslogtreecommitdiff
path: root/src/greeter-socket.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/greeter-socket.c')
-rw-r--r--src/greeter-socket.c76
1 files changed, 42 insertions, 34 deletions
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);
}