better trapping in dbus code (in case of unforseen problems)

SVN revision: 45680
This commit is contained in:
Christopher Michael 2010-01-29 05:31:08 +00:00
parent 7a3f478648
commit c53dd2238d
1 changed files with 25 additions and 13 deletions

View File

@ -60,12 +60,12 @@ e_kbd_dbus_shutdown(void)
char *str; char *str;
/* remove the dbus signal handlers if we can */ /* remove the dbus signal handlers if we can */
if (dbus_conn) if (dbus_dev_add)
{ e_dbus_signal_handler_del(dbus_conn, dbus_dev_add);
e_dbus_signal_handler_del(dbus_conn, dbus_dev_add); if (dbus_dev_del)
e_dbus_signal_handler_del(dbus_conn, dbus_dev_del); e_dbus_signal_handler_del(dbus_conn, dbus_dev_del);
e_dbus_signal_handler_del(dbus_conn, dbus_dev_chg); if (dbus_dev_chg)
} e_dbus_signal_handler_del(dbus_conn, dbus_dev_chg);
/* free the list of ignored keyboards */ /* free the list of ignored keyboards */
EINA_LIST_FREE(ignore_kbds, str) EINA_LIST_FREE(ignore_kbds, str)
@ -118,8 +118,12 @@ _e_kbd_dbus_cb_input_kbd_is(void *data, void *reply, DBusError *err)
/* if it's an input keyboard, than add it and eval */ /* if it's an input keyboard, than add it and eval */
if ((ret) && (ret->boolean)) if ((ret) && (ret->boolean))
{ {
_e_kbd_dbus_kbd_add(udi); if (udi)
_e_kbd_dbus_kbd_eval(); {
_e_kbd_dbus_kbd_add(udi);
_e_kbd_dbus_kbd_eval();
free(udi);
}
} }
} }
@ -175,6 +179,7 @@ _e_kbd_dbus_kbd_add(const char *udi)
const char *str; const char *str;
Eina_List *l; Eina_List *l;
if (!udi) return;
EINA_LIST_FOREACH(dbus_kbds, l, str) EINA_LIST_FOREACH(dbus_kbds, l, str)
if (!strcmp(str, udi)) return; if (!strcmp(str, udi)) return;
dbus_kbds = eina_list_append(dbus_kbds, eina_stringshare_add(udi)); dbus_kbds = eina_list_append(dbus_kbds, eina_stringshare_add(udi));
@ -186,6 +191,7 @@ _e_kbd_dbus_kbd_del(const char *udi)
const char *str; const char *str;
Eina_List *l; Eina_List *l;
if (!udi) return;
EINA_LIST_FOREACH(dbus_kbds, l, str) EINA_LIST_FOREACH(dbus_kbds, l, str)
if (!strcmp(str, udi)) if (!strcmp(str, udi))
{ {
@ -258,11 +264,17 @@ _e_kbd_dbus_dev_chg(void *data, DBusMessage *msg)
dbus_error_init(&err); dbus_error_init(&err);
dbus_message_get_args(msg, &err, DBUS_TYPE_STRING, &udi, dbus_message_get_args(msg, &err, DBUS_TYPE_STRING, &udi,
DBUS_TYPE_STRING, &cap, DBUS_TYPE_INVALID); DBUS_TYPE_STRING, &cap, DBUS_TYPE_INVALID);
if (!strcmp(cap, "input.keyboard")) if (cap)
{ {
_e_kbd_dbus_kbd_add(udi); if (!strcmp(cap, "input.keyboard"))
_e_kbd_dbus_kbd_eval(); {
if (udi)
{
_e_kbd_dbus_kbd_add(udi);
_e_kbd_dbus_kbd_eval();
free(udi);
}
}
free(cap);
} }
if (cap) free(cap);
if (udi) free(udi);
} }