Fix toggle_fullscreen

This commit is contained in:
Bastien Dejean 2012-10-18 11:09:17 +02:00
parent e771dd4c90
commit 3656722c14
5 changed files with 14 additions and 13 deletions

View file

@ -102,10 +102,10 @@ void map_request(xcb_generic_event_t *evt)
toggle_floating(birth);
if (desk->focus != NULL && desk->focus->client->fullscreen)
toggle_fullscreen(desk->focus->client);
toggle_fullscreen(mon, desk->focus->client);
if (fullscreen)
toggle_fullscreen(birth->client);
toggle_fullscreen(mon, birth->client);
c->transient = transient;
@ -276,11 +276,11 @@ void client_message(xcb_generic_event_t *evt)
return;
if (e->type == ewmh->_NET_WM_STATE) {
handle_state(loc.node, e->data.data32[1], e->data.data32[0]);
handle_state(loc.node, e->data.data32[2], e->data.data32[0]);
handle_state(loc.monitor, loc.desktop, loc.node, e->data.data32[1], e->data.data32[0]);
handle_state(loc.monitor, loc.desktop, loc.node, e->data.data32[2], e->data.data32[0]);
} else if (e->type == ewmh->_NET_ACTIVE_WINDOW) {
if (loc.desktop->focus->client->fullscreen && loc.desktop->focus != loc.node)
toggle_fullscreen(loc.desktop->focus->client);
toggle_fullscreen(loc.monitor, loc.desktop->focus->client);
if (loc.monitor->desk != loc.desktop) {
arrange(loc.monitor, loc.desktop);
select_desktop(loc.desktop);
@ -403,15 +403,15 @@ void button_release(void)
update_floating_rectangle(frozen_pointer->node->client);
}
void handle_state(node_t *n, xcb_atom_t state, unsigned int action)
void handle_state(monitor_t *m, desktop_t *d, node_t *n, xcb_atom_t state, unsigned int action)
{
if (state == ewmh->_NET_WM_STATE_FULLSCREEN) {
bool fs = n->client->fullscreen;
if (action == XCB_EWMH_WM_STATE_TOGGLE
|| (fs && action == XCB_EWMH_WM_STATE_REMOVE)
|| (!fs && action == XCB_EWMH_WM_STATE_ADD)) {
toggle_fullscreen(n->client);
arrange(mon, mon->desk);
toggle_fullscreen(m, n->client);
arrange(m, d);
}
}
}

View file

@ -14,6 +14,6 @@ void property_notify(xcb_generic_event_t *);
void button_press(xcb_generic_event_t *);
void motion_notify(xcb_generic_event_t *);
void button_release(void);
void handle_state(node_t *, xcb_atom_t, unsigned int);
void handle_state(monitor_t *, desktop_t *, node_t *, xcb_atom_t, unsigned int);
#endif

View file

@ -89,7 +89,7 @@ void process_message(char *msg, char *rsp)
}
} else if (strcmp(cmd, "toggle_fullscreen") == 0) {
if (mon->desk->focus != NULL)
toggle_fullscreen(mon->desk->focus->client);
toggle_fullscreen(mon, mon->desk->focus->client);
} else if (strcmp(cmd, "toggle_floating") == 0) {
split_mode = MODE_AUTOMATIC;
toggle_floating(mon->desk->focus);

View file

@ -193,7 +193,7 @@ void window_kill(desktop_t *d, node_t *n)
remove_node(d, n);
}
void toggle_fullscreen(client_t *c)
void toggle_fullscreen(monitor_t *m, client_t *c)
{
PRINTF("toggle fullscreen %X\n", c->window);
@ -207,7 +207,8 @@ void toggle_fullscreen(client_t *c)
xcb_ewmh_set_wm_state(ewmh, c->window, LENGTH(values), values);
window_raise(c->window);
window_border_width(c->window, 0);
window_move_resize(c->window, 0, 0, screen_width, screen_height);
xcb_rectangle_t r = m->rectangle;
window_move_resize(c->window, r.x, r.y, r.width, r.height);
}
}

View file

@ -11,7 +11,7 @@ bool locate_desktop(char *, desktop_location_t *);
void window_draw_border(node_t *, bool, bool);
void window_close(node_t *);
void window_kill(desktop_t *, node_t *);
void toggle_fullscreen(client_t *);
void toggle_fullscreen(monitor_t *, client_t *);
void toggle_floating(node_t *);
void toggle_locked(client_t *);
void window_border_width(xcb_window_t, uint32_t);