check them startupnotify-provided wmclass against both parts of a window's wm_class hint, as the spec doth say so.

This commit is contained in:
Dana Jansens 2008-01-20 09:52:10 -05:00
parent 2c6240fd2f
commit 6a8a8531ba
3 changed files with 20 additions and 8 deletions

View file

@ -313,7 +313,7 @@ void client_manage(Window window)
client_setup_decor_and_functions(self, FALSE); client_setup_decor_and_functions(self, FALSE);
/* tell startup notification that this app started */ /* 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 /* do this after we have a frame.. it uses the frame to help determine the
WM_STATE to apply. */ WM_STATE to apply. */

View file

@ -28,7 +28,7 @@
void sn_startup(gboolean reconfig) {} void sn_startup(gboolean reconfig) {}
void sn_shutdown(gboolean reconfig) {} void sn_shutdown(gboolean reconfig) {}
gboolean sn_app_starting() { return FALSE; } 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; return CurrentTime;
} }
@ -169,7 +169,7 @@ static void sn_event_func(SnMonitorEvent *ev, gpointer data)
screen_set_root_cursor(); 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; GSList *it;
Time t = CurrentTime; Time t = CurrentTime;
@ -193,13 +193,22 @@ Time sn_app_started(const gchar *id, const gchar *wmclass)
found = TRUE; found = TRUE;
} else { } else {
seqclass = sn_startup_sequence_get_wmclass(seq); seqclass = sn_startup_sequence_get_wmclass(seq);
seqname = sn_startup_sequence_get_name(seq);
seqbin = sn_startup_sequence_get_binary_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)) || (seqbin && !g_ascii_strcasecmp(seqbin, wmclass)) ||
(seqclass && !strcmp(seqclass, wmclass))) (seqbin && !g_ascii_strcasecmp(seqbin, name)))
{
found = TRUE; found = TRUE;
}
} }
if (found) { if (found) {

View file

@ -27,8 +27,11 @@ void sn_shutdown(gboolean reconfig);
gboolean sn_app_starting(); gboolean sn_app_starting();
/*! Notify that an app has started */ /*! Notify that an app has started
Time sn_app_started(const gchar *id, const gchar *wmclass); @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 /*! Get the desktop requested via the startup-notiication protocol if one
was requested */ was requested */