diff --git a/src/bin/e_ipc.c b/src/bin/e_ipc.c index c0279d9f5..f78ae0e26 100644 --- a/src/bin/e_ipc.c +++ b/src/bin/e_ipc.c @@ -15,6 +15,8 @@ ECORE_IPC_ENC_EVAS_LIST_PROTO(_e_ipc_font_available_list_enc); ECORE_IPC_ENC_EVAS_LIST_PROTO(_e_ipc_font_fallback_list_enc); ECORE_IPC_ENC_EVAS_LIST_PROTO(_e_ipc_font_default_list_enc); ECORE_IPC_ENC_STRUCT_PROTO(_e_ipc_font_default_enc); +ECORE_IPC_ENC_EVAS_LIST_PROTO(_e_ipc_mouse_binding_enc); +ECORE_IPC_ENC_EVAS_LIST_PROTO(_e_ipc_key_binding_enc); /* local subsystem globals */ static Ecore_Ipc_Server *_e_ipc_server = NULL; @@ -447,6 +449,54 @@ _e_ipc_cb_client_data(void *data __UNUSED__, int type __UNUSED__, void *event) free(data); } break; + case E_IPC_OP_BINDING_MOUSE_LIST: + { + Evas_List *bindings; + int bytes; + char *data; + + bindings = e_config->mouse_bindings; + data = _e_ipc_mouse_binding_enc(bindings, &bytes); + ecore_ipc_client_send(e->client, + E_IPC_DOMAIN_REPLY, + E_IPC_OP_BINDING_MOUSE_LIST_REPLY, + 0/*ref*/, 0/*ref_to*/, 0/*response*/, + data, bytes); + free(data); + } + break; + case E_IPC_OP_BINDING_MOUSE_ADD: + { + } + break; + case E_IPC_OP_BINDING_MOUSE_DEL: + { + } + break; + case E_IPC_OP_BINDING_KEY_LIST: + { + Evas_List *bindings; + int bytes; + char *data; + + bindings = e_config->key_bindings; + data = _e_ipc_key_binding_enc(bindings, &bytes); + ecore_ipc_client_send(e->client, + E_IPC_DOMAIN_REPLY, + E_IPC_OP_BINDING_KEY_LIST_REPLY, + 0/*ref*/, 0/*ref_to*/, 0/*response*/, + data, bytes); + free(data); + } + break; + case E_IPC_OP_BINDING_KEY_ADD: + { + } + break; + case E_IPC_OP_BINDING_KEY_DEL: + { + } + break; default: break; } @@ -625,9 +675,54 @@ ECORE_IPC_ENC_STRUCT_PROTO(_e_ipc_font_default_enc) ECORE_IPC_ENC_STRUCT_HEAD(E_Font_Default, ECORE_IPC_SLEN(l1, text_class) + ECORE_IPC_SLEN(l2, font) + - 4); + 4); ECORE_IPC_PUTS(text_class, l1); ECORE_IPC_PUTS(font, l2); ECORE_IPC_PUT32(size); ECORE_IPC_ENC_STRUCT_FOOT(); } + +ECORE_IPC_ENC_EVAS_LIST_PROTO(_e_ipc_mouse_binding_enc) +{ + ECORE_IPC_ENC_EVAS_LIST_HEAD_START(E_Config_Binding_Mouse); + ECORE_IPC_CNT32(); + ECORE_IPC_CNT32(); + ECORE_IPC_CNTS(action); + ECORE_IPC_CNTS(params); + ECORE_IPC_CNT8(); + ECORE_IPC_CNT8(); + ECORE_IPC_ENC_EVAS_LIST_HEAD_FINISH(); + int l1, l2; + ECORE_IPC_PUT32(context); + ECORE_IPC_PUT32(modifiers); + ECORE_IPC_SLEN(l1, action); + ECORE_IPC_SLEN(l2, params); + ECORE_IPC_PUTS(action, l1); + ECORE_IPC_PUTS(params, l2); + ECORE_IPC_PUT8(button); + ECORE_IPC_PUT8(any_mod); + ECORE_IPC_ENC_EVAS_LIST_FOOT(); +} + +ECORE_IPC_ENC_EVAS_LIST_PROTO(_e_ipc_key_binding_enc) +{ + ECORE_IPC_ENC_EVAS_LIST_HEAD_START(E_Config_Binding_Key); + ECORE_IPC_CNT32(); + ECORE_IPC_CNT32(); + ECORE_IPC_CNTS(key); + ECORE_IPC_CNTS(action); + ECORE_IPC_CNTS(params); + ECORE_IPC_CNT8(); + ECORE_IPC_ENC_EVAS_LIST_HEAD_FINISH(); + int l1, l2, l3; + ECORE_IPC_PUT32(context); + ECORE_IPC_PUT32(modifiers); + ECORE_IPC_SLEN(l1, key); + ECORE_IPC_SLEN(l2, action); + ECORE_IPC_SLEN(l3, params); + ECORE_IPC_PUTS(key, l1); + ECORE_IPC_PUTS(action, l2); + ECORE_IPC_PUTS(params, l3); + ECORE_IPC_PUT8(any_mod); + ECORE_IPC_ENC_EVAS_LIST_FOOT(); +} diff --git a/src/bin/e_ipc.h b/src/bin/e_ipc.h index 3ce552bb2..3f0d1c0b0 100644 --- a/src/bin/e_ipc.h +++ b/src/bin/e_ipc.h @@ -51,6 +51,14 @@ typedef enum _E_Ipc_Op E_IPC_OP_LANG_SET, E_IPC_OP_LANG_GET, E_IPC_OP_LANG_GET_REPLY, + E_IPC_OP_BINDING_MOUSE_LIST, + E_IPC_OP_BINDING_MOUSE_LIST_REPLY, + E_IPC_OP_BINDING_MOUSE_ADD, + E_IPC_OP_BINDING_MOUSE_DEL, + E_IPC_OP_BINDING_KEY_LIST, + E_IPC_OP_BINDING_KEY_LIST_REPLY, + E_IPC_OP_BINDING_KEY_ADD, + E_IPC_OP_BINDING_KEY_DEL, E_IPC_OP_LAST } E_Ipc_Op; diff --git a/src/bin/e_remote_main.c b/src/bin/e_remote_main.c index dd996f67f..4ceb694f5 100644 --- a/src/bin/e_remote_main.c +++ b/src/bin/e_remote_main.c @@ -27,6 +27,8 @@ static int _e_ipc_cb_server_data(void *data, int type, void *event); static void _e_help(void); +static const char *_e_ipc_context_str(int context); +static const char *_e_ipc_modifier_str(int mod); static Evas_List *_e_ipc_str_list_dec(char *data, int bytes); ECORE_IPC_DEC_EVAS_LIST_PROTO(_e_ipc_module_list_dec); @@ -34,6 +36,8 @@ ECORE_IPC_DEC_EVAS_LIST_PROTO(_e_ipc_font_available_list_dec); ECORE_IPC_DEC_EVAS_LIST_PROTO(_e_ipc_font_fallback_list_dec); ECORE_IPC_DEC_EVAS_LIST_PROTO(_e_ipc_font_default_list_dec); ECORE_IPC_DEC_STRUCT_PROTO(_e_ipc_font_default_dec); +ECORE_IPC_DEC_EVAS_LIST_PROTO(_e_ipc_mouse_binding_dec); +ECORE_IPC_DEC_EVAS_LIST_PROTO(_e_ipc_key_binding_dec); /* local subsystem globals */ static Ecore_Ipc_Server *_e_ipc_server = NULL; @@ -77,7 +81,9 @@ E_IPC_Opt_Handler handlers[] = OREQ("-shutdown", "Shutdown E17", E_IPC_OP_SHUTDOWN, 0), OREQ("-lang-get", "Get the current language", E_IPC_OP_LANG_GET, 1), OREQ("-lang-list", "List all available languages", E_IPC_OP_LANG_LIST, 1), - OSTR("-lang-set", "Set the current language", E_IPC_OP_LANG_SET, 0) + OSTR("-lang-set", "Set the current language", E_IPC_OP_LANG_SET, 0), + OREQ("-binding-mouse-list", "List all mouse bindings", E_IPC_OP_BINDING_MOUSE_LIST, 1), + OREQ("-binding-key-list", "List all key bindings", E_IPC_OP_BINDING_KEY_LIST, 1) }; /* externally accessible functions */ @@ -471,6 +477,56 @@ _e_ipc_cb_server_data(void *data, int type, void *event) printf("REPLY: %s\n", e->data); } break; + case E_IPC_OP_BINDING_MOUSE_LIST_REPLY: + if (e->data) + { + Evas_List *bindings; + E_Config_Binding_Mouse *eb; + + bindings = _e_ipc_mouse_binding_dec(e->data, e->size); + while (bindings) + { + eb = bindings->data; + printf("REPLY: BINDING CONTEXT=%s MODIFIERS=%s BUTTON=%i ANY_MOD=%i ACTION=\"%s\" PARAMS=\"%s\"\n", + _e_ipc_context_str(eb->context), + _e_ipc_modifier_str(eb->modifiers), + eb->button, + eb->any_mod, + eb->action, + eb->params + ); + bindings = evas_list_remove_list(bindings, bindings); + E_FREE(eb); + } + } + else + printf("REPLY: AVAILABLE NONE\n"); + break; + case E_IPC_OP_BINDING_KEY_LIST_REPLY: + if (e->data) + { + Evas_List *bindings; + E_Config_Binding_Key *eb; + + bindings = _e_ipc_key_binding_dec(e->data, e->size); + while (bindings) + { + eb = bindings->data; + printf("REPLY: BINDING CONTEXT=%s MODIFIERS=%s KEY=\"%s\" ANY_MOD=%i ACTION=\"%s\" PARAMS=\"%s\"\n", + _e_ipc_context_str(eb->context), + _e_ipc_modifier_str(eb->modifiers), + eb->key, + eb->any_mod, + eb->action, + eb->params + ); + bindings = evas_list_remove_list(bindings, bindings); + E_FREE(eb); + } + } + else + printf("REPLY: AVAILABLE NONE\n"); + break; default: break; } @@ -524,6 +580,46 @@ _e_help(void) } /* generic encoding functions */ +static const char * +_e_ipc_context_str(int context) +{ + if (context == E_BINDING_CONTEXT_NONE) return "NONE"; + if (context == E_BINDING_CONTEXT_UNKNOWN) return "UNKNOWN"; + if (context == E_BINDING_CONTEXT_BORDER) return "BORDER"; + if (context == E_BINDING_CONTEXT_ZONE) return "ZONE"; + if (context == E_BINDING_CONTEXT_MANAGER) return "MANAGER"; + if (context == E_BINDING_CONTEXT_ANY) return "ANY"; + return ""; +} + +static char _mod_buf[256]; +static const char * +_e_ipc_modifier_str(int mod) +{ + _mod_buf[0] = 0; + if (mod & E_BINDING_MODIFIER_SHIFT) + { + if (_mod_buf[0] != 0) strcat(_mod_buf, "|"); + strcat(_mod_buf, "SHIFT"); + } + if (mod & E_BINDING_MODIFIER_CTRL) + { + if (_mod_buf[0] != 0) strcat(_mod_buf, "|"); + strcat(_mod_buf, "CTRL"); + } + if (mod & E_BINDING_MODIFIER_ALT) + { + if (_mod_buf[0] != 0) strcat(_mod_buf, "|"); + strcat(_mod_buf, "ALT"); + } + if (mod & E_BINDING_MODIFIER_WIN) + { + if (_mod_buf[0] != 0) strcat(_mod_buf, "|"); + strcat(_mod_buf, "WIN"); + } + return _mod_buf; +} + static Evas_List * _e_ipc_str_list_dec(char *data, int bytes) { @@ -585,3 +681,27 @@ ECORE_IPC_DEC_STRUCT_PROTO(_e_ipc_font_default_dec) ECORE_IPC_GET32(size); ECORE_IPC_DEC_STRUCT_FOOT(); } + +ECORE_IPC_DEC_EVAS_LIST_PROTO(_e_ipc_mouse_binding_dec) +{ + ECORE_IPC_DEC_EVAS_LIST_HEAD(E_Config_Binding_Mouse); + ECORE_IPC_GET32(context); + ECORE_IPC_GET32(modifiers); + ECORE_IPC_GETS(action); + ECORE_IPC_GETS(params); + ECORE_IPC_GET8(button); + ECORE_IPC_GET8(any_mod); + ECORE_IPC_DEC_EVAS_LIST_FOOT(); +} + +ECORE_IPC_DEC_EVAS_LIST_PROTO(_e_ipc_key_binding_dec) +{ + ECORE_IPC_DEC_EVAS_LIST_HEAD(E_Config_Binding_Key); + ECORE_IPC_GET32(context); + ECORE_IPC_GET32(modifiers); + ECORE_IPC_GETS(key); + ECORE_IPC_GETS(action); + ECORE_IPC_GETS(params); + ECORE_IPC_GET8(any_mod); + ECORE_IPC_DEC_EVAS_LIST_FOOT(); +}