From 4a7d1bebf5c706109c92bd0415ab62825a7556ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leonardo=20Hern=C3=A1ndez=20Hern=C3=A1ndez?= Date: Sat, 22 Jun 2024 00:21:17 -0600 Subject: [PATCH 1/3] add bugref for negative x,y monitor position and xwayland --- config.def.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/config.def.h b/config.def.h index a784eb4..646a3d6 100644 --- a/config.def.h +++ b/config.def.h @@ -36,8 +36,10 @@ static const Layout layouts[] = { }; /* monitors */ -/* (x=-1, y=-1) is reserved as an "autoconfigure" monitor position indicator */ -/* WARNING: negative values other than (-1, -1) cause problems with xwayland clients' menus */ +/* (x=-1, y=-1) is reserved as an "autoconfigure" monitor position indicator + * WARNING: negative values other than (-1, -1) cause problems with Xwayland clients + * https://gitlab.freedesktop.org/xorg/xserver/-/issues/899 +*/ /* NOTE: ALWAYS add a fallback rule, even if you are completely sure it won't be used */ static const MonitorRule monrules[] = { /* name mfact nmaster scale layout rotate/reflect x y */ From 13925eb1da8af2c1d23ee9d01efd03c3626081b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leonardo=20Hern=C3=A1ndez=20Hern=C3=A1ndez?= Date: Sun, 23 Jun 2024 14:42:50 -0600 Subject: [PATCH 2/3] correctly report position to xwayland clients Previously we didn't take into account their borders requiring us to add `borderpx` to override_redirect clients. Fixes: https://codeberg.org/dwl/dwl/issues/651 --- client.h | 2 +- dwl.c | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/client.h b/client.h index 19861b9..42f225f 100644 --- a/client.h +++ b/client.h @@ -350,7 +350,7 @@ client_set_size(Client *c, uint32_t width, uint32_t height) #ifdef XWAYLAND if (client_is_x11(c)) { wlr_xwayland_surface_configure(c->surface.xwayland, - c->geom.x, c->geom.y, width, height); + c->geom.x + c->bw, c->geom.y + c->bw, width, height); return 0; } #endif diff --git a/dwl.c b/dwl.c index d48bf40..00e9cc1 100644 --- a/dwl.c +++ b/dwl.c @@ -1651,8 +1651,7 @@ mapnotify(struct wl_listener *listener, void *data) if (client_is_unmanaged(c)) { /* Unmanaged clients always are floating */ wlr_scene_node_reparent(&c->scene->node, layers[LyrFloat]); - wlr_scene_node_set_position(&c->scene->node, c->geom.x + borderpx, - c->geom.y + borderpx); + wlr_scene_node_set_position(&c->scene->node, c->geom.x, c->geom.y); if (client_wants_focus(c)) { focusclient(c, 1); exclusive_focus = c; @@ -3038,7 +3037,7 @@ createnotifyx11(struct wl_listener *listener, void *data) c = xsurface->data = ecalloc(1, sizeof(*c)); c->surface.xwayland = xsurface; c->type = X11; - c->bw = borderpx; + c->bw = client_is_unmanaged(c) ? 0 : borderpx; /* Listen to the various events it can emit */ LISTEN(&xsurface->events.associate, &c->associate, associatex11); From 46ae075430017ccd4a58d63a166fe1e696d3f379 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leonardo=20Hern=C3=A1ndez=20Hern=C3=A1ndez?= Date: Wed, 5 Jun 2024 00:42:43 -0600 Subject: [PATCH 3/3] set preferred scale on creation (LayerShell) --- dwl.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dwl.c b/dwl.c index 00e9cc1..521b07a 100644 --- a/dwl.c +++ b/dwl.c @@ -71,6 +71,7 @@ #define MAX(A, B) ((A) > (B) ? (A) : (B)) #define MIN(A, B) ((A) < (B) ? (A) : (B)) #define ROUND(X) ((int)((X < 0) ? (X - 0.5) : (X + 0.5))) +#define CEIL(X) ((int)((X < 0) ? (X) : ((int)X == X) ? (X) : ((int)X + 1))) #define CLEANMASK(mask) (mask & ~WLR_MODIFIER_CAPS) #define VISIBLEON(C, M) ((M) && (C)->mon == (M) && ((C)->tags & (M)->tagset[(M)->seltags])) #define LENGTH(X) (sizeof X / sizeof X[0]) @@ -884,6 +885,8 @@ createlayersurface(struct wl_listener *listener, void *data) wl_list_insert(&l->mon->layers[layer_surface->pending.layer],&l->link); wlr_surface_send_enter(surface, layer_surface->output); + wlr_fractional_scale_v1_notify_scale(surface, l->mon->wlr_output->scale); + wlr_surface_set_preferred_buffer_scale(surface, CEIL(l->mon->wlr_output->scale)); /* Temporarily set the layer's current state to pending * so that we can easily arrange it