172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#ifndef CHROME_BROWSER_UI_GTK_GTK_CUSTOM_MENU_H_
672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#define CHROME_BROWSER_UI_GTK_GTK_CUSTOM_MENU_H_
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// GtkCustomMenu is a GtkMenu subclass that can contain, and collaborates with,
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// GtkCustomMenuItem instances. GtkCustomMenuItem is a GtkMenuItem that can
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// have buttons and other normal widgets embeded in it. GtkCustomMenu exists
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// only to override most of the button/motion/move callback functions so
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// that the normal GtkMenu implementation doesn't handle events related to
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// GtkCustomMenuItem items.
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// For a more through overview of this system, see the comments in
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// gtk_custom_menu_item.h.
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <gdk/gdk.h>
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <gtk/gtk.h>
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <gtk/gtkmenuitem.h>
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochG_BEGIN_DECLS
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GTK_TYPE_CUSTOM_MENU                                            \
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  (gtk_custom_menu_get_type())
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GTK_CUSTOM_MENU(obj)                                            \
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  (G_TYPE_CHECK_INSTANCE_CAST((obj), GTK_TYPE_CUSTOM_MENU, GtkCustomMenu))
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GTK_CUSTOM_MENU_CLASS(klass)                                    \
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  (G_TYPE_CHECK_CLASS_CAST((klass), GTK_TYPE_CUSTOM_MENU, GtkCustomMenuClass))
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GTK_IS_CUSTOM_MENU(obj)                                         \
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  (G_TYPE_CHECK_INSTANCE_TYPE((obj), GTK_TYPE_CUSTOM_MENU))
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GTK_IS_CUSTOM_MENU_CLASS(klass)                                 \
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  (G_TYPE_CHECK_CLASS_TYPE((klass), GTK_TYPE_CUSTOM_MENU))
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define GTK_CUSTOM_MENU_GET_CLASS(obj)                                  \
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  (G_TYPE_INSTANCE_GET_CLASS((obj), GTK_TYPE_CUSTOM_MENU, GtkCustomMenuClass))
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtypedef struct _GtkCustomMenu GtkCustomMenu;
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtypedef struct _GtkCustomMenuClass GtkCustomMenuClass;
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstruct _GtkCustomMenu {
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GtkMenu menu;
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstruct _GtkCustomMenuClass {
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GtkMenuClass parent_class;
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochGType gtk_custom_menu_get_type(void) G_GNUC_CONST;
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochGtkWidget* gtk_custom_menu_new();
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochG_END_DECLS
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#endif  // CHROME_BROWSER_UI_GTK_GTK_CUSTOM_MENU_H_
55