[gtk+] Implement GInitable in GdkX11DisplayManager
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] Implement GInitable in GdkX11DisplayManager
- Date: Sat, 23 Mar 2013 04:48:12 +0000 (UTC)
commit bfcf9e471dc3c45644287eaebfbcae1b03bfd8b1
Author: Matthias Clasen <mclasen redhat com>
Date: Sat Mar 23 00:37:53 2013 -0400
Implement GInitable in GdkX11DisplayManager
Add GInitable implementation and fail the initialisation if it is not
possible to connect to the display server.
gdk/x11/gdkdisplaymanager-x11.c | 37 +++++++++++++++++++++++++++++++++++--
1 files changed, 35 insertions(+), 2 deletions(-)
---
diff --git a/gdk/x11/gdkdisplaymanager-x11.c b/gdk/x11/gdkdisplaymanager-x11.c
index 544036f..44bd177 100644
--- a/gdk/x11/gdkdisplaymanager-x11.c
+++ b/gdk/x11/gdkdisplaymanager-x11.c
@@ -34,6 +34,8 @@ struct _GdkX11DisplayManager
GdkDisplay *default_display;
GSList *displays;
+
+ gboolean init_failed;
};
struct _GdkX11DisplayManagerClass
@@ -41,7 +43,37 @@ struct _GdkX11DisplayManagerClass
GdkDisplayManagerClass parent_class;
};
-G_DEFINE_TYPE (GdkX11DisplayManager, gdk_x11_display_manager, GDK_TYPE_DISPLAY_MANAGER)
+static void g_initable_iface_init (GInitableIface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (GdkX11DisplayManager, gdk_x11_display_manager, GDK_TYPE_DISPLAY_MANAGER,
+ G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, g_initable_iface_init))
+
+static gboolean
+gdk_x11_display_manager_initable_init (GInitable *initable,
+ GCancellable *cancellable,
+ GError **error)
+{
+ Display *display;
+
+ /* check that a connection to the default display is possible */
+ display = XOpenDisplay (gdk_get_display_arg_name ());
+ if (!display)
+ {
+ GDK_X11_DISPLAY_MANAGER (initable)->init_failed = TRUE;
+ return FALSE;
+ }
+
+ XCloseDisplay (display);
+
+ return TRUE;
+}
+
+void
+g_initable_iface_init (GInitableIface *iface)
+{
+ iface->init = gdk_x11_display_manager_initable_init;
+}
+
static GdkDisplay *
gdk_x11_display_manager_open_display (GdkDisplayManager *manager,
@@ -93,7 +125,8 @@ gdk_x11_display_manager_init (GdkX11DisplayManager *manager)
static void
gdk_x11_display_manager_finalize (GObject *object)
{
- g_error ("A GdkX11DisplayManager object was finalized. This should not happen");
+ if (GDK_X11_DISPLAY_MANAGER (object)->init_failed == FALSE)
+ g_error ("A GdkX11DisplayManager object was finalized. This should not happen");
G_OBJECT_CLASS (gdk_x11_display_manager_parent_class)->finalize (object);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]