forked from enlightenment/enlightenment
use startup notify... see ibar in default.
SVN revision: 16708
This commit is contained in:
parent
ce45d0f7c5
commit
07f6885df7
|
@ -269,10 +269,24 @@ group {
|
||||||
// item: "item_list" "item item2 item3";
|
// item: "item_list" "item item2 item3";
|
||||||
}
|
}
|
||||||
parts {
|
parts {
|
||||||
|
part {
|
||||||
|
name: "item_clip";
|
||||||
|
type: RECT;
|
||||||
|
mouse_events: 0;
|
||||||
|
description {
|
||||||
|
state: "default" 0.0;
|
||||||
|
color: 255 255 255 255;
|
||||||
|
}
|
||||||
|
description {
|
||||||
|
state: "faded" 0.0;
|
||||||
|
color: 255 255 255 64;
|
||||||
|
}
|
||||||
|
}
|
||||||
part {
|
part {
|
||||||
name: "item";
|
name: "item";
|
||||||
type: SWALLOW;
|
type: SWALLOW;
|
||||||
mouse_events: 0;
|
mouse_events: 0;
|
||||||
|
clip_to: "item_clip";
|
||||||
description {
|
description {
|
||||||
state: "default" 0.0;
|
state: "default" 0.0;
|
||||||
rel1 {
|
rel1 {
|
||||||
|
@ -287,6 +301,32 @@ group {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
programs {
|
||||||
|
program {
|
||||||
|
name: "exec_start";
|
||||||
|
signal: "start";
|
||||||
|
source: "";
|
||||||
|
action: STATE_SET "faded" 0.0;
|
||||||
|
transition: LINEAR 0.5;
|
||||||
|
target: "item_clip";
|
||||||
|
}
|
||||||
|
program {
|
||||||
|
name: "exec_exec";
|
||||||
|
signal: "exec";
|
||||||
|
source: "";
|
||||||
|
action: STATE_SET "faded" 0.0;
|
||||||
|
transition: LINEAR 0.5;
|
||||||
|
target: "item_clip";
|
||||||
|
after: "exec_stop";
|
||||||
|
}
|
||||||
|
program {
|
||||||
|
name: "exec_stop";
|
||||||
|
signal: "stop";
|
||||||
|
source: "";
|
||||||
|
action: STATE_SET "default" 0.0;
|
||||||
|
target: "item_clip";
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
group {
|
group {
|
||||||
|
@ -302,11 +342,9 @@ group {
|
||||||
description {
|
description {
|
||||||
state: "default" 0.0;
|
state: "default" 0.0;
|
||||||
rel1 {
|
rel1 {
|
||||||
relative: 0.0 0.0;
|
|
||||||
offset: 4 4;
|
offset: 4 4;
|
||||||
}
|
}
|
||||||
rel2 {
|
rel2 {
|
||||||
relative: 1.0 1.0;
|
|
||||||
offset: -5 -5;
|
offset: -5 -5;
|
||||||
}
|
}
|
||||||
color: 255 255 255 0;
|
color: 255 255 255 0;
|
||||||
|
@ -320,13 +358,9 @@ group {
|
||||||
state: "default" 0.0;
|
state: "default" 0.0;
|
||||||
visible: 0;
|
visible: 0;
|
||||||
rel1 {
|
rel1 {
|
||||||
relative: 0.0 0.0;
|
|
||||||
offset: 0 0;
|
|
||||||
to: "base";
|
to: "base";
|
||||||
}
|
}
|
||||||
rel2 {
|
rel2 {
|
||||||
relative: 1.0 1.0;
|
|
||||||
offset: -1 -1;
|
|
||||||
to: "base";
|
to: "base";
|
||||||
}
|
}
|
||||||
color: 255 255 255 0;
|
color: 255 255 255 0;
|
||||||
|
@ -335,13 +369,9 @@ group {
|
||||||
state: "visible" 0.0;
|
state: "visible" 0.0;
|
||||||
visible: 1;
|
visible: 1;
|
||||||
rel1 {
|
rel1 {
|
||||||
relative: 0.0 0.0;
|
|
||||||
offset: 0 0;
|
|
||||||
to: "base";
|
to: "base";
|
||||||
}
|
}
|
||||||
rel2 {
|
rel2 {
|
||||||
relative: 1.0 1.0;
|
|
||||||
offset: -1 -1;
|
|
||||||
to: "base";
|
to: "base";
|
||||||
}
|
}
|
||||||
color: 255 255 255 255;
|
color: 255 255 255 255;
|
||||||
|
@ -351,12 +381,23 @@ group {
|
||||||
visible: 1;
|
visible: 1;
|
||||||
rel1 {
|
rel1 {
|
||||||
relative: -0.5 -0.5;
|
relative: -0.5 -0.5;
|
||||||
offset: 0 0;
|
|
||||||
to: "base";
|
to: "base";
|
||||||
}
|
}
|
||||||
rel2 {
|
rel2 {
|
||||||
relative: 1.5 1.5;
|
relative: 1.5 1.5;
|
||||||
offset: -1 -1;
|
to: "base";
|
||||||
|
}
|
||||||
|
color: 255 255 255 0;
|
||||||
|
}
|
||||||
|
description {
|
||||||
|
state: "huge" 0.0;
|
||||||
|
visible: 1;
|
||||||
|
rel1 {
|
||||||
|
relative: -2.0 -2.0;
|
||||||
|
to: "base";
|
||||||
|
}
|
||||||
|
rel2 {
|
||||||
|
relative: 3.0 3.0;
|
||||||
to: "base";
|
to: "base";
|
||||||
}
|
}
|
||||||
color: 255 255 255 0;
|
color: 255 255 255 0;
|
||||||
|
@ -370,13 +411,9 @@ group {
|
||||||
description {
|
description {
|
||||||
state: "default" 0.0;
|
state: "default" 0.0;
|
||||||
rel1 {
|
rel1 {
|
||||||
relative: 0.0 0.0;
|
|
||||||
offset: 0 0;
|
|
||||||
to: "background";
|
to: "background";
|
||||||
}
|
}
|
||||||
rel2 {
|
rel2 {
|
||||||
relative: 1.0 1.0;
|
|
||||||
offset: -1 -1;
|
|
||||||
to: "background";
|
to: "background";
|
||||||
}
|
}
|
||||||
color: 0 0 0 0;
|
color: 0 0 0 0;
|
||||||
|
@ -417,6 +454,43 @@ group {
|
||||||
action: STATE_SET "default" 0.0;
|
action: STATE_SET "default" 0.0;
|
||||||
target: "background";
|
target: "background";
|
||||||
}
|
}
|
||||||
|
program {
|
||||||
|
name: "go_big";
|
||||||
|
action: STATE_SET "visible" 0.0;
|
||||||
|
target: "background";
|
||||||
|
after: "go_big2";
|
||||||
|
}
|
||||||
|
program {
|
||||||
|
name: "go_big2";
|
||||||
|
action: STATE_SET "huge" 0.0;
|
||||||
|
transition: LINEAR 0.5;
|
||||||
|
target: "background";
|
||||||
|
}
|
||||||
|
program {
|
||||||
|
name: "exec_start";
|
||||||
|
signal: "start";
|
||||||
|
source: "";
|
||||||
|
action: ACTION_STOP;
|
||||||
|
target: "go_active";
|
||||||
|
target: "go_active2";
|
||||||
|
target: "go_passive";
|
||||||
|
target: "go_passive2";
|
||||||
|
target: "go_big";
|
||||||
|
target: "go_big2";
|
||||||
|
after: "go_big";
|
||||||
|
}
|
||||||
|
program {
|
||||||
|
name: "exec_exec";
|
||||||
|
signal: "exec";
|
||||||
|
source: "";
|
||||||
|
after: "exec_start";
|
||||||
|
}
|
||||||
|
program {
|
||||||
|
name: "exec_stop";
|
||||||
|
signal: "stop";
|
||||||
|
source: "";
|
||||||
|
// action: SIGNAL_EMIT "active" 0.0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
138
src/bin/e_apps.c
138
src/bin/e_apps.c
|
@ -42,6 +42,8 @@ static void _e_app_subdir_rescan (E_App *app);
|
||||||
static int _e_app_is_eapp (const char *path);
|
static int _e_app_is_eapp (const char *path);
|
||||||
static int _e_app_copy (E_App *dst, E_App *src);
|
static int _e_app_copy (E_App *dst, E_App *src);
|
||||||
static void _e_app_save_order (E_App *app);
|
static void _e_app_save_order (E_App *app);
|
||||||
|
static int _e_app_cb_event_border_add(void *data, int type, void *event);
|
||||||
|
static int _e_app_cb_expire_timer (void *data);
|
||||||
|
|
||||||
/* local subsystem globals */
|
/* local subsystem globals */
|
||||||
static Evas_Hash *_e_apps = NULL;
|
static Evas_Hash *_e_apps = NULL;
|
||||||
|
@ -50,10 +52,12 @@ static int _e_apps_callbacks_walking = 0;
|
||||||
static int _e_apps_callbacks_delete_me = 0;
|
static int _e_apps_callbacks_delete_me = 0;
|
||||||
static Evas_List *_e_apps_change_callbacks = NULL;
|
static Evas_List *_e_apps_change_callbacks = NULL;
|
||||||
static Ecore_Event_Handler *_e_apps_exit_handler = NULL;
|
static Ecore_Event_Handler *_e_apps_exit_handler = NULL;
|
||||||
|
static Ecore_Event_Handler *_e_apps_border_add_handler = NULL;
|
||||||
static Evas_List *_e_apps_repositories = NULL;
|
static Evas_List *_e_apps_repositories = NULL;
|
||||||
static E_App *_e_apps_all = NULL;
|
static E_App *_e_apps_all = NULL;
|
||||||
static char *_e_apps_path_all = NULL;
|
static char *_e_apps_path_all = NULL;
|
||||||
static char *_e_apps_path_trash = NULL;
|
static char *_e_apps_path_trash = NULL;
|
||||||
|
static Evas_List *_e_apps_start_pending = NULL;
|
||||||
|
|
||||||
/* externally accessible functions */
|
/* externally accessible functions */
|
||||||
int
|
int
|
||||||
|
@ -70,6 +74,7 @@ e_app_init(void)
|
||||||
free(home);
|
free(home);
|
||||||
_e_apps_repositories = evas_list_append(_e_apps_repositories, strdup(buf));
|
_e_apps_repositories = evas_list_append(_e_apps_repositories, strdup(buf));
|
||||||
_e_apps_exit_handler = ecore_event_handler_add(ECORE_EVENT_EXE_EXIT, _e_apps_cb_exit, NULL);
|
_e_apps_exit_handler = ecore_event_handler_add(ECORE_EVENT_EXE_EXIT, _e_apps_cb_exit, NULL);
|
||||||
|
_e_apps_border_add_handler = ecore_event_handler_add(E_EVENT_BORDER_ADD, _e_app_cb_event_border_add, NULL);
|
||||||
_e_apps_all = e_app_new(buf, 1);
|
_e_apps_all = e_app_new(buf, 1);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -77,6 +82,7 @@ e_app_init(void)
|
||||||
int
|
int
|
||||||
e_app_shutdown(void)
|
e_app_shutdown(void)
|
||||||
{
|
{
|
||||||
|
_e_apps_start_pending = evas_list_free(_e_apps_start_pending);
|
||||||
if (_e_apps_all)
|
if (_e_apps_all)
|
||||||
{
|
{
|
||||||
e_object_unref(E_OBJECT(_e_apps_all));
|
e_object_unref(E_OBJECT(_e_apps_all));
|
||||||
|
@ -92,6 +98,11 @@ e_app_shutdown(void)
|
||||||
ecore_event_handler_del(_e_apps_exit_handler);
|
ecore_event_handler_del(_e_apps_exit_handler);
|
||||||
_e_apps_exit_handler = NULL;
|
_e_apps_exit_handler = NULL;
|
||||||
}
|
}
|
||||||
|
if (_e_apps_border_add_handler)
|
||||||
|
{
|
||||||
|
ecore_event_handler_del(_e_apps_border_add_handler);
|
||||||
|
_e_apps_border_add_handler = NULL;
|
||||||
|
}
|
||||||
free(_e_apps_path_trash);
|
free(_e_apps_path_trash);
|
||||||
free(_e_apps_path_all);
|
free(_e_apps_path_all);
|
||||||
{
|
{
|
||||||
|
@ -255,9 +266,10 @@ e_app_subdir_scan(E_App *a, int scan_subdirs)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
e_app_exec(E_App *a)
|
e_app_exec(E_App *a, int launch_id)
|
||||||
{
|
{
|
||||||
Ecore_Exe *exe;
|
Ecore_Exe *exe;
|
||||||
|
E_App_Instance *inst;
|
||||||
|
|
||||||
E_OBJECT_CHECK_RETURN(a, 0);
|
E_OBJECT_CHECK_RETURN(a, 0);
|
||||||
E_OBJECT_TYPE_CHECK_RETURN(a, E_APP_TYPE, 0);
|
E_OBJECT_TYPE_CHECK_RETURN(a, E_APP_TYPE, 0);
|
||||||
|
@ -275,10 +287,17 @@ e_app_exec(E_App *a)
|
||||||
a->exe);
|
a->exe);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
a->instances = evas_list_append(a->instances, exe);
|
inst = calloc(1, sizeof(E_App_Instance));
|
||||||
|
inst->app = a;
|
||||||
|
inst->exe = exe;
|
||||||
|
inst->launch_id = launch_id;
|
||||||
|
inst->launch_time = ecore_time_get();
|
||||||
|
inst->expire_timer = ecore_timer_add(10.0, _e_app_cb_expire_timer, inst);
|
||||||
|
a->instances = evas_list_append(a->instances, inst);
|
||||||
e_object_ref(E_OBJECT(a));
|
e_object_ref(E_OBJECT(a));
|
||||||
if (a->startup_notify) a->starting = 1;
|
if (a->startup_notify) a->starting = 1;
|
||||||
_e_app_change(a, E_APP_EXEC);
|
_e_app_change(a, E_APP_EXEC);
|
||||||
|
_e_apps_start_pending = evas_list_append(_e_apps_start_pending, a);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -672,14 +691,26 @@ e_app_exe_find(char *exe)
|
||||||
static void
|
static void
|
||||||
_e_app_free(E_App *a)
|
_e_app_free(E_App *a)
|
||||||
{
|
{
|
||||||
|
while (evas_list_find(_e_apps_start_pending, a))
|
||||||
|
_e_apps_start_pending = evas_list_remove(_e_apps_start_pending, a);
|
||||||
if (a->orig)
|
if (a->orig)
|
||||||
{
|
{
|
||||||
while (a->instances)
|
while (a->instances)
|
||||||
{
|
{
|
||||||
Ecore_Exe *exe;
|
E_App_Instance *inst;
|
||||||
|
|
||||||
exe = a->instances->data;
|
inst = a->instances->data;
|
||||||
ecore_exe_free(exe);
|
if (inst->expire_timer)
|
||||||
|
{
|
||||||
|
ecore_timer_del(inst->expire_timer);
|
||||||
|
inst->expire_timer = NULL;
|
||||||
|
}
|
||||||
|
if (inst->exe)
|
||||||
|
{
|
||||||
|
ecore_exe_free(inst->exe);
|
||||||
|
inst->exe = NULL;
|
||||||
|
}
|
||||||
|
free(inst);
|
||||||
a->instances = evas_list_remove_list(a->instances, a->instances);
|
a->instances = evas_list_remove_list(a->instances, a->instances);
|
||||||
}
|
}
|
||||||
/* If this is a copy, it shouldn't have any references! */
|
/* If this is a copy, it shouldn't have any references! */
|
||||||
|
@ -695,10 +726,20 @@ _e_app_free(E_App *a)
|
||||||
{
|
{
|
||||||
while (a->instances)
|
while (a->instances)
|
||||||
{
|
{
|
||||||
Ecore_Exe *exe;
|
E_App_Instance *inst;
|
||||||
|
|
||||||
exe = a->instances->data;
|
inst = a->instances->data;
|
||||||
ecore_exe_free(exe);
|
if (inst->expire_timer)
|
||||||
|
{
|
||||||
|
ecore_timer_del(inst->expire_timer);
|
||||||
|
inst->expire_timer = NULL;
|
||||||
|
}
|
||||||
|
if (inst->exe)
|
||||||
|
{
|
||||||
|
ecore_exe_free(inst->exe);
|
||||||
|
inst->exe = NULL;
|
||||||
|
}
|
||||||
|
free(inst);
|
||||||
a->instances = evas_list_remove_list(a->instances, a->instances);
|
a->instances = evas_list_remove_list(a->instances, a->instances);
|
||||||
}
|
}
|
||||||
while (a->subapps)
|
while (a->subapps)
|
||||||
|
@ -1024,6 +1065,8 @@ _e_apps_cb_exit(void *data, int type, void *event)
|
||||||
a = ecore_exe_data_get(ev->exe);
|
a = ecore_exe_data_get(ev->exe);
|
||||||
if (a)
|
if (a)
|
||||||
{
|
{
|
||||||
|
Evas_List *l;
|
||||||
|
|
||||||
if (ev->exit_code == 127) /* /bin/sh uses this if cmd not found */
|
if (ev->exit_code == 127) /* /bin/sh uses this if cmd not found */
|
||||||
e_error_dialog_show(_("Run Error"),
|
e_error_dialog_show(_("Run Error"),
|
||||||
_("Enlightenment was unable run the program:\n"
|
_("Enlightenment was unable run the program:\n"
|
||||||
|
@ -1031,8 +1074,25 @@ _e_apps_cb_exit(void *data, int type, void *event)
|
||||||
"%s\n"
|
"%s\n"
|
||||||
"\n"
|
"\n"
|
||||||
"The command was not found\n"),
|
"The command was not found\n"),
|
||||||
a->exe);
|
a->exe);
|
||||||
a->instances = evas_list_remove(a->instances, ev->exe);
|
for (l = a->instances; l; l = l->next)
|
||||||
|
{
|
||||||
|
E_App_Instance *inst;
|
||||||
|
|
||||||
|
inst = l->data;
|
||||||
|
if (ev->exe == inst->exe)
|
||||||
|
{
|
||||||
|
if (inst->expire_timer)
|
||||||
|
{
|
||||||
|
ecore_timer_del(inst->expire_timer);
|
||||||
|
inst->expire_timer = NULL;
|
||||||
|
}
|
||||||
|
inst->exe = NULL;
|
||||||
|
a->instances = evas_list_remove_list(a->instances, l);
|
||||||
|
free(inst);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
_e_app_change(a, E_APP_EXIT);
|
_e_app_change(a, E_APP_EXIT);
|
||||||
e_object_unref(E_OBJECT(a));
|
e_object_unref(E_OBJECT(a));
|
||||||
}
|
}
|
||||||
|
@ -1361,3 +1421,61 @@ _e_app_save_order(E_App *app)
|
||||||
}
|
}
|
||||||
fclose(f);
|
fclose(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
_e_app_cb_event_border_add(void *data, int type, void *event)
|
||||||
|
{
|
||||||
|
E_Event_Border_Add *ev;
|
||||||
|
Evas_List *l, *ll, *removes = NULL;
|
||||||
|
E_App *a;
|
||||||
|
E_App_Instance *inst;
|
||||||
|
|
||||||
|
ev = event;
|
||||||
|
printf("BD ADD %i\n", ev->border->client.netwm.e_start_launch_id);
|
||||||
|
if (ev->border->client.netwm.e_start_launch_id <= 0) return 1;
|
||||||
|
for (l = _e_apps_start_pending; l; l = l->next)
|
||||||
|
{
|
||||||
|
a = l->data;
|
||||||
|
for (ll = a->instances; ll; ll = ll->next)
|
||||||
|
{
|
||||||
|
inst = ll->data;
|
||||||
|
printf("%i == %i\n", inst->launch_id, ev->border->client.netwm.e_start_launch_id);
|
||||||
|
if (inst->launch_id == ev->border->client.netwm.e_start_launch_id)
|
||||||
|
{
|
||||||
|
if (inst->expire_timer)
|
||||||
|
{
|
||||||
|
ecore_timer_del(inst->expire_timer);
|
||||||
|
inst->expire_timer = NULL;
|
||||||
|
}
|
||||||
|
removes = evas_list_append(removes, a);
|
||||||
|
e_object_ref(E_OBJECT(a));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (removes)
|
||||||
|
{
|
||||||
|
a = removes->data;
|
||||||
|
printf("APP [%s] popped up!\n", a->exe);
|
||||||
|
_e_app_change(a, E_APP_READY);
|
||||||
|
_e_apps_start_pending = evas_list_remove(_e_apps_start_pending, a);
|
||||||
|
removes = evas_list_remove_list(removes, removes);
|
||||||
|
e_object_unref(E_OBJECT(a));
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
_e_app_cb_expire_timer(void *data)
|
||||||
|
{
|
||||||
|
E_App_Instance *inst;
|
||||||
|
E_App *a;
|
||||||
|
|
||||||
|
inst = data;
|
||||||
|
a = inst->app;
|
||||||
|
printf("APP [%s] expired!\n", a->exe);
|
||||||
|
_e_apps_start_pending = evas_list_remove(_e_apps_start_pending, a);
|
||||||
|
inst->expire_timer = NULL;
|
||||||
|
_e_app_change(a, E_APP_READY_EXPIRE);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
|
@ -11,10 +11,12 @@ typedef enum _E_App_Change
|
||||||
E_APP_ORDER,
|
E_APP_ORDER,
|
||||||
E_APP_EXEC,
|
E_APP_EXEC,
|
||||||
E_APP_READY,
|
E_APP_READY,
|
||||||
E_APP_EXIT
|
E_APP_EXIT,
|
||||||
|
E_APP_READY_EXPIRE
|
||||||
} E_App_Change;
|
} E_App_Change;
|
||||||
|
|
||||||
typedef struct _E_App E_App;
|
typedef struct _E_App E_App;
|
||||||
|
typedef struct _E_App_Instance E_App_Instance;
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#ifndef E_APPS_H
|
#ifndef E_APPS_H
|
||||||
|
@ -61,13 +63,22 @@ struct _E_App
|
||||||
unsigned char deleted : 1; /* this app's file is deleted from disk */
|
unsigned char deleted : 1; /* this app's file is deleted from disk */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct _E_App_Instance
|
||||||
|
{
|
||||||
|
E_App *app;
|
||||||
|
Ecore_Exe *exe;
|
||||||
|
int launch_id;
|
||||||
|
double launch_time;
|
||||||
|
Ecore_Timer *expire_timer;
|
||||||
|
};
|
||||||
|
|
||||||
EAPI int e_app_init(void);
|
EAPI int e_app_init(void);
|
||||||
EAPI int e_app_shutdown(void);
|
EAPI int e_app_shutdown(void);
|
||||||
|
|
||||||
EAPI E_App *e_app_new(const char *path, int scan_subdirs);
|
EAPI E_App *e_app_new(const char *path, int scan_subdirs);
|
||||||
EAPI int e_app_is_parent(E_App *parent, E_App *app);
|
EAPI int e_app_is_parent(E_App *parent, E_App *app);
|
||||||
EAPI void e_app_subdir_scan(E_App *a, int scan_subdirs);
|
EAPI void e_app_subdir_scan(E_App *a, int scan_subdirs);
|
||||||
EAPI int e_app_exec(E_App *a);
|
EAPI int e_app_exec(E_App *a, int launch_id);
|
||||||
EAPI int e_app_starting_get(E_App *a);
|
EAPI int e_app_starting_get(E_App *a);
|
||||||
EAPI int e_app_running_get(E_App *a);
|
EAPI int e_app_running_get(E_App *a);
|
||||||
EAPI void e_app_prepend_relative(E_App *add, E_App *before);
|
EAPI void e_app_prepend_relative(E_App *add, E_App *before);
|
||||||
|
|
|
@ -243,6 +243,8 @@ struct _E_Border
|
||||||
|
|
||||||
Ecore_X_Window_Type type;
|
Ecore_X_Window_Type type;
|
||||||
|
|
||||||
|
int e_start_launch_id;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
unsigned char name : 1;
|
unsigned char name : 1;
|
||||||
unsigned char icon_name : 1;
|
unsigned char icon_name : 1;
|
||||||
|
|
|
@ -395,6 +395,24 @@ e_hints_window_init(E_Border *bd)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
{
|
||||||
|
char *str = NULL;
|
||||||
|
|
||||||
|
if (
|
||||||
|
(ecore_x_netwm_startup_id_get(bd->client.win, &str) && (str)) ||
|
||||||
|
((bd->client.icccm.client_leader > 0) && ecore_x_netwm_startup_id_get(bd->client.icccm.client_leader, &str) && (str))
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (!strncmp(str, "E_START|", 8))
|
||||||
|
{
|
||||||
|
int id;
|
||||||
|
|
||||||
|
id = atoi(str + 8);
|
||||||
|
if (id > 0) bd->client.netwm.e_start_launch_id = id;
|
||||||
|
}
|
||||||
|
free(str);
|
||||||
|
}
|
||||||
|
}
|
||||||
/* It's ok not to have fetch flag, should only be set on startup
|
/* It's ok not to have fetch flag, should only be set on startup
|
||||||
* and not changed. */
|
* and not changed. */
|
||||||
if (!ecore_x_netwm_pid_get(bd->client.win, &bd->client.netwm.pid))
|
if (!ecore_x_netwm_pid_get(bd->client.win, &bd->client.netwm.pid))
|
||||||
|
|
|
@ -424,13 +424,6 @@ main(int argc, char **argv)
|
||||||
e_font_apply();
|
e_font_apply();
|
||||||
e_canvas_recache();
|
e_canvas_recache();
|
||||||
|
|
||||||
/* init app system */
|
|
||||||
if (!e_app_init())
|
|
||||||
{
|
|
||||||
e_error_message_show(_("Enlightenment cannot set up its app system."));
|
|
||||||
_e_main_shutdown(-1);
|
|
||||||
}
|
|
||||||
_e_main_shutdown_push(e_app_shutdown);
|
|
||||||
/* init theme system */
|
/* init theme system */
|
||||||
if (!e_theme_init())
|
if (!e_theme_init())
|
||||||
{
|
{
|
||||||
|
@ -456,6 +449,13 @@ main(int argc, char **argv)
|
||||||
"failed. Perhaps another window manager is running?\n"));
|
"failed. Perhaps another window manager is running?\n"));
|
||||||
_e_main_shutdown(-1);
|
_e_main_shutdown(-1);
|
||||||
}
|
}
|
||||||
|
/* init app system */
|
||||||
|
if (!e_app_init())
|
||||||
|
{
|
||||||
|
e_error_message_show(_("Enlightenment cannot set up its app system."));
|
||||||
|
_e_main_shutdown(-1);
|
||||||
|
}
|
||||||
|
_e_main_shutdown_push(e_app_shutdown);
|
||||||
/* do remember stuff */
|
/* do remember stuff */
|
||||||
if (!e_remember_init())
|
if (!e_remember_init())
|
||||||
{
|
{
|
||||||
|
|
|
@ -64,7 +64,7 @@ _e_startup(void)
|
||||||
e_init_done();
|
e_init_done();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
e_app_exec(a);
|
e_app_exec(a, 0);
|
||||||
snprintf(buf, sizeof(buf), _("Starting %s"), a->name);
|
snprintf(buf, sizeof(buf), _("Starting %s"), a->name);
|
||||||
e_init_status_set((const char *)buf);
|
e_init_status_set((const char *)buf);
|
||||||
e_init_icons_app_add(a);
|
e_init_icons_app_add(a);
|
||||||
|
|
|
@ -585,10 +585,12 @@ e_zone_app_exec(E_Zone *zone, E_App *a)
|
||||||
e_util_env_set("LD_PRELOAD_PATH", buf);
|
e_util_env_set("LD_PRELOAD_PATH", buf);
|
||||||
snprintf(buf, sizeof(buf), "%s/enlightenment/preload/e_hack.so", e_prefix_lib_get());
|
snprintf(buf, sizeof(buf), "%s/enlightenment/preload/e_hack.so", e_prefix_lib_get());
|
||||||
*/
|
*/
|
||||||
launch_id++;
|
snprintf(buf, sizeof(buf), "E_START|%i", launch_id);
|
||||||
|
e_util_env_set("DESKTOP_STARTUP_ID", buf);
|
||||||
if (launch_id == 0) launch_id = 1;
|
if (launch_id == 0) launch_id = 1;
|
||||||
/* execute */
|
/* execute */
|
||||||
if (!e_app_exec(a)) launch_id = 0;
|
if (!e_app_exec(a, launch_id)) launch_id = 0;
|
||||||
|
launch_id++;
|
||||||
|
|
||||||
/* reset env vars */
|
/* reset env vars */
|
||||||
if (penv_display)
|
if (penv_display)
|
||||||
|
|
|
@ -406,10 +406,56 @@ _ibar_app_change(void *data, E_App *a, E_App_Change ch)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case E_APP_EXEC:
|
case E_APP_EXEC:
|
||||||
|
if (e_app_is_parent(ib->apps, a))
|
||||||
|
{
|
||||||
|
IBar_Icon *ic;
|
||||||
|
|
||||||
|
ic = _ibar_icon_find(ibb, a);
|
||||||
|
if (ic)
|
||||||
|
{
|
||||||
|
Evas_List *l;
|
||||||
|
|
||||||
|
if (a->startup_notify)
|
||||||
|
{
|
||||||
|
edje_object_signal_emit(ic->icon_object, "start", "");
|
||||||
|
for (ll = ic->extra_icons; ll; ll = ll->next) edje_object_signal_emit(ll->data, "start", "");
|
||||||
|
edje_object_signal_emit(ic->bg_object, "start", "");
|
||||||
|
edje_object_signal_emit(ic->overlay_object, "start", "");
|
||||||
|
edje_object_signal_emit(ic->ibb->overlay_object, "start", "");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
edje_object_signal_emit(ic->icon_object, "exec", "");
|
||||||
|
for (ll = ic->extra_icons; ll; ll = ll->next) edje_object_signal_emit(ll->data, "exec", "");
|
||||||
|
edje_object_signal_emit(ic->bg_object, "exec", "");
|
||||||
|
edje_object_signal_emit(ic->overlay_object, "exec", "");
|
||||||
|
edje_object_signal_emit(ic->ibb->overlay_object, "exec", "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case E_APP_READY:
|
case E_APP_READY:
|
||||||
break;
|
case E_APP_READY_EXPIRE:
|
||||||
case E_APP_EXIT:
|
case E_APP_EXIT:
|
||||||
|
if (e_app_is_parent(ib->apps, a))
|
||||||
|
{
|
||||||
|
if (a->startup_notify)
|
||||||
|
{
|
||||||
|
IBar_Icon *ic;
|
||||||
|
|
||||||
|
ic = _ibar_icon_find(ibb, a);
|
||||||
|
if (ic)
|
||||||
|
{
|
||||||
|
Evas_List *l;
|
||||||
|
|
||||||
|
edje_object_signal_emit(ic->icon_object, "stop", "");
|
||||||
|
for (ll = ic->extra_icons; ll; ll = ll->next) edje_object_signal_emit(ll->data, "stop", "");
|
||||||
|
edje_object_signal_emit(ic->bg_object, "stop", "");
|
||||||
|
edje_object_signal_emit(ic->overlay_object, "stop", "");
|
||||||
|
edje_object_signal_emit(ic->ibb->overlay_object, "stop", "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue