diff --git a/src/modules/illume2/E_Illume.h b/src/modules/illume2/E_Illume.h index dbc606ac7..c32fc9faa 100644 --- a/src/modules/illume2/E_Illume.h +++ b/src/modules/illume2/E_Illume.h @@ -47,6 +47,7 @@ struct _E_Illume_Layout_Policy void (*border_focus_in) (E_Border *bd); void (*border_focus_out) (E_Border *bd); void (*border_activate) (E_Border *bd); + void (*border_property_change) (E_Border *bd, Ecore_X_Event_Window_Property *event); void (*zone_layout) (E_Zone *zone); void (*zone_move_resize) (E_Zone *zone); void (*drag_start) (E_Border *bd); diff --git a/src/modules/illume2/e_mod_layout.c b/src/modules/illume2/e_mod_layout.c index ca7fd166b..d67e6dddd 100644 --- a/src/modules/illume2/e_mod_layout.c +++ b/src/modules/illume2/e_mod_layout.c @@ -17,6 +17,7 @@ static int _e_mod_layout_cb_border_add(void *data, int type, void *event); static int _e_mod_layout_cb_border_del(void *data, int type, void *event); static int _e_mod_layout_cb_border_focus_in(void *data, int type, void *event); static int _e_mod_layout_cb_border_focus_out(void *data, int type, void *event); +static int _e_mod_layout_cb_border_property_change(void *data, int type, void *event); static int _e_mod_layout_cb_zone_move_resize(void *data, int type, void *event); static int _e_mod_layout_cb_client_message(void *data, int type, void *event); @@ -302,6 +303,11 @@ _e_mod_layout_handlers_add(void) ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE, _e_mod_layout_cb_client_message, NULL)); + handlers = + eina_list_append(handlers, + ecore_event_handler_add(ECORE_X_EVENT_WINDOW_PROPERTY, + _e_mod_layout_cb_border_property_change, + NULL)); } static void @@ -426,6 +432,19 @@ _e_mod_layout_cb_border_focus_out(void *data, int type, void *event) return 1; } +static int +_e_mod_layout_cb_border_property_change(void *data, int type, void *event) +{ + Ecore_X_Event_Window_Property *ev; + E_Border *bd; + + ev = event; + if (!(bd = e_border_find_by_client_window(ev->win))) return 1; + if ((policy) && (policy->funcs.border_property_change)) + policy->funcs.border_property_change(bd, ev); + return 1; +} + static int _e_mod_layout_cb_zone_move_resize(void *data, int type, void *event) { diff --git a/src/modules/illume2/policies/illume/illume.c b/src/modules/illume2/policies/illume/illume.c index fe0cb7c3d..87966bbbe 100644 --- a/src/modules/illume2/policies/illume/illume.c +++ b/src/modules/illume2/policies/illume/illume.c @@ -15,6 +15,7 @@ e_layapi_init(E_Illume_Layout_Policy *p) p->funcs.border_focus_in = _layout_border_focus_in; p->funcs.border_focus_out = _layout_border_focus_out; p->funcs.border_activate = _layout_border_activate; + p->funcs.border_property_change = _layout_border_property_change; p->funcs.zone_layout = _layout_zone_layout; p->funcs.zone_move_resize = _layout_zone_move_resize; p->funcs.drag_start = _layout_drag_start; @@ -30,6 +31,7 @@ e_layapi_shutdown(E_Illume_Layout_Policy *p) p->funcs.border_focus_in = NULL; p->funcs.border_focus_out = NULL; p->funcs.border_activate = NULL; + p->funcs.border_property_change = NULL; p->funcs.zone_layout = NULL; p->funcs.zone_move_resize = NULL; p->funcs.drag_start = NULL; diff --git a/src/modules/illume2/policies/illume/layout.c b/src/modules/illume2/policies/illume/layout.c index 858d3ee7a..48fcbec9c 100644 --- a/src/modules/illume2/policies/illume/layout.c +++ b/src/modules/illume2/policies/illume/layout.c @@ -115,6 +115,26 @@ _layout_border_activate(E_Border *bd) } } +void +_layout_border_property_change(E_Border *bd, Ecore_X_Event_Window_Property *event) +{ + E_Border *ind; + + if (event->atom != ECORE_X_ATOM_NET_WM_STATE) return; + if ((!bd->client.icccm.name) || (!bd->client.icccm.class) || + (bd->stolen)) + return; + if (!(ind = e_illume_border_top_shelf_get(bd->zone))) return; + if ((bd->fullscreen) || (bd->need_fullscreen)) + { + if (ind) e_border_hide(ind, 2); + } + else + { + if (ind) e_border_show(ind); + } +} + void _layout_zone_layout(E_Zone *zone) { diff --git a/src/modules/illume2/policies/illume/layout.h b/src/modules/illume2/policies/illume/layout.h index c9e8ef7bc..711be2130 100644 --- a/src/modules/illume2/policies/illume/layout.h +++ b/src/modules/illume2/policies/illume/layout.h @@ -17,6 +17,7 @@ void _layout_border_del(E_Border *bd); void _layout_border_focus_in(E_Border *bd); void _layout_border_focus_out(E_Border *bd); void _layout_border_activate(E_Border *bd); +void _layout_border_property_change(E_Border *bd, Ecore_X_Event_Window_Property *event); void _layout_zone_layout(E_Zone *zone); void _layout_zone_move_resize(E_Zone *zone); void _layout_drag_start(E_Border *bd);