void AddAppletDialog::addApplet(AppletWidget* applet) { if (!applet) { return; } QPoint prevInsertionPoint = Kicker::the()->insertionPoint(); Kicker::the()->setInsertionPoint(m_insertionPoint); const QWidget* appletContainer = 0; if (applet->info().type() == AppletInfo::Applet) { appletContainer = m_containerArea->addApplet(applet->info()); if (applet->info().isUniqueApplet() && PluginManager::the()->hasInstance(applet->info())) { applet->hide(); // reset the odd/even colouring from this item on down in the list bool odd = applet->odd(); AppletWidget::List::const_iterator it = m_appletWidgetList.find(applet); for (; it != m_appletWidgetList.constEnd(); ++it) { if ((*it)->isHidden()) { continue; } (*it)->setOdd(odd); odd = !odd; } } } else if (applet->info().type() & AppletInfo::Button) { appletContainer = m_containerArea->addButton(applet->info()); } if (appletContainer) { ExtensionContainer* ec = dynamic_cast<ExtensionContainer*>(m_containerArea->topLevelWidget()); if (ec) { // unhide the panel and keep it unhidden for at least the time the // helper tip will be there ec->unhideIfHidden(KickerSettings::mouseOversSpeed() + 2500); } new AddAppletVisualFeedback(applet, appletContainer, m_containerArea->popupDirection()); } Kicker::the()->setInsertionPoint(prevInsertionPoint); }
void MenuManager::kmenuAccelActivated() { if(m_kmenu->isVisible()) { m_kmenu->hide(); return; } m_kmenu->initialize(); if(m_kbuttons.isEmpty()) { // no button to use, make it behave like a desktop menu QPoint p; // Popup the K-menu at the center of the screen. QDesktopWidget *desktop = KApplication::desktop(); QRect r = desktop->screenGeometry(desktop->screenNumber(QCursor::pos())); // kMenu->rect() is not valid before showing, use sizeHint() p = r.center() - QRect(QPoint(0, 0), m_kmenu->sizeHint()).center(); m_kmenu->popup(p); // when the cursor is in the area where the menu pops up, // the item under the cursor gets selected. The single shot // avoids this from happening by allowing the item to be selected // when the event loop is enterred, and then resetting it. QTimer::singleShot(0, this, SLOT(slotSetKMenuItemActive())); } else { // We need the kmenu's size to place it at the right position. // We cannot rely on the popup menu's current size(), if it wasn't // shown before, so we resize it here according to its sizeHint(). const QSize size = m_kmenu->sizeHint(); m_kmenu->resize(size.width(), size.height()); PanelPopupButton *button = findKButtonFor(m_kmenu); // let's unhide the panel while we're at it. traverse the widget // hierarchy until we find the panel, if any QObject *menuParent = button->parent(); while(menuParent) { ExtensionContainer *ext = dynamic_cast< ExtensionContainer * >(menuParent); if(ext) { ext->unhideIfHidden(); // make sure it's unhidden before we use it to figure out // where to popup qApp->processEvents(); break; } menuParent = menuParent->parent(); } button->showMenu(); } }