Handle border property change events for Fullscreen/Unfullscreen.

SVN revision: 45932
This commit is contained in:
Christopher Michael 2010-02-06 15:42:04 +00:00
parent 814260e35b
commit 7d96aaa67f
5 changed files with 43 additions and 0 deletions

View File

@ -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);

View File

@ -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)
{

View File

@ -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;

View File

@ -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)
{

View File

@ -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);