Ask to enter presentation mode.

If you deactivate screensaver (ie: move mouse) or unlock desklock
within some given threshold, ask user if he would like to enter
presentation mode or even if should increase timeout to next event.

This is also useful when at the office and you quickly move mouse in
order to keep your explanation. If you know your explanation is short,
just hit "increase timeout", otherwise "Yes" to increase timeout.

Increase timeout is a multiplier that will increment the factor on
each dialog answer.

There is an option to stop asking. This can be changed in "Advanced"
versions of screensaver and desklock dialogs.



SVN revision: 40414
This commit is contained in:
Gustavo Sverzut Barbieri 2009-04-27 02:54:43 +00:00
parent f7b1ad0f9b
commit ddd175a2f2
16 changed files with 459 additions and 48 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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);

View File

@ -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

View File

@ -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.<br><br>"
"Would you like to enabe <b>presentation</b> 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;
}

View File

@ -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;

View File

@ -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
{

View File

@ -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.<br><br>"
"Would you like to enabe <b>presentation</b> 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;

View File

@ -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)
{

View File

@ -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

View File

@ -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);
}

View File

@ -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);
}