void KRunnerApp::switchUser() { const KService::Ptr service = KService::serviceByStorageId(QLatin1String("plasma-runner-sessions.desktop")); KPluginInfo info(service); if (info.isValid()) { SessList sessions; KDisplayManager dm; dm.localSessions(sessions); if (sessions.isEmpty()) { // no sessions to switch between, let's just start up another session directly Plasma::AbstractRunner *sessionRunner = m_runnerManager->runner(info.pluginName()); if (sessionRunner) { Plasma::QueryMatch switcher(sessionRunner); sessionRunner->run(*m_runnerManager->searchContext(), switcher); } } else { m_runnerManager->setSingleModeRunnerId(info.pluginName()); m_runnerManager->setSingleMode(true); m_interface->display(); //TODO: ugh, magic strings. See sessions/sessionrunner.cpp m_runnerManager->launchQuery(QLatin1String("SESSIONS"), info.pluginName()); } } }
void PanelKMenu::slotPopulateSessions() { int p = 0; KDisplayManager dm; sessionsMenu->clear(); if (KAuthorized::authorizeKAction("start_new_session") && (p = dm.numReserve()) >= 0) { if (KAuthorized::authorizeKAction("lock_screen")) sessionsMenu->insertItem(/*KIcon("lockfork"),*/ i18n("Lock Current && Start New Session"), 100 ); sessionsMenu->insertItem(KIcon("fork"), i18n("Start New Session"), 101 ); if (!p) { sessionsMenu->setItemEnabled( 100, false ); sessionsMenu->setItemEnabled( 101, false ); } sessionsMenu->addSeparator(); } SessList sess; if (dm.localSessions( sess )) for (SessList::ConstIterator it = sess.begin(); it != sess.end(); ++it) { int id = sessionsMenu->insertItem( KDisplayManager::sess2Str( *it ), (*it).vt ); if (!(*it).vt) sessionsMenu->setItemEnabled( id, false ); if ((*it).self) sessionsMenu->setItemChecked( id, true ); } }
SessionWidget::SessionWidget( QGraphicsItem * parent, Qt::WindowFlags wFlags) : QGraphicsWidget ( parent, wFlags) { this->setFocusPolicy(Qt::ClickFocus); m_signalMapper = new QSignalMapper(this); QGraphicsLinearLayout* mainLayout = new QGraphicsLinearLayout(Qt::Vertical); mainLayout->setSpacing(0); mainLayout->addStretch(); this->setLayout(mainLayout); connect( m_signalMapper, SIGNAL(mapped(int)), this, SLOT(slotSwitchSession(int))); Q_ASSERT(mainLayout->count() == 0); //Cache the icon pixmaps QSize iconSize = QSize(KIconLoader::SizeSmallMedium, KIconLoader::SizeSmallMedium); SessList sessions; KDisplayManager manager; manager.localSessions(sessions); QList<QGraphicsWidget*> entries; foreach(SessEnt session, sessions) { QPixmap pixmap; KUser user (session.user); if (!user.isValid()) continue; if (session.tty) continue; Plasma::IconWidget* entry = createButton(this); pixmap = getUserIcon(user); entry->setIcon(pixmap); QString username = getUsername(false, user); entry->setText(username); connect(entry, SIGNAL(clicked()), m_signalMapper, SLOT(map())); m_signalMapper->setMapping(entry, session.vt); if (session.self) entry->setEnabled(false); entries << entry; }