update customfloat for HEAD

This commit is contained in:
wochap 2024-04-11 18:06:35 -05:00
parent bf09845921
commit 98cba933c9
No known key found for this signature in database
GPG Key ID: FE4CF844E73095E1

View File

@ -1,49 +1,49 @@
From c02452204c40663f9a7094e59efa12131555fbc6 Mon Sep 17 00:00:00 2001 From ff29aba2f45d5acdee66efaf7cf94ab66145c0ed Mon Sep 17 00:00:00 2001
From: wochap <gean.marroquin@gmail.com> From: wochap <gean.marroquin@gmail.com>
Date: Wed, 6 Mar 2024 00:02:35 -0500 Date: Thu, 11 Apr 2024 14:19:24 -0500
Subject: [PATCH] apply Stivvo customfloat patch Subject: [PATCH] rules for floating windows support default x, y, width,
height If the width or height is less than or equal to 1, then the value will
be interpreted as a percentage. For example, 0.5 represents 50%, 0.25
represents 25%, and 1 represents 100%. NOTE: Some clients, like Thunar, have
minimum width/height
source: https://github.com/djpohly/dwl/wiki/customfloat `floating_relative_to_monitor` allows the user to choose whether to position relative to the monitor or relative to the window area.
rewrite so it works with latest dwl
if width or height is less than or equal to 1, then the value will be taken as a percentage value, e.g. 0.5 is 50%, 0.25 is 25%, 1 is 100%
**NOTE**, some clients such as Thunar, have a minimal width/height
--- ---
config.def.h | 7 ++++--- config.def.h | 7 ++++---
dwl.c | 16 ++++++++++++++++ dwl.c | 16 ++++++++++++++++
2 files changed, 20 insertions(+), 3 deletions(-) 2 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/config.def.h b/config.def.h diff --git a/config.def.h b/config.def.h
index db0babc..05de8ee 100644 index 8847e58..ebaf1ab 100644
--- a/config.def.h --- a/config.def.h
+++ b/config.def.h +++ b/config.def.h
@@ -12,6 +12,7 @@ static const float focuscolor[] = COLOR(0x005577ff); @@ -13,6 +13,7 @@ static const float focuscolor[] = COLOR(0x005577ff);
static const float urgentcolor[] = COLOR(0xff0000ff); static const float urgentcolor[] = COLOR(0xff0000ff);
/* To conform the xdg-protocol, set the alpha to zero to restore the old behavior */ /* This conforms to the xdg-protocol. Set the alpha to zero to restore the old behavior */
static const float fullscreen_bg[] = {0.1, 0.1, 0.1, 1.0}; /* You can also use glsl colors */ static const float fullscreen_bg[] = {0.1f, 0.1f, 0.1f, 1.0f}; /* You can also use glsl colors */
+static const int center_relative_to_monitor = 0; /* 0 means center floating relative to the window area */ +static const int floating_relative_to_monitor = 0; /* 0 means center floating relative to the window area */
/* tagging - TAGCOUNT must be no greater than 31 */ /* tagging - TAGCOUNT must be no greater than 31 */
#define TAGCOUNT (9) #define TAGCOUNT (9)
@@ -20,11 +21,11 @@ static const float fullscreen_bg[] = {0.1, 0.1, 0.1, 1.0}; /* You can al @@ -21,10 +22,10 @@ static const float fullscreen_bg[] = {0.1f, 0.1f, 0.1f, 1.0f}; /* You ca
static int log_level = WLR_ERROR; static int log_level = WLR_ERROR;
static const Rule rules[] = { static const Rule rules[] = {
- /* app_id title tags mask isfloating monitor */ - /* app_id title tags mask isfloating monitor */
+ /* app_id title tags mask isfloating monitor x y width height */ + /* app_id title tags mask isfloating monitor x y width height */
/* examples: /* examples: */
- { "Gimp", NULL, 0, 1, -1 }, - { "Gimp_EXAMPLE", NULL, 0, 1, -1 }, /* Start on currently visible tags floating, not tiled */
+ { "Gimp", NULL, 0, 1, -1, 0, 0, 1000, 0.75 }, - { "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", NULL, 1 << 8, 0, -1 }, + { "firefox_EXAMPLE", NULL, 1 << 8, 0, -1, 0, 0, 0, 0 },/* Start on ONLY tag "9" */
+ { "firefox", NULL, 1 << 8, 0, -1, 0, 0, 0, 0 },
}; };
/* layout(s) */ /* layout(s) */
diff --git a/dwl.c b/dwl.c diff --git a/dwl.c b/dwl.c
index ef27a1d..bbb3740 100644 index bf763df..94e4d7d 100644
--- a/dwl.c --- a/dwl.c
+++ b/dwl.c +++ b/dwl.c
@@ -215,6 +215,10 @@ typedef struct { @@ -228,6 +228,10 @@ typedef struct {
uint32_t tags; uint32_t tags;
int isfloating; int isfloating;
int monitor; int monitor;
@ -54,14 +54,14 @@ index ef27a1d..bbb3740 100644
} Rule; } Rule;
typedef struct { typedef struct {
@@ -438,6 +442,18 @@ applyrules(Client *c) @@ -468,6 +472,18 @@ applyrules(Client *c)
wl_list_for_each(m, &mons, link)
if (r->monitor == i++) if (r->monitor == i++)
mon = m; mon = m;
}
+ if (c->isfloating) { + if (c->isfloating) {
+ struct wlr_box b = center_relative_to_monitor ? mon->m : mon->w; + struct wlr_box b = floating_relative_to_monitor ? mon->m : mon->w;
+ float newwidth = r->w ? (r->w <= 1 ? b.width * r->w : r->w) : c->geom.width; + int newwidth = ROUND(r->w ? (r->w <= 1 ? b.width * r->w : r->w) : c->geom.width);
+ float newheight = r->h ? (r->h <= 1 ? b.height * r->h : r->h) : c->geom.height; + int newheight = ROUND(r->h ? (r->h <= 1 ? b.height * r->h : r->h) : c->geom.height);
+ +
+ resize(c, (struct wlr_box){ + resize(c, (struct wlr_box){
+ .x = r->x ? r->x + b.x : (b.width - newwidth) / 2 + b.x, + .x = r->x ? r->x + b.x : (b.width - newwidth) / 2 + b.x,
@ -72,6 +72,6 @@ index ef27a1d..bbb3740 100644
+ } + }
} }
} }
wlr_scene_node_reparent(&c->scene->node, layers[c->isfloating ? LyrFloat : LyrTile]); setmon(c, mon, newtags);
-- --
2.42.0 2.43.2