VirtualBox

Ignore:
Timestamp:
Jul 22, 2007 12:14:05 PM (18 years ago)
Author:
vboxsync
Message:

FE/Qt: Fixed appearance of the popup version of the main menu (focus, position); this menu is now also shown in fullscreen mode.

Location:
trunk/src/VBox/Frontends/VirtualBox
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/include/VBoxConsoleWnd.h

    r3728 r3762  
    7171    void refreshView();
    7272
    73     bool isTrueFullscreen() const { return mIsInFullscreenMode; }
    74 
    75     bool isTrueSeamless() const { return mIsInSeamlessMode; }
    76 
    77     void setMouseIntegrationLocked (bool);
    78 
    79     void popupSeamlessMenu();
     73    bool isTrueFullscreen() const { return mIsFullscreen; }
     74
     75    bool isTrueSeamless() const { return mIsSeamless; }
     76
     77    void setMouseIntegrationLocked (bool aDisabled);
     78
     79    void popupMainMenu (bool aCenter);
    8080
    8181public slots:
     
    180180private:
    181181
    182     QPopupMenu *mSeamlessPopupMenu;
     182    /** Popup version of the main menu */
     183    QPopupMenu *mMainMenu;
    183184
    184185    QActionGroup *runningActions;
    185186
    186     // VM actions
     187    // Machine actions
    187188    QAction *vmFullscreenAction;
    188189    QAction *vmSeamlessAction;
     
    199200    QAction *vmTakeSnapshotAction;
    200201    QAction *vmDisableMouseIntegrAction;
    201 
    202     // VM popup menus
    203     VBoxSwitchMenu *vmAutoresizeMenu;
    204     VBoxSwitchMenu *vmDisMouseIntegrMenu;
    205202
    206203    // Devices actions
     
    223220    QAction *helpAboutAction;
    224221    QAction *helpResetMessagesAction;
     222
     223    // Machine popup menus
     224    VBoxSwitchMenu *vmAutoresizeMenu;
     225    VBoxSwitchMenu *vmDisMouseIntegrMenu;
    225226
    226227    // Devices popup menus
     
    288289
    289290    // variables for dealing with true fullscreen
    290     bool mIsInFullscreenMode : 1;
    291     bool mIsInSeamlessMode : 1;
    292     bool mIsSeamlessModeSupported : 1;
     291    bool mIsFullscreen : 1;
     292    bool mIsSeamless : 1;
     293    bool mIsSeamlessSupported : 1;
    293294    int normal_wflags;
    294295    bool was_max : 1;
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxConsoleView.cpp

    r3740 r3762  
    11321132                    else if (ke->key() == Key_Home)
    11331133                    {
    1134                         if (mainwnd->isTrueSeamless())
    1135                             mainwnd->popupSeamlessMenu();
     1134                        /* activate the main menu */
     1135                        if (mainwnd->isTrueSeamless() || mainwnd->isTrueFullscreen())
     1136                            mainwnd->popupMainMenu (mouse_captured);
    11361137                        else
    11371138                            mainwnd->menuBar()->setFocus();
     
    11391140                    else
    11401141                    {
    1141                         /*
    1142                          *  process hot keys not processed in keyEvent()
    1143                          *  (as in case of non-alphanumeric keys)
    1144                          */
     1142                        /* process hot keys not processed in keyEvent()
     1143                         * (as in case of non-alphanumeric keys) */
    11451144                        processHotKey (QKeySequence (ke->key()),
    11461145                                       mainwnd->menuBar());
     
    11511150                    if (isPaused())
    11521151                    {
    1153                         /*
    1154                          *  if the reminder is disabled we pass the event to
    1155                          *  Qt to enable normal keyboard functionality
    1156                          *  (for example, menu access with Alt+Letter)
    1157                          */
     1152                        /* if the reminder is disabled we pass the event to
     1153                         * Qt to enable normal keyboard functionality
     1154                         * (for example, menu access with Alt+Letter) */
    11581155                        if (!vboxProblem().remindAboutPausedVMInput())
    11591156                            break;
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxConsoleWnd.cpp

    r3728 r3762  
    215215                WFlags aFlags)
    216216    : QMainWindow (aParent, aName, aFlags)
    217     , mSeamlessPopupMenu (0)
     217    , mMainMenu (0)
    218218#ifdef VBOX_WITH_DEBUGGER_GUI
    219219    , dbgStatisticsAction (NULL)
     
    226226    , machine_state (CEnums::InvalidMachineState)
    227227    , no_auto_close (false)
    228     , mIsInFullscreenMode (false)
    229     , mIsInSeamlessMode (false)
    230     , mIsSeamlessModeSupported (false)
     228    , mIsFullscreen (false)
     229    , mIsSeamless (false)
     230    , mIsSeamlessSupported (false)
    231231    , normal_wflags (getWFlags())
    232232    , was_max (false)
     
    377377    ///// Menubar ///////////////////////////////////////////////////////////
    378378
    379     mSeamlessPopupMenu = new QPopupMenu (this, "mSeamlessPopupMenu");
    380 
    381     /* VM popup menu */
     379    mMainMenu = new QPopupMenu (this, "mMainMenu");
     380
     381    /* Machine submenu */
    382382
    383383    QPopupMenu *vmMenu = new QPopupMenu (this, "vmMenu");
     384
     385    /* dynamic & status line popup menus */
     386    vmAutoresizeMenu = new VBoxSwitchMenu (vmMenu, vmAutoresizeGuestAction);
     387    vmDisMouseIntegrMenu = new VBoxSwitchMenu (vmMenu, vmDisableMouseIntegrAction,
     388                                               true /* inverted toggle state */);
     389
    384390    vmFullscreenAction->addTo (vmMenu);
    385391    vmSeamlessAction->addTo (vmMenu);
     
    401407    vmMenu->insertSeparator();
    402408    vmCloseAction->addTo (vmMenu);
     409
    403410    menuBar()->insertItem (QString::null, vmMenu, vmMenuId);
    404     vmAutoresizeMenu = new VBoxSwitchMenu (vmMenu, vmAutoresizeGuestAction);
    405     vmDisMouseIntegrMenu = new VBoxSwitchMenu (vmMenu, vmDisableMouseIntegrAction,
    406                                                true /* inverted toggle state */);
    407     mSeamlessPopupMenu->insertItem (QString::null, vmMenu, vmMenuId);
    408 
    409     /* Devices popup menu */
     411    mMainMenu->insertItem (QString::null, vmMenu, vmMenuId);
     412
     413    /* Devices submenu */
    410414
    411415    devicesMenu = new QPopupMenu (this, "devicesMenu");
    412416
    413     /* two dynamic submenus */
     417    /* dynamic & statusline popup menus */
    414418    devicesMountFloppyMenu = new QPopupMenu (devicesMenu, "devicesMountFloppyMenu");
    415419    devicesMountDVDMenu = new QPopupMenu (devicesMenu, "devicesMountDVDMenu");
    416 
    417420    devicesSharedFolders = new QPopupMenu (devicesMenu, "devicesSharedFolders");
    418421    devicesNetworkMenu = new QPopupMenu (devicesMenu, "devicesNetworkMenu");
     
    439442    devicesVRDPMenuSeparatorId = devicesMenu->insertSeparator();
    440443    devicesInstallGuestToolsAction->addTo (devicesMenu);
     444
    441445    menuBar()->insertItem (QString::null, devicesMenu, devicesMenuId);
     446    mMainMenu->insertItem (QString::null, devicesMenu, devicesMenuId);
    442447
    443448    /* reset the "context menu" flag */
     
    445450    devicesMenu->setItemParameter (devicesMountDVDMenuId, 0);
    446451    devicesMenu->setItemParameter (devicesUSBMenuId, 0);
    447     mSeamlessPopupMenu->insertItem (QString::null, devicesMenu, devicesMenuId);
    448452
    449453#ifdef VBOX_WITH_DEBUGGER_GUI
     
    455459        dbgCommandLineAction->addTo (dbgMenu);
    456460        menuBar()->insertItem (QString::null, dbgMenu, dbgMenuId);
    457         mSeamlessPopupMenu->insertItem (QString::null, dbgMenu, dbgMenuId);
     461        mMainMenu->insertItem (QString::null, dbgMenu, dbgMenuId);
    458462    }
    459463    else
     
    461465#endif
    462466
    463     /* Help popup menu */
     467    /* Help submenu */
    464468
    465469    QPopupMenu *helpMenu = new QPopupMenu( this, "helpMenu" );
     470
    466471    helpWebAction->addTo( helpMenu );
    467472    helpMenu->insertSeparator();
     
    469474    helpMenu->insertSeparator();
    470475    helpResetMessagesAction->addTo (helpMenu);
     476
    471477    menuBar()->insertItem( QString::null, helpMenu, helpMenuId );
    472     mSeamlessPopupMenu->insertItem (QString::null, helpMenu, helpMenuId);
     478    mMainMenu->insertItem (QString::null, helpMenu, helpMenuId);
    473479
    474480    ///// Status bar ////////////////////////////////////////////////////////
     
    786792            normal_pos = QPoint (x, y);
    787793            normal_size = QSize (w, h);
    788             if (!mIsInFullscreenMode && !vmSeamlessAction->isOn())
     794            if (!mIsFullscreen && !vmSeamlessAction->isOn())
    789795            {
    790796                move (normal_pos);
     
    803809            normal_pos = QPoint();
    804810            normal_size = QSize();
    805             if (!mIsInFullscreenMode && !vmSeamlessAction->isOn())
     811            if (!mIsFullscreen && !vmSeamlessAction->isOn())
    806812            {
    807813                console->normalizeGeometry (true /* adjustPosition */);
     
    10391045                                 .arg (normal_size.width())
    10401046                                 .arg (normal_size.height());
    1041         if (isMaximized() || (mIsInFullscreenMode && was_max)
    1042                           || (mIsInSeamlessMode && was_max))
     1047        if (isMaximized() || (mIsFullscreen && was_max)
     1048                          || (mIsSeamless && was_max))
    10431049            winPos += QString (",%1").arg (GUI_LastWindowPosition_Max);
    10441050
     
    10821088}
    10831089
    1084 void VBoxConsoleWnd::popupSeamlessMenu()
    1085 {
    1086     mSeamlessPopupMenu->popup (QCursor::pos());
     1090/**
     1091 *  Shows up and activates the popup version of the main menu.
     1092 *
     1093 *  @param aCenter If @a true, center the popup menu on the screen, otherwise
     1094 *                 show it at the current mouse pointer location.
     1095 */
     1096void VBoxConsoleWnd::popupMainMenu (bool aCenter)
     1097{
     1098    QPoint pos = QCursor::pos();
     1099    if (aCenter)
     1100    {
     1101        QRect deskGeo = QApplication::desktop()->screenGeometry (this);
     1102        QRect popGeo = mMainMenu->frameGeometry();
     1103        popGeo.moveCenter (QPoint (deskGeo.width() / 2, deskGeo.height() / 2));
     1104        pos = popGeo.topLeft();
     1105    }
     1106    else
     1107    {
     1108        /* put the menu's bottom right corner to the pointer's hotspot point */
     1109        pos.setX (pos.x() - mMainMenu->frameGeometry().width());
     1110        pos.setY (pos.y() - mMainMenu->frameGeometry().height());
     1111    }
     1112
     1113    mMainMenu->popup (pos);
     1114    mMainMenu->setActiveWindow();
     1115    mMainMenu->setActiveItem (0);
    10871116}
    10881117
     
    11021131        {
    11031132            QResizeEvent *re = (QResizeEvent *) e;
    1104             if (!mIsInFullscreenMode && !mIsInSeamlessMode &&
     1133            if (!mIsFullscreen && !mIsSeamless &&
    11051134                (windowState() & (WindowMaximized | WindowMinimized |
    11061135                                  WindowFullScreen)) == 0)
     
    11151144        case QEvent::Move:
    11161145        {
    1117             if (!mIsInFullscreenMode && !mIsInSeamlessMode &&
     1146            if (!mIsFullscreen && !mIsSeamless &&
    11181147                (windowState() & (WindowMaximized | WindowMinimized |
    11191148                                  WindowFullScreen)) == 0)
     
    14951524
    14961525    menuBar()->changeItem (vmMenuId, tr ("&Machine"));
    1497     mSeamlessPopupMenu->changeItem (vmMenuId,
    1498         VBoxGlobal::iconSet ("ico16x01.png"), tr ("&Machine"));
     1526    mMainMenu->changeItem (vmMenuId,
     1527        VBoxGlobal::iconSet ("machine_16px.png"), tr ("&Machine"));
    14991528    menuBar()->changeItem (devicesMenuId, tr ("&Devices"));
    1500     mSeamlessPopupMenu->changeItem (devicesMenuId,
    1501         VBoxGlobal::iconSet ("diskim_16px.png"), tr ("&Devices"));
     1529    mMainMenu->changeItem (devicesMenuId,
     1530        VBoxGlobal::iconSet ("settings_16px.png"), tr ("&Devices"));
    15021531#ifdef VBOX_WITH_DEBUGGER_GUI
    15031532    if (vboxGlobal().isDebuggerEnabled())
    15041533    {
    15051534        menuBar()->changeItem (dbgMenuId, tr ("De&bug"));
    1506         mSeamlessPopupMenu->changeItem (dbgMenuId,
    1507             VBoxGlobal::iconSet ("global_settings_16px.png"), tr ("De&bug"));
     1535        mMainMenu->changeItem (dbgMenuId, tr ("De&bug"));
    15081536    }
    15091537#endif
    15101538    menuBar()->changeItem (helpMenuId, tr ("&Help"));
    1511     mSeamlessPopupMenu->changeItem (helpMenuId,
     1539    mMainMenu->changeItem (helpMenuId,
    15121540        VBoxGlobal::iconSet ("help_16px.png"), tr ("&Help"));
    15131541
     
    17891817{
    17901818    if (aSeamless &&
    1791         (aOn && !mIsSeamlessModeSupported ||
    1792          aOn && mIsInFullscreenMode ||
    1793          !aOn && !mIsInSeamlessMode))
     1819        (aOn && !mIsSeamlessSupported ||
     1820         aOn && mIsFullscreen ||
     1821         !aOn && !mIsSeamless))
    17941822        return;
    17951823
     
    17971825    AssertReturnVoid ((hidden_children.isEmpty() == aOn));
    17981826    if (aSeamless)
    1799         AssertReturnVoid (mIsInSeamlessMode != aOn);
     1827        AssertReturnVoid (mIsSeamless != aOn);
    18001828    else
    1801         AssertReturnVoid (mIsInFullscreenMode != aOn);
     1829        AssertReturnVoid (mIsFullscreen != aOn);
    18021830
    18031831    if (aOn)
     
    18331861    else
    18341862    {
    1835         mIsInFullscreenMode = aOn;
     1863        mIsFullscreen = aOn;
    18361864        vmAdjustWindowAction->setEnabled (!aOn);
    18371865        vmSeamlessAction->setEnabled (!aOn);
     
    18431871    {
    18441872        if (aSeamless)
    1845             mIsInSeamlessMode = true;
     1873            mIsSeamless = true;
    18461874
    18471875        /* Save the previous scroll-view minimum size before entering
     
    19822010
    19832011        if (aSeamless)
    1984             mIsInSeamlessMode = false;
     2012            mIsSeamless = false;
    19852013    }
    19862014
     
    27592787    vmAutoresizeGuestAction->setEnabled (aActive);
    27602788    vmSeamlessAction->setEnabled (aSeamless);
    2761     mIsSeamlessModeSupported = aSeamless;
     2789    mIsSeamlessSupported = aSeamless;
    27622790    if (aSeamless && vmSeamlessAction->isOn())
    27632791        vmSeamless (true);
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxGlobal.cpp

    r3483 r3762  
    22322232    delete list;
    22332233
    2234     /// @todo (r=dmik) not sure, we really need this
     2234    /// @todo (r=dmik) not sure if we really need this
    22352235#if 0
    22362236    /* sanity check for decoration frames. With embedding, we
Note: See TracChangeset for help on using the changeset viewer.

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