bool CfgWm::saveAndConfirm() { KConfig cfg("ksmserverrc", KConfig::NoGlobals); KConfigGroup c( &cfg, "General"); c.writeEntry("windowManager", currentWm()); emit changed(false); if( oldwm == currentWm()) return true; QString restartArgument = currentWmData().restartArgument; if( restartArgument.isEmpty()) { KMessageBox::information( this, i18n( "The new window manager will be used when KDE is started the next time." ), i18n( "Window Manager Change" ), "windowmanagerchange" ); oldwm = currentWm(); return true; } else { if( tryWmLaunch()) { oldwm = currentWm(); cfg.sync(); QDBusInterface ksmserver("org.kde.ksmserver", "/KSMServer" ); ksmserver.call( QDBus::NoBlock, "wmChanged" ); KMessageBox::information( window(), i18n( "A new window manager is running.\n" "It is still recommended to restart this KDE session to make sure " "all running applications adjust for this change." ), i18n( "Window Manager Replaced" ), "restartafterwmchange" ); return true; } else { // revert config emit changed(true); c.writeEntry("windowManager", oldwm); if( oldwm == KWIN_BIN ) { kwinRB->setChecked( true ); wmCombo->setEnabled( false ); } else { differentRB->setChecked( true ); wmCombo->setEnabled( true ); for( QHash< QString, WmData >::ConstIterator it = wms.constBegin(); it != wms.constEnd(); ++it ) { if( (*it).internalName == oldwm ) // make it selected wmCombo->setCurrentIndex( wmCombo->findText( it.key())); } } return false; } } }
void requestShutDown(ShutdownConfirm confirm, ShutdownType sdtype, ShutdownMode sdmode) { #if HAVE_X11 /* use ksmserver's dcop interface if necessary */ if ( confirm == ShutdownConfirmYes || sdtype != ShutdownTypeDefault || sdmode != ShutdownModeDefault ) { org::kde::KSMServerInterface ksmserver("org.kde.ksmserver", "/KSMServer", QDBusConnection::sessionBus()); ksmserver.logout((int)confirm, (int)sdtype, (int)sdmode); return; } if( helper == NULL ) { helper = new KRequestShutdownHelper(); qAddPostRoutine(cleanup_sm); } helper->requestShutdown( confirm ); #endif }
bool canShutDown( ShutdownConfirm confirm, ShutdownType sdtype, ShutdownMode sdmode ) { #if HAVE_X11 if ( confirm == ShutdownConfirmYes || sdtype != ShutdownTypeDefault || sdmode != ShutdownModeDefault ) { org::kde::KSMServerInterface ksmserver("org.kde.ksmserver", "/KSMServer", QDBusConnection::sessionBus()); QDBusReply<bool> reply = ksmserver.canShutdown(); if (!reply.isValid()) { return false; } return reply; } return true; #else return false; #endif }
void PanelKMenu::slotSaveSession() { QDBusInterface ksmserver("org.kde.ksmserver", "/ksmserver", "org.kde.KSMServerInterface"); ksmserver.call("saveCurrentSession"); }
void PanelKMenu::initialize() { // kDebug(1210) << "PanelKMenu::initialize()"; updateRecent(); if (initialized()) { return; } if (loadSidePixmap()) { // in case we've been through here before, let's disconnect disconnect(KGlobalSettings::self(), SIGNAL(kdisplayPaletteChanged()), this, SLOT(paletteChanged())); connect(KGlobalSettings::self(), SIGNAL(kdisplayPaletteChanged()), this, SLOT(paletteChanged())); } else { sidePixmap = sideTilePixmap = QPixmap(); } // add services PanelServiceMenu::initialize(); /* FIXME: no more insertTitle! now what? if (KickerSettings::showMenuTitles()) { int id; id = insertTitle(i18n("All Applications"), -1, 0); setItemEnabled( id, false ); id = insertTitle(i18n("Actions"), -1 , -1); setItemEnabled( id, false ); } */ // create recent menu section createRecentMenuItems(); bool need_separator = false; // insert bookmarks if (KickerSettings::useBookmarks() && KAuthorized::authorizeKAction("bookmarks")) { // Need to create a new popup each time, it's deleted by subMenus.clear() KMenu * bookmarkParent = new KMenu(this); bookmarkParent->setObjectName("bookmarks" ); delete bookmarkMenu; // can't reuse old one, the popup has been deleted bookmarkMenu = new KBookmarkMenu( KBookmarkManager::userBookmarksManager(), 0, bookmarkParent, actionCollection ); insertItem(Plasma::menuIconSet("bookmark"), i18n("Bookmarks"), bookmarkParent); subMenus.append(bookmarkParent); need_separator = true; } // insert quickbrowser if (KickerSettings::useBrowser()) { PanelQuickBrowser *browserMnu = new PanelQuickBrowser(this); browserMnu->initialize(); insertItem(Plasma::menuIconSet("kdisknav"), i18n("Quick Browser"), Plasma::reduceMenu(browserMnu)); subMenus.append(browserMnu); need_separator = true; } // insert dynamic menus QStringList menu_ext = KickerSettings::menuExtensions(); if (!menu_ext.isEmpty()) { for (QStringList::ConstIterator it=menu_ext.begin(); it!=menu_ext.end(); ++it) { MenuInfo info(*it); if (!info.isValid()) continue; KPanelMenu *menu = info.load(); if (menu) { insertItem(Plasma::menuIconSet(info.icon()), info.name(), menu); dynamicSubMenus.append(menu); need_separator = true; } } } if (need_separator) addSeparator(); // run command if (KAuthorized::authorizeKAction("run_command")) { insertItem(Plasma::menuIconSet("system-run"), i18n("Run Command..."), this, SLOT( slotRunCommand())); addSeparator(); } if (KDisplayManager().isSwitchable() && KAuthorized::authorizeKAction("switch_user")) { sessionsMenu = new QMenu( this ); insertItem(Plasma::menuIconSet("switchuser"), i18n("Switch User"), sessionsMenu); connect( sessionsMenu, SIGNAL(aboutToShow()), SLOT(slotPopulateSessions()) ); connect( sessionsMenu, SIGNAL(activated(int)), SLOT(slotSessionActivated(int)) ); } /* If the user configured ksmserver to */ KConfig ksmserver("ksmserverrc", KConfig::CascadeConfig); if (ksmserver.group("General").readEntry( "loginMode" ) == "restoreSavedSession") { insertItem(Plasma::menuIconSet("document-save"), i18n("Save Session"), this, SLOT(slotSaveSession())); } if (KAuthorized::authorizeKAction("lock_screen")) { insertItem(Plasma::menuIconSet("system-lock-screen"), i18n("Lock Session"), this, SLOT(slotLock())); } if (KAuthorized::authorizeKAction("logout")) { insertItem(Plasma::menuIconSet("application-exit"), i18n("Log Out..."), this, SLOT(slotLogout())); } #if 0 // WABA: tear off handles don't work together with dynamically updated // menus. We can't update the menu while torn off, and we don't know // when it is torn off. if (KGlobalSettings::insertTearOffHandle()) insertTearOffHandle(); #endif setInitialized(true); }
void MenuActions::initialize() { bool need_separator = false; QStringList menu_ext = KickerSettings::menuExtensions(); if (!menu_ext.isEmpty()) { if (!menu_ext.grep("prefmenu.desktop").isEmpty()) { //moves the Configuration menu to the top because that's where I //think it belongs. menu_ext.remove("prefmenu.desktop"); insertDynamicMenu("prefmenu.desktop"); insertSeparator(); } if (!menu_ext.grep("remotemenu.desktop").isEmpty()) { //removed here because we use it in menu_desktop.cpp menu_ext.remove("remotemenu.desktop"); } for (QStringList::ConstIterator it=menu_ext.begin(); it!=menu_ext.end(); ++it) { insertDynamicMenu(*it); need_separator = true; } } if (need_separator) insertSeparator(); // insert client menus, if any if (clients.count() > 0) { QIntDictIterator<MenuClient> it(clients); while (it) { if (it.current()->text.at(0) != '.') insertItem( it.current()->icon, it.current()->text, it.current(), it.currentKey() ); ++it; } insertSeparator(); } if (DM().isSwitchable()) { if (!need_separator) insertSeparator(); m_sessionsMenu = new QPopupMenu(this); if (KickerSettings::menuEntryHeight() > -1) { QString faceIcon = QString("%1/.face.icon").arg(QDir::homeDirPath()); if (QFile::exists(faceIcon) == true) { insertItem(SmallIconSet(faceIcon, KickerSettings::menuEntryHeight()), i18n("Switch User"), m_sessionsMenu); } else { insertItem(SmallIconSet("switchuser", KickerSettings::menuEntryHeight()), i18n("Switch User"), m_sessionsMenu); } } else { insertItem(i18n("Switch User"), m_sessionsMenu); } connect( m_sessionsMenu, SIGNAL(aboutToShow()), SLOT(slotPopulateSessions()) ); connect( m_sessionsMenu, SIGNAL(activated(int)), SLOT(slotSessionActivated(int)) ); } insertSeparator(); KConfig ksmserver("ksmserverrc", false, false); ksmserver.setGroup("General"); if (ksmserver.readEntry("loginMode") == "restoreSavedSession") { if (KickerSettings::menuEntryHeight() > -1) { insertItem(SmallIconSet("filesave", KickerSettings::menuEntryHeight()), i18n("Save Session"), this, SLOT(slotSaveSession()) ); } else { insertItem(i18n("Save Session"), this, SLOT(slotSaveSession())); } } if (kapp->authorize("lock_session")) { if (KickerSettings::menuEntryHeight() > -1) { insertItem(SmallIconSet("lock", KickerSettings::menuEntryHeight()), i18n("Lock Session"), this, SLOT(slotLock()) ); } else { insertItem(i18n("Lock Session"), this, SLOT(slotLock())); } } if (kapp->authorize("logout")) { if (KickerSettings::menuEntryHeight() > -1) { insertItem(SmallIconSet("exit", KickerSettings::menuEntryHeight()), i18n("Log Out..."), this, SLOT(slotLogout()) ); } else { insertItem(i18n("Log Out..."), this, SLOT(slotLogout())); } } setInitialized( true ); }
void PanelKMenu::initialize() { // kdDebug(1210) << "PanelKMenu::initialize()" << endl; updateRecent(); if (initialized()) { return; } if (loadSidePixmap()) { // in case we've been through here before, let's disconnect disconnect(kapp, SIGNAL(kdisplayPaletteChanged()), this, SLOT(paletteChanged())); connect(kapp, SIGNAL(kdisplayPaletteChanged()), this, SLOT(paletteChanged())); } else { sidePixmap = sideTilePixmap = QPixmap(); } // add services PanelServiceMenu::initialize(); if (KickerSettings::showMenuTitles()) { int id; id = insertItem(new PopupMenuTitle(i18n("All Applications"), font()), -1 /* id */, 0); setItemEnabled( id, false ); id = insertItem(new PopupMenuTitle(i18n("Actions"), font()), -1 /* id */, -1); setItemEnabled( id, false ); } // create recent menu section createRecentMenuItems(); bool need_separator = false; // insert bookmarks if (KickerSettings::useBookmarks() && kapp->authorizeKAction("bookmarks")) { // Need to create a new popup each time, it's deleted by subMenus.clear() KPopupMenu * bookmarkParent = new KPopupMenu( this, "bookmarks" ); if(!bookmarkOwner) bookmarkOwner = new KBookmarkOwner; delete bookmarkMenu; // can't reuse old one, the popup has been deleted bookmarkMenu = new KBookmarkMenu( KonqBookmarkManager::self(), bookmarkOwner, bookmarkParent, actionCollection, true, false ); insertItem(KickerLib::menuIconSet("bookmark"), i18n("Bookmarks"), bookmarkParent); subMenus.append(bookmarkParent); need_separator = true; } // insert quickbrowser if (KickerSettings::useBrowser()) { PanelQuickBrowser *browserMnu = new PanelQuickBrowser(this); browserMnu->initialize(); insertItem(KickerLib::menuIconSet("kdisknav"), i18n("Quick Browser"), KickerLib::reduceMenu(browserMnu)); subMenus.append(browserMnu); need_separator = true; } // insert dynamic menus QStringList menu_ext = KickerSettings::menuExtensions(); if (!menu_ext.isEmpty()) { for (QStringList::ConstIterator it=menu_ext.begin(); it!=menu_ext.end(); ++it) { MenuInfo info(*it); if (!info.isValid()) continue; KPanelMenu *menu = info.load(); if (menu) { insertItem(KickerLib::menuIconSet(info.icon()), info.name(), menu); dynamicSubMenus.append(menu); need_separator = true; } } } if (need_separator) insertSeparator(); // insert client menus, if any if (clients.count() > 0) { QIntDictIterator<KickerClientMenu> it(clients); while (it){ if (it.current()->text.at(0) != '.') insertItem( it.current()->icon, it.current()->text, it.current(), it.currentKey() ); ++it; } insertSeparator(); } // run command if (kapp->authorize("run_command")) { insertItem(KickerLib::menuIconSet("run"), i18n("Run Command..."), this, SLOT( slotRunCommand())); insertSeparator(); } if (DM().isSwitchable() && kapp->authorize("switch_user")) { sessionsMenu = new QPopupMenu( this ); insertItem(KickerLib::menuIconSet("switchuser"), i18n("Switch User"), sessionsMenu); connect( sessionsMenu, SIGNAL(aboutToShow()), SLOT(slotPopulateSessions()) ); connect( sessionsMenu, SIGNAL(activated(int)), SLOT(slotSessionActivated(int)) ); } /* If the user configured ksmserver to */ KConfig ksmserver("ksmserverrc", false, false); ksmserver.setGroup("General"); if (ksmserver.readEntry( "loginMode" ) == "restoreSavedSession") { insertItem(KickerLib::menuIconSet("filesave"), i18n("Save Session"), this, SLOT(slotSaveSession())); } if (kapp->authorize("lock_screen")) { insertItem(KickerLib::menuIconSet("lock"), i18n("Lock Session"), this, SLOT(slotLock())); } if (kapp->authorize("logout")) { insertItem(KickerLib::menuIconSet("exit"), i18n("Log Out..."), this, SLOT(slotLogout())); } #if 0 // WABA: tear off handles don't work together with dynamically updated // menus. We can't update the menu while torn off, and we don't know // when it is torn off. if (KGlobalSettings::insertTearOffHandle()) insertTearOffHandle(); #endif setInitialized(true); }