diff --git a/src/bin/e_actions.c b/src/bin/e_actions.c index 5c64d2abe..c3dafb27c 100644 --- a/src/bin/e_actions.c +++ b/src/bin/e_actions.c @@ -1430,38 +1430,13 @@ ACT_FN_GO(edit_mode_toggle) /***************************************************************************/ ACT_FN_GO(desk_deskshow_toggle) { - E_Border *bd; - E_Border_List *bl; E_Zone *zone; - E_Desk *desk; zone = _e_actions_zone_get(obj); if (!zone) zone = e_util_zone_current_get(e_manager_current_get()); if (zone) { - desk = e_desk_current_get(zone); - bl = e_container_border_list_first(zone->container); - while ((bd = e_container_border_list_next(bl))) - { - if (bd->desk == desk) - { - if (desk->deskshow_toggle) - { - if (bd->deskshow) e_border_uniconify(bd); - bd->deskshow = 0; - } - else - { - if (bd->iconic) continue; - if (bd->client.netwm.state.skip_taskbar) continue; - if (bd->user_skip_winlist) continue; - e_border_iconify(bd); - bd->deskshow = 1; - } - } - } - desk->deskshow_toggle = desk->deskshow_toggle ? 0 : 1; - e_container_border_list_free(bl); + e_desk_deskshow(zone); } } /***************************************************************************/ diff --git a/src/bin/e_desk.c b/src/bin/e_desk.c index 67f33c0bf..693c27e11 100644 --- a/src/bin/e_desk.c +++ b/src/bin/e_desk.c @@ -10,15 +10,18 @@ static void _e_desk_free(E_Desk *desk); static void _e_border_event_desk_show_free(void *data, void *ev); +static void _e_border_event_desk_deskshow_free(void *data, void *ev); static void _e_border_event_desk_name_change_free(void *data, void *ev); EAPI int E_EVENT_DESK_SHOW = 0; +EAPI int E_EVENT_DESK_DESKSHOW = 0; EAPI int E_EVENT_DESK_NAME_CHANGE = 0; EAPI int e_desk_init(void) { E_EVENT_DESK_SHOW = ecore_event_type_new(); + E_EVENT_DESK_DESKSHOW = ecore_event_type_new(); E_EVENT_DESK_NAME_CHANGE = ecore_event_type_new(); return 1; } @@ -253,6 +256,47 @@ e_desk_show(E_Desk *desk) } +EAPI void +e_desk_deskshow(E_Zone *zone) +{ + E_Border *bd; + E_Border_List *bl; + E_Desk *desk; + E_Event_Desk_Show *ev; + + E_OBJECT_CHECK(zone); + E_OBJECT_TYPE_CHECK(zone, E_ZONE_TYPE); + + desk = e_desk_current_get(zone); + bl = e_container_border_list_first(zone->container); + while ((bd = e_container_border_list_next(bl))) + { + if (bd->desk == desk) + { + if (desk->deskshow_toggle) + { + if (bd->deskshow) e_border_uniconify(bd); + bd->deskshow = 0; + } + else + { + if (bd->iconic) continue; + if (bd->client.netwm.state.skip_taskbar) continue; + if (bd->user_skip_winlist) continue; + e_border_iconify(bd); + bd->deskshow = 1; + } + } + } + desk->deskshow_toggle = desk->deskshow_toggle ? 0 : 1; + e_container_border_list_free(bl); + ev = E_NEW(E_Event_Desk_Show, 1); + ev->desk = desk; + e_object_ref(E_OBJECT(desk)); + ecore_event_add(E_EVENT_DESK_DESKSHOW, ev, + _e_border_event_desk_deskshow_free, NULL); +} + EAPI void e_desk_last_focused_focus(E_Desk *desk) { @@ -416,6 +460,16 @@ _e_border_event_desk_show_free(void *data, void *event) free(ev); } +static void +_e_border_event_desk_deskshow_free(void *data, void *event) +{ + E_Event_Desk_Show *ev; + + ev = event; + e_object_unref(E_OBJECT(ev->desk)); + free(ev); +} + static void _e_border_event_desk_name_change_free(void *data, void *event) { diff --git a/src/bin/e_desk.h b/src/bin/e_desk.h index d79b67c40..b25feacf2 100644 --- a/src/bin/e_desk.h +++ b/src/bin/e_desk.h @@ -5,6 +5,7 @@ typedef struct _E_Desk E_Desk; typedef struct _E_Event_Desk_Show E_Event_Desk_Show; +typedef struct _E_Event_Desk_DeskShow E_Event_Desk_DeskShow; typedef struct _E_Event_Desk_Name_Change E_Event_Desk_Name_Change; #else @@ -44,6 +45,7 @@ EAPI void e_desk_name_add(int container, int zone, int desk_x, int desk_ EAPI void e_desk_name_del(int container, int zone, int desk_x, int desk_y); EAPI void e_desk_name_update(void); EAPI void e_desk_show(E_Desk *desk); +EAPI void e_desk_deskshow(E_Zone *zone); EAPI void e_desk_last_focused_focus(E_Desk *desk); EAPI E_Desk *e_desk_current_get(E_Zone *zone); EAPI E_Desk *e_desk_at_xy_get(E_Zone *zone, int x, int y); @@ -57,6 +59,7 @@ EAPI void e_desk_col_add(E_Zone *zone); EAPI void e_desk_col_remove(E_Zone *zone); extern EAPI int E_EVENT_DESK_SHOW; +extern EAPI int E_EVENT_DESK_DESKSHOW; extern EAPI int E_EVENT_DESK_NAME_CHANGE; #endif