[gtk+] Implement GInitable in GdkBroadwayDisplayManager
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] Implement GInitable in GdkBroadwayDisplayManager
- Date: Sat, 23 Mar 2013 04:48:17 +0000 (UTC)
commit 832c698776376df044481c5302ee8e536ad7b7f9
Author: Matthias Clasen <mclasen redhat com>
Date: Sat Mar 23 00:47:22 2013 -0400
Implement GInitable in GdkBroadwayDisplayManager
Add GInitable implementation and fail the initialisation if it is not
possible to set up a broadway server.
gdk/broadway/gdkdisplaymanager-broadway.c | 50 +++++++++++++++++++++++++++-
1 files changed, 48 insertions(+), 2 deletions(-)
---
diff --git a/gdk/broadway/gdkdisplaymanager-broadway.c b/gdk/broadway/gdkdisplaymanager-broadway.c
index b445430..0d24975 100644
--- a/gdk/broadway/gdkdisplaymanager-broadway.c
+++ b/gdk/broadway/gdkdisplaymanager-broadway.c
@@ -22,6 +22,7 @@
#include "config.h"
+#include <stdlib.h>
#include "gdkdisplay-broadway.h"
#include "gdkbroadwaydisplaymanager.h"
#include "gdkprivate-broadway.h"
@@ -35,9 +36,53 @@ struct _GdkBroadwayDisplayManager
GdkDisplay *default_display;
GSList *displays;
+
+ gboolean init_failed;
};
-G_DEFINE_TYPE (GdkBroadwayDisplayManager, gdk_broadway_display_manager, GDK_TYPE_DISPLAY_MANAGER)
+static void g_initable_iface_init (GInitableIface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (GdkBroadwayDisplayManager, gdk_broadway_display_manager, GDK_TYPE_DISPLAY_MANAGER,
+ G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, g_initable_iface_init))
+
+static gboolean
+gdk_broadway_display_manager_initable_init (GInitable *initable,
+ GCancellable *cancellable,
+ GError **error)
+{
+ const gchar *display_name;
+ gint port;
+ GdkBroadwayServer *server;
+
+ display_name = g_getenv ("BROADWAY_DISPLAY");
+
+ port = 0;
+ if (display_name != NULL)
+ {
+ if (*display_name == ':')
+ display_name++;
+ port = strtol(display_name, NULL, 10);
+ }
+ if (port == 0)
+ port = 1;
+
+ server = _gdk_broadway_server_new (port, NULL);
+ if (server == NULL)
+ {
+ GDK_BROADWAY_DISPLAY_MANAGER (initable)->init_failed = TRUE;
+ return FALSE;
+ }
+
+ g_object_unref (server);
+
+ return TRUE;
+}
+
+void
+g_initable_iface_init (GInitableIface *iface)
+{
+ iface->init = gdk_broadway_display_manager_initable_init;
+}
static GdkDisplay *
gdk_broadway_display_manager_open_display (GdkDisplayManager *manager,
@@ -94,7 +139,8 @@ gdk_broadway_display_manager_init (GdkBroadwayDisplayManager *manager)
static void
gdk_broadway_display_manager_finalize (GObject *object)
{
- g_error ("A GdkBroadwayDisplayManager object was finalized. This should not happen");
+ if (!GDK_BROADWAY_DISPLAY_MANAGER (object)->init_failed)
+ g_error ("A GdkBroadwayDisplayManager object was finalized. This should not happen");
G_OBJECT_CLASS (gdk_broadway_display_manager_parent_class)->finalize (object);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]