VirtualBox

Changeset 109117 in vbox


Ignore:
Timestamp:
Apr 30, 2025 11:09:55 AM (9 days ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
168667
Message:

FE/Qt: bugref:8837: VBox Manager / Chooser pane: Cache context-menu contents so that we updating them only in case if experience mode really changed.

Location:
trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.cpp

    r109115 r109117  
    12351235}
    12361236
     1237void UIChooserModel::sltHandleSettingsExpertModeChange()
     1238{
     1239    /* Invalidate local and cloud machine context-menus (we are reseting property values): */
     1240    m_localMenus.value(UIChooserNodeType_Machine)->setProperty("is_valid", QVariant());
     1241    m_cloudMenus.value(UIChooserNodeType_Machine)->setProperty("is_valid", QVariant());
     1242}
     1243
    12371244void UIChooserModel::sltUpdateContextMenu()
    12381245{
     
    12491256            case UIChooserNodeType_Group:
    12501257            {
    1251                 pMenu->clear();
    1252                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_S_New));
    1253                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_S_Add));
    1254                 pMenu->addSeparator();
    1255                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_S_Rename));
    1256                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_S_Remove));
    1257                 pMenu->addMenu(actionPool()->action(UIActionIndexMN_M_Group_M_MoveToGroup)->menu());
    1258                 pMenu->addSeparator();
    1259                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_M_StartOrShow));
    1260                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_T_Pause));
    1261                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_S_Reset));
    1262                 // pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_S_Detach));
    1263                 pMenu->addMenu(actionPool()->action(UIActionIndexMN_M_Group_M_Stop)->menu());
    1264                 pMenu->addSeparator();
    1265                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_S_Discard));
    1266                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_S_Refresh));
    1267                 pMenu->addSeparator();
    1268                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_S_ShowInFileManager));
    1269                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_S_CreateShortcut));
    1270                 pMenu->addSeparator();
    1271                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_S_Sort));
    1272                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_T_Search));
     1258                if (!pMenu->property("is_valid").toBool())
     1259                {
     1260                    pMenu->clear();
     1261                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_S_New));
     1262                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_S_Add));
     1263                    pMenu->addSeparator();
     1264                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_S_Rename));
     1265                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_S_Remove));
     1266                    pMenu->addMenu(actionPool()->action(UIActionIndexMN_M_Group_M_MoveToGroup)->menu());
     1267                    pMenu->addSeparator();
     1268                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_M_StartOrShow));
     1269                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_T_Pause));
     1270                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_S_Reset));
     1271                    // pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_S_Detach));
     1272                    pMenu->addMenu(actionPool()->action(UIActionIndexMN_M_Group_M_Stop)->menu());
     1273                    pMenu->addSeparator();
     1274                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_S_Discard));
     1275                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_S_Refresh));
     1276                    pMenu->addSeparator();
     1277                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_S_ShowInFileManager));
     1278                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_S_CreateShortcut));
     1279                    pMenu->addSeparator();
     1280                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_S_Sort));
     1281                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_T_Search));
     1282                    pMenu->setProperty("is_valid", true);
     1283                }
    12731284                break;
    12741285            }
    12751286            case UIChooserNodeType_Machine:
    12761287            {
    1277                 pMenu->clear();
    1278                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_S_Settings));
    1279                 if (gEDataManager->isSettingsInExpertMode())
     1288                if (!pMenu->property("is_valid").toBool())
    12801289                {
    1281                     pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_S_Clone));
    1282                     pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_S_Move));
     1290                    pMenu->clear();
     1291                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_S_Settings));
     1292                    if (gEDataManager->isSettingsInExpertMode())
     1293                    {
     1294                        pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_S_Clone));
     1295                        pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_S_Move));
     1296                    }
     1297                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_S_ExportToOCI));
     1298                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_S_Remove));
     1299                    pMenu->addMenu(actionPool()->action(UIActionIndexMN_M_Machine_M_MoveToGroup)->menu());
     1300                    pMenu->addSeparator();
     1301                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_M_StartOrShow));
     1302                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_T_Pause));
     1303                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_S_Reset));
     1304                    // pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_S_Detach));
     1305                    pMenu->addMenu(actionPool()->action(UIActionIndexMN_M_Machine_M_Stop)->menu());
     1306                    pMenu->addSeparator();
     1307                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_S_Discard));
     1308                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_S_Refresh));
     1309                    pMenu->addSeparator();
     1310                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_S_ShowInFileManager));
     1311                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_S_CreateShortcut));
     1312                    pMenu->addSeparator();
     1313                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_S_SortParent));
     1314                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_T_Search));
     1315                    pMenu->setProperty("is_valid", true);
    12831316                }
    1284                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_S_ExportToOCI));
    1285                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_S_Remove));
    1286                 pMenu->addMenu(actionPool()->action(UIActionIndexMN_M_Machine_M_MoveToGroup)->menu());
    1287                 pMenu->addSeparator();
    1288                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_M_StartOrShow));
    1289                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_T_Pause));
    1290                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_S_Reset));
    1291                 // pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_S_Detach));
    1292                 pMenu->addMenu(actionPool()->action(UIActionIndexMN_M_Machine_M_Stop)->menu());
    1293                 pMenu->addSeparator();
    1294                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_S_Discard));
    1295                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_S_Refresh));
    1296                 pMenu->addSeparator();
    1297                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_S_ShowInFileManager));
    1298                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_S_CreateShortcut));
    1299                 pMenu->addSeparator();
    1300                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_S_SortParent));
    1301                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_T_Search));
    13021317                break;
    13031318            }
     
    13171332            case UIChooserNodeType_Group:
    13181333            {
    1319                 pMenu->clear();
    1320                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_S_New));
    1321                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_S_Add));
    1322                 pMenu->addSeparator();
    1323                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_M_StartOrShow));
    1324                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_S_Reset));
    1325                 pMenu->addMenu(actionPool()->action(UIActionIndexMN_M_Group_M_Console)->menu());
    1326                 pMenu->addMenu(actionPool()->action(UIActionIndexMN_M_Group_M_Stop)->menu());
    1327                 pMenu->addSeparator();
    1328                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_S_Refresh));
    1329                 pMenu->addSeparator();
    1330                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_S_Sort));
    1331                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_T_Search));
     1334                if (!pMenu->property("is_valid").toBool())
     1335                {
     1336                    pMenu->clear();
     1337                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_S_New));
     1338                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_S_Add));
     1339                    pMenu->addSeparator();
     1340                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_M_StartOrShow));
     1341                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_S_Reset));
     1342                    pMenu->addMenu(actionPool()->action(UIActionIndexMN_M_Group_M_Console)->menu());
     1343                    pMenu->addMenu(actionPool()->action(UIActionIndexMN_M_Group_M_Stop)->menu());
     1344                    pMenu->addSeparator();
     1345                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_S_Refresh));
     1346                    pMenu->addSeparator();
     1347                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_S_Sort));
     1348                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Group_T_Search));
     1349                    pMenu->setProperty("is_valid", true);
     1350                }
    13321351                break;
    13331352            }
    13341353            case UIChooserNodeType_Machine:
    13351354            {
    1336                 pMenu->clear();
    1337                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_S_Settings));
    1338                 if (gEDataManager->isSettingsInExpertMode())
    1339                     pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_S_Clone));
    1340                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_S_Remove));
    1341                 pMenu->addSeparator();
    1342                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_M_StartOrShow));
    1343                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_S_Reset));
    1344                 pMenu->addMenu(actionPool()->action(UIActionIndexMN_M_Machine_M_Console)->menu());
    1345                 pMenu->addMenu(actionPool()->action(UIActionIndexMN_M_Machine_M_Stop)->menu());
    1346                 pMenu->addSeparator();
    1347                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_S_Refresh));
    1348                 pMenu->addSeparator();
    1349                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_S_SortParent));
    1350                 pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_T_Search));
     1355                if (!pMenu->property("is_valid").toBool())
     1356                {
     1357                    pMenu->clear();
     1358                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_S_Settings));
     1359                    if (gEDataManager->isSettingsInExpertMode())
     1360                        pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_S_Clone));
     1361                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_S_Remove));
     1362                    pMenu->addSeparator();
     1363                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_M_StartOrShow));
     1364                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_S_Reset));
     1365                    pMenu->addMenu(actionPool()->action(UIActionIndexMN_M_Machine_M_Console)->menu());
     1366                    pMenu->addMenu(actionPool()->action(UIActionIndexMN_M_Machine_M_Stop)->menu());
     1367                    pMenu->addSeparator();
     1368                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_S_Refresh));
     1369                    pMenu->addSeparator();
     1370                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_S_SortParent));
     1371                    pMenu->addAction(actionPool()->action(UIActionIndexMN_M_Machine_T_Search));
     1372                    pMenu->setProperty("is_valid", true);
     1373                }
    13511374                break;
    13521375            }
     
    15711594void UIChooserModel::prepareConnections()
    15721595{
     1596    connect(gEDataManager, &UIExtraDataManager::sigSettingsExpertModeChange,
     1597            this, &UIChooserModel::sltHandleSettingsExpertModeChange);
    15731598    connect(this, &UIChooserModel::sigSelectionChanged,
    15741599            this, &UIChooserModel::sltUpdateSelectedCloudProfiles);
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.h

    r109115 r109117  
    320320    /** @name General stuff.
    321321      * @{ */
     322        /** Handles signal about experience-mode being changed. */
     323        void sltHandleSettingsExpertModeChange();
     324
    322325        /** Handles signal about context-menu being shown. */
    323326        void sltUpdateContextMenu();
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