Patch from rubenbb to fix ticket #562 (dpms being turned off by

fullscreen windows).

I modified this patch slightly. Removed some unused handlers. limits.h
is already included in e.h, so no need to reinclude it. Fixed formatting.



SVN revision: 50356
This commit is contained in:
Christopher Michael 2010-07-18 19:06:00 +00:00
parent 3bc9491c92
commit 5a7b450c04
4 changed files with 299 additions and 202 deletions

View File

@ -699,6 +699,7 @@ EAPI void
e_border_desk_set(E_Border *bd, E_Desk *desk)
{
E_Event_Border_Desk_Set *ev;
E_Desk *old_desk;
E_OBJECT_CHECK(bd);
E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
@ -711,6 +712,7 @@ e_border_desk_set(E_Border *bd, E_Desk *desk)
bd->desk->fullscreen_borders--;
desk->fullscreen_borders++;
}
old_desk = bd->desk;
bd->desk = desk;
e_border_zone_set(bd, desk->zone);
@ -721,8 +723,8 @@ e_border_desk_set(E_Border *bd, E_Desk *desk)
ev->border = bd;
e_object_ref(E_OBJECT(bd));
// e_object_breadcrumb_add(E_OBJECT(bd), "border_desk_set_event");
ev->desk = desk;
e_object_ref(E_OBJECT(desk));
ev->desk = old_desk;
e_object_ref(E_OBJECT(old_desk));
ecore_event_add(E_EVENT_BORDER_DESK_SET, ev, _e_border_event_border_desk_set_free, NULL);
if (bd->ignore_first_unmap != 1)
@ -2458,6 +2460,7 @@ e_border_iconify(E_Border *bd)
{
bd->iconic = 1;
e_border_hide(bd, 1);
if (bd->fullscreen) bd->desk->fullscreen_borders--;
edje_object_signal_emit(bd->bg_object, "e,action,iconify", "e");
}
iconic = 1;
@ -2498,6 +2501,7 @@ e_border_uniconify(E_Border *bd)
if (bd->iconic)
{
bd->iconic = 0;
if (bd->fullscreen) bd->desk->fullscreen_borders++;
desk = e_desk_current_get(bd->desk->zone);
e_border_desk_set(bd, desk);
e_border_raise(bd);

View File

@ -5,7 +5,6 @@
#ifdef HAVE_PAM
# include <security/pam_appl.h>
# include <pwd.h>
# include <limits.h>
#endif
#define E_DESKLOCK_STATE_DEFAULT 0
@ -38,21 +37,23 @@ struct _E_Desklock_Data
char passwd[PASSWD_LEN];
int state;
};
#ifdef HAVE_PAM
struct _E_Desklock_Auth
{
struct {
struct pam_conv conv;
pam_handle_t *handle;
} pam;
struct
{
struct pam_conv conv;
pam_handle_t *handle;
} pam;
char user[PATH_MAX];
char passwd[PATH_MAX];
};
#endif
static E_Desklock_Data *edd = NULL;
static E_Zone *last_active_zone = NULL;
static E_Desklock_Data *edd = NULL;
static E_Zone *last_active_zone = NULL;
#ifdef HAVE_PAM
static Ecore_Event_Handler *_e_desklock_exit_handler = NULL;
static pid_t _e_desklock_child_pid = -1;
@ -66,14 +67,16 @@ static E_Dialog *_e_desklock_ask_presentation_dia = NULL;
static int _e_desklock_ask_presentation_count = 0;
static Ecore_Event_Handler *_e_desklock_handler_border_fullscreen = NULL;
static Ecore_Event_Handler *_e_desklock_handler_border_unfullscreen = NULL;
static Ecore_Event_Handler *_e_desklock_handler_border_remove = NULL;
static Ecore_Event_Handler *_e_desklock_handler_border_iconify = NULL;
static Ecore_Event_Handler *_e_desklock_handler_border_uniconify = NULL;
static Ecore_Event_Handler *_e_desklock_handler_border_desk_set = NULL;
static Ecore_Event_Handler *_e_desklock_handler_desk_show = NULL;
static int _e_desklock_fullscreen_count = 0;
/***********************************************************************/
static Eina_Bool _e_desklock_cb_key_down(void *data, int type, void *event);
static Eina_Bool _e_desklock_cb_mouse_down(void *data, int type, void *event);
static Eina_Bool _e_desklock_cb_mouse_up(void *data, int type, void *event);
static Eina_Bool _e_desklock_cb_mouse_wheel(void *data, int type, void *event);
static Eina_Bool _e_desklock_cb_mouse_move(void *data, int type, void *event);
static Eina_Bool _e_desklock_cb_custom_desklock_exit(void *data, int type, void *event);
static Eina_Bool _e_desklock_cb_idle_poller(void *data);
@ -82,7 +85,7 @@ static void _e_desklock_null(void);
static void _e_desklock_passwd_update(void);
static void _e_desklock_backspace(void);
static void _e_desklock_delete(void);
static int _e_desklock_zone_num_get(void);
static int _e_desklock_zone_num_get(void);
static int _e_desklock_check_auth(void);
static void _e_desklock_state_set(int state);
@ -96,8 +99,9 @@ static char *_desklock_auth_get_current_host(void);
#endif
static void _e_desklock_ask_presentation_mode(void);
static Eina_Bool _e_desklock_handler_border_fullscreen_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__);
static Eina_Bool _e_desklock_handler_border_unfullscreen_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__);
static Eina_Bool _e_desklock_handler_border_fullscreen_check_cb(void *data __UNUSED__, int type __UNUSED__, void *event);
static Eina_Bool _e_desklock_handler_border_desk_set_cb(void *data __UNUSED__, int type __UNUSED__, void *event);
static Eina_Bool _e_desklock_handler_desk_show_cb(void *data __UNUSED__, int type __UNUSED__, void *event);
EAPI int E_EVENT_DESKLOCK = 0;
@ -110,11 +114,31 @@ e_desklock_init(void)
if (!_e_desklock_handler_border_fullscreen)
_e_desklock_handler_border_fullscreen = ecore_event_handler_add
(E_EVENT_BORDER_FULLSCREEN, _e_desklock_handler_border_fullscreen_cb, NULL);
(E_EVENT_BORDER_FULLSCREEN, _e_desklock_handler_border_fullscreen_check_cb, NULL);
if (!_e_desklock_handler_border_unfullscreen)
_e_desklock_handler_border_unfullscreen = ecore_event_handler_add
(E_EVENT_BORDER_UNFULLSCREEN, _e_desklock_handler_border_unfullscreen_cb, NULL);
(E_EVENT_BORDER_UNFULLSCREEN, _e_desklock_handler_border_fullscreen_check_cb, NULL);
if (!_e_desklock_handler_border_remove)
_e_desklock_handler_border_remove = ecore_event_handler_add
(E_EVENT_BORDER_REMOVE, _e_desklock_handler_border_fullscreen_check_cb, NULL);
if (!_e_desklock_handler_border_iconify)
_e_desklock_handler_border_iconify = ecore_event_handler_add
(E_EVENT_BORDER_ICONIFY, _e_desklock_handler_border_fullscreen_check_cb, NULL);
if (!_e_desklock_handler_border_uniconify)
_e_desklock_handler_border_uniconify = ecore_event_handler_add
(E_EVENT_BORDER_UNICONIFY, _e_desklock_handler_border_fullscreen_check_cb, NULL);
if (!_e_desklock_handler_border_desk_set)
_e_desklock_handler_border_desk_set = ecore_event_handler_add
(E_EVENT_BORDER_DESK_SET, _e_desklock_handler_border_desk_set_cb, NULL);
if (!_e_desklock_handler_desk_show)
_e_desklock_handler_desk_show = ecore_event_handler_add
(E_EVENT_DESK_SHOW, _e_desklock_handler_desk_show_cb, NULL);
if (e_config->desklock_background)
e_filereg_register(e_config->desklock_background);
@ -139,6 +163,36 @@ e_desklock_shutdown(void)
_e_desklock_handler_border_unfullscreen = NULL;
}
if (_e_desklock_handler_border_remove)
{
ecore_event_handler_del(_e_desklock_handler_border_remove);
_e_desklock_handler_border_remove = NULL;
}
if (_e_desklock_handler_border_iconify)
{
ecore_event_handler_del(_e_desklock_handler_border_iconify);
_e_desklock_handler_border_iconify = NULL;
}
if (_e_desklock_handler_border_uniconify)
{
ecore_event_handler_del(_e_desklock_handler_border_uniconify);
_e_desklock_handler_border_uniconify = NULL;
}
if (_e_desklock_handler_border_desk_set)
{
ecore_event_handler_del(_e_desklock_handler_border_desk_set);
_e_desklock_handler_border_desk_set = NULL;
}
if (_e_desklock_handler_desk_show)
{
ecore_event_handler_del(_e_desklock_handler_desk_show);
_e_desklock_handler_desk_show = NULL;
}
e_desklock_hide();
if (e_config->desklock_background)
e_filereg_deregister(e_config->desklock_background);
@ -156,11 +210,9 @@ _user_wallpaper_get(void)
return e_config->desktop_default_background;
EINA_LIST_FOREACH(e_config->desktop_backgrounds, l, cdbg)
if (cdbg->file)
return cdbg->file;
if (cdbg->file) return cdbg->file;
return e_theme_edje_file_get("base/theme/desklock",
"e/desklock/background");
return e_theme_edje_file_get("base/theme/desklock", "e/desklock/background");
}
EAPI int
@ -175,24 +227,24 @@ e_desklock_show_autolocked(void)
EAPI int
e_desklock_show(void)
{
Eina_List *managers, *l, *l2, *l3;
E_Manager *man;
E_Desklock_Popup_Data *edp;
Evas_Coord mw, mh;
E_Zone *current_zone;
int zone_counter;
int total_zone_num;
E_Event_Desklock *ev;
Eina_List *managers, *l, *l2, *l3;
E_Manager *man;
E_Desklock_Popup_Data *edp;
Evas_Coord mw, mh;
E_Zone *current_zone;
int zone_counter, total_zone_num;
E_Event_Desklock *ev;
if (_e_custom_desklock_exe) return 0;
if (e_config->desklock_use_custom_desklock)
{
_e_custom_desklock_exe_handler = ecore_event_handler_add(ECORE_EXE_EVENT_DEL,
_e_desklock_cb_custom_desklock_exit,
NULL);
_e_custom_desklock_exe_handler =
ecore_event_handler_add(ECORE_EXE_EVENT_DEL,
_e_desklock_cb_custom_desklock_exit, NULL);
e_util_library_path_strip();
_e_custom_desklock_exe = ecore_exe_run(e_config->desklock_custom_desklock_cmd, NULL);
_e_custom_desklock_exe =
ecore_exe_run(e_config->desklock_custom_desklock_cmd, NULL);
e_util_library_path_restore();
return 1;
}
@ -225,8 +277,8 @@ e_desklock_show(void)
edd = E_NEW(E_Desklock_Data, 1);
if (!edd) return 0;
edd->elock_wnd = ecore_x_window_input_new(e_manager_current_get()->root,
0, 0, 1, 1);
edd->elock_wnd =
ecore_x_window_input_new(e_manager_current_get()->root, 0, 0, 1, 1);
ecore_x_window_show(edd->elock_wnd);
managers = e_manager_list();
if (!e_grabinput_get(edd->elock_wnd, 0, edd->elock_wnd))
@ -268,8 +320,7 @@ e_desklock_show(void)
"has grabbed either the keyboard or the mouse or both<br>"
"and their grab is unable to be broken."));
ecore_x_window_free(edd->elock_wnd);
free(edd);
edd = NULL;
E_FREE(edd);
return 0;
}
works:
@ -282,9 +333,11 @@ e_desklock_show(void)
EINA_LIST_FOREACH(managers, l, man)
{
E_Container *con;
EINA_LIST_FOREACH(man->containers, l2, con)
{
E_Zone *zone;
EINA_LIST_FOREACH(con->zones, l3, zone)
{
edp = E_NEW(E_Desklock_Popup_Data, 1);
@ -303,9 +356,9 @@ e_desklock_show(void)
if ((!e_config->desklock_background) ||
(!strcmp(e_config->desklock_background, "theme_desklock_background")))
{
e_theme_edje_object_set(edp->bg_object,
"base/theme/desklock",
"e/desklock/background");
e_theme_edje_object_set(edp->bg_object,
"base/theme/desklock",
"e/desklock/background");
}
else if (!strcmp(e_config->desklock_background, "theme_background"))
{
@ -324,18 +377,18 @@ e_desklock_show(void)
if (e_util_edje_collection_exists(f, "e/desklock/background"))
{
edje_object_file_set(edp->bg_object, f,
"e/desklock/background");
edje_object_file_set(edp->bg_object, f,
"e/desklock/background");
}
else
{
if (!edje_object_file_set(edp->bg_object,
f, "e/desktop/background"))
{
edje_object_file_set(edp->bg_object,
e_theme_edje_file_get("base/theme/desklock",
"e/desklock/background"),
"e/desklock/background");
edje_object_file_set(edp->bg_object,
e_theme_edje_file_get("base/theme/desklock",
"e/desklock/background"),
"e/desklock/background");
}
}
}
@ -374,7 +427,6 @@ e_desklock_show(void)
}
else
evas_object_show(edp->login_box);
/**/
e_popup_edje_bg_object_set(edp->popup_wnd, edp->bg_object);
evas_event_thaw(edp->popup_wnd->evas);
@ -389,24 +441,20 @@ e_desklock_show(void)
}
/* handlers */
edd->handlers = eina_list_append(edd->handlers,
ecore_event_handler_add(ECORE_EVENT_KEY_DOWN,
_e_desklock_cb_key_down, NULL));
edd->handlers = eina_list_append(edd->handlers,
ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN,
_e_desklock_cb_mouse_down, NULL));
edd->handlers = eina_list_append(edd->handlers,
ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_UP,
_e_desklock_cb_mouse_up, NULL));
edd->handlers = eina_list_append(edd->handlers,
ecore_event_handler_add(ECORE_EVENT_MOUSE_WHEEL,
_e_desklock_cb_mouse_wheel,
NULL));
if ((total_zone_num > 1) && (e_config->desklock_login_box_zone == -2))
edd->handlers = eina_list_append(edd->handlers,
ecore_event_handler_add(ECORE_EVENT_MOUSE_MOVE,
_e_desklock_cb_mouse_move,
NULL));
edd->handlers =
eina_list_append(edd->handlers,
ecore_event_handler_add(ECORE_EVENT_KEY_DOWN,
_e_desklock_cb_key_down, NULL));
if ((total_zone_num > 1) && (e_config->desklock_login_box_zone == -2))
{
edd->handlers =
eina_list_append(edd->handlers,
ecore_event_handler_add(ECORE_EVENT_MOUSE_MOVE,
_e_desklock_cb_mouse_move,
NULL));
}
_e_desklock_passwd_update();
ev = E_NEW(E_Event_Desklock, 1);
@ -419,7 +467,7 @@ EAPI void
e_desklock_hide(void)
{
E_Desklock_Popup_Data *edp;
E_Event_Desklock *ev;
E_Event_Desklock *ev;
if ((!edd) && (!_e_custom_desklock_exe)) return;
@ -483,7 +531,9 @@ static Eina_Bool
_e_desklock_cb_key_down(void *data __UNUSED__, int type __UNUSED__, void *event)
{
Ecore_Event_Key *ev = event;
if (ev->window != edd->elock_wnd || edd->state == E_DESKLOCK_STATE_CHECKING) return 1;
if ((ev->window != edd->elock_wnd) ||
(edd->state == E_DESKLOCK_STATE_CHECKING)) return 1;
if (!strcmp(ev->key, "Escape"))
;
@ -495,7 +545,8 @@ _e_desklock_cb_key_down(void *data __UNUSED__, int type __UNUSED__, void *event)
_e_desklock_backspace();
else if (!strcmp(ev->key, "Delete"))
_e_desklock_delete();
else if (!strcmp(ev->key, "u") && (ev->modifiers & ECORE_EVENT_MODIFIER_CTRL))
else if ((!strcmp(ev->key, "u") &&
(ev->modifiers & ECORE_EVENT_MODIFIER_CTRL)))
_e_desklock_null();
else
{
@ -513,24 +564,6 @@ _e_desklock_cb_key_down(void *data __UNUSED__, int type __UNUSED__, void *event)
return ECORE_CALLBACK_PASS_ON;
}
static Eina_Bool
_e_desklock_cb_mouse_down(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__)
{
return ECORE_CALLBACK_PASS_ON;
}
static Eina_Bool
_e_desklock_cb_mouse_up(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__)
{
return ECORE_CALLBACK_PASS_ON;
}
static Eina_Bool
_e_desklock_cb_mouse_wheel(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__)
{
return ECORE_CALLBACK_PASS_ON;
}
static Eina_Bool
_e_desklock_cb_mouse_move(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__)
{
@ -570,10 +603,8 @@ _e_desklock_passwd_update(void)
*pp = 0;
EINA_LIST_FOREACH(edd->elock_wnd_list, l, edp)
{
edje_object_part_text_set(edp->login_box, "e.text.password",
passwd_hidden);
}
edje_object_part_text_set(edp->login_box, "e.text.password",
passwd_hidden);
}
static void
@ -620,9 +651,7 @@ _e_desklock_zone_num_get(void)
{
E_Container *con;
EINA_LIST_FOREACH(man->containers, l2, con)
{
num += eina_list_count(con->zones);
}
num += eina_list_count(con->zones);
}
return num;
@ -694,6 +723,7 @@ static Eina_Bool
_e_desklock_cb_exit(void *data __UNUSED__, int type __UNUSED__, void *event)
{
Ecore_Exe_Event_Del *ev = event;
if (ev->pid == _e_desklock_child_pid)
{
_e_desklock_child_pid = -1;
@ -723,7 +753,8 @@ _e_desklock_cb_exit(void *data __UNUSED__, int type __UNUSED__, void *event)
/* security - null out passwd string once we are done with it */
_e_desklock_null();
}
if (_e_desklock_exit_handler) ecore_event_handler_del(_e_desklock_exit_handler);
if (_e_desklock_exit_handler)
ecore_event_handler_del(_e_desklock_exit_handler);
_e_desklock_exit_handler = NULL;
}
return ECORE_CALLBACK_PASS_ON;
@ -845,16 +876,16 @@ _desklock_pam_init(E_Desklock_Auth *da)
if ((pamerr = pam_set_item(da->pam.handle, PAM_USER, current_user)) != PAM_SUCCESS)
{
free(current_user);
return pamerr;
free(current_user);
return pamerr;
}
current_host = _desklock_auth_get_current_host();
if ((pamerr = pam_set_item(da->pam.handle, PAM_RHOST, current_host)) != PAM_SUCCESS)
{
free(current_user);
free(current_host);
return pamerr;
free(current_user);
free(current_host);
return pamerr;
}
free(current_user);
@ -871,8 +902,7 @@ _desklock_auth_pam_conv(int num_msg, const struct pam_message **msg, struct pam_
reply = (struct pam_response *)malloc(sizeof(struct pam_response) *num_msg);
if (!reply)
return PAM_CONV_ERR;
if (!reply) return PAM_CONV_ERR;
for (replies = 0; replies < num_msg; replies++)
{
@ -911,6 +941,7 @@ static Eina_Bool
_e_desklock_cb_custom_desklock_exit(void *data __UNUSED__, int type __UNUSED__, void *event)
{
Ecore_Exe_Event_Del *ev = event;
if (ev->exe != _e_custom_desklock_exe) return ECORE_CALLBACK_PASS_ON;
if (ev->exit_code != 0)
@ -1032,62 +1063,70 @@ _e_desklock_ask_presentation_mode(void)
E_Container *con;
E_Dialog *dia;
if (_e_desklock_ask_presentation_dia)
return;
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;
if (!(man = e_manager_current_get())) return;
if (!(con = e_container_current_get(man))) return;
if (!(dia = e_dialog_new(con, "E", "_desklock_ask_presentation"))) 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 enable <b>presentation</b> mode and "
"temporarily disable screen saver, lock and power saving?"));
e_dialog_text_set(dia,
_("You unlocked desktop too fast.<br><br>"
"Would you like to enable <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_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_widget_list_homogeneous_set(dia->box_object, 0);
e_win_centered_set(dia->win, 1);
e_dialog_show(dia);
evas_object_event_callback_add
(dia->bg_object, EVAS_CALLBACK_KEY_DOWN,
_e_desklock_ask_presentation_key_down, dia);
evas_object_event_callback_add(dia->bg_object, EVAS_CALLBACK_KEY_DOWN,
_e_desklock_ask_presentation_key_down, dia);
_e_desklock_ask_presentation_dia = dia;
}
static Eina_Bool
_e_desklock_handler_border_fullscreen_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__)
_e_desklock_handler_border_fullscreen_check_cb(void *data __UNUSED__, int type __UNUSED__, void *event)
{
_e_desklock_fullscreen_count++;
if (_e_desklock_fullscreen_count == 1) e_desklock_init();
E_Event_Border_Fullscreen *ev = event;
_e_desklock_fullscreen_count = ev->border->desk->fullscreen_borders;
e_desklock_init();
return ECORE_CALLBACK_PASS_ON;
}
static Eina_Bool
_e_desklock_handler_border_unfullscreen_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__)
_e_desklock_handler_border_desk_set_cb(void *data __UNUSED__, int type __UNUSED__, void *event)
{
_e_desklock_fullscreen_count--;
if (_e_desklock_fullscreen_count == 0) e_desklock_init();
else if (_e_desklock_fullscreen_count < 0) _e_desklock_fullscreen_count = 0;
E_Event_Border_Desk_Set *ev = event;
if (ev->border->desk->visible)
_e_desklock_fullscreen_count = ev->border->desk->fullscreen_borders;
else if (ev->desk->visible)
_e_desklock_fullscreen_count = ev->desk->fullscreen_borders;
e_desklock_init();
return ECORE_CALLBACK_PASS_ON;
}
static Eina_Bool
_e_desklock_handler_desk_show_cb(void *data __UNUSED__, int type __UNUSED__, void *event)
{
E_Event_Desk_Show *ev = event;
_e_desklock_fullscreen_count = ev->desk->fullscreen_borders;
e_desklock_init();
return ECORE_CALLBACK_PASS_ON;
}

View File

@ -7,6 +7,10 @@ static Ecore_Event_Handler *_e_dpms_handler_config_mode = NULL;
static Ecore_Event_Handler *_e_dpms_handler_border_fullscreen = NULL;
static Ecore_Event_Handler *_e_dpms_handler_border_unfullscreen = NULL;
static Ecore_Event_Handler *_e_dpms_handler_border_remove = NULL;
static Ecore_Event_Handler *_e_dpms_handler_border_iconify = NULL;
static Ecore_Event_Handler *_e_dpms_handler_border_uniconify = NULL;
static Ecore_Event_Handler *_e_dpms_handler_border_desk_set = NULL;
static Ecore_Event_Handler *_e_dpms_handler_desk_show = NULL;
static int _e_dpms_fullscreen_count = 0;
static Eina_Bool
@ -17,45 +21,46 @@ _e_dpms_handler_config_mode_cb(void *data __UNUSED__, int type __UNUSED__, void
}
static Eina_Bool
_e_dpms_handler_border_fullscreen_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__)
_e_dpms_handler_border_fullscreen_check_cb(void *data __UNUSED__, int type __UNUSED__, void *event)
{
_e_dpms_fullscreen_count++;
printf("incremented fs_count: %d\n", _e_dpms_fullscreen_count);
if (_e_dpms_fullscreen_count == 1) e_dpms_init();
E_Event_Border_Fullscreen *ev = event;
_e_dpms_fullscreen_count = ev->border->desk->fullscreen_borders;
e_dpms_init();
return ECORE_CALLBACK_PASS_ON;
}
static Eina_Bool
_e_dpms_handler_border_unfullscreen_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__)
_e_dpms_handler_border_desk_set_cb(void *data __UNUSED__, int type __UNUSED__, void *event)
{
_e_dpms_fullscreen_count--;
printf("decremented fs_count: %d\n", _e_dpms_fullscreen_count);
if (_e_dpms_fullscreen_count == 0) e_dpms_init();
else if (_e_dpms_fullscreen_count < 0) _e_dpms_fullscreen_count = 0;
E_Event_Border_Desk_Set *ev = event;
if (ev->border->desk->visible)
_e_dpms_fullscreen_count = ev->border->desk->fullscreen_borders;
else if (ev->desk->visible)
_e_dpms_fullscreen_count = ev->desk->fullscreen_borders;
e_dpms_init();
return ECORE_CALLBACK_PASS_ON;
}
static Eina_Bool
_e_dpms_handler_border_remove_cb(void *data __UNUSED__, int type __UNUSED__, void *event)
_e_dpms_handler_desk_show_cb(void *data __UNUSED__, int type __UNUSED__, void *event)
{
E_Event_Border_Remove *ev = event;
E_Event_Desk_Show *ev = event;
if (ev->border->fullscreen) {
_e_dpms_fullscreen_count--;
printf("decremented fs_count from remove: %d\n", _e_dpms_fullscreen_count);
if (_e_dpms_fullscreen_count == 0) e_dpms_init();
else if (_e_dpms_fullscreen_count < 0) _e_dpms_fullscreen_count = 0;
}
_e_dpms_fullscreen_count = ev->desk->fullscreen_borders;
e_dpms_init();
return ECORE_CALLBACK_PASS_ON;
}
EAPI int
e_dpms_init(void)
{
int standby=0, suspend=0, off=0;
int enabled = ((e_config->dpms_enable) && (!e_config->mode.presentation) &&
(_e_dpms_fullscreen_count <= 0));
printf("checking fs_count and if enabled: %d, %d\n", _e_dpms_fullscreen_count, enabled);
int standby = 0, suspend = 0, off = 0;
int enabled;
enabled = ((e_config->dpms_enable) && (!e_config->mode.presentation) &&
(_e_dpms_fullscreen_count <= 0));
if (!_e_dpms_handler_config_mode)
_e_dpms_handler_config_mode = ecore_event_handler_add
@ -63,30 +68,45 @@ printf("checking fs_count and if enabled: %d, %d\n", _e_dpms_fullscreen_count, e
if (!_e_dpms_handler_border_fullscreen)
_e_dpms_handler_border_fullscreen = ecore_event_handler_add
(E_EVENT_BORDER_FULLSCREEN, _e_dpms_handler_border_fullscreen_cb, NULL);
(E_EVENT_BORDER_FULLSCREEN, _e_dpms_handler_border_fullscreen_check_cb, NULL);
if (!_e_dpms_handler_border_unfullscreen)
_e_dpms_handler_border_unfullscreen = ecore_event_handler_add
(E_EVENT_BORDER_UNFULLSCREEN, _e_dpms_handler_border_unfullscreen_cb, NULL);
(E_EVENT_BORDER_UNFULLSCREEN, _e_dpms_handler_border_fullscreen_check_cb, NULL);
if (!_e_dpms_handler_border_remove)
_e_dpms_handler_border_remove = ecore_event_handler_add
(E_EVENT_BORDER_REMOVE, _e_dpms_handler_border_remove_cb, NULL);
(E_EVENT_BORDER_REMOVE, _e_dpms_handler_border_fullscreen_check_cb, NULL);
if (!_e_dpms_handler_border_iconify)
_e_dpms_handler_border_iconify = ecore_event_handler_add
(E_EVENT_BORDER_ICONIFY, _e_dpms_handler_border_fullscreen_check_cb, NULL);
if (!_e_dpms_handler_border_uniconify)
_e_dpms_handler_border_uniconify = ecore_event_handler_add
(E_EVENT_BORDER_UNICONIFY, _e_dpms_handler_border_fullscreen_check_cb, NULL);
if (!_e_dpms_handler_border_desk_set)
_e_dpms_handler_border_desk_set = ecore_event_handler_add
(E_EVENT_BORDER_DESK_SET, _e_dpms_handler_border_desk_set_cb, NULL);
if (!_e_dpms_handler_desk_show)
_e_dpms_handler_desk_show = ecore_event_handler_add
(E_EVENT_DESK_SHOW, _e_dpms_handler_desk_show_cb, NULL);
ecore_x_dpms_enabled_set(enabled);
if (!enabled)
return 1;
if (!enabled) return 1;
if (e_config->dpms_standby_enable)
standby = e_config->dpms_standby_timeout;
if (e_config->dpms_suspend_enable)
suspend = e_config->dpms_suspend_timeout;
if (e_config->dpms_off_enable)
off = e_config->dpms_off_timeout;
ecore_x_dpms_timeouts_set(standby, suspend, off);
return 1;
}

View File

@ -7,6 +7,11 @@ static Ecore_Event_Handler *_e_screensaver_handler_config_mode = NULL;
static Ecore_Event_Handler *_e_screensaver_handler_screensaver_notify = NULL;
static Ecore_Event_Handler *_e_screensaver_handler_border_fullscreen = NULL;
static Ecore_Event_Handler *_e_screensaver_handler_border_unfullscreen = NULL;
static Ecore_Event_Handler *_e_screensaver_handler_border_remove = NULL;
static Ecore_Event_Handler *_e_screensaver_handler_border_iconify = NULL;
static Ecore_Event_Handler *_e_screensaver_handler_border_uniconify = NULL;
static Ecore_Event_Handler *_e_screensaver_handler_border_desk_set = NULL;
static Ecore_Event_Handler *_e_screensaver_handler_desk_show = NULL;
static E_Dialog *_e_screensaver_ask_presentation_dia = NULL;
static int _e_screensaver_ask_presentation_count = 0;
static int _e_screensaver_fullscreen_count = 0;
@ -85,45 +90,37 @@ _e_screensaver_ask_presentation_mode(void)
E_Container *con;
E_Dialog *dia;
if (_e_screensaver_ask_presentation_dia)
return;
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;
if (!(man = e_manager_current_get())) return;
if (!(con = e_container_current_get(man))) return;
if (!(dia = e_dialog_new(con, "E", "_screensaver_ask_presentation"))) 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 enable <b>presentation</b> mode and "
"temporarily disable screen saver, lock and power saving?"));
e_dialog_text_set(dia,
_("You disabled screensaver too fast.<br><br>"
"Would you like to enable <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_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_widget_list_homogeneous_set(dia->box_object, 0);
e_win_centered_set(dia->win, 1);
e_dialog_show(dia);
evas_object_event_callback_add
(dia->bg_object, EVAS_CALLBACK_KEY_DOWN,
_e_screensaver_ask_presentation_key_down, dia);
evas_object_event_callback_add(dia->bg_object, EVAS_CALLBACK_KEY_DOWN,
_e_screensaver_ask_presentation_key_down, dia);
_e_screensaver_ask_presentation_dia = dia;
}
@ -142,6 +139,7 @@ _e_screensaver_handler_screensaver_notify_cb(void *data __UNUSED__, int type __U
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;
@ -153,19 +151,35 @@ _e_screensaver_handler_screensaver_notify_cb(void *data __UNUSED__, int type __U
}
static Eina_Bool
_e_screensaver_handler_border_fullscreen_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__)
_e_screensaver_handler_border_fullscreen_check_cb(void *data __UNUSED__, int type __UNUSED__, void *event)
{
_e_screensaver_fullscreen_count++;
if (_e_screensaver_fullscreen_count == 1) e_screensaver_init();
E_Event_Border_Fullscreen *ev = event;
_e_screensaver_fullscreen_count = ev->border->desk->fullscreen_borders;
e_screensaver_init();
return ECORE_CALLBACK_PASS_ON;
}
static Eina_Bool
_e_screensaver_handler_border_unfullscreen_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__)
_e_screensaver_handler_border_desk_set_cb(void *data __UNUSED__, int type __UNUSED__, void *event)
{
_e_screensaver_fullscreen_count--;
if (_e_screensaver_fullscreen_count == 0) e_screensaver_init();
else if (_e_screensaver_fullscreen_count < 0) _e_screensaver_fullscreen_count = 0;
E_Event_Border_Desk_Set *ev = event;
if (ev->border->desk->visible)
_e_screensaver_fullscreen_count = ev->border->desk->fullscreen_borders;
else if (ev->desk->visible)
_e_screensaver_fullscreen_count = ev->desk->fullscreen_borders;
e_screensaver_init();
return ECORE_CALLBACK_PASS_ON;
}
static Eina_Bool
_e_screensaver_handler_desk_show_cb(void *data __UNUSED__, int type __UNUSED__, void *event)
{
E_Event_Desk_Show *ev = event;
_e_screensaver_fullscreen_count = ev->desk->fullscreen_borders;
e_screensaver_init();
return ECORE_CALLBACK_PASS_ON;
}
@ -184,11 +198,31 @@ e_screensaver_init(void)
if (!_e_screensaver_handler_border_fullscreen)
_e_screensaver_handler_border_fullscreen = ecore_event_handler_add
(E_EVENT_BORDER_FULLSCREEN, _e_screensaver_handler_border_fullscreen_cb, NULL);
(E_EVENT_BORDER_FULLSCREEN, _e_screensaver_handler_border_fullscreen_check_cb, NULL);
if (!_e_screensaver_handler_border_unfullscreen)
_e_screensaver_handler_border_unfullscreen = ecore_event_handler_add
(E_EVENT_BORDER_UNFULLSCREEN, _e_screensaver_handler_border_unfullscreen_cb, NULL);
(E_EVENT_BORDER_UNFULLSCREEN, _e_screensaver_handler_border_fullscreen_check_cb, NULL);
if (!_e_screensaver_handler_border_remove)
_e_screensaver_handler_border_remove = ecore_event_handler_add
(E_EVENT_BORDER_REMOVE, _e_screensaver_handler_border_fullscreen_check_cb, NULL);
if (!_e_screensaver_handler_border_iconify)
_e_screensaver_handler_border_iconify = ecore_event_handler_add
(E_EVENT_BORDER_ICONIFY, _e_screensaver_handler_border_fullscreen_check_cb, NULL);
if (!_e_screensaver_handler_border_uniconify)
_e_screensaver_handler_border_uniconify = ecore_event_handler_add
(E_EVENT_BORDER_UNICONIFY, _e_screensaver_handler_border_fullscreen_check_cb, NULL);
if (!_e_screensaver_handler_border_desk_set)
_e_screensaver_handler_border_desk_set = ecore_event_handler_add
(E_EVENT_BORDER_DESK_SET, _e_screensaver_handler_border_desk_set_cb, NULL);
if (!_e_screensaver_handler_desk_show)
_e_screensaver_handler_desk_show = ecore_event_handler_add
(E_EVENT_DESK_SHOW, _e_screensaver_handler_desk_show_cb, NULL);
if ((e_config->screensaver_enable) && (!e_config->mode.presentation) &&
(_e_screensaver_fullscreen_count <= 0))