#define DBUS_MSG_NAME "KEY_COMBINATION"\r
#define COMBINATION_TIME_OUT 4000\r
#define MAX_SUPPORTED_COMBINATION 255\r
+#define DBUS_CONN_RETRY_TIMEOUT 0.2\r
+#define DBUS_CONN_MAX_RETRY_COUNT 20\r
#define MATCH(s, n) strcmp(section, s) == 0 && strcmp(name, n) == 0\r
\r
typedef unsigned long Time;\r
} KeyCombination;\r
\r
static int keyCombinationInitialize = 0;\r
+static int dbus_connection_init_retry_count = 0;\r
+static Ecore_Timer *dbus_conn_timer = NULL;\r
KeyCombination g_key_combination;\r
\r
-static void _e_keyrouter_dbus_connection_init();\r
+static Eina_Bool e_keyrouter_dbus_connection_init();\r
static int _e_keyrouter_search_key_combination(int keycode, Time timestamp);\r
static int _e_keyrouter_send_dbus_message(DBusConnection *bus, int Input);\r
static char * _e_keyrouter_substring(char *string, int position);\r
static int _e_keyrouter_parse_ini_config(void* user, const char* section, const char* name, const char* value);\r
\r
-static void\r
+static Eina_Bool\r
_e_keyrouter_dbus_connection_init()\r
{\r
DBusError dBus_error;\r
\r
dbus_error_init(&dBus_error);\r
g_key_combination.keyrouter_dbus_conn = dbus_bus_get(DBUS_BUS_SYSTEM, &dBus_error);\r
-\r
- if (dbus_error_is_set(&dBus_error))\r
+ if (!g_key_combination.keyrouter_dbus_conn)\r
{\r
- KLWRN("[DBUS-ERROR] %s",dBus_error.message);\r
- dbus_error_free(&dBus_error);\r
+ KLWRN("[DBUS-CONNECTION-FAIL] DBUS connection is failed");\r
+ if (dbus_error_is_set(&dBus_error))\r
+ {\r
+ KLWRN("[DBUS-ERROR] %s",dBus_error.message);\r
+ dbus_error_free(&dBus_error);\r
+ }\r
+ return EINA_FALSE;\r
}\r
+ return EINA_TRUE;\r
+}\r
\r
- if (!g_key_combination.keyrouter_dbus_conn)\r
+static Eina_Bool\r
+dbus_connection_init_retry_timercb()\r
+{\r
+ if (_e_keyrouter_dbus_connection_init())\r
{\r
- KLWRN("[DBUS-CONNECTION-FAIL] DBUS connection is failed");\r
+ keyCombinationInitialize = 1;\r
+ dbus_conn_timer = NULL;\r
+ return ECORE_CALLBACK_CANCEL;\r
+ }\r
+ else\r
+ {\r
+ if (dbus_connection_init_retry_count < DBUS_CONN_MAX_RETRY_COUNT)\r
+ {\r
+ dbus_connection_init_retry_count++;\r
+ KLWRN("Failed to init dbus conn trying again, try count %d",dbus_connection_init_retry_count);\r
+ return ECORE_CALLBACK_RENEW;\r
+ }\r
+ else\r
+ {\r
+ KLERR("Failed to init dbus connection for key combination after multiple tries");\r
+ dbus_conn_timer = NULL;\r
+ return ECORE_CALLBACK_CANCEL;\r
+ }\r
}\r
}\r
\r
{\r
memset(&g_key_combination, 0, sizeof(g_key_combination));\r
g_key_combination.keyrouter_dbus_conn = NULL;\r
+ dbus_conn_timer = NULL;\r
snprintf(g_key_combination.dbusconf.path, strlen(DBUS_PATH)+1, DBUS_PATH);\r
snprintf(g_key_combination.dbusconf.interface, strlen(DBUS_IFACE)+1, DBUS_IFACE);\r
snprintf(g_key_combination.dbusconf.msg, strlen(DBUS_MSG_NAME)+1, DBUS_MSG_NAME);\r
}\r
\r
g_key_combination.combination_timeout = COMBINATION_TIME_OUT;\r
- _e_keyrouter_dbus_connection_init();\r
- keyCombinationInitialize = 1;\r
+ if (_e_keyrouter_dbus_connection_init())\r
+ {\r
+ keyCombinationInitialize = 1;\r
+ }\r
+ else\r
+ {\r
+ dbus_conn_timer = ecore_timer_add(DBUS_CONN_RETRY_TIMEOUT, dbus_connection_init_retry_timercb, NULL);\r
+ if (dbus_conn_timer != NULL)\r
+ {\r
+ KLWRN("Ecore Timer added for dbus init retry ");\r
+ }\r
+ else\r
+ {\r
+ KLERR("dbus connection init failed and unable to add ecore timer callback for init retry");\r
+ }\r
+ }\r
}\r
\r
static char *\r