From 3656722c14fa3a344cbc18df3ae7451793c4b0d5 Mon Sep 17 00:00:00 2001 From: Bastien Dejean Date: Thu, 18 Oct 2012 11:09:17 +0200 Subject: [PATCH] Fix toggle_fullscreen --- events.c | 16 ++++++++-------- events.h | 2 +- messages.c | 2 +- window.c | 5 +++-- window.h | 2 +- 5 files changed, 14 insertions(+), 13 deletions(-) diff --git a/events.c b/events.c index ff4096a..9b43dfc 100644 --- a/events.c +++ b/events.c @@ -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); } } } diff --git a/events.h b/events.h index 46f49d5..3f85f7d 100644 --- a/events.h +++ b/events.h @@ -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 diff --git a/messages.c b/messages.c index 6395a23..2c74a9d 100644 --- a/messages.c +++ b/messages.c @@ -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); diff --git a/window.c b/window.c index 143abf5..57b369e 100644 --- a/window.c +++ b/window.c @@ -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); } } diff --git a/window.h b/window.h index 9acdfbe..fbcfab4 100644 --- a/window.h +++ b/window.h @@ -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);