diff --git a/changelog/next.md b/changelog/next.md index fd39091..850d452 100644 --- a/changelog/next.md +++ b/changelog/next.md @@ -1,5 +1,6 @@ ## Other Changes +- Added support for Qt 6.12 - Added support for Hyprland's new workspace address format. ## Bug Fixes diff --git a/src/services/pipewire/peak.hpp b/src/services/pipewire/peak.hpp index c4af3c2..3465852 100644 --- a/src/services/pipewire/peak.hpp +++ b/src/services/pipewire/peak.hpp @@ -8,18 +8,12 @@ #include #include "node.hpp" +#include "qml.hpp" namespace qs::service::pipewire { -class PwNodeIface; class PwPeakStream; -} // namespace qs::service::pipewire - -Q_DECLARE_OPAQUE_POINTER(qs::service::pipewire::PwNodeIface*); - -namespace qs::service::pipewire { - ///! Monitors peak levels of an audio node. /// Tracks volume peaks for a node across all its channels. /// diff --git a/src/wayland/hyprland/ipc/connection.cpp b/src/wayland/hyprland/ipc/connection.cpp index 942270a..45d25da 100644 --- a/src/wayland/hyprland/ipc/connection.cpp +++ b/src/wayland/hyprland/ipc/connection.cpp @@ -37,6 +37,18 @@ QS_LOGGING_CATEGORY(logHyprlandIpc, "quickshell.hyprland.ipc", QtWarningMsg); QS_LOGGING_CATEGORY(logHyprlandIpcEvents, "quickshell.hyprland.ipc.events", QtWarningMsg); } // namespace +QBindable HyprlandIpc::bindableFocusedMonitor() const { + return &this->bFocusedMonitor; +} + +QBindable HyprlandIpc::bindableFocusedWorkspace() const { + return &this->bFocusedWorkspace; +} + +QBindable HyprlandIpc::bindableActiveToplevel() const { + return &this->bActiveToplevel; +} + HyprlandIpc::HyprlandIpc() { auto his = qEnvironmentVariable("HYPRLAND_INSTANCE_SIGNATURE"); if (his.isEmpty()) { diff --git a/src/wayland/hyprland/ipc/connection.hpp b/src/wayland/hyprland/ipc/connection.hpp index 8d79184..c4264e9 100644 --- a/src/wayland/hyprland/ipc/connection.hpp +++ b/src/wayland/hyprland/ipc/connection.hpp @@ -25,9 +25,9 @@ class HyprlandToplevel; } // namespace qs::hyprland::ipc -Q_DECLARE_OPAQUE_POINTER(qs::hyprland::ipc::HyprlandWorkspace*); -Q_DECLARE_OPAQUE_POINTER(qs::hyprland::ipc::HyprlandMonitor*); -Q_DECLARE_OPAQUE_POINTER(qs::hyprland::ipc::HyprlandToplevel*); +Q_MOC_INCLUDE("hyprland_toplevel.hpp") +Q_MOC_INCLUDE("monitor.hpp") +Q_MOC_INCLUDE("workspace.hpp") namespace qs::hyprland::ipc { @@ -83,17 +83,9 @@ public: [[nodiscard]] QBindable bindableUsingLua() const { return &this->bUsingLua; } - [[nodiscard]] QBindable bindableFocusedMonitor() const { - return &this->bFocusedMonitor; - } - - [[nodiscard]] QBindable bindableFocusedWorkspace() const { - return &this->bFocusedWorkspace; - } - - [[nodiscard]] QBindable bindableActiveToplevel() const { - return &this->bActiveToplevel; - } + [[nodiscard]] QBindable bindableFocusedMonitor() const; + [[nodiscard]] QBindable bindableFocusedWorkspace() const; + [[nodiscard]] QBindable bindableActiveToplevel() const; void setFocusedMonitor(HyprlandMonitor* monitor); diff --git a/src/wayland/hyprland/ipc/hyprland_toplevel.cpp b/src/wayland/hyprland/ipc/hyprland_toplevel.cpp index e02dcdc..1c25dda 100644 --- a/src/wayland/hyprland/ipc/hyprland_toplevel.cpp +++ b/src/wayland/hyprland/ipc/hyprland_toplevel.cpp @@ -8,6 +8,7 @@ #include "../../toplevel/qml.hpp" #include "connection.hpp" +#include "monitor.hpp" #include "toplevel_mapping.hpp" #include "workspace.hpp" @@ -15,6 +16,10 @@ using namespace qs::wayland::toplevel; namespace qs::hyprland::ipc { +QBindable HyprlandToplevel::bindableWorkspace() { return &this->bWorkspace; } + +QBindable HyprlandToplevel::bindableMonitor() { return &this->bMonitor; } + HyprlandToplevel::HyprlandToplevel(HyprlandIpc* ipc): QObject(ipc), ipc(ipc) { this->bMonitor.setBinding([this]() { return this->bWorkspace ? this->bWorkspace->bindableMonitor().value() : nullptr; diff --git a/src/wayland/hyprland/ipc/hyprland_toplevel.hpp b/src/wayland/hyprland/ipc/hyprland_toplevel.hpp index 8e6aadb..fe12626 100644 --- a/src/wayland/hyprland/ipc/hyprland_toplevel.hpp +++ b/src/wayland/hyprland/ipc/hyprland_toplevel.hpp @@ -81,10 +81,10 @@ public: return &this->bLastIpcObject; }; - [[nodiscard]] QBindable bindableWorkspace() { return &this->bWorkspace; } + [[nodiscard]] QBindable bindableWorkspace(); void setWorkspace(HyprlandWorkspace* workspace); - [[nodiscard]] QBindable bindableMonitor() { return &this->bMonitor; } + [[nodiscard]] QBindable bindableMonitor(); signals: void addressChanged(); diff --git a/src/wayland/hyprland/ipc/monitor.cpp b/src/wayland/hyprland/ipc/monitor.cpp index 7519a92..083dfcc 100644 --- a/src/wayland/hyprland/ipc/monitor.cpp +++ b/src/wayland/hyprland/ipc/monitor.cpp @@ -13,6 +13,10 @@ namespace qs::hyprland::ipc { QVariantMap HyprlandMonitor::lastIpcObject() const { return this->mLastIpcObject; } +QBindable HyprlandMonitor::bindableActiveWorkspace() const { + return &this->bActiveWorkspace; +} + void HyprlandMonitor::updateInitial(qint32 id, const QString& name, const QString& description) { Qt::beginPropertyUpdateGroup(); this->bId = id; diff --git a/src/wayland/hyprland/ipc/monitor.hpp b/src/wayland/hyprland/ipc/monitor.hpp index b9ac434..d368adf 100644 --- a/src/wayland/hyprland/ipc/monitor.hpp +++ b/src/wayland/hyprland/ipc/monitor.hpp @@ -54,9 +54,7 @@ public: [[nodiscard]] QBindable bindableHeight() { return &this->bHeight; } [[nodiscard]] QBindable bindableScale() { return &this->bScale; } - [[nodiscard]] QBindable bindableActiveWorkspace() const { - return &this->bActiveWorkspace; - } + [[nodiscard]] QBindable bindableActiveWorkspace() const; [[nodiscard]] QBindable bindableFocused() const { return &this->bFocused; } diff --git a/src/wayland/hyprland/ipc/workspace.cpp b/src/wayland/hyprland/ipc/workspace.cpp index a527d82..6205c81 100644 --- a/src/wayland/hyprland/ipc/workspace.cpp +++ b/src/wayland/hyprland/ipc/workspace.cpp @@ -15,6 +15,8 @@ namespace qs::hyprland::ipc { QVariantMap HyprlandWorkspace::lastIpcObject() const { return this->mLastIpcObject; } +QBindable HyprlandWorkspace::bindableMonitor() { return &this->bMonitor; } + HyprlandWorkspace::HyprlandWorkspace(HyprlandIpc* ipc): QObject(ipc), ipc(ipc) { Qt::beginPropertyUpdateGroup(); diff --git a/src/wayland/hyprland/ipc/workspace.hpp b/src/wayland/hyprland/ipc/workspace.hpp index 86e0426..d36c6ad 100644 --- a/src/wayland/hyprland/ipc/workspace.hpp +++ b/src/wayland/hyprland/ipc/workspace.hpp @@ -73,7 +73,7 @@ public: [[nodiscard]] QBindable bindableFocused() { return &this->bFocused; } [[nodiscard]] QBindable bindableUrgent() { return &this->bUrgent; } [[nodiscard]] QBindable bindableHasFullscreen() { return &this->bHasFullscreen; } - [[nodiscard]] QBindable bindableMonitor() { return &this->bMonitor; } + [[nodiscard]] QBindable bindableMonitor(); [[nodiscard]] ObjectModel* toplevels() { return &this->mToplevels; } [[nodiscard]] QVariantMap lastIpcObject() const; diff --git a/src/x11/i3/ipc/controller.cpp b/src/x11/i3/ipc/controller.cpp index e4f32ff..dfb52b4 100644 --- a/src/x11/i3/ipc/controller.cpp +++ b/src/x11/i3/ipc/controller.cpp @@ -31,6 +31,14 @@ QS_LOGGING_CATEGORY(logI3Ipc, "quickshell.I3.ipc", QtWarningMsg); QS_LOGGING_CATEGORY(logI3IpcEvents, "quickshell.I3.ipc.events", QtWarningMsg); } // namespace +QBindable I3IpcController::bindableFocusedMonitor() const { + return &this->bFocusedMonitor; +} + +QBindable I3IpcController::bindableFocusedWorkspace() const { + return &this->bFocusedWorkspace; +} + I3IpcController::I3IpcController(): I3Ipc({"workspace", "output"}) { // bind focused workspace to focused monitor's active workspace this->bFocusedWorkspace.setBinding([this]() -> I3Workspace* { diff --git a/src/x11/i3/ipc/controller.hpp b/src/x11/i3/ipc/controller.hpp index 464f6f6..9e9d914 100644 --- a/src/x11/i3/ipc/controller.hpp +++ b/src/x11/i3/ipc/controller.hpp @@ -20,8 +20,8 @@ class I3Workspace; class I3Monitor; } // namespace qs::i3::ipc -Q_DECLARE_OPAQUE_POINTER(qs::i3::ipc::I3Workspace*); -Q_DECLARE_OPAQUE_POINTER(qs::i3::ipc::I3Monitor*); +Q_MOC_INCLUDE("monitor.hpp") +Q_MOC_INCLUDE("workspace.hpp") namespace qs::i3::ipc { @@ -43,13 +43,8 @@ public: I3Monitor* monitorFor(QuickshellScreenInfo* screen); - [[nodiscard]] QBindable bindableFocusedMonitor() const { - return &this->bFocusedMonitor; - }; - - [[nodiscard]] QBindable bindableFocusedWorkspace() const { - return &this->bFocusedWorkspace; - }; + [[nodiscard]] QBindable bindableFocusedMonitor() const; + [[nodiscard]] QBindable bindableFocusedWorkspace() const; [[nodiscard]] ObjectModel* monitors(); [[nodiscard]] ObjectModel* workspaces(); diff --git a/src/x11/i3/ipc/monitor.cpp b/src/x11/i3/ipc/monitor.cpp index 7afb68e..17178b7 100644 --- a/src/x11/i3/ipc/monitor.cpp +++ b/src/x11/i3/ipc/monitor.cpp @@ -12,6 +12,10 @@ namespace qs::i3::ipc { +QBindable I3Monitor::bindableActiveWorkspace() const { + return &this->bActiveWorkspace; +} + I3Monitor::I3Monitor(I3IpcController* ipc): QObject(ipc), ipc(ipc) { // clang-format off this->bFocused.setBinding([this]() { return this->ipc->bindableFocusedMonitor().value() == this; }); diff --git a/src/x11/i3/ipc/monitor.hpp b/src/x11/i3/ipc/monitor.hpp index 3630460..54e834e 100644 --- a/src/x11/i3/ipc/monitor.hpp +++ b/src/x11/i3/ipc/monitor.hpp @@ -55,9 +55,7 @@ public: [[nodiscard]] QBindable bindableScale() { return &this->bScale; } [[nodiscard]] QBindable bindableFocused() { return &this->bFocused; } - [[nodiscard]] QBindable bindableActiveWorkspace() const { - return &this->bActiveWorkspace; - } + [[nodiscard]] QBindable bindableActiveWorkspace() const; [[nodiscard]] QVariantMap lastIpcObject() const; diff --git a/src/x11/i3/ipc/workspace.cpp b/src/x11/i3/ipc/workspace.cpp index 530f0a2..b9d5968 100644 --- a/src/x11/i3/ipc/workspace.cpp +++ b/src/x11/i3/ipc/workspace.cpp @@ -12,6 +12,8 @@ namespace qs::i3::ipc { +QBindable I3Workspace::bindableMonitor() const { return &this->bMonitor; } + I3Workspace::I3Workspace(I3IpcController* ipc): QObject(ipc), ipc(ipc) { Qt::beginPropertyUpdateGroup(); diff --git a/src/x11/i3/ipc/workspace.hpp b/src/x11/i3/ipc/workspace.hpp index c08e926..6c802e4 100644 --- a/src/x11/i3/ipc/workspace.hpp +++ b/src/x11/i3/ipc/workspace.hpp @@ -57,7 +57,7 @@ public: [[nodiscard]] QBindable bindableActive() { return &this->bActive; } [[nodiscard]] QBindable bindableFocused() { return &this->bFocused; } [[nodiscard]] QBindable bindableUrgent() { return &this->bUrgent; } - [[nodiscard]] QBindable bindableMonitor() const { return &this->bMonitor; } + [[nodiscard]] QBindable bindableMonitor() const; [[nodiscard]] QVariantMap lastIpcObject() const; void updateFromObject(const QVariantMap& obj);