diff options
Diffstat (limited to 'src/x-server-xmir.c')
-rw-r--r-- | src/x-server-xmir.c | 171 |
1 files changed, 0 insertions, 171 deletions
diff --git a/src/x-server-xmir.c b/src/x-server-xmir.c deleted file mode 100644 index 38cb8656..00000000 --- a/src/x-server-xmir.c +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Copyright (C) 2010-2016 Canonical Ltd. - * - * 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. - */ - -#include <config.h> - -#include "x-server-xmir.h" - -typedef struct -{ - /* Compositor we are running under */ - UnitySystemCompositor *compositor; - - /* TRUE if we are waiting for the compositor to start */ - gboolean waiting_for_compositor; - - /* ID to report to Mir */ - gchar *mir_id; - - /* 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) -{ - XServerXmirPrivate *priv = x_server_xmir_get_instance_private (server); - - if (!priv->waiting_for_compositor) - return; - priv->waiting_for_compositor = FALSE; - - gboolean result = X_SERVER_LOCAL_CLASS (x_server_xmir_parent_class)->start (DISPLAY_SERVER (server)); - if (!result) - display_server_stop (DISPLAY_SERVER (server)); -} - -static void -compositor_stopped_cb (UnitySystemCompositor *compositor, XServerXmir *server) -{ - display_server_stop (DISPLAY_SERVER (server)); -} - -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"); - 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); - - return server; -} - -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 (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 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 (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 (priv->mir_id) - g_string_append_printf (command, " -mir %s", priv->mir_id); - - if (priv->mir_socket) - g_string_append_printf (command, " -mirSocket %s", priv->mir_socket); -} - -static DisplayServer * -x_server_xmir_get_parent (DisplayServer *server) -{ - 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) -{ - 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 (priv->compositor))) - return X_SERVER_LOCAL_CLASS (x_server_xmir_parent_class)->start (display_server); - else - { - if (!priv->waiting_for_compositor) - { - priv->waiting_for_compositor = TRUE; - if (!display_server_start (DISPLAY_SERVER (priv->compositor))) - return FALSE; - } - return TRUE; - } -} - -static void -x_server_xmir_init (XServerXmir *server) -{ -} - -static void -x_server_xmir_finalize (GObject *object) -{ - XServerXmir *self = X_SERVER_XMIR (object); - XServerXmirPrivate *priv = x_server_xmir_get_instance_private (self); - - 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); -} - -static void -x_server_xmir_class_init (XServerXmirClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - DisplayServerClass *display_server_class = DISPLAY_SERVER_CLASS (klass); - XServerLocalClass *x_server_local_class = X_SERVER_LOCAL_CLASS (klass); - - x_server_local_class->add_args = x_server_xmir_add_args; - display_server_class->get_parent = x_server_xmir_get_parent; - display_server_class->get_vt = x_server_xmir_get_vt; - display_server_class->start = x_server_xmir_start; - object_class->finalize = x_server_xmir_finalize; -} |