mirror of
https://github.com/hyprwm/Hyprland
synced 2024-11-22 15:25:58 +01:00
unify setting of the active monitor
This commit is contained in:
parent
f88feec02b
commit
e427d9f622
5 changed files with 28 additions and 33 deletions
|
@ -1874,7 +1874,7 @@ void CCompositor::warpCursorTo(const Vector2D& pos) {
|
||||||
|
|
||||||
const auto PMONITORNEW = getMonitorFromVector(pos);
|
const auto PMONITORNEW = getMonitorFromVector(pos);
|
||||||
if (PMONITORNEW != m_pLastMonitor)
|
if (PMONITORNEW != m_pLastMonitor)
|
||||||
m_pLastMonitor = PMONITORNEW;
|
setActiveMonitor(PMONITORNEW);
|
||||||
}
|
}
|
||||||
|
|
||||||
SLayerSurface* CCompositor::getLayerSurfaceFromWlr(wlr_layer_surface_v1* pLS) {
|
SLayerSurface* CCompositor::getLayerSurfaceFromWlr(wlr_layer_surface_v1* pLS) {
|
||||||
|
@ -1987,3 +1987,13 @@ CWorkspace* CCompositor::createNewWorkspace(const int& id, const int& monid, con
|
||||||
|
|
||||||
return PWORKSPACE;
|
return PWORKSPACE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CCompositor::setActiveMonitor(CMonitor* pMonitor) {
|
||||||
|
if (m_pLastMonitor == pMonitor)
|
||||||
|
return;
|
||||||
|
|
||||||
|
const auto PWORKSPACE = getWorkspaceByID(pMonitor->activeWorkspace);
|
||||||
|
|
||||||
|
g_pEventManager->postEvent(SHyprIPCEvent{"focusedmon", pMonitor->szName + "," + PWORKSPACE->m_szName});
|
||||||
|
m_pLastMonitor = pMonitor;
|
||||||
|
}
|
||||||
|
|
|
@ -169,6 +169,7 @@ public:
|
||||||
void forceReportSizesToWindowsOnWorkspace(const int&);
|
void forceReportSizesToWindowsOnWorkspace(const int&);
|
||||||
bool cursorOnReservedArea();
|
bool cursorOnReservedArea();
|
||||||
CWorkspace* createNewWorkspace(const int&, const int&, const std::string& name = ""); // will be deleted next frame if left empty and unfocused!
|
CWorkspace* createNewWorkspace(const int&, const int&, const std::string& name = ""); // will be deleted next frame if left empty and unfocused!
|
||||||
|
void setActiveMonitor(CMonitor*);
|
||||||
|
|
||||||
std::string explicitConfigPath;
|
std::string explicitConfigPath;
|
||||||
|
|
||||||
|
|
|
@ -130,16 +130,16 @@ void CMonitor::onConnect(bool noRule) {
|
||||||
forceFullFrames = 3; // force 3 full frames to make sure there is no blinking due to double-buffering.
|
forceFullFrames = 3; // force 3 full frames to make sure there is no blinking due to double-buffering.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
g_pEventManager->postEvent(SHyprIPCEvent{"monitoradded", szName});
|
||||||
|
|
||||||
if (!g_pCompositor->m_pLastMonitor) // set the last monitor if it isnt set yet
|
if (!g_pCompositor->m_pLastMonitor) // set the last monitor if it isnt set yet
|
||||||
g_pCompositor->m_pLastMonitor = this;
|
g_pCompositor->setActiveMonitor(this);
|
||||||
|
|
||||||
wlr_xcursor_manager_load(g_pCompositor->m_sWLRXCursorMgr, scale);
|
wlr_xcursor_manager_load(g_pCompositor->m_sWLRXCursorMgr, scale);
|
||||||
|
|
||||||
g_pHyprRenderer->arrangeLayersForMonitor(ID);
|
g_pHyprRenderer->arrangeLayersForMonitor(ID);
|
||||||
g_pLayoutManager->getCurrentLayout()->recalculateMonitor(ID);
|
g_pLayoutManager->getCurrentLayout()->recalculateMonitor(ID);
|
||||||
|
|
||||||
g_pEventManager->postEvent(SHyprIPCEvent{"monitoradded", szName});
|
|
||||||
|
|
||||||
// ensure VRR (will enable if necessary)
|
// ensure VRR (will enable if necessary)
|
||||||
g_pConfigManager->ensureVRR(this);
|
g_pConfigManager->ensureVRR(this);
|
||||||
}
|
}
|
||||||
|
@ -161,7 +161,7 @@ void CMonitor::onDisconnect() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_pCompositor->m_pLastMonitor == this)
|
if (g_pCompositor->m_pLastMonitor == this)
|
||||||
g_pCompositor->m_pLastMonitor = BACKUPMON;
|
g_pCompositor->setActiveMonitor(BACKUPMON);
|
||||||
|
|
||||||
// remove mirror
|
// remove mirror
|
||||||
if (pMirrorOf) {
|
if (pMirrorOf) {
|
||||||
|
@ -365,6 +365,6 @@ void CMonitor::setMirror(const std::string& mirrorOf) {
|
||||||
g_pCompositor->m_vMonitors.erase(std::remove_if(g_pCompositor->m_vMonitors.begin(), g_pCompositor->m_vMonitors.end(), [&](const auto& other) { return other.get() == this; }));
|
g_pCompositor->m_vMonitors.erase(std::remove_if(g_pCompositor->m_vMonitors.begin(), g_pCompositor->m_vMonitors.end(), [&](const auto& other) { return other.get() == this; }));
|
||||||
}
|
}
|
||||||
|
|
||||||
g_pCompositor->m_pLastMonitor = g_pCompositor->m_vMonitors.front().get();
|
g_pCompositor->setActiveMonitor(g_pCompositor->m_vMonitors.front().get());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -756,14 +756,8 @@ void CKeybindManager::changeworkspace(std::string args) {
|
||||||
|
|
||||||
// If the monitor is not the one our cursor's at, warp to it.
|
// If the monitor is not the one our cursor's at, warp to it.
|
||||||
const bool anotherMonitor = PMONITOR != g_pCompositor->m_pLastMonitor;
|
const bool anotherMonitor = PMONITOR != g_pCompositor->m_pLastMonitor;
|
||||||
if (anotherMonitor) {
|
if (anotherMonitor)
|
||||||
Vector2D middle = PMONITOR->vecPosition + PMONITOR->vecSize / 2.f;
|
g_pCompositor->warpCursorTo(PMONITOR->vecPosition + PMONITOR->vecSize / 2.f);
|
||||||
g_pCompositor->warpCursorTo(middle);
|
|
||||||
|
|
||||||
// event for focusedmon, as we changed.
|
|
||||||
g_pEventManager->postEvent(SHyprIPCEvent{"focusedmon", PMONITOR->szName + "," + PWORKSPACETOCHANGETO->m_szName});
|
|
||||||
g_pCompositor->m_pLastMonitor = PMONITOR;
|
|
||||||
}
|
|
||||||
|
|
||||||
// set active and deactivate all other in wlr
|
// set active and deactivate all other in wlr
|
||||||
g_pCompositor->deactivateAllWLRWorkspaces(PWORKSPACETOCHANGETO->m_pWlrHandle);
|
g_pCompositor->deactivateAllWLRWorkspaces(PWORKSPACETOCHANGETO->m_pWlrHandle);
|
||||||
|
@ -788,7 +782,7 @@ void CKeybindManager::changeworkspace(std::string args) {
|
||||||
g_pInputManager->refocus();
|
g_pInputManager->refocus();
|
||||||
|
|
||||||
// set the new monitor as the last (no warps would bug otherwise)
|
// set the new monitor as the last (no warps would bug otherwise)
|
||||||
g_pCompositor->m_pLastMonitor = g_pCompositor->getMonitorFromID(PWORKSPACETOCHANGETO->m_iMonitorID);
|
g_pCompositor->setActiveMonitor(g_pCompositor->getMonitorFromID(PWORKSPACETOCHANGETO->m_iMonitorID));
|
||||||
|
|
||||||
// mark the monitor dirty
|
// mark the monitor dirty
|
||||||
g_pHyprRenderer->damageMonitor(PMONITOR);
|
g_pHyprRenderer->damageMonitor(PMONITOR);
|
||||||
|
@ -812,7 +806,7 @@ void CKeybindManager::changeworkspace(std::string args) {
|
||||||
|
|
||||||
const auto PWORKSPACE = g_pCompositor->createNewWorkspace(workspaceToChangeTo, PMONITOR->ID, workspaceName);
|
const auto PWORKSPACE = g_pCompositor->createNewWorkspace(workspaceToChangeTo, PMONITOR->ID, workspaceName);
|
||||||
|
|
||||||
const bool ANOTHERMONITOR = PMONITOR == g_pCompositor->m_pLastMonitor;
|
const bool ANOTHERMONITOR = PMONITOR != g_pCompositor->m_pLastMonitor;
|
||||||
|
|
||||||
if (!isSwitchingToPrevious)
|
if (!isSwitchingToPrevious)
|
||||||
// Remember previous workspace.
|
// Remember previous workspace.
|
||||||
|
@ -846,21 +840,16 @@ void CKeybindManager::changeworkspace(std::string args) {
|
||||||
if (g_pCompositor->m_pLastMonitor != PMONITOR)
|
if (g_pCompositor->m_pLastMonitor != PMONITOR)
|
||||||
g_pCompositor->warpCursorTo(PMONITOR->vecPosition + PMONITOR->vecSize / 2.f);
|
g_pCompositor->warpCursorTo(PMONITOR->vecPosition + PMONITOR->vecSize / 2.f);
|
||||||
|
|
||||||
g_pCompositor->m_pLastMonitor = PMONITOR;
|
g_pEventManager->postEvent(SHyprIPCEvent{"workspace", PWORKSPACE->m_szName});
|
||||||
|
|
||||||
|
g_pCompositor->setActiveMonitor(PMONITOR);
|
||||||
|
|
||||||
// focus (clears the last)
|
// focus (clears the last)
|
||||||
g_pInputManager->refocus();
|
g_pInputManager->refocus();
|
||||||
|
|
||||||
// Events
|
// Events
|
||||||
g_pEventManager->postEvent(SHyprIPCEvent{"workspace", PWORKSPACE->m_szName});
|
if (ANOTHERMONITOR)
|
||||||
if (ANOTHERMONITOR) {
|
g_pCompositor->warpCursorTo(PMONITOR->vecPosition + PMONITOR->vecSize / 2.f);
|
||||||
Vector2D middle = PMONITOR->vecPosition + PMONITOR->vecSize / 2.f;
|
|
||||||
g_pCompositor->warpCursorTo(middle);
|
|
||||||
|
|
||||||
// event for focusedmon, as we changed.
|
|
||||||
g_pEventManager->postEvent(SHyprIPCEvent{"focusedmon", PMONITOR->szName + "," + PWORKSPACE->m_szName});
|
|
||||||
g_pCompositor->m_pLastMonitor = PMONITOR;
|
|
||||||
}
|
|
||||||
|
|
||||||
Debug::log(LOG, "Changed to workspace %i", workspaceToChangeTo);
|
Debug::log(LOG, "Changed to workspace %i", workspaceToChangeTo);
|
||||||
}
|
}
|
||||||
|
@ -1074,10 +1063,8 @@ void CKeybindManager::moveFocusTo(std::string args) {
|
||||||
if (PLASTWINDOW->m_iMonitorID != PWINDOWTOCHANGETO->m_iMonitorID) {
|
if (PLASTWINDOW->m_iMonitorID != PWINDOWTOCHANGETO->m_iMonitorID) {
|
||||||
// event
|
// event
|
||||||
const auto PNEWMON = g_pCompositor->getMonitorFromID(PWINDOWTOCHANGETO->m_iMonitorID);
|
const auto PNEWMON = g_pCompositor->getMonitorFromID(PWINDOWTOCHANGETO->m_iMonitorID);
|
||||||
const auto PNEWWS = g_pCompositor->getWorkspaceByID(PNEWMON->activeWorkspace);
|
|
||||||
g_pEventManager->postEvent(SHyprIPCEvent{"focusedmon", PNEWMON->szName + "," + PNEWWS->m_szName});
|
|
||||||
|
|
||||||
g_pCompositor->m_pLastMonitor = PNEWMON;
|
g_pCompositor->setActiveMonitor(PNEWMON);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -123,15 +123,12 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus) {
|
||||||
g_pLayoutManager->getCurrentLayout()->onMouseMove(getMouseCoordsInternal());
|
g_pLayoutManager->getCurrentLayout()->onMouseMove(getMouseCoordsInternal());
|
||||||
|
|
||||||
if (PMONITOR && PMONITOR != g_pCompositor->m_pLastMonitor) {
|
if (PMONITOR && PMONITOR != g_pCompositor->m_pLastMonitor) {
|
||||||
g_pCompositor->m_pLastMonitor = PMONITOR;
|
g_pCompositor->setActiveMonitor(PMONITOR);
|
||||||
|
|
||||||
// set active workspace and deactivate all other in wlr
|
// set active workspace and deactivate all other in wlr
|
||||||
const auto ACTIVEWORKSPACE = g_pCompositor->getWorkspaceByID(PMONITOR->activeWorkspace);
|
const auto ACTIVEWORKSPACE = g_pCompositor->getWorkspaceByID(PMONITOR->activeWorkspace);
|
||||||
g_pCompositor->deactivateAllWLRWorkspaces(ACTIVEWORKSPACE->m_pWlrHandle);
|
g_pCompositor->deactivateAllWLRWorkspaces(ACTIVEWORKSPACE->m_pWlrHandle);
|
||||||
ACTIVEWORKSPACE->setActive(true);
|
ACTIVEWORKSPACE->setActive(true);
|
||||||
|
|
||||||
// event
|
|
||||||
g_pEventManager->postEvent(SHyprIPCEvent{"focusedmon", PMONITOR->szName + "," + ACTIVEWORKSPACE->m_szName});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// overlay is above fullscreen
|
// overlay is above fullscreen
|
||||||
|
|
Loading…
Reference in a new issue