aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/programs/Xserver/hw/nxagent/Keystroke.c
diff options
context:
space:
mode:
authorUlrich Sibiller <uli42@gmx.de>2017-03-13 22:00:23 +0100
committerUlrich Sibiller <uli42@gmx.de>2017-03-13 22:17:42 +0100
commitabf6242128394aa2374f3882252dfc84d4499c33 (patch)
treed49003d2c7f49f0eee4a4cb47d0917f9e2ca2555 /nx-X11/programs/Xserver/hw/nxagent/Keystroke.c
parentaadcac452379ae0da59f1a16c60189a69ef822d6 (diff)
downloadnx-libs-abf6242128394aa2374f3882252dfc84d4499c33.tar.gz
nx-libs-abf6242128394aa2374f3882252dfc84d4499c33.tar.bz2
nx-libs-abf6242128394aa2374f3882252dfc84d4499c33.zip
Keystroke.c: add new keystroke to reread keystroke config
Default is ctrl-alt-k
Diffstat (limited to 'nx-X11/programs/Xserver/hw/nxagent/Keystroke.c')
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Keystroke.c34
1 files changed, 30 insertions, 4 deletions
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Keystroke.c b/nx-X11/programs/Xserver/hw/nxagent/Keystroke.c
index e0f8925fb..bb8d83f66 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Keystroke.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Keystroke.c
@@ -89,6 +89,8 @@ char * nxagentSpecialKeystrokeNames[] = {
"viewport_move_up",
"viewport_move_right",
"viewport_move_down",
+
+ "reread_keystrokes",
NULL,
};
@@ -134,6 +136,7 @@ struct nxagentSpecialKeystrokeMap default_map[] = {
{KEYSTROKE_VIEWPORT_MOVE_RIGHT, ControlMask | ShiftMask, True, XK_KP_Right},
{KEYSTROKE_VIEWPORT_MOVE_DOWN, ControlMask | ShiftMask, True, XK_Down},
{KEYSTROKE_VIEWPORT_MOVE_DOWN, ControlMask | ShiftMask, True, XK_KP_Down},
+ {KEYSTROKE_REREAD_KEYSTROKES, ControlMask, True, XK_k},
{KEYSTROKE_END_MARKER, 0, False, NoSymbol},
};
struct nxagentSpecialKeystrokeMap *map = default_map;
@@ -247,7 +250,7 @@ static Bool read_binding_from_xmlnode(xmlNode *node, struct nxagentSpecialKeystr
* - hardcoded traditional NX default settings
* If run in x2go flavour different filenames and varnames are used.
*/
-static void parse_keystroke_file(void)
+static void parse_keystroke_file(Bool force)
{
char *filename = NULL;
@@ -258,8 +261,21 @@ static void parse_keystroke_file(void)
/* used for tracking if the config file parsing has already been
done (regardless of the result) */
static Bool done = False;
- if (done)
- return;
+
+ if (force) {
+ if (map != default_map)
+ {
+ free(map);
+ map = default_map;
+ }
+ fprintf(stderr, "re-reading keystroke config\n");
+ }
+ else
+ {
+ if (done)
+ return;
+ }
+
done = True;
if (nxagentX2go) {
@@ -392,7 +408,7 @@ static enum nxagentSpecialKeystroke find_keystroke(XKeyEvent *X)
/* FIXME: we do late parsing here, this should be done at startup,
not at first keypress! */
- parse_keystroke_file();
+ parse_keystroke_file(False);
cur = map;
@@ -573,6 +589,16 @@ Bool nxagentCheckSpecialKeystroke(XKeyEvent *X, enum HandleEventResult *result)
*result = doViewportMoveDown;
}
break;
+ case KEYSTROKE_REREAD_KEYSTROKES:
+ /* two reasons to check on KeyRelease:
+ - this code is called for KeyPress and KeyRelease, so we
+ would read the keystroke file twice
+ - if the keystroke file changes settings for this key this
+ might lead to unexpected behaviour
+ */
+ if (X->type == KeyRelease)
+ parse_keystroke_file(True);
+ break;
case KEYSTROKE_NOTHING: /* do nothing. difference to KEYSTROKE_IGNORE is the return value */
case KEYSTROKE_END_MARKER: /* just to make gcc STFU */
case KEYSTROKE_MAX: