diff --git a/src/bin/e_border.c b/src/bin/e_border.c index 95b6d0aba..a9f56087d 100644 --- a/src/bin/e_border.c +++ b/src/bin/e_border.c @@ -6520,12 +6520,17 @@ _e_border_eval(E_Border *bd) bd->icon_object = NULL; } if (!bd->desktop) - bd->desktop = efreet_util_desktop_wm_class_find(bd->client.icccm.name, - bd->client.icccm.class); + { + bd->desktop = efreet_util_desktop_wm_class_find(bd->client.icccm.name, + bd->client.icccm.class); + if (bd->desktop) efreet_desktop_ref(bd->desktop); + } if (!bd->desktop) - bd->desktop = e_exec_startup_id_pid_find(bd->client.netwm.startup_id, - bd->client.netwm.pid); - if (bd->desktop) efreet_desktop_ref(bd->desktop); + { + bd->desktop = e_exec_startup_id_pid_find(bd->client.netwm.startup_id, + bd->client.netwm.pid); + if (bd->desktop) efreet_desktop_ref(bd->desktop); + } bd->icon_object = e_border_icon_add(bd, bd->bg_evas); if ((bd->focused) && (bd->icon_object)) edje_object_signal_emit(bd->icon_object, "e,state,focused", "e"); diff --git a/src/bin/e_exec.c b/src/bin/e_exec.c index 920b096a2..fa55271ef 100644 --- a/src/bin/e_exec.c +++ b/src/bin/e_exec.c @@ -240,6 +240,7 @@ _e_exec_cb_exec(void *data, Efreet_Desktop *desktop, char *exec, int remaining) { Evas_List *l; + efreet_desktop_ref(desktop); inst->desktop = desktop; inst->exe = exe; inst->startup_id = startup_id; @@ -340,6 +341,7 @@ _e_exec_cb_exit(void *data, int type, void *event) } e_exec_start_pending = evas_list_remove(e_exec_start_pending, inst->desktop); if (inst->expire_timer) ecore_timer_del(inst->expire_timer); + if (inst->desktop) efreet_desktop_free(inst->desktop); free(inst); return 1; }