/* * Copyright 2013 Canonical Ltd. * * Authors: * Charles Kerr * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License version 3, as published * by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranties of * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "device-provider.h" enum { SIGNAL_DEVICES_CHANGED, SIGNAL_LAST }; static guint signals[SIGNAL_LAST] = { 0 }; G_DEFINE_INTERFACE (IndicatorPowerDeviceProvider, indicator_power_device_provider, 0) static void indicator_power_device_provider_default_init (IndicatorPowerDeviceProviderInterface * klass) { signals[SIGNAL_DEVICES_CHANGED] = g_signal_new ( "devices-changed", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (IndicatorPowerDeviceProviderInterface, devices_changed), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } /*** **** PUBLIC API ***/ /** * Get a list of devices * * An easy way to free the list properly in one step is as follows: * * g_slist_free_full (list, (GDestroyNotify)g_object_unref); * * Return value: (element-type IndicatorPowerDevice) * (transfer full): * list of devices */ GList * indicator_power_device_provider_get_devices (IndicatorPowerDeviceProvider * self) { GList * devices; IndicatorPowerDeviceProviderInterface * iface; g_return_val_if_fail (INDICATOR_IS_POWER_DEVICE_PROVIDER (self), NULL); iface = INDICATOR_POWER_DEVICE_PROVIDER_GET_INTERFACE (self); if (iface->get_devices != NULL) devices = iface->get_devices (self); else devices = NULL; return devices; } /** * Emits the "devices-changed" signal. * * This should only be called by subclasses. */ void indicator_power_device_provider_emit_devices_changed (IndicatorPowerDeviceProvider * self) { g_return_if_fail (INDICATOR_IS_POWER_DEVICE_PROVIDER (self)); g_signal_emit (self, signals[SIGNAL_DEVICES_CHANGED], 0, NULL); }