diff --git a/src/bin/e_zone.c b/src/bin/e_zone.c index 644a2bbc3..45fc044a5 100644 --- a/src/bin/e_zone.c +++ b/src/bin/e_zone.c @@ -12,13 +12,18 @@ static void _e_zone_cb_menu_end(void *data, E_Menu *m); static void _e_zone_cb_bg_mouse_down(void *data, Evas *evas, Evas_Object *obj, void *event_info); static void _e_zone_cb_bg_mouse_up(void *data, Evas *evas, Evas_Object *obj, void *event_info); static void _e_zone_cb_bg_mouse_move(void *data, Evas *evas, Evas_Object *obj, void *event_info); +static void _e_zone_event_zone_desk_count_set_free(void *data, void *ev); static int zone_count; +int E_EVENT_ZONE_DESK_COUNT_SET = 0; + int e_zone_init(void) { zone_count = 0; + E_EVENT_ZONE_DESK_COUNT_SET = ecore_event_type_new(); + return 1; } @@ -284,6 +289,7 @@ e_zone_desk_count_set(E_Zone *zone, int x_count, int y_count) int x, y, xx, yy, moved; Evas_List *client; E_Border *bd; + E_Event_Zone_Desk_Count_Set *ev; xx = x_count; if (xx < 1) @@ -378,6 +384,12 @@ e_zone_desk_count_set(E_Zone *zone, int x_count, int y_count) e_config->zone_desks_x_count = xx; e_config->zone_desks_y_count = yy; e_config_save_queue(); + + ev = E_NEW(E_Event_Zone_Desk_Count_Set, 1); + if (!ev) return; + ev->zone = zone; + e_object_ref(E_OBJECT(zone)); + ecore_event_add(E_EVENT_ZONE_DESK_COUNT_SET, ev, _e_zone_event_zone_desk_count_set_free, NULL); } void @@ -386,3 +398,14 @@ e_zone_desk_count_get(E_Zone *zone, int *x_count, int *y_count) *x_count = zone->desk_x_count; *y_count = zone->desk_y_count; } + +static void +_e_zone_event_zone_desk_count_set_free(void *data, void *ev) +{ + E_Event_Zone_Desk_Count_Set *e; + + e = ev; + e_object_unref(E_OBJECT(e->zone)); + free(e); +} + diff --git a/src/bin/e_zone.h b/src/bin/e_zone.h index ffd97b802..9f6bb3b55 100644 --- a/src/bin/e_zone.h +++ b/src/bin/e_zone.h @@ -2,6 +2,8 @@ typedef struct _E_Zone E_Zone; +typedef struct _E_Event_Zone_Desk_Count_Set E_Event_Zone_Desk_Count_Set; + #else #ifndef E_ZONE_H #define E_ZONE_H @@ -25,6 +27,11 @@ struct _E_Zone }; +struct _E_Event_Zone_Desk_Count_Set +{ + E_Zone *zone; +}; + EAPI int e_zone_init(void); EAPI int e_zone_shutdown(void); EAPI E_Zone *e_zone_new(E_Container *con, int x, int y, int w, int h); @@ -37,5 +44,7 @@ EAPI Evas_List *e_zone_clients_list_get(E_Zone *zone); EAPI void e_zone_desk_count_set(E_Zone *zone, int x_count, int y_count); EAPI void e_zone_desk_count_get(E_Zone *zone, int *x_count, int *y_count); +extern EAPI int E_EVENT_ZONE_DESK_COUNT_SET; + #endif #endif diff --git a/src/modules/pager/e_mod_main.c b/src/modules/pager/e_mod_main.c index deef97ff7..ac97dcf52 100644 --- a/src/modules/pager/e_mod_main.c +++ b/src/modules/pager/e_mod_main.c @@ -42,6 +42,7 @@ static int _pager_cb_event_border_remove(void *data, int type, void *eve static int _pager_cb_event_border_hide(void *data, int type, void *event); static int _pager_cb_event_border_show(void *data, int type, void *event); static int _pager_cb_event_border_desk_set(void *data, int type, void *event); +static int _pager_cb_event_zone_desk_count_set(void *data, int type, void *event); static void _pager_reconfigure(Pager *e); @@ -213,6 +214,9 @@ _pager_init(E_Module *m) e->ev_handler_border_desk_set = ecore_event_handler_add(E_EVENT_BORDER_DESK_SET, _pager_cb_event_border_desk_set, e); + e->ev_handler_zone_desk_count_set = + ecore_event_handler_add(E_EVENT_ZONE_DESK_COUNT_SET, + _pager_cb_event_zone_desk_count_set, e); _pager_zone_set(e, e_zone_current_get(e->con)); _pager_reconfigure(e); @@ -248,6 +252,7 @@ _pager_shutdown(Pager *e) ecore_event_handler_del(e->ev_handler_border_hide); ecore_event_handler_del(e->ev_handler_border_show); ecore_event_handler_del(e->ev_handler_border_desk_set); + ecore_event_handler_del(e->ev_handler_zone_desk_count_set); free(e); } @@ -875,3 +880,14 @@ _pager_cb_event_border_desk_set(void *data, int type, void *event) return 1; } +static int +_pager_cb_event_zone_desk_count_set(void *data, int type, void *event) +{ + Pager *e; + E_Event_Zone_Desk_Count_Set *ev; + + e = data; + _pager_reconfigure(e); + return 1; +} + diff --git a/src/modules/pager/e_mod_main.h b/src/modules/pager/e_mod_main.h index b91078b3f..01948ac45 100644 --- a/src/modules/pager/e_mod_main.h +++ b/src/modules/pager/e_mod_main.h @@ -33,6 +33,7 @@ struct _Pager Ecore_Event_Handler *ev_handler_border_hide; Ecore_Event_Handler *ev_handler_border_show; Ecore_Event_Handler *ev_handler_border_desk_set; + Ecore_Event_Handler *ev_handler_zone_desk_count_set; Evas_Coord fx, fy, fw, fh, tw, th; Evas_Coord xx, yy;