X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fstartupnotify.c;h=954b9d4ab1193bc92c9ccc7a7766f00bf1073653;hb=bf247215bb015dbb4dfa39c38bf020aa815cd306;hp=1114d28fefa87c39fa3cda99d2ba85c3e85b11d5;hpb=19b480058e869a588ea20be5e29017ae2052e967;p=chaz%2Fopenbox diff --git a/openbox/startupnotify.c b/openbox/startupnotify.c index 1114d28f..954b9d4a 100644 --- a/openbox/startupnotify.c +++ b/openbox/startupnotify.c @@ -32,7 +32,8 @@ Time sn_app_started(const gchar *id, const gchar *wmclass) return CurrentTime; } gboolean sn_get_desktop(gchar *id, guint *desktop) { return FALSE; } -gchar **sn_get_spawn_environment(char *program, Time time) +gchar **sn_get_spawn_environment(char *program, char *name, + char *icon_name, Time time) { return g_strdupv(environ); } @@ -167,14 +168,35 @@ Time sn_app_started(const gchar *id, const gchar *wmclass) GSList *it; Time t = CurrentTime; + if (!id && !wmclass) + return t; + for (it = sn_waits; it; it = g_slist_next(it)) { SnStartupSequence *seq = it->data; - const gchar *seqid, *seqclass; + gboolean found = FALSE; + const gchar *seqid, *seqclass, *seqname, *seqbin; seqid = sn_startup_sequence_get_id(seq); seqclass = sn_startup_sequence_get_wmclass(seq); - if ((seqid && id && !strcmp(seqid, id)) || - (seqclass && wmclass && !strcmp(seqclass, wmclass))) - { + seqname = sn_startup_sequence_get_name(seq); + seqbin = sn_startup_sequence_get_binary_name(seq); + + if (id && seqid) { + /* if the app has a startup id, then look for that for highest + accuracy */ + if (!strcmp(seqid, id)) + 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)) || + (seqbin && !g_ascii_strcasecmp(seqbin, wmclass)) || + (seqclass && !strcmp(seqclass, wmclass))) + found = TRUE; + } + + if (found) { sn_startup_sequence_complete(seq); t = sn_startup_sequence_get_timestamp(seq); break; @@ -204,7 +226,8 @@ static gboolean sn_launch_wait_timeout(gpointer data) return FALSE; /* don't repeat */ } -gchar **sn_get_spawn_environment(char *program, Time time) +gchar **sn_get_spawn_environment(char *program, char *name, + char *icon_name, Time time) { gchar **env, *desc; guint len; @@ -217,9 +240,9 @@ gchar **sn_get_spawn_environment(char *program, Time time) sn_launcher = sn_launcher_context_new(sn_display, ob_screen); } - sn_launcher_context_set_name(sn_launcher, program); + sn_launcher_context_set_name(sn_launcher, name ? name : program); sn_launcher_context_set_description(sn_launcher, desc); - sn_launcher_context_set_icon_name(sn_launcher, program); + sn_launcher_context_set_icon_name(sn_launcher, icon_name ? icon_name : program); sn_launcher_context_set_binary_name(sn_launcher, program); sn_launcher_context_initiate(sn_launcher, "openbox", program, time); id = sn_launcher_context_get_startup_id(sn_launcher);