add wayland-only mouse action for translating a button press to a key
in some cases it might be desirable to remap a mouse button to a key. this is not very user-friendly since it requires device-specific key names which need to be translated to/from files such as /usr/share/X11/xkb/keycodes/evdev #SamsungFeatures
This commit is contained in:
parent
efc247c376
commit
8999b6029d
|
@ -2941,6 +2941,52 @@ ACT_FN_GO(kbd_layout_prev, EINA_UNUSED)
|
||||||
e_xkb_layout_prev();
|
e_xkb_layout_prev();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_WAYLAND
|
||||||
|
ACT_FN_GO_MOUSE(mouse_to_key, )
|
||||||
|
{
|
||||||
|
const char *p, *nextp, *key = NULL;
|
||||||
|
const char *mods[] =
|
||||||
|
{
|
||||||
|
"shift",
|
||||||
|
"ctrl",
|
||||||
|
"alt",
|
||||||
|
"win",
|
||||||
|
"altgr",
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
int modifiers = 0, mod = 0;
|
||||||
|
|
||||||
|
if ((!params) || (!params[0]) || (params[0] == '+')) return;
|
||||||
|
for (p = params; p; p = nextp)
|
||||||
|
{
|
||||||
|
const char **m;
|
||||||
|
|
||||||
|
nextp = strchr(p + 1, '+');
|
||||||
|
if (!nextp) break;
|
||||||
|
for (m = mods; *m; m++)
|
||||||
|
{
|
||||||
|
if (strncmp(p, *m, nextp - p)) continue;
|
||||||
|
modifiers |= 1 << (m - mods);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
key = nextp;
|
||||||
|
}
|
||||||
|
if (key)
|
||||||
|
key++;
|
||||||
|
else
|
||||||
|
key = params;
|
||||||
|
if (!key[0]) return;
|
||||||
|
|
||||||
|
mod |= (ECORE_EVENT_MODIFIER_SHIFT * !!(modifiers & E_BINDING_MODIFIER_SHIFT));
|
||||||
|
mod |= (ECORE_EVENT_MODIFIER_CTRL * !!(modifiers & E_BINDING_MODIFIER_CTRL));
|
||||||
|
mod |= (ECORE_EVENT_MODIFIER_ALT * !!(modifiers & E_BINDING_MODIFIER_ALT));
|
||||||
|
mod |= (ECORE_EVENT_MODIFIER_WIN * !!(modifiers & E_BINDING_MODIFIER_WIN));
|
||||||
|
mod |= (ECORE_EVENT_MODIFIER_ALTGR * !!(modifiers & E_BINDING_MODIFIER_ALTGR));
|
||||||
|
e_comp_wl_input_keyboard_event_generate(key, mod, 0);
|
||||||
|
e_comp_wl_input_keyboard_event_generate(key, mod, 1);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
ACT_FN_GO(module_enable, )
|
ACT_FN_GO(module_enable, )
|
||||||
{
|
{
|
||||||
E_Module *m;
|
E_Module *m;
|
||||||
|
@ -2999,6 +3045,27 @@ static Eina_List *action_list = NULL;
|
||||||
static Eina_List *action_names = NULL;
|
static Eina_List *action_names = NULL;
|
||||||
static Eina_List *action_groups = NULL;
|
static Eina_List *action_groups = NULL;
|
||||||
|
|
||||||
|
static void
|
||||||
|
_e_actions_post_init(void *d EINA_UNUSED)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_WAYLAND
|
||||||
|
E_Action *act;
|
||||||
|
|
||||||
|
/* wayland-specific actions */
|
||||||
|
if (e_comp->comp_type == E_PIXMAP_TYPE_WL)
|
||||||
|
{
|
||||||
|
/* mouse -> key */
|
||||||
|
/* "key" here is the platform-specific key name;
|
||||||
|
* /usr/share/X11/xkb/keycodes/evdev is probably what your system is using
|
||||||
|
*/
|
||||||
|
ACT_GO_MOUSE(mouse_to_key);
|
||||||
|
e_action_predef_name_set(N_("Mouse Remapping"),
|
||||||
|
N_("Mouse to key"), "mouse_to_key",
|
||||||
|
NULL, "[AD02] [ctrl+shift+alt+win+altgr+AD02]", 1);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/* externally accessible functions */
|
/* externally accessible functions */
|
||||||
|
|
||||||
EINTERN int
|
EINTERN int
|
||||||
|
@ -3561,6 +3628,8 @@ e_actions_init(void)
|
||||||
N_("Previous keyboard layout"), "kbd_layout_prev",
|
N_("Previous keyboard layout"), "kbd_layout_prev",
|
||||||
NULL, NULL, 0);
|
NULL, NULL, 0);
|
||||||
|
|
||||||
|
ecore_job_add(_e_actions_post_init, NULL);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue