mirror of
https://github.com/hyprwm/Hypr.git
synced 2024-11-22 13:35:57 +01:00
unmap EWMH bars when fullscreen
This commit is contained in:
parent
6c02b3947a
commit
1abf627451
4 changed files with 42 additions and 1 deletions
|
@ -1,7 +1,7 @@
|
||||||
#include "window.hpp"
|
#include "window.hpp"
|
||||||
#include "windowManager.hpp"
|
#include "windowManager.hpp"
|
||||||
|
|
||||||
CWindow::CWindow() { this->setRealBorderColor(0); this->setEffectiveBorderColor(0); this->setFirstOpen(true); this->setConstructed(false); this->setTransient(false); this->setLastUpdatePosition(Vector2D(0,0)); this->setLastUpdateSize(Vector2D(0,0)); this->setDock(false); this->setUnderFullscreen(false); this->setIsSleeping(true); this->setFirstAnimFrame(true); this->setIsAnimated(false); this->setDead(false); this->setMasterChildIndex(0); this->setMaster(false); this->setCanKill(false); this->setImmovable(false); this->setNoInterventions(false); this->setDirty(true); this->setFullscreen(false); this->setIsFloating(false); this->setParentNodeID(0); this->setChildNodeAID(0); this->setChildNodeBID(0); this->setName(""); }
|
CWindow::CWindow() { this->setDockHidden(false); this->setRealBorderColor(0); this->setEffectiveBorderColor(0); this->setFirstOpen(true); this->setConstructed(false); this->setTransient(false); this->setLastUpdatePosition(Vector2D(0,0)); this->setLastUpdateSize(Vector2D(0,0)); this->setDock(false); this->setUnderFullscreen(false); this->setIsSleeping(true); this->setFirstAnimFrame(true); this->setIsAnimated(false); this->setDead(false); this->setMasterChildIndex(0); this->setMaster(false); this->setCanKill(false); this->setImmovable(false); this->setNoInterventions(false); this->setDirty(true); this->setFullscreen(false); this->setIsFloating(false); this->setParentNodeID(0); this->setChildNodeAID(0); this->setChildNodeBID(0); this->setName(""); }
|
||||||
CWindow::~CWindow() { }
|
CWindow::~CWindow() { }
|
||||||
|
|
||||||
void CWindow::generateNodeID() {
|
void CWindow::generateNodeID() {
|
||||||
|
|
|
@ -99,6 +99,7 @@ public:
|
||||||
// Docks
|
// Docks
|
||||||
EXPOSED_MEMBER(Dock, bool, b);
|
EXPOSED_MEMBER(Dock, bool, b);
|
||||||
EXPOSED_MEMBER(DockAlign, EDockAlign, e);
|
EXPOSED_MEMBER(DockAlign, EDockAlign, e);
|
||||||
|
EXPOSED_MEMBER(DockHidden, bool, b);
|
||||||
|
|
||||||
// Transient
|
// Transient
|
||||||
EXPOSED_MEMBER(Children, std::vector<int64_t>, vec);
|
EXPOSED_MEMBER(Children, std::vector<int64_t>, vec);
|
||||||
|
|
|
@ -217,6 +217,9 @@ bool CWindowManager::handleEvent() {
|
||||||
sanityCheckOnWorkspace(active);
|
sanityCheckOnWorkspace(active);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// hide ewmh bars if fullscreen
|
||||||
|
processBarHiding();
|
||||||
|
|
||||||
// remove unused workspaces
|
// remove unused workspaces
|
||||||
cleanupUnusedWorkspaces();
|
cleanupUnusedWorkspaces();
|
||||||
|
|
||||||
|
@ -334,6 +337,42 @@ void CWindowManager::recieveEvent() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CWindowManager::processBarHiding() {
|
||||||
|
for (auto& w : windows) {
|
||||||
|
if (!w.getDock())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// get the dock's monitor
|
||||||
|
const auto& MON = monitors[w.getMonitor()];
|
||||||
|
|
||||||
|
// get the dock's current workspace
|
||||||
|
auto *const WORK = getWorkspaceByID(activeWorkspaces[MON.ID]);
|
||||||
|
|
||||||
|
if (!WORK)
|
||||||
|
continue; // weird if happens
|
||||||
|
|
||||||
|
if (WORK->getHasFullscreenWindow() && !w.getDockHidden()) {
|
||||||
|
const auto COOKIE = xcb_unmap_window(DisplayConnection, w.getDrawable());
|
||||||
|
Events::ignoredEvents.push_back(COOKIE.sequence);
|
||||||
|
w.setDockHidden(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (!WORK->getHasFullscreenWindow() && w.getDockHidden()) {
|
||||||
|
const auto COOKIE = xcb_map_window(DisplayConnection, w.getDrawable());
|
||||||
|
Events::ignoredEvents.push_back(COOKIE.sequence);
|
||||||
|
|
||||||
|
// restore its params
|
||||||
|
// Values[0] = (int)w.getDefaultPosition().x;
|
||||||
|
// Values[1] = (int)w.getDefaultPosition().y;
|
||||||
|
// xcb_configure_window(DisplayConnection, w.getDrawable(), XCB_CONFIG_WINDOW_X | XCB_CONFIG_WINDOW_Y, Values);
|
||||||
|
// Values[0] = (int)w.getDefaultSize().x;
|
||||||
|
// Values[1] = (int)w.getDefaultSize().y;
|
||||||
|
// xcb_configure_window(DisplayConnection, w.getDrawable(), XCB_CONFIG_WINDOW_WIDTH | XCB_CONFIG_WINDOW_HEIGHT, Values);
|
||||||
|
w.setDockHidden(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CWindowManager::cleanupUnusedWorkspaces() {
|
void CWindowManager::cleanupUnusedWorkspaces() {
|
||||||
std::deque<CWorkspace> temp = workspaces;
|
std::deque<CWorkspace> temp = workspaces;
|
||||||
|
|
||||||
|
|
|
@ -168,6 +168,7 @@ private:
|
||||||
void dispatchQueuedWarp();
|
void dispatchQueuedWarp();
|
||||||
CWindow* getMasterForWorkspace(const int&);
|
CWindow* getMasterForWorkspace(const int&);
|
||||||
int getBarHeightForMonitor(const int&);
|
int getBarHeightForMonitor(const int&);
|
||||||
|
void processBarHiding();
|
||||||
};
|
};
|
||||||
|
|
||||||
inline std::unique_ptr<CWindowManager> g_pWindowManager = std::make_unique<CWindowManager>();
|
inline std::unique_ptr<CWindowManager> g_pWindowManager = std::make_unique<CWindowManager>();
|
||||||
|
|
Loading…
Reference in a new issue