#include <Eina.h>
#include <stdlib.h>
+
+typedef struct {
+ int event_type;
+ GList *clients;
+} find_client_listening_event_args_s;
+
Eina_Hash *_client_hash = NULL;
static Eina_Bool _init_done = false;
return NULL;
}
+static Eina_Bool __find_client_listening_event(const Eina_Hash *hash, const void *key, void *data, void *fdata)
+{
+ mmi_client *client = (mmi_client *)data;
+ find_client_listening_event_args_s *result = (find_client_listening_event_args_s *)fdata;
+
+ if (client == NULL || result == NULL) {
+ LOGE("Invalid data passed. Skip the current item.");
+ return EINA_TRUE;
+ }
+
+ if (g_list_length(client->result_cb_list) <= 0) {
+ LOGE("Fail to get client result_cb. There is no result_cb set");
+ return EINA_TRUE;
+ }
+
+ GList *iter = g_list_first(client->result_cb_list);
+ while (iter != NULL) {
+ mmi_result_cb_s *data = iter->data;
+ if (data != NULL) {
+ int type = data->input_event_type;
+
+ if (type == result->event_type) {
+ result->clients = g_list_append(result->clients, client);
+ break;
+ }
+ }
+
+ iter = g_list_next(iter);
+ }
+
+ return EINA_TRUE;
+}
+
+GList *client_manager_get_clients_listening_event(int input_event_type)
+{
+ find_client_listening_event_args_s result;
+ result.event_type = input_event_type;
+ result.clients = NULL;
+
+ eina_hash_foreach(_client_hash, __find_client_listening_event, &result);
+
+ return result.clients;
+}
+
const char *
client_manager_get_client_sender(mmi_client *client)
{
int client_manager_get_client_pid(mmi_client *client);
const char *client_manager_get_client_sender(mmi_client *client);
rpc_port_stub_mmi_result_cb_h client_manager_get_result_cb_handle(mmi_client *client, int input_event_type);
+GList *client_manager_get_clients_listening_event(int input_event_type);
void client_manager_init(void);
void client_manager_shutdown(void);