aboutsummaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/guiSQLiteStudio/mdiarea.cpp
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@unit193.net>2023-04-30 18:30:36 -0400
committerLibravatarUnit 193 <unit193@unit193.net>2023-04-30 18:30:36 -0400
commit3565aad630864ecdbe53fdaa501ea708555b3c7c (patch)
treec743e4ad0bad39ebdb2f514c7cc52d34a257ebbe /SQLiteStudio3/guiSQLiteStudio/mdiarea.cpp
parent1fdc150116cad39aae5c5da407c3312b47a59e3a (diff)
New upstream version 3.4.4+dfsg.upstream/3.4.4+dfsg
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio/mdiarea.cpp')
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/mdiarea.cpp46
1 files changed, 43 insertions, 3 deletions
diff --git a/SQLiteStudio3/guiSQLiteStudio/mdiarea.cpp b/SQLiteStudio3/guiSQLiteStudio/mdiarea.cpp
index 8f8521d..d73c506 100644
--- a/SQLiteStudio3/guiSQLiteStudio/mdiarea.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/mdiarea.cpp
@@ -42,7 +42,10 @@ MdiWindow *MdiArea::addSubWindow(MdiChild *mdiChild)
mdiWin->setWindowState(mdiWin->windowState()|Qt::WindowMaximized);
}
+ connect(mdiChild, SIGNAL(sessionValueChanged()), this, SIGNAL(sessionValueChanged()));
+
emit windowListChanged();
+ emit sessionValueChanged();
return mdiWin;
}
@@ -87,6 +90,16 @@ QList<MdiChild*> MdiArea::getMdiChilds() const
return childs;
}
+void MdiArea::enforceTaskSelectionAfterWindowClose(QAction* task)
+{
+ taskToSelectAfterWindowClose = task;
+}
+
+void MdiArea::enforceCurrentTaskSelectionAfterWindowClose()
+{
+ enforceTaskSelectionAfterWindowClose(getTaskBar()->getActiveTask());
+}
+
QList<MdiWindow*> MdiArea::getWindowsToTile() const
{
QList<MdiWindow*> list;
@@ -110,6 +123,7 @@ void MdiArea::taskActivated()
}
setActiveSubWindow(actionToWinMap[action]);
+ emit sessionValueChanged();
}
void MdiArea::windowDestroyed(MdiWindow* window)
@@ -121,7 +135,11 @@ void MdiArea::windowDestroyed(MdiWindow* window)
QAction* taskToSelect = nullptr;
if (!MAINWINDOW->isClosingApp())
{
- taskToSelect = taskBar->getNextTask(action);
+ taskToSelect = taskToSelectAfterWindowClose;
+ taskToSelectAfterWindowClose = nullptr;
+ if (!taskToSelect || action == taskToSelect || !taskBar->getTasks().contains(taskToSelect))
+ taskToSelect = taskBar->getNextTask(action);
+
if (!taskToSelect)
taskToSelect = taskBar->getPrevTask(action);
}
@@ -132,6 +150,7 @@ void MdiArea::windowDestroyed(MdiWindow* window)
delete action;
emit windowListChanged();
+ emit sessionValueChanged();
if (taskToSelect)
taskBar->setActiveTask(taskToSelect);
@@ -151,6 +170,7 @@ void MdiArea::windowActivated()
QAction* action = winToActionMap[subWin];
action->setChecked(true);
+ emit sessionValueChanged();
}
void MdiArea::tileHorizontally()
@@ -212,16 +232,36 @@ void MdiArea::closeAllButActive()
QList<QMdiSubWindow*> allButActive = subWindowList();
allButActive.removeOne(activeSubWindow());
- for (QMdiSubWindow *window : allButActive)
+ for (QMdiSubWindow*& window : allButActive)
window->close();
}
+void MdiArea::closeAllLeftToActive()
+{
+ QList<QAction*> tasks = taskBar->getTasks();
+ QAction* activeTask = taskBar->getActiveTask();
+ int activeIdx = tasks.indexOf(activeTask);
+
+ for (QAction*& task : tasks.mid(0, activeIdx))
+ actionToWinMap[task]->close();
+}
+
+void MdiArea::closeAllRightToActive()
+{
+ QList<QAction*> tasks = taskBar->getTasks();
+ QAction* activeTask = taskBar->getActiveTask();
+ int activeIdx = tasks.indexOf(activeTask);
+
+ for (QAction*& task : tasks.mid(activeIdx + 1))
+ actionToWinMap[task]->close();
+}
+
MdiWindow* MdiArea::getWindowByChild(MdiChild *child)
{
if (!child)
return nullptr;
- for (QMdiSubWindow *window : subWindowList())
+ for (QMdiSubWindow*& window : subWindowList())
if (window->widget() == child)
return dynamic_cast<MdiWindow*>(window);