diff --git a/src/freebsd/up-backend.c b/src/freebsd/up-backend.c index 7f6ec26..36dcc6e 100644 --- a/src/freebsd/up-backend.c +++ b/src/freebsd/up-backend.c @@ -97,7 +97,7 @@ up_backend_refresh_devices (gpointer user_data) for (i = 0; i < array->len; i++) { device = UP_DEVICE (g_ptr_array_index (array, i)); - up_device_refresh_internal (device); + up_device_refresh_internal (device, UP_REFRESH_POLL); } g_ptr_array_unref (array); @@ -164,7 +164,7 @@ up_backend_acpi_devd_notify (UpBackend *backend, const gchar *system, const gcha goto out; } - up_device_refresh_internal (UP_DEVICE (object)); + up_device_refresh_internal (UP_DEVICE (object), UP_REFRESH_EVENT); if (object != NULL) g_object_unref (object); @@ -258,7 +258,7 @@ up_backend_coldplug (UpBackend *backend, UpDaemon *daemon) if (object != NULL) { device = UP_DEVICE (object); g_warning ("treating add event as change event on %s", up_device_get_object_path (device)); - up_device_refresh_internal (device); + up_device_refresh_internal (device, UP_REFRESH_EVENT); } else { up_backend_create_new_device (backend, native); } diff --git a/src/freebsd/up-device-supply.c b/src/freebsd/up-device-supply.c index 967343f..08bf2fc 100644 --- a/src/freebsd/up-device-supply.c +++ b/src/freebsd/up-device-supply.c @@ -49,7 +49,7 @@ G_DEFINE_TYPE (UpDeviceSupply, up_device_supply, UP_TYPE_DEVICE) -static gboolean up_device_supply_refresh (UpDevice *device); +static gboolean up_device_supply_refresh (UpDevice *device, UpRefreshReason reason); static UpDeviceTechnology up_device_supply_convert_device_technology (const gchar *type); static gboolean up_device_supply_acline_coldplug (UpDevice *device); static gboolean up_device_supply_battery_coldplug (UpDevice *device, UpAcpiNative *native); @@ -387,7 +387,7 @@ out: * Return %TRUE on success, %FALSE if we failed to refresh or no data **/ static gboolean -up_device_supply_refresh (UpDevice *device) +up_device_supply_refresh (UpDevice *device, UpRefreshReason reason) { GObject *object; UpDeviceKind type; diff --git a/src/linux/up-backend.c b/src/linux/up-backend.c index 0ef1010..34be725 100644 --- a/src/linux/up-backend.c +++ b/src/linux/up-backend.c @@ -195,7 +195,7 @@ up_backend_device_changed (UpBackend *backend, GUdevDevice *native, const char * /* need to refresh device */ device = UP_DEVICE (object); - ret = up_device_refresh_internal (device); + ret = up_device_refresh_internal (device, UP_REFRESH_EVENT); if (!ret) { g_debug ("no changes on %s", up_device_get_object_path (device)); goto out; @@ -751,7 +751,7 @@ up_backend_prepare_for_sleep (GDBusConnection *connection, for (i = 0; i < array->len; i++) { UpDevice *device = UP_DEVICE (g_ptr_array_index (array, i)); - up_device_refresh_internal (device); + up_device_refresh_internal (device, UP_REFRESH_RESUME); } g_ptr_array_unref (array); diff --git a/src/linux/up-device-hid.c b/src/linux/up-device-hid.c index 2a1417a..1a89749 100644 --- a/src/linux/up-device-hid.c +++ b/src/linux/up-device-hid.c @@ -90,7 +90,7 @@ struct UpDeviceHidPrivate G_DEFINE_TYPE_WITH_PRIVATE (UpDeviceHid, up_device_hid, UP_TYPE_DEVICE) -static gboolean up_device_hid_refresh (UpDevice *device); +static gboolean up_device_hid_refresh (UpDevice *device, UpRefreshReason reason); /** * up_device_hid_is_ups: @@ -131,7 +131,7 @@ up_device_hid_poll (UpDeviceHid *hid) UpDevice *device = UP_DEVICE (hid); g_debug ("Polling: %s", up_device_get_object_path (device)); - up_device_hid_refresh (device); + up_device_hid_refresh (device, UP_REFRESH_POLL); /* always continue polling */ return TRUE; @@ -386,7 +386,7 @@ out: * Return %TRUE on success, %FALSE if we failed to refresh or no data **/ static gboolean -up_device_hid_refresh (UpDevice *device) +up_device_hid_refresh (UpDevice *device, UpRefreshReason reason) { gboolean set = FALSE; gboolean ret = FALSE; diff --git a/src/linux/up-device-idevice.c b/src/linux/up-device-idevice.c index 2eb975f..bd8b29c 100644 --- a/src/linux/up-device-idevice.c +++ b/src/linux/up-device-idevice.c @@ -47,7 +47,7 @@ struct UpDeviceIdevicePrivate G_DEFINE_TYPE_WITH_PRIVATE (UpDeviceIdevice, up_device_idevice, UP_TYPE_DEVICE) -static gboolean up_device_idevice_refresh (UpDevice *device); +static gboolean up_device_idevice_refresh (UpDevice *device, UpRefreshReason reason); /** * up_device_idevice_poll_cb: @@ -58,7 +58,7 @@ up_device_idevice_poll_cb (UpDeviceIdevice *idevice) UpDevice *device = UP_DEVICE (idevice); g_debug ("Polling: %s", up_device_get_object_path (device)); - up_device_idevice_refresh (device); + up_device_idevice_refresh (device, UP_REFRESH_POLL); /* always continue polling */ return TRUE; @@ -175,7 +175,7 @@ up_device_idevice_start_poll_cb (UpDeviceIdevice *idevice) /* coldplug */ idevice->priv->client = client; - if (up_device_idevice_refresh (device) == FALSE) { + if (up_device_idevice_refresh (device, UP_REFRESH_INIT) == FALSE) { idevice->priv->client = NULL; goto out; } @@ -283,7 +283,7 @@ up_device_idevice_coldplug (UpDevice *device) * Return %TRUE on success, %FALSE if we failed to refresh or no data **/ static gboolean -up_device_idevice_refresh (UpDevice *device) +up_device_idevice_refresh (UpDevice *device, UpRefreshReason reason) { UpDeviceIdevice *idevice = UP_DEVICE_IDEVICE (device); lockdownd_client_t client = NULL; diff --git a/src/linux/up-device-supply.c b/src/linux/up-device-supply.c index 53914a0..cdd9da0 100644 --- a/src/linux/up-device-supply.c +++ b/src/linux/up-device-supply.c @@ -69,7 +69,8 @@ struct UpDeviceSupplyPrivate G_DEFINE_TYPE_WITH_PRIVATE (UpDeviceSupply, up_device_supply, UP_TYPE_DEVICE) -static gboolean up_device_supply_refresh (UpDevice *device); +static gboolean up_device_supply_refresh (UpDevice *device, + UpRefreshReason reason); static void up_device_supply_setup_unknown_poll (UpDevice *device, UpDeviceState state); static UpDeviceKind up_device_supply_guess_type (GUdevDevice *native, @@ -1041,7 +1042,7 @@ up_device_supply_poll_unknown_battery (UpDevice *device) up_device_get_object_path (device), UP_DAEMON_UNKNOWN_TIMEOUT); supply->priv->poll_timer_id = 0; - up_device_supply_refresh (device); + up_device_supply_refresh (device, UP_REFRESH_POLL); return FALSE; } @@ -1172,7 +1173,7 @@ up_device_supply_coldplug (UpDevice *device) up_daemon_start_poll (G_OBJECT (device), (GSourceFunc) up_device_supply_refresh); /* coldplug values */ - up_device_supply_refresh (device); + up_device_supply_refresh (device, UP_REFRESH_INIT); return TRUE; } @@ -1221,7 +1222,7 @@ up_device_supply_disable_unknown_poll (UpDevice *device) } static gboolean -up_device_supply_refresh (UpDevice *device) +up_device_supply_refresh (UpDevice *device, UpRefreshReason reason) { gboolean updated; UpDeviceSupply *supply = UP_DEVICE_SUPPLY (device); diff --git a/src/linux/up-device-wup.c b/src/linux/up-device-wup.c index ad14501..df9bc98 100644 --- a/src/linux/up-device-wup.c +++ b/src/linux/up-device-wup.c @@ -71,7 +71,7 @@ struct UpDeviceWupPrivate G_DEFINE_TYPE_WITH_PRIVATE (UpDeviceWup, up_device_wup, UP_TYPE_DEVICE) -static gboolean up_device_wup_refresh (UpDevice *device); +static gboolean up_device_wup_refresh (UpDevice *device, UpRefreshReason reason); /** * up_device_wup_poll_cb: @@ -82,7 +82,7 @@ up_device_wup_poll_cb (UpDeviceWup *wup) UpDevice *device = UP_DEVICE (wup); g_debug ("Polling: %s", up_device_get_object_path (device)); - up_device_wup_refresh (device); + up_device_wup_refresh (device, UP_REFRESH_POLL); /* always continue polling */ return TRUE; @@ -372,7 +372,7 @@ up_device_wup_coldplug (UpDevice *device) /* coldplug */ g_debug ("coldplug"); - ret = up_device_wup_refresh (device); + ret = up_device_wup_refresh (device, UP_REFRESH_INIT); out: return ret; } @@ -383,7 +383,7 @@ out: * Return %TRUE on success, %FALSE if we failed to refresh or no data **/ static gboolean -up_device_wup_refresh (UpDevice *device) +up_device_wup_refresh (UpDevice *device, UpRefreshReason reason) { gboolean ret = FALSE; gchar *data = NULL; diff --git a/src/openbsd/up-backend.c b/src/openbsd/up-backend.c index 52b358b..d84ad3f 100644 --- a/src/openbsd/up-backend.c +++ b/src/openbsd/up-backend.c @@ -39,7 +39,7 @@ static void up_backend_update_lid_status(UpDaemon*); static gboolean up_apm_device_get_on_battery (UpDevice *device, gboolean *on_battery); static gboolean up_apm_device_get_online (UpDevice *device, gboolean *online); -static gboolean up_apm_device_refresh (UpDevice *device); +static gboolean up_apm_device_refresh (UpDevice *device, UpRefreshReason reason); struct UpBackendPrivate { @@ -411,14 +411,14 @@ up_backend_apm_powerchange_event_cb(gpointer object) g_return_val_if_fail (UP_IS_BACKEND (object), FALSE); backend = UP_BACKEND (object); - up_apm_device_refresh(backend->priv->ac); - up_apm_device_refresh(backend->priv->battery); + up_device_refresh_internal (backend->priv->ac, UP_REFRESH_EVENT); + up_device_refresh_internal (backend->priv->battery, UP_REFRESH_EVENT); /* return false to not endless loop */ return FALSE; } static gboolean -up_apm_device_refresh(UpDevice* device) +up_apm_device_refresh(UpDevice* device, UpRefreshReason reason) { UpDeviceKind type; gboolean ret; diff --git a/src/up-daemon.c b/src/up-daemon.c index ee574df..1321378 100644 --- a/src/up-daemon.c +++ b/src/up-daemon.c @@ -377,7 +377,7 @@ up_daemon_refresh_battery_devices (UpDaemon *daemon) NULL); if (type == UP_DEVICE_KIND_BATTERY && power_supply) - up_device_refresh_internal (device); + up_device_refresh_internal (device, UP_REFRESH_CHANGES); } g_ptr_array_unref (array); diff --git a/src/up-device.c b/src/up-device.c index 936ab5b..78c0457 100644 --- a/src/up-device.c +++ b/src/up-device.c @@ -420,7 +420,7 @@ up_device_refresh (UpExportedDevice *skeleton, GDBusMethodInvocation *invocation, UpDevice *device) { - up_device_refresh_internal (device); + up_device_refresh_internal (device, UP_REFRESH_POLL); up_exported_device_complete_refresh (skeleton, invocation); return TRUE; } @@ -459,7 +459,7 @@ up_device_initable_init (GInitable *initable, } /* force a refresh, although failure isn't fatal */ - ret = up_device_refresh_internal (device); + ret = up_device_refresh_internal (device, UP_REFRESH_INIT); if (!ret) { g_debug ("failed to refresh %s", native_path); @@ -623,7 +623,7 @@ out: * notify::update-time this should be mostly done. **/ gboolean -up_device_refresh_internal (UpDevice *device) +up_device_refresh_internal (UpDevice *device, UpRefreshReason reason) { gboolean ret = FALSE; UpDeviceClass *klass = UP_DEVICE_GET_CLASS (device); @@ -636,7 +636,7 @@ up_device_refresh_internal (UpDevice *device) goto out; /* do the refresh */ - ret = klass->refresh (device); + ret = klass->refresh (device, reason); if (!ret) { g_debug ("no changes"); goto out; diff --git a/src/up-device.h b/src/up-device.h index 7fdda19..3c19328 100644 --- a/src/up-device.h +++ b/src/up-device.h @@ -42,13 +42,22 @@ typedef struct UpDevicePrivate *priv; } UpDevice; +typedef enum { + UP_REFRESH_INIT, + UP_REFRESH_POLL, + UP_REFRESH_RESUME, + UP_REFRESH_EVENT, + UP_REFRESH_CHANGES, +} UpRefreshReason; + typedef struct { UpExportedDeviceSkeletonClass parent_class; /* vtable */ gboolean (*coldplug) (UpDevice *device); - gboolean (*refresh) (UpDevice *device); + gboolean (*refresh) (UpDevice *device, + UpRefreshReason reason); const gchar *(*get_id) (UpDevice *device); gboolean (*get_on_battery) (UpDevice *device, gboolean *on_battery); @@ -67,7 +76,8 @@ gboolean up_device_get_on_battery (UpDevice *device, gboolean *on_battery); gboolean up_device_get_online (UpDevice *device, gboolean *online); -gboolean up_device_refresh_internal (UpDevice *device); +gboolean up_device_refresh_internal (UpDevice *device, + UpRefreshReason reason); G_END_DECLS