Index: /trunk/src/VBox/Frontends/VirtualBox/src/extensions/QIManagerDialog.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extensions/QIManagerDialog.cpp	(revision 81283)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extensions/QIManagerDialog.cpp	(revision 81284)
@@ -231,18 +231,2 @@
     }
 }
-
-void QIManagerDialog::setDialogGeometry(const QRect &geometry)
-{
-#if defined(VBOX_WS_MAC) || defined(VBOX_WS_WIN)
-    /* Use the old approach for OSX/Win: */
-    move(geometry.topLeft());
-    resize(geometry.size());
-#else /* !VBOX_WS_MAC && !VBOX_WS_WIN */
-    /* Use the new approach otherwise: */
-    UICommon::setTopLevelGeometry(this, geometry);
-#endif /* !VBOX_WS_MAC && !VBOX_WS_WIN */
-
-    /* Maximize (if necessary): */
-    if (shouldBeMaximized())
-        showMaximized();
-}
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extensions/QIManagerDialog.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extensions/QIManagerDialog.h	(revision 81283)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extensions/QIManagerDialog.h	(revision 81284)
@@ -27,4 +27,5 @@
 
 /* GUI includes: */
+#include "QIWithRestorableGeometry.h"
 #include "UILibraryDefs.h"
 
@@ -85,5 +86,5 @@
 
 /** QMainWindow sub-class used as various manager dialogs. */
-class SHARED_LIBRARY_STUFF QIManagerDialog : public QMainWindow
+class SHARED_LIBRARY_STUFF QIManagerDialog : public QIWithRestorableGeometry<QMainWindow>
 {
     Q_OBJECT;
@@ -174,12 +175,4 @@
     /** @} */
 
-    /** @name Functions related to geometry restoration.
-     * @{ */
-        /** Sets the position and size of the dialog. */
-        void setDialogGeometry(const QRect &geometry);
-        /** Returns whether the window should be maximized when geometry being restored. */
-        virtual bool shouldBeMaximized() const { return false; }
-    /** @} */
-
 private:
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerDialog.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerDialog.cpp	(revision 81283)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerDialog.cpp	(revision 81284)
@@ -111,34 +111,28 @@
 void UIFileManagerDialog::loadSettings()
 {
-    const QRect desktopRect = gpDesktop->availableGeometry(this);
-    int iDefaultWidth = desktopRect.width() / 2;
-    int iDefaultHeight = desktopRect.height() * 3 / 4;
-
-    QRect defaultGeometry(0, 0, iDefaultWidth, iDefaultHeight);
+    /* Invent default window geometry: */
+    const QRect availableGeo = gpDesktop->availableGeometry(this);
+    const int iDefaultWidth = availableGeo.width() / 2;
+    const int iDefaultHeight = availableGeo.height() * 3 / 4;
+    QRect defaultGeo(0, 0, iDefaultWidth, iDefaultHeight);
     if (centerWidget())
-        defaultGeometry.moveCenter(centerWidget()->geometry().center());
+        defaultGeo.moveCenter(centerWidget()->geometry().center());
+    else
+        defaultGeo.moveCenter(availableGeo.center());
 
     /* Load geometry from extradata: */
-    QRect geometry = gEDataManager->fileManagerDialogGeometry(this, defaultGeometry);
-
-    /* Restore geometry: */
+    const QRect geo = gEDataManager->fileManagerDialogGeometry(this, defaultGeo);
     LogRel2(("GUI: UIFileManagerDialog: Restoring geometry to: Origin=%dx%d, Size=%dx%d\n",
-             geometry.x(), geometry.y(), geometry.width(), geometry.height()));
-    setDialogGeometry(geometry);
+             geo.x(), geo.y(), geo.width(), geo.height()));
+    restoreGeometry(geo);
 }
 
 void UIFileManagerDialog::saveSettings() const
 {
-    /* Save window geometry to extradata: */
-    const QRect saveGeometry = geometry();
-#ifdef VBOX_WS_MAC
-    /* darwinIsWindowMaximized expects a non-const QWidget*. thus const_cast: */
-    QWidget *pw = const_cast<QWidget*>(qobject_cast<const QWidget*>(this));
-    gEDataManager->setFileManagerDialogGeometry(saveGeometry, ::darwinIsWindowMaximized(pw));
-#else /* !VBOX_WS_MAC */
-    gEDataManager->setFileManagerDialogGeometry(saveGeometry, isMaximized());
-#endif /* !VBOX_WS_MAC */
-    LogRel2(("GUI: File Manager Dialog: Geometry saved as: Origin=%dx%d, Size=%dx%d\n",
-             saveGeometry.x(), saveGeometry.y(), saveGeometry.width(), saveGeometry.height()));
+    /* Save geometry to extradata: */
+    const QRect geo = currentGeometry();
+    LogRel2(("GUI: UIFileManagerDialog: Saving geometry as: Origin=%dx%d, Size=%dx%d\n",
+             geo.x(), geo.y(), geo.width(), geo.height()));
+    gEDataManager->setFileManagerDialogGeometry(geo, isCurrentlyMaximized());
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestProcessControlDialog.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestProcessControlDialog.cpp	(revision 81283)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestProcessControlDialog.cpp	(revision 81284)
@@ -106,34 +106,28 @@
 void UIGuestProcessControlDialog::loadSettings()
 {
-    const QRect desktopRect = gpDesktop->availableGeometry(this);
-    int iDefaultWidth = desktopRect.width() / 2;
-    int iDefaultHeight = desktopRect.height() * 3 / 4;
-
-    QRect defaultGeometry(0, 0, iDefaultWidth, iDefaultHeight);
+    /* Invent default window geometry: */
+    const QRect availableGeo = gpDesktop->availableGeometry(this);
+    const int iDefaultWidth = availableGeo.width() / 2;
+    const int iDefaultHeight = availableGeo.height() * 3 / 4;
+    QRect defaultGeo(0, 0, iDefaultWidth, iDefaultHeight);
     if (centerWidget())
-        defaultGeometry.moveCenter(centerWidget()->geometry().center());
+        defaultGeo.moveCenter(centerWidget()->geometry().center());
+    else
+        defaultGeo.moveCenter(availableGeo.center());
 
     /* Load geometry from extradata: */
-    QRect geometry = gEDataManager->guestProcessControlDialogGeometry(this, defaultGeometry);
-
-    /* Restore geometry: */
+    QRect geo = gEDataManager->guestProcessControlDialogGeometry(this, defaultGeo);
     LogRel2(("GUI: UIGuestProcessControlDialog: Restoring geometry to: Origin=%dx%d, Size=%dx%d\n",
-             geometry.x(), geometry.y(), geometry.width(), geometry.height()));
-    setDialogGeometry(geometry);
+             geo.x(), geo.y(), geo.width(), geo.height()));
+    restoreGeometry(geo);
 }
 
 void UIGuestProcessControlDialog::saveSettings() const
 {
-    /* Save window geometry to extradata: */
-    const QRect saveGeometry = geometry();
-#ifdef VBOX_WS_MAC
-    /* darwinIsWindowMaximized expects a non-const QWidget*. thus const_cast: */
-    QWidget *pw = const_cast<QWidget*>(qobject_cast<const QWidget*>(this));
-    gEDataManager->setGuestProcessControlDialogGeometry(saveGeometry, ::darwinIsWindowMaximized(pw));
-#else /* !VBOX_WS_MAC */
-    gEDataManager->setGuestProcessControlDialogGeometry(saveGeometry, isMaximized());
-#endif /* !VBOX_WS_MAC */
-    LogRel2(("GUI: Guest Process Control Dialog: Geometry saved as: Origin=%dx%d, Size=%dx%d\n",
-             saveGeometry.x(), saveGeometry.y(), saveGeometry.width(), saveGeometry.height()));
+    /* Save geometry to extradata: */
+    const QRect geo = currentGeometry();
+    LogRel2(("GUI: UIGuestProcessControlDialog: Saving geometry as: Origin=%dx%d, Size=%dx%d\n",
+             geo.x(), geo.y(), geo.width(), geo.height()));
+    gEDataManager->setGuestProcessControlDialogGeometry(geo, isCurrentlyMaximized());
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerDialog.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerDialog.cpp	(revision 81283)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerDialog.cpp	(revision 81284)
@@ -115,46 +115,36 @@
 void UIVMLogViewerDialog::loadSettings()
 {
-    /* Acquire widget: */
+    /* Invent default window geometry: */
+    const QRect availableGeo = gpDesktop->availableGeometry(this);
+    int iDefaultWidth = availableGeo.width() / 2;
+    int iDefaultHeight = availableGeo.height() * 3 / 4;
+    /* Try obtain the default width of the current logviewer: */
     const UIVMLogViewerWidget *pWidget = qobject_cast<const UIVMLogViewerWidget*>(widget());
-
-    /* Restore window geometry: */
-    const QRect desktopRect = gpDesktop->availableGeometry(this);
-    int iDefaultWidth = desktopRect.width() / 2;
-    int iDefaultHeight = desktopRect.height() * 3 / 4;
-
-    /* Try obtain the default width of the current logviewer: */
     if (pWidget)
     {
-        int iWidth =  pWidget->defaultLogPageWidth();
+        const int iWidth = pWidget->defaultLogPageWidth();
         if (iWidth != 0)
             iDefaultWidth = iWidth;
     }
-
-    QRect defaultGeometry(0, 0, iDefaultWidth, iDefaultHeight);
+    QRect defaultGeo(0, 0, iDefaultWidth, iDefaultHeight);
     if (centerWidget())
-        defaultGeometry.moveCenter(centerWidget()->geometry().center());
+        defaultGeo.moveCenter(centerWidget()->geometry().center());
+    else
+        defaultGeo.moveCenter(availableGeo.center());
 
     /* Load geometry from extradata: */
-    QRect geometry = gEDataManager->logWindowGeometry(this, defaultGeometry);
-
-    /* Restore geometry: */
-    LogRel2(("GUI: UIVMLogViewer: Restoring geometry to: Origin=%dx%d, Size=%dx%d\n",
-             geometry.x(), geometry.y(), geometry.width(), geometry.height()));
-    setDialogGeometry(geometry);
+    const QRect geo = gEDataManager->logWindowGeometry(this, defaultGeo);
+    LogRel2(("GUI: UIVMLogViewerDialog: Restoring geometry to: Origin=%dx%d, Size=%dx%d\n",
+             geo.x(), geo.y(), geo.width(), geo.height()));
+    restoreGeometry(geo);
 }
 
 void UIVMLogViewerDialog::saveSettings() const
 {
-    /* Save window geometry to extradata: */
-    const QRect saveGeometry = geometry();
-#ifdef VBOX_WS_MAC
-    /* darwinIsWindowMaximized expects a non-const QWidget*. thus const_cast: */
-    QWidget *pw = const_cast<QWidget*>(qobject_cast<const QWidget*>(this));
-    gEDataManager->setLogWindowGeometry(saveGeometry, ::darwinIsWindowMaximized(pw));
-#else /* !VBOX_WS_MAC */
-    gEDataManager->setLogWindowGeometry(saveGeometry, isMaximized());
-#endif /* !VBOX_WS_MAC */
-    LogRel2(("GUI: UIVMLogViewer: Geometry saved as: Origin=%dx%d, Size=%dx%d\n",
-             saveGeometry.x(), saveGeometry.y(), saveGeometry.width(), saveGeometry.height()));
+    /* Save geometry to extradata: */
+    const QRect geo = currentGeometry();
+    LogRel2(("GUI: UIVMLogViewerDialog: Saving geometry as: Origin=%dx%d, Size=%dx%d\n",
+             geo.x(), geo.y(), geo.width(), geo.height()));
+    gEDataManager->setLogWindowGeometry(geo, isCurrentlyMaximized());
 }
 
