only track mouse movement when zones > 1, fix login box show/hide for multizone+current

SVN revision: 73937
This commit is contained in:
Mike Blumenkrantz 2012-07-16 13:21:31 +00:00
parent b098439495
commit 09be22e12f
1 changed files with 17 additions and 15 deletions

View File

@ -30,6 +30,7 @@ struct _E_Desklock_Data
Eina_List *elock_wnd_list; Eina_List *elock_wnd_list;
Ecore_X_Window elock_wnd; Ecore_X_Window elock_wnd;
Eina_List *handlers; Eina_List *handlers;
Ecore_Event_Handler *move_handler;
Ecore_X_Window elock_grab_break_wnd; Ecore_X_Window elock_grab_break_wnd;
char passwd[PASSWD_LEN]; char passwd[PASSWD_LEN];
int state; int state;
@ -296,13 +297,7 @@ works:
_e_desklock_cb_zone_move_resize, NULL)); _e_desklock_cb_zone_move_resize, NULL));
if ((total_zone_num > 1) && (e_config->desklock_login_box_zone == -2)) if ((total_zone_num > 1) && (e_config->desklock_login_box_zone == -2))
{ edd->move_handler = 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_MOUSE_MOVE,
_e_desklock_cb_mouse_move,
NULL));
}
_e_desklock_passwd_update(); _e_desklock_passwd_update();
@ -342,6 +337,7 @@ e_desklock_hide(void)
_e_desklock_popup_free(edp); _e_desklock_popup_free(edp);
E_FREE_LIST(edd->handlers, ecore_event_handler_del); E_FREE_LIST(edd->handlers, ecore_event_handler_del);
if (edd->move_handler) ecore_event_handler_del(edd->move_handler);
e_grabinput_release(edd->elock_wnd, edd->elock_wnd); e_grabinput_release(edd->elock_wnd, edd->elock_wnd);
ecore_x_window_free(edd->elock_wnd); ecore_x_window_free(edd->elock_wnd);
@ -568,6 +564,8 @@ _e_desklock_cb_zone_add(void *data __UNUSED__,
{ {
E_Event_Zone_Add *ev = event; E_Event_Zone_Add *ev = event;
if (!edd) return ECORE_CALLBACK_PASS_ON; if (!edd) return ECORE_CALLBACK_PASS_ON;
if ((!edd->move_handler) && (e_config->desklock_login_box_zone == -2))
edd->move_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_MOVE, _e_desklock_cb_mouse_move, NULL);
if (!_e_desklock_popup_find(ev->zone)) _e_desklock_popup_add(ev->zone); if (!_e_desklock_popup_find(ev->zone)) _e_desklock_popup_add(ev->zone);
return ECORE_CALLBACK_PASS_ON; return ECORE_CALLBACK_PASS_ON;
} }
@ -580,6 +578,9 @@ _e_desklock_cb_zone_del(void *data __UNUSED__,
E_Event_Zone_Del *ev = event; E_Event_Zone_Del *ev = event;
Eina_List *l; Eina_List *l;
if (!edd) return ECORE_CALLBACK_PASS_ON; if (!edd) return ECORE_CALLBACK_PASS_ON;
if ((eina_list_count(e_container_current_get(e_manager_current_get())->zones) == 1) && (e_config->desklock_login_box_zone == -2))
edd->move_handler = ecore_event_handler_del(edd->move_handler);
l = _e_desklock_popup_find(ev->zone); l = _e_desklock_popup_find(ev->zone);
if (l) if (l)
{ {
@ -662,16 +663,17 @@ _e_desklock_cb_mouse_move(void *data __UNUSED__, int type __UNUSED__, void *even
{ {
if (!edp) continue; if (!edp) continue;
if (edp->popup_wnd->zone == last_active_zone) if (edp->popup_wnd->zone != current_zone)
if (edp->login_box) evas_object_hide(edp->login_box);
else if (edp->popup_wnd->zone == current_zone)
{ {
if (edp->login_box) if (edp->login_box) evas_object_hide(edp->login_box);
evas_object_show(edp->login_box); continue;
else
_e_desklock_login_box_add(current_zone);
} }
if (edp->login_box)
evas_object_show(edp->login_box);
else
_e_desklock_login_box_add(edp);
} }
_e_desklock_passwd_update();
last_active_zone = current_zone; last_active_zone = current_zone;
return ECORE_CALLBACK_PASS_ON; return ECORE_CALLBACK_PASS_ON;
} }
@ -692,7 +694,7 @@ _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", if (edp->login_box) edje_object_part_text_set(edp->login_box, "e.text.password",
passwd_hidden); passwd_hidden);
} }