diff --git a/src/bin/e_desklock.c b/src/bin/e_desklock.c index 1844e3fcf..c9c7a07e9 100644 --- a/src/bin/e_desklock.c +++ b/src/bin/e_desklock.c @@ -64,6 +64,9 @@ static int _e_desklock_user_idle = 0; static double _e_desklock_autolock_time = 0.0; static E_Dialog *_e_desklock_ask_presentation_dia = NULL; static int _e_desklock_ask_presentation_count = 0; +static Ecore_Event_Handler *_e_desklock_handler_border_fullscreen = NULL; +static Ecore_Event_Handler *_e_desklock_handler_border_unfullscreen = NULL; +static int _e_desklock_fullscreen_count = 0; /***********************************************************************/ @@ -93,6 +96,8 @@ static char *_desklock_auth_get_current_host(void); #endif static void _e_desklock_ask_presentation_mode(void); +static int _e_desklock_handler_border_fullscreen_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__); +static int _e_desklock_handler_border_unfullscreen_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__); EAPI int E_EVENT_DESKLOCK = 0; @@ -103,6 +108,14 @@ e_desklock_init(void) _e_desklock_idle_poller = ecore_poller_add(ECORE_POLLER_CORE, 256, _e_desklock_cb_idle_poller, NULL); + if (!_e_desklock_handler_border_fullscreen) + _e_desklock_handler_border_fullscreen = ecore_event_handler_add + (E_EVENT_BORDER_FULLSCREEN, _e_desklock_handler_border_fullscreen_cb, NULL); + + if (!_e_desklock_handler_border_unfullscreen) + _e_desklock_handler_border_unfullscreen = ecore_event_handler_add + (E_EVENT_BORDER_UNFULLSCREEN, _e_desklock_handler_border_unfullscreen_cb, NULL); + if (e_config->desklock_background) e_filereg_register(e_config->desklock_background); @@ -114,6 +127,18 @@ e_desklock_init(void) EAPI int e_desklock_shutdown(void) { + if (_e_desklock_handler_border_fullscreen) + { + ecore_event_handler_del(_e_desklock_handler_border_fullscreen); + _e_desklock_handler_border_fullscreen = NULL; + } + + if (_e_desklock_handler_border_unfullscreen) + { + ecore_event_handler_del(_e_desklock_handler_border_unfullscreen); + _e_desklock_handler_border_unfullscreen = NULL; + } + e_desklock_hide(); if (e_config->desklock_background) e_filereg_deregister(e_config->desklock_background); @@ -141,6 +166,7 @@ _user_wallpaper_get(void) EAPI int e_desklock_show_autolocked(void) { + if (_e_desklock_fullscreen_count > 0) return 0; if (_e_desklock_autolock_time < 1.0) _e_desklock_autolock_time = ecore_loop_time_get(); return e_desklock_show(); @@ -900,7 +926,8 @@ _e_desklock_cb_custom_desklock_exit(void *data __UNUSED__, int type __UNUSED__, static int _e_desklock_cb_idle_poller(void *data __UNUSED__) { - if ((e_config->desklock_autolock_idle) && (!e_config->mode.presentation)) + if ((e_config->desklock_autolock_idle) && (!e_config->mode.presentation) && + (_e_desklock_fullscreen_count <= 0)) { double idle, max; @@ -1047,3 +1074,20 @@ _e_desklock_ask_presentation_mode(void) _e_desklock_ask_presentation_dia = dia; } + +static int +_e_desklock_handler_border_fullscreen_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__) +{ + _e_desklock_fullscreen_count++; + if (_e_desklock_fullscreen_count == 1) e_desklock_init(); + return 1; +} + +static int +_e_desklock_handler_border_unfullscreen_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__) +{ + _e_desklock_fullscreen_count--; + if (_e_desklock_fullscreen_count == 0) e_desklock_init(); + else if (_e_desklock_fullscreen_count < 0) _e_desklock_fullscreen_count = 0; + return 1; +} diff --git a/src/bin/e_dpms.c b/src/bin/e_dpms.c index 5450b0ddd..92758004b 100644 --- a/src/bin/e_dpms.c +++ b/src/bin/e_dpms.c @@ -4,6 +4,9 @@ #include "e.h" static Ecore_Event_Handler *_e_dpms_handler_config_mode = NULL; +static Ecore_Event_Handler *_e_dpms_handler_border_fullscreen = NULL; +static Ecore_Event_Handler *_e_dpms_handler_border_unfullscreen = NULL; +static int _e_dpms_fullscreen_count = 0; static int _e_dpms_handler_config_mode_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__) @@ -12,16 +15,42 @@ _e_dpms_handler_config_mode_cb(void *data __UNUSED__, int type __UNUSED__, void return 1; } +static int +_e_dpms_handler_border_fullscreen_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__) +{ + _e_dpms_fullscreen_count++; + if (_e_dpms_fullscreen_count == 1) e_dpms_init(); + return 1; +} + +static int +_e_dpms_handler_border_unfullscreen_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__) +{ + _e_dpms_fullscreen_count--; + if (_e_dpms_fullscreen_count == 0) e_dpms_init(); + else if (_e_dpms_fullscreen_count < 0) _e_dpms_fullscreen_count = 0; + return 1; +} + EAPI int e_dpms_init(void) { int standby=0, suspend=0, off=0; - int enabled = ((e_config->dpms_enable) && (!e_config->mode.presentation)); + int enabled = ((e_config->dpms_enable) && (!e_config->mode.presentation) && + (_e_dpms_fullscreen_count <= 0)); if (!_e_dpms_handler_config_mode) _e_dpms_handler_config_mode = ecore_event_handler_add (E_EVENT_CONFIG_MODE_CHANGED, _e_dpms_handler_config_mode_cb, NULL); + if (!_e_dpms_handler_border_fullscreen) + _e_dpms_handler_border_fullscreen = ecore_event_handler_add + (E_EVENT_BORDER_FULLSCREEN, _e_dpms_handler_border_fullscreen_cb, NULL); + + if (!_e_dpms_handler_border_unfullscreen) + _e_dpms_handler_border_unfullscreen = ecore_event_handler_add + (E_EVENT_BORDER_UNFULLSCREEN, _e_dpms_handler_border_unfullscreen_cb, NULL); + ecore_x_dpms_enabled_set(enabled); if (!enabled) return 1; diff --git a/src/bin/e_screensaver.c b/src/bin/e_screensaver.c index b48965f94..62c2a304d 100644 --- a/src/bin/e_screensaver.c +++ b/src/bin/e_screensaver.c @@ -5,8 +5,11 @@ static Ecore_Event_Handler *_e_screensaver_handler_config_mode = NULL; static Ecore_Event_Handler *_e_screensaver_handler_screensaver_notify = NULL; +static Ecore_Event_Handler *_e_screensaver_handler_border_fullscreen = NULL; +static Ecore_Event_Handler *_e_screensaver_handler_border_unfullscreen = NULL; static E_Dialog *_e_screensaver_ask_presentation_dia = NULL; static int _e_screensaver_ask_presentation_count = 0; +static int _e_screensaver_fullscreen_count = 0; static int _e_screensaver_handler_config_mode_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__) @@ -149,6 +152,23 @@ _e_screensaver_handler_screensaver_notify_cb(void *data __UNUSED__, int type __U return 1; } +static int +_e_screensaver_handler_border_fullscreen_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__) +{ + _e_screensaver_fullscreen_count++; + if (_e_screensaver_fullscreen_count == 1) e_screensaver_init(); + return 1; +} + +static int +_e_screensaver_handler_border_unfullscreen_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__) +{ + _e_screensaver_fullscreen_count--; + if (_e_screensaver_fullscreen_count == 0) e_screensaver_init(); + else if (_e_screensaver_fullscreen_count < 0) _e_screensaver_fullscreen_count = 0; + return 1; +} + EAPI int e_screensaver_init(void) { @@ -162,7 +182,16 @@ e_screensaver_init(void) _e_screensaver_handler_screensaver_notify = ecore_event_handler_add (ECORE_X_EVENT_SCREENSAVER_NOTIFY, _e_screensaver_handler_screensaver_notify_cb, NULL); - if ((e_config->screensaver_enable) && (!e_config->mode.presentation)) + if (!_e_screensaver_handler_border_fullscreen) + _e_screensaver_handler_border_fullscreen = ecore_event_handler_add + (E_EVENT_BORDER_FULLSCREEN, _e_screensaver_handler_border_fullscreen_cb, NULL); + + if (!_e_screensaver_handler_border_unfullscreen) + _e_screensaver_handler_border_unfullscreen = ecore_event_handler_add + (E_EVENT_BORDER_UNFULLSCREEN, _e_screensaver_handler_border_unfullscreen_cb, NULL); + + if ((e_config->screensaver_enable) && (!e_config->mode.presentation) && + (_e_screensaver_fullscreen_count <= 0)) timeout = e_config->screensaver_timeout; interval = e_config->screensaver_interval;