forked from enlightenment/enlightenment
Do not activate DPMS, Screen Saver or Locker if there is a fullscreen window.
I guess there is nothing more annoying than having a fullscreen window to watch a quick movie, read some text or webpage or whatever and have the DPMS to show, or the screensaver to be activated or your screen to be locked. This patch uses the new border signal and counts, if there is at least one fullscreen border, then avoid doing these annoyances. I'm not accounting for any border parameter/property, like if it is in a visible screen or desktop. I hope this is fine, otherwise let me know. I also asked and common sense at IRC (at least to me and englebass) is that there is no need to configure such behavior, so there is no configure option for it. I'm also thinking about maximized windows to have a configurable behavior to match this, but I'm not sure. SVN revision: 49262
This commit is contained in:
parent
1c3afc74b2
commit
9e581982f7
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue