Created
November 24, 2009 20:27
-
-
Save anonymous/242181 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/libnautilus-private/nautilus-icon-info.c b/libnautilus-private/nautilus-icon-info.c | |
index f1ddd7c..467378a 100644 | |
--- a/libnautilus-private/nautilus-icon-info.c | |
+++ b/libnautilus-private/nautilus-icon-info.c | |
@@ -435,13 +435,28 @@ nautilus_icon_info_lookup_from_name (const char *name, | |
{ | |
GIcon *icon; | |
NautilusIconInfo *info; | |
- | |
+ | |
icon = g_themed_icon_new (name); | |
info = nautilus_icon_info_lookup (icon, size); | |
g_object_unref (icon); | |
return info; | |
} | |
+NautilusIconInfo * | |
+nautilus_icon_info_lookup_from_path (const char *path, | |
+ int size) | |
+{ | |
+ GFile *icon_file; | |
+ GIcon *icon; | |
+ NautilusIconInfo *info; | |
+ | |
+ icon_file = g_file_new_for_path (path); | |
+ icon = g_file_icon_new (icon_file); | |
+ info = nautilus_icon_info_lookup (icon, size); | |
+ g_object_unref (icon); | |
+ g_object_unref (icon_file); | |
+ return info; | |
+} | |
GdkPixbuf * | |
nautilus_icon_info_get_pixbuf_nodefault (NautilusIconInfo *icon) | |
diff --git a/libnautilus-private/nautilus-icon-info.h b/libnautilus-private/nautilus-icon-info.h | |
index d6f5b2f..5ef6cd2 100644 | |
--- a/libnautilus-private/nautilus-icon-info.h | |
+++ b/libnautilus-private/nautilus-icon-info.h | |
@@ -58,6 +58,8 @@ NautilusIconInfo * nautilus_icon_info_lookup (GIcon | |
int size); | |
NautilusIconInfo * nautilus_icon_info_lookup_from_name (const char *name, | |
int size); | |
+NautilusIconInfo * nautilus_icon_info_lookup_from_path (const char *path, | |
+ int size); | |
gboolean nautilus_icon_info_is_fallback (NautilusIconInfo *icon); | |
GdkPixbuf * nautilus_icon_info_get_pixbuf (NautilusIconInfo *icon); | |
GdkPixbuf * nautilus_icon_info_get_pixbuf_nodefault (NautilusIconInfo *icon); | |
diff --git a/src/file-manager/fm-directory-view.c b/src/file-manager/fm-directory-view.c | |
index abecc08..7ef7e60 100644 | |
--- a/src/file-manager/fm-directory-view.c | |
+++ b/src/file-manager/fm-directory-view.c | |
@@ -4653,11 +4653,15 @@ get_menu_icon (const char *icon_name) | |
int size; | |
size = nautilus_get_icon_size_for_stock_size (GTK_ICON_SIZE_MENU); | |
- | |
- info = nautilus_icon_info_lookup_from_name (icon_name, size); | |
+ | |
+ if (g_path_is_absolute (icon_name)) { | |
+ info = nautilus_icon_info_lookup_from_path (icon_name, size); | |
+ } else { | |
+ info = nautilus_icon_info_lookup_from_name (icon_name, size); | |
+ } | |
pixbuf = nautilus_icon_info_get_pixbuf_nodefault_at_size (info, size); | |
g_object_unref (info); | |
- | |
+ | |
return pixbuf; | |
} | |
@@ -4700,8 +4704,6 @@ add_extension_action_for_files (FMDirectoryView *view, | |
tip, | |
icon); | |
- /* TODO: This should really use themed icons, but that | |
- doesn't work here yet */ | |
if (icon != NULL) { | |
pixbuf = get_menu_icon (icon); | |
if (pixbuf != NULL) { | |
diff --git a/libnautilus-private/nautilus-ui-utilities.c b/libnautilus-private/nautilus-ui-utilities.c | |
index 5b7bccb..eb6cb98 100644 | |
--- a/libnautilus-private/nautilus-ui-utilities.c | |
+++ b/libnautilus-private/nautilus-ui-utilities.c | |
@@ -128,6 +128,23 @@ extension_action_sensitive_callback (NautilusMenuItem *item, | |
gtk_action_set_sensitive (GTK_ACTION (user_data), value); | |
} | |
+static GdkPixbuf * | |
+get_action_icon (const char *icon_name, int size) | |
+{ | |
+ NautilusIconInfo *info; | |
+ GdkPixbuf *pixbuf; | |
+ | |
+ if (g_path_is_absolute (icon_name)) { | |
+ info = nautilus_icon_info_lookup_from_path (icon_name, size); | |
+ } else { | |
+ info = nautilus_icon_info_lookup_from_name (icon_name, size); | |
+ } | |
+ pixbuf = nautilus_icon_info_get_pixbuf_nodefault_at_size (info, size); | |
+ g_object_unref (info); | |
+ | |
+ return pixbuf; | |
+} | |
+ | |
GtkAction * | |
nautilus_action_from_menu_item (NautilusMenuItem *item) | |
{ | |
@@ -135,47 +152,42 @@ nautilus_action_from_menu_item (NautilusMenuItem *item) | |
gboolean sensitive, priority; | |
GtkAction *action; | |
GdkPixbuf *pixbuf; | |
- NautilusIconInfo *info; | |
- | |
- g_object_get (G_OBJECT (item), | |
- "name", &name, "label", &label, | |
+ | |
+ g_object_get (G_OBJECT (item), | |
+ "name", &name, "label", &label, | |
"tip", &tip, "icon", &icon_name, | |
"sensitive", &sensitive, | |
"priority", &priority, | |
NULL); | |
- | |
+ | |
action = gtk_action_new (name, | |
label, | |
tip, | |
icon_name); | |
- | |
- if (icon_name != NULL) { | |
- info = nautilus_icon_info_lookup_from_name (icon_name, | |
- nautilus_get_icon_size_for_stock_size (GTK_ICON_SIZE_MENU)); | |
- pixbuf = nautilus_icon_info_get_pixbuf_nodefault_at_size (info, | |
- nautilus_get_icon_size_for_stock_size (GTK_ICON_SIZE_MENU)); | |
+ if (icon_name != NULL) { | |
+ pixbuf = get_action_icon (icon_name, | |
+ nautilus_get_icon_size_for_stock_size (GTK_ICON_SIZE_MENU)); | |
if (pixbuf != NULL) { | |
g_object_set_data_full (G_OBJECT (action), "menu-icon", | |
pixbuf, | |
g_object_unref); | |
} | |
- g_object_unref (info); | |
} | |
- | |
+ | |
gtk_action_set_sensitive (action, sensitive); | |
g_object_set (action, "is-important", priority, NULL); | |
- | |
+ | |
g_signal_connect_data (action, "activate", | |
G_CALLBACK (extension_action_callback), | |
- g_object_ref (item), | |
+ g_object_ref (item), | |
(GClosureNotify)g_object_unref, 0); | |
- | |
+ | |
g_free (name); | |
g_free (label); | |
g_free (tip); | |
g_free (icon_name); | |
- | |
+ | |
return action; | |
} | |
@@ -186,40 +198,35 @@ nautilus_toolbar_action_from_menu_item (NautilusMenuItem *item) | |
gboolean sensitive, priority; | |
GtkAction *action; | |
GdkPixbuf *pixbuf; | |
- NautilusIconInfo *info; | |
- int icon_size; | |
- | |
- g_object_get (G_OBJECT (item), | |
- "name", &name, "label", &label, | |
+ | |
+ g_object_get (G_OBJECT (item), | |
+ "name", &name, "label", &label, | |
"tip", &tip, "icon", &icon_name, | |
"sensitive", &sensitive, | |
"priority", &priority, | |
NULL); | |
- | |
+ | |
action = gtk_action_new (name, | |
label, | |
tip, | |
icon_name); | |
- | |
- if (icon_name != NULL) { | |
- icon_size = nautilus_get_icon_size_for_stock_size (GTK_ICON_SIZE_LARGE_TOOLBAR); | |
- info = nautilus_icon_info_lookup_from_name (icon_name, icon_size); | |
- pixbuf = nautilus_icon_info_get_pixbuf_nodefault_at_size (info, icon_size); | |
+ if (icon_name != NULL) { | |
+ pixbuf = get_action_icon (icon_name, | |
+ nautilus_get_icon_size_for_stock_size (GTK_ICON_SIZE_LARGE_TOOLBAR)); | |
if (pixbuf != NULL) { | |
g_object_set_data_full (G_OBJECT (action), "toolbar-icon", | |
pixbuf, | |
g_object_unref); | |
} | |
- g_object_unref (info); | |
} | |
- | |
+ | |
gtk_action_set_sensitive (action, sensitive); | |
g_object_set (action, "is-important", priority, NULL); | |
- | |
+ | |
g_signal_connect_data (action, "activate", | |
G_CALLBACK (extension_action_callback), | |
- g_object_ref (item), | |
+ g_object_ref (item), | |
(GClosureNotify)g_object_unref, 0); | |
g_signal_connect_object (item, "notify::sensitive", |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment