Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManagerWidget.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManagerWidget.cpp	(revision 88519)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManagerWidget.cpp	(revision 88520)
@@ -5,5 +5,5 @@
 
 /*
- * Copyright (C) 2006-2020 Oracle Corporation
+ * Copyright (C) 2006-2021 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -20,4 +20,5 @@
 #include <QStackedWidget>
 #include <QStyle>
+#include <QTimer>
 #include <QToolButton>
 #include <QVBoxLayout>
@@ -54,4 +55,5 @@
     , m_enmSelectionType(SelectionType_Invalid)
     , m_fSelectedMachineItemAccessible(false)
+    , m_pSplitterSettingsSaveTimer(0)
 {
     prepare();
@@ -282,11 +284,8 @@
     /* Add 'Show Toolbar Text' action: */
     QAction *pShowToolBarText = new QAction(UIVirtualBoxManager::tr("Show Toolbar Text"), 0);
-    AssertPtrReturnVoid(pShowToolBarText);
-    {
-        /* Configure action: */
+    if (pShowToolBarText)
+    {
         pShowToolBarText->setCheckable(true);
         pShowToolBarText->setChecked(m_pToolBar->toolButtonStyle() == Qt::ToolButtonTextUnderIcon);
-
-        /* Add into action list: */
         actions << pShowToolBarText;
     }
@@ -294,5 +293,5 @@
     /* Prepare the menu position: */
     QPoint globalPosition = position;
-    QWidget *pSender = static_cast<QWidget*>(sender());
+    QWidget *pSender = qobject_cast<QWidget*>(sender());
     if (pSender)
         globalPosition = pSender->mapToGlobal(position);
@@ -307,4 +306,5 @@
                                        ? Qt::ToolButtonTextUnderIcon
                                        : Qt::ToolButtonIconOnly);
+        gEDataManager->setSelectorWindowToolBarTextVisible(pResult->isChecked());
     }
 }
@@ -330,4 +330,30 @@
     if (isMachineItemSelected() || isGroupItemSelected())
         recacheCurrentItemInformation();
+}
+
+void UIVirtualBoxManagerWidget::sltHandleSplitterMove()
+{
+    /* Create timer if isn't exist already: */
+    if (!m_pSplitterSettingsSaveTimer)
+    {
+        m_pSplitterSettingsSaveTimer = new QTimer(this);
+        if (m_pSplitterSettingsSaveTimer)
+        {
+            m_pSplitterSettingsSaveTimer->setInterval(300);
+            m_pSplitterSettingsSaveTimer->setSingleShot(true);
+            connect(m_pSplitterSettingsSaveTimer, &QTimer::timeout,
+                    this, &UIVirtualBoxManagerWidget::sltSaveSplitterSettings);
+        }
+    }
+    /* [Re]start timer finally: */
+    m_pSplitterSettingsSaveTimer->start();
+}
+
+void UIVirtualBoxManagerWidget::sltSaveSplitterSettings()
+{
+    const QList<int> splitterSizes = m_pSplitter->sizes();
+    LogRel2(("GUI: UIVirtualBoxManagerWidget: Saving splitter as: Size=%d,%d\n",
+             splitterSizes.at(0), splitterSizes.at(1)));
+    gEDataManager->setSelectorWindowSplitterHints(splitterSizes);
 }
 
@@ -603,5 +629,5 @@
 #endif
 
-                        /* Add tool-bar into layout: */
+                        /* Add toolbar into layout: */
                         pLayoutRight->addWidget(m_pToolBar);
                     }
@@ -703,4 +729,8 @@
     connect(gVBoxEvents, &UIVirtualBoxEventHandler::sigMachineStateChange,
             this, &UIVirtualBoxManagerWidget::sltHandleStateChange);
+
+    /* Splitter connections: */
+    connect(m_pSplitter, &QISplitter::splitterMoved,
+            this, &UIVirtualBoxManagerWidget::sltHandleSplitterMove);
 
     /* Tool-bar connections: */
@@ -747,14 +777,13 @@
     /* Restore splitter handle position: */
     {
-        /* Read splitter hints: */
         QList<int> sizes = gEDataManager->selectorWindowSplitterHints();
         /* If both hints are zero, we have the 'default' case: */
-        if (sizes[0] == 0 && sizes[1] == 0)
+        if (sizes.at(0) == 0 && sizes.at(1) == 0)
         {
-            /* Propose some 'default' based on current dialog width: */
             sizes[0] = (int)(width() * .9 * (1.0 / 3));
             sizes[1] = (int)(width() * .9 * (2.0 / 3));
         }
-        /* Pass hints to the splitter: */
+        LogRel2(("GUI: UIVirtualBoxManagerWidget: Restoring splitter to: Size=%d,%d\n",
+                 sizes.at(0), sizes.at(1)));
         m_pSplitter->setSizes(sizes);
     }
@@ -969,18 +998,4 @@
 }
 
-void UIVirtualBoxManagerWidget::saveSettings()
-{
-    /* Save toolbar visibility: */
-    {
-        gEDataManager->setSelectorWindowToolBarVisible(!m_pToolBar->isHidden());
-        gEDataManager->setSelectorWindowToolBarTextVisible(m_pToolBar->toolButtonStyle() == Qt::ToolButtonTextUnderIcon);
-    }
-
-    /* Save splitter handle position: */
-    {
-        gEDataManager->setSelectorWindowSplitterHints(m_pSplitter->sizes());
-    }
-}
-
 void UIVirtualBoxManagerWidget::cleanupConnections()
 {
@@ -1026,7 +1041,4 @@
 void UIVirtualBoxManagerWidget::cleanup()
 {
-    /* Save settings: */
-    saveSettings();
-
     /* Cleanup everything: */
     cleanupConnections();
Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManagerWidget.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManagerWidget.h	(revision 88519)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManagerWidget.h	(revision 88520)
@@ -5,5 +5,5 @@
 
 /*
- * Copyright (C) 2006-2020 Oracle Corporation
+ * Copyright (C) 2006-2021 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -33,9 +33,10 @@
 /* Forward declarations: */
 class QStackedWidget;
+class QTimer;
 class QISplitter;
+class QIToolBar;
 class UIActionPool;
 class UIChooser;
 class UITabBar;
-class QIToolBar;
 class UITools;
 class UIVirtualBoxManager;
@@ -241,4 +242,12 @@
     /** @} */
 
+    /** @name Splitter stuff.
+      * @{ */
+        /** Handles signal about splitter move. */
+        void sltHandleSplitterMove();
+        /** Handles request to save splitter settings. */
+        void sltSaveSplitterSettings();
+    /** @} */
+
     /** @name Tool-bar stuff.
       * @{ */
@@ -295,6 +304,4 @@
         void updateToolbar();
 
-        /** Saves settings. */
-        void saveSettings();
         /** Cleanups connections. */
         void cleanupConnections();
@@ -336,4 +343,7 @@
     /** Holds whether the last selected item was accessible. */
     bool           m_fSelectedMachineItemAccessible;
+
+    /** Holds the splitter settings save timer. */
+    QTimer *m_pSplitterSettingsSaveTimer;
 };
 
