diff --git a/gio/gpowerprofilemonitordbus.c b/gio/gpowerprofilemonitordbus.c index 8bbfe3acc..cbd9f4aaa 100644 --- a/gio/gpowerprofilemonitordbus.c +++ b/gio/gpowerprofilemonitordbus.c @@ -116,7 +116,8 @@ ppd_proxy_cb (GObject *source_object, } active_profile_variant = g_dbus_proxy_get_cached_property (proxy, "ActiveProfile"); - if (g_variant_is_of_type (active_profile_variant, G_VARIANT_TYPE_STRING)) + if (active_profile_variant != NULL && + g_variant_is_of_type (active_profile_variant, G_VARIANT_TYPE_STRING)) { active_profile = g_variant_get_string (active_profile_variant, NULL); power_saver_enabled = g_strcmp0 (active_profile, "power-saver") == 0; @@ -126,6 +127,7 @@ ppd_proxy_cb (GObject *source_object, g_object_notify (G_OBJECT (dbus), "power-saver-enabled"); } } + g_clear_pointer (&active_profile_variant, g_variant_unref); dbus->signal_id = g_signal_connect (G_OBJECT (proxy), "g-properties-changed", G_CALLBACK (ppd_properties_changed_cb), dbus); diff --git a/gio/gpowerprofilemonitorportal.c b/gio/gpowerprofilemonitorportal.c index bb1b4fd15..6bc251fd5 100644 --- a/gio/gpowerprofilemonitorportal.c +++ b/gio/gpowerprofilemonitorportal.c @@ -108,6 +108,7 @@ g_power_profile_monitor_portal_initable_init (GInitable *initable, GPowerProfileMonitorPortal *ppm = G_POWER_PROFILE_MONITOR_PORTAL (initable); GDBusProxy *proxy; gchar *name_owner; + GVariant *power_saver_enabled_v = NULL; if (!glib_should_use_portal ()) { @@ -143,6 +144,12 @@ g_power_profile_monitor_portal_initable_init (GInitable *initable, ppm->signal_id = g_signal_connect (proxy, "g-properties-changed", G_CALLBACK (proxy_properties_changed), ppm); + power_saver_enabled_v = g_dbus_proxy_get_cached_property (proxy, "power-saver-enabled"); + if (power_saver_enabled_v != NULL && + g_variant_is_of_type (power_saver_enabled_v, G_VARIANT_TYPE_BOOLEAN)) + ppm->power_saver_enabled = g_variant_get_boolean (power_saver_enabled_v); + g_clear_pointer (&power_saver_enabled_v, g_variant_unref); + ppm->proxy = g_steal_pointer (&proxy); return TRUE; diff --git a/gio/tests/power-profile-monitor-portal.py.in b/gio/tests/power-profile-monitor-portal.py.in index 960a62232..09e9a450d 100755 --- a/gio/tests/power-profile-monitor-portal.py.in +++ b/gio/tests/power-profile-monitor-portal.py.in @@ -28,6 +28,7 @@ try: import dbusmock from gi.repository import GLib from gi.repository import Gio + from gi.repository import GObject dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) @@ -65,12 +66,16 @@ try: try: self.xdp = subprocess.Popen([XDG_DESKTOP_PORTAL_PATH]) except FileNotFoundError: + self.p_mock.terminate() + self.p_mock.wait() raise unittest.SkipTest("xdg-desktop-portal not available") try: self.wait_for_bus_object('org.freedesktop.portal.Desktop', '/org/freedesktop/portal/desktop') except: + self.p_mock.terminate() + self.p_mock.wait() raise # subprocess.Popen(['gdbus', 'monitor', '--session', '--dest', 'org.freedesktop.portal.Desktop']) @@ -116,6 +121,17 @@ try: self.dbus_props.Set('net.hadess.PowerProfiles', 'ActiveProfile', dbus.String('balanced', variant_level=1)) self.assertEventually(lambda: self.power_saver_enabled == False, "power-saver didn't become disabled", 10) + def test_power_profile_power_saver_enabled_portal_default(self): + '''power-saver-enabled property default value''' + + self.dbus_props.Set('net.hadess.PowerProfiles', 'ActiveProfile', dbus.String('power-saver', variant_level=1)) + + # Create a new power profile monitor and check its property value is + # correct by default. + new_power_profile_monitor = GObject.new(GObject.type_from_name('GPowerProfileMonitorPortal')) + new_power_profile_monitor.init() + self.assertTrue(new_power_profile_monitor.get_power_saver_enabled()) + except ImportError as e: @unittest.skip("Cannot import %s" % e.name) class TestPowerProfileMonitorPortal(unittest.TestCase):