Merge branch 'hyper' of https://github.com/orki/kitty
This commit is contained in:
@@ -8,12 +8,12 @@
|
||||
#include "keys.h"
|
||||
#include "charsets.h"
|
||||
|
||||
typedef enum { SHIFT=1, ALT=2, CTRL=4, SUPER=8 } ModifierMasks;
|
||||
typedef enum { SHIFT=1, ALT=2, CTRL=4, SUPER=8, HYPER=16, META=32} ModifierMasks;
|
||||
typedef enum { PRESS = 0, REPEAT = 1, RELEASE = 2} KeyAction;
|
||||
typedef struct {
|
||||
uint32_t key, shifted_key, alternate_key;
|
||||
struct {
|
||||
bool shift, alt, ctrl, super;
|
||||
bool shift, alt, ctrl, super, hyper, meta;
|
||||
unsigned value;
|
||||
char encoded[4];
|
||||
} mods;
|
||||
@@ -48,11 +48,13 @@ is_modifier_key(const uint32_t key) {
|
||||
|
||||
static inline void
|
||||
convert_glfw_mods(int mods, KeyEvent *ev) {
|
||||
ev->mods.alt = (mods & GLFW_MOD_ALT) > 0, ev->mods.ctrl = (mods & GLFW_MOD_CONTROL) > 0, ev->mods.shift = (mods & GLFW_MOD_SHIFT) > 0, ev->mods.super = (mods & GLFW_MOD_SUPER) > 0;
|
||||
ev->mods.alt = (mods & GLFW_MOD_ALT) > 0, ev->mods.ctrl = (mods & GLFW_MOD_CONTROL) > 0, ev->mods.shift = (mods & GLFW_MOD_SHIFT) > 0, ev->mods.super = (mods & GLFW_MOD_SUPER) > 0, ev->mods.hyper = (mods & GLFW_MOD_HYPER) > 0, ev->mods.meta = (mods & GLFW_MOD_META) > 0;
|
||||
ev->mods.value = ev->mods.shift ? SHIFT : 0;
|
||||
if (ev->mods.alt) ev->mods.value |= ALT;
|
||||
if (ev->mods.ctrl) ev->mods.value |= CTRL;
|
||||
if (ev->mods.super) ev->mods.value |= SUPER;
|
||||
if (ev->mods.hyper) ev->mods.value |= HYPER;
|
||||
if (ev->mods.meta) ev->mods.value |= META;
|
||||
snprintf(ev->mods.encoded, sizeof(ev->mods.encoded), "%u", ev->mods.value + 1);
|
||||
}
|
||||
|
||||
@@ -60,7 +62,7 @@ convert_glfw_mods(int mods, KeyEvent *ev) {
|
||||
static inline void
|
||||
init_encoding_data(EncodingData *ans, const KeyEvent *ev) {
|
||||
ans->add_actions = ev->report_all_event_types && ev->action != PRESS;
|
||||
ans->has_mods = ev->mods.encoded[0] && ev->mods.encoded[0] != '1';
|
||||
ans->has_mods = ev->mods.encoded[0] && ( ev->mods.encoded[0] != '1' || ev->mods.encoded[1] );
|
||||
ans->add_alternates = ev->report_alternate_key && ((ev->shifted_key > 0 && ev->mods.shift) || ev->alternate_key > 0);
|
||||
if (ans->add_alternates) { if (ev->mods.shift) ans->shifted_key = ev->shifted_key; ans->alternate_key = ev->alternate_key; }
|
||||
ans->action = ev->action;
|
||||
|
||||
Reference in New Issue
Block a user