diff options
author | David Zeuthen <davidz@redhat.com> | 2011-05-27 15:44:42 -0400 |
---|---|---|
committer | David Zeuthen <davidz@redhat.com> | 2011-05-27 15:44:42 -0400 |
commit | 52ab0c730c13ababbe1b1bd43445ccaca9c5321f (patch) | |
tree | 9efd4535fc1568f76244621bcebae071f502be9d | |
parent | 695f81ff8ca23b0532c97902923ba203634406b7 (diff) |
Add icons
Signed-off-by: David Zeuthen <davidz@redhat.com>
34 files changed, 269 insertions, 57 deletions
diff --git a/configure.ac b/configure.ac index a13eca1..797aada 100644 --- a/configure.ac +++ b/configure.ac @@ -80,6 +80,13 @@ AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE],["$GETTEXT_PACKAGE"],[gettext domain]) AC_OUTPUT([ Makefile data/Makefile +data/icons/Makefile +data/icons/16x16/Makefile +data/icons/24x24/Makefile +data/icons/32x32/Makefile +data/icons/48x48/Makefile +data/icons/256x256/Makefile +data/icons/scalable/Makefile src/Makefile src/goa/Makefile src/goa/goa-1.0.pc diff --git a/data/Makefile.am b/data/Makefile.am index 218f46c..7813949 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -1,4 +1,6 @@ +SUBDIRS = icons + NULL = desktopdir = $(datadir)/applications diff --git a/data/dbus-interfaces.xml b/data/dbus-interfaces.xml index 74e74b4..dd37c95 100644 --- a/data/dbus-interfaces.xml +++ b/data/dbus-interfaces.xml @@ -33,17 +33,36 @@ The base account interface. --> <interface name="org.gnome.OnlineAccounts.Account"> - <!-- ProviderType: The provider of the account. - Known values include - <variablelist> - <varlistentry><term>google</term><listitem><para>The account is a Google Account.</para></listitem></varlistentry> - <varlistentry><term>facebook</term><listitem><para>The account is a Facebook Account.</para></listitem></varlistentry> - <varlistentry><term>yahoo</term><listitem><para>The account is a Yahoo Account.</para></listitem></varlistentry> - <varlistentry><term>twitter</term><listitem><para>The account is a Twitter Account.</para></listitem></varlistentry> - </variablelist> + <!-- + ProviderType: + The type of provider of the account. + + This value describes how data is accessed, e.g. what API + applications should use. Use + #org.gnome.OnlineAccounts.Account:ProviderName for the name of + the provider (which might differ from the provider name in + hosted scenarios) to display in the user interface. --> <property name="ProviderType" type="s" access="read"/> + <!-- + ProviderName: + The name of the provider to display in the user interface. + --> + <property name="ProviderName" type="s" access="read"/> + + <!-- + ProviderIcon: + The icon/logo of the provider. + + This is a serialized <ulink + url="http://developer.gnome.org/gio/unstable/GIcon.html">GIcon</ulink> + - use e.g. <ulink + url="http://developer.gnome.org/gio/unstable/GIcon.html#g-icon-new-for-string">g_icon_new_for_string()</ulink> + to create an instance. + --> + <property name="ProviderIcon" type="s" access="read"/> + <!-- Id: An identifier for this account. This identifier cannot be changed and should never be displayed in any user interface. diff --git a/data/goa-prefs.desktop.in b/data/goa-prefs.desktop.in index 1665807..1a72c4f 100644 --- a/data/goa-prefs.desktop.in +++ b/data/goa-prefs.desktop.in @@ -1,7 +1,7 @@ [Desktop Entry] _Name=Online Accounts _Comment=Manage online accounts -Icon=config-users +Icon=goa-panel Exec=gnome-control-center goa Terminal=false Type=Application diff --git a/data/icons/16x16/Makefile.am b/data/icons/16x16/Makefile.am new file mode 100644 index 0000000..783ee6e --- /dev/null +++ b/data/icons/16x16/Makefile.am @@ -0,0 +1,13 @@ +NULL = + +icondir = $(datadir)/icons/hicolor/16x16/apps +icon_DATA = \ + goa-panel.png \ + goa-account.png \ + $(NULL) + +EXTRA_DIST = \ + $(icon_DATA) + +clean-local : + rm -f *~ diff --git a/data/icons/16x16/goa-account.png b/data/icons/16x16/goa-account.png Binary files differnew file mode 100644 index 0000000..0d231ee --- /dev/null +++ b/data/icons/16x16/goa-account.png diff --git a/data/icons/16x16/goa-panel.png b/data/icons/16x16/goa-panel.png Binary files differnew file mode 100644 index 0000000..0d231ee --- /dev/null +++ b/data/icons/16x16/goa-panel.png diff --git a/data/icons/24x24/Makefile.am b/data/icons/24x24/Makefile.am new file mode 100644 index 0000000..6180d34 --- /dev/null +++ b/data/icons/24x24/Makefile.am @@ -0,0 +1,13 @@ +NULL = + +icondir = $(datadir)/icons/hicolor/24x24/apps +icon_DATA = \ + goa-panel.png \ + goa-account.png \ + $(NULL) + +EXTRA_DIST = \ + $(icon_DATA) + +clean-local : + rm -f *~ diff --git a/data/icons/24x24/goa-account.png b/data/icons/24x24/goa-account.png Binary files differnew file mode 100644 index 0000000..79cf8f4 --- /dev/null +++ b/data/icons/24x24/goa-account.png diff --git a/data/icons/24x24/goa-panel.png b/data/icons/24x24/goa-panel.png Binary files differnew file mode 100644 index 0000000..79cf8f4 --- /dev/null +++ b/data/icons/24x24/goa-panel.png diff --git a/data/icons/256x256/Makefile.am b/data/icons/256x256/Makefile.am new file mode 100644 index 0000000..40d8104 --- /dev/null +++ b/data/icons/256x256/Makefile.am @@ -0,0 +1,13 @@ +NULL = + +icondir = $(datadir)/icons/hicolor/256x256/apps +icon_DATA = \ + goa-panel.png \ + goa-account.png \ + $(NULL) + +EXTRA_DIST = \ + $(icon_DATA) + +clean-local : + rm -f *~ diff --git a/data/icons/256x256/goa-account.png b/data/icons/256x256/goa-account.png Binary files differnew file mode 100644 index 0000000..c07d172 --- /dev/null +++ b/data/icons/256x256/goa-account.png diff --git a/data/icons/256x256/goa-panel.png b/data/icons/256x256/goa-panel.png Binary files differnew file mode 100644 index 0000000..c07d172 --- /dev/null +++ b/data/icons/256x256/goa-panel.png diff --git a/data/icons/32x32/Makefile.am b/data/icons/32x32/Makefile.am new file mode 100644 index 0000000..5f8edcf --- /dev/null +++ b/data/icons/32x32/Makefile.am @@ -0,0 +1,13 @@ +NULL = + +icondir = $(datadir)/icons/hicolor/32x32/apps +icon_DATA = \ + goa-panel.png \ + goa-account.png \ + $(NULL) + +EXTRA_DIST = \ + $(icon_DATA) + +clean-local : + rm -f *~ diff --git a/data/icons/32x32/goa-account.png b/data/icons/32x32/goa-account.png Binary files differnew file mode 100644 index 0000000..b4f31d4 --- /dev/null +++ b/data/icons/32x32/goa-account.png diff --git a/data/icons/32x32/goa-panel.png b/data/icons/32x32/goa-panel.png Binary files differnew file mode 100644 index 0000000..b4f31d4 --- /dev/null +++ b/data/icons/32x32/goa-panel.png diff --git a/data/icons/48x48/Makefile.am b/data/icons/48x48/Makefile.am new file mode 100644 index 0000000..f7e0403 --- /dev/null +++ b/data/icons/48x48/Makefile.am @@ -0,0 +1,13 @@ +NULL = + +icondir = $(datadir)/icons/hicolor/48x48/apps +icon_DATA = \ + goa-panel.png \ + goa-account.png \ + $(NULL) + +EXTRA_DIST = \ + $(icon_DATA) + +clean-local : + rm -f *~ diff --git a/data/icons/48x48/goa-account.png b/data/icons/48x48/goa-account.png Binary files differnew file mode 100644 index 0000000..8a58ee3 --- /dev/null +++ b/data/icons/48x48/goa-account.png diff --git a/data/icons/48x48/goa-panel.png b/data/icons/48x48/goa-panel.png Binary files differnew file mode 100644 index 0000000..8a58ee3 --- /dev/null +++ b/data/icons/48x48/goa-panel.png diff --git a/data/icons/Makefile.am b/data/icons/Makefile.am new file mode 100644 index 0000000..c1549d0 --- /dev/null +++ b/data/icons/Makefile.am @@ -0,0 +1,16 @@ + +SUBDIRS = 16x16 24x24 32x32 48x48 256x256 scalable + +gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/hicolor + +install-data-hook: + @-if test -z "$(DESTDIR)"; then \ + echo "Updating Gtk icon cache."; \ + $(gtk_update_icon_cache); \ + else \ + echo "*** Icon cache not updated. After install, run this:"; \ + echo "*** $(gtk_update_icon_cache)"; \ + fi + +clean-local : + rm -f *~ diff --git a/data/icons/scalable/Makefile.am b/data/icons/scalable/Makefile.am new file mode 100644 index 0000000..3bbcecd --- /dev/null +++ b/data/icons/scalable/Makefile.am @@ -0,0 +1,11 @@ +NULL = + +icondir = $(datadir)/icons/hicolor/scalable/apps +icon_DATA = \ + $(NULL) + +EXTRA_DIST = \ + $(icon_DATA) + +clean-local : + rm -f *~ diff --git a/doc/goa-sections.txt b/doc/goa-sections.txt index 9089b9d..7ec98c0 100644 --- a/doc/goa-sections.txt +++ b/doc/goa-sections.txt @@ -106,6 +106,10 @@ goa_account_interface_info goa_account_override_properties goa_account_get_provider_type goa_account_set_provider_type +goa_account_get_provider_name +goa_account_set_provider_name +goa_account_get_provider_icon +goa_account_set_provider_icon goa_account_get_id goa_account_set_id goa_account_get_attention_needed @@ -304,7 +308,8 @@ goa_error_get_type GoaProvider GoaProviderClass goa_provider_get_provider_type -goa_provider_get_name +goa_provider_get_provider_name +goa_provider_get_provider_icon goa_provider_build_object goa_provider_add_account goa_provider_refresh_account diff --git a/src/daemon/goadaemon.c b/src/daemon/goadaemon.c index 6fc9102..c040687 100644 --- a/src/daemon/goadaemon.c +++ b/src/daemon/goadaemon.c @@ -406,6 +406,9 @@ update_account_object (GoaDaemon *daemon, gchar *identity; gchar *presentation_identity; gchar *type; + gchar *name; + GIcon *icon; + gchar *serialized_icon; GError *error; g_return_val_if_fail (GOA_IS_DAEMON (daemon), FALSE); @@ -417,6 +420,9 @@ update_account_object (GoaDaemon *daemon, identity = NULL; type = NULL; account = NULL; + name = NULL; + icon = NULL; + serialized_icon = NULL; goa_debug ("updating %s %d", g_dbus_object_get_object_path (G_DBUS_OBJECT (object)), just_added); @@ -433,11 +439,6 @@ update_account_object (GoaDaemon *daemon, account = goa_object_get_account (GOA_OBJECT (object)); } - goa_account_set_id (account, g_strrstr (g_dbus_object_get_object_path (G_DBUS_OBJECT (object)), "/") + 1); - goa_account_set_provider_type (account, type); - goa_account_set_identity (account, identity); - goa_account_set_presentation_identity (account, presentation_identity); - provider = goa_provider_get_for_provider_type (type); if (provider == NULL) { @@ -446,6 +447,17 @@ update_account_object (GoaDaemon *daemon, goto out; } + name = goa_provider_get_provider_name (provider, GOA_OBJECT (object)); + icon = goa_provider_get_provider_icon (provider, GOA_OBJECT (object)); + serialized_icon = g_icon_to_string (icon); + + goa_account_set_id (account, g_strrstr (g_dbus_object_get_object_path (G_DBUS_OBJECT (object)), "/") + 1); + goa_account_set_provider_type (account, type); + goa_account_set_provider_name (account, name); + goa_account_set_provider_icon (account, serialized_icon); + goa_account_set_identity (account, identity); + goa_account_set_presentation_identity (account, presentation_identity); + error = NULL; if (!goa_provider_build_object (provider, object, key_file, group, &error)) { @@ -459,6 +471,10 @@ update_account_object (GoaDaemon *daemon, ret = TRUE; out: + g_free (serialized_icon); + if (icon != NULL) + g_object_unref (icon); + g_free (name); if (provider != NULL) g_object_unref (provider); g_object_unref (account); diff --git a/src/goabackend/goafacebookprovider.c b/src/goabackend/goafacebookprovider.c index fb34acb..ac13e66 100644 --- a/src/goabackend/goafacebookprovider.c +++ b/src/goabackend/goafacebookprovider.c @@ -71,10 +71,11 @@ get_provider_type (GoaProvider *_provider) return "facebook"; } -static const gchar * -get_name (GoaProvider *_provider) +static gchar * +get_provider_name (GoaProvider *_provider, + GoaObject *object) { - return _("Facebook Account"); + return g_strdup (_("Facebook")); } static const gchar * @@ -273,7 +274,7 @@ goa_facebook_provider_class_init (GoaFacebookProviderClass *klass) provider_class = GOA_PROVIDER_CLASS (klass); provider_class->get_provider_type = get_provider_type; - provider_class->get_name = get_name; + provider_class->get_provider_name = get_provider_name; provider_class->build_object = build_object; provider_class->show_account = show_account; diff --git a/src/goabackend/goagoogleprovider.c b/src/goabackend/goagoogleprovider.c index d66acb9..096b25b 100644 --- a/src/goabackend/goagoogleprovider.c +++ b/src/goabackend/goagoogleprovider.c @@ -71,10 +71,11 @@ get_provider_type (GoaProvider *_provider) return "google"; } -static const gchar * -get_name (GoaProvider *_provider) +static gchar * +get_provider_name (GoaProvider *_provider, + GoaObject *object) { - return _("Google Account"); + return g_strdup (_("Google")); } static const gchar * @@ -401,7 +402,7 @@ goa_google_provider_class_init (GoaGoogleProviderClass *klass) provider_class = GOA_PROVIDER_CLASS (klass); provider_class->get_provider_type = get_provider_type; - provider_class->get_name = get_name; + provider_class->get_provider_name = get_provider_name; provider_class->build_object = build_object; provider_class->show_account = show_account; provider_class->get_credentials_generation = get_credentials_generation; diff --git a/src/goabackend/goaoauth2provider.c b/src/goabackend/goaoauth2provider.c index 5200389..937966f 100644 --- a/src/goabackend/goaoauth2provider.c +++ b/src/goabackend/goaoauth2provider.c @@ -52,7 +52,7 @@ * * Additionally, the * #GoaProviderClass.get_provider_type, - * #GoaProviderClass.get_name, + * #GoaProviderClass.get_provider_name, * #GoaProviderClass.build_object (this should chain up to its * parent class) methods must be implemented. * diff --git a/src/goabackend/goaoauthprovider.c b/src/goabackend/goaoauthprovider.c index 352a54a..184704c 100644 --- a/src/goabackend/goaoauthprovider.c +++ b/src/goabackend/goaoauthprovider.c @@ -56,7 +56,7 @@ * * Additionally, the * #GoaProviderClass.get_provider_type, - * #GoaProviderClass.get_name, + * #GoaProviderClass.get_provider_name, * #GoaProviderClass.build_object (this should chain up to its * parent class) methods must be implemented. * diff --git a/src/goabackend/goaprovider.c b/src/goabackend/goaprovider.c index 66e62a8..dda1da4 100644 --- a/src/goabackend/goaprovider.c +++ b/src/goabackend/goaprovider.c @@ -61,6 +61,9 @@ static void goa_provider_show_account_real (GoaProvider *provider, static guint goa_provider_get_credentials_generation_real (GoaProvider *provider); +static GIcon *goa_provider_get_provider_icon_default (GoaProvider *provider, + GoaObject *object); + G_DEFINE_ABSTRACT_TYPE (GoaProvider, goa_provider, G_TYPE_OBJECT); static void @@ -75,6 +78,7 @@ goa_provider_class_init (GoaProviderClass *klass) klass->ensure_credentials_sync = goa_provider_ensure_credentials_sync_real; klass->show_account = goa_provider_show_account_real; klass->get_credentials_generation = goa_provider_get_credentials_generation_real; + klass->get_provider_icon = goa_provider_get_provider_icon_default; } /** @@ -96,22 +100,62 @@ goa_provider_get_provider_type (GoaProvider *provider) } /** - * goa_provider_get_name: + * goa_provider_get_provider_name: * @provider: A #GoaProvider. + * @object: (allow-none): A #GoaObject for an account. * - * Gets a localized name for @provider that is suitable for display in - * an user interface. + * Gets a name for @provider and @object that is suitable for display + * in an user interface. The returned value may depend on @object (if + * it's not %NULL) - for example, hosted accounts might return a + * different name. * * This is a pure virtual method - a subclass must provide an * implementation. * - * Returns: (transfer none): A string owned by @provider, do not free. + * Returns: (transfer full): A string that should be freed with g_free(). */ -const gchar * -goa_provider_get_name (GoaProvider *provider) +gchar * +goa_provider_get_provider_name (GoaProvider *provider, + GoaObject *object) { g_return_val_if_fail (GOA_IS_PROVIDER (provider), NULL); - return GOA_PROVIDER_GET_CLASS (provider)->get_name (provider); + return GOA_PROVIDER_GET_CLASS (provider)->get_provider_name (provider, object); +} + +/** + * goa_provider_get_provider_icon: + * @provider: A #GoaProvider. + * @object: A #GoaObject for an account. + * + * Gets an icon for @provider and @object that is suitable for display + * in an user interface. The returned value may depend on @object - + * for example, hosted accounts might return a different icon. + * + * This is a virtual method with a default implementation that returns + * a #GThemedIcon with fallbacks constructed from the name + * <literal>goa-account-TYPE</literal> where <literal>TYPE</literal> + * is the return value of goa_provider_get_provider_type(). + * + * Returns: (transfer full): An icon that should be freed with g_object_unref(). + */ +GIcon * +goa_provider_get_provider_icon (GoaProvider *provider, + GoaObject *object) +{ + g_return_val_if_fail (GOA_IS_PROVIDER (provider), NULL); + return GOA_PROVIDER_GET_CLASS (provider)->get_provider_icon (provider, object); +} + +static GIcon * +goa_provider_get_provider_icon_default (GoaProvider *provider, + GoaObject *object) +{ + GIcon *ret; + gchar *s; + s = g_strdup_printf ("goa-account-%s", goa_provider_get_provider_type (provider)); + ret = g_themed_icon_new_with_default_fallbacks (s); + g_free (s); + return ret; } /* ---------------------------------------------------------------------------------------------------- */ diff --git a/src/goabackend/goaprovider.h b/src/goabackend/goaprovider.h index 472ec3e..590850b 100644 --- a/src/goabackend/goaprovider.h +++ b/src/goabackend/goaprovider.h @@ -58,7 +58,8 @@ struct _GoaProvider * GoaProviderClass: * @parent_class: The parent class. * @get_provider_type: Virtual function for goa_provider_get_provider_type(). - * @get_name: Virtual function for goa_provider_get_name(). + * @get_provider_name: Virtual function for goa_provider_get_provider_name(). + * @get_provider_icon: Virtual function for goa_provider_get_provider_icon(). * @add_account: Virtual function for goa_provider_add_account(). * @refresh_account: Virtual function for goa_provider_refresh_account(). * @build_object: Virtual function for goa_provider_build_object(). @@ -73,7 +74,10 @@ struct _GoaProviderClass /* pure virtual */ const gchar *(*get_provider_type) (GoaProvider *provider); - const gchar *(*get_name) (GoaProvider *provider); + gchar *(*get_provider_name) (GoaProvider *provider, + GoaObject *object); + GIcon *(*get_provider_icon) (GoaProvider *provider, + GoaObject *object); GoaObject *(*add_account) (GoaProvider *provider, GoaClient *client, GtkDialog *dialog, @@ -110,7 +114,10 @@ struct _GoaProviderClass GType goa_provider_get_type (void) G_GNUC_CONST; const gchar *goa_provider_get_provider_type (GoaProvider *provider); -const gchar *goa_provider_get_name (GoaProvider *provider); +gchar *goa_provider_get_provider_name (GoaProvider *provider, + GoaObject *object); +GIcon *goa_provider_get_provider_icon (GoaProvider *provider, + GoaObject *object); GoaObject *goa_provider_add_account (GoaProvider *provider, GoaClient *client, GtkDialog *dialog, diff --git a/src/goabackend/goatwitterprovider.c b/src/goabackend/goatwitterprovider.c index 4d9ed18..018f97d 100644 --- a/src/goabackend/goatwitterprovider.c +++ b/src/goabackend/goatwitterprovider.c @@ -71,10 +71,11 @@ get_provider_type (GoaProvider *_provider) return "twitter"; } -static const gchar * -get_name (GoaProvider *_provider) +static gchar * +get_provider_name (GoaProvider *_provider, + GoaObject *object) { - return _("Twitter Account"); + return g_strdup (_("Twitter")); } static const gchar * @@ -274,7 +275,7 @@ goa_twitter_provider_class_init (GoaTwitterProviderClass *klass) provider_class = GOA_PROVIDER_CLASS (klass); provider_class->get_provider_type = get_provider_type; - provider_class->get_name = get_name; + provider_class->get_provider_name = get_provider_name; provider_class->build_object = build_object; provider_class->show_account = show_account; diff --git a/src/goabackend/goayahooprovider.c b/src/goabackend/goayahooprovider.c index 37d4c71..f5e58a4 100644 --- a/src/goabackend/goayahooprovider.c +++ b/src/goabackend/goayahooprovider.c @@ -71,10 +71,11 @@ get_provider_type (GoaProvider *_provider) return "yahoo"; } -static const gchar * -get_name (GoaProvider *_provider) +static gchar * +get_provider_name (GoaProvider *_provider, + GoaObject *object) { - return _("Yahoo Account"); + return g_strdup (_("Yahoo")); } static const gchar * @@ -337,7 +338,7 @@ goa_yahoo_provider_class_init (GoaYahooProviderClass *klass) provider_class = GOA_PROVIDER_CLASS (klass); provider_class->get_provider_type = get_provider_type; - provider_class->get_name = get_name; + provider_class->get_provider_name = get_provider_name; provider_class->build_object = build_object; provider_class->show_account = show_account; diff --git a/src/panel/goapanel.c b/src/panel/goapanel.c index 6ad4401..1d593a1 100644 --- a/src/panel/goapanel.c +++ b/src/panel/goapanel.c @@ -162,6 +162,16 @@ goa_panel_init (GoaPanel *panel) column = gtk_tree_view_column_new (); gtk_tree_view_append_column (GTK_TREE_VIEW (panel->accounts_treeview), column); + renderer = gtk_cell_renderer_pixbuf_new (); + gtk_tree_view_column_pack_start (column, renderer, FALSE); + g_object_set (G_OBJECT (renderer), + "stock-size", GTK_ICON_SIZE_DIALOG, + NULL); + gtk_tree_view_column_set_attributes (column, + renderer, + "gicon", GOA_PANEL_ACCOUNTS_MODEL_COLUMN_ICON, + NULL); + renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (column, renderer, FALSE); gtk_tree_view_column_set_attributes (column, @@ -460,9 +470,12 @@ on_toolbar_add_button_clicked (GtkToolButton *button, for (l = providers; l != NULL; l = l->next) { GoaProvider *provider = GOA_PROVIDER (l->data); + gchar *provider_name; + provider_name = goa_provider_get_provider_name (provider, NULL); gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo_box), goa_provider_get_provider_type (provider), - goa_provider_get_name (provider)); + provider_name); + g_free (provider_name); } gtk_combo_box_set_active (GTK_COMBO_BOX (combo_box), 0); diff --git a/src/panel/goapanelaccountsmodel.c b/src/panel/goapanelaccountsmodel.c index 7f2dfc7..0833168 100644 --- a/src/panel/goapanelaccountsmodel.c +++ b/src/panel/goapanelaccountsmodel.c @@ -137,7 +137,8 @@ goa_panel_accounts_model_constructed (GObject *object) types[1] = GOA_TYPE_OBJECT; types[2] = G_TYPE_BOOLEAN; types[3] = G_TYPE_STRING; - G_STATIC_ASSERT (4 == GOA_PANEL_ACCOUNTS_MODEL_N_COLUMNS); + types[4] = G_TYPE_ICON; + G_STATIC_ASSERT (5 == GOA_PANEL_ACCOUNTS_MODEL_N_COLUMNS); gtk_list_store_set_column_types (GTK_LIST_STORE (model), GOA_PANEL_ACCOUNTS_MODEL_N_COLUMNS, types); @@ -315,23 +316,24 @@ set_values (GoaPanelAccountsModel *model, GtkTreeIter *iter) { GoaAccount *account; - GoaProvider *provider; - const gchar *type; - gchar *provider_name; + GIcon *icon; gchar *markup; + GError *error; account = goa_object_peek_account (object); - type = goa_account_get_provider_type (account); - provider = goa_provider_get_for_provider_type (type); - if (provider != NULL) - provider_name = g_strdup (goa_provider_get_name (provider)); - else - provider_name = g_strdup_printf (_("Unknown Provider (%s)"), type); + error = NULL; + icon = g_icon_new_for_string (goa_account_get_provider_icon (account), &error); + if (icon == NULL) + { + goa_warning ("Error creating GIcon for account: %s (%s, %d)", + error->message, g_quark_to_string (error->domain), error->code); + g_error_free (error); + } markup = g_strdup_printf ("<b>%s</b>\n" "<small><span foreground=\"#555555\">%s</span></small>", - provider_name, + goa_account_get_provider_name (account), goa_account_get_presentation_identity (account)); gtk_list_store_set (GTK_LIST_STORE (model), @@ -340,11 +342,11 @@ set_values (GoaPanelAccountsModel *model, GOA_PANEL_ACCOUNTS_MODEL_COLUMN_OBJECT, object, GOA_PANEL_ACCOUNTS_MODEL_COLUMN_ATTENTION_NEEDED, goa_account_get_attention_needed (account), GOA_PANEL_ACCOUNTS_MODEL_COLUMN_MARKUP, markup, + GOA_PANEL_ACCOUNTS_MODEL_COLUMN_ICON, icon, -1); g_free (markup); - g_free (provider_name); - g_clear_object (&provider); + g_clear_object (&icon); } static void diff --git a/src/panel/goapanelaccountsmodel.h b/src/panel/goapanelaccountsmodel.h index aa99235..a5d44e2 100644 --- a/src/panel/goapanelaccountsmodel.h +++ b/src/panel/goapanelaccountsmodel.h @@ -41,6 +41,7 @@ enum GOA_PANEL_ACCOUNTS_MODEL_COLUMN_OBJECT, GOA_PANEL_ACCOUNTS_MODEL_COLUMN_ATTENTION_NEEDED, GOA_PANEL_ACCOUNTS_MODEL_COLUMN_MARKUP, + GOA_PANEL_ACCOUNTS_MODEL_COLUMN_ICON, GOA_PANEL_ACCOUNTS_MODEL_N_COLUMNS }; |