summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--docs/nautilus-context-menus.txt7
-rw-r--r--src/file-manager/fm-directory-view.c36
3 files changed, 47 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 81e195253..c4b202f4a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
2003-06-08 Dave Camp <dave@ximian.com>
+ * src/file-manager/fm-directory-view.c:
+ (add_bonobo_menu_ui_and_verbs): Allow the context menu to supply
+ an icon.
+
+2003-06-08 Dave Camp <dave@ximian.com>
+
* src/file-manager/fm-properties-window.c:
(create_basic_page):
(get_pixbuf_for_properties_window),
diff --git a/docs/nautilus-context-menus.txt b/docs/nautilus-context-menus.txt
index 91329e4e8..01b694f0f 100644
--- a/docs/nautilus-context-menus.txt
+++ b/docs/nautilus-context-menus.txt
@@ -27,6 +27,13 @@ Ok, this is how it works:
<oaf_attribute name="nautilusverb:DoExtract" type="string" _value="Extract To..."/>
+ To specify an icon to display next to the context menu, you can
+ specify a nautilusverbicon property:
+
+ <oaf_attribute name="nautilusverbicon:DoExtract" type="string" _value="icon-name"/>
+
+ The icon will be taken from the current icon theme.
+
If the component has "nauitlus:can_handle_multiple_files" set to false,
the item will still be displayed when multiple files are selected, but
it will be insensitive. When the user clicks the menu item, nautilus
diff --git a/src/file-manager/fm-directory-view.c b/src/file-manager/fm-directory-view.c
index 144d7394c..6591dbe95 100644
--- a/src/file-manager/fm-directory-view.c
+++ b/src/file-manager/fm-directory-view.c
@@ -3698,8 +3698,40 @@ add_bonobo_menu_ui_and_verbs (FMDirectoryView *view, GList *files,
/* build the UI */
for (l = verb_names; l; l = l->next) {
char *verb = l->data;
-
- g_string_append_printf (ui_xml, "<menuitem name=\"%s\" verb=\"%s\"/>", verb, verb);
+ char *icon_attribute_name;
+ const char *icon_name;
+ char *pixbuf_data;
+ GdkPixbuf *pixbuf;
+
+ g_string_append_printf (ui_xml,
+ "<menuitem name=\"%s\" verb=\"%s\"",
+ verb, verb);
+
+ icon_attribute_name = g_strdup_printf ("nautilusverbicon:%s",
+ verb);
+ icon_name = bonobo_server_info_prop_lookup (info,
+ icon_attribute_name,
+ langs_cpy);
+ g_free (icon_attribute_name);
+ if (!icon_name) {
+ icon_name = bonobo_server_info_prop_lookup (info, "nautilus:icon",
+ langs_cpy);
+ }
+
+ if (icon_name) {
+ pixbuf = nautilus_icon_factory_get_pixbuf_from_name
+ (icon_name,
+ NULL,
+ NAUTILUS_ICON_SIZE_FOR_MENUS,
+ NULL);
+ if (pixbuf) {
+ pixbuf_data = bonobo_ui_util_pixbuf_to_xml (pixbuf);
+ g_string_append_printf (ui_xml, " pixtype=\"pixbuf\" pixname=\"%s\"", pixbuf_data);
+ g_free (pixbuf_data);
+ g_object_unref (pixbuf);
+ }
+ }
+ g_string_append (ui_xml, "/>");
}
ui_xml = g_string_append (ui_xml, "</placeholder></popup></popups></Root>");