Decouple updateLayout() from updateRootInfo()

It makes code more intuitive, updating X11 specific stuff should not be
needed to update the grid layout. Another advantage that this change
brings is that it should be possible to decouple X11 bits from the
virtual desktop manager completely, might be useful for running multiple
xwayland instances.
This commit is contained in:
Vlad Zahorodnii 2024-01-30 17:35:46 +02:00
parent 8b29f07dbe
commit fec39141b5

View file

@ -213,11 +213,6 @@ void VirtualDesktopManager::setRootInfo(NETRootInfo *info)
// Nothing will be connected to rootInfo // Nothing will be connected to rootInfo
if (m_rootInfo) { if (m_rootInfo) {
int columns = count() / m_rows;
if (count() % m_rows > 0) {
columns++;
}
m_rootInfo->setDesktopLayout(NET::OrientationHorizontal, columns, m_rows, NET::DesktopLayoutCornerTopLeft);
updateRootInfo(); updateRootInfo();
m_rootInfo->setCurrentDesktop(currentDesktop()->x11DesktopNumber()); m_rootInfo->setCurrentDesktop(currentDesktop()->x11DesktopNumber());
for (auto *vd : std::as_const(m_desktops)) { for (auto *vd : std::as_const(m_desktops)) {
@ -455,6 +450,7 @@ VirtualDesktop *VirtualDesktopManager::createVirtualDesktop(uint position, const
save(); save();
updateLayout();
updateRootInfo(); updateRootInfo();
Q_EMIT desktopAdded(vd); Q_EMIT desktopAdded(vd);
Q_EMIT countChanged(m_desktops.count() - 1, m_desktops.count()); Q_EMIT countChanged(m_desktops.count() - 1, m_desktops.count());
@ -491,6 +487,7 @@ void VirtualDesktopManager::removeVirtualDesktop(VirtualDesktop *desktop)
Q_EMIT currentChanged(desktop, m_current); Q_EMIT currentChanged(desktop, m_current);
} }
updateLayout();
updateRootInfo(); updateRootInfo();
save(); save();
@ -580,6 +577,7 @@ void VirtualDesktopManager::setCount(uint count)
m_current = m_desktops.at(0); m_current = m_desktops.at(0);
} }
updateLayout();
updateRootInfo(); updateRootInfo();
if (!s_loadingDesktopSettings) { if (!s_loadingDesktopSettings) {
@ -604,33 +602,20 @@ void VirtualDesktopManager::setRows(uint rows)
m_rows = rows; m_rows = rows;
int columns = count() / m_rows;
if (count() % m_rows > 0) {
columns++;
}
if (m_rootInfo) {
m_rootInfo->setDesktopLayout(NET::OrientationHorizontal, columns, m_rows, NET::DesktopLayoutCornerTopLeft);
}
updateLayout(); updateLayout();
updateRootInfo();
// rowsChanged will be emitted by setNETDesktopLayout called by updateLayout
} }
void VirtualDesktopManager::updateRootInfo() void VirtualDesktopManager::updateRootInfo()
{ {
if (!m_rootInfo) { if (m_rootInfo) {
// Make sure the layout is still valid const int n = count();
updateLayout(); m_rootInfo->setNumberOfDesktops(n);
return; NETPoint *viewports = new NETPoint[n];
m_rootInfo->setDesktopViewport(n, *viewports);
delete[] viewports;
m_rootInfo->setDesktopLayout(NET::OrientationHorizontal, m_grid.width(), m_grid.height(), NET::DesktopLayoutCornerTopLeft);
} }
const int n = count();
m_rootInfo->setNumberOfDesktops(n);
NETPoint *viewports = new NETPoint[n];
m_rootInfo->setDesktopViewport(n, *viewports);
delete[] viewports;
// Make sure the layout is still valid
updateLayout();
} }
void VirtualDesktopManager::updateLayout() void VirtualDesktopManager::updateLayout()
@ -643,7 +628,6 @@ void VirtualDesktopManager::updateLayout()
} }
m_grid.update(QSize(columns, m_rows), m_desktops); m_grid.update(QSize(columns, m_rows), m_desktops);
// TODO: why is there no call to m_rootInfo->setDesktopLayout?
Q_EMIT layoutChanged(columns, m_rows); Q_EMIT layoutChanged(columns, m_rows);
Q_EMIT rowsChanged(m_rows); Q_EMIT rowsChanged(m_rows);