@@ -26,10 +26,27 @@ DockGroupModel::DockGroupModel(QAbstractItemModel *sourceModel, int role, QObjec
2626 Q_EMIT dataChanged (index (parent.row (), 0 ), index (parent.row (), 0 ), {TaskManager::WindowsRole});
2727 });
2828 connect (this , &QAbstractItemModel::rowsRemoved, this , [this ](const QModelIndex &parent, int first, int last) {
29- Q_UNUSED (first)
30- Q_UNUSED (last)
3129 if (!parent.isValid ())
3230 return ;
31+
32+ // Update m_currentActiveWindow when windows are removed
33+ int parentRow = parent.row ();
34+ if (m_currentActiveWindow.contains (parentRow)) {
35+ int currentActive = m_currentActiveWindow.value (parentRow);
36+ int windowCount = RoleGroupModel::rowCount (parent);
37+
38+ // Check if the current active window was removed
39+ if (currentActive >= first && currentActive <= last) {
40+ // Current active window was removed, reset to first window
41+ resetActiveWindow (parentRow);
42+ } else if (currentActive > last) {
43+ // Current active window is after the removed range, shift it back
44+ int removedCount = last - first + 1 ;
45+ m_currentActiveWindow[parentRow] = currentActive - removedCount;
46+ }
47+ // If currentActive < first, no change needed
48+ }
49+
3350 Q_EMIT dataChanged (index (parent.row (), 0 ), index (parent.row (), 0 ), {TaskManager::WindowsRole});
3451 });
3552
@@ -179,4 +196,18 @@ void DockGroupModel::requestNewInstance(const QModelIndex &index, const QString
179196 return ;
180197 }
181198}
199+
200+ void DockGroupModel::resetActiveWindow (int parentRow)
201+ {
202+ if (m_currentActiveWindow.contains (parentRow)) {
203+ int windowCount = RoleGroupModel::rowCount (index (parentRow, 0 ));
204+ if (windowCount > 0 ) {
205+ // Reset to first window
206+ m_currentActiveWindow[parentRow] = 0 ;
207+ } else {
208+ // No windows left, remove the tracking
209+ m_currentActiveWindow.remove (parentRow);
210+ }
211+ }
212+ }
182213}
0 commit comments