]> source.dussan.org Git - tigervnc.git/commitdiff
Disable entries instead of shuffling memory around
authorPierre Ossman <ossman@cendio.se>
Fri, 20 Feb 2015 16:34:49 +0000 (17:34 +0100)
committerPierre Ossman <ossman@cendio.se>
Fri, 20 Feb 2015 16:35:56 +0000 (17:35 +0100)
Less risk for bugs this way.

vncviewer/Viewport.cxx

index 918730e683d36b13718b57017eb876635f7b6ade..463523f5edaf35cd30121bb61f1f344d1100beab 100644 (file)
@@ -1109,31 +1109,20 @@ void Viewport::initContextMenu()
       if (menuAltKey)
         items[i].flags |= FL_MENU_VALUE;
       break;
+    case ID_MENUKEY:
+      // The menu key needs to have its fields updated, or the entries hidden
+      if (!menuKeySym)
+        items[i].flags |= FL_MENU_INACTIVE | FL_MENU_INVISIBLE;
+      else if (!(items[i].flags & FL_MENU_INVISIBLE)) {
+        char sendMenuKey[64];
+        snprintf(sendMenuKey, 64, _("Send %s"), (const char *)menuKey);
+        free((void*)items[i].text);
+        items[i].text = strdup(sendMenuKey);
+      }
+      break;
     }
   }
 
-  // The menu key needs to have its fields updated, or the entries removed
-  for (i = 0;i < sizeof(items)/sizeof(items[0]);i++) {
-    char sendMenuKey[64];
-
-    if ((intptr_t)items[i].user_data_ != ID_MENUKEY)
-      continue;
-
-    if (!menuKeySym) {
-      memmove(items + i, items + i + 1,
-              sizeof(items) - (sizeof(items[0]) * (i+1)));
-      i--;
-      continue;
-    }
-
-    if (items[i].flags & FL_MENU_INVISIBLE)
-      continue;
-
-    snprintf(sendMenuKey, 64, _("Send %s"), (const char *)menuKey);
-    free((void*)items[i].text);
-    items[i].text = strdup(sendMenuKey);
-  }
-
   contextMenu->copy(items);
 }