aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Gould <ted@gould.cx>2012-03-02 16:30:53 -0600
committerTed Gould <ted@gould.cx>2012-03-02 16:30:53 -0600
commite2ec05db6ca4361bc6423c84edd9e2eab048c764 (patch)
tree2b2094fc829aefa2f28531e62533734e1faa2884
parent4ccb5d75887671bce24df6eeaacd7eb89b2be189 (diff)
downloadlibayatana-appindicator-e2ec05db6ca4361bc6423c84edd9e2eab048c764.tar.gz
libayatana-appindicator-e2ec05db6ca4361bc6423c84edd9e2eab048c764.tar.bz2
libayatana-appindicator-e2ec05db6ca4361bc6423c84edd9e2eab048c764.zip
Rework the icon setting function so that it can handle images that are file paths by checking to see if the files exist
-rw-r--r--src/app-indicator.c84
1 files changed, 42 insertions, 42 deletions
diff --git a/src/app-indicator.c b/src/app-indicator.c
index 6c693e8..c2ed7d0 100644
--- a/src/app-indicator.c
+++ b/src/app-indicator.c
@@ -1582,60 +1582,60 @@ static void
status_icon_changes (AppIndicator * self, gpointer data)
{
GtkStatusIcon * icon = GTK_STATUS_ICON(data);
- gchar *longname = NULL;
-
- /* add the icon_theme_path once if needed */
- GtkIconTheme *icon_theme = gtk_icon_theme_get_default();
- if (self->priv->icon_theme_path != NULL)
- {
- gchar **path;
- gint n_elements, i;
- gboolean found=FALSE;
- gtk_icon_theme_get_search_path(icon_theme, &path, &n_elements);
- for (i=0; i< n_elements || path[i] == NULL; i++)
- {
- if(g_strcmp0(path[i], self->priv->icon_theme_path) == 0)
- {
- found=TRUE;
- break;
- }
- }
- if(!found)
- gtk_icon_theme_append_search_path(icon_theme, self->priv->icon_theme_path);
- g_strfreev (path);
- }
+ /* add the icon_theme_path once if needed */
+ GtkIconTheme *icon_theme = gtk_icon_theme_get_default();
+ if (self->priv->icon_theme_path != NULL) {
+ gchar **path;
+ gint n_elements, i;
+ gboolean found=FALSE;
+ gtk_icon_theme_get_search_path(icon_theme, &path, &n_elements);
+ for (i=0; i< n_elements || path[i] == NULL; i++) {
+ if(g_strcmp0(path[i], self->priv->icon_theme_path) == 0) {
+ found=TRUE;
+ break;
+ }
+ }
+ if(!found) {
+ gtk_icon_theme_append_search_path(icon_theme, self->priv->icon_theme_path);
+ }
+ g_strfreev (path);
+ }
+
+ const gchar * icon_name = NULL;
switch (app_indicator_get_status(self)) {
case APP_INDICATOR_STATUS_PASSIVE:
- /* hide first to avoid that the change is visible to the user */
- gtk_status_icon_set_visible(icon, FALSE);
- longname = append_panel_icon_suffix(app_indicator_get_icon(self));
- if (gtk_icon_theme_has_icon (icon_theme, longname))
- gtk_status_icon_set_from_icon_name(icon, longname);
- else
- gtk_status_icon_set_from_icon_name(icon, app_indicator_get_icon(self));
+ /* hide first to avoid that the change is visible to the user */
+ gtk_status_icon_set_visible(icon, FALSE);
+ icon_name = app_indicator_get_icon(self);
break;
case APP_INDICATOR_STATUS_ACTIVE:
- longname = append_panel_icon_suffix(app_indicator_get_icon(self));
- if (gtk_icon_theme_has_icon (icon_theme, longname))
- gtk_status_icon_set_from_icon_name(icon, longname);
- else
- gtk_status_icon_set_from_icon_name(icon, app_indicator_get_icon(self));
+ icon_name = app_indicator_get_icon(self);
gtk_status_icon_set_visible(icon, TRUE);
break;
case APP_INDICATOR_STATUS_ATTENTION:
- /* get the _attention_ icon here */
- longname = append_panel_icon_suffix(app_indicator_get_attention_icon(self));
- if (gtk_icon_theme_has_icon (icon_theme, longname))
- gtk_status_icon_set_from_icon_name(icon, longname);
- else
- gtk_status_icon_set_from_icon_name(icon, app_indicator_get_icon(self));
+ /* get the _attention_ icon here */
+ icon_name = app_indicator_get_attention_icon(self);
gtk_status_icon_set_visible(icon, TRUE);
break;
};
- if (longname) {
- g_free(longname);
+ if (icon_name != NULL) {
+ if (g_file_test(icon_name, G_FILE_TEST_EXISTS)) {
+ gtk_status_icon_set_from_file(icon, icon_name);
+ } else {
+ gchar *longname = append_panel_icon_suffix(icon_name);
+
+ if (longname != NULL && gtk_icon_theme_has_icon (icon_theme, longname)) {
+ gtk_status_icon_set_from_icon_name(icon, longname);
+ } else {
+ gtk_status_icon_set_from_icon_name(icon, icon_name);
+ }
+
+ if (longname) {
+ g_free(longname);
+ }
+ }
}
return;