summaryrefslogtreecommitdiffstats
path: root/dwl-patches/patches/customfloat/customfloat.patch
diff options
context:
space:
mode:
Diffstat (limited to 'dwl-patches/patches/customfloat/customfloat.patch')
-rw-r--r--dwl-patches/patches/customfloat/customfloat.patch93
1 files changed, 93 insertions, 0 deletions
diff --git a/dwl-patches/patches/customfloat/customfloat.patch b/dwl-patches/patches/customfloat/customfloat.patch
new file mode 100644
index 0000000..d295571
--- /dev/null
+++ b/dwl-patches/patches/customfloat/customfloat.patch
@@ -0,0 +1,93 @@
+From 4f19f5499610d56f2616da5d44039403ac9d4c06 Mon Sep 17 00:00:00 2001
+From: wochap <gean.marroquin@gmail.com>
+Date: Tue, 9 Jul 2024 10:52:37 -0500
+Subject: [PATCH] implement customfloat and generate patches
+
+---
+ config.def.h | 7 ++++---
+ dwl.c | 27 +++++++++++++++++++++++++++
+ 2 files changed, 31 insertions(+), 3 deletions(-)
+
+diff --git a/config.def.h b/config.def.h
+index 22d2171..dee53f4 100644
+--- a/config.def.h
++++ b/config.def.h
+@@ -13,6 +13,7 @@ static const float focuscolor[] = COLOR(0x005577ff);
+ static const float urgentcolor[] = COLOR(0xff0000ff);
+ /* This conforms to the xdg-protocol. Set the alpha to zero to restore the old behavior */
+ static const float fullscreen_bg[] = {0.1f, 0.1f, 0.1f, 1.0f}; /* You can also use glsl colors */
++static const int respect_monitor_reserved_area = 0; /* 1 to monitor center while respecting the monitor's reserved area, 0 to monitor center */
+
+ /* tagging - TAGCOUNT must be no greater than 31 */
+ #define TAGCOUNT (9)
+@@ -22,10 +23,10 @@ static int log_level = WLR_ERROR;
+
+ /* NOTE: ALWAYS keep a rule declared even if you don't use rules (e.g leave at least one example) */
+ static const Rule rules[] = {
+- /* app_id title tags mask isfloating monitor */
++ /* app_id title tags mask isfloating monitor x y width height */
+ /* examples: */
+- { "Gimp_EXAMPLE", NULL, 0, 1, -1 }, /* Start on currently visible tags floating, not tiled */
+- { "firefox_EXAMPLE", NULL, 1 << 8, 0, -1 }, /* Start on ONLY tag "9" */
++ { "Gimp_EXAMPLE", NULL, 0, 1, -1, 0, 0, 1000, 0.75 }, /* Start on currently visible tags floating, not tiled */
++ { "firefox_EXAMPLE", NULL, 1 << 8, 0, -1, 0, 0, 0, 0 },/* Start on ONLY tag "9" */
+ };
+
+ /* layout(s) */
+diff --git a/dwl.c b/dwl.c
+index dc0437e..be0340f 100644
+--- a/dwl.c
++++ b/dwl.c
+@@ -230,6 +230,10 @@ typedef struct {
+ uint32_t tags;
+ int isfloating;
+ int monitor;
++ int x;
++ int y;
++ float w;
++ float h;
+ } Rule;
+
+ typedef struct {
+@@ -454,6 +458,11 @@ applyrules(Client *c)
+ int i;
+ const Rule *r;
+ Monitor *mon = selmon, *m;
++ int newwidth;
++ int newheight;
++ int newx;
++ int newy;
++ int apply_resize = 0;
+
+ c->isfloating = client_is_float_type(c);
+ if (!(appid = client_get_appid(c)))
+@@ -471,9 +480,27 @@ applyrules(Client *c)
+ if (r->monitor == i++)
+ mon = m;
+ }
++ if (c->isfloating || !mon->lt[mon->sellt]->arrange) {
++ /* client is floating or in floating layout */
++ struct wlr_box b = respect_monitor_reserved_area ? mon->w : mon->m;
++ newwidth = (int)round(r->w ? (r->w <= 1 ? b.width * r->w : r->w) : c->geom.width);
++ newheight = (int)round(r->h ? (r->h <= 1 ? b.height * r->h : r->h) : c->geom.height);
++ newx = (int)round(r->x ? (r->x <= 1 ? b.width * r->x + b.x : r->x + b.x) : c->geom.x);
++ newy = (int)round(r->y ? (r->y <= 1 ? b.height * r->y + b.y : r->y + b.y) : c->geom.y);
++ apply_resize = 1;
++
++ }
+ }
+ }
+ setmon(c, mon, newtags);
++ if (apply_resize) {
++ resize(c, (struct wlr_box){
++ .x = newx,
++ .y = newy,
++ .width = newwidth,
++ .height = newheight,
++ }, 1);
++ }
+ }
+
+ void
+--
+2.45.1