Initial implementation of session management in Konsole.

Patch from Stefan Becker <stefan.becker@nokia.com>

Thank-you very much Stefan!

CCBUG: 152761


svn path=/trunk/KDE/kdebase/apps/konsole/; revision=867323
This commit is contained in:
Robert Knight
2008-10-03 10:38:50 +00:00
parent 4023b86754
commit ef3e43e11d
14 changed files with 584 additions and 204 deletions

View File

@@ -866,9 +866,78 @@ QList<ViewProperties*> ViewManager::viewProperties() const
return list;
}
void ViewManager::saveSessions(KConfigGroup& group)
{
// find all unique session restore IDs
QList<int> ids;
QHash<Session*,int> unique;
// first: sessions in the active container, preserving the order
ViewContainer* container = _viewSplitter->activeContainer();
Q_ASSERT(container);
TerminalDisplay* activeview = dynamic_cast<TerminalDisplay*>(container->activeView());
QListIterator<QWidget*> viewIter(container->views());
int tab = 1;
while (viewIter.hasNext())
{
TerminalDisplay *view = dynamic_cast<TerminalDisplay*>(viewIter.next());
Q_ASSERT(view);
Session *session = _sessionMap[view];
ids << SessionManager::instance()->getRestoreId(session);
if (view == activeview) group.writeEntry("Active", tab);
unique.insert(session, 1);
tab++;
}
// second: all other sessions, in random order
// we don't want to have sessions restored that are not connected
foreach(Session* session, _sessionMap)
if (!unique.contains(session))
{
ids << SessionManager::instance()->getRestoreId(session);
unique.insert(session, 1);
}
group.writeEntry("Sessions", ids);
}
void ViewManager::restoreSessions(const KConfigGroup& group)
{
QList<int> ids = group.readEntry("Sessions", QList<int>());
int activeTab = group.readEntry("Active", 0);
TerminalDisplay *display = 0;
int tab = 1;
foreach(int id, ids)
{
Session *session = SessionManager::instance()->idToSession(id);
createView(session);
if (!session->isRunning())
session->run();
if (tab++ == activeTab)
display = dynamic_cast<TerminalDisplay*>(activeView());
}
if (display)
{
_viewSplitter->activeContainer()->setActiveView(display);
display->setFocus(Qt::OtherFocusReason);
}
}
uint qHash(QPointer<TerminalDisplay> display)
{
return qHash((TerminalDisplay*)display);
}
#include "ViewManager.moc"
/*
Local Variables:
mode: c++
c-file-style: "stroustrup"
indent-tabs-mode: nil
tab-width: 4
End:
*/