Example #1
0
void MainWindow::setupActions()
{
    actQuit         = KStandardAction::quit(this, SLOT(quit()), actionCollection());
    KAction *a = NULL;
    a = actionCollection()->addAction("minimizeRestore", this,
                                      SLOT(minimizeRestore()));
    a->setText(i18n("Minimize"));
    a->setIcon(KIcon(""));
    a->setShortcut(0);

    /** Settings : ************************************************************/
//  m_actShowToolbar   = KStandardAction::showToolbar(   this, SLOT(toggleToolBar()),   actionCollection());
    m_actShowStatusbar = KStandardAction::showStatusbar(this, SLOT(toggleStatusBar()), actionCollection());

//  m_actShowToolbar->setCheckedState( KGuiItem(i18n("Hide &Toolbar")) );

    (void) KStandardAction::keyBindings(this, SLOT(showShortcutsSettingsDialog()), actionCollection());

    (void) KStandardAction::configureToolbars(this, SLOT(configureToolbars()), actionCollection());

    //KAction *actCfgNotifs = KStandardAction::configureNotifications(this, SLOT(configureNotifications()), actionCollection() );
    //actCfgNotifs->setEnabled(false); // Not yet implemented !

    actAppConfig = KStandardAction::preferences(this, SLOT(showSettingsDialog()), actionCollection());
}
Example #2
0
void SystemTray::init()
{
    ActionCollection *coll = QtUi::actionCollection("General");
    _minimizeRestoreAction = new Action(tr("&Minimize"), this, this, SLOT(minimizeRestore()));

#ifdef HAVE_KDE
    KMenu *kmenu;
    _trayMenu = kmenu = new KMenu();
    kmenu->addTitle(_activeIcon, "Quassel IRC");
#else
    _trayMenu = new QMenu(associatedWidget());
#endif

    _trayMenu->setTitle("Quassel IRC");

#ifndef HAVE_KDE
    _trayMenu->setAttribute(Qt::WA_Hover);
#endif

    _trayMenu->addAction(coll->action("ConnectCore"));
    _trayMenu->addAction(coll->action("DisconnectCore"));
    _trayMenu->addAction(coll->action("CoreInfo"));
    _trayMenu->addSeparator();
    _trayMenu->addAction(_minimizeRestoreAction);
    _trayMenu->addAction(coll->action("Quit"));

    connect(_trayMenu, SIGNAL(aboutToShow()), SLOT(trayMenuAboutToShow()));

    NotificationSettings notificationSettings;
    notificationSettings.initAndNotify("Systray/Animate", this, SLOT(enableAnimationChanged(QVariant)), true);
}
Example #3
0
// called from the popup menu - always do what the menu entry says,
// i.e. if the window is shown, no matter if active or not, the menu
// entry is "minimize", otherwise it's "restore"
void KSystemTray::minimizeRestoreAction()
{
    if(parentWidget())
    {
        bool restore = !(parentWidget()->isVisible());
        minimizeRestore(restore);
    }
}
Example #4
0
// called when left-clicking the tray icon
// if the window is not the active one, show it if needed, and activate it
// (just like taskbar); otherwise hide it
void KSystemTray::activateOrHide()
{
    QWidget *pw = parentWidget();

    if(!pw)
        return;

#ifdef Q_WS_X11
    KWin::WindowInfo info1 = KWin::windowInfo(pw->winId(), NET::XAWMState | NET::WMState);
    // mapped = visible (but possibly obscured)
    bool mapped = (info1.mappingState() == NET::Visible) && !info1.isMinimized();
    //    - not mapped -> show, raise, focus
    //    - mapped
    //        - obscured -> raise, focus
    //        - not obscured -> hide
    if(!mapped)
        minimizeRestore(true);
    else
    {
        KWinModule module;
        for(QValueList< WId >::ConstIterator it = module.stackingOrder().fromLast(); it != module.stackingOrder().end() && (*it) != pw->winId(); --it)
        {
            KWin::WindowInfo info2 = KWin::windowInfo(*it, NET::WMGeometry | NET::XAWMState | NET::WMState | NET::WMWindowType);
            if(info2.mappingState() != NET::Visible)
                continue; // not visible on current desktop -> ignore
            if(!info2.geometry().intersects(pw->geometry()))
                continue; // not obscuring the window -> ignore
            if(!info1.hasState(NET::KeepAbove) && info2.hasState(NET::KeepAbove))
                continue; // obscured by window kept above -> ignore
            NET::WindowType type = info2.windowType(NET::NormalMask | NET::DesktopMask | NET::DockMask | NET::ToolbarMask | NET::MenuMask
                                                    | NET::DialogMask | NET::OverrideMask | NET::TopMenuMask | NET::UtilityMask | NET::SplashMask);
            if(type == NET::Dock || type == NET::TopMenu)
                continue; // obscured by dock or topmenu -> ignore
            pw->raise();
            KWin::activateWindow(pw->winId());
            return;
        }
        minimizeRestore(false); // hide
    }
#endif
}
Example #5
0
void KSystemTray::setInactive()
{
    minimizeRestore(false);
}
Example #6
0
void KSystemTray::setActive()
{
    minimizeRestore(true);
}
bool GraphicalUi::checkMainWidgetVisibility(bool perform)
{
#ifdef Q_OS_WIN
    // the problem is that we lose focus when the systray icon is activated
    // and we don't know the former active window
    // therefore we watch for activation event and use our stopwatch :)
    if (GetTickCount() - _dwTickCount < 300) {
        // we were active in the last 300ms -> hide it
        if (perform)
            minimizeRestore(false);
        return false;
    }
    else {
        if (perform)
            minimizeRestore(true);
        return true;
    }

#elif defined(HAVE_KDE4) && defined(Q_WS_X11)
    KWindowInfo info1 = KWindowSystem::windowInfo(mainWidget()->winId(), NET::XAWMState | NET::WMState | NET::WMDesktop);
    // mapped = visible (but possibly obscured)
    bool mapped = (info1.mappingState() == NET::Visible) && !info1.isMinimized();

    //    - not mapped -> show, raise, focus
    //    - mapped
    //        - obscured -> raise, focus
    //        - not obscured -> hide
    //info1.mappingState() != NET::Visible -> window on another desktop?
    if (!mapped) {
        if (perform)
            minimizeRestore(true);
        return true;
    }
    else {
        QListIterator<WId> it(KWindowSystem::stackingOrder());
        it.toBack();
        while (it.hasPrevious()) {
            WId id = it.previous();
            if (id == mainWidget()->winId())
                break;

            KWindowInfo info2 = KWindowSystem::windowInfo(id, NET::WMDesktop | NET::WMGeometry | NET::XAWMState | NET::WMState | NET::WMWindowType);

            if (info2.mappingState() != NET::Visible)
                continue;  // not visible on current desktop -> ignore

            if (!info2.geometry().intersects(mainWidget()->geometry()))
                continue;  // not obscuring the window -> ignore

            if (!info1.hasState(NET::KeepAbove) && info2.hasState(NET::KeepAbove))
                continue;  // obscured by window kept above -> ignore

            NET::WindowType type = info2.windowType(NET::NormalMask | NET::DesktopMask
                | NET::DockMask | NET::ToolbarMask | NET::MenuMask | NET::DialogMask
                | NET::OverrideMask | NET::TopMenuMask | NET::UtilityMask | NET::SplashMask);

            if (type == NET::Dock || type == NET::TopMenu)
                continue;  // obscured by dock or topmenu -> ignore

            if (perform) {
                KWindowSystem::raiseWindow(mainWidget()->winId());
                KWindowSystem::activateWindow(mainWidget()->winId());
            }
            return true;
        }

        //not on current desktop?
        if (!info1.isOnCurrentDesktop()) {
            if (perform)
                KWindowSystem::activateWindow(mainWidget()->winId());
            return true;
        }

        if (perform)
            minimizeRestore(false);  // hide
        return false;
    }
#else

    if (!mainWidget()->isVisible() || mainWidget()->isMinimized() || !mainWidget()->isActiveWindow()) {
        if (perform)
            minimizeRestore(true);
        return true;
    }
    else {
        if (perform)
            minimizeRestore(false);
        return false;
    }

#endif

    return true;
}