Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package hyprland-plugins for
openSUSE:Factory checked in at 2026-01-06 17:45:13
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/hyprland-plugins (Old)
and /work/SRC/openSUSE:Factory/.hyprland-plugins.new.1928 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "hyprland-plugins"
Tue Jan 6 17:45:13 2026 rev:7 rq:1325488 version:0.53.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/hyprland-plugins/hyprland-plugins.changes
2025-12-05 16:58:00.127830989 +0100
+++
/work/SRC/openSUSE:Factory/.hyprland-plugins.new.1928/hyprland-plugins.changes
2026-01-06 17:46:45.935010527 +0100
@@ -1,0 +2,7 @@
+Mon Dec 29 21:35:52 UTC 2025 - Florian "sp1rit" <[email protected]>
+
+- Update to version 0.53.0:
+ + The plugins were updated to use the plugin interface in use by
+ hyprland 0.53.0.
+
+-------------------------------------------------------------------
Old:
----
hyprland-plugins-0.52.0.tar.gz
New:
----
hyprland-plugins-0.53.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ hyprland-plugins.spec ++++++
--- /var/tmp/diff_new_pack.UGcwwC/_old 2026-01-06 17:46:46.635039325 +0100
+++ /var/tmp/diff_new_pack.UGcwwC/_new 2026-01-06 17:46:46.643039655 +0100
@@ -15,8 +15,8 @@
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
-%define hypr_tgt 0.52.0
-%define pkg_version 0.52.0
+%define hypr_tgt 0.53.0
+%define pkg_version 0.53.0
Name: hyprland-plugins
Version: %{pkg_version}
++++++ hyprland-plugins-0.52.0.tar.gz -> hyprland-plugins-0.53.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hyprland-plugins-0.52.0/.gitignore
new/hyprland-plugins-0.53.0/.gitignore
--- old/hyprland-plugins-0.52.0/.gitignore 2025-11-02 21:31:25.000000000
+0100
+++ new/hyprland-plugins-0.53.0/.gitignore 2025-12-29 16:03:28.000000000
+0100
@@ -37,3 +37,6 @@
# Nix
result
result-man
+
+build/
+.cache/
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hyprland-plugins-0.52.0/CMakeLists.txt
new/hyprland-plugins-0.53.0/CMakeLists.txt
--- old/hyprland-plugins-0.52.0/CMakeLists.txt 2025-11-02 21:31:25.000000000
+0100
+++ new/hyprland-plugins-0.53.0/CMakeLists.txt 2025-12-29 16:03:28.000000000
+0100
@@ -1,6 +1,5 @@
cmake_minimum_required(VERSION 3.27)
project(hyprland-plugins
- VERSION 0.51.0
DESCRIPTION "Official plugins for Hyprland"
LANGUAGES CXX
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hyprland-plugins-0.52.0/borders-plus-plus/borderDeco.cpp
new/hyprland-plugins-0.53.0/borders-plus-plus/borderDeco.cpp
--- old/hyprland-plugins-0.52.0/borders-plus-plus/borderDeco.cpp
2025-11-02 21:31:25.000000000 +0100
+++ new/hyprland-plugins-0.53.0/borders-plus-plus/borderDeco.cpp
2025-12-29 16:03:28.000000000 +0100
@@ -1,7 +1,7 @@
#include "borderDeco.hpp"
#include <hyprland/src/Compositor.hpp>
-#include <hyprland/src/desktop/Window.hpp>
+#include <hyprland/src/desktop/view/Window.hpp>
#include <hyprland/src/render/Renderer.hpp>
#include <hyprutils/memory/Casts.hpp>
using namespace Hyprutils::Memory;
@@ -68,7 +68,7 @@
const auto PWINDOW = m_pWindow.lock();
- if (!PWINDOW->m_windowData.decorate.valueOrDefault())
+ if (!PWINDOW->m_ruleApplicator->decorate().valueOrDefault())
return;
CBorderPPPassElement::SBorderPPData data;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hyprland-plugins-0.52.0/borders-plus-plus/main.cpp
new/hyprland-plugins-0.53.0/borders-plus-plus/main.cpp
--- old/hyprland-plugins-0.52.0/borders-plus-plus/main.cpp 2025-11-02
21:31:25.000000000 +0100
+++ new/hyprland-plugins-0.53.0/borders-plus-plus/main.cpp 2025-12-29
16:03:28.000000000 +0100
@@ -4,7 +4,7 @@
#include <any>
#include <hyprland/src/Compositor.hpp>
-#include <hyprland/src/desktop/Window.hpp>
+#include <hyprland/src/desktop/view/Window.hpp>
#include <hyprland/src/config/ConfigManager.hpp>
#include <hyprland/src/render/Renderer.hpp>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hyprland-plugins-0.52.0/csgo-vulkan-fix/main.cpp
new/hyprland-plugins-0.53.0/csgo-vulkan-fix/main.cpp
--- old/hyprland-plugins-0.52.0/csgo-vulkan-fix/main.cpp 2025-11-02
21:31:25.000000000 +0100
+++ new/hyprland-plugins-0.53.0/csgo-vulkan-fix/main.cpp 2025-12-29
16:03:28.000000000 +0100
@@ -3,7 +3,8 @@
#include <unistd.h>
#include <hyprland/src/Compositor.hpp>
-#include <hyprland/src/desktop/Window.hpp>
+#include <hyprland/src/desktop/state/FocusState.hpp>
+#include <hyprland/src/desktop/view/Window.hpp>
#include <hyprland/src/config/ConfigManager.hpp>
#include <hyprland/src/xwayland/XSurface.hpp>
#include <hyprland/src/managers/SeatManager.hpp>
@@ -20,7 +21,7 @@
inline CFunctionHook* g_pWLSurfaceDamageHook = nullptr;
typedef void (*origMotion)(CSeatManager*, uint32_t, const Vector2D&);
typedef void (*origSurfaceSize)(CXWaylandSurface*, const CBox&);
-typedef CRegion (*origWLSurfaceDamage)(CWLSurface*);
+typedef CRegion (*origWLSurfaceDamage)(Desktop::View::CWLSurface*);
// Do NOT change this function.
APICALL EXPORT std::string PLUGIN_API_VERSION() {
@@ -46,14 +47,17 @@
void hkNotifyMotion(CSeatManager* thisptr, uint32_t time_msec, const Vector2D&
local) {
static auto* const PFIX = (Hyprlang::INT*
const*)HyprlandAPI::getConfigValue(PHANDLE,
"plugin:csgo-vulkan-fix:fix_mouse")->getDataStaticPtr();
- Vector2D newCoords = local;
+ Vector2D newCoords = local;
+ auto focusState = Desktop::focusState();
+ auto window = focusState->window();
+ auto monitor = focusState->monitor();
- const auto CONFIG = g_pCompositor->m_lastWindow &&
g_pCompositor->m_lastMonitor ?
getAppConfig(g_pCompositor->m_lastWindow->m_initialClass) : nullptr;
+ const auto CONFIG = window && monitor ?
getAppConfig(window->m_initialClass) : nullptr;
if (**PFIX && CONFIG) {
// fix the coords
- newCoords.x *= (CONFIG->res.x /
g_pCompositor->m_lastMonitor->m_size.x) /
g_pCompositor->m_lastWindow->m_X11SurfaceScaledBy;
- newCoords.y *= (CONFIG->res.y /
g_pCompositor->m_lastMonitor->m_size.y) /
g_pCompositor->m_lastWindow->m_X11SurfaceScaledBy;
+ newCoords.x *= (CONFIG->res.x / monitor->m_size.x) /
window->m_X11SurfaceScaledBy;
+ newCoords.y *= (CONFIG->res.y / monitor->m_size.y) /
window->m_X11SurfaceScaledBy;
}
(*(origMotion)g_pMouseMotionHook->m_original)(thisptr, time_msec,
newCoords);
@@ -79,24 +83,25 @@
newBox.w = CONFIG->res.x;
newBox.h = CONFIG->res.y;
- CWLSurface::fromResource(SURF)->m_fillIgnoreSmall = true;
+ Desktop::View::CWLSurface::fromResource(SURF)->m_fillIgnoreSmall =
true;
}
(*(origSurfaceSize)g_pSurfaceSizeHook->m_original)(surface, newBox);
}
-CRegion hkWLSurfaceDamage(CWLSurface* thisptr) {
+CRegion hkWLSurfaceDamage(Desktop::View::CWLSurface* thisptr) {
const auto RG =
(*(origWLSurfaceDamage)g_pWLSurfaceDamageHook->m_original)(thisptr);
- if (thisptr->exists() && thisptr->getWindow()) {
- const auto CONFIG = getAppConfig(thisptr->getWindow()->m_initialClass);
+ if (thisptr->exists() &&
Desktop::View::CWindow::fromView(thisptr->view())) {
+ const auto WINDOW = Desktop::View::CWindow::fromView(thisptr->view());
+ const auto CONFIG = getAppConfig(WINDOW->m_initialClass);
if (CONFIG) {
- const auto PMONITOR = thisptr->getWindow()->m_monitor.lock();
+ const auto PMONITOR = WINDOW->m_monitor.lock();
if (PMONITOR)
g_pHyprRenderer->damageMonitor(PMONITOR);
else
- g_pHyprRenderer->damageWindow(thisptr->getWindow());
+ g_pHyprRenderer->damageWindow(WINDOW);
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hyprland-plugins-0.52.0/hyprbars/README.md
new/hyprland-plugins-0.53.0/hyprbars/README.md
--- old/hyprland-plugins-0.52.0/hyprbars/README.md 2025-11-02
21:31:25.000000000 +0100
+++ new/hyprland-plugins-0.53.0/hyprbars/README.md 2025-12-29
16:03:28.000000000 +0100
@@ -53,13 +53,15 @@
hyprbars-button = bgcolor, size, icon, on-click, fgcolor
```
+Please note it _has_ to be inside `plugin { hyprbars { } }`.
+
## Window rules
Hyprbars supports the following _dynamic_ [window
rules](https://wiki.hypr.land/Configuring/Window-Rules/):
-`plugin:hyprbars:nobar` -> disables the bar on matching windows.
-`plugin:hyprbars:bar_color` -> sets the bar background color on matching
windows.
-`plugin:hyprbars:title_color` -> sets the bar title color on matching windows.
+`hyprbars:no_bar` -> disables the bar on matching windows.
+`hyprbars:bar_color` -> sets the bar background color on matching windows.
+`hyprbars:title_color` -> sets the bar title color on matching windows.
Example:
```bash
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hyprland-plugins-0.52.0/hyprbars/barDeco.cpp
new/hyprland-plugins-0.53.0/hyprbars/barDeco.cpp
--- old/hyprland-plugins-0.52.0/hyprbars/barDeco.cpp 2025-11-02
21:31:25.000000000 +0100
+++ new/hyprland-plugins-0.53.0/hyprbars/barDeco.cpp 2025-12-29
16:03:28.000000000 +0100
@@ -1,7 +1,8 @@
#include "barDeco.hpp"
#include <hyprland/src/Compositor.hpp>
-#include <hyprland/src/desktop/Window.hpp>
+#include <hyprland/src/desktop/state/FocusState.hpp>
+#include <hyprland/src/desktop/view/Window.hpp>
#include <hyprland/src/helpers/MiscFunctions.hpp>
#include <hyprland/src/managers/SeatManager.hpp>
#include <hyprland/src/managers/input/InputManager.hpp>
@@ -85,16 +86,20 @@
return false;
if (!m_pWindow->m_workspace || !m_pWindow->m_workspace->isVisible() ||
!g_pInputManager->m_exclusiveLSes.empty() ||
- (g_pSeatManager->m_seatGrab &&
!g_pSeatManager->m_seatGrab->accepts(m_pWindow->m_wlSurface->resource())))
+ (g_pSeatManager->m_seatGrab &&
!g_pSeatManager->m_seatGrab->accepts(m_pWindow->wlSurface()->resource())))
return false;
- const auto WINDOWATCURSOR =
g_pCompositor->vectorToWindowUnified(g_pInputManager->getMouseCoordsInternal(),
RESERVED_EXTENTS | INPUT_EXTENTS | ALLOW_FLOATING);
+ const auto WINDOWATCURSOR =
g_pCompositor->vectorToWindowUnified(g_pInputManager->getMouseCoordsInternal(),
Desktop::View::RESERVED_EXTENTS | Desktop::View::INPUT_EXTENTS |
Desktop::View::ALLOW_FLOATING);
- if (WINDOWATCURSOR != m_pWindow && m_pWindow !=
g_pCompositor->m_lastWindow)
+ auto focusState = Desktop::focusState();
+ auto window = focusState->window();
+ auto monitor = focusState->monitor();
+
+ if (WINDOWATCURSOR != m_pWindow && m_pWindow != window)
return false;
// check if input is on top or overlay shell layers
- auto PMONITOR = g_pCompositor->m_lastMonitor.lock();
+ auto PMONITOR = monitor;
PHLLS foundSurface = nullptr;
Vector2D surfaceCoords;
@@ -158,7 +163,7 @@
return;
auto PMONITOR = m_pWindow->m_monitor.lock();
- PMONITOR = PMONITOR ? PMONITOR :
g_pCompositor->m_lastMonitor.lock();
+ PMONITOR = PMONITOR ? PMONITOR : Desktop::focusState()->monitor();
const auto COORDS = Vector2D(PMONITOR->m_position.x + e.pos.x *
PMONITOR->m_size.x, PMONITOR->m_position.y + e.pos.y * PMONITOR->m_size.y);
if (!m_bDraggingThis) {
@@ -183,7 +188,7 @@
if (m_bTouchEv) {
ITouch::SDownEvent e = touchEvent.value();
auto PMONITOR =
g_pCompositor->getMonitorFromName(!e.device->m_boundOutput.empty() ?
e.device->m_boundOutput : "");
- PMONITOR = PMONITOR ? PMONITOR :
g_pCompositor->m_lastMonitor.lock();
+ PMONITOR = PMONITOR ? PMONITOR :
Desktop::focusState()->monitor();
COORDS = Vector2D(PMONITOR->m_position.x + e.pos.x *
PMONITOR->m_size.x, PMONITOR->m_position.y + e.pos.y * PMONITOR->m_size.y) -
assignedBoxGlobal().pos();
}
@@ -202,7 +207,7 @@
if (m_bTouchEv)
g_pKeybindManager->m_dispatchers["settiled"]("activewindow");
g_pKeybindManager->m_dispatchers["mouse"]("0movewindow");
- Debug::log(LOG, "[hyprbars] Dragging ended on {:x}",
(uintptr_t)PWINDOW.get());
+ Log::logger->log(Log::DEBUG, "[hyprbars] Dragging ended on {:x}",
(uintptr_t)PWINDOW.get());
}
m_bDraggingThis = false;
@@ -211,8 +216,8 @@
return;
}
- if (g_pCompositor->m_lastWindow.lock() != PWINDOW)
- g_pCompositor->focusWindow(PWINDOW);
+ if (Desktop::focusState()->window() != PWINDOW)
+ Desktop::focusState()->fullWindowFocus(PWINDOW);
if (PWINDOW->m_isFloating)
g_pCompositor->changeWindowZOrder(PWINDOW, true);
@@ -234,7 +239,7 @@
}
void CHyprBar::handleUpEvent(SCallbackInfo& info) {
- if (m_pWindow.lock() != g_pCompositor->m_lastWindow.lock())
+ if (m_pWindow.lock() != Desktop::focusState()->window())
return;
if (m_bCancelledDown)
@@ -248,7 +253,7 @@
if (m_bTouchEv)
g_pKeybindManager->m_dispatchers["settiled"]("activewindow");
- Debug::log(LOG, "[hyprbars] Dragging ended on {:x}",
(uintptr_t)m_pWindow.lock().get());
+ Log::logger->log(Log::DEBUG, "[hyprbars] Dragging ended on {:x}",
(uintptr_t)m_pWindow.lock().get());
}
m_bDragPending = false;
@@ -259,7 +264,7 @@
void CHyprBar::handleMovement() {
g_pKeybindManager->m_dispatchers["mouse"]("1movewindow");
m_bDraggingThis = true;
- Debug::log(LOG, "[hyprbars] Dragging initiated on {:x}",
(uintptr_t)m_pWindow.lock().get());
+ Log::logger->log(Log::DEBUG, "[hyprbars] Dragging initiated on {:x}",
(uintptr_t)m_pWindow.lock().get());
return;
}
@@ -573,7 +578,7 @@
const auto PWINDOW = m_pWindow.lock();
- if (!PWINDOW->m_windowData.decorate.valueOrDefault())
+ if (!PWINDOW->m_ruleApplicator->decorate().valueOrDefault())
return;
auto data = CBarPassElement::SBarData{this, a};
@@ -593,7 +598,7 @@
static auto* const PINACTIVECOLOR = (Hyprlang::INT*
const*)HyprlandAPI::getConfigValue(PHANDLE,
"plugin:hyprbars:inactive_button_color")->getDataStaticPtr();
if (**PINACTIVECOLOR > 0) {
- bool currentWindowFocus = PWINDOW ==
g_pCompositor->m_lastWindow.lock();
+ bool currentWindowFocus = PWINDOW == Desktop::focusState()->window();
if (currentWindowFocus != m_bWindowHasFocus) {
m_bWindowHasFocus = currentWindowFocus;
m_bButtonsDirty = true;
@@ -754,7 +759,6 @@
void CHyprBar::updateRules() {
const auto PWINDOW = m_pWindow.lock();
- auto rules = PWINDOW->m_matchedRules;
auto prevHidden = m_hidden;
auto prevForcedTitleColor = m_bForcedTitleColor;
@@ -762,9 +766,12 @@
m_bForcedTitleColor = std::nullopt;
m_hidden = false;
- for (auto& r : rules) {
- applyRule(r);
- }
+ if
(PWINDOW->m_ruleApplicator->m_otherProps.props.contains(g_pGlobalState->nobarRuleIdx))
+ m_hidden =
truthy(PWINDOW->m_ruleApplicator->m_otherProps.props.at(g_pGlobalState->nobarRuleIdx)->effect);
+ if
(PWINDOW->m_ruleApplicator->m_otherProps.props.contains(g_pGlobalState->barColorRuleIdx))
+ m_bForcedBarColor =
CHyprColor(configStringToInt(PWINDOW->m_ruleApplicator->m_otherProps.props.at(g_pGlobalState->barColorRuleIdx)->effect).value_or(0));
+ if
(PWINDOW->m_ruleApplicator->m_otherProps.props.contains(g_pGlobalState->titleColorRuleIdx))
+ m_bForcedTitleColor =
CHyprColor(configStringToInt(PWINDOW->m_ruleApplicator->m_otherProps.props.at(g_pGlobalState->titleColorRuleIdx)->effect).value_or(0));
if (prevHidden != m_hidden)
g_pDecorationPositioner->repositionDeco(this);
@@ -772,17 +779,6 @@
m_bTitleColorChanged = true;
}
-void CHyprBar::applyRule(const SP<CWindowRule>& r) {
- auto arg = r->m_rule.substr(r->m_rule.find_first_of(' ') + 1);
-
- if (r->m_rule == "plugin:hyprbars:nobar")
- m_hidden = true;
- else if (r->m_rule.starts_with("plugin:hyprbars:bar_color"))
- m_bForcedBarColor = CHyprColor(configStringToInt(arg).value_or(0));
- else if (r->m_rule.starts_with("plugin:hyprbars:title_color"))
- m_bForcedTitleColor = CHyprColor(configStringToInt(arg).value_or(0));
-}
-
void CHyprBar::damageOnButtonHover() {
static auto* const PBARPADDING = (Hyprlang::INT*
const*)HyprlandAPI::getConfigValue(PHANDLE,
"plugin:hyprbars:bar_padding")->getDataStaticPtr();
static auto* const PBARBUTTONPADDING = (Hyprlang::INT*
const*)HyprlandAPI::getConfigValue(PHANDLE,
"plugin:hyprbars:bar_button_padding")->getDataStaticPtr();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hyprland-plugins-0.52.0/hyprbars/barDeco.hpp
new/hyprland-plugins-0.53.0/hyprbars/barDeco.hpp
--- old/hyprland-plugins-0.52.0/hyprbars/barDeco.hpp 2025-11-02
21:31:25.000000000 +0100
+++ new/hyprland-plugins-0.53.0/hyprbars/barDeco.hpp 2025-12-29
16:03:28.000000000 +0100
@@ -6,7 +6,7 @@
#include <hyprland/src/render/OpenGL.hpp>
#include <hyprland/src/devices/IPointer.hpp>
#include <hyprland/src/devices/ITouch.hpp>
-#include <hyprland/src/desktop/WindowRule.hpp>
+#include <hyprland/src/desktop/rule/windowRule/WindowRule.hpp>
#include <hyprland/src/helpers/AnimatedVariable.hpp>
#include <hyprland/src/helpers/time/Time.hpp>
#include "globals.hpp"
@@ -43,7 +43,6 @@
PHLWINDOW getOwner();
void updateRules();
- void applyRule(const SP<CWindowRule>&);
WP<CHyprBar> m_self;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hyprland-plugins-0.52.0/hyprbars/globals.hpp
new/hyprland-plugins-0.53.0/hyprbars/globals.hpp
--- old/hyprland-plugins-0.52.0/hyprbars/globals.hpp 2025-11-02
21:31:25.000000000 +0100
+++ new/hyprland-plugins-0.53.0/hyprbars/globals.hpp 2025-12-29
16:03:28.000000000 +0100
@@ -20,6 +20,9 @@
struct SGlobalState {
std::vector<SHyprButton> buttons;
std::vector<WP<CHyprBar>> bars;
+ uint32_t nobarRuleIdx = 0;
+ uint32_t barColorRuleIdx = 0;
+ uint32_t titleColorRuleIdx = 0;
};
inline UP<SGlobalState> g_pGlobalState;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hyprland-plugins-0.52.0/hyprbars/main.cpp
new/hyprland-plugins-0.53.0/hyprbars/main.cpp
--- old/hyprland-plugins-0.52.0/hyprbars/main.cpp 2025-11-02
21:31:25.000000000 +0100
+++ new/hyprland-plugins-0.53.0/hyprbars/main.cpp 2025-12-29
16:03:28.000000000 +0100
@@ -4,9 +4,10 @@
#include <any>
#include <hyprland/src/Compositor.hpp>
-#include <hyprland/src/desktop/Window.hpp>
+#include <hyprland/src/desktop/view/Window.hpp>
#include <hyprland/src/config/ConfigManager.hpp>
#include <hyprland/src/render/Renderer.hpp>
+#include <hyprland/src/desktop/rule/windowRule/WindowRuleEffectContainer.hpp>
#include <algorithm>
@@ -121,7 +122,10 @@
throw std::runtime_error("[hb] Version mismatch");
}
- g_pGlobalState = makeUnique<SGlobalState>();
+ g_pGlobalState = makeUnique<SGlobalState>();
+ g_pGlobalState->nobarRuleIdx =
Desktop::Rule::windowEffects()->registerEffect("hyprbars:no_bar");
+ g_pGlobalState->barColorRuleIdx =
Desktop::Rule::windowEffects()->registerEffect("hyprbars:bar_color");
+ g_pGlobalState->titleColorRuleIdx =
Desktop::Rule::windowEffects()->registerEffect("hyprbars:title_color");
static auto P = HyprlandAPI::registerCallbackDynamic(PHANDLE,
"openWindow", [&](void* self, SCallbackInfo& info, std::any data) {
onNewWindow(self, data); });
// static auto P2 = HyprlandAPI::registerCallbackDynamic(PHANDLE,
"closeWindow", [&](void* self, SCallbackInfo& info, std::any data) {
onCloseWindow(self, data); });
@@ -146,7 +150,7 @@
HyprlandAPI::addConfigValue(PHANDLE,
"plugin:hyprbars:inactive_button_color", Hyprlang::INT{0}); // unset
HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprbars:on_double_click",
Hyprlang::STRING{""});
- HyprlandAPI::addConfigKeyword(PHANDLE, "hyprbars-button", onNewButton,
Hyprlang::SHandlerOptions{});
+ HyprlandAPI::addConfigKeyword(PHANDLE, "plugin:hyprbars:hyprbars-button",
onNewButton, Hyprlang::SHandlerOptions{});
static auto P4 = HyprlandAPI::registerCallbackDynamic(PHANDLE,
"preConfigReload", [&](void* self, SCallbackInfo& info, std::any data) {
onPreConfigReload(); });
// add deco to existing windows
@@ -167,4 +171,8 @@
m->m_scheduledRecalc = true;
g_pHyprRenderer->m_renderPass.removeAllOfType("CBarPassElement");
+
+
Desktop::Rule::windowEffects()->unregisterEffect(g_pGlobalState->barColorRuleIdx);
+
Desktop::Rule::windowEffects()->unregisterEffect(g_pGlobalState->titleColorRuleIdx);
+
Desktop::Rule::windowEffects()->unregisterEffect(g_pGlobalState->nobarRuleIdx);
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hyprland-plugins-0.52.0/hyprexpo/ExpoGesture.cpp
new/hyprland-plugins-0.53.0/hyprexpo/ExpoGesture.cpp
--- old/hyprland-plugins-0.52.0/hyprexpo/ExpoGesture.cpp 2025-11-02
21:31:25.000000000 +0100
+++ new/hyprland-plugins-0.53.0/hyprexpo/ExpoGesture.cpp 2025-12-29
16:03:28.000000000 +0100
@@ -3,6 +3,7 @@
#include "overview.hpp"
#include <hyprland/src/Compositor.hpp>
+#include <hyprland/src/desktop/state/FocusState.hpp>
#include <hyprland/src/helpers/Monitor.hpp>
void CExpoGesture::begin(const ITrackpadGesture::STrackpadGestureBegin& e) {
@@ -12,7 +13,7 @@
m_firstUpdate = true;
if (!g_pOverview)
- g_pOverview =
std::make_unique<COverview>(g_pCompositor->m_lastMonitor->m_activeWorkspace);
+ g_pOverview =
std::make_unique<COverview>(Desktop::focusState()->monitor()->m_activeWorkspace);
else {
g_pOverview->selectHoveredWorkspace();
g_pOverview->setClosing(true);
@@ -25,6 +26,9 @@
return;
}
+ if (!g_pOverview)
+ return;
+
m_lastDelta += distance(e);
if (m_lastDelta <= 0.01) // plugin will crash if swipe ends at <= 0
@@ -34,7 +38,9 @@
}
void CExpoGesture::end(const ITrackpadGesture::STrackpadGestureEnd& e) {
+ if (!g_pOverview)
+ return;
+
g_pOverview->setClosing(false);
g_pOverview->onSwipeEnd();
- g_pOverview->resetSwipe();
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hyprland-plugins-0.52.0/hyprexpo/main.cpp
new/hyprland-plugins-0.53.0/hyprexpo/main.cpp
--- old/hyprland-plugins-0.52.0/hyprexpo/main.cpp 2025-11-02
21:31:25.000000000 +0100
+++ new/hyprland-plugins-0.53.0/hyprexpo/main.cpp 2025-12-29
16:03:28.000000000 +0100
@@ -3,7 +3,8 @@
#include <unistd.h>
#include <hyprland/src/Compositor.hpp>
-#include <hyprland/src/desktop/Window.hpp>
+#include <hyprland/src/desktop/state/FocusState.hpp>
+#include <hyprland/src/desktop/view/Window.hpp>
#include <hyprland/src/config/ConfigManager.hpp>
#include <hyprland/src/desktop/DesktopTypes.hpp>
#include <hyprland/src/render/Renderer.hpp>
@@ -81,7 +82,7 @@
g_pOverview->close();
else {
renderingOverview = true;
- g_pOverview =
std::make_unique<COverview>(g_pCompositor->m_lastMonitor->m_activeWorkspace);
+ g_pOverview =
std::make_unique<COverview>(Desktop::focusState()->monitor()->m_activeWorkspace);
renderingOverview = false;
}
return {};
@@ -97,7 +98,7 @@
return {};
renderingOverview = true;
- g_pOverview =
std::make_unique<COverview>(g_pCompositor->m_lastMonitor->m_activeWorkspace);
+ g_pOverview =
std::make_unique<COverview>(Desktop::focusState()->monitor()->m_activeWorkspace);
renderingOverview = false;
return {};
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hyprland-plugins-0.52.0/hyprexpo/overview.cpp
new/hyprland-plugins-0.53.0/hyprexpo/overview.cpp
--- old/hyprland-plugins-0.52.0/hyprexpo/overview.cpp 2025-11-02
21:31:25.000000000 +0100
+++ new/hyprland-plugins-0.53.0/hyprexpo/overview.cpp 2025-12-29
16:03:28.000000000 +0100
@@ -3,12 +3,14 @@
#define private public
#include <hyprland/src/render/Renderer.hpp>
#include <hyprland/src/Compositor.hpp>
+#include <hyprland/src/desktop/state/FocusState.hpp>
#include <hyprland/src/config/ConfigValue.hpp>
#include <hyprland/src/config/ConfigManager.hpp>
#include <hyprland/src/managers/animation/AnimationManager.hpp>
#include <hyprland/src/managers/animation/DesktopAnimationManager.hpp>
#include <hyprland/src/managers/cursor/CursorShapeOverrideController.hpp>
#include <hyprland/src/managers/input/InputManager.hpp>
+#include <hyprland/src/managers/eventLoop/EventLoopManager.hpp>
#include <hyprland/src/helpers/time/Time.hpp>
#undef private
#include "OverviewPassElement.hpp"
@@ -17,10 +19,6 @@
g_pOverview->damage();
}
-static void removeOverview(WP<Hyprutils::Animation::CBaseAnimatedVariable>
thisptr) {
- g_pOverview.reset();
-}
-
COverview::~COverview() {
g_pHyprRenderer->makeEGLCurrent();
images.clear(); // otherwise we get a vram leak
@@ -29,7 +27,7 @@
}
COverview::COverview(PHLWORKSPACE startedOn_, bool swipe_) :
startedOn(startedOn_), swipe(swipe_) {
- const auto PMONITOR = g_pCompositor->m_lastMonitor.lock();
+ const auto PMONITOR = Desktop::focusState()->monitor();
pMonitor = PMONITOR;
static auto* const* PCOLUMNS = (Hyprlang::INT*
const*)HyprlandAPI::getConfigValue(PHANDLE,
"plugin:hyprexpo:columns")->getDataStaticPtr();
@@ -47,7 +45,7 @@
int methodStartID = pMonitor->activeWorkspaceID();
CVarList method{*PMETHOD, 0, 's', true};
if (method.size() < 2)
- Debug::log(ERR, "[he] invalid workspace_method");
+ Log::logger->log(Log::ERR, "[he] invalid workspace_method");
else {
methodCenter = method[0] == "center";
methodStartID = getWorkspaceIDNameFromString(method[1]).id;
@@ -249,6 +247,9 @@
}
void COverview::redrawID(int id, bool forcelowres) {
+ if (!pMonitor)
+ return;
+
if (pMonitor->m_activeWorkspace != startedOn && !closing) {
// likely user changed.
onWorkspaceChange();
@@ -320,6 +321,8 @@
}
void COverview::redrawAll(bool forcelowres) {
+ if (!pMonitor)
+ return;
for (size_t i = 0; i < (size_t)(SIDE_LENGTH * SIDE_LENGTH); ++i) {
redrawID(i, forcelowres);
}
@@ -361,11 +364,12 @@
Vector2D tileSize = (pMonitor->m_size / SIDE_LENGTH);
+ size->warp();
+ pos->warp();
+
*size = pMonitor->m_size * pMonitor->m_size / tileSize;
*pos = (-((pMonitor->m_size / (double)SIDE_LENGTH) * Vector2D{ID %
SIDE_LENGTH, ID / SIDE_LENGTH}) * pMonitor->m_scale) * (pMonitor->m_size /
tileSize);
- size->setCallbackOnEnd(removeOverview);
-
closing = true;
redrawAll();
@@ -392,6 +396,8 @@
startedOn = pMonitor->m_activeWorkspace;
}
+
+ size->setCallbackOnEnd([](auto) { g_pEventLoopManager->doLater([] {
g_pOverview.reset(); }); });
}
void COverview::onPreRender() {
@@ -416,7 +422,8 @@
}
closeOnID = openedID;
- close();
+ if (!closing)
+ close();
}
void COverview::render() {
@@ -468,9 +475,6 @@
void COverview::onSwipeUpdate(double delta) {
m_isSwiping = true;
- if (swipeWasCommenced)
- return;
-
static auto* const* PDISTANCE = (Hyprlang::INT*
const*)HyprlandAPI::getConfigValue(PHANDLE,
"plugin:hyprexpo:gesture_distance")->getDataStaticPtr();
const float PERC = closing ? std::clamp(delta /
(double)**PDISTANCE, 0.0, 1.0) : 1.0 - std::clamp(delta / (double)**PDISTANCE,
0.0, 1.0);
@@ -490,6 +494,9 @@
}
void COverview::onSwipeEnd() {
+ if (closing || !m_isSwiping)
+ return;
+
const auto SIZEMIN = pMonitor->m_size;
const auto SIZEMAX = pMonitor->m_size * pMonitor->m_size /
(pMonitor->m_size / SIDE_LENGTH);
const auto PERC = (size->value() - SIZEMIN).x / (SIZEMAX - SIZEMIN).x;
@@ -502,6 +509,6 @@
size->setCallbackOnEnd([this](WP<Hyprutils::Animation::CBaseAnimatedVariable>
thisptr) { redrawAll(true); });
- swipeWasCommenced = true;
+ swipeWasCommenced = false;
m_isSwiping = false;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hyprland-plugins-0.52.0/hyprfocus/README.md
new/hyprland-plugins-0.53.0/hyprfocus/README.md
--- old/hyprland-plugins-0.52.0/hyprfocus/README.md 2025-11-02
21:31:25.000000000 +0100
+++ new/hyprland-plugins-0.53.0/hyprfocus/README.md 2025-12-29
16:03:28.000000000 +0100
@@ -14,9 +14,10 @@
### Variables
-| name | description | type | default |
-| --- | --- | --- | --- |
-|mode|which mode to use (flash / bounce / slide) | str | flash |
-| fade_opacity | for flash, what opacity to flash to | float | 0.8 |
-| bounce_strength | for bounce, what fraction of the window's size to jump to
| float | 0.95 |
-| slide_height | for slide, how far up to slide | float | 20 |
+| name | description
| type | default |
+|--------------------------|----------------------------------------------------------------------|---------|---------|
+| `mode` | which mode to use (flash / bounce / slide)
| str | flash |
+| `only_on_monitor_change` | whether to only perform the animation when
changing between monitors | boolean | false |
+| `fade_opacity` | for flash, what opacity to flash to
| float | 0.8 |
+| `bounce_strength` | for bounce, what fraction of the window's size to
jump to | float | 0.95 |
+| `slide_height` | for slide, how far up to slide
| float | 20 |
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hyprland-plugins-0.52.0/hyprfocus/main.cpp
new/hyprland-plugins-0.53.0/hyprfocus/main.cpp
--- old/hyprland-plugins-0.52.0/hyprfocus/main.cpp 2025-11-02
21:31:25.000000000 +0100
+++ new/hyprland-plugins-0.53.0/hyprfocus/main.cpp 2025-12-29
16:03:28.000000000 +0100
@@ -38,6 +38,10 @@
if (lastWindow == window)
return;
+ static const auto PONLY_ON_MONITOR_CHANGE =
CConfigValue<Hyprlang::INT>("plugin:hyprfocus:only_on_monitor_change");
+ if (*PONLY_ON_MONITOR_CHANGE && lastWindow && lastWindow->m_monitor ==
window->m_monitor)
+ return;
+
lastWindow = window;
static const auto POPACITY =
CConfigValue<Hyprlang::FLOAT>("plugin:hyprfocus:fade_opacity");
@@ -48,15 +52,15 @@
const auto POUT =
g_pConfigManager->getAnimationPropertyConfig("hyprfocusOut");
if (*PMODE == "flash") {
+ const auto ORIGINAL = window->m_activeInactiveAlpha->goal();
window->m_activeInactiveAlpha->setConfig(PIN);
*window->m_activeInactiveAlpha = std::clamp(*POPACITY, 0.F, 1.F);
- window->m_activeInactiveAlpha->setCallbackOnEnd([w =
PHLWINDOWREF{window}, POUT](WP<CBaseAnimatedVariable> pav) {
+ window->m_activeInactiveAlpha->setCallbackOnEnd([w =
PHLWINDOWREF{window}, POUT, ORIGINAL](WP<CBaseAnimatedVariable> pav) {
if (!w)
return;
w->m_activeInactiveAlpha->setConfig(POUT);
- g_pCompositor->updateWindowAnimatedDecorationValues(w.lock());
- w->updateDynamicRules();
+ *w->m_activeInactiveAlpha = ORIGINAL;
w->m_activeInactiveAlpha->setCallbackOnEnd(nullptr);
});
@@ -77,7 +81,7 @@
w->m_realSize->setConfig(POUT);
w->m_realPosition->setConfig(POUT);
- if (w->m_isFloating) {
+ if (w->m_isFloating || w->isFullscreen()) {
*w->m_realPosition = ORIGINAL.pos();
*w->m_realSize = ORIGINAL.size();
} else
@@ -97,7 +101,7 @@
return;
w->m_realPosition->setConfig(POUT);
- if (w->m_isFloating)
+ if (w->m_isFloating || w->isFullscreen())
*w->m_realPosition = ORIGINAL;
else
g_pLayoutManager->getCurrentLayout()->recalculateWindow(w.lock());
@@ -124,6 +128,7 @@
// clang-format on
HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprfocus:mode",
Hyprlang::STRING{"flash"});
+ HyprlandAPI::addConfigValue(PHANDLE,
"plugin:hyprfocus:only_on_monitor_change", Hyprlang::INT{0});
HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprfocus:fade_opacity",
Hyprlang::FLOAT{0.8F});
HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprfocus:slide_height",
Hyprlang::FLOAT{20.F});
HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprfocus:bounce_strength",
Hyprlang::FLOAT{0.95F});
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hyprland-plugins-0.52.0/hyprpm.toml
new/hyprland-plugins-0.53.0/hyprpm.toml
--- old/hyprland-plugins-0.52.0/hyprpm.toml 2025-11-02 21:31:25.000000000
+0100
+++ new/hyprland-plugins-0.53.0/hyprpm.toml 2025-12-29 16:03:28.000000000
+0100
@@ -35,7 +35,10 @@
["c4a4c341568944bd4fb9cd503558b2de602c0213",
"bf310cda4a09b79725c2919688881959ebf3229e"], # 0.50.0
["4e242d086e20b32951fdc0ebcbfb4d41b5be8dcc",
"bf310cda4a09b79725c2919688881959ebf3229e"], # 0.50.1
["46174f78b374b6cea669c48880877a8bdcf7802f",
"a5a6f93d72d5fb37e78b98c756cfd8b340e71a19"], # 0.51.0
- ["71a1216abcc7031776630a6d88f105605c4dc1c9",
"a5a6f93d72d5fb37e78b98c756cfd8b340e71a19"] # 0.51.1
+ ["71a1216abcc7031776630a6d88f105605c4dc1c9",
"a5a6f93d72d5fb37e78b98c756cfd8b340e71a19"], # 0.51.1
+ ["f56ec180d3a03a5aa978391249ff8f40f949fb73",
"8c1212e96b81aa5f11fe21ca27defa2aad5b3cf3"], # 0.52.0
+ ["967c3c7404d4fa00234e29c70df3e263386d2597",
"8c1212e96b81aa5f11fe21ca27defa2aad5b3cf3"], # 0.52.1
+ ["386376400119dd46a767c9f8c8791fd22c7b6e61",
"8c1212e96b81aa5f11fe21ca27defa2aad5b3cf3"] # 0.52.2
]
[borders-plus-plus]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hyprland-plugins-0.52.0/hyprscrolling/Scrolling.cpp
new/hyprland-plugins-0.53.0/hyprscrolling/Scrolling.cpp
--- old/hyprland-plugins-0.52.0/hyprscrolling/Scrolling.cpp 2025-11-02
21:31:25.000000000 +0100
+++ new/hyprland-plugins-0.53.0/hyprscrolling/Scrolling.cpp 2025-12-29
16:03:28.000000000 +0100
@@ -3,6 +3,7 @@
#include <algorithm>
#include <hyprland/src/Compositor.hpp>
+#include <hyprland/src/desktop/state/FocusState.hpp>
#include <hyprland/src/managers/input/InputManager.hpp>
#include <hyprland/src/managers/eventLoop/EventLoopManager.hpp>
#include <hyprland/src/config/ConfigManager.hpp>
@@ -276,7 +277,7 @@
static const auto PFSONONE =
CConfigValue<Hyprlang::INT>("plugin:hyprscrolling:fullscreen_on_one_column");
if (!workspace) {
- Debug::log(ERR, "[scroller] broken internal state on workspace data");
+ Log::logger->log(Log::ERR, "[scroller] broken internal state on
workspace data");
return;
}
@@ -296,7 +297,7 @@
for (const auto& WINDOW : COL->windowDatas) {
WINDOW->layoutBox =
- CBox{currentLeft, currentTop, ITEM_WIDTH, WINDOW->windowSize *
USABLE.h}.translate(PMONITOR->m_position + PMONITOR->m_reservedTopLeft +
Vector2D{-cameraLeft, 0.0});
+ CBox{currentLeft, currentTop, ITEM_WIDTH, WINDOW->windowSize *
USABLE.h}.translate(PMONITOR->logicalBoxMinusReserved().pos() +
Vector2D{-cameraLeft, 0.0});
currentTop += WINDOW->windowSize * USABLE.h;
@@ -349,7 +350,7 @@
if (!data || !data->column || !data->column->workspace) {
if (!data->overrideWorkspace) {
- Debug::log(ERR, "[scroller] broken internal state on workspace
(1)");
+ Log::logger->log(Log::ERR, "[scroller] broken internal state on
workspace (1)");
return;
}
@@ -361,15 +362,16 @@
}
if (!PMONITOR || !PWORKSPACE) {
- Debug::log(ERR, "[scroller] broken internal state on workspace (2)");
+ Log::logger->log(Log::ERR, "[scroller] broken internal state on
workspace (2)");
return;
}
// for gaps outer
+ const auto WORKAREA = PMONITOR->logicalBoxMinusReserved();
const bool DISPLAYLEFT = !hasWindowsLeft;
const bool DISPLAYRIGHT = !hasWindowsRight;
- const bool DISPLAYTOP = STICKS(data->layoutBox.y,
PMONITOR->m_position.y + PMONITOR->m_reservedTopLeft.y);
- const bool DISPLAYBOTTOM = STICKS(data->layoutBox.y + data->layoutBox.h,
PMONITOR->m_position.y + PMONITOR->m_size.y -
PMONITOR->m_reservedBottomRight.y);
+ const bool DISPLAYTOP = STICKS(data->layoutBox.y, WORKAREA.y);
+ const bool DISPLAYBOTTOM = STICKS(data->layoutBox.y + data->layoutBox.h,
WORKAREA.y + WORKAREA.h);
const auto PWINDOW = data->window.lock();
// get specific gaps and rules for this workspace,
@@ -377,7 +379,7 @@
const auto WORKSPACERULE =
g_pConfigManager->getWorkspaceRuleFor(PWORKSPACE);
if (!validMapped(PWINDOW)) {
- Debug::log(ERR, "Node {} holding invalid {}!!", (uintptr_t)data.get(),
PWINDOW);
+ Log::logger->log(Log::ERR, "Node {} holding invalid {}!!",
(uintptr_t)data.get(), PWINDOW);
onWindowRemovedTiling(PWINDOW);
return;
}
@@ -385,7 +387,7 @@
if (PWINDOW->isFullscreen() && !data->ignoreFullscreenChecks)
return;
- PWINDOW->unsetWindowData(PRIORITY_LAYOUT);
+ PWINDOW->m_ruleApplicator->resetProps(Desktop::Rule::RULE_PROP_ALL,
Desktop::Types::PRIORITY_LAYOUT);
PWINDOW->updateWindowData();
static auto PGAPSINDATA =
CConfigValue<Hyprlang::CUSTOMTYPE>("general:gaps_in");
@@ -394,7 +396,6 @@
auto* const PGAPSOUT = (CCssGapData*)(PGAPSOUTDATA.ptr())->getData();
auto gapsIn = WORKSPACERULE.gapsIn.value_or(*PGAPSIN);
- auto gapsOut = WORKSPACERULE.gapsOut.value_or(*PGAPSOUT);
CBox nodeBox = data->layoutBox;
nodeBox.round();
@@ -406,9 +407,9 @@
auto calcPos = PWINDOW->m_position;
auto calcSize = PWINDOW->m_size;
- const auto OFFSETTOPLEFT = Vector2D((double)(DISPLAYLEFT ? gapsOut.m_left
: gapsIn.m_left), (double)(DISPLAYTOP ? gapsOut.m_top : gapsIn.m_top));
+ const auto OFFSETTOPLEFT = Vector2D((double)(DISPLAYLEFT ? 0 :
gapsIn.m_left), (double)(DISPLAYTOP ? 0 : gapsIn.m_top));
- const auto OFFSETBOTTOMRIGHT = Vector2D((double)(DISPLAYRIGHT ?
gapsOut.m_right : gapsIn.m_right), (double)(DISPLAYBOTTOM ? gapsOut.m_bottom :
gapsIn.m_bottom));
+ const auto OFFSETBOTTOMRIGHT = Vector2D((double)(DISPLAYRIGHT ? 0 :
gapsIn.m_right), (double)(DISPLAYBOTTOM ? 0 : gapsIn.m_bottom));
calcPos = calcPos + OFFSETTOPLEFT;
calcSize = calcSize - OFFSETTOPLEFT - OFFSETBOTTOMRIGHT;
@@ -481,7 +482,7 @@
for (auto& w : widths) {
try {
m_config.configuredWidths.emplace_back(std::stof(std::string{w}));
- } catch (...) { Debug::log(ERR, "scrolling: Failed to parse width
{} as float", w); }
+ } catch (...) { Log::logger->log(Log::ERR, "scrolling: Failed to
parse width {} as float", w); }
}
});
@@ -529,20 +530,20 @@
auto workspaceData = dataFor(window->m_workspace);
if (!workspaceData) {
- Debug::log(LOG, "[scrolling] No workspace data yet, creating");
+ Log::logger->log(Log::DEBUG, "[scrolling] No workspace data yet,
creating");
workspaceData =
m_workspaceDatas.emplace_back(makeShared<SWorkspaceData>(window->m_workspace,
this));
workspaceData->self = workspaceData;
}
- auto droppingOn = g_pCompositor->m_lastWindow.lock();
+ auto droppingOn = Desktop::focusState()->window();
if (droppingOn == window)
- droppingOn =
g_pCompositor->vectorToWindowUnified(g_pInputManager->getMouseCoordsInternal(),
RESERVED_EXTENTS | INPUT_EXTENTS);
+ droppingOn =
g_pCompositor->vectorToWindowUnified(g_pInputManager->getMouseCoordsInternal(),
Desktop::View::RESERVED_EXTENTS | Desktop::View::INPUT_EXTENTS);
SP<SScrollingWindowData> droppingData = droppingOn ? dataFor(droppingOn)
: nullptr;
SP<SColumnData> droppingColumn = droppingData ?
droppingData->column.lock() : nullptr;
- Debug::log(LOG, "[scrolling] new window {:x}, droppingColumn: {:x},
columns before: {}", (uintptr_t)window.get(), (uintptr_t)droppingColumn.get(),
+ Log::logger->log(Log::DEBUG, "[scrolling] new window {:x}, droppingColumn:
{:x}, columns before: {}", (uintptr_t)window.get(),
(uintptr_t)droppingColumn.get(),
workspaceData->columns.size());
if (!droppingColumn) {
@@ -630,7 +631,7 @@
}
void CScrollingLayout::resizeActiveWindow(const Vector2D& delta, eRectCorner
corner, PHLWINDOW pWindow) {
- const auto PWINDOW = pWindow ? pWindow :
g_pCompositor->m_lastWindow.lock();
+ const auto PWINDOW = pWindow ? pWindow : Desktop::focusState()->window();
Vector2D modDelta = delta;
if (!validMapped(PWINDOW))
@@ -639,9 +640,9 @@
const auto DATA = dataFor(PWINDOW);
if (!DATA) {
- *PWINDOW->m_realSize =
- (PWINDOW->m_realSize->goal() + delta)
-
.clamp(PWINDOW->m_windowData.minSize.valueOr(Vector2D{MIN_WINDOW_SIZE,
MIN_WINDOW_SIZE}), PWINDOW->m_windowData.maxSize.valueOr(Vector2D{INFINITY,
INFINITY}));
+ *PWINDOW->m_realSize = (PWINDOW->m_realSize->goal() + delta)
+
.clamp(PWINDOW->m_ruleApplicator->minSize().valueOr(Vector2D{MIN_WINDOW_SIZE,
MIN_WINDOW_SIZE}),
+
PWINDOW->m_ruleApplicator->maxSize().valueOr(Vector2D{INFINITY, INFINITY}));
PWINDOW->updateWindowDecos();
return;
}
@@ -753,7 +754,7 @@
*pWindow->m_realPosition = pWindow->m_lastFloatingPosition;
*pWindow->m_realSize = pWindow->m_lastFloatingSize;
- pWindow->unsetWindowData(PRIORITY_LAYOUT);
+
pWindow->m_ruleApplicator->resetProps(Desktop::Rule::RULE_PROP_ALL,
Desktop::Types::PRIORITY_LAYOUT);
pWindow->updateWindowData();
}
} else {
@@ -768,10 +769,10 @@
SP<SScrollingWindowData> fakeNode =
makeShared<SScrollingWindowData>(pWindow, nullptr);
fakeNode->window = pWindow;
- fakeNode->layoutBox = {PMONITOR->m_position +
PMONITOR->m_reservedTopLeft, PMONITOR->m_size - PMONITOR->m_reservedTopLeft -
PMONITOR->m_reservedBottomRight};
- pWindow->m_size = fakeNode->layoutBox.size();
- fakeNode->ignoreFullscreenChecks = true;
- fakeNode->overrideWorkspace = pWindow->m_workspace;
+ fakeNode->layoutBox =
PMONITOR->logicalBoxMinusReserved();
+ pWindow->m_size = fakeNode->layoutBox.size();
+ fakeNode->ignoreFullscreenChecks = true;
+ fakeNode->overrideWorkspace = pWindow->m_workspace;
applyNodeDataToWindow(fakeNode, false, false, false);
}
@@ -782,10 +783,10 @@
void CScrollingLayout::focusWindowUpdate(PHLWINDOW pWindow) {
if (!validMapped(pWindow)) {
- g_pCompositor->focusWindow(nullptr);
+ Desktop::focusState()->fullWindowFocus(nullptr);
return;
}
- g_pCompositor->focusWindow(pWindow);
+ Desktop::focusState()->fullWindowFocus(pWindow);
const auto WINDOWDATA = dataFor(pWindow);
if (WINDOWDATA) {
if (auto col = WINDOWDATA->column.lock())
@@ -841,7 +842,7 @@
return {};
if (ARGS[1] == "+col" || ARGS[1] == "col") {
- const auto WDATA = dataFor(g_pCompositor->m_lastWindow.lock());
+ const auto WDATA = dataFor(Desktop::focusState()->window());
if (!WDATA)
return {};
@@ -862,9 +863,9 @@
return {};
} else if (ARGS[1] == "-col") {
- const auto WDATA = dataFor(g_pCompositor->m_lastWindow.lock());
+ const auto WDATA = dataFor(Desktop::focusState()->window());
if (!WDATA) {
- if (DATA->leftOffset <= DATA->maxWidth() &&
DATA->columns.size() > 0) {
+ if (DATA->columns.size() > 0) {
DATA->centerCol(DATA->columns.back());
DATA->recalculate();
focusWindowUpdate((DATA->columns.back()->windowDatas.back())->window.lock());
@@ -899,7 +900,7 @@
focusWindowUpdate(ATCENTER ?
(*ATCENTER->windowDatas.begin())->window.lock() : nullptr);
} else if (ARGS[0] == "colresize") {
- const auto WDATA = dataFor(g_pCompositor->m_lastWindow.lock());
+ const auto WDATA = dataFor(Desktop::focusState()->window());
if (!WDATA)
return {};
@@ -927,29 +928,27 @@
if (ARGS[1][0] == '+' || ARGS[1][0] == '-') {
if (ARGS[1] == "+conf") {
for (size_t i = 0; i < m_config.configuredWidths.size(); ++i) {
- if (m_config.configuredWidths[i] <
WDATA->column->columnWidth)
- continue;
+ if (m_config.configuredWidths[i] >
WDATA->column->columnWidth) {
+ WDATA->column->columnWidth =
m_config.configuredWidths[i];
+ break;
+ }
if (i == m_config.configuredWidths.size() - 1)
WDATA->column->columnWidth =
m_config.configuredWidths[0];
- else
- WDATA->column->columnWidth =
m_config.configuredWidths[i + 1];
-
- break;
}
return {};
} else if (ARGS[1] == "-conf") {
- for (size_t i = m_config.configuredWidths.size() - 1; i >= 0;
--i) {
- if (m_config.configuredWidths[i] >
WDATA->column->columnWidth)
- continue;
-
- if (i == 0)
- WDATA->column->columnWidth =
m_config.configuredWidths[m_config.configuredWidths.size() - 1];
- else
- WDATA->column->columnWidth =
m_config.configuredWidths[i - 1];
+ for (size_t i = m_config.configuredWidths.size() - 1;; --i) {
+ if (m_config.configuredWidths[i] <
WDATA->column->columnWidth) {
+ WDATA->column->columnWidth =
m_config.configuredWidths[i];
+ break;
+ }
- break;
+ if (i == 0) {
+ WDATA->column->columnWidth =
m_config.configuredWidths.back();
+ break;
+ }
}
return {};
@@ -970,13 +969,13 @@
WDATA->column->columnWidth = abs;
}
} else if (ARGS[0] == "movewindowto") {
- moveWindowTo(g_pCompositor->m_lastWindow.lock(), ARGS[1], false);
+ moveWindowTo(Desktop::focusState()->window(), ARGS[1], false);
} else if (ARGS[0] == "fit") {
if (ARGS[1] == "active") {
// fit the current column to 1.F
- const auto WDATA = dataFor(g_pCompositor->m_lastWindow.lock());
- const auto WORKDATA =
dataFor(g_pCompositor->m_lastWindow->m_workspace);
+ const auto WDATA = dataFor(Desktop::focusState()->window());
+ const auto WORKDATA =
dataFor(Desktop::focusState()->window()->m_workspace);
if (!WDATA || !WORKDATA || WORKDATA->columns.size() == 0)
return {};
@@ -987,7 +986,7 @@
WORKDATA->leftOffset = 0;
for (size_t i = 0; i < WORKDATA->columns.size(); ++i) {
- if
(WORKDATA->columns[i]->has(g_pCompositor->m_lastWindow.lock()))
+ if (WORKDATA->columns[i]->has(Desktop::focusState()->window()))
break;
WORKDATA->leftOffset += USABLE.w *
WORKDATA->columns[i]->columnWidth;
@@ -996,7 +995,7 @@
WDATA->column->workspace->recalculate();
} else if (ARGS[1] == "all") {
// fit all columns on screen
- const auto WDATA =
dataFor(g_pCompositor->m_lastWindow->m_workspace);
+ const auto WDATA =
dataFor(Desktop::focusState()->window()->m_workspace);
if (!WDATA || WDATA->columns.size() == 0)
return {};
@@ -1009,7 +1008,7 @@
WDATA->recalculate();
} else if (ARGS[1] == "toend") {
// fit all columns on screen that start from the current and end
on the last
- const auto WDATA =
dataFor(g_pCompositor->m_lastWindow->m_workspace);
+ const auto WDATA =
dataFor(Desktop::focusState()->window()->m_workspace);
if (!WDATA || WDATA->columns.size() == 0)
return {};
@@ -1017,7 +1016,7 @@
bool begun = false;
size_t foundAt = 0;
for (size_t i = 0; i < WDATA->columns.size(); ++i) {
- if (!begun &&
!WDATA->columns[i]->has(g_pCompositor->m_lastWindow.lock()))
+ if (!begun &&
!WDATA->columns[i]->has(Desktop::focusState()->window()))
continue;
if (!begun) {
@@ -1041,7 +1040,7 @@
WDATA->recalculate();
} else if (ARGS[1] == "tobeg") {
// fit all columns on screen that start from the current and end
on the last
- const auto WDATA =
dataFor(g_pCompositor->m_lastWindow->m_workspace);
+ const auto WDATA =
dataFor(Desktop::focusState()->window()->m_workspace);
if (!WDATA || WDATA->columns.size() == 0)
return {};
@@ -1049,7 +1048,7 @@
bool begun = false;
size_t foundAt = 0;
for (int64_t i = (int64_t)WDATA->columns.size() - 1; i >= 0; --i) {
- if (!begun &&
!WDATA->columns[i]->has(g_pCompositor->m_lastWindow.lock()))
+ if (!begun &&
!WDATA->columns[i]->has(Desktop::focusState()->window()))
continue;
if (!begun) {
@@ -1068,7 +1067,7 @@
WDATA->recalculate();
} else if (ARGS[1] == "visible") {
// fit all columns on screen that start from the current and end
on the last
- const auto WDATA =
dataFor(g_pCompositor->m_lastWindow->m_workspace);
+ const auto WDATA =
dataFor(Desktop::focusState()->window()->m_workspace);
if (!WDATA || WDATA->columns.size() == 0)
return {};
@@ -1111,7 +1110,7 @@
WDATA->recalculate();
}
} else if (ARGS[0] == "focus") {
- const auto WDATA =
dataFor(g_pCompositor->m_lastWindow.lock());
+ const auto WDATA =
dataFor(Desktop::focusState()->window());
static const auto PNOFALLBACK =
CConfigValue<Hyprlang::INT>("general:no_focus_fallback");
if (!WDATA || ARGS[1].empty())
@@ -1195,7 +1194,7 @@
default: return {};
}
} else if (ARGS[0] == "promote") {
- const auto WDATA = dataFor(g_pCompositor->m_lastWindow.lock());
+ const auto WDATA = dataFor(Desktop::focusState()->window());
if (!WDATA)
return {};
@@ -1212,7 +1211,7 @@
if (ARGS.size() < 2)
return {};
- const auto WDATA = dataFor(g_pCompositor->m_lastWindow.lock());
+ const auto WDATA = dataFor(Desktop::focusState()->window());
if (!WDATA)
return {};
@@ -1247,7 +1246,7 @@
if (ARGS.size() < 2)
return {};
- const auto WDATA = dataFor(g_pCompositor->m_lastWindow.lock());
+ const auto WDATA = dataFor(Desktop::focusState()->window());
if (!WDATA)
return {};
@@ -1259,7 +1258,7 @@
if (!SOURCE_WS_DATA)
return {};
- const auto PMONITOR = g_pCompositor->m_lastWindow->m_monitor.lock();
+ const auto PMONITOR = Desktop::focusState()->monitor();
if (!PMONITOR)
return {};
@@ -1342,7 +1341,7 @@
g_pCompositor->moveWindowToWorkspaceSafe(win, PWORKSPACE);
}
- g_pCompositor->focusWindow(windowsToMove.front());
+ Desktop::focusState()->fullWindowFocus(windowsToMove.front());
g_pCompositor->warpCursorTo(windowsToMove.front()->middle());
} else if (ARGS[0] == "togglefit") {
static const auto PFITMETHOD =
CConfigValue<Hyprlang::INT>("plugin:hyprscrolling:focus_fit_method");
@@ -1351,7 +1350,7 @@
fitMethod = toggled;
- const auto focusedData =
dataFor(g_pCompositor->m_lastWindow.lock());
+ const auto focusedData =
dataFor(Desktop::focusState()->window());
static const auto PFSONONE =
CConfigValue<Hyprlang::INT>("plugin:hyprscrolling:fullscreen_on_one_column");
for (const auto& ws : m_workspaceDatas) {
@@ -1447,8 +1446,8 @@
NEWCOL->add(DATA);
WS->centerOrFitCol(NEWCOL);
} else {
- if (COL->windowDatas.size() > 1 || DATA->column)
- COL->add(DATA,
COL->idxForHeight(g_pInputManager->getMouseCoordsInternal().y) - 1);
+ if (COL->windowDatas.size() > 0)
+ COL->add(DATA,
COL->idxForHeight(g_pInputManager->getMouseCoordsInternal().y));
else
COL->add(DATA);
WS->centerOrFitCol(COL);
@@ -1464,8 +1463,8 @@
NEWCOL->add(DATA);
WS->centerOrFitCol(NEWCOL);
} else {
- if (COL->windowDatas.size() > 1 || DATA->column)
- COL->add(DATA,
COL->idxForHeight(g_pInputManager->getMouseCoordsInternal().y) - 1);
+ if (COL->windowDatas.size() > 0)
+ COL->add(DATA,
COL->idxForHeight(g_pInputManager->getMouseCoordsInternal().y));
else
COL->add(DATA);
WS->centerOrFitCol(COL);
@@ -1530,14 +1529,14 @@
}
SP<SWorkspaceData> CScrollingLayout::currentWorkspaceData() {
- if (!g_pCompositor->m_lastMonitor ||
!g_pCompositor->m_lastMonitor->m_activeWorkspace)
+ if (!Desktop::focusState()->monitor() ||
!Desktop::focusState()->monitor()->m_activeWorkspace)
return nullptr;
// FIXME: special
- return dataFor(g_pCompositor->m_lastMonitor->m_activeWorkspace);
+ return dataFor(Desktop::focusState()->monitor()->m_activeWorkspace);
}
CBox CScrollingLayout::usableAreaFor(PHLMONITOR m) {
- return CBox{m->m_reservedTopLeft, m->m_size - m->m_reservedTopLeft -
m->m_reservedBottomRight};
+ return m->logicalBoxMinusReserved().translate(-m->m_position);
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hyprland-plugins-0.52.0/hyprscrolling/Scrolling.hpp
new/hyprland-plugins-0.53.0/hyprscrolling/Scrolling.hpp
--- old/hyprland-plugins-0.52.0/hyprscrolling/Scrolling.hpp 2025-11-02
21:31:25.000000000 +0100
+++ new/hyprland-plugins-0.53.0/hyprscrolling/Scrolling.hpp 2025-12-29
16:03:28.000000000 +0100
@@ -35,6 +35,8 @@
void remove(PHLWINDOW w);
bool has(PHLWINDOW w);
size_t idx(PHLWINDOW w);
+
+ // index of lowest window that is above y.
size_t idxForHeight(float y);
void up(SP<SScrollingWindowData> w);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hyprland-plugins-0.52.0/hyprscrolling/main.cpp
new/hyprland-plugins-0.53.0/hyprscrolling/main.cpp
--- old/hyprland-plugins-0.52.0/hyprscrolling/main.cpp 2025-11-02
21:31:25.000000000 +0100
+++ new/hyprland-plugins-0.53.0/hyprscrolling/main.cpp 2025-12-29
16:03:28.000000000 +0100
@@ -7,7 +7,7 @@
#define private public
#include <hyprland/src/Compositor.hpp>
-#include <hyprland/src/desktop/Window.hpp>
+#include <hyprland/src/desktop/DesktopTypes.hpp>
#include <hyprland/src/config/ConfigManager.hpp>
#include <hyprland/src/render/Renderer.hpp>
#include <hyprland/src/managers/KeybindManager.hpp>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hyprland-plugins-0.52.0/hyprtrails/main.cpp
new/hyprland-plugins-0.53.0/hyprtrails/main.cpp
--- old/hyprland-plugins-0.52.0/hyprtrails/main.cpp 2025-11-02
21:31:25.000000000 +0100
+++ new/hyprland-plugins-0.53.0/hyprtrails/main.cpp 2025-12-29
16:03:28.000000000 +0100
@@ -4,7 +4,7 @@
#include <any>
#include <hyprland/src/Compositor.hpp>
-#include <hyprland/src/desktop/Window.hpp>
+#include <hyprland/src/desktop/DesktopTypes.hpp>
#include <hyprland/src/config/ConfigManager.hpp>
#include <hyprland/src/render/shaders/Shaders.hpp>
#include <hyprland/src/render/Renderer.hpp>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hyprland-plugins-0.52.0/hyprtrails/trail.cpp
new/hyprland-plugins-0.53.0/hyprtrails/trail.cpp
--- old/hyprland-plugins-0.52.0/hyprtrails/trail.cpp 2025-11-02
21:31:25.000000000 +0100
+++ new/hyprland-plugins-0.53.0/hyprtrails/trail.cpp 2025-12-29
16:03:28.000000000 +0100
@@ -1,7 +1,7 @@
#include "trail.hpp"
#include <hyprland/src/Compositor.hpp>
-#include <hyprland/src/desktop/Window.hpp>
+#include <hyprland/src/desktop/view/Window.hpp>
#include <hyprland/src/render/Renderer.hpp>
#include <hyprutils/memory/Casts.hpp>
using namespace Hyprutils::Memory;
@@ -87,7 +87,7 @@
const auto PWINDOW = m_pWindow.lock();
- if (!PWINDOW->m_windowData.decorate.valueOrDefault())
+ if (!PWINDOW->m_ruleApplicator->decorate().valueOrDefault())
return;
auto data = CTrailPassElement::STrailData{this, a};
@@ -129,7 +129,7 @@
CBox monbox = {0, 0,
g_pHyprOpenGL->m_renderData.pMonitor->m_transformedSize.x,
g_pHyprOpenGL->m_renderData.pMonitor->m_transformedSize.y};
- Mat3x3 matrix =
g_pHyprOpenGL->m_renderData.monitorProjection.projectBox(monbox,
wlTransformToHyprutils(invertTransform(WL_OUTPUT_TRANSFORM_NORMAL)),
monbox.rot);
+ Mat3x3 matrix =
g_pHyprOpenGL->m_renderData.monitorProjection.projectBox(monbox,
Math::wlTransformToHyprutils(Math::invertTransform(WL_OUTPUT_TRANSFORM_NORMAL)),
monbox.rot);
Mat3x3 glMatrix =
g_pHyprOpenGL->m_renderData.projection.copy().multiply(matrix);
g_pHyprOpenGL->blend(true);
@@ -224,13 +224,12 @@
// vecNormal.y = std::abs(vecNormal.y);
// extend by coeff
- float ageCoeff = t * (agesForBezier.size() - 1);
- float ageFloor = std::floor(ageCoeff);
- float ageCeil = std::ceil(ageCoeff);
- float approxAge =
- agesForBezier[sc<int>(ageFloor)] +
(agesForBezier[sc<int>(ageCeil)] - agesForBezier[sc<int>(ageFloor)]) *
(ageCoeff - ageFloor);
- float coeff = originalCoeff * (1.0 - (approxAge / maxAge));
- Vector2D newVec = {vecNormal.x * coeff / pMonitor->m_size.x,
vecNormal.y * coeff / pMonitor->m_size.y};
+ float ageCoeff = t * (agesForBezier.size() - 1);
+ float ageFloor = std::floor(ageCoeff);
+ float ageCeil = std::ceil(ageCoeff);
+ float approxAge = agesForBezier[sc<int>(ageFloor)] +
(agesForBezier[sc<int>(ageCeil)] - agesForBezier[sc<int>(ageFloor)]) *
(ageCoeff - ageFloor);
+ float coeff = originalCoeff * (1.0 - (approxAge / maxAge));
+ Vector2D newVec = {vecNormal.x * coeff / pMonitor->m_size.x,
vecNormal.y * coeff / pMonitor->m_size.y};
if ((newVec.x == 0 && newVec.y == 0) || std::isnan(newVec.x) ||
std::isnan(newVec.y))
continue;
@@ -243,16 +242,15 @@
}
}
- box thisboxopengl =
- box{sc<float>((PWINDOW->m_realPosition->value().x -
pMonitor->m_position.x) / pMonitor->m_size.x),
- sc<float>((PWINDOW->m_realPosition->value().y -
pMonitor->m_position.y) / pMonitor->m_size.y),
- sc<float>((PWINDOW->m_realPosition->value().x +
PWINDOW->m_realSize->value().x) / pMonitor->m_size.x),
- sc<float>((PWINDOW->m_realPosition->value().y +
PWINDOW->m_realSize->value().y) / pMonitor->m_size.y)};
+ box thisboxopengl = box{sc<float>((PWINDOW->m_realPosition->value().x -
pMonitor->m_position.x) / pMonitor->m_size.x),
+ sc<float>((PWINDOW->m_realPosition->value().y -
pMonitor->m_position.y) / pMonitor->m_size.y),
+ sc<float>((PWINDOW->m_realPosition->value().x +
PWINDOW->m_realSize->value().x) / pMonitor->m_size.x),
+ sc<float>((PWINDOW->m_realPosition->value().y +
PWINDOW->m_realSize->value().y) / pMonitor->m_size.y)};
glUniform4f(g_pGlobalState->trailShader.uniformLocations[SHADER_GRADIENT],
thisboxopengl.x, thisboxopengl.y, thisboxopengl.w, thisboxopengl.h);
glUniform4f(g_pGlobalState->trailShader.uniformLocations[SHADER_COLOR],
COLOR.r, COLOR.g, COLOR.b, COLOR.a);
CBox transformedBox = monbox;
-
transformedBox.transform(wlTransformToHyprutils(invertTransform(g_pHyprOpenGL->m_renderData.pMonitor->m_transform)),
g_pHyprOpenGL->m_renderData.pMonitor->m_transformedSize.x,
+
transformedBox.transform(Math::wlTransformToHyprutils(Math::invertTransform(g_pHyprOpenGL->m_renderData.pMonitor->m_transform)),
g_pHyprOpenGL->m_renderData.pMonitor->m_transformedSize.x,
g_pHyprOpenGL->m_renderData.pMonitor->m_transformedSize.y);
glVertexAttribPointer(g_pGlobalState->trailShader.uniformLocations[SHADER_POS_ATTRIB],
2, GL_FLOAT, GL_FALSE, 0, (float*)points.data());
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hyprland-plugins-0.52.0/hyprwinwrap/main.cpp
new/hyprland-plugins-0.53.0/hyprwinwrap/main.cpp
--- old/hyprland-plugins-0.52.0/hyprwinwrap/main.cpp 2025-11-02
21:31:25.000000000 +0100
+++ new/hyprland-plugins-0.53.0/hyprwinwrap/main.cpp 2025-12-29
16:03:28.000000000 +0100
@@ -9,7 +9,7 @@
#define private public
#include <hyprland/src/Compositor.hpp>
-#include <hyprland/src/desktop/Window.hpp>
+#include <hyprland/src/desktop/view/Window.hpp>
#include <hyprland/src/config/ConfigManager.hpp>
#include <hyprland/src/render/Renderer.hpp>
#include <hyprland/src/managers/LayoutManager.hpp>
@@ -27,7 +27,7 @@
// hooks
inline CFunctionHook* subsurfaceHook = nullptr;
inline CFunctionHook* commitHook = nullptr;
-typedef void (*origCommitSubsurface)(CSubsurface* thisptr);
+typedef void (*origCommitSubsurface)(Desktop::View::CSubsurface* thisptr);
typedef void (*origCommit)(void* owner, void* data);
std::vector<PHLWINDOWREF> bgWindows;
@@ -78,11 +78,11 @@
py = std::clamp(py, 0.f, 100.f);
if (px + sx > 100.f) {
- Debug::log(WARN, "[hyprwinwrap] size_x (%d) + pos_x (%d) > 100,
adjusting size_x to %d", sx, px, 100.f - px);
+ Log::logger->log(Log::WARN, "[hyprwinwrap] size_x (%d) + pos_x (%d) >
100, adjusting size_x to %d", sx, px, 100.f - px);
sx = 100.f - px;
}
if (py + sy > 100.f) {
- Debug::log(WARN, "[hyprwinwrap] size_y (%d) + pos_y (%d) > 100,
adjusting size_y to %d", sy, py, 100.f - py);
+ Log::logger->log(Log::WARN, "[hyprwinwrap] size_y (%d) + pos_y (%d) >
100, adjusting size_y to %d", sy, py, 100.f - py);
sy = 100.f - py;
}
@@ -104,13 +104,13 @@
pWindow->m_hidden = true;
g_pInputManager->refocus();
- Debug::log(LOG, "[hyprwinwrap] new window moved to bg {}", pWindow);
+ Log::logger->log(Log::DEBUG, "[hyprwinwrap] new window moved to bg {}",
pWindow);
}
void onCloseWindow(PHLWINDOW pWindow) {
std::erase_if(bgWindows, [pWindow](const auto& ref) { return ref.expired()
|| ref.lock() == pWindow; });
- Debug::log(LOG, "[hyprwinwrap] closed window {}", pWindow);
+ Log::logger->log(Log::DEBUG, "[hyprwinwrap] closed window {}", pWindow);
}
void onRenderStage(eRenderStage stage) {
@@ -132,8 +132,8 @@
}
}
-void onCommitSubsurface(CSubsurface* thisptr) {
- const auto PWINDOW = thisptr->m_wlSurface->getWindow();
+void onCommitSubsurface(Desktop::View::CSubsurface* thisptr) {
+ const auto PWINDOW =
Desktop::View::CWindow::fromView(thisptr->wlSurface()->view());
if (!PWINDOW || std::find_if(bgWindows.begin(), bgWindows.end(),
[PWINDOW](const auto& ref) { return ref.lock() == PWINDOW; }) ==
bgWindows.end()) {
((origCommitSubsurface)subsurfaceHook->m_original)(thisptr);
@@ -151,7 +151,7 @@
}
void onCommit(void* owner, void* data) {
- const auto PWINDOW = ((CWindow*)owner)->m_self.lock();
+ const auto PWINDOW = ((Desktop::View::CWindow*)owner)->m_self.lock();
if (std::find_if(bgWindows.begin(), bgWindows.end(), [PWINDOW](const auto&
ref) { return ref.lock() == PWINDOW; }) == bgWindows.end()) {
((origCommit)commitHook->m_original)(owner, data);
@@ -203,16 +203,12 @@
static auto P4 = HyprlandAPI::registerCallbackDynamic(PHANDLE,
"configReloaded", [&](void* self, SCallbackInfo& info, std::any data) {
onConfigReloaded(); });
// clang-format on
- auto fns = HyprlandAPI::findFunctionsByName(PHANDLE, "onCommit");
+ auto fns = HyprlandAPI::findFunctionsByName(PHANDLE,
"_ZN7Desktop4View11CSubsurface8onCommitEv");
if (fns.size() < 1)
throw std::runtime_error("hyprwinwrap: onCommit not found");
- for (auto& fn : fns) {
- if (!fn.demangled.contains("CSubsurface"))
- continue;
- subsurfaceHook = HyprlandAPI::createFunctionHook(PHANDLE, fn.address,
(void*)&onCommitSubsurface);
- }
+ subsurfaceHook = HyprlandAPI::createFunctionHook(PHANDLE, fns[0].address,
(void*)&onCommitSubsurface);
- fns = HyprlandAPI::findFunctionsByName(PHANDLE, "listener_commitWindow");
+ fns = HyprlandAPI::findFunctionsByName(PHANDLE,
"_ZN7Desktop4View7CWindow12commitWindowEv");
if (fns.size() < 1)
throw std::runtime_error("hyprwinwrap: listener_commitWindow not
found");
commitHook = HyprlandAPI::createFunctionHook(PHANDLE, fns[0].address,
(void*)&onCommit);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hyprland-plugins-0.52.0/xtra-dispatchers/main.cpp
new/hyprland-plugins-0.53.0/xtra-dispatchers/main.cpp
--- old/hyprland-plugins-0.52.0/xtra-dispatchers/main.cpp 2025-11-02
21:31:25.000000000 +0100
+++ new/hyprland-plugins-0.53.0/xtra-dispatchers/main.cpp 2025-12-29
16:03:28.000000000 +0100
@@ -7,7 +7,8 @@
#define private public
#include <hyprland/src/Compositor.hpp>
-#include <hyprland/src/desktop/Window.hpp>
+#include <hyprland/src/desktop/state/FocusState.hpp>
+#include <hyprland/src/desktop/view/Window.hpp>
#include <hyprland/src/config/ConfigManager.hpp>
#include <hyprland/src/render/Renderer.hpp>
#include <hyprland/src/managers/KeybindManager.hpp>
@@ -28,7 +29,10 @@
static SDispatchResult moveOrExec(std::string in) {
CVarList vars(in, 0, ',');
- if (!g_pCompositor->m_lastMonitor ||
!g_pCompositor->m_lastMonitor->m_activeWorkspace)
+ auto focusState = Desktop::focusState();
+ auto monitor = focusState->monitor();
+
+ if (!monitor || !monitor->m_activeWorkspace)
return SDispatchResult{.success = false, .error = "No active
workspace"};
const auto PWINDOW = g_pCompositor->getWindowByRegex(vars[0]);
@@ -36,11 +40,11 @@
if (!PWINDOW)
g_pKeybindManager->spawn(vars[1]);
else {
- if (g_pCompositor->m_lastMonitor->m_activeWorkspace !=
PWINDOW->m_workspace)
- g_pCompositor->moveWindowToWorkspaceSafe(PWINDOW,
g_pCompositor->m_lastMonitor->m_activeWorkspace);
+ if (monitor->m_activeWorkspace != PWINDOW->m_workspace)
+ g_pCompositor->moveWindowToWorkspaceSafe(PWINDOW,
monitor->m_activeWorkspace);
else
g_pCompositor->warpCursorTo(PWINDOW->middle());
- g_pCompositor->focusWindow(PWINDOW);
+ focusState->fullWindowFocus(PWINDOW);
}
return SDispatchResult{};
@@ -52,15 +56,18 @@
if (id == WORKSPACE_INVALID)
return SDispatchResult{.success = false, .error = "Failed to find
workspace"};
- if (!g_pCompositor->m_lastWindow ||
!g_pCompositor->m_lastWindow->m_workspace)
+ auto focusState = Desktop::focusState();
+ auto window = focusState->window();
+
+ if (!window || !window->m_workspace)
return SDispatchResult{.success = false, .error = "No valid last
window"};
auto pWorkspace = g_pCompositor->getWorkspaceByID(id);
if (!pWorkspace)
- pWorkspace = g_pCompositor->createNewWorkspace(id,
g_pCompositor->m_lastWindow->m_workspace->monitorID(), name, false);
+ pWorkspace = g_pCompositor->createNewWorkspace(id,
window->m_workspace->monitorID(), name, false);
for (const auto& w : g_pCompositor->m_windows) {
- if (w == g_pCompositor->m_lastWindow || w->m_workspace !=
g_pCompositor->m_lastWindow->m_workspace)
+ if (w == window || w->m_workspace != window->m_workspace)
continue;
g_pCompositor->moveWindowToWorkspaceSafe(w, pWorkspace);
@@ -75,24 +82,28 @@
if (id == WORKSPACE_INVALID)
return SDispatchResult{.success = false, .error = "Failed to find
workspace"};
- if (!g_pCompositor->m_lastMonitor ||
!g_pCompositor->m_lastMonitor->m_activeWorkspace)
+ auto focusState = Desktop::focusState();
+ auto monitor = focusState->monitor();
+ auto window = focusState->window();
+
+ if (!monitor || !monitor->m_activeWorkspace)
return SDispatchResult{.success = false, .error = "No active monitor"};
auto pWorkspace = g_pCompositor->getWorkspaceByID(id);
if (!pWorkspace)
return SDispatchResult{.success = false, .error = "Workspace isnt
open"};
- const auto PLASTWINDOW = g_pCompositor->m_lastWindow.lock();
+ const auto PLASTWINDOW = window;
for (const auto& w : g_pCompositor->m_windows) {
if (w->m_workspace != pWorkspace)
continue;
- g_pCompositor->moveWindowToWorkspaceSafe(w,
g_pCompositor->m_lastMonitor->m_activeWorkspace);
+ g_pCompositor->moveWindowToWorkspaceSafe(w,
monitor->m_activeWorkspace);
}
if (PLASTWINDOW) {
- g_pCompositor->focusWindow(PLASTWINDOW);
+ Desktop::focusState()->fullWindowFocus(PLASTWINDOW);
g_pCompositor->warpCursorTo(PLASTWINDOW->middle());
}
@@ -100,11 +111,15 @@
}
static SDispatchResult closeUnfocused(std::string in) {
- if (!g_pCompositor->m_lastMonitor)
+ auto focusState = Desktop::focusState();
+ auto monitor = focusState->monitor();
+ auto window = focusState->window();
+
+ if (!window)
return SDispatchResult{.success = false, .error = "No focused
monitor"};
for (const auto& w : g_pCompositor->m_windows) {
- if (w->m_workspace != g_pCompositor->m_lastMonitor->m_activeWorkspace
|| w->m_monitor != g_pCompositor->m_lastMonitor || !w->m_isMapped || w ==
g_pCompositor->m_lastWindow)
+ if (w->m_workspace != monitor->m_activeWorkspace || w->m_monitor !=
monitor || !w->m_isMapped || w == window)
continue;
g_pCompositor->closeWindow(w);