]> spindle.queued.net Git - midori/commitdiff
Prevent repeated checks for the desktop environment.
authorOri Bernstein <ori@eigenstate.org>
Thu, 27 Dec 2007 01:42:11 +0000 (02:42 +0100)
committerChristian Dywan <christian@twotoasts.de>
Thu, 27 Dec 2007 01:42:11 +0000 (02:42 +0100)
It is sufficient to check the desktop environment only once.
Also don't shadow 'stdin', 'stdout' and 'stderr'.

src/sokoke.c

index 293ce2f6c6918baaf576a3db51416c0a791e654c..944dfa8e54be177b00f509630feb3933d4aa2c0c 100644 (file)
@@ -103,21 +103,28 @@ void sokoke_widget_popup(GtkWidget* widget, GtkMenu* menu
 
 typedef enum
 {
- SOKOKE_DESKTOP_UNKNOWN,
- SOKOKE_DESKTOP_XFCE
+ SOKOKE_DESKTOP_UNTESTED,
+ SOKOKE_DESKTOP_XFCE,
+ SOKOKE_DESKTOP_UNKNOWN
 } SokokeDesktop;
 
 static SokokeDesktop sokoke_get_desktop(void)
 {
-    // Are we running in Xfce?
-    gint result; gchar* stdout; gchar* stderr;
-    gboolean success = g_spawn_command_line_sync(
-     "xprop -root _DT_SAVE_MODE | grep -q xfce4"
-     , &stdout, &stderr, &result, NULL);
-    if(success && !result)
-        return SOKOKE_DESKTOP_XFCE;
-
-    return SOKOKE_DESKTOP_UNKNOWN;
+    static SokokeDesktop desktop = SOKOKE_DESKTOP_UNTESTED;
+    if(G_UNLIKELY(desktop == SOKOKE_DESKTOP_UNTESTED))
+    {
+        // Are we running in Xfce?
+        gint result; gchar* out; gchar* err;
+        gboolean success = g_spawn_command_line_sync(
+         "xprop -root _DT_SAVE_MODE | grep -q xfce4"
+         , &out, &err, &result, NULL);
+        if(success && !result)
+            desktop = SOKOKE_DESKTOP_XFCE;
+        else
+            desktop = SOKOKE_DESKTOP_UNKNOWN;
+    }
+
+    return desktop;
 }
 
 gpointer sokoke_xfce_header_new(const gchar* icon, const gchar* title)