Skip to content

Commit

Permalink
xdgshell: set predicted tiled windows to monitor res size pre-map
Browse files Browse the repository at this point in the history
Should improve #4022 although not exactly fix. Fixing would require more witchcraft
  • Loading branch information
vaxerski committed Dec 17, 2023
1 parent 9fd928e commit 763d5fa
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 2 deletions.
3 changes: 2 additions & 1 deletion src/Window.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,8 @@ class CWindow {
std::string m_szInitialClass = "";
int m_iWorkspaceID = -1;

bool m_bIsMapped = false;
bool m_bIsMapped = false;
bool m_bInitialCommitPassed = false;

bool m_bRequestsFloat = false;

Expand Down
37 changes: 36 additions & 1 deletion src/events/Windows.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -791,7 +791,42 @@ void Events::listener_ackConfigure(void* owner, void* data) {
void Events::listener_commitWindow(void* owner, void* data) {
CWindow* PWINDOW = (CWindow*)owner;

if (!PWINDOW->m_bIsMapped || PWINDOW->isHidden())
if (!PWINDOW->m_bIsMapped) {

// dupes shouldn't happen, but you never know, really.
if (PWINDOW->m_bInitialCommitPassed || PWINDOW->m_bIsX11)
return;

PWINDOW->m_bInitialCommitPassed = true;

// this is an initial commit of a surface
// in here, the surface will ask us what size we'd like it to be.
// wlroots by default doesn't send anything, so the app can use its preferred floating size
// if we predict it will be tiled, it's better to set it to the monitor size
// so it doesn't appear with the wrong size at the beginning.
// too big > too small, because will be clipped and won't look that bad.

auto willFloat = g_pXWaylandManager->shouldBeFloated(PWINDOW);
const auto WRULES = g_pConfigManager->getMatchingRules(PWINDOW);
for (auto& r : WRULES) {
if (r.szRule == "float") {
willFloat = true;
break;
} else if (r.szRule == "tile") {
willFloat = false;
break;
}
}

if (willFloat)
return;

g_pXWaylandManager->setWindowSize(PWINDOW, g_pCompositor->m_pLastMonitor ? g_pCompositor->m_pLastMonitor->vecSize : Vector2D{1920, 1080}, true);

return;
}

if (PWINDOW->isHidden())
return;

if (PWINDOW->m_bIsX11)
Expand Down

0 comments on commit 763d5fa

Please sign in to comment.