fix device adding and removal

This commit is contained in:
Richard Hughes 2008-08-11 10:25:53 +01:00
parent 80c020e709
commit 5083edecd0
2 changed files with 12 additions and 17 deletions

View file

@ -390,12 +390,8 @@ gpk_daemon_device_changed (DkpDaemon *daemon, DevkitDevice *d, gboolean synthesi
/* does the device exist in the db? */
device = dkp_device_list_lookup (daemon->priv->list, d);
if (device != NULL) {
if (!dkp_device_changed (device, d, synthesized)) {
dkp_debug ("changed triggered remove on %s", dkp_device_get_object_path (device));
gpk_daemon_device_remove (daemon, d);
} else {
dkp_debug ("changed %s", dkp_device_get_object_path (device));
}
dkp_debug ("changed %s", dkp_device_get_object_path (device));
dkp_device_changed (device, d, synthesized);
} else {
dkp_debug ("treating change event as add on %s", dkp_device_get_object_path (device));
gpk_daemon_device_add (daemon, d, TRUE);
@ -413,8 +409,6 @@ gpk_daemon_device_went_away (gpointer user_data, GObject *_device)
dkp_device_list_remove (daemon->priv->list, device);
}
#include "dkp-supply.h"
/**
* gpk_daemon_device_get:
**/
@ -501,7 +495,7 @@ gpk_daemon_device_remove (DkpDaemon *daemon, DevkitDevice *d)
/* does device exist in db? */
device = dkp_device_list_lookup (daemon->priv->list, d);
if (device == NULL) {
dkp_debug ("ignoring remove event on %s", dkp_device_get_object_path (device));
dkp_debug ("ignoring remove event on %s", devkit_device_get_native_path (d));
} else {
dkp_device_removed (device);
g_signal_emit (daemon, signals[DEVICE_REMOVED_SIGNAL], 0,
@ -514,18 +508,19 @@ gpk_daemon_device_remove (DkpDaemon *daemon, DevkitDevice *d)
* gpk_daemon_device_event_signal_handler:
**/
static void
gpk_daemon_device_event_signal_handler (DevkitClient *client,
const char *action,
DevkitDevice *device,
gpointer user_data)
gpk_daemon_device_event_signal_handler (DevkitClient *client, const char *action,
DevkitDevice *device, gpointer user_data)
{
DkpDaemon *daemon = DKP_DAEMON (user_data);
if (strcmp (action, "add") == 0) {
dkp_debug ("add %s", devkit_device_get_native_path (device));
gpk_daemon_device_add (daemon, device, TRUE);
} else if (strcmp (action, "remove") == 0) {
dkp_debug ("remove %s", devkit_device_get_native_path (device));
gpk_daemon_device_remove (daemon, device);
} else if (strcmp (action, "change") == 0) {
dkp_debug ("change %s", devkit_device_get_native_path (device));
gpk_daemon_device_changed (daemon, device, FALSE);
} else {
dkp_warning ("unhandled action '%s' on %s", action, devkit_device_get_native_path (device));

View file

@ -405,24 +405,24 @@ dkp_device_refresh (DkpDevice *device, DBusGMethodInvocation *context)
gboolean
dkp_device_changed (DkpDevice *device, DevkitDevice *d, gboolean synthesized)
{
gboolean keep_device;
gboolean changed;
g_return_val_if_fail (DKP_IS_DEVICE (device), FALSE);
g_object_unref (device->priv->d);
device->priv->d = g_object_ref (d);
keep_device = dkp_device_refresh_internal (device);
changed = dkp_device_refresh_internal (device);
/* this 'change' event might prompt us to remove the supply */
if (!keep_device)
if (!changed)
goto out;
/* no, it's good .. keep it */
dkp_device_emit_changed (device);
out:
return keep_device;
return changed;
}
/**