From 6a8a8531bad25c148b4c62263d16c0996a21ca6e Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sun, 20 Jan 2008 09:52:10 -0500 Subject: check them startupnotify-provided wmclass against both parts of a window's wm_class hint, as the spec doth say so. --- openbox/startupnotify.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'openbox/startupnotify.c') diff --git a/openbox/startupnotify.c b/openbox/startupnotify.c index 66bce264..8bc38da2 100644 --- a/openbox/startupnotify.c +++ b/openbox/startupnotify.c @@ -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,13 +193,22 @@ 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) { -- cgit v1.2.3 From b77a03a1f22e3e474c1338416ec30681c6216b0d Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sun, 20 Jan 2008 18:34:26 -0500 Subject: only unset the startup_desktop_id once, and dont free the string we pass to putenv --- openbox/startupnotify.c | 7 ------- 1 file changed, 7 deletions(-) (limited to 'openbox/startupnotify.c') diff --git a/openbox/startupnotify.c b/openbox/startupnotify.c index 8bc38da2..78a1e94a 100644 --- a/openbox/startupnotify.c +++ b/openbox/startupnotify.c @@ -58,15 +58,8 @@ static void sn_event_func(SnMonitorEvent *event, gpointer data); void sn_startup(gboolean reconfig) { - gchar *s; - if (reconfig) return; - /* unset this so we don't pass it on unknowingly */ - s = g_strdup("DESKTOP_STARTUP_ID"); - putenv(s); - g_free(s); - sn_display = sn_display_new(ob_display, NULL, NULL); sn_context = sn_monitor_context_new(sn_display, ob_screen, sn_event_func, NULL, NULL); -- cgit v1.2.3 From 1b33ab6c0d9117a84325e1bc01489bde566cda64 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Mon, 21 Jan 2008 22:27:03 -0500 Subject: use the for startup notfication in the execute action. when present don't use the check against the binary. --- openbox/startupnotify.c | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) (limited to 'openbox/startupnotify.c') diff --git a/openbox/startupnotify.c b/openbox/startupnotify.c index 78a1e94a..e9bb8310 100644 --- a/openbox/startupnotify.c +++ b/openbox/startupnotify.c @@ -33,8 +33,9 @@ Time sn_app_started(const gchar *id, const gchar *wmclass, const gchar *name) return CurrentTime; } gboolean sn_get_desktop(gchar *id, guint *desktop) { return FALSE; } -void sn_setup_spawn_environment(gchar *program, gchar *name, - gchar *icon_name, gint desktop) {} +void sn_setup_spawn_environment(const gchar *program, const gchar *name, + const gchar *icon_name, const gchar *wmclass, + gint desktop) {} void sn_spawn_cancel() {} #else @@ -173,10 +174,9 @@ Time sn_app_started(const gchar *id, const gchar *wmclass, const gchar *name) for (it = sn_waits; it; it = g_slist_next(it)) { SnStartupSequence *seq = it->data; gboolean found = FALSE; - const gchar *seqid, *seqclass, *seqname, *seqbin; + const gchar *seqid, *seqclass, *seqbin; seqid = sn_startup_sequence_get_id(seq); seqclass = sn_startup_sequence_get_wmclass(seq); - seqname = sn_startup_sequence_get_name(seq); seqbin = sn_startup_sequence_get_binary_name(seq); if (id && seqid) { @@ -184,24 +184,21 @@ Time sn_app_started(const gchar *id, const gchar *wmclass, const gchar *name) accuracy */ if (!strcmp(seqid, id)) found = TRUE; - } else { - seqclass = sn_startup_sequence_get_wmclass(seq); - seqbin = sn_startup_sequence_get_binary_name(seq); - + } + else if (seqclass) { /* 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, name))) - { - found = TRUE; - } + found = (seqclass && !strcmp(seqclass, wmclass)) || + (seqclass && !strcmp(seqclass, name)); + } + else if (seqbin) { + /* Check the binary name against the class and name hints + as well, to help apps that don't have the class set + correctly */ + found = (seqbin && !g_ascii_strcasecmp(seqbin, wmclass)) || + (seqbin && !g_ascii_strcasecmp(seqbin, name)); } if (found) { @@ -234,8 +231,9 @@ static gboolean sn_launch_wait_timeout(gpointer data) return FALSE; /* don't repeat */ } -void sn_setup_spawn_environment(gchar *program, gchar *name, - gchar *icon_name, gint desktop) +void sn_setup_spawn_environment(const gchar *program, const gchar *name, + const gchar *icon_name, const gchar *wmclass, + gint desktop) { gchar *desc; const char *id; @@ -252,6 +250,7 @@ void sn_setup_spawn_environment(gchar *program, gchar *name, sn_launcher_context_set_icon_name(sn_launcher, icon_name ? icon_name : program); sn_launcher_context_set_binary_name(sn_launcher, program); + if (wmclass) sn_launcher_context_set_wmclass(sn_launcher, wmclass); if (desktop >= 0 && (unsigned) desktop < screen_num_desktops) sn_launcher_context_set_workspace(sn_launcher, (signed) desktop); sn_launcher_context_initiate(sn_launcher, "openbox", program, -- cgit v1.2.3 From a4d13100e67791955eef10876c6784748aff2fed Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sun, 27 Jan 2008 03:48:49 -0500 Subject: use setenv/unsetenv instead of putenv, cuz they are not ugly and confusing wrt memory leaks --- openbox/startupnotify.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'openbox/startupnotify.c') diff --git a/openbox/startupnotify.c b/openbox/startupnotify.c index e9bb8310..e13aa55c 100644 --- a/openbox/startupnotify.c +++ b/openbox/startupnotify.c @@ -21,7 +21,9 @@ #include "gettext.h" #include "event.h" -#include +#ifdef HAVE_STDLIB_H +# include +#endif #ifndef USE_LIBSN @@ -264,7 +266,7 @@ void sn_setup_spawn_environment(const gchar *program, const gchar *name, g_direct_equal, (GDestroyNotify)sn_launcher_context_unref); - putenv(g_strdup_printf("DESKTOP_STARTUP_ID=%s", id)); + setenv("DESKTOP_STARTUP_ID", id, TRUE); g_free(desc); } -- cgit v1.2.3