summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Adam <thomas@xteddy.org>2020-02-19 16:01:27 +0000
committerThomas Adam <thomas@xteddy.org>2020-02-19 16:01:27 +0000
commitba542e42b7a62ee4b205550d5da7fdfcd77fefa7 (patch)
treeeaa0dd4bc15201cbfd38952931898844fe9dce9c
parent22e9cf04cafeb18c88ef1232d63dff5b5173abac (diff)
parentb20753f2a302d07829549dfbd249bd210374fec4 (diff)
Merge branch 'obsd-master'
-rw-r--r--key-string.c126
-rw-r--r--server-client.c8
2 files changed, 84 insertions, 50 deletions
diff --git a/key-string.c b/key-string.c
index 0505623e..d2b31e03 100644
--- a/key-string.c
+++ b/key-string.c
@@ -242,53 +242,90 @@ key_string_lookup_string(const char *string)
const char *
key_string_lookup_key(key_code key)
{
- static char out[32];
- char tmp[8];
- u_int i;
- struct utf8_data ud;
- size_t off;
+ static char out[32];
+ char tmp[8];
+ const char *s;
+ u_int i;
+ struct utf8_data ud;
+ size_t off;
*out = '\0';
+ /* Literal keys are themselves. */
+ if (key & KEYC_LITERAL) {
+ snprintf(out, sizeof out, "%c", (int)(key & 0xff));
+ return (out);
+ }
+
+ /* Fill in the modifiers. */
+ if (key & KEYC_CTRL)
+ strlcat(out, "C-", sizeof out);
+ if (key & KEYC_ESCAPE)
+ strlcat(out, "M-", sizeof out);
+ if (key & KEYC_SHIFT)
+ strlcat(out, "S-", sizeof out);
+ key &= KEYC_MASK_KEY;
+
/* Handle no key. */
if (key == KEYC_NONE)
return ("None");
/* Handle special keys. */
- if (key == KEYC_UNKNOWN)
- return ("Unknown");
- if (key == KEYC_ANY)
- return ("Any");
- if (key == KEYC_FOCUS_IN)
- return ("FocusIn");
- if (key == KEYC_FOCUS_OUT)
- return ("FocusOut");
- if (key == KEYC_PASTE_START)
- return ("PasteStart");
- if (key == KEYC_PASTE_END)
- return ("PasteEnd");
- if (key == KEYC_MOUSE)
- return ("Mouse");
- if (key == KEYC_DRAGGING)
- return ("Dragging");
- if (key == KEYC_MOUSEMOVE_PANE)
- return ("MouseMovePane");
- if (key == KEYC_MOUSEMOVE_STATUS)
- return ("MouseMoveStatus");
- if (key == KEYC_MOUSEMOVE_STATUS_LEFT)
- return ("MouseMoveStatusLeft");
- if (key == KEYC_MOUSEMOVE_STATUS_RIGHT)
- return ("MouseMoveStatusRight");
- if (key == KEYC_MOUSEMOVE_BORDER)
- return ("MouseMoveBorder");
- if (key >= KEYC_USER && key < KEYC_USER + KEYC_NUSER) {
- snprintf(out, sizeof out, "User%u", (u_int)(key - KEYC_USER));
- return (out);
+ if (key == KEYC_UNKNOWN) {
+ s = "Unknown";
+ goto append;
}
-
- /* Literal keys are themselves. */
- if (key & KEYC_LITERAL) {
- snprintf(out, sizeof out, "%c", (int)(key & 0xff));
+ if (key == KEYC_ANY) {
+ s = "Any";
+ goto append;
+ }
+ if (key == KEYC_FOCUS_IN) {
+ s = "FocusIn";
+ goto append;
+ }
+ if (key == KEYC_FOCUS_OUT) {
+ s = "FocusOut";
+ goto append;
+ }
+ if (key == KEYC_PASTE_START) {
+ s = "PasteStart";
+ goto append;
+ }
+ if (key == KEYC_PASTE_END) {
+ s = "PasteEnd";
+ goto append;
+ }
+ if (key == KEYC_MOUSE) {
+ s = "Mouse";
+ goto append;
+ }
+ if (key == KEYC_DRAGGING) {
+ s = "Dragging";
+ goto append;
+ }
+ if (key == KEYC_MOUSEMOVE_PANE) {
+ s = "MouseMovePane";
+ goto append;
+ }
+ if (key == KEYC_MOUSEMOVE_STATUS) {
+ s = "MouseMoveStatus";
+ goto append;
+ }
+ if (key == KEYC_MOUSEMOVE_STATUS_LEFT) {
+ s = "MouseMoveStatusLeft";
+ goto append;
+ }
+ if (key == KEYC_MOUSEMOVE_STATUS_RIGHT) {
+ s = "MouseMoveStatusRight";
+ goto append;
+ }
+ if (key == KEYC_MOUSEMOVE_BORDER) {
+ s = "MouseMoveBorder";
+ goto append;
+ }
+ if (key >= KEYC_USER && key < KEYC_USER + KEYC_NUSER) {
+ snprintf(tmp, sizeof tmp, "User%u", (u_int)(key - KEYC_USER));
+ strlcat(out, tmp, sizeof out);
return (out);
}
@@ -301,15 +338,6 @@ key_string_lookup_key(key_code key)
if ((key & KEYC_MASK_KEY) == 0)
key = ' ' | KEYC_CTRL | (key & KEYC_MASK_MOD);
- /* Fill in the modifiers. */
- if (key & KEYC_CTRL)
- strlcat(out, "C-", sizeof out);
- if (key & KEYC_ESCAPE)
- strlcat(out, "M-", sizeof out);
- if (key & KEYC_SHIFT)
- strlcat(out, "S-", sizeof out);
- key &= KEYC_MASK_KEY;
-
/* Try the key against the string table. */
for (i = 0; i < nitems(key_string_table); i++) {
if (key == key_string_table[i].key)
@@ -352,4 +380,8 @@ key_string_lookup_key(key_code key)
strlcat(out, tmp, sizeof out);
return (out);
+
+append:
+ strlcat(out, s, sizeof out);
+ return (out);
}
diff --git a/server-client.c b/server-client.c
index 513a760e..fe72317a 100644
--- a/server-client.c
+++ b/server-client.c
@@ -660,8 +660,7 @@ have_event:
break;
}
c->tty.mouse_drag_flag = 0;
-
- return (key);
+ goto out;
}
/* Convert to a key binding. */
@@ -956,6 +955,7 @@ have_event:
if (key == KEYC_UNKNOWN)
return (KEYC_UNKNOWN);
+out:
/* Apply modifiers if any. */
if (b & MOUSE_MASK_META)
key |= KEYC_ESCAPE;
@@ -964,6 +964,8 @@ have_event:
if (b & MOUSE_MASK_SHIFT)
key |= KEYC_SHIFT;
+ if (log_get_level() != 0)
+ log_debug("mouse key is %s", key_string_lookup_key (key));
return (key);
}
@@ -1057,7 +1059,7 @@ server_client_key_callback(struct cmdq_item *item, void *data)
* Mouse drag is in progress, so fire the callback (now that
* the mouse event is valid).
*/
- if (key == KEYC_DRAGGING) {
+ if ((key & KEYC_MASK_KEY) == KEYC_DRAGGING) {
c->tty.mouse_drag_update(c, m);
goto out;
}