check them startupnotify-provided wmclass against both parts of a window's wm_class...
authorDana Jansens <danakj@orodu.net>
Sun, 20 Jan 2008 14:52:10 +0000 (09:52 -0500)
committerDana Jansens <danakj@orodu.net>
Sun, 20 Jan 2008 14:52:10 +0000 (09:52 -0500)
openbox/client.c
openbox/startupnotify.c
openbox/startupnotify.h

index 63245a3..0a0d1ff 100644 (file)
@@ -313,7 +313,7 @@ void client_manage(Window window)
     client_setup_decor_and_functions(self, FALSE);
 
     /* tell startup notification that this app started */
-    launch_time = sn_app_started(self->startup_id, self->class);
+    launch_time = sn_app_started(self->startup_id, self->class, self->name);
 
     /* do this after we have a frame.. it uses the frame to help determine the
        WM_STATE to apply. */
index 66bce26..8bc38da 100644 (file)
@@ -28,7 +28,7 @@
 void sn_startup(gboolean reconfig) {}
 void sn_shutdown(gboolean reconfig) {}
 gboolean sn_app_starting() { return FALSE; }
-Time sn_app_started(const gchar *id, const gchar *wmclass)
+Time sn_app_started(const gchar *id, const gchar *wmclass, const gchar *name)
 {
     return CurrentTime;
 }
@@ -169,7 +169,7 @@ static void sn_event_func(SnMonitorEvent *ev, gpointer data)
         screen_set_root_cursor();
 }
 
-Time sn_app_started(const gchar *id, const gchar *wmclass)
+Time sn_app_started(const gchar *id, const gchar *wmclass, const gchar *name)
 {
     GSList *it;
     Time t = CurrentTime;
@@ -193,13 +193,22 @@ Time sn_app_started(const gchar *id, const gchar *wmclass)
                 found = TRUE;
         } else {
             seqclass = sn_startup_sequence_get_wmclass(seq);
-            seqname = sn_startup_sequence_get_name(seq);
             seqbin = sn_startup_sequence_get_binary_name(seq);
 
-            if ((seqname && !g_ascii_strcasecmp(seqname, wmclass)) ||
+            /* seqclass = "a string to match against the "resource name" or
+               "resource class" hints.  These are WM_CLASS[0] and WM_CLASS[1]"
+               - from the startup-notification spec
+            */
+            if ((seqclass && !strcmp(seqclass, wmclass)) ||
+                (seqclass && !strcmp(seqclass, name)) ||
+                /* Check the binary name against the class and name hints
+                   as well, to help apps that don't have the class set
+                   correctly */
                 (seqbin && !g_ascii_strcasecmp(seqbin, wmclass)) ||
-                (seqclass && !strcmp(seqclass, wmclass)))
+                (seqbin && !g_ascii_strcasecmp(seqbin, name)))
+            {
                 found = TRUE;
+            }
         }
 
         if (found) {
index 7c28fab..d6f2972 100644 (file)
@@ -27,8 +27,11 @@ void sn_shutdown(gboolean reconfig);
 
 gboolean sn_app_starting();
 
-/*! Notify that an app has started */
-Time sn_app_started(const gchar *id, const gchar *wmclass);
+/*! Notify that an app has started
+  @param wmclass the WM_CLASS[1] hint
+  @param name the WM_CLASS[0] hint
+ */
+Time sn_app_started(const gchar *id, const gchar *wmclass, const gchar *name);
 
 /*! Get the desktop requested via the startup-notiication protocol if one
   was requested */