#include <assert.h>
#include <stdio.h>
#include <string.h>
-#include <stdint.h>
#include <rfb/CMsgWriter.h>
#include <rfb/LogWriter.h>
void Viewport::initContextMenu()
{
- size_t i;
- Fl_Menu_Item items[] = {
- { strdup(_("E&xit viewer")), 0, NULL, (void*)ID_EXIT, FL_MENU_DIVIDER },
+ contextMenu->clear();
+
+ contextMenu->add(_("E&xit viewer"), 0, NULL, (void*)ID_EXIT, FL_MENU_DIVIDER);
#ifdef HAVE_FLTK_FULLSCREEN
- { strdup(_("&Full screen")), 0, NULL, (void*)ID_FULLSCREEN, FL_MENU_TOGGLE },
+ contextMenu->add(_("&Full screen"), 0, NULL, (void*)ID_FULLSCREEN,
+ FL_MENU_TOGGLE | (window()->fullscreen_active()?FL_MENU_VALUE:0));
#endif
- { strdup(_("Resize &window to session")), 0, NULL, (void*)ID_RESIZE, FL_MENU_DIVIDER },
-
- { strdup(_("&Ctrl")), 0, NULL, (void*)ID_CTRL, FL_MENU_TOGGLE },
- { strdup(_("&Alt")), 0, NULL, (void*)ID_ALT, FL_MENU_TOGGLE },
-
- { strdup("Menu key"), 0, NULL, (void*)ID_MENUKEY, 0 },
- { strdup("Secret shortcut menu key"), menuKeyCode, NULL, (void*)ID_MENUKEY, FL_MENU_INVISIBLE },
- { strdup(_("Send Ctrl-Alt-&Del")), 0, NULL, (void*)ID_CTRLALTDEL, FL_MENU_DIVIDER },
-
- { strdup(_("&Refresh screen")), 0, NULL, (void*)ID_REFRESH, FL_MENU_DIVIDER },
-
- { strdup(_("&Options...")), 0, NULL, (void*)ID_OPTIONS, 0 },
- { strdup(_("Connection &info...")), 0, NULL, (void*)ID_INFO, 0 },
- { strdup(_("About &TigerVNC viewer...")), 0, NULL, (void*)ID_ABOUT, FL_MENU_DIVIDER },
-
- { strdup(_("Dismiss &menu")), 0, NULL, (void*)ID_DISMISS, 0 },
-
- {0}
- };
-
- // Update any state
- for (i = 0;i < sizeof(items)/sizeof(items[0]);i++) {
- switch ((intptr_t)items[i].user_data_) {
+ contextMenu->add(_("Resize &window to session"), 0, NULL, (void*)ID_RESIZE,
#ifdef HAVE_FLTK_FULLSCREEN
- case ID_FULLSCREEN:
- if (window()->fullscreen_active())
- items[i].flags |= FL_MENU_VALUE;
- break;
- case ID_RESIZE:
- if (window()->fullscreen_active())
- items[i].flags |= FL_MENU_INACTIVE;
- break;
+ (window()->fullscreen_active()?FL_MENU_INACTIVE:0) |
#endif
- case ID_CTRL:
- if (menuCtrlKey)
- items[i].flags |= FL_MENU_VALUE;
- break;
- case ID_ALT:
- 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;
- }
+ FL_MENU_DIVIDER);
+
+ contextMenu->add(_("&Ctrl"), 0, NULL, (void*)ID_CTRL,
+ FL_MENU_TOGGLE | (menuCtrlKey?FL_MENU_VALUE:0));
+ contextMenu->add(_("&Alt"), 0, NULL, (void*)ID_ALT,
+ FL_MENU_TOGGLE | (menuAltKey?FL_MENU_VALUE:0));
+
+ if (menuKeySym) {
+ char sendMenuKey[64];
+ snprintf(sendMenuKey, 64, _("Send %s"), (const char *)menuKey);
+ contextMenu->add(sendMenuKey, 0, NULL, (void*)ID_MENUKEY, 0);
+ contextMenu->add("Secret shortcut menu key", menuKeyCode, NULL, (void*)ID_MENUKEY, FL_MENU_INVISIBLE);
}
- contextMenu->copy(items);
+ contextMenu->add(_("Send Ctrl-Alt-&Del"), 0, NULL, (void*)ID_CTRLALTDEL, FL_MENU_DIVIDER);
+
+ contextMenu->add(_("&Refresh screen"), 0, NULL, (void*)ID_REFRESH, FL_MENU_DIVIDER);
+
+ contextMenu->add(_("&Options..."), 0, NULL, (void*)ID_OPTIONS, 0);
+ contextMenu->add(_("Connection &info..."), 0, NULL, (void*)ID_INFO, 0);
+ contextMenu->add(_("About &TigerVNC viewer..."), 0, NULL, (void*)ID_ABOUT, FL_MENU_DIVIDER);
+
+ contextMenu->add(_("Dismiss &menu"), 0, NULL, (void*)ID_DISMISS, 0);
}