Skip to content
This repository has been archived by the owner on Nov 1, 2021. It is now read-only.

Commit

Permalink
xwayland: Add WM_STATE modal property
Browse files Browse the repository at this point in the history
Adds a modal property to indicate whether the surface wants to be a
modal.
  • Loading branch information
RyanDwyer authored and emersion committed Sep 2, 2018
1 parent a0bf3f1 commit 69a5279
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 2 deletions.
1 change: 1 addition & 0 deletions include/wlr/xwayland.h
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,7 @@ struct wlr_xwayland_surface {
struct wl_event_source *ping_timer;

// _NET_WM_STATE
bool modal;
bool fullscreen;
bool maximized_vert, maximized_horz;

Expand Down
1 change: 1 addition & 0 deletions include/xwayland/xwm.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ enum atom_name {
_NET_WM_MOVERESIZE,
_NET_WM_NAME,
_NET_SUPPORTING_WM_CHECK,
_NET_WM_STATE_MODAL,
_NET_WM_STATE_FULLSCREEN,
_NET_WM_STATE_MAXIMIZED_VERT,
_NET_WM_STATE_MAXIMIZED_HORZ,
Expand Down
14 changes: 12 additions & 2 deletions xwayland/xwm.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ const char *atom_map[ATOM_LAST] = {
"_NET_WM_MOVERESIZE",
"_NET_WM_NAME",
"_NET_SUPPORTING_WM_CHECK",
"_NET_WM_STATE_MODAL",
"_NET_WM_STATE_FULLSCREEN",
"_NET_WM_STATE_MAXIMIZED_VERT",
"_NET_WM_STATE_MAXIMIZED_HORZ",
Expand Down Expand Up @@ -268,6 +269,9 @@ static void xsurface_set_net_wm_state(struct wlr_xwayland_surface *xsurface) {
int i;

i = 0;
if (xsurface->modal) {
property[i++] = xwm->atoms[_NET_WM_STATE_MODAL];
}
if (xsurface->fullscreen) {
property[i++] = xwm->atoms[_NET_WM_STATE_FULLSCREEN];
}
Expand Down Expand Up @@ -575,7 +579,9 @@ static void read_surface_net_wm_state(struct wlr_xwm *xwm,
xsurface->fullscreen = 0;
xcb_atom_t *atom = xcb_get_property_value(reply);
for (uint32_t i = 0; i < reply->value_len; i++) {
if (atom[i] == xwm->atoms[_NET_WM_STATE_FULLSCREEN]) {
if (atom[i] == xwm->atoms[_NET_WM_STATE_MODAL]) {
xsurface->modal = true;
} else if (atom[i] == xwm->atoms[_NET_WM_STATE_FULLSCREEN]) {
xsurface->fullscreen = true;
} else if (atom[i] == xwm->atoms[_NET_WM_STATE_MAXIMIZED_VERT]) {
xsurface->maximized_vert = true;
Expand Down Expand Up @@ -1028,7 +1034,10 @@ static void xwm_handle_net_wm_state_message(struct wlr_xwm *xwm,
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] &&
if (property == xwm->atoms[_NET_WM_STATE_MODAL] &&
update_state(action, &xsurface->modal)) {
xsurface_set_net_wm_state(xsurface);
} else 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] &&
Expand Down Expand Up @@ -1630,6 +1639,7 @@ struct wlr_xwm *xwm_create(struct wlr_xwayland *wlr_xwayland) {
xwm->atoms[NET_WM_STATE],
xwm->atoms[_NET_ACTIVE_WINDOW],
xwm->atoms[_NET_WM_MOVERESIZE],
xwm->atoms[_NET_WM_STATE_MODAL],
xwm->atoms[_NET_WM_STATE_FULLSCREEN],
xwm->atoms[_NET_WM_STATE_MAXIMIZED_VERT],
xwm->atoms[_NET_WM_STATE_MAXIMIZED_HORZ],
Expand Down

0 comments on commit 69a5279

Please sign in to comment.