summaryrefslogtreecommitdiff
path: root/gio/gapplicationimpl-dbus.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2017-05-24 21:57:24 -0400
committerMatthias Clasen <mclasen@redhat.com>2017-05-24 21:57:24 -0400
commitd6294655ab64d8fa3ec457295edcc511dee2d23f (patch)
tree9d206319404b516207c2c77c293424155914f222 /gio/gapplicationimpl-dbus.c
parent16d00d2453f573874d315e4effdfee9b488cf959 (diff)
downloadglib-wip/statusicon.tar.gz
Add a StatusIcon property to org.gtk.Applicationwip/statusicon
This property can contain a serialized GIcon for use as a status icon.
Diffstat (limited to 'gio/gapplicationimpl-dbus.c')
-rw-r--r--gio/gapplicationimpl-dbus.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/gio/gapplicationimpl-dbus.c b/gio/gapplicationimpl-dbus.c
index 94cf6ea26..9010ad764 100644
--- a/gio/gapplicationimpl-dbus.c
+++ b/gio/gapplicationimpl-dbus.c
@@ -66,6 +66,7 @@ static const gchar org_gtk_Application_xml[] =
"<arg type='i' name='exit-status' direction='out'/>"
"</method>"
"<property name='Busy' type='b' access='read'/>"
+ "<property name='StatusIcon' type='v' access='read'/>"
"</interface>"
"</node>";
@@ -121,6 +122,8 @@ struct _GApplicationImpl
gboolean primary;
gboolean busy;
GApplication *app;
+
+ GIcon *status_icon;
};
@@ -140,6 +143,8 @@ g_application_impl_get_property (GDBusConnection *connection,
if (strcmp (property_name, "Busy") == 0)
return g_variant_new_boolean (impl->busy);
+ else if (strcmp (property_name, "StatusIcon") == 0)
+ return impl->status_icon ? g_icon_serialize (impl->status_icon) : g_variant_new_boolean (FALSE);
g_assert_not_reached ();
@@ -152,9 +157,9 @@ send_property_change (GApplicationImpl *impl)
GVariantBuilder builder;
g_variant_builder_init (&builder, G_VARIANT_TYPE_ARRAY);
- g_variant_builder_add (&builder,
- "{sv}",
- "Busy", g_variant_new_boolean (impl->busy));
+ g_variant_builder_add (&builder, "{sv}", "Busy", g_variant_new_boolean (impl->busy));
+ if (impl->status_icon)
+ g_variant_builder_add (&builder, "{sv}", "StatusIcon", g_icon_serialize (impl->status_icon));
g_dbus_connection_emit_signal (impl->session_bus,
NULL,
@@ -499,6 +504,13 @@ g_application_impl_set_busy_state (GApplicationImpl *impl,
}
void
+g_application_impl_set_status_icon (GApplicationImpl *impl,
+ GIcon *icon)
+{
+ if (g_set_object (&impl->status_icon, icon))
+ send_property_change (impl);
+}
+void
g_application_impl_destroy (GApplicationImpl *impl)
{
g_application_impl_stop_primary (impl);
@@ -508,6 +520,10 @@ g_application_impl_destroy (GApplicationImpl *impl)
g_free (impl->object_path);
+ g_clear_object (&impl->status_icon);
+
+ g_clear_object (&impl->status_icon);
+
g_slice_free (GApplicationImpl, impl);
}