key bindings now support the win key
This commit is contained in:
parent
e69fe704fb
commit
6f27cdc3ec
|
@ -65,6 +65,8 @@ config_init(void)
|
|||
(edd_keys, Config_Keys, "alt", alt, EET_T_UCHAR);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC
|
||||
(edd_keys, Config_Keys, "shift", shift, EET_T_UCHAR);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC
|
||||
(edd_keys, Config_Keys, "win", win, EET_T_UCHAR);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC
|
||||
(edd_keys, Config_Keys, "cb", cb, EET_T_STRING);
|
||||
|
||||
|
@ -282,61 +284,62 @@ static void
|
|||
_add_default_keys(Config *config)
|
||||
{
|
||||
Config_Keys *kb;
|
||||
#define ADD_KB(Name, Ctrl, Alt, Shift, Cb) \
|
||||
#define ADD_KB(Name, Ctrl, Alt, Shift, Win, Cb) \
|
||||
kb = calloc(1, sizeof(Config_Keys)); \
|
||||
if (!kb) return; \
|
||||
kb->keyname = eina_stringshare_add_length(Name, strlen(Name)); \
|
||||
kb->ctrl = Ctrl; \
|
||||
kb->alt = Alt; \
|
||||
kb->shift = Shift; \
|
||||
kb->win = Win; \
|
||||
kb->cb = eina_stringshare_add_length(Cb, strlen(Cb)); \
|
||||
config->keys = eina_list_append(config->keys, kb)
|
||||
|
||||
ADD_KB("Prior", 1, 0, 0, "term_prev");
|
||||
ADD_KB("Next", 1, 0, 0, "term_next");
|
||||
ADD_KB("0", 1, 0, 0, "tab_10");
|
||||
ADD_KB("1", 1, 0, 0, "tab_1");
|
||||
ADD_KB("2", 1, 0, 0, "tab_2");
|
||||
ADD_KB("3", 1, 0, 0, "tab_3");
|
||||
ADD_KB("4", 1, 0, 0, "tab_4");
|
||||
ADD_KB("5", 1, 0, 0, "tab_5");
|
||||
ADD_KB("6", 1, 0, 0, "tab_6");
|
||||
ADD_KB("7", 1, 0, 0, "tab_7");
|
||||
ADD_KB("8", 1, 0, 0, "tab_8");
|
||||
ADD_KB("9", 1, 0, 0, "tab_9");
|
||||
ADD_KB("Prior", 1, 0, 0, 0, "term_prev");
|
||||
ADD_KB("Next", 1, 0, 0, 0, "term_next");
|
||||
ADD_KB("0", 1, 0, 0, 0, "tab_10");
|
||||
ADD_KB("1", 1, 0, 0, 0, "tab_1");
|
||||
ADD_KB("2", 1, 0, 0, 0, "tab_2");
|
||||
ADD_KB("3", 1, 0, 0, 0, "tab_3");
|
||||
ADD_KB("4", 1, 0, 0, 0, "tab_4");
|
||||
ADD_KB("5", 1, 0, 0, 0, "tab_5");
|
||||
ADD_KB("6", 1, 0, 0, 0, "tab_6");
|
||||
ADD_KB("7", 1, 0, 0, 0, "tab_7");
|
||||
ADD_KB("8", 1, 0, 0, 0, "tab_8");
|
||||
ADD_KB("9", 1, 0, 0, 0, "tab_9");
|
||||
|
||||
/* Alt- */
|
||||
ADD_KB("Home", 0, 1, 0, "cmd_box");
|
||||
ADD_KB("w", 0, 1, 0, "copy_primary");
|
||||
ADD_KB("Return", 0, 1, 0, "paste_primary");
|
||||
ADD_KB("Home", 0, 1, 0, 0, "cmd_box");
|
||||
ADD_KB("w", 0, 1, 0, 0, "copy_primary");
|
||||
ADD_KB("Return", 0, 1, 0, 0, "paste_primary");
|
||||
|
||||
/* Ctrl-Shift- */
|
||||
ADD_KB("Prior", 1, 0, 1, "split_h");
|
||||
ADD_KB("Next", 1, 0, 1, "split_v");
|
||||
ADD_KB("t", 1, 0, 1, "tab_new");
|
||||
ADD_KB("End", 1, 0, 1, "exited");
|
||||
ADD_KB("Home", 1, 0, 1, "tab_select");
|
||||
ADD_KB("c", 1, 0, 1, "copy_clipboard");
|
||||
ADD_KB("v", 1, 0, 1, "paste_clipboard");
|
||||
ADD_KB("h", 1, 0, 1, "miniview");
|
||||
ADD_KB("Insert", 1, 0, 1, "paste_clipboard");
|
||||
ADD_KB("Prior", 1, 0, 1, 0, "split_h");
|
||||
ADD_KB("Next", 1, 0, 1, 0, "split_v");
|
||||
ADD_KB("t", 1, 0, 1, 0, "tab_new");
|
||||
ADD_KB("End", 1, 0, 1, 0, "exited");
|
||||
ADD_KB("Home", 1, 0, 1, 0, "tab_select");
|
||||
ADD_KB("c", 1, 0, 1, 0, "copy_clipboard");
|
||||
ADD_KB("v", 1, 0, 1, 0, "paste_clipboard");
|
||||
ADD_KB("h", 1, 0, 1, 0, "miniview");
|
||||
ADD_KB("Insert", 1, 0, 1, 0, "paste_clipboard");
|
||||
|
||||
/* Ctrl-Alt- */
|
||||
ADD_KB("equal", 1, 1, 0, "increase_font_size");
|
||||
ADD_KB("minus", 1, 1, 0, "decrease_font_size");
|
||||
ADD_KB("0", 1, 1, 0, "reset_font_size");
|
||||
ADD_KB("9", 1, 1, 0, "big_font_size");
|
||||
ADD_KB("equal", 1, 1, 0, 0, "increase_font_size");
|
||||
ADD_KB("minus", 1, 1, 0, 0, "decrease_font_size");
|
||||
ADD_KB("0", 1, 1, 0, 0, "reset_font_size");
|
||||
ADD_KB("9", 1, 1, 0, 0, "big_font_size");
|
||||
|
||||
/* Shift- */
|
||||
ADD_KB("Prior", 0, 0, 1, "one_page_up");
|
||||
ADD_KB("Next", 0, 0, 1, "one_page_down");
|
||||
ADD_KB("Up", 0, 0, 1, "one_line_up");
|
||||
ADD_KB("Down", 0, 0, 1, "one_line_down");
|
||||
ADD_KB("Insert", 0, 0, 1, "paste_primary");
|
||||
ADD_KB("KP_Add", 0, 0, 1, "increase_font_size");
|
||||
ADD_KB("KP_Subtract", 0, 0, 1, "decrease_font_size");
|
||||
ADD_KB("KP_Multiply", 0, 0, 1, "reset_font_size");
|
||||
ADD_KB("KP_Divide", 0, 0, 1, "copy_clipboard");
|
||||
ADD_KB("Prior", 0, 0, 1, 0, "one_page_up");
|
||||
ADD_KB("Next", 0, 0, 1, 0, "one_page_down");
|
||||
ADD_KB("Up", 0, 0, 1, 0, "one_line_up");
|
||||
ADD_KB("Down", 0, 0, 1, 0, "one_line_down");
|
||||
ADD_KB("Insert", 0, 0, 1, 0, "paste_primary");
|
||||
ADD_KB("KP_Add", 0, 0, 1, 0, "increase_font_size");
|
||||
ADD_KB("KP_Subtract", 0, 0, 1, 0, "decrease_font_size");
|
||||
ADD_KB("KP_Multiply", 0, 0, 1, 0, "reset_font_size");
|
||||
ADD_KB("KP_Divide", 0, 0, 1, 0, "copy_clipboard");
|
||||
|
||||
#undef ADD_KB
|
||||
}
|
||||
|
@ -612,6 +615,7 @@ config_fork(Config *config)
|
|||
key2->ctrl = key->ctrl;
|
||||
key2->alt = key->alt;
|
||||
key2->shift = key->shift;
|
||||
key2->win = key->win;
|
||||
key2->cb = key->cb;
|
||||
eina_stringshare_ref(key->cb);
|
||||
config2->keys = eina_list_append(config2->keys, key2);
|
||||
|
|
|
@ -13,6 +13,7 @@ struct _Config_Keys
|
|||
Eina_Bool ctrl;
|
||||
Eina_Bool alt;
|
||||
Eina_Bool shift;
|
||||
Eina_Bool win;
|
||||
const char *cb;
|
||||
};
|
||||
/* TODO: separate config per terminal (tab, window) and global. */
|
||||
|
|
|
@ -41,6 +41,7 @@ struct _Key_Binding
|
|||
uint16_t ctrl : 1;
|
||||
uint16_t alt : 1;
|
||||
uint16_t shift : 1;
|
||||
uint16_t win : 1;
|
||||
|
||||
uint16_t len;
|
||||
|
||||
|
@ -193,7 +194,7 @@ _handle_key_to_pty(Termpty *ty, const Evas_Event_Key_Down *ev,
|
|||
|
||||
static Key_Binding *
|
||||
key_binding_lookup(const char *keyname,
|
||||
Eina_Bool ctrl, Eina_Bool alt, Eina_Bool shift)
|
||||
Eina_Bool ctrl, Eina_Bool alt, Eina_Bool shift, Eina_Bool win)
|
||||
{
|
||||
Key_Binding *kb;
|
||||
size_t len = strlen(keyname);
|
||||
|
@ -205,6 +206,7 @@ key_binding_lookup(const char *keyname,
|
|||
kb->ctrl = ctrl;
|
||||
kb->alt = alt;
|
||||
kb->shift = shift;
|
||||
kb->win = win;
|
||||
kb->len = len;
|
||||
kb->keyname = alloca(sizeof(char) * len + 1);
|
||||
strncpy((char *)kb->keyname, keyname, kb->len + 1);
|
||||
|
@ -214,11 +216,11 @@ key_binding_lookup(const char *keyname,
|
|||
|
||||
Eina_Bool
|
||||
keyin_handle(Keys_Handler *khdl, Termpty *ty, const Evas_Event_Key_Down *ev,
|
||||
Eina_Bool ctrl, Eina_Bool alt, Eina_Bool shift)
|
||||
Eina_Bool ctrl, Eina_Bool alt, Eina_Bool shift, Eina_Bool win)
|
||||
{
|
||||
Key_Binding *kb;
|
||||
|
||||
kb = key_binding_lookup(ev->keyname, ctrl, alt, shift);
|
||||
kb = key_binding_lookup(ev->keyname, ctrl, alt, shift, win);
|
||||
if (kb)
|
||||
{
|
||||
if (kb->cb(ty->obj))
|
||||
|
@ -605,8 +607,8 @@ _key_binding_key_cmp(const void *key1, int key1_length,
|
|||
return 1;
|
||||
else
|
||||
{
|
||||
unsigned int m1 = (kb1->ctrl << 2) | (kb1->alt << 1) | kb1->shift,
|
||||
m2 = (kb2->ctrl << 2) | (kb2->alt << 1) | kb2->shift;
|
||||
unsigned int m1 = (kb1->win << 3) | (kb1->ctrl << 2) | (kb1->alt << 1) | kb1->shift,
|
||||
m2 = (kb2->win << 3) | (kb2->ctrl << 2) | (kb2->alt << 1) | kb2->shift;
|
||||
if (m1 < m2)
|
||||
return -1;
|
||||
else if (m1 > m2)
|
||||
|
@ -623,15 +625,15 @@ _key_binding_key_hash(const void *key, int key_length)
|
|||
int hash;
|
||||
|
||||
hash = eina_hash_djb2(key, key_length);
|
||||
hash &= 0x1fffffff;
|
||||
hash |= (kb->ctrl << 31) | (kb->alt << 30) | (kb->shift << 29);
|
||||
hash &= 0x0fffffff;
|
||||
hash |= (kb->win << 31) | (kb->ctrl << 30) | (kb->alt << 29) | (kb->shift << 28);
|
||||
return hash;
|
||||
}
|
||||
|
||||
|
||||
static Key_Binding *
|
||||
_key_binding_new(const char *keyname,
|
||||
Eina_Bool ctrl, Eina_Bool alt, Eina_Bool shift,
|
||||
Eina_Bool ctrl, Eina_Bool alt, Eina_Bool shift, Eina_Bool win,
|
||||
Key_Binding_Cb cb)
|
||||
{
|
||||
Key_Binding *kb;
|
||||
|
@ -644,6 +646,7 @@ _key_binding_new(const char *keyname,
|
|||
kb->ctrl = ctrl;
|
||||
kb->alt = alt;
|
||||
kb->shift = shift;
|
||||
kb->win = win;
|
||||
kb->len = len;
|
||||
kb->keyname = eina_stringshare_add(keyname);
|
||||
kb->cb = cb;
|
||||
|
@ -672,7 +675,7 @@ keyin_add_config(Config_Keys *key)
|
|||
{
|
||||
Key_Binding *kb;
|
||||
kb = _key_binding_new(key->keyname, key->ctrl, key->alt,
|
||||
key->shift, action->cb);
|
||||
key->shift, key->win, action->cb);
|
||||
if (!kb) return -1;
|
||||
if (eina_hash_find(_key_bindings, kb) ||
|
||||
(!eina_hash_direct_add(_key_bindings, kb, kb)))
|
||||
|
@ -690,7 +693,7 @@ keyin_remove_config(Config_Keys *key)
|
|||
{
|
||||
Key_Binding *kb;
|
||||
|
||||
kb = key_binding_lookup(key->keyname, key->ctrl, key->alt, key->shift);
|
||||
kb = key_binding_lookup(key->keyname, key->ctrl, key->alt, key->shift, key->win);
|
||||
if (kb)
|
||||
eina_hash_del_by_key(_key_bindings, kb);
|
||||
return 0;
|
||||
|
|
|
@ -14,7 +14,7 @@ struct _Keys_Handler
|
|||
void keyin_compose_seq_reset(Keys_Handler *khdl);
|
||||
Eina_Bool key_is_modifier(const char *key);
|
||||
Eina_Bool keyin_handle(Keys_Handler *khdl, Termpty *ty, const Evas_Event_Key_Down *ev,
|
||||
Eina_Bool ctrl, Eina_Bool alt, Eina_Bool shift);
|
||||
Eina_Bool ctrl, Eina_Bool alt, Eina_Bool shift, Eina_Bool win);
|
||||
|
||||
void keyin_handle_up(Keys_Handler *khdl, Evas_Event_Key_Up *ev);
|
||||
|
||||
|
|
|
@ -48,10 +48,11 @@ _shortcut_button_add(Evas_Object *bx, const Config_Keys *key)
|
|||
const char *txt;
|
||||
Evas_Object *hs;
|
||||
|
||||
txt = eina_stringshare_printf("%s%s%s%s",
|
||||
txt = eina_stringshare_printf("%s%s%s%s%s",
|
||||
key->ctrl ? _("Ctrl+") : "",
|
||||
key->alt ? _("Alt+") : "",
|
||||
key->shift ? _("Shift+") : "",
|
||||
key->win ? _("Win+") : "",
|
||||
key->keyname);
|
||||
hs = elm_hoversel_add(_fr);
|
||||
elm_hoversel_hover_parent_set(hs, _fr);
|
||||
|
@ -72,7 +73,7 @@ _cb_key_up(void *data, Evas *e EINA_UNUSED,
|
|||
Evas_Object *obj, void *event)
|
||||
{
|
||||
Evas_Event_Key_Up *ev = event;
|
||||
int ctrl, alt, shift, res;
|
||||
int ctrl, alt, shift, win, res;
|
||||
Config_Keys *cfg_key;
|
||||
Shortcut_Action *action;
|
||||
Evas_Object *bx = data;
|
||||
|
@ -83,6 +84,7 @@ _cb_key_up(void *data, Evas *e EINA_UNUSED,
|
|||
ctrl = evas_key_modifier_is_set(ev->modifiers, "Control");
|
||||
alt = evas_key_modifier_is_set(ev->modifiers, "Alt");
|
||||
shift = evas_key_modifier_is_set(ev->modifiers, "Shift");
|
||||
win = evas_key_modifier_is_set(ev->modifiers, "Super");
|
||||
|
||||
_hover_del(obj);
|
||||
|
||||
|
@ -100,6 +102,7 @@ _cb_key_up(void *data, Evas *e EINA_UNUSED,
|
|||
cfg_key->ctrl = ctrl;
|
||||
cfg_key->alt = alt;
|
||||
cfg_key->shift = shift;
|
||||
cfg_key->win = win;
|
||||
cfg_key->cb = eina_stringshare_add(action->action);
|
||||
|
||||
res = keyin_add_config(cfg_key);
|
||||
|
|
|
@ -1888,6 +1888,7 @@ _smart_cb_key_down(void *data, Evas *e EINA_UNUSED,
|
|||
int ctrl = evas_key_modifier_is_set(ev->modifiers, "Control");
|
||||
int alt = evas_key_modifier_is_set(ev->modifiers, "Alt");
|
||||
int shift = evas_key_modifier_is_set(ev->modifiers, "Shift");
|
||||
int win = evas_key_modifier_is_set(ev->modifiers, "Super");
|
||||
|
||||
EINA_SAFETY_ON_NULL_RETURN(sd);
|
||||
EINA_SAFETY_ON_NULL_RETURN(ev->key);
|
||||
|
@ -1896,7 +1897,7 @@ _smart_cb_key_down(void *data, Evas *e EINA_UNUSED,
|
|||
return;
|
||||
|
||||
|
||||
if (keyin_handle(&sd->khdl, sd->pty, ev, ctrl, alt, shift))
|
||||
if (keyin_handle(&sd->khdl, sd->pty, ev, ctrl, alt, shift, win))
|
||||
goto end;
|
||||
|
||||
if (sd->jump_on_keypress)
|
||||
|
|
Loading…
Reference in New Issue