Index: chrome/browser/ui/libgtkui/native_theme_gtk2.cc |
diff --git a/chrome/browser/ui/libgtkui/native_theme_gtk2.cc b/chrome/browser/ui/libgtkui/native_theme_gtk2.cc |
deleted file mode 100644 |
index fa179c4024b26d21a5a99230872997bec2a4d28b..0000000000000000000000000000000000000000 |
--- a/chrome/browser/ui/libgtkui/native_theme_gtk2.cc |
+++ /dev/null |
@@ -1,574 +0,0 @@ |
-// Copyright (c) 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/browser/ui/libgtkui/native_theme_gtk2.h" |
- |
-#include <gtk/gtk.h> |
- |
-#include "chrome/browser/ui/libgtkui/chrome_gtk_frame.h" |
-#include "chrome/browser/ui/libgtkui/chrome_gtk_menu_subclasses.h" |
-#include "chrome/browser/ui/libgtkui/gtk2_ui.h" |
-#include "chrome/browser/ui/libgtkui/gtk2_util.h" |
-#include "chrome/browser/ui/libgtkui/skia_utils_gtk2.h" |
-#include "third_party/skia/include/core/SkColor.h" |
-#include "ui/gfx/color_palette.h" |
-#include "ui/gfx/color_utils.h" |
-#include "ui/gfx/geometry/rect.h" |
-#include "ui/gfx/geometry/size.h" |
-#include "ui/gfx/path.h" |
-#include "ui/gfx/skia_util.h" |
-#include "ui/native_theme/common_theme.h" |
-#include "ui/native_theme/native_theme_aura.h" |
-#include "ui/native_theme/native_theme_dark_aura.h" |
- |
-namespace libgtkui { |
- |
-namespace { |
- |
-// Theme colors returned by GetSystemColor(). |
-const SkColor kInvalidColorIdColor = SkColorSetRGB(255, 0, 128); |
-const SkColor kURLTextColor = SkColorSetRGB(0x0b, 0x80, 0x43); |
- |
-// Generates the normal URL color, a green color used in unhighlighted URL |
-// text. It is a mix of |kURLTextColor| and the current text color. Unlike the |
-// selected text color, it is more important to match the qualities of the |
-// foreground typeface color instead of taking the background into account. |
-SkColor NormalURLColor(SkColor foreground) { |
- color_utils::HSL fg_hsl, hue_hsl; |
- color_utils::SkColorToHSL(foreground, &fg_hsl); |
- color_utils::SkColorToHSL(kURLTextColor, &hue_hsl); |
- |
- // Only allow colors that have a fair amount of saturation in them (color vs |
- // white). This means that our output color will always be fairly green. |
- double s = std::max(0.5, fg_hsl.s); |
- |
- // Make sure the luminance is at least as bright as the |kURLTextColor| green |
- // would be if we were to use that. |
- double l; |
- if (fg_hsl.l < hue_hsl.l) |
- l = hue_hsl.l; |
- else |
- l = (fg_hsl.l + hue_hsl.l) / 2; |
- |
- color_utils::HSL output = { hue_hsl.h, s, l }; |
- return color_utils::HSLToSkColor(output, 255); |
-} |
- |
-// Generates the selected URL color, a green color used on URL text in the |
-// currently highlighted entry in the autocomplete popup. It's a mix of |
-// |kURLTextColor|, the current text color, and the background color (the |
-// select highlight). It is more important to contrast with the background |
-// saturation than to look exactly like the foreground color. |
-SkColor SelectedURLColor(SkColor foreground, SkColor background) { |
- color_utils::HSL fg_hsl, bg_hsl, hue_hsl; |
- color_utils::SkColorToHSL(foreground, &fg_hsl); |
- color_utils::SkColorToHSL(background, &bg_hsl); |
- color_utils::SkColorToHSL(kURLTextColor, &hue_hsl); |
- |
- // The saturation of the text should be opposite of the background, clamped |
- // to 0.2-0.8. We make sure it's greater than 0.2 so there's some color, but |
- // less than 0.8 so it's not the oversaturated neon-color. |
- double opposite_s = 1 - bg_hsl.s; |
- double s = std::max(0.2, std::min(0.8, opposite_s)); |
- |
- // The luminance should match the luminance of the foreground text. Again, |
- // we clamp so as to have at some amount of color (green) in the text. |
- double opposite_l = fg_hsl.l; |
- double l = std::max(0.1, std::min(0.9, opposite_l)); |
- |
- color_utils::HSL output = { hue_hsl.h, s, l }; |
- return color_utils::HSLToSkColor(output, 255); |
-} |
- |
-enum WidgetState { |
- NORMAL = 0, |
- ACTIVE = 1, |
- PRELIGHT = 2, |
- SELECTED = 3, |
- INSENSITIVE = 4, |
-}; |
- |
-#if GTK_MAJOR_VERSION == 2 |
-// Same order as enum WidgetState above |
-const GtkStateType stateMap[] = { |
- GTK_STATE_NORMAL, |
- GTK_STATE_ACTIVE, |
- GTK_STATE_PRELIGHT, |
- GTK_STATE_SELECTED, |
- GTK_STATE_INSENSITIVE, |
-}; |
- |
-SkColor GetFGColor(GtkWidget* widget, WidgetState state) { |
- return GdkColorToSkColor(gtk_rc_get_style(widget)->fg[stateMap[state]]); |
-} |
-SkColor GetBGColor(GtkWidget* widget, WidgetState state) { |
- return GdkColorToSkColor(gtk_rc_get_style(widget)->bg[stateMap[state]]); |
-} |
- |
-SkColor GetTextColor(GtkWidget* widget, WidgetState state) { |
- return GdkColorToSkColor(gtk_rc_get_style(widget)->text[stateMap[state]]); |
-} |
-SkColor GetTextAAColor(GtkWidget* widget, WidgetState state) { |
- return GdkColorToSkColor(gtk_rc_get_style(widget)->text_aa[stateMap[state]]); |
-} |
-SkColor GetBaseColor(GtkWidget* widget, WidgetState state) { |
- return GdkColorToSkColor(gtk_rc_get_style(widget)->base[stateMap[state]]); |
-} |
- |
-#else |
-// Same order as enum WidgetState above |
-const GtkStateFlags stateMap[] = { |
- GTK_STATE_FLAG_NORMAL, |
- GTK_STATE_FLAG_ACTIVE, |
- GTK_STATE_FLAG_PRELIGHT, |
- GTK_STATE_FLAG_SELECTED, |
- GTK_STATE_FLAG_INSENSITIVE, |
-}; |
- |
-SkColor GetFGColor(GtkWidget* widget, WidgetState state) { |
- GdkRGBA color; |
- gtk_style_context_get_color( |
- gtk_widget_get_style_context(widget), stateMap[state], &color); |
- return SkColorSetRGB(color.red * 255, color.green * 255, color.blue * 255); |
-} |
-SkColor GetBGColor(GtkWidget* widget, WidgetState state) { |
- GdkRGBA color; |
- |
- G_GNUC_BEGIN_IGNORE_DEPRECATIONS |
- gtk_style_context_get_background_color( |
- gtk_widget_get_style_context(widget), stateMap[state], &color); |
- G_GNUC_END_IGNORE_DEPRECATIONS |
- |
- // Hack for default color |
- if (color.alpha == 0.0) |
- color = {1, 1, 1, 1}; |
- |
- return SkColorSetRGB(color.red * 255, color.green * 255, color.blue * 255); |
-} |
- |
-SkColor GetTextColor(GtkWidget* widget, WidgetState state) { |
- return GetFGColor(widget, state); |
-} |
-SkColor GetTextAAColor(GtkWidget* widget, WidgetState state) { |
- return GetFGColor(widget, state); |
-} |
-SkColor GetBaseColor(GtkWidget* widget, WidgetState state) { |
- return GetBGColor(widget, state); |
-} |
- |
-#endif |
- |
-} // namespace |
- |
-// static |
-NativeThemeGtk2* NativeThemeGtk2::instance() { |
- CR_DEFINE_STATIC_LOCAL(NativeThemeGtk2, s_native_theme, ()); |
- return &s_native_theme; |
-} |
- |
-// Constructors automatically called |
-NativeThemeGtk2::NativeThemeGtk2() {} |
-// This doesn't actually get called |
-NativeThemeGtk2::~NativeThemeGtk2() {} |
- |
-void NativeThemeGtk2::PaintMenuPopupBackground( |
- SkCanvas* canvas, |
- const gfx::Size& size, |
- const MenuBackgroundExtraParams& menu_background) const { |
- if (menu_background.corner_radius > 0) { |
- SkPaint paint; |
- paint.setStyle(SkPaint::kFill_Style); |
- paint.setFlags(SkPaint::kAntiAlias_Flag); |
- paint.setColor(GetSystemColor(kColorId_MenuBackgroundColor)); |
- |
- gfx::Path path; |
- SkRect rect = SkRect::MakeWH(SkIntToScalar(size.width()), |
- SkIntToScalar(size.height())); |
- SkScalar radius = SkIntToScalar(menu_background.corner_radius); |
- SkScalar radii[8] = {radius, radius, radius, radius, |
- radius, radius, radius, radius}; |
- path.addRoundRect(rect, radii); |
- |
- canvas->drawPath(path, paint); |
- } else { |
- canvas->drawColor(GetSystemColor(kColorId_MenuBackgroundColor), |
- SkBlendMode::kSrc); |
- } |
-} |
- |
-void NativeThemeGtk2::PaintMenuItemBackground( |
- SkCanvas* canvas, |
- State state, |
- const gfx::Rect& rect, |
- const MenuItemExtraParams& menu_item) const { |
- SkColor color; |
- SkPaint paint; |
- switch (state) { |
- case NativeTheme::kNormal: |
- case NativeTheme::kDisabled: |
- color = GetSystemColor(NativeTheme::kColorId_MenuBackgroundColor); |
- paint.setColor(color); |
- break; |
- case NativeTheme::kHovered: |
- color = GetSystemColor( |
- NativeTheme::kColorId_FocusedMenuItemBackgroundColor); |
- paint.setColor(color); |
- break; |
- default: |
- NOTREACHED() << "Invalid state " << state; |
- break; |
- } |
- if (menu_item.corner_radius > 0) { |
- const SkScalar radius = SkIntToScalar(menu_item.corner_radius); |
- canvas->drawRoundRect(gfx::RectToSkRect(rect), radius, radius, paint); |
- return; |
- } |
- canvas->drawRect(gfx::RectToSkRect(rect), paint); |
-} |
- |
-SkColor NativeThemeGtk2::GetSystemColor(ColorId color_id) const { |
- const SkColor kPositiveTextColor = SkColorSetRGB(0x0b, 0x80, 0x43); |
- const SkColor kNegativeTextColor = SkColorSetRGB(0xc5, 0x39, 0x29); |
- |
- switch (color_id) { |
- // Windows |
- case kColorId_WindowBackground: |
- return GetBGColor(GetWindow(), SELECTED); |
- |
- // Dialogs |
- case kColorId_DialogBackground: |
- case kColorId_BubbleBackground: |
- return GetBGColor(GetWindow(), NORMAL); |
- |
- // FocusableBorder |
- case kColorId_FocusedBorderColor: |
- return GetBGColor(GetEntry(), SELECTED); |
- case kColorId_UnfocusedBorderColor: |
- return GetTextAAColor(GetEntry(), NORMAL); |
- |
- // MenuItem |
- case kColorId_SelectedMenuItemForegroundColor: |
- return GetTextColor(GetMenuItem(), SELECTED); |
- case kColorId_FocusedMenuItemBackgroundColor: |
- return GetBGColor(GetMenuItem(), SELECTED); |
- |
- case kColorId_EnabledMenuItemForegroundColor: |
- return GetTextColor(GetMenuItem(), NORMAL); |
- case kColorId_DisabledMenuItemForegroundColor: |
- return GetTextColor(GetMenuItem(), INSENSITIVE); |
- case kColorId_FocusedMenuButtonBorderColor: |
- return GetBGColor(GetEntry(), NORMAL); |
- case kColorId_HoverMenuButtonBorderColor: |
- return GetTextAAColor(GetEntry(), PRELIGHT); |
- case kColorId_MenuBorderColor: |
- case kColorId_EnabledMenuButtonBorderColor: |
- case kColorId_MenuSeparatorColor: { |
- return GetTextColor(GetMenuItem(), INSENSITIVE); |
- } |
- case kColorId_MenuBackgroundColor: |
- return GetBGColor(GetMenu(), NORMAL); |
- |
- // Label |
- case kColorId_LabelEnabledColor: |
- return GetTextColor(GetEntry(), NORMAL); |
- case kColorId_LabelDisabledColor: |
- return GetTextColor(GetLabel(), INSENSITIVE); |
- |
- // Link |
- case kColorId_LinkDisabled: |
- return SkColorSetA(GetSystemColor(kColorId_LinkEnabled), 0xBB); |
- case kColorId_LinkEnabled: { |
- SkColor link_color = SK_ColorTRANSPARENT; |
- GetChromeStyleColor("link-color", &link_color); |
- if (link_color != SK_ColorTRANSPARENT) |
- return link_color; |
- // Default color comes from gtklinkbutton.c. |
- return SkColorSetRGB(0x00, 0x00, 0xEE); |
- } |
- case kColorId_LinkPressed: |
- return SK_ColorRED; |
- |
- // Button |
- case kColorId_ButtonEnabledColor: |
- return GetTextColor(GetButton(), NORMAL); |
- case kColorId_BlueButtonEnabledColor: |
- return GetTextColor(GetBlueButton(), NORMAL); |
- case kColorId_ButtonDisabledColor: |
- return GetTextColor(GetButton(), INSENSITIVE); |
- case kColorId_BlueButtonDisabledColor: |
- return GetTextColor(GetBlueButton(), INSENSITIVE); |
- case kColorId_ButtonHoverColor: |
- return GetTextColor(GetButton(), PRELIGHT); |
- case kColorId_BlueButtonHoverColor: |
- return GetTextColor(GetBlueButton(), PRELIGHT); |
- case kColorId_BlueButtonPressedColor: |
- return GetTextColor(GetBlueButton(), ACTIVE); |
- case kColorId_BlueButtonShadowColor: |
- return SK_ColorTRANSPARENT; |
- case kColorId_ProminentButtonColor: |
- return GetSystemColor(kColorId_LinkEnabled); |
- case kColorId_TextOnProminentButtonColor: |
- return GetTextColor(GetLabel(), SELECTED); |
- case kColorId_ButtonPressedShade: |
- return SK_ColorTRANSPARENT; |
- |
- // Textfield |
- case kColorId_TextfieldDefaultColor: |
- return GetTextColor(GetEntry(), NORMAL); |
- case kColorId_TextfieldDefaultBackground: |
- return GetBaseColor(GetEntry(), NORMAL); |
- |
-#if GTK_MAJOR_VERSION == 2 |
- case kColorId_TextfieldReadOnlyColor: |
- return GetTextColor(GetEntry(), ACTIVE); |
- case kColorId_TextfieldReadOnlyBackground: |
- return GetBaseColor(GetEntry(), ACTIVE); |
- case kColorId_TextfieldSelectionColor: |
- return GetTextColor(GetEntry(), SELECTED); |
- case kColorId_TextfieldSelectionBackgroundFocused: |
- return GetBaseColor(GetEntry(), SELECTED); |
-#else |
- case kColorId_TextfieldReadOnlyColor: |
- return GetTextColor(GetEntry(), SELECTED); |
- case kColorId_TextfieldReadOnlyBackground: |
- return GetBaseColor(GetEntry(), SELECTED); |
- case kColorId_TextfieldSelectionColor: |
- return GetTextColor(GetLabel(), SELECTED); |
- case kColorId_TextfieldSelectionBackgroundFocused: |
- return GetBaseColor(GetLabel(), SELECTED); |
-#endif |
- |
- |
- // Tooltips |
- case kColorId_TooltipBackground: |
- return GetBGColor(GetTooltip(), NORMAL); |
- case kColorId_TooltipText: |
- return GetFGColor(GetTooltip(), NORMAL); |
- |
- // Trees and Tables (implemented on GTK using the same class) |
- case kColorId_TableBackground: |
- case kColorId_TreeBackground: |
- return GetBGColor(GetTree(), NORMAL); |
- case kColorId_TableText: |
- case kColorId_TreeText: |
- return GetTextColor(GetTree(), NORMAL); |
- case kColorId_TableSelectedText: |
- case kColorId_TableSelectedTextUnfocused: |
- case kColorId_TreeSelectedText: |
- case kColorId_TreeSelectedTextUnfocused: |
- return GetTextColor(GetTree(), SELECTED); |
- case kColorId_TableSelectionBackgroundFocused: |
- case kColorId_TableSelectionBackgroundUnfocused: |
- case kColorId_TreeSelectionBackgroundFocused: |
- case kColorId_TreeSelectionBackgroundUnfocused: |
- return GetBGColor(GetTree(), SELECTED); |
- case kColorId_TreeArrow: |
- return GetFGColor(GetTree(), NORMAL); |
- case kColorId_TableGroupingIndicatorColor: |
- return GetTextAAColor(GetTree(), NORMAL); |
- |
- // Results Table |
- case kColorId_ResultsTableNormalBackground: |
- return GetSystemColor(kColorId_TextfieldDefaultBackground); |
- case kColorId_ResultsTableHoveredBackground: |
- return color_utils::AlphaBlend( |
- GetSystemColor(kColorId_TextfieldDefaultBackground), |
- GetSystemColor(kColorId_TextfieldSelectionBackgroundFocused), |
- 0x80); |
- case kColorId_ResultsTableSelectedBackground: |
- return GetSystemColor(kColorId_TextfieldSelectionBackgroundFocused); |
- case kColorId_ResultsTableNormalText: |
- case kColorId_ResultsTableHoveredText: |
- return GetSystemColor(kColorId_TextfieldDefaultColor); |
- case kColorId_ResultsTableSelectedText: |
- return GetSystemColor(kColorId_TextfieldSelectionColor); |
- case kColorId_ResultsTableNormalDimmedText: |
- case kColorId_ResultsTableHoveredDimmedText: |
- return color_utils::AlphaBlend( |
- GetSystemColor(kColorId_TextfieldDefaultColor), |
- GetSystemColor(kColorId_TextfieldDefaultBackground), |
- 0x80); |
- case kColorId_ResultsTableSelectedDimmedText: |
- return color_utils::AlphaBlend( |
- GetSystemColor(kColorId_TextfieldSelectionColor), |
- GetSystemColor(kColorId_TextfieldDefaultBackground), |
- 0x80); |
- case kColorId_ResultsTableNormalUrl: |
- case kColorId_ResultsTableHoveredUrl: |
- return NormalURLColor(GetSystemColor(kColorId_TextfieldDefaultColor)); |
- |
- case kColorId_ResultsTableSelectedUrl: |
- return SelectedURLColor( |
- GetSystemColor(kColorId_TextfieldSelectionColor), |
- GetSystemColor(kColorId_TextfieldSelectionBackgroundFocused)); |
- |
- case kColorId_ResultsTablePositiveText: { |
- return color_utils::GetReadableColor(kPositiveTextColor, |
- GetBaseColor(GetEntry(), NORMAL)); |
- } |
- case kColorId_ResultsTablePositiveHoveredText: { |
- return color_utils::GetReadableColor(kPositiveTextColor, |
- GetBaseColor(GetEntry(), PRELIGHT)); |
- } |
- case kColorId_ResultsTablePositiveSelectedText: { |
- return color_utils::GetReadableColor(kPositiveTextColor, |
- GetBaseColor(GetEntry(), SELECTED)); |
- } |
- case kColorId_ResultsTableNegativeText: { |
- return color_utils::GetReadableColor(kNegativeTextColor, |
- GetBaseColor(GetEntry(), NORMAL)); |
- } |
- case kColorId_ResultsTableNegativeHoveredText: { |
- return color_utils::GetReadableColor(kNegativeTextColor, |
- GetBaseColor(GetEntry(), PRELIGHT)); |
- } |
- case kColorId_ResultsTableNegativeSelectedText: { |
- return color_utils::GetReadableColor(kNegativeTextColor, |
- GetBaseColor(GetEntry(), SELECTED)); |
- } |
- |
- // Throbber |
- case kColorId_ThrobberSpinningColor: |
- case kColorId_ThrobberLightColor: |
- return GetSystemColor(kColorId_TextfieldSelectionBackgroundFocused); |
- |
- case kColorId_ThrobberWaitingColor: |
- return color_utils::AlphaBlend( |
- GetSystemColor(kColorId_TextfieldSelectionBackgroundFocused), |
- GetBGColor(GetWindow(), NORMAL), |
- 0x80); |
- |
- // Alert icons |
- // Just fall back to the same colors as Aura. |
- case kColorId_AlertSeverityLow: |
- case kColorId_AlertSeverityMedium: |
- case kColorId_AlertSeverityHigh: { |
- ui::NativeTheme* fallback_theme = |
- color_utils::IsDark(GetTextColor(GetEntry(), NORMAL)) |
- ? ui::NativeThemeAura::instance() |
- : ui::NativeThemeDarkAura::instance(); |
- return fallback_theme->GetSystemColor(color_id); |
- } |
- |
- case kColorId_NumColors: |
- NOTREACHED(); |
- break; |
- } |
- |
- return kInvalidColorIdColor; |
-} |
- |
-// Get ChromeGtkFrame theme colors. No-op in GTK3. |
-bool NativeThemeGtk2::GetChromeStyleColor(const char* style_property, |
- SkColor* ret_color) const { |
-#if GTK_MAJOR_VERSION == 2 |
- GdkColor* style_color = nullptr; |
- gtk_widget_style_get(GetWindow(), style_property, &style_color, nullptr); |
- if (style_color) { |
- *ret_color = GdkColorToSkColor(*style_color); |
- gdk_color_free(style_color); |
- return true; |
- } |
-#endif |
- |
- return false; |
-} |
- |
-GtkWidget* NativeThemeGtk2::GetWindow() const { |
- static GtkWidget* fake_window = NULL; |
- |
- if (!fake_window) { |
- fake_window = chrome_gtk_frame_new(); |
- gtk_widget_realize(fake_window); |
- } |
- |
- return fake_window; |
-} |
- |
-GtkWidget* NativeThemeGtk2::GetEntry() const { |
- static GtkWidget* fake_entry = NULL; |
- |
- if (!fake_entry) { |
- fake_entry = gtk_entry_new(); |
- |
- // The fake entry needs to be in the window so it can be realized so we can |
- // use the computed parts of the style. |
- gtk_container_add(GTK_CONTAINER(GetWindow()), fake_entry); |
- gtk_widget_realize(fake_entry); |
- } |
- |
- return fake_entry; |
-} |
- |
-GtkWidget* NativeThemeGtk2::GetLabel() const { |
- static GtkWidget* fake_label = NULL; |
- |
- if (!fake_label) |
- fake_label = gtk_label_new(""); |
- |
- return fake_label; |
-} |
- |
-GtkWidget* NativeThemeGtk2::GetButton() const { |
- static GtkWidget* fake_button = NULL; |
- |
- if (!fake_button) |
- fake_button = gtk_button_new(); |
- |
- return fake_button; |
-} |
- |
-GtkWidget* NativeThemeGtk2::GetBlueButton() const { |
- static GtkWidget* fake_bluebutton = NULL; |
- |
- if (!fake_bluebutton) { |
- fake_bluebutton = gtk_button_new(); |
- TurnButtonBlue(fake_bluebutton); |
- } |
- |
- return fake_bluebutton; |
-} |
- |
-GtkWidget* NativeThemeGtk2::GetTree() const { |
- static GtkWidget* fake_tree = NULL; |
- |
- if (!fake_tree) |
- fake_tree = gtk_tree_view_new(); |
- |
- return fake_tree; |
-} |
- |
-GtkWidget* NativeThemeGtk2::GetTooltip() const { |
- static GtkWidget* fake_tooltip = NULL; |
- |
- if (!fake_tooltip) { |
- fake_tooltip = gtk_window_new(GTK_WINDOW_TOPLEVEL); |
- gtk_widget_set_name(fake_tooltip, "gtk-tooltip"); |
- gtk_widget_realize(fake_tooltip); |
- } |
- |
- return fake_tooltip; |
-} |
- |
-GtkWidget* NativeThemeGtk2::GetMenu() const { |
- static GtkWidget* fake_menu = NULL; |
- |
- if (!fake_menu) |
- fake_menu = gtk_custom_menu_new(); |
- |
- return fake_menu; |
-} |
- |
-GtkWidget* NativeThemeGtk2::GetMenuItem() const { |
- static GtkWidget* fake_menu_item = NULL; |
- |
- if (!fake_menu_item) { |
- fake_menu_item = gtk_custom_menu_item_new(); |
- gtk_menu_shell_append(GTK_MENU_SHELL(GetMenu()), fake_menu_item); |
- } |
- |
- return fake_menu_item; |
-} |
- |
-} // namespace libgtkui |