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

View File

@ -5,7 +5,6 @@
#ifdef HAVE_PAM #ifdef HAVE_PAM
# include <security/pam_appl.h> # include <security/pam_appl.h>
# include <pwd.h> # include <pwd.h>
# include <limits.h>
#endif #endif
#define E_DESKLOCK_STATE_DEFAULT 0 #define E_DESKLOCK_STATE_DEFAULT 0
@ -38,21 +37,23 @@ struct _E_Desklock_Data
char passwd[PASSWD_LEN]; char passwd[PASSWD_LEN];
int state; int state;
}; };
#ifdef HAVE_PAM #ifdef HAVE_PAM
struct _E_Desklock_Auth struct _E_Desklock_Auth
{ {
struct { struct
struct pam_conv conv; {
pam_handle_t *handle; struct pam_conv conv;
} pam; pam_handle_t *handle;
} pam;
char user[PATH_MAX]; char user[PATH_MAX];
char passwd[PATH_MAX]; char passwd[PATH_MAX];
}; };
#endif #endif
static E_Desklock_Data *edd = NULL; static E_Desklock_Data *edd = NULL;
static E_Zone *last_active_zone = NULL; static E_Zone *last_active_zone = NULL;
#ifdef HAVE_PAM #ifdef HAVE_PAM
static Ecore_Event_Handler *_e_desklock_exit_handler = NULL; static Ecore_Event_Handler *_e_desklock_exit_handler = NULL;
static pid_t _e_desklock_child_pid = -1; 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 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_fullscreen = NULL;
static Ecore_Event_Handler *_e_desklock_handler_border_unfullscreen = 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 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_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_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_custom_desklock_exit(void *data, int type, void *event);
static Eina_Bool _e_desklock_cb_idle_poller(void *data); 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_passwd_update(void);
static void _e_desklock_backspace(void); static void _e_desklock_backspace(void);
static void _e_desklock_delete(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 int _e_desklock_check_auth(void);
static void _e_desklock_state_set(int state); static void _e_desklock_state_set(int state);
@ -96,8 +99,9 @@ static char *_desklock_auth_get_current_host(void);
#endif #endif
static void _e_desklock_ask_presentation_mode(void); 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_fullscreen_check_cb(void *data __UNUSED__, int type __UNUSED__, void *event);
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_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; EAPI int E_EVENT_DESKLOCK = 0;
@ -110,11 +114,31 @@ e_desklock_init(void)
if (!_e_desklock_handler_border_fullscreen) if (!_e_desklock_handler_border_fullscreen)
_e_desklock_handler_border_fullscreen = ecore_event_handler_add _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) if (!_e_desklock_handler_border_unfullscreen)
_e_desklock_handler_border_unfullscreen = ecore_event_handler_add _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) if (e_config->desklock_background)
e_filereg_register(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; _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(); e_desklock_hide();
if (e_config->desklock_background) if (e_config->desklock_background)
e_filereg_deregister(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; return e_config->desktop_default_background;
EINA_LIST_FOREACH(e_config->desktop_backgrounds, l, cdbg) EINA_LIST_FOREACH(e_config->desktop_backgrounds, l, cdbg)
if (cdbg->file) if (cdbg->file) return cdbg->file;
return cdbg->file;
return e_theme_edje_file_get("base/theme/desklock", return e_theme_edje_file_get("base/theme/desklock", "e/desklock/background");
"e/desklock/background");
} }
EAPI int EAPI int
@ -175,24 +227,24 @@ e_desklock_show_autolocked(void)
EAPI int EAPI int
e_desklock_show(void) e_desklock_show(void)
{ {
Eina_List *managers, *l, *l2, *l3; Eina_List *managers, *l, *l2, *l3;
E_Manager *man; E_Manager *man;
E_Desklock_Popup_Data *edp; E_Desklock_Popup_Data *edp;
Evas_Coord mw, mh; Evas_Coord mw, mh;
E_Zone *current_zone; E_Zone *current_zone;
int zone_counter; int zone_counter, total_zone_num;
int total_zone_num; E_Event_Desklock *ev;
E_Event_Desklock *ev;
if (_e_custom_desklock_exe) return 0; if (_e_custom_desklock_exe) return 0;
if (e_config->desklock_use_custom_desklock) if (e_config->desklock_use_custom_desklock)
{ {
_e_custom_desklock_exe_handler = ecore_event_handler_add(ECORE_EXE_EVENT_DEL, _e_custom_desklock_exe_handler =
_e_desklock_cb_custom_desklock_exit, ecore_event_handler_add(ECORE_EXE_EVENT_DEL,
NULL); _e_desklock_cb_custom_desklock_exit, NULL);
e_util_library_path_strip(); 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(); e_util_library_path_restore();
return 1; return 1;
} }
@ -225,8 +277,8 @@ e_desklock_show(void)
edd = E_NEW(E_Desklock_Data, 1); edd = E_NEW(E_Desklock_Data, 1);
if (!edd) return 0; if (!edd) return 0;
edd->elock_wnd = ecore_x_window_input_new(e_manager_current_get()->root, edd->elock_wnd =
0, 0, 1, 1); ecore_x_window_input_new(e_manager_current_get()->root, 0, 0, 1, 1);
ecore_x_window_show(edd->elock_wnd); ecore_x_window_show(edd->elock_wnd);
managers = e_manager_list(); managers = e_manager_list();
if (!e_grabinput_get(edd->elock_wnd, 0, edd->elock_wnd)) 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>" "has grabbed either the keyboard or the mouse or both<br>"
"and their grab is unable to be broken.")); "and their grab is unable to be broken."));
ecore_x_window_free(edd->elock_wnd); ecore_x_window_free(edd->elock_wnd);
free(edd); E_FREE(edd);
edd = NULL;
return 0; return 0;
} }
works: works:
@ -282,9 +333,11 @@ e_desklock_show(void)
EINA_LIST_FOREACH(managers, l, man) EINA_LIST_FOREACH(managers, l, man)
{ {
E_Container *con; E_Container *con;
EINA_LIST_FOREACH(man->containers, l2, con) EINA_LIST_FOREACH(man->containers, l2, con)
{ {
E_Zone *zone; E_Zone *zone;
EINA_LIST_FOREACH(con->zones, l3, zone) EINA_LIST_FOREACH(con->zones, l3, zone)
{ {
edp = E_NEW(E_Desklock_Popup_Data, 1); edp = E_NEW(E_Desklock_Popup_Data, 1);
@ -303,9 +356,9 @@ e_desklock_show(void)
if ((!e_config->desklock_background) || if ((!e_config->desklock_background) ||
(!strcmp(e_config->desklock_background, "theme_desklock_background"))) (!strcmp(e_config->desklock_background, "theme_desklock_background")))
{ {
e_theme_edje_object_set(edp->bg_object, e_theme_edje_object_set(edp->bg_object,
"base/theme/desklock", "base/theme/desklock",
"e/desklock/background"); "e/desklock/background");
} }
else if (!strcmp(e_config->desklock_background, "theme_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")) if (e_util_edje_collection_exists(f, "e/desklock/background"))
{ {
edje_object_file_set(edp->bg_object, f, edje_object_file_set(edp->bg_object, f,
"e/desklock/background"); "e/desklock/background");
} }
else else
{ {
if (!edje_object_file_set(edp->bg_object, if (!edje_object_file_set(edp->bg_object,
f, "e/desktop/background")) f, "e/desktop/background"))
{ {
edje_object_file_set(edp->bg_object, edje_object_file_set(edp->bg_object,
e_theme_edje_file_get("base/theme/desklock", e_theme_edje_file_get("base/theme/desklock",
"e/desklock/background"), "e/desklock/background"),
"e/desklock/background"); "e/desklock/background");
} }
} }
} }
@ -374,7 +427,6 @@ e_desklock_show(void)
} }
else else
evas_object_show(edp->login_box); evas_object_show(edp->login_box);
/**/
e_popup_edje_bg_object_set(edp->popup_wnd, edp->bg_object); e_popup_edje_bg_object_set(edp->popup_wnd, edp->bg_object);
evas_event_thaw(edp->popup_wnd->evas); evas_event_thaw(edp->popup_wnd->evas);
@ -389,24 +441,20 @@ e_desklock_show(void)
} }
/* handlers */ /* handlers */
edd->handlers = eina_list_append(edd->handlers, edd->handlers =
ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, eina_list_append(edd->handlers,
_e_desklock_cb_key_down, NULL)); ecore_event_handler_add(ECORE_EVENT_KEY_DOWN,
edd->handlers = eina_list_append(edd->handlers, _e_desklock_cb_key_down, NULL));
ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN,
_e_desklock_cb_mouse_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_BUTTON_UP, edd->handlers =
_e_desklock_cb_mouse_up, NULL)); eina_list_append(edd->handlers,
edd->handlers = eina_list_append(edd->handlers, ecore_event_handler_add(ECORE_EVENT_MOUSE_MOVE,
ecore_event_handler_add(ECORE_EVENT_MOUSE_WHEEL, _e_desklock_cb_mouse_move,
_e_desklock_cb_mouse_wheel, NULL));
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(); _e_desklock_passwd_update();
ev = E_NEW(E_Event_Desklock, 1); ev = E_NEW(E_Event_Desklock, 1);
@ -419,7 +467,7 @@ EAPI void
e_desklock_hide(void) e_desklock_hide(void)
{ {
E_Desklock_Popup_Data *edp; E_Desklock_Popup_Data *edp;
E_Event_Desklock *ev; E_Event_Desklock *ev;
if ((!edd) && (!_e_custom_desklock_exe)) return; 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) _e_desklock_cb_key_down(void *data __UNUSED__, int type __UNUSED__, void *event)
{ {
Ecore_Event_Key *ev = 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")) 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(); _e_desklock_backspace();
else if (!strcmp(ev->key, "Delete")) else if (!strcmp(ev->key, "Delete"))
_e_desklock_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(); _e_desklock_null();
else else
{ {
@ -513,24 +564,6 @@ _e_desklock_cb_key_down(void *data __UNUSED__, int type __UNUSED__, void *event)
return ECORE_CALLBACK_PASS_ON; 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 static Eina_Bool
_e_desklock_cb_mouse_move(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__) _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; *pp = 0;
EINA_LIST_FOREACH(edd->elock_wnd_list, l, edp) EINA_LIST_FOREACH(edd->elock_wnd_list, l, edp)
{ edje_object_part_text_set(edp->login_box, "e.text.password",
edje_object_part_text_set(edp->login_box, "e.text.password", passwd_hidden);
passwd_hidden);
}
} }
static void static void
@ -620,9 +651,7 @@ _e_desklock_zone_num_get(void)
{ {
E_Container *con; E_Container *con;
EINA_LIST_FOREACH(man->containers, l2, con) EINA_LIST_FOREACH(man->containers, l2, con)
{ num += eina_list_count(con->zones);
num += eina_list_count(con->zones);
}
} }
return num; return num;
@ -694,6 +723,7 @@ static Eina_Bool
_e_desklock_cb_exit(void *data __UNUSED__, int type __UNUSED__, void *event) _e_desklock_cb_exit(void *data __UNUSED__, int type __UNUSED__, void *event)
{ {
Ecore_Exe_Event_Del *ev = event; Ecore_Exe_Event_Del *ev = event;
if (ev->pid == _e_desklock_child_pid) if (ev->pid == _e_desklock_child_pid)
{ {
_e_desklock_child_pid = -1; _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 */ /* security - null out passwd string once we are done with it */
_e_desklock_null(); _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; _e_desklock_exit_handler = NULL;
} }
return ECORE_CALLBACK_PASS_ON; 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) if ((pamerr = pam_set_item(da->pam.handle, PAM_USER, current_user)) != PAM_SUCCESS)
{ {
free(current_user); free(current_user);
return pamerr; return pamerr;
} }
current_host = _desklock_auth_get_current_host(); current_host = _desklock_auth_get_current_host();
if ((pamerr = pam_set_item(da->pam.handle, PAM_RHOST, current_host)) != PAM_SUCCESS) if ((pamerr = pam_set_item(da->pam.handle, PAM_RHOST, current_host)) != PAM_SUCCESS)
{ {
free(current_user); free(current_user);
free(current_host); free(current_host);
return pamerr; return pamerr;
} }
free(current_user); 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); reply = (struct pam_response *)malloc(sizeof(struct pam_response) *num_msg);
if (!reply) if (!reply) return PAM_CONV_ERR;
return PAM_CONV_ERR;
for (replies = 0; replies < num_msg; replies++) 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) _e_desklock_cb_custom_desklock_exit(void *data __UNUSED__, int type __UNUSED__, void *event)
{ {
Ecore_Exe_Event_Del *ev = event; Ecore_Exe_Event_Del *ev = event;
if (ev->exe != _e_custom_desklock_exe) return ECORE_CALLBACK_PASS_ON; if (ev->exe != _e_custom_desklock_exe) return ECORE_CALLBACK_PASS_ON;
if (ev->exit_code != 0) if (ev->exit_code != 0)
@ -1032,62 +1063,70 @@ _e_desklock_ask_presentation_mode(void)
E_Container *con; E_Container *con;
E_Dialog *dia; E_Dialog *dia;
if (_e_desklock_ask_presentation_dia) if (_e_desklock_ask_presentation_dia) return;
return;
man = e_manager_current_get(); if (!(man = e_manager_current_get())) return;
if (!man) return; if (!(con = e_container_current_get(man))) return;
con = e_container_current_get(man); if (!(dia = e_dialog_new(con, "E", "_desklock_ask_presentation"))) return;
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_title_set(dia, _("Activate Presentation Mode?"));
e_dialog_icon_set(dia, "dialog-ask", 64); e_dialog_icon_set(dia, "dialog-ask", 64);
e_dialog_text_set e_dialog_text_set(dia,
(dia, _("You unlocked desktop too fast.<br><br>"
_("You unlocked desktop too fast.<br><br>" "Would you like to enable <b>presentation</b> mode and "
"Would you like to enable <b>presentation</b> mode and " "temporarily disable screen saver, lock and power saving?"));
"temporarily disable screen saver, lock and power saving?"));
e_object_del_attach_func_set e_object_del_attach_func_set(E_OBJECT(dia),
(E_OBJECT(dia), _e_desklock_ask_presentation_del); _e_desklock_ask_presentation_del);
e_dialog_button_add e_dialog_button_add(dia, _("Yes"), NULL,
(dia, _("Yes"), NULL, _e_desklock_ask_presentation_yes, NULL); _e_desklock_ask_presentation_yes, NULL);
e_dialog_button_add e_dialog_button_add(dia, _("No"), NULL,
(dia, _("No"), NULL, _e_desklock_ask_presentation_no, NULL); _e_desklock_ask_presentation_no, NULL);
e_dialog_button_add e_dialog_button_add(dia, _("No, but increase timeout"), NULL,
(dia, _("No, but increase timeout"), NULL, _e_desklock_ask_presentation_no_increase, NULL);
_e_desklock_ask_presentation_no_increase, NULL); e_dialog_button_add(dia, _("No, and stop asking"), NULL,
e_dialog_button_add _e_desklock_ask_presentation_no_forever, NULL);
(dia, _("No, and stop asking"), NULL,
_e_desklock_ask_presentation_no_forever, NULL);
e_dialog_button_focus_num(dia, 0); e_dialog_button_focus_num(dia, 0);
e_widget_list_homogeneous_set(dia->box_object, 0); e_widget_list_homogeneous_set(dia->box_object, 0);
e_win_centered_set(dia->win, 1); e_win_centered_set(dia->win, 1);
e_dialog_show(dia); e_dialog_show(dia);
evas_object_event_callback_add evas_object_event_callback_add(dia->bg_object, EVAS_CALLBACK_KEY_DOWN,
(dia->bg_object, EVAS_CALLBACK_KEY_DOWN, _e_desklock_ask_presentation_key_down, dia);
_e_desklock_ask_presentation_key_down, dia);
_e_desklock_ask_presentation_dia = dia; _e_desklock_ask_presentation_dia = dia;
} }
static Eina_Bool 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++; E_Event_Border_Fullscreen *ev = event;
if (_e_desklock_fullscreen_count == 1) e_desklock_init();
_e_desklock_fullscreen_count = ev->border->desk->fullscreen_borders;
e_desklock_init();
return ECORE_CALLBACK_PASS_ON; return ECORE_CALLBACK_PASS_ON;
} }
static Eina_Bool 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--; E_Event_Border_Desk_Set *ev = event;
if (_e_desklock_fullscreen_count == 0) e_desklock_init();
else if (_e_desklock_fullscreen_count < 0) _e_desklock_fullscreen_count = 0; 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; 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_fullscreen = NULL;
static Ecore_Event_Handler *_e_dpms_handler_border_unfullscreen = 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_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 int _e_dpms_fullscreen_count = 0;
static Eina_Bool static Eina_Bool
@ -17,45 +21,46 @@ _e_dpms_handler_config_mode_cb(void *data __UNUSED__, int type __UNUSED__, void
} }
static Eina_Bool 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++; E_Event_Border_Fullscreen *ev = event;
printf("incremented fs_count: %d\n", _e_dpms_fullscreen_count);
if (_e_dpms_fullscreen_count == 1) e_dpms_init(); _e_dpms_fullscreen_count = ev->border->desk->fullscreen_borders;
e_dpms_init();
return ECORE_CALLBACK_PASS_ON; return ECORE_CALLBACK_PASS_ON;
} }
static Eina_Bool 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--; E_Event_Border_Desk_Set *ev = event;
printf("decremented fs_count: %d\n", _e_dpms_fullscreen_count);
if (_e_dpms_fullscreen_count == 0) e_dpms_init(); if (ev->border->desk->visible)
else if (_e_dpms_fullscreen_count < 0) _e_dpms_fullscreen_count = 0; _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; return ECORE_CALLBACK_PASS_ON;
} }
static Eina_Bool 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 = ev->desk->fullscreen_borders;
_e_dpms_fullscreen_count--; e_dpms_init();
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;
}
return ECORE_CALLBACK_PASS_ON; return ECORE_CALLBACK_PASS_ON;
} }
EAPI int EAPI int
e_dpms_init(void) e_dpms_init(void)
{ {
int standby=0, suspend=0, off=0; int standby = 0, suspend = 0, off = 0;
int enabled = ((e_config->dpms_enable) && (!e_config->mode.presentation) && int enabled;
(_e_dpms_fullscreen_count <= 0));
printf("checking fs_count and if enabled: %d, %d\n", _e_dpms_fullscreen_count, enabled); enabled = ((e_config->dpms_enable) && (!e_config->mode.presentation) &&
(_e_dpms_fullscreen_count <= 0));
if (!_e_dpms_handler_config_mode) if (!_e_dpms_handler_config_mode)
_e_dpms_handler_config_mode = ecore_event_handler_add _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) if (!_e_dpms_handler_border_fullscreen)
_e_dpms_handler_border_fullscreen = ecore_event_handler_add _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) if (!_e_dpms_handler_border_unfullscreen)
_e_dpms_handler_border_unfullscreen = ecore_event_handler_add _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) if (!_e_dpms_handler_border_remove)
_e_dpms_handler_border_remove = ecore_event_handler_add _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); ecore_x_dpms_enabled_set(enabled);
if (!enabled) if (!enabled) return 1;
return 1;
if (e_config->dpms_standby_enable) if (e_config->dpms_standby_enable)
standby = e_config->dpms_standby_timeout; standby = e_config->dpms_standby_timeout;
if (e_config->dpms_suspend_enable) if (e_config->dpms_suspend_enable)
suspend = e_config->dpms_suspend_timeout; suspend = e_config->dpms_suspend_timeout;
if (e_config->dpms_off_enable) if (e_config->dpms_off_enable)
off = e_config->dpms_off_timeout; off = e_config->dpms_off_timeout;
ecore_x_dpms_timeouts_set(standby, suspend, off); ecore_x_dpms_timeouts_set(standby, suspend, off);
return 1; 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_screensaver_notify = NULL;
static Ecore_Event_Handler *_e_screensaver_handler_border_fullscreen = 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_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 E_Dialog *_e_screensaver_ask_presentation_dia = NULL;
static int _e_screensaver_ask_presentation_count = 0; static int _e_screensaver_ask_presentation_count = 0;
static int _e_screensaver_fullscreen_count = 0; static int _e_screensaver_fullscreen_count = 0;
@ -85,45 +90,37 @@ _e_screensaver_ask_presentation_mode(void)
E_Container *con; E_Container *con;
E_Dialog *dia; E_Dialog *dia;
if (_e_screensaver_ask_presentation_dia) if (_e_screensaver_ask_presentation_dia) return;
return;
man = e_manager_current_get(); if (!(man = e_manager_current_get())) return;
if (!man) return; if (!(con = e_container_current_get(man))) return;
con = e_container_current_get(man); if (!(dia = e_dialog_new(con, "E", "_screensaver_ask_presentation"))) return;
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_title_set(dia, _("Activate Presentation Mode?"));
e_dialog_icon_set(dia, "dialog-ask", 64); e_dialog_icon_set(dia, "dialog-ask", 64);
e_dialog_text_set e_dialog_text_set(dia,
(dia, _("You disabled screensaver too fast.<br><br>"
_("You disabled screensaver too fast.<br><br>" "Would you like to enable <b>presentation</b> mode and "
"Would you like to enable <b>presentation</b> mode and " "temporarily disable screen saver, lock and power saving?"));
"temporarily disable screen saver, lock and power saving?"));
e_object_del_attach_func_set e_object_del_attach_func_set(E_OBJECT(dia),
(E_OBJECT(dia), _e_screensaver_ask_presentation_del); _e_screensaver_ask_presentation_del);
e_dialog_button_add e_dialog_button_add(dia, _("Yes"), NULL,
(dia, _("Yes"), NULL, _e_screensaver_ask_presentation_yes, NULL); _e_screensaver_ask_presentation_yes, NULL);
e_dialog_button_add e_dialog_button_add(dia, _("No"), NULL,
(dia, _("No"), NULL, _e_screensaver_ask_presentation_no, NULL); _e_screensaver_ask_presentation_no, NULL);
e_dialog_button_add e_dialog_button_add(dia, _("No, but increase timeout"), NULL,
(dia, _("No, but increase timeout"), NULL, _e_screensaver_ask_presentation_no_increase, NULL);
_e_screensaver_ask_presentation_no_increase, NULL); e_dialog_button_add(dia, _("No, and stop asking"), NULL,
e_dialog_button_add _e_screensaver_ask_presentation_no_forever, NULL);
(dia, _("No, and stop asking"), NULL,
_e_screensaver_ask_presentation_no_forever, NULL);
e_dialog_button_focus_num(dia, 0); e_dialog_button_focus_num(dia, 0);
e_widget_list_homogeneous_set(dia->box_object, 0); e_widget_list_homogeneous_set(dia->box_object, 0);
e_win_centered_set(dia->win, 1); e_win_centered_set(dia->win, 1);
e_dialog_show(dia); e_dialog_show(dia);
evas_object_event_callback_add evas_object_event_callback_add(dia->bg_object, EVAS_CALLBACK_KEY_DOWN,
(dia->bg_object, EVAS_CALLBACK_KEY_DOWN, _e_screensaver_ask_presentation_key_down, dia);
_e_screensaver_ask_presentation_key_down, dia);
_e_screensaver_ask_presentation_dia = 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)) else if ((last_start > 0.0) && (e_config->screensaver_ask_presentation))
{ {
double current = ecore_loop_time_get(); double current = ecore_loop_time_get();
if (last_start + e_config->screensaver_ask_presentation_timeout >= current) if (last_start + e_config->screensaver_ask_presentation_timeout >= current)
_e_screensaver_ask_presentation_mode(); _e_screensaver_ask_presentation_mode();
last_start = 0.0; last_start = 0.0;
@ -153,19 +151,35 @@ _e_screensaver_handler_screensaver_notify_cb(void *data __UNUSED__, int type __U
} }
static Eina_Bool 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++; E_Event_Border_Fullscreen *ev = event;
if (_e_screensaver_fullscreen_count == 1) e_screensaver_init();
_e_screensaver_fullscreen_count = ev->border->desk->fullscreen_borders;
e_screensaver_init();
return ECORE_CALLBACK_PASS_ON; return ECORE_CALLBACK_PASS_ON;
} }
static Eina_Bool 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--; E_Event_Border_Desk_Set *ev = event;
if (_e_screensaver_fullscreen_count == 0) e_screensaver_init();
else if (_e_screensaver_fullscreen_count < 0) _e_screensaver_fullscreen_count = 0; 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; return ECORE_CALLBACK_PASS_ON;
} }
@ -184,11 +198,31 @@ e_screensaver_init(void)
if (!_e_screensaver_handler_border_fullscreen) if (!_e_screensaver_handler_border_fullscreen)
_e_screensaver_handler_border_fullscreen = ecore_event_handler_add _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) if (!_e_screensaver_handler_border_unfullscreen)
_e_screensaver_handler_border_unfullscreen = ecore_event_handler_add _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) && if ((e_config->screensaver_enable) && (!e_config->mode.presentation) &&
(_e_screensaver_fullscreen_count <= 0)) (_e_screensaver_fullscreen_count <= 0))