From ba9c29477d27d2c349c0a3b300ae54adbc5d5825 Mon Sep 17 00:00:00 2001 From: julmajustus Date: Mon, 22 Jun 2026 23:24:09 +0300 Subject: [PATCH] fullscreen_adaptive_sync: Minor bug fixes - Fixed missing (void) function type in the implementation - Minor indentation fixes --- patches/fullscreenadaptivesync/README.md | 1 - .../fullscreenadaptivesync-v0.7.patch | 144 ------------------ .../fullscreenadaptivesync-v0.8.patch | 51 ++++--- ...eenadaptivesync-wlroots-next-d41ecb7.patch | 71 ++++++--- 4 files changed, 72 insertions(+), 195 deletions(-) delete mode 100644 patches/fullscreenadaptivesync/fullscreenadaptivesync-v0.7.patch diff --git a/patches/fullscreenadaptivesync/README.md b/patches/fullscreenadaptivesync/README.md index 01f0502..7642928 100644 --- a/patches/fullscreenadaptivesync/README.md +++ b/patches/fullscreenadaptivesync/README.md @@ -23,7 +23,6 @@ Adds a function that automatically enables adaptive sync/VRR when a fullscreen c ### Download - [git branch](https://codeberg.org/julmajustus/dwl/src/branch/fullscreenadaptivesync-wlroots-next) -- [0.7](https://codeberg.org/dwl/dwl-patches/raw/branch/main/patches/fullscreenadaptivesync/fullscreenadaptivesync-v0.7.patch) - [0.8](https://codeberg.org/dwl/dwl-patches/raw/branch/main/patches/fullscreenadaptivesync/fullscreenadaptivesync-v0.8.patch) - [wlroots-next-d41ecb7](https://codeberg.org/dwl/dwl-patches/raw/branch/main/patches/fullscreenadaptivesync/fullscreenadaptivesync-wlroots-next-d41ecb7.patch) diff --git a/patches/fullscreenadaptivesync/fullscreenadaptivesync-v0.7.patch b/patches/fullscreenadaptivesync/fullscreenadaptivesync-v0.7.patch deleted file mode 100644 index ce04ba1..0000000 --- a/patches/fullscreenadaptivesync/fullscreenadaptivesync-v0.7.patch +++ /dev/null @@ -1,144 +0,0 @@ -From 85dccbec7e6d2e967646a8c182a7a24224632c68 Mon Sep 17 00:00:00 2001 -From: julmajustus -Date: Mon, 18 May 2026 00:03:41 +0300 -Subject: [PATCH] fullscreen_adaptive_sync: Minor bug fixes - -- Fixed logic error inside unmapnotify -- Added no-op guards inside set_adaptive_sync -- Added extra check for the config commit success ---- - config.def.h | 1 + - dwl.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 53 insertions(+) - -diff --git a/config.def.h b/config.def.h -index 22d2171..886f1ab 100644 ---- a/config.def.h -+++ b/config.def.h -@@ -142,6 +142,7 @@ static const Key keys[] = { - { MODKEY, XKB_KEY_space, setlayout, {0} }, - { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_space, togglefloating, {0} }, - { MODKEY, XKB_KEY_e, togglefullscreen, {0} }, -+ { MODKEY, XKB_KEY_F5, togglefullscreenadaptivesync, {0} }, - { MODKEY, XKB_KEY_0, view, {.ui = ~0} }, - { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_parenright, tag, {.ui = ~0} }, - { MODKEY, XKB_KEY_comma, focusmon, {.i = WLR_DIRECTION_LEFT} }, -diff --git a/dwl.c b/dwl.c -index a2711f6..1b0682d 100644 ---- a/dwl.c -+++ b/dwl.c -@@ -322,6 +322,7 @@ static void requeststartdrag(struct wl_listener *listener, void *data); - static void requestmonstate(struct wl_listener *listener, void *data); - static void resize(Client *c, struct wlr_box geo, int interact); - static void run(char *startup_cmd); -+static void set_adaptive_sync(Monitor *m, int enabled); - static void setcursor(struct wl_listener *listener, void *data); - static void setcursorshape(struct wl_listener *listener, void *data); - static void setfloating(Client *c, int floating); -@@ -340,6 +341,7 @@ static void tagmon(const Arg *arg); - static void tile(Monitor *m); - static void togglefloating(const Arg *arg); - static void togglefullscreen(const Arg *arg); -+static void togglefullscreenadaptivesync(const Arg *arg); - static void toggletag(const Arg *arg); - static void toggleview(const Arg *arg); - static void unlocksession(struct wl_listener *listener, void *data); -@@ -413,6 +415,8 @@ static struct wlr_box sgeom; - static struct wl_list mons; - static Monitor *selmon; - -+static int fullscreen_adaptive_sync_enabled = 1; -+ - #ifdef XWAYLAND - static void activatex11(struct wl_listener *listener, void *data); - static void associatex11(struct wl_listener *listener, void *data); -@@ -2269,6 +2273,42 @@ run(char *startup_cmd) - wl_display_run(dpy); - } - -+set_adaptive_sync(Monitor *m, int enable) -+{ -+ struct wlr_output_state state; -+ struct wlr_output_configuration_v1 *config; -+ struct wlr_output_configuration_head_v1 *config_head; -+ -+ if (!m || !m->wlr_output || !m->wlr_output->enabled -+ || !fullscreen_adaptive_sync_enabled) -+ return; -+ -+ if (enable && m->wlr_output->adaptive_sync_status -+ == WLR_OUTPUT_ADAPTIVE_SYNC_ENABLED) -+ return; -+ -+ if (!enable && m->wlr_output->adaptive_sync_status -+ == WLR_OUTPUT_ADAPTIVE_SYNC_DISABLED) -+ return; -+ -+ config = wlr_output_configuration_v1_create(); -+ config_head = wlr_output_configuration_head_v1_create(config, m->wlr_output); -+ -+ /* Set and commit the adaptive sync state change */ -+ wlr_output_state_init(&state); -+ wlr_output_state_set_adaptive_sync_enabled(&state, enable); -+ if (!wlr_output_commit_state(m->wlr_output, &state)) { -+ wlr_output_state_finish(&state); -+ wlr_output_configuration_v1_destroy(config); -+ return; -+ } -+ wlr_output_state_finish(&state); -+ -+ /* Broadcast the adaptive sync state change to output_mgr */ -+ config_head->state.adaptive_sync_enabled = enable; -+ wlr_output_manager_v1_set_configuration(output_mgr, config); -+} -+ - void - setcursor(struct wl_listener *listener, void *data) - { -@@ -2332,10 +2372,12 @@ setfullscreen(Client *c, int fullscreen) - if (fullscreen) { - c->prev = c->geom; - resize(c, c->mon->m, 0); -+ set_adaptive_sync(c->mon, 1); - } else { - /* restore previous size instead of arrange for floating windows since - * client positions are set by the user and cannot be recalculated */ - resize(c, c->prev, 0); -+ set_adaptive_sync(c->mon, 0); - } - arrange(c->mon); - printstatus(); -@@ -2739,6 +2781,12 @@ togglefullscreen(const Arg *arg) - setfullscreen(sel, !sel->isfullscreen); - } - -+void -+togglefullscreenadaptivesync(const Arg *arg) -+{ -+ fullscreen_adaptive_sync_enabled = !fullscreen_adaptive_sync_enabled; -+} -+ - void - toggletag(const Arg *arg) - { -@@ -2794,6 +2842,7 @@ unmapnotify(struct wl_listener *listener, void *data) - { - /* Called when the surface is unmapped, and should no longer be shown. */ - Client *c = wl_container_of(listener, c, unmap); -+ Monitor *lastmon = c->mon; // fullscreen_adaptive_sync - if (c == grabc) { - cursor_mode = CurNormal; - grabc = NULL; -@@ -2809,6 +2858,9 @@ unmapnotify(struct wl_listener *listener, void *data) - setmon(c, NULL, 0); - wl_list_remove(&c->flink); - } -+ /* Toggle adaptive sync off when fullscreen client is unmapped */ -+ if (c->isfullscreen) -+ set_adaptive_sync(lastmon, 0); - - wlr_scene_node_destroy(&c->scene->node); - printstatus(); --- -2.53.0 - diff --git a/patches/fullscreenadaptivesync/fullscreenadaptivesync-v0.8.patch b/patches/fullscreenadaptivesync/fullscreenadaptivesync-v0.8.patch index 82c97b6..d25c144 100644 --- a/patches/fullscreenadaptivesync/fullscreenadaptivesync-v0.8.patch +++ b/patches/fullscreenadaptivesync/fullscreenadaptivesync-v0.8.patch @@ -1,6 +1,6 @@ -From 60af6f9dab09710234475b51393a104c21918db3 Mon Sep 17 00:00:00 2001 +From b9bb8d48e1be3008d72da414f6f418d77f3ca16b Mon Sep 17 00:00:00 2001 From: julmajustus -Date: Mon, 18 May 2026 00:12:31 +0300 +Date: Mon, 22 Jun 2026 23:01:00 +0300 Subject: [PATCH] fullscreen_adaptive_sync: Minor bug fixes - Fixed logic error inside unmapnotify @@ -8,8 +8,8 @@ Subject: [PATCH] fullscreen_adaptive_sync: Minor bug fixes - Added extra check for the config commit success --- config.def.h | 1 + - dwl.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 53 insertions(+) + dwl.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 54 insertions(+) diff --git a/config.def.h b/config.def.h index 8a6eda0..06b3153 100644 @@ -24,7 +24,7 @@ index 8a6eda0..06b3153 100644 { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_parenright, tag, {.ui = ~0} }, { MODKEY, XKB_KEY_comma, focusmon, {.i = WLR_DIRECTION_LEFT} }, diff --git a/dwl.c b/dwl.c -index 44f3ad9..737f089 100644 +index 44f3ad9..e4f6a9d 100644 --- a/dwl.c +++ b/dwl.c @@ -319,6 +319,7 @@ static void requeststartdrag(struct wl_listener *listener, void *data); @@ -52,10 +52,11 @@ index 44f3ad9..737f089 100644 #ifdef XWAYLAND static void activatex11(struct wl_listener *listener, void *data); static void associatex11(struct wl_listener *listener, void *data); -@@ -2296,6 +2300,42 @@ run(char *startup_cmd) +@@ -2296,6 +2300,43 @@ run(char *startup_cmd) wl_display_run(dpy); } ++void +set_adaptive_sync(Monitor *m, int enable) +{ + struct wlr_output_state state; @@ -66,13 +67,13 @@ index 44f3ad9..737f089 100644 + || !fullscreen_adaptive_sync_enabled) + return; + -+ if (enable && m->wlr_output->adaptive_sync_status -+ == WLR_OUTPUT_ADAPTIVE_SYNC_ENABLED) -+ return; ++ if (enable && m->wlr_output->adaptive_sync_status ++ == WLR_OUTPUT_ADAPTIVE_SYNC_ENABLED) ++ return; + -+ if (!enable && m->wlr_output->adaptive_sync_status -+ == WLR_OUTPUT_ADAPTIVE_SYNC_DISABLED) -+ return; ++ if (!enable && m->wlr_output->adaptive_sync_status ++ == WLR_OUTPUT_ADAPTIVE_SYNC_DISABLED) ++ return; + + config = wlr_output_configuration_v1_create(); + config_head = wlr_output_configuration_head_v1_create(config, m->wlr_output); @@ -80,12 +81,12 @@ index 44f3ad9..737f089 100644 + /* Set and commit the adaptive sync state change */ + wlr_output_state_init(&state); + wlr_output_state_set_adaptive_sync_enabled(&state, enable); -+ if (!wlr_output_commit_state(m->wlr_output, &state)) { -+ wlr_output_state_finish(&state); -+ wlr_output_configuration_v1_destroy(config); -+ return; -+ } -+ wlr_output_state_finish(&state); ++ if (!wlr_output_commit_state(m->wlr_output, &state)) { ++ wlr_output_state_finish(&state); ++ wlr_output_configuration_v1_destroy(config); ++ return; ++ } ++ wlr_output_state_finish(&state); + + /* Broadcast the adaptive sync state change to output_mgr */ + config_head->state.adaptive_sync_enabled = enable; @@ -95,7 +96,7 @@ index 44f3ad9..737f089 100644 void setcursor(struct wl_listener *listener, void *data) { -@@ -2359,10 +2399,12 @@ setfullscreen(Client *c, int fullscreen) +@@ -2359,10 +2400,12 @@ setfullscreen(Client *c, int fullscreen) if (fullscreen) { c->prev = c->geom; resize(c, c->mon->m, 0); @@ -108,7 +109,7 @@ index 44f3ad9..737f089 100644 } arrange(c->mon); printstatus(); -@@ -2760,6 +2802,12 @@ togglefullscreen(const Arg *arg) +@@ -2760,6 +2803,12 @@ togglefullscreen(const Arg *arg) setfullscreen(sel, !sel->isfullscreen); } @@ -121,21 +122,21 @@ index 44f3ad9..737f089 100644 void toggletag(const Arg *arg) { -@@ -2815,6 +2863,7 @@ unmapnotify(struct wl_listener *listener, void *data) +@@ -2815,6 +2864,7 @@ unmapnotify(struct wl_listener *listener, void *data) { /* Called when the surface is unmapped, and should no longer be shown. */ Client *c = wl_container_of(listener, c, unmap); -+ Monitor *lastmon = c->mon; // fullscreen_adaptive_sync ++ Monitor *lastmon = c->mon; // fullscreen_adaptive_sync if (c == grabc) { cursor_mode = CurNormal; grabc = NULL; -@@ -2830,6 +2879,9 @@ unmapnotify(struct wl_listener *listener, void *data) +@@ -2830,6 +2880,9 @@ unmapnotify(struct wl_listener *listener, void *data) setmon(c, NULL, 0); wl_list_remove(&c->flink); } + /* Toggle adaptive sync off when fullscreen client is unmapped */ -+ if (c->isfullscreen) -+ set_adaptive_sync(lastmon, 0); ++ if (c->isfullscreen) ++ set_adaptive_sync(lastmon, 0); wlr_scene_node_destroy(&c->scene->node); printstatus(); diff --git a/patches/fullscreenadaptivesync/fullscreenadaptivesync-wlroots-next-d41ecb7.patch b/patches/fullscreenadaptivesync/fullscreenadaptivesync-wlroots-next-d41ecb7.patch index d3bd12e..bc42d79 100644 --- a/patches/fullscreenadaptivesync/fullscreenadaptivesync-wlroots-next-d41ecb7.patch +++ b/patches/fullscreenadaptivesync/fullscreenadaptivesync-wlroots-next-d41ecb7.patch @@ -1,6 +1,6 @@ -From cf817259dbb1235d1ffc073d4e0f128676552666 Mon Sep 17 00:00:00 2001 +From 5d475f7afe7ba7cee389a5c5ed4fa676b408fee5 Mon Sep 17 00:00:00 2001 From: julmajustus -Date: Mon, 18 May 2026 00:15:18 +0300 +Date: Mon, 22 Jun 2026 23:02:25 +0300 Subject: [PATCH] fullscreen_adaptive_sync: Minor bug fixes - Fixed logic error inside unmapnotify @@ -8,8 +8,8 @@ Subject: [PATCH] fullscreen_adaptive_sync: Minor bug fixes - Added extra check for the config commit success --- config.def.h | 1 + - dwl.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 53 insertions(+) + dwl.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++--- + 2 files changed, 57 insertions(+), 3 deletions(-) diff --git a/config.def.h b/config.def.h index 8a6eda0..06b3153 100644 @@ -24,7 +24,7 @@ index 8a6eda0..06b3153 100644 { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_parenright, tag, {.ui = ~0} }, { MODKEY, XKB_KEY_comma, focusmon, {.i = WLR_DIRECTION_LEFT} }, diff --git a/dwl.c b/dwl.c -index 8101ffa..2f1c80b 100644 +index 8101ffa..aabd882 100644 --- a/dwl.c +++ b/dwl.c @@ -323,6 +323,7 @@ static void requeststartdrag(struct wl_listener *listener, void *data); @@ -52,10 +52,11 @@ index 8101ffa..2f1c80b 100644 #ifdef XWAYLAND static void activatex11(struct wl_listener *listener, void *data); static void associatex11(struct wl_listener *listener, void *data); -@@ -2300,6 +2304,42 @@ run(char *startup_cmd) +@@ -2300,6 +2304,43 @@ run(char *startup_cmd) wl_display_run(dpy); } ++void +set_adaptive_sync(Monitor *m, int enable) +{ + struct wlr_output_state state; @@ -66,13 +67,13 @@ index 8101ffa..2f1c80b 100644 + || !fullscreen_adaptive_sync_enabled) + return; + -+ if (enable && m->wlr_output->adaptive_sync_status -+ == WLR_OUTPUT_ADAPTIVE_SYNC_ENABLED) -+ return; ++ if (enable && m->wlr_output->adaptive_sync_status ++ == WLR_OUTPUT_ADAPTIVE_SYNC_ENABLED) ++ return; + -+ if (!enable && m->wlr_output->adaptive_sync_status -+ == WLR_OUTPUT_ADAPTIVE_SYNC_DISABLED) -+ return; ++ if (!enable && m->wlr_output->adaptive_sync_status ++ == WLR_OUTPUT_ADAPTIVE_SYNC_DISABLED) ++ return; + + config = wlr_output_configuration_v1_create(); + config_head = wlr_output_configuration_head_v1_create(config, m->wlr_output); @@ -80,12 +81,12 @@ index 8101ffa..2f1c80b 100644 + /* Set and commit the adaptive sync state change */ + wlr_output_state_init(&state); + wlr_output_state_set_adaptive_sync_enabled(&state, enable); -+ if (!wlr_output_commit_state(m->wlr_output, &state)) { -+ wlr_output_state_finish(&state); -+ wlr_output_configuration_v1_destroy(config); -+ return; -+ } -+ wlr_output_state_finish(&state); ++ if (!wlr_output_commit_state(m->wlr_output, &state)) { ++ wlr_output_state_finish(&state); ++ wlr_output_configuration_v1_destroy(config); ++ return; ++ } ++ wlr_output_state_finish(&state); + + /* Broadcast the adaptive sync state change to output_mgr */ + config_head->state.adaptive_sync_enabled = enable; @@ -95,7 +96,7 @@ index 8101ffa..2f1c80b 100644 void setcursor(struct wl_listener *listener, void *data) { -@@ -2363,10 +2403,12 @@ setfullscreen(Client *c, int fullscreen) +@@ -2363,10 +2404,12 @@ setfullscreen(Client *c, int fullscreen) if (fullscreen) { c->prev = c->geom; resize(c, c->mon->m, 0); @@ -108,7 +109,27 @@ index 8101ffa..2f1c80b 100644 } arrange(c->mon); printstatus(); -@@ -2767,6 +2809,12 @@ togglefullscreen(const Arg *arg) +@@ -2546,7 +2589,7 @@ setup(void) + output_layout = wlr_output_layout_create(dpy); + wl_signal_add(&output_layout->events.change, &layout_change); + +- wlr_xdg_output_manager_v1_create(dpy, output_layout); ++ wlr_xdg_output_manager_v1_create(dpy, output_layout); + + /* Configure a listener to be notified when new outputs are available on the + * backend. */ +@@ -2636,8 +2679,8 @@ setup(void) + wl_signal_add(&virtual_keyboard_mgr->events.new_virtual_keyboard, + &new_virtual_keyboard); + virtual_pointer_mgr = wlr_virtual_pointer_manager_v1_create(dpy); +- wl_signal_add(&virtual_pointer_mgr->events.new_virtual_pointer, +- &new_virtual_pointer); ++ wl_signal_add(&virtual_pointer_mgr->events.new_virtual_pointer, ++ &new_virtual_pointer); + + seat = wlr_seat_create(dpy, "seat0"); + wl_signal_add(&seat->events.request_set_cursor, &request_cursor); +@@ -2767,6 +2810,12 @@ togglefullscreen(const Arg *arg) setfullscreen(sel, !sel->isfullscreen); } @@ -121,21 +142,21 @@ index 8101ffa..2f1c80b 100644 void toggletag(const Arg *arg) { -@@ -2822,6 +2870,7 @@ unmapnotify(struct wl_listener *listener, void *data) +@@ -2822,6 +2871,7 @@ unmapnotify(struct wl_listener *listener, void *data) { /* Called when the surface is unmapped, and should no longer be shown. */ Client *c = wl_container_of(listener, c, unmap); -+ Monitor *lastmon = c->mon; // fullscreen_adaptive_sync ++ Monitor *lastmon = c->mon; // fullscreen_adaptive_sync if (c == grabc) { cursor_mode = CurNormal; grabc = NULL; -@@ -2837,6 +2886,9 @@ unmapnotify(struct wl_listener *listener, void *data) +@@ -2837,6 +2887,9 @@ unmapnotify(struct wl_listener *listener, void *data) setmon(c, NULL, 0); wl_list_remove(&c->flink); } + /* Toggle adaptive sync off when fullscreen client is unmapped */ -+ if (c->isfullscreen) -+ set_adaptive_sync(lastmon, 0); ++ if (c->isfullscreen) ++ set_adaptive_sync(lastmon, 0); wlr_scene_node_destroy(&c->scene->node); printstatus();