VirtualBox

Changeset 81358 in vbox


Ignore:
Timestamp:
Oct 18, 2019 2:50:32 PM (5 years ago)
Author:
vboxsync
Message:

FE/Qt: UIExtraDataManager: Finally syncing geometry restore logic between File Manager, Guest Control dialog, Soft Keyboard dialog and the rest of stuff synced in r134070; Common UIExtraDataManager::dialogGeometry API is now used for all geometry restore calls.

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp

    r81357 r81358  
    26492649QRect UIExtraDataManager::selectorWindowGeometry(QWidget *pWidget)
    26502650{
    2651     /* Get corresponding extra-data: */
    2652     const QStringList data = extraDataStringList(GUI_LastSelectorWindowPosition);
    2653 
    2654     /* Parse loaded data: */
    2655     int iX = 0, iY = 0, iW = 0, iH = 0;
    2656     bool fOk = data.size() >= 4;
    2657     do
    2658     {
    2659         if (!fOk) break;
    2660         iX = data[0].toInt(&fOk);
    2661         if (!fOk) break;
    2662         iY = data[1].toInt(&fOk);
    2663         if (!fOk) break;
    2664         iW = data[2].toInt(&fOk);
    2665         if (!fOk) break;
    2666         iH = data[3].toInt(&fOk);
    2667     }
    2668     while (0);
    2669 
    2670     /* Get available-geometry [of screen with point (iX, iY) if possible]: */
    2671     const QRect availableGeometry = fOk ? gpDesktop->availableGeometry(QPoint(iX, iY)) :
    2672                                           gpDesktop->availableGeometry();
    2673 
    2674     /* Use geometry (loaded or default): */
    2675     QRect geometry = fOk ? QRect(iX, iY, iW, iH) : QRect(QPoint(0, 0), availableGeometry.size() * .50 /* % */);
    2676 
    2677     /* Take hint-widget into account: */
    2678     if (pWidget)
    2679         geometry.setSize(geometry.size().expandedTo(pWidget->minimumSizeHint()));
    2680 
    2681     /* As final fallback, move default-geometry to available-geometry' center: */
    2682     if (!fOk)
    2683         geometry.moveCenter(availableGeometry.center());
    2684 
    2685     /* In Windows Qt fails to reposition out of screen window properly, so doing it ourselves: */
    2686 #ifdef VBOX_WS_WIN
    2687     /* Make sure resulting geometry is within current bounds: */
    2688     if (!availableGeometry.contains(geometry))
    2689         geometry = UICommon::getNormalized(geometry, QRegion(availableGeometry));
    2690 #endif /* VBOX_WS_WIN */
    2691 
    2692     /* Return result: */
    2693     return geometry;
     2651    return dialogGeometry(GUI_LastSelectorWindowPosition, pWidget);
    26942652}
    26952653
     
    40994057QRect UIExtraDataManager::sessionInformationDialogGeometry(QWidget *pWidget, QWidget *pParentWidget)
    41004058{
    4101     /* Get corresponding extra-data: */
    4102     const QStringList data = extraDataStringList(GUI_SessionInformationDialogGeometry);
    4103 
    4104     /* Parse loaded data: */
    4105     int iX = 0, iY = 0, iW = 0, iH = 0;
    4106     bool fOk = data.size() >= 4;
    4107     do
    4108     {
    4109         if (!fOk) break;
    4110         iX = data[0].toInt(&fOk);
    4111         if (!fOk) break;
    4112         iY = data[1].toInt(&fOk);
    4113         if (!fOk) break;
    4114         iW = data[2].toInt(&fOk);
    4115         if (!fOk) break;
    4116         iH = data[3].toInt(&fOk);
    4117     }
    4118     while (0);
    4119 
    4120     /* Get available-geometry [of screen with point (iX, iY) if possible]: */
    4121     const QRect availableGeometry = fOk ? gpDesktop->availableGeometry(QPoint(iX, iY)) :
    4122                                           gpDesktop->availableGeometry();
    4123 
    4124     /* Use geometry (loaded or default): */
    4125     QRect geometry = fOk ? QRect(iX, iY, iW, iH) : QRect(QPoint(0, 0), availableGeometry.size() * .50 /* % */);
    4126 
    4127     /* Take hint-widget into account: */
    4128     if (pWidget)
    4129         geometry.setSize(geometry.size().expandedTo(pWidget->minimumSizeHint()));
    4130 
    4131     /* As a fallback, move default-geometry to pParentWidget' geometry center: */
    4132     if (!fOk && pParentWidget)
    4133         geometry.moveCenter(pParentWidget->geometry().center());
    4134     /* As final fallback, move default-geometry to available-geometry' center: */
    4135     else if (!fOk)
    4136         geometry.moveCenter(availableGeometry.center());
    4137 
    4138     /* In Windows Qt fails to reposition out of screen window properly, so doing it ourselves: */
    4139 #ifdef VBOX_WS_WIN
    4140     /* Make sure resulting geometry is within current bounds: */
    4141     if (!availableGeometry.contains(geometry))
    4142         geometry = UICommon::getNormalized(geometry, QRegion(availableGeometry));
    4143 #endif /* VBOX_WS_WIN */
    4144 
    4145     /* Return result: */
    4146     return geometry;
     4059    return dialogGeometry(GUI_SessionInformationDialogGeometry, pWidget, pParentWidget);
    41474060}
    41484061
     
    41964109}
    41974110
    4198 QRect UIExtraDataManager::fileManagerDialogGeometry(QWidget *pWidget, const QRect &defaultGeometry)
    4199 {
    4200     return dialogGeometry(GUI_GuestControl_FileManagerDialogGeometry, pWidget, defaultGeometry);
     4111QRect UIExtraDataManager::fileManagerDialogGeometry(QWidget *pWidget, QWidget *pParentWidget)
     4112{
     4113    return dialogGeometry(GUI_GuestControl_FileManagerDialogGeometry, pWidget, pParentWidget);
    42014114}
    42024115
     
    42254138}
    42264139
    4227 QRect UIExtraDataManager::softKeyboardDialogGeometry(QWidget *pWidget, const QRect &defaultGeometry)
    4228 {
    4229     return dialogGeometry(GUI_SoftKeyboard_DialogGeometry, pWidget, defaultGeometry);
     4140QRect UIExtraDataManager::softKeyboardDialogGeometry(QWidget *pWidget, QWidget *pParentWidget, const QRect &defaultGeometry)
     4141{
     4142    return dialogGeometry(GUI_SoftKeyboard_DialogGeometry, pWidget, pParentWidget, defaultGeometry);
    42304143}
    42314144
     
    43694282}
    43704283
    4371 QRect UIExtraDataManager::guestProcessControlDialogGeometry(QWidget *pWidget, const QRect &defaultGeometry)
    4372 {
    4373     return dialogGeometry(GUI_GuestControl_ProcessControlDialogGeometry, pWidget, defaultGeometry);
     4284QRect UIExtraDataManager::guestProcessControlDialogGeometry(QWidget *pWidget, QWidget *pParentWidget, const QRect &defaultGeometry)
     4285{
     4286    return dialogGeometry(GUI_GuestControl_ProcessControlDialogGeometry, pWidget, pParentWidget, defaultGeometry);
    43744287}
    43754288
     
    44334346QRect UIExtraDataManager::extraDataManagerGeometry(QWidget *pWidget, QWidget *pParentWidget)
    44344347{
    4435     /* Get corresponding extra-data: */
    4436     const QStringList data = extraDataStringList(GUI_ExtraDataManager_Geometry);
    4437 
    4438     /* Parse loaded data: */
    4439     int iX = 0, iY = 0, iW = 0, iH = 0;
    4440     bool fOk = data.size() >= 4;
    4441     do
    4442     {
    4443         if (!fOk) break;
    4444         iX = data[0].toInt(&fOk);
    4445         if (!fOk) break;
    4446         iY = data[1].toInt(&fOk);
    4447         if (!fOk) break;
    4448         iW = data[2].toInt(&fOk);
    4449         if (!fOk) break;
    4450         iH = data[3].toInt(&fOk);
    4451     }
    4452     while (0);
    4453 
    4454     /* Get available-geometry [of screen with point (iX, iY) if possible]: */
    4455     const QRect availableGeometry = fOk ? gpDesktop->availableGeometry(QPoint(iX, iY)) :
    4456                                           gpDesktop->availableGeometry();
    4457 
    4458     /* Use geometry (loaded or default): */
    4459     QRect geometry = fOk ? QRect(iX, iY, iW, iH) : QRect(QPoint(0, 0), availableGeometry.size() * .50 /* % */);
    4460 
    4461     /* Take hint-widget into account: */
    4462     if (pWidget)
    4463         geometry.setSize(geometry.size().expandedTo(pWidget->minimumSizeHint()));
    4464 
    4465     /* As a fallback, move default-geometry to pParentWidget' geometry center: */
    4466     if (!fOk && pParentWidget)
    4467         geometry.moveCenter(pParentWidget->geometry().center());
    4468     /* As final fallback, move default-geometry to available-geometry' center: */
    4469     else if (!fOk)
    4470         geometry.moveCenter(availableGeometry.center());
    4471 
    4472     /* In Windows Qt fails to reposition out of screen window properly, so doing it ourselves: */
    4473 #ifdef VBOX_WS_WIN
    4474     /* Make sure resulting geometry is within current bounds: */
    4475     if (!availableGeometry.contains(geometry))
    4476         geometry = UICommon::getNormalized(geometry, QRegion(availableGeometry));
    4477 #endif /* VBOX_WS_WIN */
    4478 
    4479     /* Return result: */
    4480     return geometry;
     4348    return dialogGeometry(GUI_ExtraDataManager_Geometry, pWidget, pParentWidget);
    44814349}
    44824350
     
    45534421QRect UIExtraDataManager::logWindowGeometry(QWidget *pWidget, QWidget *pParentWidget, const QRect &defaultGeometry)
    45544422{
    4555     /* Get corresponding extra-data: */
    4556     const QStringList data = extraDataStringList(GUI_LogWindowGeometry);
    4557 
    4558     /* Parse loaded data: */
    4559     int iX = 0, iY = 0, iW = 0, iH = 0;
    4560     bool fOk = data.size() >= 4;
    4561     do
    4562     {
    4563         if (!fOk) break;
    4564         iX = data[0].toInt(&fOk);
    4565         if (!fOk) break;
    4566         iY = data[1].toInt(&fOk);
    4567         if (!fOk) break;
    4568         iW = data[2].toInt(&fOk);
    4569         if (!fOk) break;
    4570         iH = data[3].toInt(&fOk);
    4571     }
    4572     while (0);
    4573 
    4574     /* Get available-geometry [of screen with point (iX, iY) if possible]: */
    4575     const QRect availableGeometry = fOk ? gpDesktop->availableGeometry(QPoint(iX, iY)) :
    4576                                           gpDesktop->availableGeometry();
    4577 
    4578     /* Use geometry (loaded or default): */
    4579     QRect geometry = fOk ? QRect(iX, iY, iW, iH) : defaultGeometry;
    4580 
    4581     /* Take hint-widget into account: */
    4582     if (pWidget)
    4583         geometry.setSize(geometry.size().expandedTo(pWidget->minimumSizeHint()));
    4584 
    4585     /* As a fallback, move default-geometry to pParentWidget' geometry center: */
    4586     if (!fOk && pParentWidget)
    4587         geometry.moveCenter(pParentWidget->geometry().center());
    4588     /* As final fallback, move default-geometry to available-geometry' center: */
    4589     else if (!fOk)
    4590         geometry.moveCenter(availableGeometry.center());
    4591 
    4592     /* In Windows Qt fails to reposition out of screen window properly, so doing it ourselves: */
    4593 #ifdef VBOX_WS_WIN
    4594     /* Make sure resulting geometry is within current bounds: */
    4595     if (!availableGeometry.contains(geometry))
    4596         geometry = UICommon::getNormalized(geometry, QRegion(availableGeometry));
    4597 #endif /* VBOX_WS_WIN */
    4598 
    4599     /* Return result: */
    4600     return geometry;
     4423    return dialogGeometry(GUI_LogWindowGeometry, pWidget, pParentWidget, defaultGeometry);
    46014424}
    46024425
     
    49674790}
    49684791
    4969 QRect UIExtraDataManager::dialogGeometry(const QString &strKey, QWidget *pWidget, const QRect &defaultGeometry)
    4970 {
    4971     /* Load corresponding extra-data: */
     4792QRect UIExtraDataManager::dialogGeometry(const QString &strKey,
     4793                                         QWidget *pWidget,
     4794                                         QWidget *pParentWidget /* = 0 */,
     4795                                         const QRect &defaultGeometry /* = QRect() */)
     4796{
     4797    /* Get corresponding extra-data: */
    49724798    const QStringList data = extraDataStringList(strKey);
    49734799
     
    49884814    while (0);
    49894815
     4816    /* Get available-geometry [of screen with point (iX, iY) if possible]: */
     4817    const QRect availableGeometry = fOk ? gpDesktop->availableGeometry(QPoint(iX, iY)) :
     4818                                          gpDesktop->availableGeometry();
     4819
    49904820    /* Use geometry (loaded or default): */
    4991     QRect geometry = fOk ? QRect(iX, iY, iW, iH) : defaultGeometry;
     4821    QRect geometry = fOk
     4822                   ? QRect(iX, iY, iW, iH)
     4823                   : !defaultGeometry.isNull()
     4824                   ? defaultGeometry
     4825                   : QRect(QPoint(0, 0), availableGeometry.size() * .50 /* % */);
    49924826
    49934827    /* Take hint-widget into account: */
     
    49954829        geometry.setSize(geometry.size().expandedTo(pWidget->minimumSizeHint()));
    49964830
     4831    /* As a fallback, move default-geometry to pParentWidget' geometry center: */
     4832    if (!fOk && pParentWidget)
     4833        geometry.moveCenter(pParentWidget->geometry().center());
     4834    /* As final fallback, move default-geometry to available-geometry' center: */
     4835    else if (!fOk)
     4836        geometry.moveCenter(availableGeometry.center());
     4837
    49974838    /* In Windows Qt fails to reposition out of screen window properly, so doing it ourselves: */
    49984839#ifdef VBOX_WS_WIN
    4999     /* Get available-geometry [of screen with point (iX, iY) if possible]: */
    5000     const QRect availableGeometry = fOk ? gpDesktop->availableGeometry(QPoint(iX, iY)) :
    5001                                           gpDesktop->availableGeometry();
    5002 
    50034840    /* Make sure resulting geometry is within current bounds: */
    50044841    if (!availableGeometry.contains(geometry))
  • trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h

    r81357 r81358  
    2525#include <QMap>
    2626#include <QObject>
     27#include <QRect>
    2728#include <QSize>
    2829#include <QUuid>
     
    650651        void setGuestControlProcessControlSplitterHints(const QList<int> &hints);
    651652        QList<int> guestControlProcessControlSplitterHints();
    652         QRect fileManagerDialogGeometry(QWidget *pWidget, const QRect &defaultGeometry);
     653        QRect fileManagerDialogGeometry(QWidget *pWidget, QWidget *pParentWidget);
    653654        bool fileManagerDialogShouldBeMaximized();
    654655        void setFileManagerDialogGeometry(const QRect &geometry, bool fMaximized);
    655         QRect guestProcessControlDialogGeometry(QWidget *pWidget, const QRect &defaultGeometry);
     656        QRect guestProcessControlDialogGeometry(QWidget *pWidget, QWidget *pParentWidget, const QRect &defaultGeometry);
    656657        bool guestProcessControlDialogShouldBeMaximized();
    657658        void setGuestProcessControlDialogGeometry(const QRect &geometry, bool fMaximized);
     
    662663    /** @name Soft Keyboard
    663664      * @{ */
    664         QRect softKeyboardDialogGeometry(QWidget *pWidget, const QRect &defaultGeometry);
     665        QRect softKeyboardDialogGeometry(QWidget *pWidget, QWidget *pParentWidget, const QRect &defaultGeometry);
    665666        void setSoftKeyboardDialogGeometry(const QRect &geometry, bool fMaximized);
    666667        bool softKeyboardDialogShouldBeMaximized();
     
    817818      * @param  strKey           Brings geometry extra-data key of particular dialog.
    818819      * @param  pWidget          Brings the widget to limit geometry bounds according to.
     820      * @param  pParentWidget    Brings the widget to center geometry rectangle according to.
    819821      * @param  defaultGeometry  Brings the default geometry which should be used to
    820822      *                          calculate resulting geometry if saved was not found. */
    821     QRect dialogGeometry(const QString &strKey, QWidget *pWidget, const QRect &defaultGeometry);
     823    QRect dialogGeometry(const QString &strKey, QWidget *pWidget, QWidget *pParentWidget = 0, const QRect &defaultGeometry = QRect());
    822824
    823825    /** Returns string consisting of @a strBase appended with @a uScreenIndex for the *non-primary* screen-index.
  • trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerDialog.cpp

    r81284 r81358  
    111111void UIFileManagerDialog::loadSettings()
    112112{
    113     /* Invent default window geometry: */
    114     const QRect availableGeo = gpDesktop->availableGeometry(this);
    115     const int iDefaultWidth = availableGeo.width() / 2;
    116     const int iDefaultHeight = availableGeo.height() * 3 / 4;
    117     QRect defaultGeo(0, 0, iDefaultWidth, iDefaultHeight);
    118     if (centerWidget())
    119         defaultGeo.moveCenter(centerWidget()->geometry().center());
    120     else
    121         defaultGeo.moveCenter(availableGeo.center());
    122 
    123113    /* Load geometry from extradata: */
    124     const QRect geo = gEDataManager->fileManagerDialogGeometry(this, defaultGeo);
     114    const QRect geo = gEDataManager->fileManagerDialogGeometry(this, centerWidget());
    125115    LogRel2(("GUI: UIFileManagerDialog: Restoring geometry to: Origin=%dx%d, Size=%dx%d\n",
    126116             geo.x(), geo.y(), geo.width(), geo.height()));
  • trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestProcessControlDialog.cpp

    r81284 r81358  
    111111    const int iDefaultHeight = availableGeo.height() * 3 / 4;
    112112    QRect defaultGeo(0, 0, iDefaultWidth, iDefaultHeight);
    113     if (centerWidget())
    114         defaultGeo.moveCenter(centerWidget()->geometry().center());
    115     else
    116         defaultGeo.moveCenter(availableGeo.center());
    117113
    118114    /* Load geometry from extradata: */
    119     QRect geo = gEDataManager->guestProcessControlDialogGeometry(this, defaultGeo);
     115    QRect geo = gEDataManager->guestProcessControlDialogGeometry(this, centerWidget(), defaultGeo);
    120116    LogRel2(("GUI: UIGuestProcessControlDialog: Restoring geometry to: Origin=%dx%d, Size=%dx%d\n",
    121117             geo.x(), geo.y(), geo.width(), geo.height()));
  • trunk/src/VBox/Frontends/VirtualBox/src/softkeyboard/UISoftKeyboard.cpp

    r81339 r81358  
    41294129    const int iDefaultHeight = iDefaultWidth * fKeyboardAspectRatio;
    41304130    QRect defaultGeo(0, 0, iDefaultWidth, iDefaultHeight);
    4131     if (m_pCenterWidget)
    4132         defaultGeo.moveCenter(m_pCenterWidget->geometry().center());
    4133     else
    4134         defaultGeo.moveCenter(availableGeo.center());
    41354131
    41364132    /* Load geometry from extradata: */
    4137     const QRect geo = gEDataManager->softKeyboardDialogGeometry(this, defaultGeo);
     4133    const QRect geo = gEDataManager->softKeyboardDialogGeometry(this, m_pCenterWidget, defaultGeo);
    41384134    LogRel2(("GUI: UISoftKeyboard: Restoring geometry to: Origin=%dx%d, Size=%dx%d\n",
    41394135             geo.x(), geo.y(), geo.width(), geo.height()));
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