Krita Source Code Documentation
Loading...
Searching...
No Matches
KisWindowLayoutResource::Private Struct Reference

Classes

struct  Window
 
struct  WindowGeometry
 

Public Member Functions

void closeUnneededWindows (QList< QPointer< KisMainWindow > > &currentWindows)
 
QList< QScreen * > getScreensInConsistentOrder ()
 
void migrateViewsFromClosingWindows (QVector< QPointer< KisMainWindow > > &closingWindows) const
 
void openNecessaryWindows (QList< QPointer< KisMainWindow > > &currentWindows)
 
 Private ()=default
 
 Private (const Private &rhs)=default
 
 Private (QVector< Window > windows)
 

Public Attributes

QUuid primaryWindow
 
bool primaryWorkspaceFollowsFocus {false}
 
bool showImageInAllWindows {false}
 
QVector< Windowwindows
 

Detailed Description

Definition at line 26 of file KisWindowLayoutResource.cpp.

Constructor & Destructor Documentation

◆ Private() [1/3]

KisWindowLayoutResource::Private::Private ( )
default

◆ Private() [2/3]

KisWindowLayoutResource::Private::Private ( const Private & rhs)
default

◆ Private() [3/3]

KisWindowLayoutResource::Private::Private ( QVector< Window > windows)
inlineexplicit

Definition at line 113 of file KisWindowLayoutResource.cpp.

114 : windows(std::move(windows))
115 {}

Member Function Documentation

◆ closeUnneededWindows()

void KisWindowLayoutResource::Private::closeUnneededWindows ( QList< QPointer< KisMainWindow > > & currentWindows)
inline

Definition at line 155 of file KisWindowLayoutResource.cpp.

155 {
156 QVector<QPointer<KisMainWindow>> windowsToClose;
157
158 Q_FOREACH(KisMainWindow *mainWindow, currentWindows) {
159 bool keep = false;
160 Q_FOREACH(const Window &window, windows) {
161 if (window.windowId == mainWindow->id()) {
162 keep = true;
163 break;
164 }
165 }
166
167 if (!keep) {
168 mainWindow->close();
169 }
170 }
171 }
Main window for Krita.
KisAction * close

References KisMainWindow::close, KisMainWindow::id, KisWindowLayoutResource::Private::Window::windowId, and windows.

◆ getScreensInConsistentOrder()

QList< QScreen * > KisWindowLayoutResource::Private::getScreensInConsistentOrder ( )
inline

Definition at line 208 of file KisWindowLayoutResource.cpp.

208 {
209 QList<QScreen*> screens = QGuiApplication::screens();
210
211 std::sort(screens.begin(), screens.end(), [](const QScreen *a, const QScreen *b) {
212 QRect aRect = a->geometry();
213 QRect bRect = b->geometry();
214
215 if (aRect.y() == bRect.y()) return aRect.x() < bRect.x();
216 return (aRect.y() < bRect.y());
217 });
218
219 return screens;
220 }

◆ migrateViewsFromClosingWindows()

void KisWindowLayoutResource::Private::migrateViewsFromClosingWindows ( QVector< QPointer< KisMainWindow > > & closingWindows) const
inline

Definition at line 173 of file KisWindowLayoutResource.cpp.

174 {
175 auto *kisPart = KisPart::instance();
176 KisMainWindow *migrationTarget = nullptr;
177
178 Q_FOREACH(KisMainWindow *mainWindow, kisPart->mainWindows()) {
179 if (!closingWindows.contains(mainWindow)) {
180 migrationTarget = mainWindow;
181 break;
182 }
183 }
184
185 if (!migrationTarget) {
186 qWarning() << "Problem: window layout with no windows would leave user with zero main windows.";
187 migrationTarget = closingWindows.takeLast();
188 migrationTarget->show();
189 }
190
191 QVector<KisDocument*> visibleDocuments;
192 Q_FOREACH(KisView *view, kisPart->views()) {
193 KisMainWindow *window = view->mainWindow();
194 if (!closingWindows.contains(window)) {
195 visibleDocuments.append(view->document());
196 }
197 }
198
199 Q_FOREACH(KisDocument *document, kisPart->documents()) {
200 if (!visibleDocuments.contains(document)) {
201 visibleDocuments.append(document);
202 migrationTarget->newView(document);
203 }
204 }
205 }
KisView * newView(QObject *document, QMdiSubWindow *subWindow=0)
static KisPart * instance()
Definition KisPart.cpp:131
KisMainWindow * mainWindow() const
Definition KisView.cpp:1085
QPointer< KisDocument > document
Definition KisView.cpp:121

References KisView::document, KisPart::instance(), KisView::mainWindow(), and KisMainWindow::newView().

◆ openNecessaryWindows()

void KisWindowLayoutResource::Private::openNecessaryWindows ( QList< QPointer< KisMainWindow > > & currentWindows)
inline

Definition at line 117 of file KisWindowLayoutResource.cpp.

117 {
118 auto *kisPart = KisPart::instance();
119
120 Q_FOREACH(const Window &window, windows) {
121 QPointer<KisMainWindow> mainWindow = kisPart->windowById(window.windowId);
122
123 if (mainWindow.isNull()) {
124 mainWindow = kisPart->createMainWindow(window.windowId);
125 currentWindows.append(mainWindow);
126 mainWindow->show();
127 }
128 }
129
130 QVector<QPointer<KisMainWindow>> windowsToMigrate;
131
132 Q_FOREACH(KisMainWindow *mainWindow, currentWindows) {
133 bool keep = false;
134 Q_FOREACH(const Window &window, windows) {
135 if (window.windowId == mainWindow->id()) {
136 keep = true;
137 break;
138 }
139 }
140
141 if (!keep) {
142 windowsToMigrate.append(mainWindow);
143
144 // Set the window hidden to prevent "show image in all windows" feature from opening new views on it
145 // while we migrate views onto the remaining windows
146 if (mainWindow->isVisible()) {
147 mainWindow->hide();
148 }
149 }
150 }
151
152 migrateViewsFromClosingWindows(windowsToMigrate);
153 }
void migrateViewsFromClosingWindows(QVector< QPointer< KisMainWindow > > &closingWindows) const

References KisMainWindow::id, KisPart::instance(), migrateViewsFromClosingWindows(), KisWindowLayoutResource::Private::Window::windowId, and windows.

Member Data Documentation

◆ primaryWindow

QUuid KisWindowLayoutResource::Private::primaryWindow

Definition at line 107 of file KisWindowLayoutResource.cpp.

◆ primaryWorkspaceFollowsFocus

bool KisWindowLayoutResource::Private::primaryWorkspaceFollowsFocus {false}

Definition at line 106 of file KisWindowLayoutResource.cpp.

106{false};

◆ showImageInAllWindows

bool KisWindowLayoutResource::Private::showImageInAllWindows {false}

Definition at line 105 of file KisWindowLayoutResource.cpp.

105{false};

◆ windows

QVector<Window> KisWindowLayoutResource::Private::windows

Definition at line 104 of file KisWindowLayoutResource.cpp.


The documentation for this struct was generated from the following file: