aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Gould <ted@gould.cx>2010-01-11 23:54:31 -0600
committerTed Gould <ted@gould.cx>2010-01-11 23:54:31 -0600
commit7d604febf5c2456d1bd441ad24ddb25e1bfabfd0 (patch)
treef054d7e418a269eef47ab0803d88754905d805c1
parent942727aba499a4d3f4a17fcf6bbe70b9ce7fd7eb (diff)
parenteb17be92dbd586aef4f185d2e0c5af2ff6485c1b (diff)
downloadlibdbusmenu-7d604febf5c2456d1bd441ad24ddb25e1bfabfd0.tar.gz
libdbusmenu-7d604febf5c2456d1bd441ad24ddb25e1bfabfd0.tar.bz2
libdbusmenu-7d604febf5c2456d1bd441ad24ddb25e1bfabfd0.zip
Adding code to support icon names that have an implied direction in them.
-rw-r--r--libdbusmenu-gtk/client.c22
1 files changed, 20 insertions, 2 deletions
diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c
index 4a8637a..dd94663 100644
--- a/libdbusmenu-gtk/client.c
+++ b/libdbusmenu-gtk/client.c
@@ -511,13 +511,31 @@ image_property_handle (DbusmenuMenuitem * item, const gchar * property, const GV
icon either. */
gtkimage = NULL;
} else {
+ /* Look to see if we want to have an icon with the 'ltr' or
+ 'rtl' depending on what we're doing. */
+ gchar * finaliconname = g_strdup_printf("%s-%s", iconname,
+ gtk_widget_get_direction(GTK_WIDGET(gimi)) == GTK_TEXT_DIR_RTL ? "rtl" : "ltr");
+ if (!gtk_icon_theme_has_icon(gtk_icon_theme_get_default(), finaliconname)) {
+ /* If we don't have that icon, fall back to having one
+ without the extra bits. */
+ g_free(finaliconname);
+ finaliconname = (gchar *)iconname; /* Dropping const not
+ becaue we don't love it. */
+ }
+
/* If we don't have an image, we need to build
one so that we can set the name. Otherwise we
can just convert it to this name. */
if (gtkimage == NULL) {
- gtkimage = gtk_image_new_from_icon_name(iconname, GTK_ICON_SIZE_MENU);
+ gtkimage = gtk_image_new_from_icon_name(finaliconname, GTK_ICON_SIZE_MENU);
} else {
- gtk_image_set_from_icon_name(GTK_IMAGE(gtkimage), iconname, GTK_ICON_SIZE_MENU);
+ gtk_image_set_from_icon_name(GTK_IMAGE(gtkimage), finaliconname, GTK_ICON_SIZE_MENU);
+ }
+
+ /* If we're using the name with extra bits, then we need
+ to free that string. */
+ if (finaliconname != iconname) {
+ g_free(finaliconname);
}
}
} else {