diff --git a/mozilla/layout/style/nsCSSRuleProcessor.cpp b/mozilla/layout/style/nsCSSRuleProcessor.cpp index 44a7d952de0..48a567ba149 100644 --- a/mozilla/layout/style/nsCSSRuleProcessor.cpp +++ b/mozilla/layout/style/nsCSSRuleProcessor.cpp @@ -777,6 +777,11 @@ InitSystemMetrics() sSystemMetrics->AppendElement(do_GetAtom("scrollbar-thumb-proportional")); } + lookAndFeel->GetMetric(nsILookAndFeel::eMetric_ImagesInMenus, metricResult); + if (metricResult) { + sSystemMetrics->AppendElement(do_GetAtom("images-in-menus")); + } + return PR_TRUE; } diff --git a/mozilla/toolkit/content/xul.css b/mozilla/toolkit/content/xul.css index a813a7d6954..610c301a8e4 100644 --- a/mozilla/toolkit/content/xul.css +++ b/mozilla/toolkit/content/xul.css @@ -304,6 +304,17 @@ menuitem.menuitem-non-iconic { -moz-binding: url("chrome://global/content/bindings/menu.xml#menubutton-item"); } +%ifdef MOZ_WIDGET_GTK2 +/********* detection of system setting to use icons in menus ***********/ +menuitem:not([type]):not(:-moz-system-metric(images-in-menus)) > .menu-iconic-left { + visibility: hidden; +} + +menu:not(:-moz-system-metric(images-in-menus)) > .menu-iconic-left { + visibility: hidden; +} +%endif + /********* menuseparator ***********/ menuseparator { diff --git a/mozilla/widget/public/nsILookAndFeel.h b/mozilla/widget/public/nsILookAndFeel.h index d115cb77591..f3e6b5ee2d1 100644 --- a/mozilla/widget/public/nsILookAndFeel.h +++ b/mozilla/widget/public/nsILookAndFeel.h @@ -244,7 +244,12 @@ public: eMetric_IMERawInputUnderlineStyle, eMetric_IMESelectedRawTextUnderlineStyle, eMetric_IMEConvertedTextUnderlineStyle, - eMetric_IMESelectedConvertedTextUnderline + eMetric_IMESelectedConvertedTextUnderline, + + /** + * If this metric != 0, show icons in menus. + */ + eMetric_ImagesInMenus } nsMetricID; enum { diff --git a/mozilla/widget/src/gtk2/gtk2drawing.c b/mozilla/widget/src/gtk2/gtk2drawing.c index 07f0cb5e5e5..e9f5366ce15 100644 --- a/mozilla/widget/src/gtk2/gtk2drawing.c +++ b/mozilla/widget/src/gtk2/gtk2drawing.c @@ -81,6 +81,7 @@ static GtkWidget* gMenuBarWidget; static GtkWidget* gMenuBarItemWidget; static GtkWidget* gMenuPopupWidget; static GtkWidget* gMenuItemWidget; +static GtkWidget* gImageMenuItemWidget; static GtkWidget* gCheckMenuItemWidget; static GtkWidget* gTreeViewWidget; static GtkWidget* gTreeHeaderCellWidget; @@ -437,6 +438,19 @@ ensure_menu_item_widget() return MOZ_GTK_SUCCESS; } +static gint +ensure_image_menu_item_widget() +{ + if (!gImageMenuItemWidget) { + ensure_menu_popup_widget(); + gImageMenuItemWidget = gtk_image_menu_item_new(); + gtk_menu_shell_append(GTK_MENU_SHELL(gMenuPopupWidget), + gImageMenuItemWidget); + gtk_widget_realize(gImageMenuItemWidget); + } + return MOZ_GTK_SUCCESS; +} + static gint ensure_menu_separator_widget() { @@ -2662,6 +2676,19 @@ moz_gtk_get_scrollbar_metrics(MozGtkScrollbarMetrics *metrics) return MOZ_GTK_SUCCESS; } +gboolean +moz_gtk_images_in_menus() +{ + gboolean result; + GtkSettings* settings; + + ensure_image_menu_item_widget(); + settings = gtk_widget_get_settings(gImageMenuItemWidget); + + g_object_get(settings, "gtk-menu-images", &result, NULL); + return result; +} + gint moz_gtk_widget_paint(GtkThemeWidgetType widget, GdkDrawable* drawable, GdkRectangle* rect, GdkRectangle* cliprect, @@ -2906,6 +2933,7 @@ moz_gtk_shutdown() gMenuBarItemWidget = NULL; gMenuPopupWidget = NULL; gMenuItemWidget = NULL; + gImageMenuItemWidget = NULL; gCheckMenuItemWidget = NULL; gTreeViewWidget = NULL; gTreeHeaderCellWidget = NULL; diff --git a/mozilla/widget/src/gtk2/gtkdrawing.h b/mozilla/widget/src/gtk2/gtkdrawing.h index 060213a0c1d..88ab8914d8e 100644 --- a/mozilla/widget/src/gtk2/gtkdrawing.h +++ b/mozilla/widget/src/gtk2/gtkdrawing.h @@ -404,6 +404,12 @@ GtkWidget* moz_gtk_get_scrollbar_widget(void); */ gint moz_gtk_get_tab_thickness(void); +/** + * Get a boolean which indicates whether or not to use images in menus. + * If TRUE, use images in menus. + */ +gboolean moz_gtk_images_in_menus(void); + #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/mozilla/widget/src/gtk2/nsLookAndFeel.cpp b/mozilla/widget/src/gtk2/nsLookAndFeel.cpp index 252dcd00a4e..13cc7027fbe 100644 --- a/mozilla/widget/src/gtk2/nsLookAndFeel.cpp +++ b/mozilla/widget/src/gtk2/nsLookAndFeel.cpp @@ -536,7 +536,9 @@ NS_IMETHODIMP nsLookAndFeel::GetMetric(const nsMetricID aID, PRInt32 & aMetric) case eMetric_IMESelectedConvertedTextUnderline: aMetric = NS_UNDERLINE_STYLE_NONE; break; - + case eMetric_ImagesInMenus: + aMetric = moz_gtk_images_in_menus(); + break; default: aMetric = 0; res = NS_ERROR_FAILURE;