From d374b7ccb82375a6faf8280116890ee8ce9d1e3e Mon Sep 17 00:00:00 2001 From: Gustavo Sverzut Barbieri Date: Mon, 22 Nov 2010 15:21:17 +0000 Subject: [PATCH] utility to query for fullscreen in current/all zones. keeping local count of borders is too error prone, instead query it. Right now the count is being done for the current zone only, I guess this is the best policy. SVN revision: 54793 --- src/bin/e_desklock.c | 115 +--------------------------------------- src/bin/e_dpms.c | 21 ++------ src/bin/e_screensaver.c | 21 ++------ src/bin/e_utils.c | 71 +++++++++++++++++++++---- src/bin/e_utils.h | 3 ++ 5 files changed, 74 insertions(+), 157 deletions(-) diff --git a/src/bin/e_desklock.c b/src/bin/e_desklock.c index 24004a934..90b1d60b9 100644 --- a/src/bin/e_desklock.c +++ b/src/bin/e_desklock.c @@ -62,14 +62,6 @@ 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 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; /***********************************************************************/ @@ -96,9 +88,6 @@ 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_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; @@ -109,34 +98,6 @@ e_desklock_init(void) _e_desklock_idle_poller = ecore_poller_add(ECORE_POLLER_CORE, 256, _e_desklock_cb_idle_poller, NULL); - if (!_e_desklock_handler_border_fullscreen) - _e_desklock_handler_border_fullscreen = ecore_event_handler_add - (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_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); @@ -148,48 +109,6 @@ e_desklock_init(void) EAPI int e_desklock_shutdown(void) { - if (_e_desklock_handler_border_fullscreen) - { - ecore_event_handler_del(_e_desklock_handler_border_fullscreen); - _e_desklock_handler_border_fullscreen = NULL; - } - - if (_e_desklock_handler_border_unfullscreen) - { - ecore_event_handler_del(_e_desklock_handler_border_unfullscreen); - _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); @@ -215,7 +134,7 @@ _user_wallpaper_get(void) EAPI int e_desklock_show_autolocked(void) { - if (_e_desklock_fullscreen_count > 0) return 0; + if (e_util_fullscreen_curreny_any()) return 0; if (_e_desklock_autolock_time < 1.0) _e_desklock_autolock_time = ecore_loop_time_get(); return e_desklock_show(); @@ -955,7 +874,7 @@ static Eina_Bool _e_desklock_cb_idle_poller(void *data __UNUSED__) { if ((e_config->desklock_autolock_idle) && (!e_config->mode.presentation) && - (_e_desklock_fullscreen_count <= 0)) + (!e_util_fullscreen_curreny_any())) { double idle, max; @@ -1094,33 +1013,3 @@ _e_desklock_ask_presentation_mode(void) _e_desklock_ask_presentation_dia = dia; } - -static Eina_Bool -_e_desklock_handler_border_fullscreen_check_cb(void *data __UNUSED__, int type __UNUSED__, void *event) -{ - E_Event_Border_Fullscreen *ev = event; - - _e_desklock_fullscreen_count = ev->border->desk->fullscreen_borders; - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_e_desklock_handler_border_desk_set_cb(void *data __UNUSED__, int type __UNUSED__, void *event) -{ - 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; - 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; - return ECORE_CALLBACK_PASS_ON; -} diff --git a/src/bin/e_dpms.c b/src/bin/e_dpms.c index 8fb73cf33..44058d92b 100644 --- a/src/bin/e_dpms.c +++ b/src/bin/e_dpms.c @@ -8,7 +8,6 @@ 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 _e_dpms_handler_config_mode_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__) @@ -18,34 +17,22 @@ _e_dpms_handler_config_mode_cb(void *data __UNUSED__, int type __UNUSED__, void } static Eina_Bool -_e_dpms_handler_border_fullscreen_check_cb(void *data __UNUSED__, int type __UNUSED__, void *event) +_e_dpms_handler_border_fullscreen_check_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__) { - 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_desk_set_cb(void *data __UNUSED__, int type __UNUSED__, void *event) +_e_dpms_handler_border_desk_set_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__) { - 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_desk_show_cb(void *data __UNUSED__, int type __UNUSED__, void *event) +_e_dpms_handler_desk_show_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__) { - E_Event_Desk_Show *ev = event; - - _e_dpms_fullscreen_count = ev->desk->fullscreen_borders; e_dpms_init(); return ECORE_CALLBACK_PASS_ON; } @@ -57,7 +44,7 @@ e_dpms_init(void) int enabled; enabled = ((e_config->dpms_enable) && (!e_config->mode.presentation) && - (_e_dpms_fullscreen_count <= 0)); + (!e_util_fullscreen_curreny_any())); if (!_e_dpms_handler_config_mode) _e_dpms_handler_config_mode = ecore_event_handler_add diff --git a/src/bin/e_screensaver.c b/src/bin/e_screensaver.c index 3df9b6f44..27cdba19a 100644 --- a/src/bin/e_screensaver.c +++ b/src/bin/e_screensaver.c @@ -11,7 +11,6 @@ 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; static Eina_Bool _e_screensaver_handler_config_mode_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__) @@ -148,34 +147,22 @@ _e_screensaver_handler_screensaver_notify_cb(void *data __UNUSED__, int type __U } static Eina_Bool -_e_screensaver_handler_border_fullscreen_check_cb(void *data __UNUSED__, int type __UNUSED__, void *event) +_e_screensaver_handler_border_fullscreen_check_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__) { - 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_desk_set_cb(void *data __UNUSED__, int type __UNUSED__, void *event) +_e_screensaver_handler_border_desk_set_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__) { - 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_screensaver_handler_desk_show_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__) { - E_Event_Desk_Show *ev = event; - - _e_screensaver_fullscreen_count = ev->desk->fullscreen_borders; e_screensaver_init(); return ECORE_CALLBACK_PASS_ON; } @@ -222,7 +209,7 @@ e_screensaver_init(void) (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)) + (!e_util_fullscreen_curreny_any())) timeout = e_config->screensaver_timeout; interval = e_config->screensaver_interval; diff --git a/src/bin/e_utils.c b/src/bin/e_utils.c index ce9b69f60..5329bceac 100644 --- a/src/bin/e_utils.c +++ b/src/bin/e_utils.c @@ -26,7 +26,7 @@ struct _E_Util_Fake_Mouse_Up_Info struct _E_Util_Image_Import_Settings { E_Dialog *dia; - struct + struct { void (*func)(void *data, const char *path, Eina_Bool ok, Eina_Bool external, int quality, E_Image_Import_Mode mode); void *data; @@ -42,12 +42,12 @@ struct _E_Util_Image_Import_Handle { Ecore_Exe *exe; Ecore_Event_Handler *handler; - struct + struct { void (*func)(void *data, Eina_Bool ok, const char *image_path, const char *edje_path); void *data; } cb; - struct + struct { const char *image, *edje, *temp; } path; @@ -492,7 +492,7 @@ e_util_menu_item_edje_icon_set(E_Menu_Item *mi, const char *name) EAPI unsigned int e_util_icon_size_normalize(unsigned int desired) { - const unsigned int *itr, known_sizes[] = + const unsigned int *itr, known_sizes[] = { 16, 22, 24, 32, 36, 48, 64, 72, 96, 128, 192, 256, -1 }; @@ -555,7 +555,7 @@ e_util_container_window_find(Ecore_X_Window win) } EAPI E_Zone * -e_util_zone_window_find(Ecore_X_Window win) +e_util_zone_window_find(Ecore_X_Window win) { Eina_List *l, *ll, *lll; E_Manager *man; @@ -564,7 +564,7 @@ e_util_zone_window_find(Ecore_X_Window win) EINA_LIST_FOREACH(e_manager_list(), l, man) EINA_LIST_FOREACH(man->containers, ll, con) - EINA_LIST_FOREACH(con->zones, lll, zone) + EINA_LIST_FOREACH(con->zones, lll, zone) if (zone->black_win == win) return zone; return NULL; @@ -1403,8 +1403,8 @@ e_util_image_import_cancel(E_Util_Image_Import_Handle *handle) ecore_exe_kill(handle->exe); } -EAPI int -e_util_container_desk_count_get(E_Container *con) +EAPI int +e_util_container_desk_count_get(E_Container *con) { Eina_List *zl; E_Zone *zone; @@ -1412,13 +1412,13 @@ e_util_container_desk_count_get(E_Container *con) E_OBJECT_CHECK_RETURN(con, 0); E_OBJECT_TYPE_CHECK_RETURN(con, E_CONTAINER_TYPE, 0); - EINA_LIST_FOREACH(con->zones, zl, zone) + EINA_LIST_FOREACH(con->zones, zl, zone) { int x, y; int cx = 0, cy = 0; e_zone_desk_count_get(zone, &cx, &cy); - for (x = 0; x < cx; x++) + for (x = 0; x < cx; x++) { for (y = 0; y < cy; y++) count += 1; @@ -1560,3 +1560,54 @@ e_util_module_config_check(const char *module_name, int conf, int epoch, int ver return EINA_TRUE; } + +/** + * Checks whenever the current manager/container/zone have fullscreen windows. + */ +EAPI Eina_Bool +e_util_fullscreen_curreny_any(void) +{ + E_Manager *man = e_manager_current_get(); + E_Container *con = e_container_current_get(man); + E_Zone *zone = e_zone_current_get(con); + E_Desk *desk; + + if ((zone) && (zone->fullscreen > 0)) return EINA_TRUE; + desk = e_desk_current_get(zone); + if ((desk) && (desk->fullscreen_borders > 0)) return EINA_TRUE; + return EINA_FALSE; +} + +/** + * Checks whenever any manager/container/zone have fullscreen windows. + */ +EAPI Eina_Bool +e_util_fullscreen_any(void) +{ + E_Zone *zone; + Eina_List *lm, *lc, *lz; + E_Container *con; + E_Manager *man; + E_Desk *desk; + int x, y; + + EINA_LIST_FOREACH(e_manager_list(), lm, man) + { + EINA_LIST_FOREACH(man->containers, lc, con) + { + EINA_LIST_FOREACH(con->zones, lz, zone) + { + if (zone->fullscreen > 0) return EINA_TRUE; + + for (x = 0; x < zone->desk_x_count; x++) + for (y = 0; y < zone->desk_y_count; y++) + { + desk = e_desk_at_xy_get(zone, x, y); + if ((desk) && (desk->fullscreen_borders > 0)) + return EINA_TRUE; + } + } + } + } + return EINA_FALSE; +} diff --git a/src/bin/e_utils.h b/src/bin/e_utils.h index 2e96fab0d..2c7af36e4 100644 --- a/src/bin/e_utils.h +++ b/src/bin/e_utils.h @@ -76,5 +76,8 @@ EAPI void e_util_image_import_cancel(E_Util_Image_Import_ EAPI int e_util_container_desk_count_get(E_Container *con); +EAPI Eina_Bool e_util_fullscreen_curreny_any(void); +EAPI Eina_Bool e_util_fullscreen_any(void); + #endif #endif