Index: views/controls/menu/native_menu_gtk.h |
=================================================================== |
--- views/controls/menu/native_menu_gtk.h (revision 0) |
+++ views/controls/menu/native_menu_gtk.h (revision 0) |
@@ -0,0 +1,59 @@ |
+// Copyright (c) 2009 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. |
+ |
+#ifndef VIEWS_CONTROLS_MENU_NATIVE_MENU_GTK_H_ |
+#define VIEWS_CONTROLS_MENU_NATIVE_MENU_GTK_H_ |
+ |
+#include <gtk/gtk.h> |
+ |
+#include "views/controls/menu/menu_wrapper.h" |
+ |
+namespace views { |
+ |
+class Menu2Model; |
+class Menu2Delegate; |
+ |
+// A Gtk implementation of MenuWrapper. |
+// TODO(beng): rename to MenuGtk once the old class is dead. |
+class NativeMenuGtk : public MenuWrapper { |
+ public: |
+ NativeMenuGtk(Menu2Model* model, |
+ Menu2Delegate* delegate); |
+ virtual ~NativeMenuGtk(); |
+ |
+ // Overridden from MenuWrapper: |
+ virtual void RunMenuAt(const gfx::Point& point, int alignment); |
+ virtual void Rebuild(); |
+ virtual void UpdateStates(); |
+ virtual gfx::NativeMenu GetNativeMenu() const; |
+ |
+ private: |
+ void AddSeparatorAt(int index); |
+ void AddMenuItemAt(int index, GtkRadioMenuItem** last_radio_item); |
+ |
+ static void UpdateStateCallback(GtkWidget* menu_item, gpointer data); |
+ |
+ void ResetMenu(); |
+ |
+ // Callback for gtk_menu_popup to position the menu. |
+ static void MenuPositionFunc(GtkMenu* menu, int* x, int* y, gboolean* push_in, |
+ void* data); |
+ |
+ // Event handlers: |
+ void OnActivate(GtkMenuItem* menu_item); |
+ |
+ // Gtk signal handlers. |
+ static void CallActivate(GtkMenuItem* menu_item, NativeMenuGtk* native_menu); |
+ |
+ Menu2Model* model_; |
+ Menu2Delegate* delegate_; |
+ |
+ GtkWidget* menu_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(NativeMenuGtk); |
+}; |
+ |
+} // namespace views |
+ |
+#endif // VIEWS_CONTROLS_MENU_NATIVE_MENU_GTK_H_ |