aboutsummaryrefslogtreecommitdiff
path: root/xwayland
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2017-11-10 08:26:20 -0500
committerGitHub <noreply@github.com>2017-11-10 08:26:20 -0500
commite6babc07a050262dc487ec665b042346b06e4916 (patch)
tree34c0eb69a7e5820c684aba6d2405c899c04e18f1 /xwayland
parent425713b83730a7b707ac5b0a325b8e37464a982c (diff)
parentbf1b12a72500fb8cb41cbc60d29e602c25c97fc2 (diff)
Merge pull request #390 from emersion/rootston-maximize
Maximize views in rootston
Diffstat (limited to 'xwayland')
-rw-r--r--xwayland/xwm.c50
1 files changed, 28 insertions, 22 deletions
diff --git a/xwayland/xwm.c b/xwayland/xwm.c
index f011587e..dff9fac2 100644
--- a/xwayland/xwm.c
+++ b/xwayland/xwm.c
@@ -823,41 +823,47 @@ static void xwm_handle_net_wm_state_message(struct wlr_xwm *xwm,
if (!xsurface) {
return;
}
+ if (client_message->format != 32) {
+ return;
+ }
- int maximized = xsurface_is_maximized(xsurface);
+ bool fullscreen = xsurface->fullscreen;
+ bool maximized = xsurface_is_maximized(xsurface);
uint32_t action = client_message->data.data32[0];
- uint32_t property = client_message->data.data32[1];
+ for (size_t i = 0; i < 2; ++i) {
+ uint32_t property = client_message->data.data32[1 + i];
- if (property == xwm->atoms[_NET_WM_STATE_FULLSCREEN] &&
- update_state(action, &xsurface->fullscreen)) {
- xsurface_set_net_wm_state(xsurface);
+ if (property == xwm->atoms[_NET_WM_STATE_FULLSCREEN] &&
+ update_state(action, &xsurface->fullscreen)) {
+ xsurface_set_net_wm_state(xsurface);
+ } else if (property == xwm->atoms[_NET_WM_STATE_MAXIMIZED_VERT] &&
+ update_state(action, &xsurface->maximized_vert)) {
+ xsurface_set_net_wm_state(xsurface);
+ } else if (property == xwm->atoms[_NET_WM_STATE_MAXIMIZED_HORZ] &&
+ update_state(action, &xsurface->maximized_horz)) {
+ xsurface_set_net_wm_state(xsurface);
+ }
+ }
+ // client_message->data.data32[3] is the source indication
+ // all other values are set to 0
+ if (fullscreen != xsurface->fullscreen) {
if (xsurface->fullscreen) {
xsurface->saved_width = xsurface->width;
xsurface->saved_height = xsurface->height;
}
wl_signal_emit(&xsurface->events.request_fullscreen, xsurface);
- } else {
- if (property == xwm->atoms[_NET_WM_STATE_MAXIMIZED_VERT] &&
- update_state(action, &xsurface->maximized_vert)) {
- xsurface_set_net_wm_state(xsurface);
- }
+ }
- if (property == xwm->atoms[_NET_WM_STATE_MAXIMIZED_HORZ] &&
- update_state(action, &xsurface->maximized_horz)) {
- xsurface_set_net_wm_state(xsurface);
+ if (maximized != xsurface_is_maximized(xsurface)) {
+ if (xsurface_is_maximized(xsurface)) {
+ xsurface->saved_width = xsurface->width;
+ xsurface->saved_height = xsurface->height;
}
- if (maximized != xsurface_is_maximized(xsurface)) {
- if (xsurface_is_maximized(xsurface)) {
- xsurface->saved_width = xsurface->width;
- xsurface->saved_height = xsurface->height;
- }
-
- wl_signal_emit(&xsurface->events.request_maximize, xsurface);
- }
+ wl_signal_emit(&xsurface->events.request_maximize, xsurface);
}
}
@@ -1310,8 +1316,8 @@ struct wlr_xwm *xwm_create(struct wlr_xwayland *wlr_xwayland) {
xwm->atoms[_NET_ACTIVE_WINDOW],
xwm->atoms[_NET_WM_MOVERESIZE],
xwm->atoms[_NET_WM_STATE_FULLSCREEN],
- xwm->atoms[_NET_WM_STATE_MAXIMIZED_HORZ],
xwm->atoms[_NET_WM_STATE_MAXIMIZED_VERT],
+ xwm->atoms[_NET_WM_STATE_MAXIMIZED_HORZ],
};
xcb_change_property(xwm->xcb_conn,
XCB_PROP_MODE_REPLACE,