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);
|
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. */
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
Loading…
Reference in a new issue