Commit abf62421 authored by Ulrich Sibiller's avatar Ulrich Sibiller

Keystroke.c: add new keystroke to reread keystroke config

Default is ctrl-alt-k
parent aadcac45
......@@ -92,6 +92,10 @@ viewport_move_right
Moves the image viewport to the right.
viewport_move_down
Moves the image viewport down.
reread_keystrokes
forces nxagent to re-read the keystroke
configuration. Useful to add/changes keystrokes for a running
session.
Only in builds with certain debugging options enabled, ignored otherwise:
force_synchronization
......
......@@ -16,4 +16,5 @@
<keystroke action="viewport_move_up" Control="1" AltMeta="1" key="Up" />
<keystroke action="viewport_move_right" Control="1" AltMeta="1" key="Right" />
<keystroke action="viewport_move_down" Control="1" AltMeta="1" key="Down" />
<keystroke action="reread_keystrokes" Control="1" AltMeta="1" key="k" />
</keystrokes>
......@@ -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:
......
......@@ -64,12 +64,14 @@ enum nxagentSpecialKeystroke {
KEYSTROKE_VIEWPORT_MOVE_RIGHT = 19,
KEYSTROKE_VIEWPORT_MOVE_DOWN = 20,
KEYSTROKE_NOTHING = 21,
KEYSTROKE_REREAD_KEYSTROKES = 21,
KEYSTROKE_NOTHING = 22,
/* insert more here, increment KEYSTROKE_MAX accordingly.
* then update string translation below */
KEYSTROKE_MAX = 22,
KEYSTROKE_MAX = 23,
};
struct nxagentSpecialKeystrokeMap {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment