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";
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;
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;
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";
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;
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;
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";
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;
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;
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";
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;
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;
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";
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;
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;
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";
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;
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;
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);
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);
}
}
#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)
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);
}
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);
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);
/* 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
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
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;
/***********************************************************************/
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
}
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)
{
Eina_List *managers, *l, *l2, *l3;
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
{
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
if (!_e_desklock_user_idle)
{
_e_desklock_user_idle = 1;
- e_desklock_show();
+ e_desklock_show_autolocked();
}
}
else
/* 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;
+}
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;
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;
}
{
if (e_config->desklock_post_screensaver_time <= 1.0)
{
- e_desklock_show();
+ e_desklock_show_autolocked();
}
else
{
#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__)
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)
{
_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;
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)
{
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
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;
char *custom_lock_cmd;
int login_zone;
int zone;
+ int ask_presentation;
+ double ask_presentation_timeout;
struct {
struct {
Evas_Object *post_screensaver_label;
Evas_Object *post_screensaver_slider;
} basic;
+ struct {
+ Evas_Object *ask_presentation_label;
+ Evas_Object *ask_presentation_slider;
+ } adv;
} gui;
};
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 *
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"),
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);
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)
{
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
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);
+}
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
{
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 *
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 *
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();
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;
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);
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);
}