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);
/* 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. */

View 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,14 +193,23 @@ 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) {
sn_startup_sequence_complete(seq);

View 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 */