From c2a232bf4562221d66867df1a4e4b72b502327d9 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Tue, 5 Sep 2006 14:44:28 +0000 Subject: [PATCH] get app from border now - no more zillions of params. also use wm command to match SVN revision: 25493 --- src/bin/e_apps.c | 43 +++++++++++++++++++++++++++-------- src/bin/e_apps.h | 2 +- src/bin/e_border.c | 9 +------- src/modules/ibar/e_mod_main.c | 5 +--- 4 files changed, 37 insertions(+), 22 deletions(-) diff --git a/src/bin/e_apps.c b/src/bin/e_apps.c index d38781270..06b6b011c 100644 --- a/src/bin/e_apps.c +++ b/src/bin/e_apps.c @@ -919,31 +919,36 @@ e_app_launch_id_pid_find(int launch_id, pid_t pid) } EAPI E_App * -e_app_window_name_class_title_role_find(const char *name, const char *class, - const char *title, const char *role) +e_app_border_find(E_Border *bd) { Evas_List *l, *l_match = NULL; int ok, match = 0; E_App *a, *a_match = NULL; + char *title; - if ((!name) && (!class) && (!title) && (!role)) + if ((!bd->client.icccm.name) && (!bd->client.icccm.class) && + (!bd->client.icccm.title) && (bd->client.netwm.name) && + (!bd->client.icccm.window_role) && (!bd->client.icccm.command.argv)) return NULL; + title = bd->client.netwm.name; + if (!title) title = bd->client.icccm.title; for (l = _e_apps_list; l; l = l->next) { a = l->data; ok = 0; if ((a->win_name) || (a->win_class) || (a->win_title) || (a->win_role)) { - if ((a->win_name) && (a->win_class) && (name) && (class)) + if ((a->win_name) && (a->win_class) && + (bd->client.icccm.name) && (bd->client.icccm.class)) { - if ((e_util_glob_match(name, a->win_name)) && - (e_util_glob_match(class, a->win_class))) + if ((e_util_glob_match(bd->client.icccm.name, a->win_name)) && + (e_util_glob_match(bd->client.icccm.class, a->win_class))) ok += 2; } - else if ((a->win_class) && (class)) + else if ((a->win_class) && (bd->client.icccm.class)) { - if (e_util_glob_match(class, a->win_class)) + if (e_util_glob_match(bd->client.icccm.class, a->win_class)) ok += 2; } @@ -951,8 +956,28 @@ e_app_window_name_class_title_role_find(const char *name, const char *class, ((a->win_title) && (title) && (e_util_glob_match(title, a->win_title)))) ok++; if (//(!a->win_role) || - ((a->win_role) && (role) && (e_util_glob_match(role, a->win_role)))) + ((a->win_role) && (bd->client.icccm.window_role) && (e_util_glob_match(bd->client.icccm.window_role, a->win_role)))) ok++; + if ( + (a->exe) && (bd->client.icccm.command.argv)) + { + char *ts, *p; + + ts = alloca(strlen(a->exe) + 1); + strcpy(ts, a->exe); + p = ts; + while (*p) + { + if (isspace(*p)) + { + *p = 0; + break; + } + p++; + } + if (!strcmp(a->exe, ts)) + ok++; + } } if (ok > match) { diff --git a/src/bin/e_apps.h b/src/bin/e_apps.h index dc57318b2..12dbca39c 100644 --- a/src/bin/e_apps.h +++ b/src/bin/e_apps.h @@ -117,7 +117,7 @@ EAPI void e_app_change_callback_add (void (*func) (void *da EAPI void e_app_change_callback_del (void (*func) (void *data, E_App *a, E_App_Change ch), void *data); EAPI E_App *e_app_launch_id_pid_find (int launch_id, pid_t pid); -EAPI E_App *e_app_window_name_class_title_role_find (const char *name, const char *class, const char *title, const char *role); +EAPI E_App *e_app_border_find (E_Border *bd); EAPI E_App *e_app_file_find (const char *file); EAPI E_App *e_app_name_find (const char *name); EAPI E_App *e_app_generic_find (const char *generic); diff --git a/src/bin/e_border.c b/src/bin/e_border.c index 192094ea8..1983aad07 100644 --- a/src/bin/e_border.c +++ b/src/bin/e_border.c @@ -2586,14 +2586,7 @@ e_border_icon_add(E_Border *bd, Evas *evas) { if ((bd->client.icccm.name) && (bd->client.icccm.class)) { - char *title = ""; - - if (bd->client.netwm.name) title = bd->client.netwm.name; - else title = bd->client.icccm.title; - a = e_app_window_name_class_title_role_find(bd->client.icccm.name, - bd->client.icccm.class, - title, - bd->client.icccm.window_role); + a = e_app_border_find(bd); } if (!a) { diff --git a/src/modules/ibar/e_mod_main.c b/src/modules/ibar/e_mod_main.c index 2ef4763ab..a41e9158c 100644 --- a/src/modules/ibar/e_mod_main.c +++ b/src/modules/ibar/e_mod_main.c @@ -1219,10 +1219,7 @@ _ibar_inst_cb_drop(void *data, const char *type, void *event_info) if (!app) { - app = e_app_window_name_class_title_role_find(bd->client.icccm.name, - bd->client.icccm.class, - e_border_name_get(bd), - bd->client.icccm.window_role); + app = e_app_border_find(bd); } if (!app) {