Updating branch refs/heads/master
         to 779d5848c1a68a21588e348c209ccc7a7d8a9ce1 (commit)
       from 2e6adb27cb88cfde52656706d3ce47949dd57001 (commit)

commit 779d5848c1a68a21588e348c209ccc7a7d8a9ce1
Author: Enrico Tröger <enr...@xfce.org>
Date:   Sun Aug 30 11:59:11 2009 +0200

    Detect Xfce environment without using 'xprop' tool

 src/common.c |   31 +++++++++++++++++++++----------
 1 files changed, 21 insertions(+), 10 deletions(-)

diff --git a/src/common.c b/src/common.c
index a8b3672..096ea43 100644
--- a/src/common.c
+++ b/src/common.c
@@ -24,6 +24,10 @@
 #include <gtk/gtk.h>
 #include <glib/gi18n.h>
 
+#ifdef GDK_WINDOWING_X11
+ #include <gdk/gdkx.h>
+#endif
+
 #include "common.h"
 
 gboolean verbose_mode;
@@ -121,20 +125,27 @@ gboolean gigolo_is_desktop_xfce(void)
 
        if (check)
        {
-               gint result;
-               gchar *out = NULL;
-               gboolean success;
-
-               success = g_spawn_command_line_sync("xprop -root 
_DT_SAVE_MODE", &out, NULL, &result, NULL);
-               if (success && result == 0 && out != NULL && strstr(out, 
"xfce4") != NULL)
+               /* Are we running in Xfce? */
+               GdkDisplay *display = gdk_display_get_default();
+               Display *xdisplay = GDK_DISPLAY_XDISPLAY(display);
+               Window root_window = RootWindow(xdisplay, 0);
+               Atom save_mode_atom = 
gdk_x11_get_xatom_by_name("_DT_SAVE_MODE");
+               Atom actual_type;
+               gint actual_format;
+               gulong n_items, bytes;
+               gchar *value;
+               gint status = XGetWindowProperty(xdisplay, root_window, 
save_mode_atom, 0, (~0L),
+                       False, AnyPropertyType, &actual_type, &actual_format, 
&n_items, &bytes,
+                       (guchar**) &value);
+               if (status == Success)
                {
-                       is_xfce = TRUE;
+                       if (n_items == 6 && !strncmp (value, "xfce4", 6))
+                               is_xfce = TRUE;
+                       XFree(value);
                }
-               g_free(out);
-
                check = FALSE;
        }
-    return is_xfce;
+       return is_xfce;
 }
 
 
_______________________________________________
Xfce4-commits mailing list
Xfce4-commits@xfce.org
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to