From 4a7d1bebf5c706109c92bd0415ab62825a7556ee Mon Sep 17 00:00:00 2001
From: Leonardo Hernández Hernández <leohdz172@proton.me>
Date: Sat, 22 Jun 2024 00:21:17 -0600
Subject: 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 */
-- 
cgit v1.2.3


From 13925eb1da8af2c1d23ee9d01efd03c3626081b2 Mon Sep 17 00:00:00 2001
From: Leonardo Hernández Hernández <leohdz172@proton.me>
Date: Sun, 23 Jun 2024 14:42:50 -0600
Subject: 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);
-- 
cgit v1.2.3


From 46ae075430017ccd4a58d63a166fe1e696d3f379 Mon Sep 17 00:00:00 2001
From: Leonardo Hernández Hernández <leohdz172@proton.me>
Date: Wed, 5 Jun 2024 00:42:43 -0600
Subject: 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
-- 
cgit v1.2.3