fix: get better patch?

This commit is contained in:
Youwen Wu 2024-08-21 16:03:42 -07:00
parent feac40c47e
commit e1cbf35efb
22 changed files with 5081 additions and 2101 deletions

View file

@ -1,28 +0,0 @@
From 279ec1c291021479b050c83a0435ac7076c1aee0 Mon Sep 17 00:00:00 2001
From: vaxerski <vaxry@vaxry.net>
Date: Sun, 18 Aug 2024 19:51:54 +0200
Subject: [PATCH 01/20] linux-dmabuf: allow on split-node systems
ref #7364
---
src/protocols/LinuxDMABUF.cpp | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/src/protocols/LinuxDMABUF.cpp b/src/protocols/LinuxDMABUF.cpp
index 3cdb5b34..32625792 100644
--- a/src/protocols/LinuxDMABUF.cpp
+++ b/src/protocols/LinuxDMABUF.cpp
@@ -490,9 +490,8 @@ CLinuxDMABufV1Protocol::CLinuxDMABufV1Protocol(const wl_interface* iface, const
return;
}
} else {
- LOGM(ERR, "DRM device {} has no render node, disabling linux dmabuf", device->nodes[DRM_NODE_PRIMARY] ? device->nodes[DRM_NODE_PRIMARY] : "null");
+ LOGM(ERR, "DRM device {} has no render node, disabling linux dmabuf checks", device->nodes[DRM_NODE_PRIMARY] ? device->nodes[DRM_NODE_PRIMARY] : "null");
drmFreeDevice(&device);
- removeGlobal();
}
});
}
--
2.45.2

View file

@ -1,38 +0,0 @@
From 50348a3ddbb6bc3367300c9bba2ff682e4a356e3 Mon Sep 17 00:00:00 2001
From: vaxerski <vaxry@vaxry.net>
Date: Sun, 18 Aug 2024 20:19:13 +0200
Subject: [PATCH 02/20] renderer: pass custom modelines to aq
ref #7390
---
src/render/Renderer.cpp | 14 +++-----------
1 file changed, 3 insertions(+), 11 deletions(-)
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp
index b363c287..c2ecbbf3 100644
--- a/src/render/Renderer.cpp
+++ b/src/render/Renderer.cpp
@@ -1994,17 +1994,9 @@ bool CHyprRenderer::applyMonitorRule(CMonitor* pMonitor, SMonitorRule* pMonitorR
if (pMonitor->output->getBackend()->type() != Aquamarine::eBackendType::AQ_BACKEND_DRM) {
Debug::log(ERR, "Tried to set custom modeline on non-DRM output");
fail = true;
- } else {
- // FIXME:
- // auto* mode = wlr_drm_connector_add_mode(pMonitor->output, &RULE->drmMode);
- // if (mode) {
- // wlr_output_state_set_mode(pMonitor->state.wlr(), mode);
- // pMonitor->customDrmMode = RULE->drmMode;
- // } else {
- // Debug::log(ERR, "wlr_drm_connector_add_mode failed");
- // fail = true;
- // }
- }
+ } else
+ pMonitor->output->state->setCustomMode(makeShared<Aquamarine::SOutputMode>(
+ Aquamarine::SOutputMode{.pixelSize = {RULE->drmMode.hdisplay, RULE->drmMode.vdisplay}, .refreshRate = RULE->drmMode.vrefresh, .modeInfo = RULE->drmMode}));
} else
pMonitor->output->state->setCustomMode(makeShared<Aquamarine::SOutputMode>(Aquamarine::SOutputMode{.pixelSize = RULE->resolution, .refreshRate = WLRREFRESHRATE}));
--
2.45.2

View file

@ -1,28 +0,0 @@
From 5afc4dc42e2409da62b7bcdf0ead90329e8d7a92 Mon Sep 17 00:00:00 2001
From: Tom Englund <tomenglund26@gmail.com>
Date: Sun, 18 Aug 2024 21:02:46 +0200
Subject: [PATCH 03/20] compositor: update suspendstate on window move (#7396)
hyprctl dispatch -- movetoworkspacesilent x,"^kitty$" where X is the
current workspace makes kitty stops updating until current workspace is
changed while it is on the screen. update the suspend state after it has
been moved.
---
src/Compositor.cpp | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/Compositor.cpp b/src/Compositor.cpp
index 9d247a56..1437a653 100644
--- a/src/Compositor.cpp
+++ b/src/Compositor.cpp
@@ -2737,6 +2737,7 @@ void CCompositor::moveWindowToWorkspaceSafe(PHLWINDOW pWindow, PHLWORKSPACE pWor
g_pCompositor->updateWorkspaceWindows(pWorkspace->m_iID);
g_pCompositor->updateWorkspaceWindows(pWindow->workspaceID());
+ g_pCompositor->updateSuspendedStates();
}
PHLWINDOW CCompositor::getForceFocus() {
--
2.45.2

View file

@ -1,34 +0,0 @@
From bf611fbbf3183e6f96529d79189be56189a46e1b Mon Sep 17 00:00:00 2001
From: vaxerski <vaxry@vaxry.net>
Date: Sun, 18 Aug 2024 22:40:21 +0200
Subject: [PATCH 04/20] screencopy: nuke unused stuff
---
src/protocols/Screencopy.cpp | 11 -----------
1 file changed, 11 deletions(-)
diff --git a/src/protocols/Screencopy.cpp b/src/protocols/Screencopy.cpp
index f246f6dd..8a7fd567 100644
--- a/src/protocols/Screencopy.cpp
+++ b/src/protocols/Screencopy.cpp
@@ -38,17 +38,6 @@ CScreencopyFrame::CScreencopyFrame(SP<CZwlrScreencopyFrameV1> resource_, int32_t
g_pHyprRenderer->makeEGLCurrent();
- if (g_pHyprOpenGL->m_mMonitorRenderResources.contains(pMonitor)) {
- const auto& RDATA = g_pHyprOpenGL->m_mMonitorRenderResources.at(pMonitor);
- // bind the fb for its format. Suppress gl errors.
-#ifndef GLES2
- glBindFramebuffer(GL_READ_FRAMEBUFFER, RDATA.offloadFB.m_iFb);
-#else
- glBindFramebuffer(GL_FRAMEBUFFER, RDATA.offloadFB.m_iFb);
-#endif
- } else
- LOGM(ERR, "No RDATA in screencopy???");
-
shmFormat = g_pHyprOpenGL->getPreferredReadFormat(pMonitor);
if (shmFormat == DRM_FORMAT_INVALID) {
LOGM(ERR, "No format supported by renderer in capture output");
--
2.45.2

View file

@ -1,25 +0,0 @@
From fa12efdd2aae6851305245f16a801fb571fbe2c1 Mon Sep 17 00:00:00 2001
From: vaxerski <vaxry@vaxry.net>
Date: Sun, 18 Aug 2024 22:54:47 +0200
Subject: [PATCH 05/20] protocol: fix logm template checks
---
src/protocols/WaylandProtocol.hpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/protocols/WaylandProtocol.hpp b/src/protocols/WaylandProtocol.hpp
index 0fa8daab..87c75ed8 100644
--- a/src/protocols/WaylandProtocol.hpp
+++ b/src/protocols/WaylandProtocol.hpp
@@ -32,7 +32,7 @@
} else if (level == LOG || level == INFO || level == TRACE) { \
oss << "[" << EXTRACT_CLASS_NAME() << "] "; \
} \
- if constexpr (std::is_same_v<decltype(__VA_ARGS__), std::string>) { \
+ if constexpr (std::tuple_size<decltype(std::make_tuple(__VA_ARGS__))>::value == 1 && std::is_same_v<decltype(__VA_ARGS__), std::string>) { \
oss << __VA_ARGS__; \
Debug::log(level, oss.str()); \
} else { \
--
2.45.2

View file

@ -1,27 +0,0 @@
From f4045ab8d032186b7c5409cd9f05eeaa813320ba Mon Sep 17 00:00:00 2001
From: vaxerski <vaxry@vaxry.net>
Date: Sun, 18 Aug 2024 22:57:21 +0200
Subject: [PATCH 06/20] screencopy: fix 10b format r/b flip
---
src/protocols/Screencopy.cpp | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/src/protocols/Screencopy.cpp b/src/protocols/Screencopy.cpp
index 8a7fd567..b25d9456 100644
--- a/src/protocols/Screencopy.cpp
+++ b/src/protocols/Screencopy.cpp
@@ -46,6 +46,10 @@ CScreencopyFrame::CScreencopyFrame(SP<CZwlrScreencopyFrameV1> resource_, int32_t
return;
}
+ // TODO: hack, we can't bit flip so we'll format flip heh, GL_BGRA_EXT wont work here
+ if (shmFormat == DRM_FORMAT_XRGB2101010 || shmFormat == DRM_FORMAT_ARGB2101010)
+ shmFormat = DRM_FORMAT_XBGR2101010;
+
const auto PSHMINFO = FormatUtils::getPixelFormatFromDRM(shmFormat);
if (!PSHMINFO) {
LOGM(ERR, "No pixel format supported by renderer in capture output");
--
2.45.2

View file

@ -1,31 +0,0 @@
From 11dfb8397becca85cad078dd31bf043d1c40ceac Mon Sep 17 00:00:00 2001
From: diniamo <diniamo53@gmail.com>
Date: Sun, 18 Aug 2024 20:43:04 +0200
Subject: [PATCH 07/20] flake: update aquamarine
---
flake.lock | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/flake.lock b/flake.lock
index c70d31d1..97016819 100644
--- a/flake.lock
+++ b/flake.lock
@@ -16,11 +16,11 @@
]
},
"locked": {
- "lastModified": 1723920171,
- "narHash": "sha256-dVCMrAe+D/5S91erhwQj2DSzHOVzAanWqoy+vPWB9DY=",
+ "lastModified": 1724006173,
+ "narHash": "sha256-1ROh0buuxiMyc6eIb3CIbJsmYO7PhLqSYs55mOx1XTk=",
"owner": "hyprwm",
"repo": "aquamarine",
- "rev": "71d49670fe246cdaff4860b0effba0ab9f163b72",
+ "rev": "7f8df01d4297b9068a9592400f16044602844f86",
"type": "github"
},
"original": {
--
2.45.2

View file

@ -1,30 +0,0 @@
From 33015546c62a7b73793d62983a84b097362cec1a Mon Sep 17 00:00:00 2001
From: Jan Beich <jbeich@FreeBSD.org>
Date: Mon, 19 Aug 2024 12:46:36 +0000
Subject: [PATCH 09/20] config: add missing header for libc++ after
92744b5b9aa3 (#7403)
In file included from src/pch/pch.hpp:1:
In file included from src/Compositor.hpp:11:
src/config/ConfigManager.hpp:147:10: error: no template named 'variant' in namespace 'std'
147 | std::variant<SBoolData, SRangeData, SFloatData, SStringData, SColorData, SChoiceData, SGradientData, SVectorData> data;
| ~~~~~^
---
src/config/ConfigManager.hpp | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/config/ConfigManager.hpp b/src/config/ConfigManager.hpp
index 4241031b..4d087753 100644
--- a/src/config/ConfigManager.hpp
+++ b/src/config/ConfigManager.hpp
@@ -6,6 +6,7 @@
#include "../debug/Log.hpp"
#include <unordered_map>
#include "../defines.hpp"
+#include <variant>
#include <vector>
#include <deque>
#include <algorithm>
--
2.45.2

View file

@ -1,49 +0,0 @@
From 01e3da4d51927427860368c88a523f47c479b710 Mon Sep 17 00:00:00 2001
From: JL2210 <larrowe.semaj11@gmail.com>
Date: Mon, 19 Aug 2024 09:02:09 -0400
Subject: [PATCH 10/20] examples: more systemd examples (#7409)
These allow launching hyprland with a systemd service. They provide
graphical-session.target which allows enabling services such as the
ones for Waybar and Mako.
---
example/hyprland-session.service | 14 ++++++++++++++
example/hyprland-systemd.desktop | 5 +++++
2 files changed, 19 insertions(+)
create mode 100644 example/hyprland-session.service
create mode 100644 example/hyprland-systemd.desktop
diff --git a/example/hyprland-session.service b/example/hyprland-session.service
new file mode 100644
index 00000000..7d33f5b3
--- /dev/null
+++ b/example/hyprland-session.service
@@ -0,0 +1,14 @@
+[Unit]
+Description=Hyprland - Tiling compositor with the looks
+Documentation=man:Hyprland(1)
+BindsTo=graphical-session.target
+Before=graphical-session.target
+Wants=graphical-session-pre.target
+After=graphical-session-pre.target
+
+[Service]
+Type=notify
+ExecStart=/usr/bin/Hyprland
+ExecStop=/usr/bin/hyprctl dispatch exit
+Restart=on-failure
+Slice=session.slice
diff --git a/example/hyprland-systemd.desktop b/example/hyprland-systemd.desktop
new file mode 100644
index 00000000..b36a87b2
--- /dev/null
+++ b/example/hyprland-systemd.desktop
@@ -0,0 +1,5 @@
+[Desktop Entry]
+Name=Hyprland
+Comment=An intelligent dynamic tiling Wayland compositor
+Exec=systemctl --user start --wait hyprland-session
+Type=Application
--
2.45.2

View file

@ -1,25 +0,0 @@
From 272d9048706379201b761c3159c24a20cd62fad1 Mon Sep 17 00:00:00 2001
From: vaxerski <vaxry@vaxry.net>
Date: Mon, 19 Aug 2024 18:36:06 +0200
Subject: [PATCH 11/20] monitors: avoid crash on wayland output removal
---
src/events/Monitors.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/events/Monitors.cpp b/src/events/Monitors.cpp
index b2778062..60fb5bef 100644
--- a/src/events/Monitors.cpp
+++ b/src/events/Monitors.cpp
@@ -98,7 +98,7 @@ void Events::listener_monitorDestroy(void* owner, void* data) {
if (!pMonitor)
return;
- Debug::log(LOG, "Destroy called for monitor {}", pMonitor->output->name);
+ Debug::log(LOG, "Destroy called for monitor {}", pMonitor->szName);
pMonitor->onDisconnect(true);
--
2.45.2

View file

@ -1,146 +0,0 @@
From c86db7bbb0cf14d4955ee3a4d13c0ed9f8a0e0ae Mon Sep 17 00:00:00 2001
From: vaxerski <vaxry@vaxry.net>
Date: Mon, 19 Aug 2024 18:44:22 +0200
Subject: [PATCH 12/20] monitor: avoid dangling references to old monitors
being undestroyed
ref #7414
---
src/Compositor.cpp | 3 +--
src/events/Events.hpp | 1 -
src/events/Monitors.cpp | 25 -------------------------
src/helpers/Monitor.cpp | 21 +++++++++++++++++----
src/helpers/Monitor.hpp | 2 +-
5 files changed, 19 insertions(+), 33 deletions(-)
diff --git a/src/Compositor.cpp b/src/Compositor.cpp
index 1437a653..75c22743 100644
--- a/src/Compositor.cpp
+++ b/src/Compositor.cpp
@@ -2935,7 +2935,7 @@ PHLWINDOW CCompositor::windowForCPointer(CWindow* pWindow) {
void CCompositor::onNewMonitor(SP<Aquamarine::IOutput> output) {
// add it to real
- auto PNEWMONITOR = g_pCompositor->m_vRealMonitors.emplace_back(makeShared<CMonitor>());
+ auto PNEWMONITOR = g_pCompositor->m_vRealMonitors.emplace_back(makeShared<CMonitor>(output));
if (std::string("HEADLESS-1") == output->name) {
g_pCompositor->m_pUnsafeOutput = PNEWMONITOR.get();
output->name = "FALLBACK"; // we are allowed to do this :)
@@ -2944,7 +2944,6 @@ void CCompositor::onNewMonitor(SP<Aquamarine::IOutput> output) {
Debug::log(LOG, "New output with name {}", output->name);
PNEWMONITOR->szName = output->name;
- PNEWMONITOR->output = output;
PNEWMONITOR->self = PNEWMONITOR;
const bool FALLBACK = g_pCompositor->m_pUnsafeOutput ? output == g_pCompositor->m_pUnsafeOutput->output : false;
PNEWMONITOR->ID = FALLBACK ? MONITOR_INVALID : g_pCompositor->getNextAvailableMonitorID(output->name);
diff --git a/src/events/Events.hpp b/src/events/Events.hpp
index 8e73f54a..0af16f64 100644
--- a/src/events/Events.hpp
+++ b/src/events/Events.hpp
@@ -27,7 +27,6 @@ namespace Events {
// Monitor part 2 the sequel
DYNLISTENFUNC(monitorFrame);
- DYNLISTENFUNC(monitorDestroy);
DYNLISTENFUNC(monitorStateRequest);
DYNLISTENFUNC(monitorDamage);
DYNLISTENFUNC(monitorNeedsFrame);
diff --git a/src/events/Monitors.cpp b/src/events/Monitors.cpp
index 60fb5bef..9d2210f6 100644
--- a/src/events/Monitors.cpp
+++ b/src/events/Monitors.cpp
@@ -85,31 +85,6 @@ void Events::listener_monitorFrame(void* owner, void* data) {
}
}
-void Events::listener_monitorDestroy(void* owner, void* data) {
- CMonitor* pMonitor = (CMonitor*)owner;
-
- for (auto& m : g_pCompositor->m_vRealMonitors) {
- if (m->output == pMonitor->output) {
- pMonitor = m.get();
- break;
- }
- }
-
- if (!pMonitor)
- return;
-
- Debug::log(LOG, "Destroy called for monitor {}", pMonitor->szName);
-
- pMonitor->onDisconnect(true);
-
- pMonitor->output = nullptr;
- pMonitor->m_bRenderingInitPassed = false;
-
- Debug::log(LOG, "Removing monitor {} from realMonitors", pMonitor->szName);
-
- std::erase_if(g_pCompositor->m_vRealMonitors, [&](SP<CMonitor>& el) { return el.get() == pMonitor; });
-}
-
void Events::listener_monitorNeedsFrame(void* owner, void* data) {
const auto PMONITOR = (CMonitor*)owner;
diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp
index 9542d2c4..2c6282e1 100644
--- a/src/helpers/Monitor.cpp
+++ b/src/helpers/Monitor.cpp
@@ -25,7 +25,7 @@ int ratHandler(void* data) {
return 1;
}
-CMonitor::CMonitor() : state(this) {
+CMonitor::CMonitor(SP<Aquamarine::IOutput> output_) : state(this), output(output_) {
;
}
@@ -40,16 +40,29 @@ void CMonitor::onConnect(bool noRule) {
outTimeline = CSyncTimeline::create(output->getBackend()->drmFD());
}
- listeners.frame = output->events.frame.registerListener([this](std::any d) { Events::listener_monitorFrame(this, nullptr); });
- listeners.destroy = output->events.destroy.registerListener([this](std::any d) { Events::listener_monitorDestroy(this, nullptr); });
- listeners.commit = output->events.commit.registerListener([this](std::any d) { Events::listener_monitorCommit(this, nullptr); });
+ listeners.frame = output->events.frame.registerListener([this](std::any d) { Events::listener_monitorFrame(this, nullptr); });
+ listeners.commit = output->events.commit.registerListener([this](std::any d) { Events::listener_monitorCommit(this, nullptr); });
listeners.needsFrame =
output->events.needsFrame.registerListener([this](std::any d) { g_pCompositor->scheduleFrameForMonitor(this, Aquamarine::IOutput::AQ_SCHEDULE_NEEDS_FRAME); });
+
listeners.presented = output->events.present.registerListener([this](std::any d) {
auto E = std::any_cast<Aquamarine::IOutput::SPresentEvent>(d);
PROTO::presentation->onPresented(this, E.when, E.refresh, E.seq, E.flags);
});
+ listeners.destroy = output->events.destroy.registerListener([this](std::any d) {
+ Debug::log(LOG, "Destroy called for monitor {}", szName);
+
+ onDisconnect(true);
+
+ output = nullptr;
+ m_bRenderingInitPassed = false;
+
+ Debug::log(LOG, "Removing monitor {} from realMonitors", szName);
+
+ std::erase_if(g_pCompositor->m_vRealMonitors, [&](SP<CMonitor>& el) { return el.get() == this; });
+ });
+
listeners.state = output->events.state.registerListener([this](std::any d) {
auto E = std::any_cast<Aquamarine::IOutput::SStateEvent>(d);
diff --git a/src/helpers/Monitor.hpp b/src/helpers/Monitor.hpp
index dcfcb63b..01a5d28d 100644
--- a/src/helpers/Monitor.hpp
+++ b/src/helpers/Monitor.hpp
@@ -59,7 +59,7 @@ class CMonitorState {
class CMonitor {
public:
- CMonitor();
+ CMonitor(SP<Aquamarine::IOutput> output);
~CMonitor();
Vector2D vecPosition = Vector2D(-1, -1); // means unset
--
2.45.2

View file

@ -1,50 +0,0 @@
From 4eff224a7f6f4baa5600f687d6f2ef4ad8340ad3 Mon Sep 17 00:00:00 2001
From: Ali Atashrooz <atashroozarash@gmail.com>
Date: Wed, 21 Aug 2024 13:54:02 +0330
Subject: [PATCH 13/20] example/config: fix typo in default config (#7446)
* Update hyprland.conf
* Update defaultConfig.hpp
---
example/hyprland.conf | 6 +++---
src/config/defaultConfig.hpp | 6 +++---
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/example/hyprland.conf b/example/hyprland.conf
index f69309c2..d55d25fd 100644
--- a/example/hyprland.conf
+++ b/example/hyprland.conf
@@ -169,9 +169,9 @@ device {
}
-####################
-### KEYBINDINGSS ###
-####################
+###################
+### KEYBINDINGS ###
+###################
# See https://wiki.hyprland.org/Configuring/Keywords/
$mainMod = SUPER # Sets "Windows" key as main modifier
diff --git a/src/config/defaultConfig.hpp b/src/config/defaultConfig.hpp
index 98b617d0..59265fee 100644
--- a/src/config/defaultConfig.hpp
+++ b/src/config/defaultConfig.hpp
@@ -182,9 +182,9 @@ device {
}
-####################
-### KEYBINDINGSS ###
-####################
+###################
+### KEYBINDINGS ###
+###################
# See https://wiki.hyprland.org/Configuring/Keywords/
$mainMod = SUPER # Sets "Windows" key as main modifier
--
2.45.2

View file

@ -1,70 +0,0 @@
From 946ed1f32ae8e3840d1b3bb04c6e048ca7501fba Mon Sep 17 00:00:00 2001
From: ParaN3xus <136563585+ParaN3xus@users.noreply.github.com>
Date: Wed, 21 Aug 2024 18:24:42 +0800
Subject: [PATCH 14/20] core: add option to control which window to focus on
close (#7368)
---
src/config/ConfigDescriptions.hpp | 9 ++++++++-
src/config/ConfigManager.cpp | 1 +
src/events/Windows.cpp | 7 ++++++-
3 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/src/config/ConfigDescriptions.hpp b/src/config/ConfigDescriptions.hpp
index 3c830132..73b995ae 100644
--- a/src/config/ConfigDescriptions.hpp
+++ b/src/config/ConfigDescriptions.hpp
@@ -453,6 +453,13 @@ inline static const std::vector<SConfigOptionDescription> CONFIG_OPTIONS = {
.type = CONFIG_OPTION_INT,
.data = SConfigOptionDescription::SRangeData{1, 0, 3},
},
+ SConfigOptionDescription{
+ .value = "input:focus_on_close",
+ .description = "Controls the window focus behavior when a window is closed. When set to 0, focus will shift to the next window candidate. When set to 1, focus will shift "
+ "to the window under the cursor.",
+ .type = CONFIG_OPTION_CHOICE,
+ .data = SConfigOptionDescription::SChoiceData{0, "next,cursor"},
+ },
SConfigOptionDescription{
.value = "input:mouse_refocus",
.description = "if disabled, mouse focus won't switch to the hovered window unless the mouse crosses a window boundary when follow_mouse=1.",
@@ -1341,4 +1348,4 @@ inline static const std::vector<SConfigOptionDescription> CONFIG_OPTIONS = {
.type = CONFIG_OPTION_BOOL,
.data = SConfigOptionDescription::SBoolData{true},
},
-};
\ No newline at end of file
+};
diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp
index 1856bd49..155b75d3 100644
--- a/src/config/ConfigManager.cpp
+++ b/src/config/ConfigManager.cpp
@@ -449,6 +449,7 @@ CConfigManager::CConfigManager() {
m_pConfig->addConfigValue("animations:first_launch_animation", Hyprlang::INT{1});
m_pConfig->addConfigValue("input:follow_mouse", Hyprlang::INT{1});
+ m_pConfig->addConfigValue("input:focus_on_close", Hyprlang::INT{0});
m_pConfig->addConfigValue("input:mouse_refocus", Hyprlang::INT{1});
m_pConfig->addConfigValue("input:special_fallthrough", Hyprlang::INT{0});
m_pConfig->addConfigValue("input:off_window_axis_events", Hyprlang::INT{1});
diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp
index 2eb7038f..e4e3900b 100644
--- a/src/events/Windows.cpp
+++ b/src/events/Windows.cpp
@@ -648,7 +648,12 @@ void Events::listener_unmapWindow(void* owner, void* data) {
// refocus on a new window if needed
if (wasLastWindow) {
- const auto PWINDOWCANDIDATE = g_pLayoutManager->getCurrentLayout()->getNextWindowCandidate(PWINDOW);
+ static auto FOCUSONCLOSE = CConfigValue<Hyprlang::INT>("input:focus_on_close");
+ PHLWINDOW PWINDOWCANDIDATE = nullptr;
+ if (*FOCUSONCLOSE)
+ PWINDOWCANDIDATE = (g_pCompositor->vectorToWindowUnified(g_pInputManager->getMouseCoordsInternal(), RESERVED_EXTENTS | INPUT_EXTENTS | ALLOW_FLOATING));
+ else
+ PWINDOWCANDIDATE = g_pLayoutManager->getCurrentLayout()->getNextWindowCandidate(PWINDOW);
Debug::log(LOG, "On closed window, new focused candidate is {}", PWINDOWCANDIDATE);
--
2.45.2

View file

@ -1,27 +0,0 @@
From 3e7325af57c4670ebea65d2669f49526819c2260 Mon Sep 17 00:00:00 2001
From: Tom Englund <tomenglund26@gmail.com>
Date: Wed, 21 Aug 2024 12:52:40 +0200
Subject: [PATCH 15/20] output: dont cast enum out of range (#7448)
avoid casting non typed enum out of range, looks like
WL_OUTPUT_MODE_CURRENT was the intention here.
---
src/protocols/core/Output.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/protocols/core/Output.cpp b/src/protocols/core/Output.cpp
index 878d1484..8d0b0121 100644
--- a/src/protocols/core/Output.cpp
+++ b/src/protocols/core/Output.cpp
@@ -55,7 +55,7 @@ void CWLOutputResource::updateState() {
if (resource->version() >= 2)
resource->sendScale(std::ceil(monitor->scale));
- resource->sendMode((wl_output_mode)(WL_OUTPUT_MODE_CURRENT | WL_OUTPUT_MODE_PREFERRED), monitor->vecPixelSize.x, monitor->vecPixelSize.y, monitor->refreshRate * 1000.0);
+ resource->sendMode((wl_output_mode)(WL_OUTPUT_MODE_CURRENT), monitor->vecPixelSize.x, monitor->vecPixelSize.y, monitor->refreshRate * 1000.0);
if (resource->version() >= 2)
resource->sendDone();
--
2.45.2

View file

@ -1,96 +0,0 @@
From 883463f9dd7f1cdc68c3e32017c0a71ccbe39b26 Mon Sep 17 00:00:00 2001
From: vaxerski <vaxry@vaxry.net>
Date: Wed, 21 Aug 2024 14:37:50 +0200
Subject: [PATCH 16/20] animations: add workspace in/out configs
---
src/config/ConfigManager.cpp | 10 +++++++++-
src/desktop/Workspace.cpp | 12 ++++++++++--
src/managers/AnimationManager.cpp | 2 +-
3 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp
index 155b75d3..e2ae2c47 100644
--- a/src/config/ConfigManager.cpp
+++ b/src/config/ConfigManager.cpp
@@ -724,7 +724,6 @@ void CConfigManager::setDefaultAnimationVars() {
INITANIMCFG("fade");
INITANIMCFG("border");
INITANIMCFG("borderangle");
- INITANIMCFG("workspaces");
// windows
INITANIMCFG("windowsIn");
@@ -745,7 +744,12 @@ void CConfigManager::setDefaultAnimationVars() {
// border
// workspaces
+ INITANIMCFG("workspaces");
+ INITANIMCFG("workspacesIn");
+ INITANIMCFG("workspacesOut");
INITANIMCFG("specialWorkspace");
+ INITANIMCFG("specialWorkspaceIn");
+ INITANIMCFG("specialWorkspaceOut");
}
// init the values
@@ -774,7 +778,11 @@ void CConfigManager::setDefaultAnimationVars() {
CREATEANIMCFG("fadeLayersIn", "fadeLayers");
CREATEANIMCFG("fadeLayersOut", "fadeLayers");
+ CREATEANIMCFG("workspacesIn", "workspaces");
+ CREATEANIMCFG("workspacesOut", "workspaces");
CREATEANIMCFG("specialWorkspace", "workspaces");
+ CREATEANIMCFG("specialWorkspaceIn", "specialWorkspace");
+ CREATEANIMCFG("specialWorkspaceOut", "specialWorkspace");
}
std::optional<std::string> CConfigManager::resetHLConfig() {
diff --git a/src/desktop/Workspace.cpp b/src/desktop/Workspace.cpp
index d9ac7927..a9412e6d 100644
--- a/src/desktop/Workspace.cpp
+++ b/src/desktop/Workspace.cpp
@@ -22,10 +22,11 @@ CWorkspace::CWorkspace(WORKSPACEID id, MONITORID monitorID, std::string name, bo
void CWorkspace::init(PHLWORKSPACE self) {
m_pSelf = self;
- m_vRenderOffset.create(m_bIsSpecialWorkspace ? g_pConfigManager->getAnimationPropertyConfig("specialWorkspace") : g_pConfigManager->getAnimationPropertyConfig("workspaces"),
+ m_vRenderOffset.create(m_bIsSpecialWorkspace ? g_pConfigManager->getAnimationPropertyConfig("specialWorkspaceIn") :
+ g_pConfigManager->getAnimationPropertyConfig("workspacesIn"),
self, AVARDAMAGE_ENTIRE);
m_fAlpha.create(AVARTYPE_FLOAT,
- m_bIsSpecialWorkspace ? g_pConfigManager->getAnimationPropertyConfig("specialWorkspace") : g_pConfigManager->getAnimationPropertyConfig("workspaces"), self,
+ m_bIsSpecialWorkspace ? g_pConfigManager->getAnimationPropertyConfig("specialWorkspaceIn") : g_pConfigManager->getAnimationPropertyConfig("workspacesIn"), self,
AVARDAMAGE_ENTIRE);
m_fAlpha.setValueAndWarp(1.f);
@@ -81,6 +82,13 @@ CWorkspace::~CWorkspace() {
}
void CWorkspace::startAnim(bool in, bool left, bool instant) {
+ if (!instant) {
+ const std::string ANIMNAME = std::format("{}{}", m_bIsSpecialWorkspace ? "specialWorkspace" : "workspaces", in ? "In" : "Out");
+
+ m_fAlpha.m_pConfig = g_pConfigManager->getAnimationPropertyConfig(ANIMNAME);
+ m_vRenderOffset.m_pConfig = g_pConfigManager->getAnimationPropertyConfig(ANIMNAME);
+ }
+
const auto ANIMSTYLE = m_fAlpha.m_pConfig->pValues->internalStyle;
static auto PWORKSPACEGAP = CConfigValue<Hyprlang::INT>("general:gaps_workspaces");
diff --git a/src/managers/AnimationManager.cpp b/src/managers/AnimationManager.cpp
index dcc7a45f..beb880be 100644
--- a/src/managers/AnimationManager.cpp
+++ b/src/managers/AnimationManager.cpp
@@ -471,7 +471,7 @@ std::string CAnimationManager::styleValidInConfigVar(const std::string& config,
}
return "unknown style";
- } else if (config == "workspaces" || config == "specialWorkspace") {
+ } else if (config.starts_with("workspaces") || config.starts_with("specialWorkspace")) {
if (style == "slide" || style == "slidevert" || style == "fade")
return "";
else if (style.starts_with("slidefade")) {
--
2.45.2

View file

@ -1,29 +0,0 @@
From 1b1ecf77e0c195460eb5335652d65de6fd83cf7b Mon Sep 17 00:00:00 2001
From: Mihai Fufezan <mihai@fufexan.net>
Date: Wed, 21 Aug 2024 22:37:28 +0300
Subject: [PATCH 17/20] Nix: include xcursor regardless of xwayland
---
nix/default.nix | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/nix/default.nix b/nix/default.nix
index 9bae9d83..c8eaf731 100644
--- a/nix/default.nix
+++ b/nix/default.nix
@@ -136,11 +136,11 @@ assert lib.assertMsg (!hidpiXWayland) "The option `hidpiXWayland` has been remov
tomlplusplus
wayland
wayland-protocols
+ xorg.libXcursor
]
(lib.optionals stdenv.hostPlatform.isMusl [libexecinfo])
(lib.optionals enableXWayland [
xorg.libxcb
- xorg.libXcursor
xorg.libXdmcp
xorg.xcbutil
xorg.xcbutilerrors
--
2.45.2

View file

@ -1,38 +0,0 @@
From c5786be695224c2d2771854436844b88a6b48fc5 Mon Sep 17 00:00:00 2001
From: James R Larrowe <larrowe.semaj11@gmail.com>
Date: Tue, 20 Aug 2024 13:36:41 -0400
Subject: [PATCH 18/20] Fix static asan patch
---
scripts/hyprlandStaticAsan.diff | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/scripts/hyprlandStaticAsan.diff b/scripts/hyprlandStaticAsan.diff
index e74eb6ab..b352d65d 100644
--- a/scripts/hyprlandStaticAsan.diff
+++ b/scripts/hyprlandStaticAsan.diff
@@ -1,13 +1,13 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
-index f54cdf5d..ad7c3e73 100755
+index f26a5c3c..3dfef333 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
-@@ -130,6 +130,8 @@ if(CMAKE_BUILD_TYPE MATCHES Debug OR CMAKE_BUILD_TYPE MATCHES DEBUG)
- message(STATUS "Enabling ASan")
+@@ -143,6 +143,8 @@ if(CMAKE_BUILD_TYPE MATCHES Debug OR CMAKE_BUILD_TYPE MATCHES DEBUG)
+ message(STATUS "Enabling ASan")
- target_link_libraries(Hyprland asan)
-+ pkg_check_modules(ffidep REQUIRED IMPORTED_TARGET libffi)
-+ target_link_libraries(Hyprland ${CMAKE_SOURCE_DIR}/libwayland-server.a PkgConfig::ffidep)
- target_compile_options(Hyprland PUBLIC -fsanitize=address)
- endif()
+ target_link_libraries(Hyprland asan)
++ pkg_check_modules(ffidep REQUIRED IMPORTED_TARGET libffi)
++ target_link_libraries(Hyprland ${CMAKE_SOURCE_DIR}/libwayland-server.a PkgConfig::ffidep)
+ target_compile_options(Hyprland PUBLIC -fsanitize=address)
+ endif()
--
2.45.2

View file

@ -1,28 +0,0 @@
From 8162fae37728b3ae2b1a82a32663e76c59c4ce61 Mon Sep 17 00:00:00 2001
From: James R Larrowe <larrowe.semaj11@gmail.com>
Date: Tue, 20 Aug 2024 13:54:51 -0400
Subject: [PATCH 19/20] Fix Makefile too
... did this ever work?
---
Makefile | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Makefile b/Makefile
index adf6fbe8..bc7b750b 100644
--- a/Makefile
+++ b/Makefile
@@ -87,8 +87,8 @@ asan:
#git reset --hard
@echo -en "If you want to apply a patch, input its path (leave empty for none):\n"
- @read patchvar
- @if [-n "$patchvar"]; then patch -p1 < $patchvar || echo ""; else echo "No patch specified"; fi
+ @read patchvar; \
+ if [ -n "$$patchvar" ]; then patch -p1 < "$$patchvar" || echo ""; else echo "No patch specified"; fi
git clone --recursive https://gitlab.freedesktop.org/wayland/wayland
cd wayland && patch -p1 < ../scripts/waylandStatic.diff && meson setup build --buildtype=debug -Db_sanitize=address -Ddocumentation=false && ninja -C build && cd ..
--
2.45.2

View file

@ -1,28 +0,0 @@
From cae937c51bd220d6676c6027d05ea51fc3c821bb Mon Sep 17 00:00:00 2001
From: Tom Englund <tomenglund26@gmail.com>
Date: Wed, 21 Aug 2024 23:05:03 +0200
Subject: [PATCH 20/20] layersurface: dont rollover on size_t (#7451)
unneded rollover on size_t if force equals -1
---
src/desktop/LayerSurface.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/desktop/LayerSurface.cpp b/src/desktop/LayerSurface.cpp
index c352fa74..8fd448ef 100644
--- a/src/desktop/LayerSurface.cpp
+++ b/src/desktop/LayerSurface.cpp
@@ -432,8 +432,8 @@ void CLayerSurface::startAnimation(bool in, bool instant) {
PMONITOR->vecPosition + Vector2D{PMONITOR->vecSize.x, PMONITOR->vecSize.y / 2},
};
- float closest = std::numeric_limits<float>::max();
- size_t leader = force;
+ float closest = std::numeric_limits<float>::max();
+ int leader = force;
if (leader == -1) {
for (size_t i = 0; i < 4; ++i) {
float dist = MIDDLE.distance(edgePoints[i]);
--
2.45.2

File diff suppressed because it is too large Load diff

View file

@ -45,26 +45,7 @@
oldAttrs.patches
or []
++ [
./0001-linux-dmabuf-allow-on-split-node-systems.patch
./0002-renderer-pass-custom-modelines-to-aq.patch
./0003-compositor-update-suspendstate-on-window-move-7396.patch
./0004-screencopy-nuke-unused-stuff.patch
./0005-protocol-fix-logm-template-checks.patch
./0006-screencopy-fix-10b-format-r-b-flip.patch
./0007-flake-update-aquamarine.patch
./0008-hyprpm-hyprctl-update-shell-completions.patch
./0009-config-add-missing-header-for-libc-after-92744b5b9aa.patch
./0010-examples-more-systemd-examples-7409.patch
./0011-monitors-avoid-crash-on-wayland-output-removal.patch
./0012-monitor-avoid-dangling-references-to-old-monitors-be.patch
./0013-example-config-fix-typo-in-default-config-7446.patch
./0014-core-add-option-to-control-which-window-to-focus-on-.patch
./0015-output-dont-cast-enum-out-of-range-7448.patch
./0016-animations-add-workspace-in-out-configs.patch
./0017-Nix-include-xcursor-regardless-of-xwayland.patch
./0018-Fix-static-asan-patch.patch
./0019-Fix-Makefile-too.patch
./0020-layersurface-dont-rollover-on-size_t-7451.patch
./asahi-fix.patch
];
});
})