forked from enlightenment/enlightenment
e - restarts - if theme supports make it totally seamless
if theme doesn't support, fade-in will not happen (it'll just appear), but if it does... e will fade to black for a restart, then fade back in nice and cleanly.
This commit is contained in:
parent
24524001c4
commit
e66af58795
|
@ -541,6 +541,15 @@ e_comp_desk_window_profile_get(const char *profile)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
E_API void
|
||||||
|
e_comp_canvas_zone_restarted(E_Zone *zone)
|
||||||
|
{
|
||||||
|
if (edje_object_data_get(zone->over, "restarted"))
|
||||||
|
{
|
||||||
|
edje_object_signal_emit(zone->over, "e,state,sys,restarted,show", "e");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
E_API void
|
E_API void
|
||||||
e_comp_canvas_zone_update(E_Zone *zone)
|
e_comp_canvas_zone_update(E_Zone *zone)
|
||||||
{
|
{
|
||||||
|
@ -579,6 +588,12 @@ e_comp_canvas_zone_update(E_Zone *zone)
|
||||||
evas_object_resize(o, zone->w, zone->h);
|
evas_object_resize(o, zone->w, zone->h);
|
||||||
evas_object_raise(o);
|
evas_object_raise(o);
|
||||||
evas_object_show(o);
|
evas_object_show(o);
|
||||||
|
if (starting && after_restart &&
|
||||||
|
(edje_object_data_get(zone->over, "restarted")))
|
||||||
|
{
|
||||||
|
edje_object_signal_emit(zone->over, "e,state,sys,restarted", "e");
|
||||||
|
edje_object_message_signal_process(zone->over);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
E_API void
|
E_API void
|
||||||
|
|
|
@ -17,6 +17,7 @@ E_API E_Zone * e_comp_zone_xy_get(Evas_Coord x, Evas_Coord y);
|
||||||
E_API E_Zone * e_comp_zone_number_get(int num);
|
E_API E_Zone * e_comp_zone_number_get(int num);
|
||||||
E_API E_Zone * e_comp_zone_id_get(int id);
|
E_API E_Zone * e_comp_zone_id_get(int id);
|
||||||
E_API E_Desk * e_comp_desk_window_profile_get(const char *profile);
|
E_API E_Desk * e_comp_desk_window_profile_get(const char *profile);
|
||||||
|
E_API void e_comp_canvas_zone_restarted(E_Zone *zone);
|
||||||
E_API void e_comp_canvas_zone_update(E_Zone *zone);
|
E_API void e_comp_canvas_zone_update(E_Zone *zone);
|
||||||
E_API void e_comp_canvas_update(void);
|
E_API void e_comp_canvas_update(void);
|
||||||
E_API void e_comp_canvas_fake_layers_init(void);
|
E_API void e_comp_canvas_fake_layers_init(void);
|
||||||
|
|
|
@ -5450,6 +5450,22 @@ _e_comp_x_del(E_Comp *c)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
|
if (restart)
|
||||||
|
{
|
||||||
|
Ecore_X_Atom a;
|
||||||
|
Ecore_X_Window blackwin;
|
||||||
|
|
||||||
|
a = ecore_x_atom_get("E_COMP_BLACK_WIN");
|
||||||
|
blackwin = ecore_x_window_permanent_new(c->root, a);
|
||||||
|
ecore_x_window_ignore_set(blackwin, 1);
|
||||||
|
ecore_x_window_override_set(blackwin, EINA_TRUE);
|
||||||
|
ecore_x_window_move_resize(blackwin, 0, 0, 32000, 32000);
|
||||||
|
ecore_x_window_background_color_set(blackwin, 0, 0, 0);
|
||||||
|
ecore_x_window_show(blackwin);
|
||||||
|
ecore_x_window_prop_window_set(c->root, a, &blackwin, 1);
|
||||||
|
ecore_x_sync();
|
||||||
|
}
|
||||||
|
|
||||||
if (!e_comp_wl)
|
if (!e_comp_wl)
|
||||||
ecore_x_window_key_ungrab(c->root, "F", ECORE_EVENT_MODIFIER_SHIFT |
|
ecore_x_window_key_ungrab(c->root, "F", ECORE_EVENT_MODIFIER_SHIFT |
|
||||||
ECORE_EVENT_MODIFIER_CTRL |
|
ECORE_EVENT_MODIFIER_CTRL |
|
||||||
|
@ -5671,6 +5687,8 @@ static Eina_Bool
|
||||||
_e_comp_x_setup(Ecore_X_Window root, int w, int h)
|
_e_comp_x_setup(Ecore_X_Window root, int w, int h)
|
||||||
{
|
{
|
||||||
Ecore_X_Window_Attributes att;
|
Ecore_X_Window_Attributes att;
|
||||||
|
Ecore_X_Atom a;
|
||||||
|
Ecore_X_Window blackwin = 0;
|
||||||
Eina_Bool res;
|
Eina_Bool res;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
|
@ -5682,6 +5700,12 @@ _e_comp_x_setup(Ecore_X_Window root, int w, int h)
|
||||||
}
|
}
|
||||||
if (!ecore_x_window_manage(root)) return EINA_FALSE;
|
if (!ecore_x_window_manage(root)) return EINA_FALSE;
|
||||||
|
|
||||||
|
a = ecore_x_atom_get("E_COMP_BLACK_WIN");
|
||||||
|
if (ecore_x_window_prop_window_get(root, a, &blackwin, 1) == 1)
|
||||||
|
{
|
||||||
|
ecore_x_window_ignore_set(blackwin, 1);
|
||||||
|
}
|
||||||
|
|
||||||
e_comp_x = e_comp->x_comp_data = E_NEW(E_Comp_X_Data, 1);
|
e_comp_x = e_comp->x_comp_data = E_NEW(E_Comp_X_Data, 1);
|
||||||
ecore_x_e_window_profile_supported_set(root, EINA_TRUE);
|
ecore_x_e_window_profile_supported_set(root, EINA_TRUE);
|
||||||
e_comp->cm_selection = ecore_x_window_input_new(root, 0, 0, 1, 1);
|
e_comp->cm_selection = ecore_x_window_input_new(root, 0, 0, 1, 1);
|
||||||
|
@ -5785,6 +5809,13 @@ _e_comp_x_setup(Ecore_X_Window root, int w, int h)
|
||||||
e_pointer_window_add(e_comp->pointer, e_comp->root);
|
e_pointer_window_add(e_comp->pointer, e_comp->root);
|
||||||
_e_comp_x_manage_windows();
|
_e_comp_x_manage_windows();
|
||||||
|
|
||||||
|
if (blackwin)
|
||||||
|
{
|
||||||
|
ecore_x_window_free(blackwin);
|
||||||
|
ecore_x_window_prop_property_del(root, a);
|
||||||
|
ecore_x_window_ignore_set(blackwin, 0);
|
||||||
|
}
|
||||||
|
|
||||||
return !!e_comp->canvas->resize_object;
|
return !!e_comp->canvas->resize_object;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1092,6 +1092,11 @@ main(int argc, char **argv)
|
||||||
if (e_config->show_splash && (!after_restart))
|
if (e_config->show_splash && (!after_restart))
|
||||||
ecore_timer_add(2.0, _e_main_cb_startup_fake_end, NULL);
|
ecore_timer_add(2.0, _e_main_cb_startup_fake_end, NULL);
|
||||||
|
|
||||||
|
if (after_restart)
|
||||||
|
{
|
||||||
|
E_LIST_FOREACH(e_comp->zones, e_comp_canvas_zone_restarted);
|
||||||
|
}
|
||||||
|
|
||||||
TS("MAIN LOOP AT LAST");
|
TS("MAIN LOOP AT LAST");
|
||||||
if (!setjmp(x_fatal_buff))
|
if (!setjmp(x_fatal_buff))
|
||||||
ecore_main_loop_begin();
|
ecore_main_loop_begin();
|
||||||
|
|
|
@ -64,6 +64,7 @@ E_API int E_EVENT_SYS_RESUME = -1;
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
_e_sys_comp_done2_cb(void *data)
|
_e_sys_comp_done2_cb(void *data)
|
||||||
{
|
{
|
||||||
|
printf("_e_sys_comp_done2_cb %p\n", data);
|
||||||
e_sys_action_raw_do((E_Sys_Action)(long)data, NULL);
|
e_sys_action_raw_do((E_Sys_Action)(long)data, NULL);
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
@ -83,8 +84,11 @@ _e_sys_comp_done_cb(void *data, Evas_Object *obj, const char *sig, const char *s
|
||||||
#ifndef HAVE_WAYLAND_ONLY
|
#ifndef HAVE_WAYLAND_ONLY
|
||||||
if (e_comp->comp_type == E_PIXMAP_TYPE_X)
|
if (e_comp->comp_type == E_PIXMAP_TYPE_X)
|
||||||
{
|
{
|
||||||
ecore_x_screensaver_suspend();
|
if (_e_sys_action_after != E_SYS_RESTART)
|
||||||
ecore_x_dpms_force(EINA_TRUE);
|
{
|
||||||
|
ecore_x_screensaver_suspend();
|
||||||
|
ecore_x_dpms_force(EINA_TRUE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_WAYLAND
|
#ifdef HAVE_WAYLAND
|
||||||
|
@ -94,8 +98,15 @@ _e_sys_comp_done_cb(void *data, Evas_Object *obj, const char *sig, const char *s
|
||||||
e_comp->screen->dpms(3);
|
e_comp->screen->dpms(3);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
edje_freeze();
|
if (_e_sys_action_after != E_SYS_RESTART)
|
||||||
ecore_timer_add(0.5, _e_sys_comp_done2_cb, data);
|
{
|
||||||
|
edje_freeze();
|
||||||
|
ecore_timer_add(0.5, _e_sys_comp_done2_cb, data);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ecore_timer_add(0.3, _e_sys_comp_done2_cb, data);
|
||||||
|
}
|
||||||
E_FREE_FUNC(action_timeout, ecore_timer_del);
|
E_FREE_FUNC(action_timeout, ecore_timer_del);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -110,6 +121,9 @@ _e_sys_comp_action_timeout(void *data)
|
||||||
if (_e_sys_comp_waiting == 1) _e_sys_comp_waiting--;
|
if (_e_sys_comp_waiting == 1) _e_sys_comp_waiting--;
|
||||||
switch (a)
|
switch (a)
|
||||||
{
|
{
|
||||||
|
case E_SYS_RESTART:
|
||||||
|
sig = "e,state,sys,logout,done";
|
||||||
|
break;
|
||||||
case E_SYS_LOGOUT:
|
case E_SYS_LOGOUT:
|
||||||
sig = "e,state,sys,logout,done";
|
sig = "e,state,sys,logout,done";
|
||||||
break;
|
break;
|
||||||
|
@ -207,6 +221,19 @@ _e_sys_comp_logout(void)
|
||||||
_e_sys_comp_emit_cb_wait(E_SYS_LOGOUT, "e,state,sys,logout", "e,state,sys,logout,done", EINA_TRUE);
|
_e_sys_comp_emit_cb_wait(E_SYS_LOGOUT, "e,state,sys,logout", "e,state,sys,logout,done", EINA_TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_e_sys_comp_restart(void)
|
||||||
|
{
|
||||||
|
E_Zone *zone;
|
||||||
|
|
||||||
|
resume_backlight = e_config->backlight.normal;
|
||||||
|
zone = eina_list_data_get(e_comp->zones);
|
||||||
|
if ((zone) && (edje_object_data_get(zone->over, "restarted")))
|
||||||
|
_e_sys_comp_emit_cb_wait(E_SYS_RESTART, "e,state,sys,restart", "e,state,sys,restart,done", EINA_TRUE);
|
||||||
|
else
|
||||||
|
_e_sys_comp_emit_cb_wait(E_SYS_RESTART, "e,state,sys,logout", "e,state,sys,logout,done", EINA_TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
_e_sys_screensaver_unignore_delay(void *data EINA_UNUSED)
|
_e_sys_screensaver_unignore_delay(void *data EINA_UNUSED)
|
||||||
{
|
{
|
||||||
|
@ -476,6 +503,7 @@ e_sys_action_raw_do(E_Sys_Action a, char *param)
|
||||||
_e_sys_current_action();
|
_e_sys_current_action();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = _e_sys_action_do(a, param, EINA_TRUE);
|
ret = _e_sys_action_do(a, param, EINA_TRUE);
|
||||||
|
|
||||||
if (ret) _e_sys_action_current = a;
|
if (ret) _e_sys_action_current = a;
|
||||||
|
@ -857,6 +885,13 @@ _e_sys_logout_begin(E_Sys_Action a_after, Eina_Bool raw)
|
||||||
_e_sys_logout_timer = ecore_timer_loop_add(0.5, _e_sys_cb_logout_timer, NULL);
|
_e_sys_logout_timer = ecore_timer_loop_add(0.5, _e_sys_cb_logout_timer, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_e_sys_restart_begin(E_Sys_Action a_after, Eina_Bool raw)
|
||||||
|
{
|
||||||
|
_e_sys_action_after = a_after;
|
||||||
|
_e_sys_action_after_raw = raw;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_sys_current_action(void)
|
_e_sys_current_action(void)
|
||||||
{
|
{
|
||||||
|
@ -961,11 +996,18 @@ _e_sys_action_do(E_Sys_Action a, char *param EINA_UNUSED, Eina_Bool raw)
|
||||||
// XXX TODO: check for e_fm_op_registry entries and confirm
|
// XXX TODO: check for e_fm_op_registry entries and confirm
|
||||||
// FIXME: we don't share out immortal info to restarted e. :(
|
// FIXME: we don't share out immortal info to restarted e. :(
|
||||||
// if (!e_util_immortal_check())
|
// if (!e_util_immortal_check())
|
||||||
|
if (raw)
|
||||||
{
|
{
|
||||||
e_fm2_die();
|
e_fm2_die();
|
||||||
restart = 1;
|
restart = 1;
|
||||||
ecore_main_loop_quit();
|
ecore_main_loop_quit();
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_e_sys_restart_begin(E_SYS_RESTART, raw);
|
||||||
|
_e_sys_comp_restart();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
// else
|
// else
|
||||||
// return 0;
|
// return 0;
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue