summaryrefslogtreecommitdiff
path: root/src/Compositor.cpp
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2022-03-20 11:14:24 +0100
committervaxerski <43317083+vaxerski@users.noreply.github.com>2022-03-20 11:14:24 +0100
commita4b026df2b7f94b2985d38b1ef6fb127782c1a27 (patch)
treec85f054baed6951fa096a358096fecc4e5c08a19 /src/Compositor.cpp
parenta4d69a15b34e54d8438a7242b151b1d31cbef46a (diff)
floating windows support
Diffstat (limited to 'src/Compositor.cpp')
-rw-r--r--src/Compositor.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/Compositor.cpp b/src/Compositor.cpp
index 559d4164..7ccc6ce8 100644
--- a/src/Compositor.cpp
+++ b/src/Compositor.cpp
@@ -204,6 +204,14 @@ CWindow* CCompositor::vectorToWindow(const Vector2D& pos) {
CWindow* CCompositor::vectorToWindowIdeal(const Vector2D& pos) {
const auto PMONITOR = getMonitorFromCursor();
+ // first loop over floating cuz they're above
+ // TODO: make an actual Z-system
+ for (auto& w : m_lWindows) {
+ wlr_box box = {w.m_vRealPosition.x, w.m_vRealPosition.y, w.m_vRealSize.x, w.m_vRealSize.y};
+ if (w.m_iMonitorID == PMONITOR->ID && wlr_box_contains_point(&box, m_sWLRCursor->x, m_sWLRCursor->y) && w.m_bIsFloating)
+ return &w;
+ }
+
for (auto& w : m_lWindows) {
wlr_box box = {w.m_vPosition.x, w.m_vPosition.y, w.m_vSize.x, w.m_vSize.y};
if (w.m_iMonitorID == PMONITOR->ID && wlr_box_contains_point(&box, pos.x, pos.y))
@@ -215,6 +223,15 @@ CWindow* CCompositor::vectorToWindowIdeal(const Vector2D& pos) {
CWindow* CCompositor::windowFromCursor() {
const auto PMONITOR = getMonitorFromCursor();
+
+ // first loop over floating cuz they're above
+ // TODO: make an actual Z-system
+ for (auto& w : m_lWindows) {
+ wlr_box box = {w.m_vRealPosition.x, w.m_vRealPosition.y, w.m_vRealSize.x, w.m_vRealSize.y};
+ if (w.m_iMonitorID == PMONITOR->ID && wlr_box_contains_point(&box, m_sWLRCursor->x, m_sWLRCursor->y) && w.m_bIsFloating)
+ return &w;
+ }
+
for (auto& w : m_lWindows) {
wlr_box box = {w.m_vPosition.x, w.m_vPosition.y, w.m_vSize.x, w.m_vSize.y};
if (w.m_iMonitorID == PMONITOR->ID && wlr_box_contains_point(&box, m_sWLRCursor->x, m_sWLRCursor->y))
@@ -224,6 +241,17 @@ CWindow* CCompositor::windowFromCursor() {
return nullptr;
}
+CWindow* CCompositor::windowFloatingFromCursor() {
+ const auto PMONITOR = getMonitorFromCursor();
+ for (auto& w : m_lWindows) {
+ wlr_box box = {w.m_vRealPosition.x, w.m_vRealPosition.y, w.m_vRealSize.x, w.m_vRealSize.y};
+ if (w.m_iMonitorID == PMONITOR->ID && wlr_box_contains_point(&box, m_sWLRCursor->x, m_sWLRCursor->y) && w.m_bIsFloating)
+ return &w;
+ }
+
+ return nullptr;
+}
+
SMonitor* CCompositor::getMonitorFromOutput(wlr_output* out) {
for (auto& m : m_lMonitors) {
if (m.output == out) {