VirtualBox

Changeset 52694 in vbox for trunk


Ignore:
Timestamp:
Sep 11, 2014 11:49:22 AM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
96021
Message:

FE/Qt: 7462: Non Mac OS X hosts: Runtime UI: Invoke popup-menu if menu-bar is hidden.

Location:
trunk/src/VBox/Frontends/VirtualBox/src/runtime/normal
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIKeyboardHandlerNormal.cpp

    r52129 r52694  
    1616 */
    1717
     18/* Qt includes: */
    1819#ifndef Q_WS_MAC
    19 /* Qt includes: */
    2020# include <QMainWindow>
    2121# include <QMenuBar>
    2222# include <QKeyEvent>
     23# include <QTimer>
    2324#endif /* !Q_WS_MAC */
    2425
     
    2627#include "UIKeyboardHandlerNormal.h"
    2728#ifndef Q_WS_MAC
     29# include "UIMachineLogic.h"
    2830# include "UIMachineWindow.h"
    2931# include "UIShortcutPool.h"
    3032#endif /* !Q_WS_MAC */
    3133
     34/* Namespaces: */
    3235#ifndef Q_WS_MAC
    33 /* Namespaces: */
    3436using namespace UIExtraDataDefs;
    3537#endif /* !Q_WS_MAC */
     
    7072                    if (pMenuBar && !pMenuBar->actions().isEmpty())
    7173                    {
    72                         /* If 'active' action is NOT chosen: */
    73                         if (!pMenuBar->activeAction())
    74                             /* Set first menu-bar action as 'active': */
    75                             pMenuBar->setActiveAction(pMenuBar->actions()[0]);
    76                         /* If 'active' action is chosen: */
    77                         if (pMenuBar->activeAction())
     74                        /* Is menu-bar visible? */
     75                        if (pMenuBar->isVisible())
    7876                        {
    79                             /* Activate 'active' menu-bar action: */
    80                             pMenuBar->activeAction()->activate(QAction::Trigger);
     77                            /* If 'active' action is NOT chosen: */
     78                            if (!pMenuBar->activeAction())
     79                                /* Set first menu-bar action as 'active': */
     80                                pMenuBar->setActiveAction(pMenuBar->actions()[0]);
     81                            /* If 'active' action is chosen: */
     82                            if (pMenuBar->activeAction())
     83                            {
     84                                /* Activate 'active' menu-bar action: */
     85                                pMenuBar->activeAction()->activate(QAction::Trigger);
    8186#ifdef Q_WS_WIN
    82                             /* Windows host needs separate 'focus set'
    83                              * to let menubar operate while popped up: */
    84                             pMenuBar->setFocus();
     87                                /* Windows host needs separate 'focus set'
     88                                 * to let menubar operate while popped up: */
     89                                pMenuBar->setFocus();
    8590#endif /* Q_WS_WIN */
    86                             /* Filter-out this event: */
    87                             return true;
     91                            }
    8892                        }
     93                        else
     94                        {
     95                            /* Post request to show popup-menu: */
     96                            QTimer::singleShot(0, m_pMachineLogic, SLOT(sltInvokePopupMenu()));
     97                        }
     98                        /* Filter-out this event: */
     99                        return true;
    89100                    }
    90101                }
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineLogicNormal.cpp

    r52645 r52694  
    1717
    1818/* Qt includes: */
    19 #include <QMenu>
     19#ifndef Q_WS_MAC
     20# include <QTimer>
     21#endif /* !Q_WS_MAC */
    2022
    2123/* GUI includes: */
     
    3032#include "UIExtraDataManager.h"
    3133#include "UIFrameBuffer.h"
    32 #ifdef Q_WS_MAC
     34#ifndef Q_WS_MAC
     35# include "QIMenu.h"
     36#else /* Q_WS_MAC */
    3337#include "VBoxUtils.h"
    3438#endif /* Q_WS_MAC */
     
    4044UIMachineLogicNormal::UIMachineLogicNormal(QObject *pParent, UISession *pSession)
    4145    : UIMachineLogic(pParent, pSession, UIVisualStateType_Normal)
     46#ifndef Q_WS_MAC
     47    , m_pPopupMenu(0)
     48#endif /* !Q_WS_MAC */
    4249{
    4350}
     
    7582    }
    7683}
     84
     85#ifndef RT_OS_DARWIN
     86void UIMachineLogicNormal::sltInvokePopupMenu()
     87{
     88    /* Popup main-menu if present: */
     89    if (m_pPopupMenu && !m_pPopupMenu->isEmpty())
     90    {
     91        m_pPopupMenu->popup(activeMachineWindow()->geometry().center());
     92        QTimer::singleShot(0, m_pPopupMenu, SLOT(sltHighlightFirstAction()));
     93    }
     94}
     95#endif /* RT_OS_DARWIN */
    7796
    7897void UIMachineLogicNormal::sltOpenMenuBarSettings()
     
    259278}
    260279
     280#ifndef Q_WS_MAC
     281void UIMachineLogicNormal::prepareMenu()
     282{
     283    /* Prepare popup-menu: */
     284    m_pPopupMenu = new QIMenu;
     285    AssertPtrReturnVoid(m_pPopupMenu);
     286    {
     287        /* Prepare popup-menu: */
     288        foreach (QMenu *pMenu, actionPool()->menus())
     289            m_pPopupMenu->addMenu(pMenu);
     290    }
     291}
     292#endif /* !Q_WS_MAC */
     293
     294#ifndef Q_WS_MAC
     295void UIMachineLogicNormal::cleanupMenu()
     296{
     297    /* Cleanup popup-menu: */
     298    delete m_pPopupMenu;
     299    m_pPopupMenu = 0;
     300}
     301#endif /* !Q_WS_MAC */
     302
    261303void UIMachineLogicNormal::cleanupMachineWindows()
    262304{
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineLogicNormal.h

    r52645 r52694  
    4242    void sltCheckForRequestedVisualStateType();
    4343
     44#ifndef RT_OS_DARWIN
     45    /** Invokes popup-menu. */
     46    void sltInvokePopupMenu();
     47#endif /* RT_OS_DARWIN */
     48
    4449    /** Opens menu-bar editor.*/
    4550    void sltOpenMenuBarSettings();
     
    6671    void prepareActionConnections();
    6772    void prepareMachineWindows();
     73#ifndef Q_WS_MAC
     74    void prepareMenu();
     75#endif /* !Q_WS_MAC */
    6876
    6977    /* Cleanup helpers: */
     78#ifndef Q_WS_MAC
     79    void cleanupMenu();
     80#endif /* !Q_WS_MAC */
    7081    void cleanupMachineWindows();
    7182    void cleanupActionConnections();
     83
     84#ifndef Q_WS_MAC
     85    /** Holds the popup-menu instance. */
     86    QMenu *m_pPopupMenu;
     87#endif /* !Q_WS_MAC */
    7288
    7389    /* Friend classes: */
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette