diff --git a/config/default/e.src b/config/default/e.src
index 321b0e845..7dc7302bf 100644
--- a/config/default/e.src
+++ b/config/default/e.src
@@ -1,5 +1,5 @@
group "E_Config" struct {
- value "config_version" int: 65841;
+ value "config_version" int: 65842;
value "show_splash" int: 0;
value "init_default_theme" string: "default.edj";
value "desktop_default_name" string: "Desktop %i, %i";
@@ -450,6 +450,8 @@ group "E_Config" struct {
value "desklock_autolock_idle" int: 0;
value "desklock_autolock_idle_timeout" double: 300.0000000000000000000000000;
value "desklock_use_custom_desklock" int: 0;
+ value "desklock_ask_presentation" uchar 1;
+ value "desklock_ask_presentation_timeout" double: 30;
value "display_res_restore" int: 0;
value "display_res_width" int: 1;
value "display_res_height" int: 1;
@@ -460,6 +462,8 @@ group "E_Config" struct {
value "screensaver_interval" int: 5;
value "screensaver_blanking" int: 2;
value "screensaver_expose" int: 2;
+ value "screensaver_ask_presentation" uchar 1;
+ value "screensaver_ask_presentation_timeout" double: 30;
value "dpms_enable" int: 1;
value "dpms_standby_enable" int: 1;
value "dpms_suspend_enable" int: 1;
diff --git a/config/illume/e.src b/config/illume/e.src
index ca90890f0..865ec42d4 100644
--- a/config/illume/e.src
+++ b/config/illume/e.src
@@ -1,5 +1,5 @@
group "E_Config" struct {
- value "config_version" int: 65841;
+ value "config_version" int: 65842;
value "show_splash" int: 1;
value "init_default_theme" string: "default.edj";
value "desktop_default_name" string: "Desktop %i, %i";
@@ -660,6 +660,8 @@ group "E_Config" struct {
value "desklock_autolock_idle" int: 0;
value "desklock_autolock_idle_timeout" double: 300.0000000000000000000000000;
value "desklock_use_custom_desklock" int: 0;
+ value "desklock_ask_presentation" uchar 1;
+ value "desklock_ask_presentation_timeout" double: 30;
value "display_res_restore" int: 0;
value "display_res_width" int: 1;
value "display_res_height" int: 1;
@@ -670,6 +672,8 @@ group "E_Config" struct {
value "screensaver_interval" int: 5;
value "screensaver_blanking" int: 2;
value "screensaver_expose" int: 2;
+ value "screensaver_ask_presentation" uchar 1;
+ value "screensaver_ask_presentation_timeout" double: 30;
value "dpms_enable" int: 0;
value "dpms_standby_enable" int: 0;
value "dpms_suspend_enable" int: 0;
diff --git a/config/minimalist/e.src b/config/minimalist/e.src
index 94a4e62a7..a4dfa7da2 100644
--- a/config/minimalist/e.src
+++ b/config/minimalist/e.src
@@ -1,5 +1,5 @@
group "E_Config" struct {
- value "config_version" int: 65841;
+ value "config_version" int: 65842;
value "show_splash" int: 1;
value "init_default_theme" string: "default.edj";
value "desktop_default_background" string: "Light_Gradient.edj";
@@ -1864,6 +1864,8 @@ group "E_Config" struct {
value "desklock_autolock_idle" int: 0;
value "desklock_autolock_idle_timeout" double: 300.0000000000000000000000000;
value "desklock_use_custom_desklock" int: 0;
+ value "desklock_ask_presentation" uchar 1;
+ value "desklock_ask_presentation_timeout" double: 30;
value "display_res_restore" int: 0;
value "display_res_width" int: 1;
value "display_res_height" int: 1;
@@ -1874,6 +1876,8 @@ group "E_Config" struct {
value "screensaver_interval" int: 5;
value "screensaver_blanking" int: 2;
value "screensaver_expose" int: 2;
+ value "screensaver_ask_presentation" uchar 1;
+ value "screensaver_ask_presentation_timeout" double: 30;
value "dpms_enable" int: 0;
value "dpms_standby_enable" int: 0;
value "dpms_suspend_enable" int: 0;
diff --git a/config/netbook/e.src b/config/netbook/e.src
index 230f3947b..0675c41ba 100644
--- a/config/netbook/e.src
+++ b/config/netbook/e.src
@@ -1,5 +1,5 @@
group "E_Config" struct {
- value "config_version" int: 65841;
+ value "config_version" int: 65842;
value "show_splash" int: 1;
value "init_default_theme" string: "default.edj";
value "desktop_default_background" string: "Dark_Gradient.edj";
@@ -1928,6 +1928,8 @@ group "E_Config" struct {
value "desklock_autolock_idle" int: 0;
value "desklock_autolock_idle_timeout" double: 300.0000000000000000000000000;
value "desklock_use_custom_desklock" int: 0;
+ value "desklock_ask_presentation" uchar 1;
+ value "desklock_ask_presentation_timeout" double: 30;
value "display_res_restore" int: 0;
value "display_res_width" int: 1;
value "display_res_height" int: 1;
@@ -1938,6 +1940,8 @@ group "E_Config" struct {
value "screensaver_interval" int: 5;
value "screensaver_blanking" int: 2;
value "screensaver_expose" int: 2;
+ value "screensaver_ask_presentation" uchar 1;
+ value "screensaver_ask_presentation_timeout" double: 30;
value "dpms_enable" int: 0;
value "dpms_standby_enable" int: 0;
value "dpms_suspend_enable" int: 0;
diff --git a/config/scaleable/e.src b/config/scaleable/e.src
index 1e718aa13..d865acdef 100644
--- a/config/scaleable/e.src
+++ b/config/scaleable/e.src
@@ -1,5 +1,5 @@
group "E_Config" struct {
- value "config_version" int: 65841;
+ value "config_version" int: 65842;
value "show_splash" int: 1;
value "init_default_theme" string: "default.edj";
value "desktop_default_name" string: "Desktop %i, %i";
@@ -1951,6 +1951,8 @@ group "E_Config" struct {
value "desklock_autolock_idle" int: 0;
value "desklock_autolock_idle_timeout" double: 300.0000000000000000000000000;
value "desklock_use_custom_desklock" int: 0;
+ value "desklock_ask_presentation" uchar 1;
+ value "desklock_ask_presentation_timeout" double: 30;
value "display_res_restore" int: 0;
value "display_res_width" int: 1;
value "display_res_height" int: 1;
@@ -1961,6 +1963,8 @@ group "E_Config" struct {
value "screensaver_interval" int: 5;
value "screensaver_blanking" int: 2;
value "screensaver_expose" int: 2;
+ value "screensaver_ask_presentation" uchar 1;
+ value "screensaver_ask_presentation_timeout" double: 30;
value "dpms_enable" int: 0;
value "dpms_standby_enable" int: 0;
value "dpms_suspend_enable" int: 0;
diff --git a/config/standard/e.src b/config/standard/e.src
index 611a36a24..6a98183d5 100644
--- a/config/standard/e.src
+++ b/config/standard/e.src
@@ -1,5 +1,5 @@
group "E_Config" struct {
- value "config_version" int: 65841;
+ value "config_version" int: 65842;
value "show_splash" int: 1;
value "init_default_theme" string: "default.edj";
value "desktop_default_name" string: "Desktop %i, %i";
@@ -1961,6 +1961,8 @@ group "E_Config" struct {
value "desklock_autolock_idle" int: 0;
value "desklock_autolock_idle_timeout" double: 300.0000000000000000000000000;
value "desklock_use_custom_desklock" int: 0;
+ value "desklock_ask_presentation" uchar 1;
+ value "desklock_ask_presentation_timeout" double: 30;
value "display_res_restore" int: 0;
value "display_res_width" int: 1;
value "display_res_height" int: 1;
@@ -1971,6 +1973,8 @@ group "E_Config" struct {
value "screensaver_interval" int: 5;
value "screensaver_blanking" int: 2;
value "screensaver_expose" int: 2;
+ value "screensaver_ask_presentation" uchar 1;
+ value "screensaver_ask_presentation_timeout" double: 30;
value "dpms_enable" int: 0;
value "dpms_standby_enable" int: 0;
value "dpms_suspend_enable" int: 0;
diff --git a/src/bin/e_config.c b/src/bin/e_config.c
index a02d1228a..d8b87848d 100644
--- a/src/bin/e_config.c
+++ b/src/bin/e_config.c
@@ -572,6 +572,9 @@ e_config_init(void)
E_CONFIG_VAL(D, T, desklock_autolock_idle_timeout, DOUBLE);
E_CONFIG_VAL(D, T, desklock_use_custom_desklock, INT);
E_CONFIG_VAL(D, T, desklock_custom_desklock_cmd, STR);
+ E_CONFIG_VAL(D, T, desklock_ask_presentation, UCHAR);
+ E_CONFIG_VAL(D, T, desklock_ask_presentation_timeout, DOUBLE);
+
E_CONFIG_VAL(D, T, display_res_restore, INT);
E_CONFIG_VAL(D, T, display_res_width, INT);
E_CONFIG_VAL(D, T, display_res_height, INT);
@@ -583,7 +586,9 @@ e_config_init(void)
E_CONFIG_VAL(D, T, screensaver_interval, INT);
E_CONFIG_VAL(D, T, screensaver_blanking, INT);
E_CONFIG_VAL(D, T, screensaver_expose, INT);
-
+ E_CONFIG_VAL(D, T, screensaver_ask_presentation, UCHAR);
+ E_CONFIG_VAL(D, T, screensaver_ask_presentation_timeout, DOUBLE);
+
E_CONFIG_VAL(D, T, dpms_enable, INT);
E_CONFIG_VAL(D, T, dpms_standby_enable, INT);
E_CONFIG_VAL(D, T, dpms_suspend_enable, INT);
@@ -815,6 +820,7 @@ e_config_load(void)
}
}
#define IFCFG(v) if ((e_config->config_version & 0xffff) < (v)) {
+#define IFCFGELSE } else {
#define IFCFGEND }
#define COPYVAL(x) do {e_config->x = tcfg->x;} while (0)
#define COPYPTR(x) do {e_config->x = tcfg->x; tcfg->x = NULL;} while (0)
@@ -897,6 +903,18 @@ e_config_load(void)
COPYVAL(desklock_post_screensaver_time);
IFCFGEND;
+ IFCFG(0x0132);
+ COPYVAL(desklock_ask_presentation);
+ COPYVAL(desklock_ask_presentation_timeout);
+ COPYVAL(screensaver_ask_presentation);
+ COPYVAL(screensaver_ask_presentation_timeout);
+ IFCFGELSE;
+ e_config->desklock_ask_presentation = 1;
+ e_config->desklock_ask_presentation_timeout = 30.0;
+ e_config->screensaver_ask_presentation = 1;
+ e_config->screensaver_ask_presentation_timeout = 30.0;
+ IFCFGEND;
+
e_config->config_version = E_CONFIG_FILE_VERSION;
_e_config_free(tcfg);
}
@@ -987,6 +1005,8 @@ e_config_load(void)
E_CONFIG_LIMIT(e_config->desklock_autolock_idle, 0, 1);
E_CONFIG_LIMIT(e_config->desklock_autolock_idle_timeout, 1.0, 5400.0);
E_CONFIG_LIMIT(e_config->desklock_use_custom_desklock, 0, 1);
+ E_CONFIG_LIMIT(e_config->desklock_ask_presentation, 0, 1);
+ E_CONFIG_LIMIT(e_config->desklock_ask_presentation_timeout, 1.0, 300.0);
E_CONFIG_LIMIT(e_config->display_res_restore, 0, 1);
E_CONFIG_LIMIT(e_config->display_res_width, 1, 8192);
E_CONFIG_LIMIT(e_config->display_res_height, 1, 8192);
@@ -1012,7 +1032,9 @@ e_config_load(void)
E_CONFIG_LIMIT(e_config->screensaver_interval, 0, 5400);
E_CONFIG_LIMIT(e_config->screensaver_blanking, 0, 2);
E_CONFIG_LIMIT(e_config->screensaver_expose, 0, 2);
-
+ E_CONFIG_LIMIT(e_config->screensaver_ask_presentation, 0, 1);
+ E_CONFIG_LIMIT(e_config->screensaver_ask_presentation_timeout, 1.0, 300.0);
+
E_CONFIG_LIMIT(e_config->clientlist_group_by, 0, 2);
E_CONFIG_LIMIT(e_config->clientlist_include_all_zones, 0, 1);
E_CONFIG_LIMIT(e_config->clientlist_separate_with, 0, 2);
diff --git a/src/bin/e_config.h b/src/bin/e_config.h
index 3716018fd..b7711419f 100644
--- a/src/bin/e_config.h
+++ b/src/bin/e_config.h
@@ -35,7 +35,7 @@ typedef struct _E_Event_Config_Icon_Theme E_Event_Config_Icon_Theme;
/* increment this whenever a new set of config values are added but the users
* config doesn't need to be wiped - simply new values need to be put in
*/
-#define E_CONFIG_FILE_GENERATION 0x0131
+#define E_CONFIG_FILE_GENERATION 0x0132
#define E_CONFIG_FILE_VERSION ((E_CONFIG_FILE_EPOCH << 16) | E_CONFIG_FILE_GENERATION)
#define E_EVAS_ENGINE_DEFAULT 0
@@ -223,12 +223,16 @@ struct _E_Config
double desklock_autolock_idle_timeout; // GUI
int desklock_use_custom_desklock; // GUI
const char *desklock_custom_desklock_cmd; // GUI
-
+ Eina_Bool desklock_ask_presentation; // GUI
+ double desklock_ask_presentation_timeout; // GUI
+
int screensaver_enable; // GUI
int screensaver_timeout; // GUI
int screensaver_interval; // GUI
int screensaver_blanking; // GUI
int screensaver_expose; // GUI
+ Eina_Bool screensaver_ask_presentation; // GUI
+ double screensaver_ask_presentation_timeout; // GUI
int dpms_enable; // GUI
int dpms_standby_enable; // GUI
diff --git a/src/bin/e_desklock.c b/src/bin/e_desklock.c
index 06dbc6b12..7b65bc6c7 100644
--- a/src/bin/e_desklock.c
+++ b/src/bin/e_desklock.c
@@ -61,6 +61,9 @@ static Ecore_Exe *_e_custom_desklock_exe = NULL;
static Ecore_Event_Handler *_e_custom_desklock_exe_handler = NULL;
static Ecore_Poller *_e_desklock_idle_poller = NULL;
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;
/***********************************************************************/
@@ -89,6 +92,8 @@ static char *_desklock_auth_get_current_user(void);
static char *_desklock_auth_get_current_host(void);
#endif
+static void _e_desklock_ask_presentation_mode(void);
+
EAPI int E_EVENT_DESKLOCK = 0;
EAPI int
@@ -133,6 +138,13 @@ _user_wallpaper_get(void)
"e/desklock/background");
}
+EAPI int
+e_desklock_show_autolocked(void)
+{
+ _e_desklock_autolock_time = ecore_loop_time_get();
+ return e_desklock_show();
+}
+
EAPI int
e_desklock_show(void)
{
@@ -434,6 +446,24 @@ e_desklock_hide(void)
ev = E_NEW(E_Event_Desklock, 1);
ev->on = 0;
ecore_event_add(E_EVENT_DESKLOCK, ev, NULL, NULL);
+
+ if (_e_desklock_autolock_time > 0.0)
+ {
+ if ((e_config->desklock_ask_presentation) &&
+ (e_config->desklock_ask_presentation_timeout > 0.0))
+ {
+ double max, now;
+
+ now = ecore_loop_time_get();
+ max = _e_desklock_autolock_time + e_config->desklock_ask_presentation_timeout;
+ if (now <= max)
+ _e_desklock_ask_presentation_mode();
+ }
+ else
+ _e_desklock_ask_presentation_count = 0;
+
+ _e_desklock_autolock_time = 0.0;
+ }
}
static int
@@ -889,11 +919,18 @@ _e_desklock_cb_idle_poller(void *data)
{
if ((e_config->desklock_autolock_idle) && (!e_config->mode.presentation))
{
+ double idle, max;
+
/* If a desklock is already up, bail */
if ((_e_custom_desklock_exe) || (edd)) return 1;
+ idle = ecore_x_screensaver_idle_time_get();
+ max = e_config->desklock_autolock_idle_timeout;
+ if (_e_desklock_ask_presentation_count > 0)
+ max *= _e_desklock_ask_presentation_count;
+
/* If we have exceeded our idle time... */
- if (ecore_x_screensaver_idle_time_get() >= e_config->desklock_autolock_idle_timeout)
+ if (idle >= max)
{
/*
* Unfortunately, not all "desklocks" stay up for as long as
@@ -907,7 +944,7 @@ _e_desklock_cb_idle_poller(void *data)
if (!_e_desklock_user_idle)
{
_e_desklock_user_idle = 1;
- e_desklock_show();
+ e_desklock_show_autolocked();
}
}
else
@@ -917,3 +954,99 @@ _e_desklock_cb_idle_poller(void *data)
/* Make sure our poller persists. */
return 1;
}
+
+static void
+_e_desklock_ask_presentation_del(void *data)
+{
+ if (_e_desklock_ask_presentation_dia == data)
+ _e_desklock_ask_presentation_dia = NULL;
+}
+
+static void
+_e_desklock_ask_presentation_yes(void *data __UNUSED__, E_Dialog *dia)
+{
+ e_config->mode.presentation = 1;
+ e_config_mode_changed();
+ e_config_save_queue();
+ e_object_del(E_OBJECT(dia));
+ _e_desklock_ask_presentation_count = 0;
+}
+
+static void
+_e_desklock_ask_presentation_no(void *data __UNUSED__, E_Dialog *dia)
+{
+ e_object_del(E_OBJECT(dia));
+ _e_desklock_ask_presentation_count = 0;
+}
+
+static void
+_e_desklock_ask_presentation_no_increase(void *data __UNUSED__, E_Dialog *dia)
+{
+ int timeout, interval, blanking, expose;
+
+ _e_desklock_ask_presentation_count++;
+ timeout = e_config->screensaver_timeout * _e_desklock_ask_presentation_count;
+ interval = e_config->screensaver_interval;
+ blanking = e_config->screensaver_blanking;
+ expose = e_config->screensaver_expose;
+
+ ecore_x_screensaver_set(timeout, interval, blanking, expose);
+ e_object_del(E_OBJECT(dia));
+}
+
+static void
+_e_desklock_ask_presentation_no_forever(void *data __UNUSED__, E_Dialog *dia)
+{
+ e_config->desklock_ask_presentation = 0;
+ e_config_save_queue();
+ e_object_del(E_OBJECT(dia));
+ _e_desklock_ask_presentation_count = 0;
+}
+
+static void
+_e_desklock_ask_presentation_mode(void)
+{
+ E_Manager *man;
+ E_Container *con;
+ E_Dialog *dia;
+
+ if (_e_desklock_ask_presentation_dia)
+ return;
+
+ man = e_manager_current_get();
+ if (!man) return;
+ con = e_container_current_get(man);
+ if (!con) return;
+ dia = e_dialog_new(con, "E", "_desklock_ask_presentation");
+ if (!dia) return;
+
+ e_dialog_title_set(dia, _("Activate Presentation Mode?"));
+ e_dialog_icon_set(dia, "dialog-ask", 64);
+ e_dialog_text_set
+ (dia,
+ _("You unlocked desktop too fast.
"
+ "Would you like to enabe presentation mode and "
+ "temporarily disable screen saver, lock and power saving?"));
+
+ e_object_del_attach_func_set
+ (E_OBJECT(dia), _e_desklock_ask_presentation_del);
+ e_dialog_button_add
+ (dia, _("Yes"), NULL, _e_desklock_ask_presentation_yes, NULL);
+ e_dialog_button_add
+ (dia, _("No"), NULL, _e_desklock_ask_presentation_no, NULL);
+ e_dialog_button_add
+ (dia, _("No, but increase timeout"), NULL,
+ _e_desklock_ask_presentation_no_increase, NULL);
+ e_dialog_button_add
+ (dia, _("No, and stop asking"), NULL,
+ _e_desklock_ask_presentation_no_forever, NULL);
+
+ e_dialog_button_focus_num(dia, 0);
+ e_dialog_resizable_set(dia, 1);
+ e_widget_list_homogeneous_set(dia->box_object, 0);
+ e_util_win_auto_resize_fill(dia->win);
+ e_win_centered_set(dia->win, 1);
+ e_dialog_show(dia);
+
+ _e_desklock_ask_presentation_dia = dia;
+}
diff --git a/src/bin/e_desklock.h b/src/bin/e_desklock.h
index d5bc32758..11ee6a045 100644
--- a/src/bin/e_desklock.h
+++ b/src/bin/e_desklock.h
@@ -15,6 +15,7 @@ EAPI int e_desklock_init(void);
EAPI int e_desklock_shutdown(void);
EAPI int e_desklock_show(void);
+EAPI int e_desklock_show_autolocked(void);
EAPI void e_desklock_hide(void);
extern EAPI int E_EVENT_DESKLOCK;
diff --git a/src/bin/e_manager.c b/src/bin/e_manager.c
index 26fdebe34..9b57fd98d 100644
--- a/src/bin/e_manager.c
+++ b/src/bin/e_manager.c
@@ -795,7 +795,7 @@ _e_manager_cb_ping(void *data, int ev_type __UNUSED__, void *ev)
static int
_e_manager_cb_timer_post_screensaver_lock(void *data __UNUSED__)
{
- e_desklock_show();
+ e_desklock_show_autolocked();
timer_post_screensaver_lock = NULL;
return 0;
}
@@ -817,7 +817,7 @@ _e_manager_cb_screensaver_notify(void *data __UNUSED__, int ev_type __UNUSED__,
{
if (e_config->desklock_post_screensaver_time <= 1.0)
{
- e_desklock_show();
+ e_desklock_show_autolocked();
}
else
{
diff --git a/src/bin/e_screensaver.c b/src/bin/e_screensaver.c
index 6ed2b0820..54d4a6339 100644
--- a/src/bin/e_screensaver.c
+++ b/src/bin/e_screensaver.c
@@ -4,6 +4,9 @@
#include "e.h"
static Ecore_Event_Handler *_e_screensaver_handler_config_mode = NULL;
+static Ecore_Event_Handler *_e_screensaver_handler_screensaver_notify = NULL;
+static E_Dialog *_e_screensaver_ask_presentation_dia = NULL;
+static int _e_screensaver_ask_presentation_count = 0;
static int
_e_screensaver_handler_config_mode_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__)
@@ -12,6 +15,126 @@ _e_screensaver_handler_config_mode_cb(void *data __UNUSED__, int type __UNUSED__
return 1;
}
+static void
+_e_screensaver_ask_presentation_del(void *data)
+{
+ if (_e_screensaver_ask_presentation_dia == data)
+ _e_screensaver_ask_presentation_dia = NULL;
+}
+
+static void
+_e_screensaver_ask_presentation_yes(void *data __UNUSED__, E_Dialog *dia)
+{
+ e_config->mode.presentation = 1;
+ e_config_mode_changed();
+ e_config_save_queue();
+ e_object_del(E_OBJECT(dia));
+ _e_screensaver_ask_presentation_count = 0;
+}
+
+static void
+_e_screensaver_ask_presentation_no(void *data __UNUSED__, E_Dialog *dia)
+{
+ e_object_del(E_OBJECT(dia));
+ _e_screensaver_ask_presentation_count = 0;
+}
+
+static void
+_e_screensaver_ask_presentation_no_increase(void *data __UNUSED__, E_Dialog *dia)
+{
+ int timeout, interval, blanking, expose;
+
+ _e_screensaver_ask_presentation_count++;
+ timeout = e_config->screensaver_timeout * _e_screensaver_ask_presentation_count;
+ interval = e_config->screensaver_interval;
+ blanking = e_config->screensaver_blanking;
+ expose = e_config->screensaver_expose;
+
+ ecore_x_screensaver_set(timeout, interval, blanking, expose);
+ e_object_del(E_OBJECT(dia));
+}
+
+static void
+_e_screensaver_ask_presentation_no_forever(void *data __UNUSED__, E_Dialog *dia)
+{
+ e_config->screensaver_ask_presentation = 0;
+ e_config_save_queue();
+ e_object_del(E_OBJECT(dia));
+ _e_screensaver_ask_presentation_count = 0;
+}
+
+static void
+_e_screensaver_ask_presentation_mode(void)
+{
+ E_Manager *man;
+ E_Container *con;
+ E_Dialog *dia;
+
+ if (_e_screensaver_ask_presentation_dia)
+ return;
+
+ man = e_manager_current_get();
+ if (!man) return;
+ con = e_container_current_get(man);
+ if (!con) return;
+ dia = e_dialog_new(con, "E", "_screensaver_ask_presentation");
+ if (!dia) return;
+
+ e_dialog_title_set(dia, _("Activate Presentation Mode?"));
+ e_dialog_icon_set(dia, "dialog-ask", 64);
+ e_dialog_text_set
+ (dia,
+ _("You disabled screensaver too fast.
"
+ "Would you like to enabe presentation mode and "
+ "temporarily disable screen saver, lock and power saving?"));
+
+ e_object_del_attach_func_set
+ (E_OBJECT(dia), _e_screensaver_ask_presentation_del);
+ e_dialog_button_add
+ (dia, _("Yes"), NULL, _e_screensaver_ask_presentation_yes, NULL);
+ e_dialog_button_add
+ (dia, _("No"), NULL, _e_screensaver_ask_presentation_no, NULL);
+ e_dialog_button_add
+ (dia, _("No, but increase timeout"), NULL,
+ _e_screensaver_ask_presentation_no_increase, NULL);
+ e_dialog_button_add
+ (dia, _("No, and stop asking"), NULL,
+ _e_screensaver_ask_presentation_no_forever, NULL);
+
+ e_dialog_button_focus_num(dia, 0);
+ e_dialog_resizable_set(dia, 1);
+ e_widget_list_homogeneous_set(dia->box_object, 0);
+ e_util_win_auto_resize_fill(dia->win);
+ e_win_centered_set(dia->win, 1);
+ e_dialog_show(dia);
+
+ _e_screensaver_ask_presentation_dia = dia;
+}
+
+static int
+_e_screensaver_handler_screensaver_notify_cb(void *data __UNUSED__, int type __UNUSED__, void *event)
+{
+ Ecore_X_Event_Screensaver_Notify *e = event;
+ static double last_start = 0.0;
+
+ if (e->on)
+ {
+ last_start = ecore_loop_time_get();
+ _e_screensaver_ask_presentation_count = 0;
+ }
+ else if ((last_start > 0.0) && (e_config->screensaver_ask_presentation))
+ {
+ double current = ecore_loop_time_get();
+ if (last_start + e_config->screensaver_ask_presentation_timeout >= current)
+ _e_screensaver_ask_presentation_mode();
+ last_start = 0.0;
+ }
+ else if (_e_screensaver_ask_presentation_count)
+ _e_screensaver_ask_presentation_count = 0;
+
+ return 1;
+}
+
EAPI int
e_screensaver_init(void)
{
@@ -21,6 +144,10 @@ e_screensaver_init(void)
_e_screensaver_handler_config_mode = ecore_event_handler_add
(E_EVENT_CONFIG_MODE_CHANGED, _e_screensaver_handler_config_mode_cb, NULL);
+ if (!_e_screensaver_handler_screensaver_notify)
+ _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))
timeout = e_config->screensaver_timeout;
diff --git a/src/bin/e_widget_list.c b/src/bin/e_widget_list.c
index 08700abc2..5e93f010b 100644
--- a/src/bin/e_widget_list.c
+++ b/src/bin/e_widget_list.c
@@ -70,6 +70,13 @@ e_widget_list_object_append(Evas_Object *obj, Evas_Object *sobj, int fill, int e
evas_object_show(sobj);
}
+EAPI void
+e_widget_list_homogeneous_set(Evas_Object *obj, int homogenous)
+{
+ E_Widget_Data *wd = e_widget_data_get(obj);
+ e_box_homogenous_set(wd->o_box, homogenous);
+}
+
static void
_e_wid_del_hook(Evas_Object *obj)
{
diff --git a/src/bin/e_widget_list.h b/src/bin/e_widget_list.h
index 29eb0b8d0..f30c4da79 100644
--- a/src/bin/e_widget_list.h
+++ b/src/bin/e_widget_list.h
@@ -8,7 +8,8 @@
EAPI Evas_Object *e_widget_list_add(Evas *evas, int homogenous, int horiz);
EAPI void e_widget_list_object_append(Evas_Object *obj, Evas_Object *sobj, int fill, int expand, double align);
-
+EAPI void e_widget_list_homogeneous_set(Evas_Object *obj, int homogenous);
+
#endif
#endif
diff --git a/src/modules/conf_desklock/e_int_config_desklock.c b/src/modules/conf_desklock/e_int_config_desklock.c
index 4681c6797..b564e860a 100644
--- a/src/modules/conf_desklock/e_int_config_desklock.c
+++ b/src/modules/conf_desklock/e_int_config_desklock.c
@@ -26,6 +26,8 @@ static int _zone_count_get(void);
static void _cb_disable_check(void *data, Evas_Object *obj);
+static void _cb_ask_presentation_changed(void *data, Evas_Object *obj);
+
struct _E_Config_Dialog_Data
{
E_Config_Dialog *cfd;
@@ -53,6 +55,8 @@ struct _E_Config_Dialog_Data
char *custom_lock_cmd;
int login_zone;
int zone;
+ int ask_presentation;
+ double ask_presentation_timeout;
struct {
struct {
@@ -61,6 +65,10 @@ struct _E_Config_Dialog_Data
Evas_Object *post_screensaver_label;
Evas_Object *post_screensaver_slider;
} basic;
+ struct {
+ Evas_Object *ask_presentation_label;
+ Evas_Object *ask_presentation_slider;
+ } adv;
} gui;
};
@@ -135,6 +143,9 @@ _fill_data(E_Config_Dialog_Data *cfdata)
cfdata->login_zone = e_config->desklock_login_box_zone;
cfdata->zone = 0;
}
+
+ cfdata->ask_presentation = e_config->desklock_ask_presentation;
+ cfdata->ask_presentation_timeout = e_config->desklock_ask_presentation_timeout;
}
static void *
@@ -422,8 +433,30 @@ _adv_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
1, 0, 1, 0);
e_widget_table_object_append(mt, of, 1, 1, 1, 1, 1, 1, 1, 1);
+
+ of = e_widget_framelist_add(evas, _("Enter Presentation Mode"), 0);
+
+ ow = e_widget_check_add(evas, _("Suggest entering presentation mode"), &(cfdata->ask_presentation));
+ e_widget_on_change_hook_set(ow, _cb_ask_presentation_changed, cfdata);
+ e_widget_framelist_object_append(of, ow);
+
+ ow = e_widget_label_add(evas, _("If deactivated before"));
+ cfdata->gui.adv.ask_presentation_label = ow;
+ e_widget_framelist_object_append(of, ow);
+
+ ow = e_widget_slider_add(evas, 1, 0, _("%1.0f seconds"),
+ 1.0, 300.0, 10.0, 0,
+ &(cfdata->ask_presentation_timeout), NULL, 100);
+ cfdata->gui.adv.ask_presentation_slider = ow;
+ e_widget_framelist_object_append(of, ow);
+
+ _cb_ask_presentation_changed(cfdata, NULL);
+
+ e_widget_table_object_append(mt, of, 1, 2, 1, 1, 1, 1, 1, 1);
+
+
ow = _basic_create(cfd, evas, cfdata);
- e_widget_table_object_append(mt, ow, 2, 1, 1, 1, 1, 1, 1, 1);
+ e_widget_table_object_append(mt, ow, 2, 1, 1, 2, 1, 1, 1, 1);
of = e_widget_framelist_add(evas, _("Custom Screenlock"), 0);
custom_screenlock_check = e_widget_check_add(evas, _("Use custom screenlock"),
@@ -432,7 +465,7 @@ _adv_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
ow = e_widget_entry_add(evas, &(cfdata->custom_lock_cmd), NULL, NULL, NULL);
e_widget_disabled_set(ow, !cfdata->custom_lock); // set state from saved config
e_widget_framelist_object_append(of, ow);
- e_widget_table_object_append(mt, of, 1, 2, 2, 1, 1, 1, 1, 1);
+ e_widget_table_object_append(mt, of, 1, 3, 2, 1, 1, 1, 1, 1);
// handler for enable/disable widget array
e_widget_on_change_hook_set(custom_screenlock_check, _cb_disable_check, ow);
@@ -447,6 +480,8 @@ _adv_apply(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
e_config->desklock_autolock_idle = cfdata->auto_lock;
e_config->desklock_autolock_screensaver = cfdata->screensaver_lock;
e_config->desklock_autolock_idle_timeout = cfdata->idle_time * 60;
+ e_config->desklock_ask_presentation = cfdata->ask_presentation;
+ e_config->desklock_ask_presentation_timeout = cfdata->ask_presentation_timeout;
if (cfdata->bg)
{
@@ -515,7 +550,8 @@ _adv_check_changed(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
else if (e_config->desklock_custom_desklock_cmd != cfdata->custom_lock_cmd)
return 1;
- return 0;
+ return ((e_config->desklock_ask_presentation != cfdata->ask_presentation) ||
+ (e_config->desklock_ask_presentation_timeout != cfdata->ask_presentation_timeout));
}
static void
@@ -727,3 +763,15 @@ _cb_disable_check(void *data, Evas_Object *obj)
e_widget_disabled_set((Evas_Object *) data,
!e_widget_check_checked_get(obj));
}
+
+static void
+_cb_ask_presentation_changed(void *data, Evas_Object *obj __UNUSED__)
+{
+ E_Config_Dialog_Data *cfdata = data;
+ Eina_Bool disable;
+
+ disable = (!cfdata->ask_presentation);
+
+ e_widget_disabled_set(cfdata->gui.adv.ask_presentation_label, disable);
+ e_widget_disabled_set(cfdata->gui.adv.ask_presentation_slider, disable);
+}
diff --git a/src/modules/conf_screensaver/e_int_config_screensaver.c b/src/modules/conf_screensaver/e_int_config_screensaver.c
index 1d4c46730..946720e6d 100644
--- a/src/modules/conf_screensaver/e_int_config_screensaver.c
+++ b/src/modules/conf_screensaver/e_int_config_screensaver.c
@@ -16,8 +16,9 @@ static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas,
static int _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
static Evas_Object *_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas,
E_Config_Dialog_Data *cfdata);
-static void _cb_disable_check(void *data, Evas_Object *obj);
-static void _cb_disable_check_list(void *data, Evas_Object *obj);
+static void _cb_disable_basic(void *data, Evas_Object *obj);
+static void _cb_disable_adv(void *data, Evas_Object *obj);
+static void _cb_ask_presentation_changed(void *data, Evas_Object *obj);
struct _E_Config_Dialog_Data
{
@@ -28,8 +29,21 @@ struct _E_Config_Dialog_Data
double interval;
int blanking;
int exposures;
+ int ask_presentation;
+ double ask_presentation_timeout;
Eina_List *disable_list;
+
+ struct {
+ struct {
+ Evas_Object *label;
+ Evas_Object *slider;
+ } basic;
+ struct {
+ Evas_Object *ask_presentation_label;
+ Evas_Object *ask_presentation_slider;
+ } adv;
+ } gui;
};
EAPI E_Config_Dialog *
@@ -64,6 +78,8 @@ _fill_data(E_Config_Dialog_Data *cfdata)
cfdata->interval = e_config->screensaver_interval;
cfdata->blanking = e_config->screensaver_blanking;
cfdata->exposures = e_config->screensaver_expose;
+ cfdata->ask_presentation = e_config->screensaver_ask_presentation;
+ cfdata->ask_presentation_timeout = e_config->screensaver_ask_presentation_timeout;
}
static void *
@@ -92,6 +108,8 @@ _apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
e_config->screensaver_interval = cfdata->interval;
e_config->screensaver_blanking = cfdata->blanking;
e_config->screensaver_expose = cfdata->exposures;
+ e_config->screensaver_ask_presentation = cfdata->ask_presentation;
+ e_config->screensaver_ask_presentation_timeout = cfdata->ask_presentation_timeout;
/* Apply settings */
e_screensaver_init();
@@ -120,14 +138,15 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
of = e_widget_framelist_add(evas, _("Screensaver Timer(s)"), 0);
ob = e_widget_label_add(evas, _("Time until X screensaver starts"));
+ cfdata->gui.basic.label = ob;
e_widget_framelist_object_append(of, ob);
ob = e_widget_slider_add(evas, 1, 0, _("%1.0f minutes"), 1.0, 90.0, 1.0, 0,
&(cfdata->timeout), NULL, 100);
- e_widget_disabled_set(ob, !cfdata->enable_screensaver); // set state from saved config
+ cfdata->gui.basic.slider = ob;
e_widget_framelist_object_append(of, ob);
- // handler for enable/disable widget
- e_widget_on_change_hook_set(xscreensaver_check, _cb_disable_check, ob);
+ e_widget_on_change_hook_set(xscreensaver_check, _cb_disable_basic, cfdata);
+ _cb_disable_basic(cfdata, NULL);
e_widget_list_object_append(o, of, 1, 1, 0.5);
return o;
@@ -157,34 +176,52 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
of = e_widget_framelist_add(evas, _("Screensaver Timer(s)"), 0);
ob = e_widget_label_add(evas, _("Time until X screensaver starts"));
+ cfdata->disable_list = eina_list_append(cfdata->disable_list, ob);
e_widget_framelist_object_append(of, ob);
ob = e_widget_slider_add(evas, 1, 0, _("%1.0f minutes"),
1.0, 90.0, 1.0, 0, &(cfdata->timeout), NULL, 200);
cfdata->disable_list = eina_list_append(cfdata->disable_list, ob);
- e_widget_disabled_set(ob, !cfdata->enable_screensaver); // set state from saved config
e_widget_framelist_object_append(of, ob);
ob = e_widget_label_add(evas, _("Time until X screensaver alternates"));
+ cfdata->disable_list = eina_list_append(cfdata->disable_list, ob);
e_widget_framelist_object_append(of, ob);
ob = e_widget_slider_add(evas, 1, 0, _("%1.0f seconds"),
1.0, 300.0, 1.0, 0, &(cfdata->interval), NULL, 200);
cfdata->disable_list = eina_list_append(cfdata->disable_list, ob);
- e_widget_disabled_set(ob, !cfdata->enable_screensaver); // set state from saved config
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
+ of = e_widget_framelist_add(evas, _("Enter Presentation Mode"), 0);
+
+ ob = e_widget_check_add(evas, _("Suggest entering presentation mode"), &(cfdata->ask_presentation));
+ e_widget_on_change_hook_set(ob, _cb_ask_presentation_changed, cfdata);
+ cfdata->disable_list = eina_list_append(cfdata->disable_list, ob);
+ e_widget_framelist_object_append(of, ob);
+
+ ob = e_widget_label_add(evas, _("If deactivated before"));
+ cfdata->gui.adv.ask_presentation_label = ob;
+ cfdata->disable_list = eina_list_append(cfdata->disable_list, ob);
+ e_widget_framelist_object_append(of, ob);
+
+ ob = e_widget_slider_add(evas, 1, 0, _("%1.0f seconds"),
+ 1.0, 300.0, 10.0, 0,
+ &(cfdata->ask_presentation_timeout), NULL, 200);
+ cfdata->gui.adv.ask_presentation_slider = ob;
+ cfdata->disable_list = eina_list_append(cfdata->disable_list, ob);
+ e_widget_framelist_object_append(of, ob);
+
+ e_widget_list_object_append(o, of, 1, 1, 0.5);
+
of = e_widget_framelist_add(evas, _("Blanking"), 0);
rg = e_widget_radio_group_new(&(cfdata->blanking));
ob = e_widget_radio_add(evas, _("Default"), E_CONFIG_BLANKING_DEFAULT, rg);
- e_widget_disabled_set(ob, !cfdata->enable_screensaver); // set state from saved config
cfdata->disable_list = eina_list_append(cfdata->disable_list, ob);
e_widget_framelist_object_append(of, ob);
ob = e_widget_radio_add(evas, _("Preferred"), E_CONFIG_BLANKING_PREFERRED, rg);
- e_widget_disabled_set(ob, !cfdata->enable_screensaver); // set state from saved config
cfdata->disable_list = eina_list_append(cfdata->disable_list, ob);
e_widget_framelist_object_append(of, ob);
ob = e_widget_radio_add(evas, _("Not Preferred"), E_CONFIG_BLANKING_NOT_PREFERRED, rg);
- e_widget_disabled_set(ob, !cfdata->enable_screensaver); // set state from saved config
cfdata->disable_list = eina_list_append(cfdata->disable_list, ob);
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
@@ -192,47 +229,54 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
of = e_widget_framelist_add(evas, _("Exposure Events"), 0);
rg = e_widget_radio_group_new(&(cfdata->exposures));
ob = e_widget_radio_add(evas, _("Default"), E_CONFIG_EXPOSURES_DEFAULT, rg);
- e_widget_disabled_set(ob, !cfdata->enable_screensaver); // set state from saved config
cfdata->disable_list = eina_list_append(cfdata->disable_list, ob);
e_widget_framelist_object_append(of, ob);
ob = e_widget_radio_add(evas, _("Allow"), E_CONFIG_EXPOSURES_ALLOWED, rg);
- e_widget_disabled_set(ob, !cfdata->enable_screensaver); // set state from saved config
cfdata->disable_list = eina_list_append(cfdata->disable_list, ob);
e_widget_framelist_object_append(of, ob);
ob = e_widget_radio_add(evas, _("Don't Allow"), E_CONFIG_EXPOSURES_NOT_ALLOWED, rg);
- e_widget_disabled_set(ob, !cfdata->enable_screensaver); // set state from saved config
cfdata->disable_list = eina_list_append(cfdata->disable_list, ob);
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
// handler for enable/disable widget array
- e_widget_on_change_hook_set(xscreensaver_check, _cb_disable_check_list, cfdata->disable_list);
+ e_widget_on_change_hook_set(xscreensaver_check, _cb_disable_adv, cfdata);
+ _cb_disable_adv(cfdata, NULL);
return o;
}
-/*!
- * @param data A Evas_Object to chain together with the checkbox
- * @param obj A Evas_Object checkbox created with e_widget_check_add()
- */
static void
-_cb_disable_check(void *data, Evas_Object *obj)
+_cb_disable_basic(void *data, Evas_Object *obj)
{
- e_widget_disabled_set((Evas_Object *) data,
- !e_widget_check_checked_get(obj));
+ E_Config_Dialog_Data *cfdata = data;
+ Eina_Bool disable = !cfdata->enable_screensaver;
+
+ e_widget_disabled_set(cfdata->gui.basic.label, disable);
+ e_widget_disabled_set(cfdata->gui.basic.slider, disable);
}
-/*!
- * @param data A Eina_List of Evas_Object to chain widgets together with the checkbox
- * @param obj A Evas_Object checkbox created with e_widget_check_add()
- */
static void
-_cb_disable_check_list(void *data, Evas_Object *obj)
+_cb_disable_adv(void *data, Evas_Object *obj __UNUSED__)
{
- Eina_List *list = (Eina_List*) data;
- Eina_List *l;
+ E_Config_Dialog_Data *cfdata = data;
+ const Eina_List *l;
Evas_Object *o;
- EINA_LIST_FOREACH(list, l, o)
- e_widget_disabled_set(o, !e_widget_check_checked_get(obj));
+ EINA_LIST_FOREACH(cfdata->disable_list, l, o)
+ e_widget_disabled_set(o, !cfdata->enable_screensaver);
+
+ _cb_ask_presentation_changed(cfdata, NULL);
+}
+
+static void
+_cb_ask_presentation_changed(void *data, Evas_Object *obj __UNUSED__)
+{
+ E_Config_Dialog_Data *cfdata = data;
+ Eina_Bool disable;
+
+ disable = ((!cfdata->enable_screensaver) || (!cfdata->ask_presentation));
+
+ e_widget_disabled_set(cfdata->gui.adv.ask_presentation_label, disable);
+ e_widget_disabled_set(cfdata->gui.adv.ask_presentation_slider, disable);
}