static void cb_mpris_media_player2_can_raise(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending) { void *user_data = eldbus_pending_data_del(pending, "__user_data"); const char *error, *error_msg; Eldbus_Codegen_Property_Bool_Get_Cb cb = data; Eldbus_Proxy *proxy = eldbus_pending_data_del(pending, "__proxy"); Eldbus_Message_Iter *variant; Eina_Bool v; if (eldbus_message_error_get(msg, &error, &error_msg)) { Eldbus_Error_Info error_info = {error, error_msg}; cb(user_data, pending, "CanRaise", proxy, &error_info, 0); return; } if (!eldbus_message_arguments_get(msg, "v", &variant)) { Eldbus_Error_Info error_info = {"", ""}; cb(user_data, pending, "CanRaise", proxy, &error_info, 0); return; } if (!eldbus_message_iter_arguments_get(variant, "b", &v)) { Eldbus_Error_Info error_info = {"", ""}; cb(user_data, pending, "CanRaise", proxy, &error_info, 0); return; } cb(user_data, pending, "CanRaise", proxy, NULL, v); }
static void cb_mpris_media_player2_supported_uri_schemes(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending) { void *user_data = eldbus_pending_data_del(pending, "__user_data"); const char *error, *error_msg; Eldbus_Codegen_Property_Complex_Get_Cb cb = data; Eldbus_Proxy *proxy = eldbus_pending_data_del(pending, "__proxy"); Eldbus_Message_Iter *variant; Eina_Value *v, stack_value; if (eldbus_message_error_get(msg, &error, &error_msg)) { Eldbus_Error_Info error_info = {error, error_msg}; cb(user_data, pending, "SupportedUriSchemes", proxy, &error_info, NULL); return; } if (!eldbus_message_arguments_get(msg, "v", &variant)) { Eldbus_Error_Info error_info = {"", ""}; cb(user_data, pending, "SupportedUriSchemes", proxy, &error_info, NULL); return; } v = eldbus_message_iter_struct_like_to_eina_value(variant); eina_value_struct_value_get(v, "arg0", &stack_value); cb(user_data, pending, "SupportedUriSchemes", proxy, NULL, &stack_value); eina_value_flush(&stack_value); eina_value_free(v); }
static void _wkb_name_request_cb(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending) { const char *error, *error_msg; unsigned int reply; DBG("NameRequest callback"); if (eldbus_message_error_get(msg, &error, &error_msg)) { ERR("DBus message error: %s: %s", error, error_msg); goto error; } if (!eldbus_message_arguments_get(msg, "u", &reply)) { ERR("Error reading message arguments"); goto error; } if (reply != ELDBUS_NAME_REQUEST_REPLY_PRIMARY_OWNER && reply != ELDBUS_NAME_REQUEST_REPLY_ALREADY_OWNER) { ERR("Not primary owner: reply=%d", reply); goto error; } return; error: ecore_idler_add(_wkb_ibus_shutdown_idler, NULL); }
static void cb_geo_clue2_location_accuracy(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending) { void *user_data = eldbus_pending_data_del(pending, "__user_data"); const char *error, *error_msg; Eldbus_Codegen_Property_Double_Get_Cb cb = data; Eldbus_Proxy *proxy = eldbus_pending_data_del(pending, "__proxy"); Eldbus_Message_Iter *variant; double v; if (eldbus_message_error_get(msg, &error, &error_msg)) { Eldbus_Error_Info error_info = {error, error_msg}; cb(user_data, pending, "Accuracy", proxy, &error_info, 0); return; } if (!eldbus_message_arguments_get(msg, "v", &variant)) { Eldbus_Error_Info error_info = {"", ""}; cb(user_data, pending, "Accuracy", proxy, &error_info, 0); return; } if (!eldbus_message_iter_arguments_get(variant, "d", &v)) { Eldbus_Error_Info error_info = {"", ""}; cb(user_data, pending, "Accuracy", proxy, &error_info, 0); return; } cb(user_data, pending, "Accuracy", proxy, NULL, v); }
static void _ibus_input_ctx_create(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending) { const char *obj_path; Eldbus_Object *obj; Eldbus_Proxy *ibus_ctx; unsigned int capabilities = IBUS_CAP_FOCUS | IBUS_CAP_PREEDIT_TEXT | IBUS_CAP_SURROUNDING_TEXT; _check_message_errors(msg); if (!eldbus_message_arguments_get(msg, "o", &obj_path)) { ERR("Error reading message arguments"); goto end; } DBG("Got new IBus input context: '%s'", obj_path); obj = eldbus_object_get(wkb_ibus->conn, IBUS_SERVICE_IBUS, obj_path); wkb_ibus->input_ctx->ibus_ctx = ibus_ctx = eldbus_proxy_get(obj, IBUS_INTERFACE_INPUT_CONTEXT); eldbus_proxy_signal_handler_add(ibus_ctx, "CommitText", _ibus_input_ctx_commit_text, NULL); eldbus_proxy_signal_handler_add(ibus_ctx, "ForwardKeyEvent", _ibus_input_ctx_forward_key_event, NULL); eldbus_proxy_signal_handler_add(ibus_ctx, "UpdatePreeditText", _ibus_input_ctx_update_preedit_text, NULL); eldbus_proxy_signal_handler_add(ibus_ctx, "ShowPreeditText", _ibus_input_ctx_show_preedit_text, NULL); eldbus_proxy_signal_handler_add(ibus_ctx, "HidePreeditText", _ibus_input_ctx_hide_preedit_text, NULL); eldbus_proxy_call(ibus_ctx, "FocusIn", NULL, NULL, -1, ""); eldbus_proxy_call(ibus_ctx, "SetCapabilities", NULL, NULL, -1, "u", capabilities); end: wkb_ibus->input_ctx->pending = NULL; }
static void _wkb_config_value_changed_cb(void *data, const Eldbus_Message *msg) { const char *section, *name; Eldbus_Message_Iter *value; struct wkb_config_key *key; _check_message_errors(msg); if (!eldbus_message_arguments_get(msg, "ssv", §ion, &name, &value)) { ERR("Error reading message arguments"); return; } INF("ValueChanged: section: '%s', name: '%s'", section, name); /* Emit general CONFIG_VALUE_CHANGED event */ if (!(key = wkb_ibus_config_get_key(section, name))) { ERR("Config key '%s' or section '%s' not found", section, name); return; } ecore_event_add(WKB_IBUS_CONFIG_VALUE_CHANGED, key, _wkb_config_value_changed_end_cb, NULL); /* If theme changed, emit specific THEME_CHANGED event */ if (strncmp(section, "weekeyboard", strlen("weekeyboard")) == 0 && strncmp(name, "theme", strlen("theme")) == 0) _wkb_config_theme_changed(key); }
static void _ibus_input_ctx_key_release(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending) { struct wkb_ibus_key *key = (struct wkb_ibus_key *) data; Eina_Bool ret = EINA_FALSE; if (msg) { _check_message_errors(msg); if (!eldbus_message_arguments_get(msg, "b", &ret)) ERR("Error reading message arguments"); } if (!ret) { INF("Key release was not handled by IBus"); wl_input_method_context_key(wkb_ibus->input_ctx->wl_ctx, wkb_ibus->input_ctx->serial, 0, key->code-8, WL_KEYBOARD_KEY_STATE_RELEASED); if (key->modifiers) wl_input_method_context_modifiers(wkb_ibus->input_ctx->wl_ctx, wkb_ibus->input_ctx->serial, 0, 0, 0, 0); } }
static void _wkb_name_acquired_cb(void *data, const Eldbus_Message *msg) { const char *name, *path; _check_message_errors(msg); if (!eldbus_message_arguments_get(msg, "s", &name)) { ERR("Error reading message arguments"); return; } DBG("NameAcquired: '%s'", name); if (strncmp(name, IBUS_INTERFACE_PANEL, strlen(IBUS_INTERFACE_PANEL)) == 0) { wkb_ibus->panel = wkb_ibus_panel_register(wkb_ibus->conn); INF("Registering Panel Interface: %s", wkb_ibus->panel ? "Success" : "Fail"); } else if (strncmp(name, IBUS_INTERFACE_CONFIG, strlen(IBUS_INTERFACE_CONFIG)) == 0) { path = eina_stringshare_printf("%s/wkb-ibus-cfg.eet", efreet_config_home_get()); wkb_ibus->config = wkb_ibus_config_register(wkb_ibus->conn, path); eina_stringshare_del(path); INF("Registering Config Interface: %s", wkb_ibus->config ? "Success" : "Fail"); } else { WRN("Unexpected name %s", name); } }
static Eldbus_Message * _cb_property_get(const Eldbus_Service_Interface *piface, const Eldbus_Message *msg) { const char *propname, *iface_name; Eldbus_Service_Object *obj = piface->obj; Eldbus_Service_Interface *iface; Property *prop; Eldbus_Message *reply, *error_reply = NULL; Eldbus_Message_Iter *main_iter, *variant; Eina_Bool ret; Eldbus_Property_Get_Cb getter = NULL; if (!eldbus_message_arguments_get(msg, "ss", &iface_name, &propname)) return NULL; iface = eina_hash_find(obj->interfaces, iface_name); if (!iface) return eldbus_message_error_new(msg, DBUS_ERROR_UNKNOWN_INTERFACE, "Interface not found."); prop = eina_hash_find(iface->properties, propname); if (!prop || prop->is_invalidate) goto not_found; if (prop->property->get_func) getter = prop->property->get_func; else if (iface->get_func) getter = iface->get_func; if (!getter) goto not_found; reply = eldbus_message_method_return_new(msg); EINA_SAFETY_ON_NULL_RETURN_VAL(reply, NULL); main_iter = eldbus_message_iter_get(reply); variant = eldbus_message_iter_container_new(main_iter, 'v', prop->property->type); ret = getter(iface, propname, variant, msg, &error_reply); if (ret) { eldbus_message_iter_container_close(main_iter, variant); return reply; } eldbus_message_unref(reply); return error_reply; not_found: return eldbus_message_error_new(msg, DBUS_ERROR_UNKNOWN_PROPERTY, "Property not found."); }
static void _wkb_config_value_changed_cb(void *data, const Eldbus_Message *msg) { const char *section, *name; Eldbus_Message_Iter *value; _check_message_errors(msg); if (!eldbus_message_arguments_get(msg, "ssv", §ion, &name, &value)) { ERR("Error reading message arguments"); return; } DBG("section: '%s', name: '%s', value: '%p", section, name, value); }
static void _wkb_name_lost_cb(void *data, const Eldbus_Message *msg) { const char *name; DBG("NameLost"); _check_message_errors(msg); if (!eldbus_message_arguments_get(msg, "s", &name)) { ERR("Error reading message arguments"); return; } DBG("Name = %s", name); }
static void cb_name_owner_has(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending) { E_Music_Control_Module_Context *ctxt = data; Eina_Bool owner_exists; if (eldbus_message_error_get(msg, NULL, NULL)) return; if (!eldbus_message_arguments_get(msg, "b", &owner_exists)) return; if (owner_exists) { media_player2_player_playback_status_propget(ctxt->mpris2_player, cb_playback_status_get, ctxt); media_player2_player_metadata_propget(ctxt->mpris2_player, cb_metadata_get, ctxt); } }
static void _ibus_input_ctx_forward_key_event(void *data, const Eldbus_Message *msg) { unsigned int val, code, modifiers, state = WL_KEYBOARD_KEY_STATE_PRESSED; _check_message_errors(msg); if (!eldbus_message_arguments_get(msg, "uuu", &val, &code, &modifiers)) { ERR("Error reading message arguments"); return; } if (modifiers & IBUS_RELEASE_MASK) state = WL_KEYBOARD_KEY_STATE_RELEASED; wl_input_method_context_keysym(wkb_ibus->input_ctx->wl_ctx, wkb_ibus->input_ctx->serial, 0, val, state, modifiers); }
static void _ibus_input_ctx_commit_text(void *data, const Eldbus_Message *msg) { Eldbus_Message_Iter *iter = NULL; struct wkb_ibus_text *txt; _check_message_errors(msg); if (!eldbus_message_arguments_get(msg, "v", &iter)) { ERR("Error reading message arguments"); return; } txt = wkb_ibus_text_from_message_iter(iter); DBG("Commit text: '%s'", txt->text); wl_input_method_context_commit_string(wkb_ibus->input_ctx->wl_ctx, wkb_ibus->input_ctx->serial, txt->text); wkb_ibus_text_free(txt); }
static void _ibus_global_engine(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending) { const char *error, *error_msg; Eldbus_Message_Iter *iter, *desc_iter; struct wkb_ibus_engine_desc *desc = NULL; if (eldbus_message_error_get(msg, &error, &error_msg)) { DBG("DBus message error: %s: %s", error, error_msg); goto end; } else if (!eldbus_message_arguments_get(msg, "v", &iter)) { DBG("Error reading message arguments"); goto end; } if (!eldbus_message_iter_arguments_get(iter, "v", &desc_iter)) { DBG("Error retrieving GlobalEngine property"); goto end; } desc = wkb_ibus_engine_desc_from_message_iter(desc_iter); if (!desc || !desc->name) { goto end; } DBG("Global engine is set to '%s'", desc->name); free(desc); return; end: INF("Global engine is not set, using default: '%s'", IBUS_DEFAULT_ENGINE); eldbus_proxy_call(wkb_ibus->ibus, "SetGlobalEngine", NULL, NULL, -1, "s", IBUS_DEFAULT_ENGINE); }
static void _wkb_name_acquired_cb(void *data, const Eldbus_Message *msg) { const char *name, *path; _check_message_errors(msg); if (!eldbus_message_arguments_get(msg, "s", &name)) { ERR("Error reading message arguments"); return; } DBG("NameAcquired: '%s'", name); if (strncmp(name, IBUS_INTERFACE_PANEL, strlen(IBUS_INTERFACE_PANEL)) == 0) { wkb_ibus->panel = wkb_ibus_panel_register(wkb_ibus->conn); INF("Registering Panel Interface: %s", wkb_ibus->panel ? "Success" : "Fail"); } else if (strncmp(name, IBUS_INTERFACE_CONFIG, strlen(IBUS_INTERFACE_CONFIG)) == 0) { path = eina_stringshare_printf("%s/wkb-ibus-cfg.eet", efreet_config_home_get()); wkb_ibus->config = wkb_ibus_config_register(wkb_ibus->conn, path); eina_stringshare_del(path); INF("Registering Config Interface: %s", wkb_ibus->config ? "Success" : "Fail"); if (wkb_ibus->config) { Eldbus_Object *obj = eldbus_object_get(wkb_ibus->conn, IBUS_SERVICE_CONFIG, IBUS_PATH_CONFIG); Eldbus_Proxy *config = eldbus_proxy_get(obj, IBUS_INTERFACE_CONFIG); eldbus_proxy_signal_handler_add(config, "ValueChanged", _wkb_config_value_changed_cb, wkb_ibus); } } else { INF("Unexpected name %s, ignoring", name); } }
static void _ibus_input_ctx_update_preedit_text(void *data, const Eldbus_Message *msg) { Eldbus_Message_Iter *iter = NULL; unsigned int cursor; struct wkb_ibus_text *txt; Eina_Bool visible; _check_message_errors(msg); if (!eldbus_message_arguments_get(msg, "vub", &iter, &cursor, &visible)) { ERR("Error reading message arguments"); return; } if (wkb_ibus->input_ctx->preedit) { free(wkb_ibus->input_ctx->preedit); wkb_ibus->input_ctx->preedit = NULL; } txt = wkb_ibus_text_from_message_iter(iter); DBG("Preedit text: '%s', Cursor: '%d'", txt->text, cursor); wkb_ibus->input_ctx->preedit = strdup(txt->text); wkb_ibus->input_ctx->cursor = cursor; if (!visible) { _set_preedit_text(""); return; } wl_input_method_context_preedit_cursor(wkb_ibus->input_ctx->wl_ctx, cursor); _set_preedit_text(wkb_ibus->input_ctx->preedit); }