From 605305341143de6c66fdac96e3cda4e7cf4b517d Mon Sep 17 00:00:00 2001 From: Brian Hinz Date: Wed, 16 May 2012 03:51:42 +0000 Subject: [PATCH] Adds support for setting the menu key via cmd line arg. Adds all menu keys supported by native viewer to the combo box in the OptionsDialog. git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4914 3789f03b-4d11-0410-bbf8-ca57d06f2519 --- java/com/tigervnc/vncviewer/CConn.java | 10 +-- .../com/tigervnc/vncviewer/DesktopWindow.java | 3 +- java/com/tigervnc/vncviewer/F8Menu.java | 6 +- .../com/tigervnc/vncviewer/OptionsDialog.java | 5 +- java/com/tigervnc/vncviewer/VncViewer.java | 9 +- java/com/tigervnc/vncviewer/menukey.java | 86 +++++++++++++++++++ 6 files changed, 102 insertions(+), 17 deletions(-) create mode 100644 java/com/tigervnc/vncviewer/menukey.java diff --git a/java/com/tigervnc/vncviewer/CConn.java b/java/com/tigervnc/vncviewer/CConn.java index 92781488..e3ab1763 100644 --- a/java/com/tigervnc/vncviewer/CConn.java +++ b/java/com/tigervnc/vncviewer/CConn.java @@ -165,7 +165,7 @@ public class CConn extends CConnection autoSelect = viewer.autoSelect.getValue(); formatChange = false; encodingChange = false; fullScreen = viewer.fullScreen.getValue(); - menuKey = Keysyms.F8; + menuKeyCode = menukey.getMenuKeyCode(); options = new OptionsDialog(this); options.initDialog(); clipboardDialog = new ClipboardDialog(this); @@ -876,7 +876,7 @@ public class CConn extends CConnection options.viewOnly.setSelected(viewer.viewOnly.getValue()); options.acceptClipboard.setSelected(viewer.acceptClipboard.getValue()); options.sendClipboard.setSelected(viewer.sendClipboard.getValue()); - options.menuKey.setSelectedIndex(menuKey-0xFFBE); + options.menuKey.setSelectedItem(KeyEvent.getKeyText(menukey.getMenuKeyCode())); if (state() == RFBSTATE_NORMAL) { options.shared.setEnabled(false); @@ -1073,8 +1073,8 @@ public class CConn extends CConnection } clipboardDialog.setSendingEnabled(viewer.sendClipboard.getValue()); - menuKey = (options.menuKey.getSelectedIndex()+0xFFBE); - F8Menu.f8.setText("Send F"+(menuKey-Keysyms.F1+1)); + viewer.menuKey.setParam(menukey.getMenuKeySymbols()[options.menuKey.getSelectedIndex()].name); + F8Menu.f8.setText("Send "+KeyEvent.getKeyText(menukey.getMenuKeyCode())); setShared(options.shared.isSelected()); viewer.useLocalCursor.setParam(options.useLocalCursor.isSelected()); @@ -1455,7 +1455,7 @@ public class CConn extends CConnection private boolean supportsSyncFence; - public int menuKey; + public int menuKeyCode; ViewportFrame viewport; private boolean fullColour; private boolean autoSelect; diff --git a/java/com/tigervnc/vncviewer/DesktopWindow.java b/java/com/tigervnc/vncviewer/DesktopWindow.java index 178f93d2..3ef25f3a 100644 --- a/java/com/tigervnc/vncviewer/DesktopWindow.java +++ b/java/com/tigervnc/vncviewer/DesktopWindow.java @@ -409,8 +409,7 @@ class DesktopWindow extends JPanel implements public void keyReleased(KeyEvent e) {} /** Handle the key-pressed event. */ public void keyPressed(KeyEvent e) { - if (e.getKeyCode() == - (KeyEvent.VK_F1+cc.menuKey-Keysyms.F1)) { + if (e.getKeyCode() == menukey.getMenuKeyCode()) { int sx = (scaleWidthRatio == 1.00) ? lastX : (int)Math.floor(lastX*scaleWidthRatio); int sy = (scaleHeightRatio == 1.00) diff --git a/java/com/tigervnc/vncviewer/F8Menu.java b/java/com/tigervnc/vncviewer/F8Menu.java index 6a06786e..ca09ac20 100644 --- a/java/com/tigervnc/vncviewer/F8Menu.java +++ b/java/com/tigervnc/vncviewer/F8Menu.java @@ -51,7 +51,7 @@ public class F8Menu extends JPopupMenu implements ActionListener { addSeparator(); clipboard = addMenuItem("Clipboard..."); addSeparator(); - f8 = addMenuItem("Send F"+(cc.menuKey-Keysyms.F1+1)); + f8 = addMenuItem("Send "+KeyEvent.getKeyText(menukey.getMenuKeyCode()), menukey.getMenuKeyCode()); ctrlAltDel = addMenuItem("Send Ctrl-Alt-Del"); addSeparator(); refresh = addMenuItem("Refresh Screen", KeyEvent.VK_H); @@ -100,8 +100,8 @@ public class F8Menu extends JPopupMenu implements ActionListener { } else if (actionMatch(ev, clipboard)) { cc.clipboardDialog.showDialog(cc.viewport); } else if (actionMatch(ev, f8)) { - cc.writeKeyEvent(cc.menuKey, true); - cc.writeKeyEvent(cc.menuKey, false); + cc.writeKeyEvent(cc.menuKeyCode, true); + cc.writeKeyEvent(cc.menuKeyCode, false); } else if (actionMatch(ev, ctrlAltDel)) { cc.writeKeyEvent(Keysyms.Control_L, true); cc.writeKeyEvent(Keysyms.Alt_L, true); diff --git a/java/com/tigervnc/vncviewer/OptionsDialog.java b/java/com/tigervnc/vncviewer/OptionsDialog.java index 8cf0b1b1..1be5ece8 100644 --- a/java/com/tigervnc/vncviewer/OptionsDialog.java +++ b/java/com/tigervnc/vncviewer/OptionsDialog.java @@ -132,8 +132,9 @@ class OptionsDialog extends Dialog implements sendClipboard = new JCheckBox("Send clipboard to server"); sendClipboard.addItemListener(this); JLabel menuKeyLabel = new JLabel("Menu Key"); - String[] menuKeys = - { "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12" }; + String[] menuKeys = new String[menukey.getMenuKeySymbolCount()]; + for (int i = 0; i < menukey.getMenuKeySymbolCount(); i++) + menuKeys[i] = KeyEvent.getKeyText(menukey.getMenuKeySymbols()[i].keycode); menuKey = new JComboBox(menuKeys); menuKey.addItemListener(this); addGBComponent(viewOnly,InputsPanel, 0, 0, 2, 1, 2, 2, 1, 0, GridBagConstraints.HORIZONTAL, GridBagConstraints.LINE_START, new Insets(4,5,0,5)); diff --git a/java/com/tigervnc/vncviewer/VncViewer.java b/java/com/tigervnc/vncviewer/VncViewer.java index e433bf9d..a15ee58e 100644 --- a/java/com/tigervnc/vncviewer/VncViewer.java +++ b/java/com/tigervnc/vncviewer/VncViewer.java @@ -445,11 +445,10 @@ public class VncViewer extends java.applet.Applet implements Runnable = new BoolParameter("SendClipboard", "Send clipboard changes to the server", true); - // FIXME - //StringParameter menuKey - //= new StringParameter("MenuKey", - // "The key which brings up the popup menu", - // "F8"); + StringParameter menuKey + = new StringParameter("MenuKey", + "The key which brings up the popup menu", + "F8"); StringParameter desktopSize = new StringParameter("DesktopSize", "Reconfigure desktop size on the server on "+ diff --git a/java/com/tigervnc/vncviewer/menukey.java b/java/com/tigervnc/vncviewer/menukey.java new file mode 100644 index 00000000..10f1d103 --- /dev/null +++ b/java/com/tigervnc/vncviewer/menukey.java @@ -0,0 +1,86 @@ +/* Copyright 2011 Martin Koegler + * Copyright 2011 Pierre Ossman for Cendio AB + * Copyright 2012 Brian P. Hinz + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + +package com.tigervnc.vncviewer; + +import java.awt.event.KeyEvent; + +import com.tigervnc.rfb.*; + +public class menukey +{ + static class MenuKeySymbol { + public MenuKeySymbol(String name_, int keycode_) { + name = name_; + keycode = keycode_; + } + String name; + int keycode; + } + + private static final MenuKeySymbol[] menuSymbols = { + new MenuKeySymbol("F1", KeyEvent.VK_F1), + new MenuKeySymbol("F2", KeyEvent.VK_F2), + new MenuKeySymbol("F3", KeyEvent.VK_F3), + new MenuKeySymbol("F4", KeyEvent.VK_F4), + new MenuKeySymbol("F5", KeyEvent.VK_F5), + new MenuKeySymbol("F6", KeyEvent.VK_F6), + new MenuKeySymbol("F7", KeyEvent.VK_F7), + new MenuKeySymbol("F8", KeyEvent.VK_F8), + new MenuKeySymbol("F9", KeyEvent.VK_F9), + new MenuKeySymbol("F10", KeyEvent.VK_F10), + new MenuKeySymbol("F11", KeyEvent.VK_F11), + new MenuKeySymbol("F12", KeyEvent.VK_F12), + new MenuKeySymbol("Pause", KeyEvent.VK_PAUSE), + new MenuKeySymbol("Print", KeyEvent.VK_PRINTSCREEN), + new MenuKeySymbol("Scroll_Lock", KeyEvent.VK_SCROLL_LOCK), + new MenuKeySymbol("Escape", KeyEvent.VK_ESCAPE), + new MenuKeySymbol("Insert", KeyEvent.VK_INSERT), + new MenuKeySymbol("Delete", KeyEvent.VK_DELETE), + new MenuKeySymbol("Home", KeyEvent.VK_HOME), + new MenuKeySymbol("Page_Up", KeyEvent.VK_PAGE_UP), + new MenuKeySymbol("Page_Down", KeyEvent.VK_PAGE_DOWN) + }; + + static int getMenuKeySymbolCount() + { + return menuSymbols.length; + } + + public static MenuKeySymbol[] getMenuKeySymbols() + { + return menuSymbols; + } + + static int getMenuKeyCode() + { + String menuKeyStr; + int menuKeyCode = KeyEvent.VK_F8; + + menuKeyStr = + Configuration.global().getParam("menuKey").getValueStr(); + for(int i = 0; i < getMenuKeySymbolCount(); i++) + if (menuSymbols[i].name.equals(menuKeyStr)) + menuKeyCode = menuSymbols[i].keycode; + + return menuKeyCode; + } + +} -- 2.39.5