xwayland is the exceptional case, let xdg be 0
This commit is contained in:
parent
e10c575bc8
commit
ce2c9e6660
1 changed files with 31 additions and 32 deletions
63
dwl.c
63
dwl.c
|
@ -42,7 +42,7 @@
|
||||||
#define LENGTH(X) (sizeof X / sizeof X[0])
|
#define LENGTH(X) (sizeof X / sizeof X[0])
|
||||||
#define END(A) ((A) + LENGTH(A))
|
#define END(A) ((A) + LENGTH(A))
|
||||||
#define TAGMASK ((1 << LENGTH(tags)) - 1)
|
#define TAGMASK ((1 << LENGTH(tags)) - 1)
|
||||||
#define WLR_SURFACE(C) (c->isxdg ? c->xdg_surface->surface : c->xwayland_surface->surface)
|
#define WLR_SURFACE(C) (c->isx11 ? c->xwayland_surface->surface : c->xdg_surface->surface)
|
||||||
|
|
||||||
/* enums */
|
/* enums */
|
||||||
enum { CurNormal, CurMove, CurResize }; /* cursor */
|
enum { CurNormal, CurMove, CurResize }; /* cursor */
|
||||||
|
@ -74,7 +74,7 @@ typedef struct {
|
||||||
struct wl_listener unmap;
|
struct wl_listener unmap;
|
||||||
struct wl_listener destroy;
|
struct wl_listener destroy;
|
||||||
struct wlr_box geom; /* layout-relative, includes border */
|
struct wlr_box geom; /* layout-relative, includes border */
|
||||||
int isxdg;
|
int isx11;
|
||||||
Monitor *mon;
|
Monitor *mon;
|
||||||
int bw;
|
int bw;
|
||||||
unsigned int tags;
|
unsigned int tags;
|
||||||
|
@ -281,10 +281,10 @@ applyrules(Client *c)
|
||||||
|
|
||||||
/* rule matching */
|
/* rule matching */
|
||||||
c->isfloating = 0;
|
c->isfloating = 0;
|
||||||
appid = c->isxdg ? c->xdg_surface->toplevel->app_id :
|
appid = c->isx11 ? c->xwayland_surface->class :
|
||||||
c->xwayland_surface->class;
|
c->xdg_surface->toplevel->app_id;
|
||||||
title = c->isxdg ? c->xdg_surface->toplevel->title :
|
title = c->isx11 ? c->xwayland_surface->title :
|
||||||
c->xwayland_surface->title;
|
c->xdg_surface->toplevel->title;
|
||||||
if (!appid)
|
if (!appid)
|
||||||
appid = broken;
|
appid = broken;
|
||||||
if (!title)
|
if (!title)
|
||||||
|
@ -342,12 +342,12 @@ buttonpress(struct wl_listener *listener, void *data)
|
||||||
case WLR_BUTTON_PRESSED:;
|
case WLR_BUTTON_PRESSED:;
|
||||||
/* Change focus if the button was _pressed_ over a client */
|
/* Change focus if the button was _pressed_ over a client */
|
||||||
if ((c = xytoclient(cursor->x, cursor->y))) {
|
if ((c = xytoclient(cursor->x, cursor->y))) {
|
||||||
if (c->isxdg)
|
if (c->isx11)
|
||||||
surface = wlr_xdg_surface_surface_at(c->xdg_surface,
|
surface = wlr_surface_surface_at(c->xwayland_surface->surface,
|
||||||
cursor->x - c->geom.x - c->bw,
|
cursor->x - c->geom.x - c->bw,
|
||||||
cursor->y - c->geom.y - c->bw, NULL, NULL);
|
cursor->y - c->geom.y - c->bw, NULL, NULL);
|
||||||
else
|
else
|
||||||
surface = wlr_surface_surface_at(c->xwayland_surface->surface,
|
surface = wlr_xdg_surface_surface_at(c->xdg_surface,
|
||||||
cursor->x - c->geom.x - c->bw,
|
cursor->x - c->geom.x - c->bw,
|
||||||
cursor->y - c->geom.y - c->bw, NULL, NULL);
|
cursor->y - c->geom.y - c->bw, NULL, NULL);
|
||||||
focusclient(c, surface, 1);
|
focusclient(c, surface, 1);
|
||||||
|
@ -490,7 +490,6 @@ createnotifyxdg(struct wl_listener *listener, void *data)
|
||||||
/* Allocate a Client for this surface */
|
/* Allocate a Client for this surface */
|
||||||
c = xdg_surface->data = calloc(1, sizeof(*c));
|
c = xdg_surface->data = calloc(1, sizeof(*c));
|
||||||
c->xdg_surface = xdg_surface;
|
c->xdg_surface = xdg_surface;
|
||||||
c->isxdg = 1;
|
|
||||||
c->bw = borderpx;
|
c->bw = borderpx;
|
||||||
|
|
||||||
/* Tell the client not to try anything fancy */
|
/* Tell the client not to try anything fancy */
|
||||||
|
@ -515,7 +514,7 @@ createnotifyxwayland(struct wl_listener *listener, void *data)
|
||||||
/* Allocate a Client for this surface */
|
/* Allocate a Client for this surface */
|
||||||
c = xwayland_surface->data = calloc(1, sizeof(*c));
|
c = xwayland_surface->data = calloc(1, sizeof(*c));
|
||||||
c->xwayland_surface = xwayland_surface;
|
c->xwayland_surface = xwayland_surface;
|
||||||
c->isxdg = 0;
|
c->isx11 = 1;
|
||||||
c->bw = borderpx;
|
c->bw = borderpx;
|
||||||
|
|
||||||
/* Listen to the various events it can emit */
|
/* Listen to the various events it can emit */
|
||||||
|
@ -652,16 +651,16 @@ focusclient(Client *c, struct wlr_surface *surface, int lift)
|
||||||
* accordingly, e.g. show/hide a caret.
|
* accordingly, e.g. show/hide a caret.
|
||||||
*/
|
*/
|
||||||
if (tl != ptl && ptl) {
|
if (tl != ptl && ptl) {
|
||||||
if (ptl->isxdg)
|
if (ptl->isx11)
|
||||||
wlr_xdg_toplevel_set_activated(ptl->xdg_surface, 0);
|
|
||||||
else
|
|
||||||
wlr_xwayland_surface_activate(ptl->xwayland_surface, 0);
|
wlr_xwayland_surface_activate(ptl->xwayland_surface, 0);
|
||||||
|
else
|
||||||
|
wlr_xdg_toplevel_set_activated(ptl->xdg_surface, 0);
|
||||||
}
|
}
|
||||||
if (tl != ptl && tl) {
|
if (tl != ptl && tl) {
|
||||||
if (tl->isxdg)
|
if (tl->isx11)
|
||||||
wlr_xdg_toplevel_set_activated(tl->xdg_surface, 1);
|
|
||||||
else
|
|
||||||
wlr_xwayland_surface_activate(tl->xwayland_surface, 1);
|
wlr_xwayland_surface_activate(tl->xwayland_surface, 1);
|
||||||
|
else
|
||||||
|
wlr_xdg_toplevel_set_activated(tl->xdg_surface, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -833,15 +832,15 @@ maprequest(struct wl_listener *listener, void *data)
|
||||||
wl_list_insert(&fstack, &c->flink);
|
wl_list_insert(&fstack, &c->flink);
|
||||||
wl_list_insert(&stack, &c->slink);
|
wl_list_insert(&stack, &c->slink);
|
||||||
|
|
||||||
if (c->isxdg) {
|
if (c->isx11) {
|
||||||
wlr_xdg_surface_get_geometry(c->xdg_surface, &c->geom);
|
|
||||||
c->geom.width += 2 * c->bw;
|
|
||||||
c->geom.height += 2 * c->bw;
|
|
||||||
} else {
|
|
||||||
c->geom.x = c->xwayland_surface->x;
|
c->geom.x = c->xwayland_surface->x;
|
||||||
c->geom.y = c->xwayland_surface->y;
|
c->geom.y = c->xwayland_surface->y;
|
||||||
c->geom.width = c->xwayland_surface->width + 2 * c->bw;
|
c->geom.width = c->xwayland_surface->width + 2 * c->bw;
|
||||||
c->geom.height = c->xwayland_surface->height + 2 * c->bw;
|
c->geom.height = c->xwayland_surface->height + 2 * c->bw;
|
||||||
|
} else {
|
||||||
|
wlr_xdg_surface_get_geometry(c->xdg_surface, &c->geom);
|
||||||
|
c->geom.width += 2 * c->bw;
|
||||||
|
c->geom.height += 2 * c->bw;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set initial monitor, tags, floating status, and focus */
|
/* Set initial monitor, tags, floating status, and focus */
|
||||||
|
@ -888,12 +887,12 @@ motionnotify(uint32_t time)
|
||||||
|
|
||||||
/* Otherwise, find the client under the pointer and send the event along. */
|
/* Otherwise, find the client under the pointer and send the event along. */
|
||||||
if ((c = xytoclient(cursor->x, cursor->y))) {
|
if ((c = xytoclient(cursor->x, cursor->y))) {
|
||||||
if (c->isxdg)
|
if (c->isx11)
|
||||||
surface = wlr_xdg_surface_surface_at(c->xdg_surface,
|
surface = wlr_surface_surface_at(c->xwayland_surface->surface,
|
||||||
cursor->x - c->geom.x - c->bw,
|
cursor->x - c->geom.x - c->bw,
|
||||||
cursor->y - c->geom.y - c->bw, &sx, &sy);
|
cursor->y - c->geom.y - c->bw, &sx, &sy);
|
||||||
else
|
else
|
||||||
surface = wlr_surface_surface_at(c->xwayland_surface->surface,
|
surface = wlr_xdg_surface_surface_at(c->xdg_surface,
|
||||||
cursor->x - c->geom.x - c->bw,
|
cursor->x - c->geom.x - c->bw,
|
||||||
cursor->y - c->geom.y - c->bw, &sx, &sy);
|
cursor->y - c->geom.y - c->bw, &sx, &sy);
|
||||||
}
|
}
|
||||||
|
@ -1082,10 +1081,10 @@ renderclients(Monitor *m, struct timespec *now)
|
||||||
rdata.when = now,
|
rdata.when = now,
|
||||||
rdata.x = c->geom.x + c->bw,
|
rdata.x = c->geom.x + c->bw,
|
||||||
rdata.y = c->geom.y + c->bw;
|
rdata.y = c->geom.y + c->bw;
|
||||||
if (c->isxdg)
|
if (c->isx11)
|
||||||
wlr_xdg_surface_for_each_surface(c->xdg_surface, render, &rdata);
|
|
||||||
else
|
|
||||||
wlr_surface_for_each_surface(c->xwayland_surface->surface, render, &rdata);
|
wlr_surface_for_each_surface(c->xwayland_surface->surface, render, &rdata);
|
||||||
|
else
|
||||||
|
wlr_xdg_surface_for_each_surface(c->xdg_surface, render, &rdata);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1138,13 +1137,13 @@ resize(Client *c, int x, int y, int w, int h, int interact)
|
||||||
c->geom.height = h;
|
c->geom.height = h;
|
||||||
applybounds(c, bbox);
|
applybounds(c, bbox);
|
||||||
/* wlroots makes this a no-op if size hasn't changed */
|
/* wlroots makes this a no-op if size hasn't changed */
|
||||||
if (c->isxdg)
|
if (c->isx11)
|
||||||
wlr_xdg_toplevel_set_size(c->xdg_surface,
|
|
||||||
c->geom.width - 2 * c->bw, c->geom.height - 2 * c->bw);
|
|
||||||
else
|
|
||||||
wlr_xwayland_surface_configure(c->xwayland_surface,
|
wlr_xwayland_surface_configure(c->xwayland_surface,
|
||||||
c->geom.x, c->geom.y,
|
c->geom.x, c->geom.y,
|
||||||
c->geom.width - 2 * c->bw, c->geom.height - 2 * c->bw);
|
c->geom.width - 2 * c->bw, c->geom.height - 2 * c->bw);
|
||||||
|
else
|
||||||
|
wlr_xdg_toplevel_set_size(c->xdg_surface,
|
||||||
|
c->geom.width - 2 * c->bw, c->geom.height - 2 * c->bw);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
Loading…
Reference in a new issue