mirror of
https://github.com/hyprwm/hyprland-plugins.git
synced 2025-12-01 12:22:13 +00:00
all: chase hyprland for 40d8fa8 (#549)
* hyprexpo: Fixes for 40d8fa8 * csgo-vulkan-fix: Fixes for 40d8fa8 * hyprbars: Fixes for 40d8fa8 I am not entirely sure whether I was supposed to use fullWindowFocus() or rawWindowFocus() in hyprbars/barDeco.cpp at line 220 * xtra-dispatchers: Fixes for 40d8fa8 I am not entirely sure whether I was supposed to use fullWindowFocus() or rawWindowFocus() in xtra-dispatchers/main.cpp at lines 47 and 106 * hyprscrolling: Fixes for 40d8fa8 A lot of repeated code can be removed if it's safe to store `Desktop::focusState()`, `Desktop::focusState()->monitor()` and `Desktop::focusState()->window()` at the top of the `CScrollingLayout::findBestNeighbor` function. This change requires further review as I don't know if any of those change during this function so I didn't wanna introduce any unexpected issues. I am not entirely sure whether I was supposed to use fullWindowFocus() or rawWindowFocus() in xtra-dispatchers/main.cpp at lines 786, 789 and 1344
This commit is contained in:
@ -3,6 +3,7 @@
|
||||
#include <unistd.h>
|
||||
|
||||
#include <hyprland/src/Compositor.hpp>
|
||||
#include <hyprland/src/desktop/state/FocusState.hpp>
|
||||
#include <hyprland/src/desktop/Window.hpp>
|
||||
#include <hyprland/src/config/ConfigManager.hpp>
|
||||
#include <hyprland/src/xwayland/XSurface.hpp>
|
||||
@ -46,14 +47,17 @@ static const SAppConfig* getAppConfig(const std::string& appClass) {
|
||||
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);
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
#include "barDeco.hpp"
|
||||
|
||||
#include <hyprland/src/Compositor.hpp>
|
||||
#include <hyprland/src/desktop/state/FocusState.hpp>
|
||||
#include <hyprland/src/desktop/Window.hpp>
|
||||
#include <hyprland/src/helpers/MiscFunctions.hpp>
|
||||
#include <hyprland/src/managers/SeatManager.hpp>
|
||||
@ -90,11 +91,15 @@ bool CHyprBar::inputIsValid() {
|
||||
|
||||
const auto WINDOWATCURSOR = g_pCompositor->vectorToWindowUnified(g_pInputManager->getMouseCoordsInternal(), RESERVED_EXTENTS | INPUT_EXTENTS | 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 @@ void CHyprBar::onTouchMove(SCallbackInfo& info, ITouch::SMotionEvent e) {
|
||||
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 @@ void CHyprBar::handleDownEvent(SCallbackInfo& info, std::optional<ITouch::SDownE
|
||||
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();
|
||||
}
|
||||
|
||||
@ -211,8 +216,8 @@ void CHyprBar::handleDownEvent(SCallbackInfo& info, std::optional<ITouch::SDownE
|
||||
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::handleDownEvent(SCallbackInfo& info, std::optional<ITouch::SDownE
|
||||
}
|
||||
|
||||
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)
|
||||
@ -593,7 +598,7 @@ void CHyprBar::renderPass(PHLMONITOR pMonitor, const float& a) {
|
||||
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;
|
||||
|
||||
@ -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 @@ void CExpoGesture::begin(const ITrackpadGesture::STrackpadGestureBegin& e) {
|
||||
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);
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
#include <unistd.h>
|
||||
|
||||
#include <hyprland/src/Compositor.hpp>
|
||||
#include <hyprland/src/desktop/state/FocusState.hpp>
|
||||
#include <hyprland/src/desktop/Window.hpp>
|
||||
#include <hyprland/src/config/ConfigManager.hpp>
|
||||
#include <hyprland/src/desktop/DesktopTypes.hpp>
|
||||
@ -81,7 +82,7 @@ static SDispatchResult onExpoDispatcher(std::string arg) {
|
||||
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 @@ static SDispatchResult onExpoDispatcher(std::string arg) {
|
||||
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 {};
|
||||
}
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
#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>
|
||||
@ -29,7 +30,7 @@ COverview::~COverview() {
|
||||
}
|
||||
|
||||
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();
|
||||
|
||||
@ -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>
|
||||
@ -534,7 +535,7 @@ void CScrollingLayout::onWindowCreatedTiling(PHLWINDOW window, eDirection direct
|
||||
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);
|
||||
@ -630,7 +631,7 @@ void CScrollingLayout::onBeginDragWindow() {
|
||||
}
|
||||
|
||||
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))
|
||||
@ -782,10 +783,10 @@ void CScrollingLayout::fullscreenRequestForWindow(PHLWINDOW pWindow, const eFull
|
||||
|
||||
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 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin
|
||||
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,7 +863,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin
|
||||
|
||||
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) {
|
||||
DATA->centerCol(DATA->columns.back());
|
||||
@ -899,7 +900,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin
|
||||
|
||||
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 {};
|
||||
@ -968,13 +969,13 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin
|
||||
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 {};
|
||||
@ -985,7 +986,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin
|
||||
|
||||
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;
|
||||
@ -994,7 +995,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin
|
||||
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 {};
|
||||
@ -1007,7 +1008,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin
|
||||
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 {};
|
||||
@ -1015,7 +1016,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin
|
||||
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) {
|
||||
@ -1039,7 +1040,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin
|
||||
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 {};
|
||||
@ -1047,7 +1048,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin
|
||||
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) {
|
||||
@ -1066,7 +1067,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin
|
||||
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 {};
|
||||
@ -1109,7 +1110,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin
|
||||
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())
|
||||
@ -1193,7 +1194,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin
|
||||
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 {};
|
||||
@ -1210,7 +1211,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin
|
||||
if (ARGS.size() < 2)
|
||||
return {};
|
||||
|
||||
const auto WDATA = dataFor(g_pCompositor->m_lastWindow.lock());
|
||||
const auto WDATA = dataFor(Desktop::focusState()->window());
|
||||
if (!WDATA)
|
||||
return {};
|
||||
|
||||
@ -1245,7 +1246,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin
|
||||
if (ARGS.size() < 2)
|
||||
return {};
|
||||
|
||||
const auto WDATA = dataFor(g_pCompositor->m_lastWindow.lock());
|
||||
const auto WDATA = dataFor(Desktop::focusState()->window());
|
||||
if (!WDATA)
|
||||
return {};
|
||||
|
||||
@ -1257,7 +1258,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin
|
||||
if (!SOURCE_WS_DATA)
|
||||
return {};
|
||||
|
||||
const auto PMONITOR = g_pCompositor->m_lastWindow->m_monitor.lock();
|
||||
const auto PMONITOR = Desktop::focusState()->monitor();
|
||||
if (!PMONITOR)
|
||||
return {};
|
||||
|
||||
@ -1340,7 +1341,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin
|
||||
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");
|
||||
@ -1349,7 +1350,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin
|
||||
|
||||
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) {
|
||||
@ -1528,12 +1529,12 @@ SP<SScrollingWindowData> CScrollingLayout::dataFor(PHLWINDOW w) {
|
||||
}
|
||||
|
||||
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) {
|
||||
|
||||
@ -7,6 +7,7 @@
|
||||
|
||||
#define private public
|
||||
#include <hyprland/src/Compositor.hpp>
|
||||
#include <hyprland/src/desktop/state/FocusState.hpp>
|
||||
#include <hyprland/src/desktop/Window.hpp>
|
||||
#include <hyprland/src/config/ConfigManager.hpp>
|
||||
#include <hyprland/src/render/Renderer.hpp>
|
||||
@ -28,7 +29,10 @@ APICALL EXPORT std::string PLUGIN_API_VERSION() {
|
||||
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 @@ static SDispatchResult moveOrExec(std::string in) {
|
||||
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 @@ static SDispatchResult throwUnfocused(std::string in) {
|
||||
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 @@ static SDispatchResult bringAllFrom(std::string in) {
|
||||
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 bringAllFrom(std::string in) {
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
Reference in New Issue
Block a user