22PlacementTracker::WindowData PlacementTracker::dataForWindow(
Window *window)
const
48 saveQuickTile(window);
51 saveFullscreen(window);
54 saveInteractionCounter(window);
56 WindowData data = dataForWindow(window);
57 m_data[m_currentKey][window] = data;
58 m_savedWindows.push_back(window);
63 if (m_savedWindows.contains(window)) {
64 disconnect(window,
nullptr,
this,
nullptr);
65 for (
auto &dataMap : m_data) {
66 dataMap.remove(window);
68 m_savedWindows.removeOne(window);
74 if (key == m_currentKey) {
77 auto &dataMap = m_data[key];
78 auto &oldDataMap = m_data[m_currentKey];
79 const auto outputs = m_workspace->
outputs();
82 for (
const auto window : std::as_const(m_savedWindows)) {
83 const auto it = dataMap.find(window);
84 if (it != dataMap.end()) {
85 const WindowData &newData = it.value();
95 if (
const auto it = m_lastRestoreData.find(window); it != m_lastRestoreData.end()) {
105 if (
const auto oldData = oldDataMap.find(window); oldData != oldDataMap.end()) {
106 restore = std::none_of(outputs.begin(), outputs.end(), [&oldData](
const auto output) {
107 return output->uuid() == oldData->outputUuid;
115 if (newData.quickTile || newData.maximize) {
120 if (newData.fullscreen) {
121 window->
moveResize(newData.fullscreenGeometryRestore);
124 if (newData.quickTile || newData.maximize || newData.fullscreen) {
126 const auto outputIt = std::find_if(outputs.begin(), outputs.end(), [&newData](
const auto output) {
127 return output->uuid() == newData.outputUuid;
129 if (outputIt != outputs.end()) {
135 m_lastRestoreData[window] = dataForWindow(window);
139 dataMap[window] = dataForWindow(window);
150void PlacementTracker::saveGeometry(
Window *window)
152 if (m_inhibitCount == 0) {
153 auto &data = m_data[m_currentKey][window];
159void PlacementTracker::saveInteractionCounter(
Window *window)
161 if (m_inhibitCount == 0) {
162 m_data[m_currentKey][window].interactiveMoveResizeCount = window->interactiveMoveResizeCount();
166void PlacementTracker::saveMaximize(
Window *window)
168 if (m_inhibitCount == 0) {
169 auto &data = m_data[m_currentKey][window];
170 data.maximize = window->maximizeMode();
171 data.geometryRestore = window->geometryRestore();
175void PlacementTracker::saveQuickTile(
Window *window)
177 if (m_inhibitCount == 0) {
178 auto &data = m_data[m_currentKey][window];
179 data.quickTile = window->quickTileMode();
180 data.geometryRestore = window->geometryRestore();
184void PlacementTracker::saveFullscreen(
Window *window)
186 if (m_inhibitCount == 0) {
187 auto &data = m_data[m_currentKey][window];
188 data.fullscreen = window->isFullScreen();
189 data.fullscreenGeometryRestore = window->fullscreenGeometryRestore();
200 Q_ASSERT(m_inhibitCount > 0);
205#include "moc_placementtracker.cpp"
void remove(Window *window)
void restore(const QString &key)
void init(const QString &key)
PlacementTracker(Workspace *workspace)
void moveResize(const QRectF &rect)
QRectF fullscreenGeometryRestore() const
virtual void setFullScreen(bool set)
virtual bool isFullScreen() const
uint32_t interactiveMoveResizeCount() const
void setQuickTileMode(QuickTileMode mode, bool keyboard=false)
virtual bool isUnmanaged() const
void interactiveMoveResizeFinished()
void sendToOutput(Output *output)
bool isAppletPopup() const
virtual MaximizeMode requestedMaximizeMode() const
QuickTileMode quickTileMode() const
void quickTileModeChanged()
Output * moveResizeOutput() const
QRectF moveResizeGeometry() const
QRectF geometryRestore() const
void frameGeometryChanged(const QRectF &oldGeometry)
bool isSpecialWindow() const
Q_INVOKABLE void setMaximize(bool vertically, bool horizontally)
QList< Output * > outputs() const
@ MaximizeVertical
The window is maximized vertically.