]> source.dussan.org Git - tigervnc.git/commitdiff
Use std::list for server history
authorPierre Ossman <ossman@cendio.se>
Fri, 6 Sep 2024 14:29:25 +0000 (16:29 +0200)
committerPierre Ossman <ossman@cendio.se>
Fri, 6 Sep 2024 14:29:25 +0000 (16:29 +0200)
We don't need random access to the entries, so a list fits just as well.
It also has better accessors we need.

vncviewer/ServerDialog.cxx
vncviewer/ServerDialog.h
vncviewer/parameters.cxx
vncviewer/parameters.h

index e401c519bd6ee7531aa0798fdfa2441671848a8a..c5db8e1af0471db1295b89093081c11717d8ba97 100644 (file)
@@ -133,14 +133,12 @@ void ServerDialog::run(const char* servername, char *newservername)
   dialog.show();
 
   try {
-    size_t i;
-
     dialog.loadServerHistory();
 
     dialog.serverName->clear();
-    for(i = 0; i < dialog.serverHistory.size(); ++i)
+    for (const string& entry : dialog.serverHistory)
       fltk_menu_add(dialog.serverName->menubutton(),
-                    dialog.serverHistory[i].c_str(), 0, nullptr);
+                    entry.c_str(), 0, nullptr);
   } catch (Exception& e) {
     vlog.error("%s", e.str());
     fl_alert(_("Unable to load the server history:\n\n%s"),
@@ -295,7 +293,7 @@ void ServerDialog::handleConnect(Fl_Widget* /*widget*/, void *data)
   }
 
   try {
-    vector<string>::iterator elem = std::find(dialog->serverHistory.begin(), dialog->serverHistory.end(), servername);
+    list<string>::iterator elem = std::find(dialog->serverHistory.begin(), dialog->serverHistory.end(), servername);
     // avoid duplicates in the history
     if(dialog->serverHistory.end() == elem) {
       dialog->serverHistory.insert(dialog->serverHistory.begin(), servername);
@@ -314,7 +312,7 @@ void ServerDialog::loadServerHistory()
   serverHistory.clear();
 
 #ifdef _WIN32
-  loadHistoryFromRegKey(serverHistory);
+  serverHistory = loadHistoryFromRegKey();
   return;
 #endif
 
@@ -400,8 +398,12 @@ void ServerDialog::saveServerHistory()
   }
 
   // Save the last X elements to the config file.
-  for(size_t idx=0; idx < serverHistory.size() && idx <= SERVER_HISTORY_SIZE; idx++)
-    fprintf(f, "%s\n", serverHistory[idx].c_str());
+  size_t count = 0;
+  for (const string& entry : serverHistory) {
+    if (++count > SERVER_HISTORY_SIZE)
+      break;
+    fprintf(f, "%s\n", entry.c_str());
+  }
 
   fclose(f);
 }
index a76a58cf07793e9e5c049b8eb587a211a620d92e..de330b59dfc2c6e2539841c493d2cdc8223eb2ea 100644 (file)
@@ -21,7 +21,7 @@
 
 #include <FL/Fl_Window.H>
 #include <string>
-#include <vector>
+#include <list>
 
 class Fl_Widget;
 class Fl_Input_Choice;
@@ -49,7 +49,7 @@ private:
 
 protected:
   Fl_Input_Choice *serverName;
-  std::vector<std::string> serverHistory;
+  std::list<std::string> serverHistory;
   std::string usedDir;
 };
 
index e40391a2af2269b047947ec9da600e39143df260..4bbf7a7f20e7d56f4c8ae9526dcf9b22649b8925 100644 (file)
@@ -418,7 +418,7 @@ static void removeValue(const char* _name, HKEY* hKey) {
   }
 }
 
-void saveHistoryToRegKey(const vector<string>& serverHistory) {
+void saveHistoryToRegKey(const list<string>& serverHistory) {
   HKEY hKey;
   LONG res = RegCreateKeyExW(HKEY_CURRENT_USER,
                              L"Software\\TigerVNC\\vncviewer\\history", 0, nullptr,
@@ -433,9 +433,11 @@ void saveHistoryToRegKey(const vector<string>& serverHistory) {
   char indexString[3];
 
   try {
-    while(index < serverHistory.size() && index <= SERVER_HISTORY_SIZE) {
+    for (const string& entry : serverHistory) {
+      if (index > SERVER_HISTORY_SIZE)
+        break;
       snprintf(indexString, 3, "%d", index);
-      setKeyString(indexString, serverHistory[index].c_str(), &hKey);
+      setKeyString(indexString, entry.c_str(), &hKey);
       index++;
     }
   } catch (Exception& e) {
@@ -503,8 +505,9 @@ static void saveToReg(const char* servername) {
     throw rdr::SystemException(_("Failed to close registry key"), res);
 }
 
-void loadHistoryFromRegKey(vector<string>& serverHistory) {
+list<string> loadHistoryFromRegKey() {
   HKEY hKey;
+  list<string> serverHistory;
 
   LONG res = RegOpenKeyExW(HKEY_CURRENT_USER,
                            L"Software\\TigerVNC\\vncviewer\\history", 0,
@@ -512,7 +515,7 @@ void loadHistoryFromRegKey(vector<string>& serverHistory) {
   if (res != ERROR_SUCCESS) {
     if (res == ERROR_FILE_NOT_FOUND) {
       // The key does not exist, defaults will be used.
-      return;
+      return serverHistory;
     }
 
     throw rdr::SystemException(_("Failed to open registry key"), res);
@@ -543,6 +546,8 @@ void loadHistoryFromRegKey(vector<string>& serverHistory) {
   res = RegCloseKey(hKey);
   if (res != ERROR_SUCCESS)
     throw rdr::SystemException(_("Failed to close registry key"), res);
+
+  return serverHistory;
 }
 
 static void getParametersFromReg(VoidParameter* parameters[],
index df7bc420590665276c24c2e41b549649c6da2d8d..a25c932d95dcf03bb992dc8980b3dc91b4227898 100644 (file)
@@ -24,7 +24,7 @@
 #include "MonitorIndicesParameter.h"
 
 #ifdef _WIN32
-#include <vector>
+#include <list>
 #include <string>
 #endif
 
@@ -84,8 +84,8 @@ void saveViewerParameters(const char *filename, const char *servername=nullptr);
 char* loadViewerParameters(const char *filename);
 
 #ifdef _WIN32
-void loadHistoryFromRegKey(std::vector<std::string>& serverHistory);
-void saveHistoryToRegKey(const std::vector<std::string>& serverHistory);
+std::list<std::string> loadHistoryFromRegKey();
+void saveHistoryToRegKey(const std::list<std::string>& serverHistory);
 #endif
 
 #endif