Bug 415810 - "Respect the user's settings of icons in menus" [p=ventnor.bugzilla@yahoo.com.au (Michael Ventnor) r+sr=roc r=Enn a1.9=schrep]

This commit is contained in:
reed@reedloden.com 2008-02-20 02:12:33 -08:00
parent 037d698cbf
commit e1bee5ad78
6 changed files with 59 additions and 2 deletions

View File

@ -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;
}

View File

@ -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 {

View File

@ -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 {

View File

@ -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;

View File

@ -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 */

View File

@ -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;