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:
parent
2c6240fd2f
commit
6a8a8531ba
3 changed files with 20 additions and 8 deletions
|
@ -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. */
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Reference in a new issue