1 /* GTK - The GIMP Toolkit
2  * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library. If not, see <http://www.gnu.org/licenses/>.
16  */
17 
18 /*
19  * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
20  * file for a list of people on the GTK+ Team.  See the ChangeLog
21  * files for a list of changes.  These files are distributed with
22  * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
23  */
24 
25 #ifndef __GTK_MENU_SHELL_H__
26 #define __GTK_MENU_SHELL_H__
27 
28 #if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
29 #error "Only <gtk/gtk.h> can be included directly."
30 #endif
31 
32 #include <gtk/gtkcontainer.h>
33 
34 G_BEGIN_DECLS
35 
36 #define GTK_TYPE_MENU_SHELL             (gtk_menu_shell_get_type ())
37 #define GTK_MENU_SHELL(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_MENU_SHELL, GtkMenuShell))
38 #define GTK_MENU_SHELL_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_MENU_SHELL, GtkMenuShellClass))
39 #define GTK_IS_MENU_SHELL(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_MENU_SHELL))
40 #define GTK_IS_MENU_SHELL_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_MENU_SHELL))
41 #define GTK_MENU_SHELL_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_MENU_SHELL, GtkMenuShellClass))
42 
43 
44 typedef struct _GtkMenuShell        GtkMenuShell;
45 typedef struct _GtkMenuShellClass   GtkMenuShellClass;
46 typedef struct _GtkMenuShellPrivate GtkMenuShellPrivate;
47 
48 struct _GtkMenuShell
49 {
50   GtkContainer container;
51 
52   /*< private >*/
53   GtkMenuShellPrivate *priv;
54 };
55 
56 struct _GtkMenuShellClass
57 {
58   GtkContainerClass parent_class;
59 
60   guint submenu_placement : 1;
61 
62   void     (*deactivate)       (GtkMenuShell *menu_shell);
63   void     (*selection_done)   (GtkMenuShell *menu_shell);
64 
65   void     (*move_current)     (GtkMenuShell *menu_shell,
66                                 GtkMenuDirectionType direction);
67   void     (*activate_current) (GtkMenuShell *menu_shell,
68                                 gboolean      force_hide);
69   void     (*cancel)           (GtkMenuShell *menu_shell);
70   void     (*select_item)      (GtkMenuShell *menu_shell,
71                                 GtkWidget    *menu_item);
72   void     (*insert)           (GtkMenuShell *menu_shell,
73                                 GtkWidget    *child,
74                                 gint          position);
75   gint     (*get_popup_delay)  (GtkMenuShell *menu_shell);
76   gboolean (*move_selected)    (GtkMenuShell *menu_shell,
77                                 gint          distance);
78 
79   /* Padding for future expansion */
80   void (*_gtk_reserved1) (void);
81   void (*_gtk_reserved2) (void);
82   void (*_gtk_reserved3) (void);
83   void (*_gtk_reserved4) (void);
84 };
85 
86 
87 GDK_AVAILABLE_IN_ALL
88 GType    gtk_menu_shell_get_type       (void) G_GNUC_CONST;
89 
90 GDK_AVAILABLE_IN_ALL
91 void     gtk_menu_shell_append         (GtkMenuShell *menu_shell,
92                                         GtkWidget    *child);
93 GDK_AVAILABLE_IN_ALL
94 void     gtk_menu_shell_prepend        (GtkMenuShell *menu_shell,
95                                         GtkWidget    *child);
96 GDK_AVAILABLE_IN_ALL
97 void     gtk_menu_shell_insert         (GtkMenuShell *menu_shell,
98                                         GtkWidget    *child,
99                                         gint          position);
100 GDK_AVAILABLE_IN_ALL
101 void     gtk_menu_shell_deactivate     (GtkMenuShell *menu_shell);
102 GDK_AVAILABLE_IN_ALL
103 void     gtk_menu_shell_select_item    (GtkMenuShell *menu_shell,
104                                         GtkWidget    *menu_item);
105 GDK_AVAILABLE_IN_ALL
106 void     gtk_menu_shell_deselect       (GtkMenuShell *menu_shell);
107 GDK_AVAILABLE_IN_ALL
108 void     gtk_menu_shell_activate_item  (GtkMenuShell *menu_shell,
109                                         GtkWidget    *menu_item,
110                                         gboolean      force_deactivate);
111 GDK_AVAILABLE_IN_ALL
112 void     gtk_menu_shell_select_first   (GtkMenuShell *menu_shell,
113                                         gboolean      search_sensitive);
114 GDK_AVAILABLE_IN_ALL
115 void     gtk_menu_shell_cancel         (GtkMenuShell *menu_shell);
116 GDK_AVAILABLE_IN_ALL
117 gboolean gtk_menu_shell_get_take_focus (GtkMenuShell *menu_shell);
118 GDK_AVAILABLE_IN_ALL
119 void     gtk_menu_shell_set_take_focus (GtkMenuShell *menu_shell,
120                                         gboolean      take_focus);
121 
122 GDK_AVAILABLE_IN_ALL
123 GtkWidget *gtk_menu_shell_get_selected_item (GtkMenuShell *menu_shell);
124 GDK_AVAILABLE_IN_ALL
125 GtkWidget *gtk_menu_shell_get_parent_shell  (GtkMenuShell *menu_shell);
126 
127 GDK_AVAILABLE_IN_3_6
128 void       gtk_menu_shell_bind_model   (GtkMenuShell *menu_shell,
129                                         GMenuModel   *model,
130                                         const gchar  *action_namespace,
131                                         gboolean      with_separators);
132 
133 G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkMenuShell, g_object_unref)
134 
135 G_END_DECLS
136 
137 #endif /* __GTK_MENU_SHELL_H__ */
138