gtkmenu.h 8.52 KB
Newer Older
Cody Russell's avatar
Cody Russell committed
1
/* GTK - The GIMP Toolkit
Elliot Lee's avatar
Elliot Lee committed
2 3 4
 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
 *
 * This library is free software; you can redistribute it and/or
5
 * modify it under the terms of the GNU Lesser General Public
Elliot Lee's avatar
Elliot Lee committed
6 7 8 9 10
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Tim Janik's avatar
Tim Janik committed
11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
12
 * Lesser General Public License for more details.
Elliot Lee's avatar
Elliot Lee committed
13
 *
14
 * You should have received a copy of the GNU Lesser General Public
15 16 17
 * License along with this library; if not, write to the
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 * Boston, MA 02111-1307, USA.
Elliot Lee's avatar
Elliot Lee committed
18
 */
19 20

/*
21
 * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
22 23
 * file for a list of people on the GTK+ Team.  See the ChangeLog
 * files for a list of changes.  These files are distributed with
24
 * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
25 26
 */

27
#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
28 29 30
#error "Only <gtk/gtk.h> can be included directly."
#endif

Elliot Lee's avatar
Elliot Lee committed
31 32 33 34
#ifndef __GTK_MENU_H__
#define __GTK_MENU_H__


Tim Janik's avatar
Tim Janik committed
35
#include <gtk/gtkaccelgroup.h>
Elliot Lee's avatar
Elliot Lee committed
36 37 38
#include <gtk/gtkmenushell.h>


39
G_BEGIN_DECLS
Elliot Lee's avatar
Elliot Lee committed
40

Tim Janik's avatar
Tim Janik committed
41
#define GTK_TYPE_MENU			(gtk_menu_get_type ())
Manish Singh's avatar
Manish Singh committed
42 43 44 45 46
#define GTK_MENU(obj)			(G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_MENU, GtkMenu))
#define GTK_MENU_CLASS(klass)		(G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_MENU, GtkMenuClass))
#define GTK_IS_MENU(obj)		(G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_MENU))
#define GTK_IS_MENU_CLASS(klass)	(G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_MENU))
#define GTK_MENU_GET_CLASS(obj)         (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_MENU, GtkMenuClass))
Elliot Lee's avatar
Elliot Lee committed
47 48


49 50 51
typedef struct _GtkMenu        GtkMenu;
typedef struct _GtkMenuClass   GtkMenuClass;
typedef struct _GtkMenuPrivate GtkMenuPrivate;
Elliot Lee's avatar
Elliot Lee committed
52

Pavel Holejsovsky's avatar
Pavel Holejsovsky committed
53 54 55 56 57 58 59
/**
 * GtkMenuPositionFunc:
 * @menu: a #GtkMenu.
 * @x: (out): address of the #gint representing the horizontal
 *     position where the menu shall be drawn.
 * @y: (out): address of the #gint representing the vertical position
 *     where the menu shall be drawn.  This is an output parameter.
60
 * @push_in: (out): This parameter controls how menus placed outside
Pavel Holejsovsky's avatar
Pavel Holejsovsky committed
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
 *     the monitor are handled.  If this is set to %TRUE and part of
 *     the menu is outside the monitor then GTK+ pushes the window
 *     into the visible area, effectively modifying the popup
 *     position.  Note that moving and possibly resizing the menu
 *     around will alter the scroll position to keep the menu items
 *     "in place", i.e. at the same monitor position they would have
 *     been without resizing.  In practice, this behavior is only
 *     useful for combobox popups or option menus and cannot be used
 *     to simply confine a menu to monitor boundaries.  In that case,
 *     changing the scroll offset is not desirable.
 * @user_data: the data supplied by the user in the gtk_menu_popup()
 *     @data parameter.
 *
 * A user function supplied when calling gtk_menu_popup() which
 * controls the positioning of the menu when it is displayed.  The
 * function sets the @x and @y parameters to the coordinates where the
 * menu is to be drawn.  To make the menu appear on a different
 * monitor than the mouse pointer, gtk_menu_set_monitor() must be
 * called.
 */
Tim Janik's avatar
Tim Janik committed
81 82 83
typedef void (*GtkMenuPositionFunc) (GtkMenu   *menu,
				     gint      *x,
				     gint      *y,
84
				     gboolean  *push_in,
Tim Janik's avatar
Tim Janik committed
85
				     gpointer	user_data);
Pavel Holejsovsky's avatar
Pavel Holejsovsky committed
86 87 88 89 90 91 92 93 94

/**
 * GtkMenuDetachFunc:
 * @attach_widget: the #GtkWidget that the menu is being detached from.
 * @menu: the #GtkMenu being detached.
 *
 * A user function supplied when calling gtk_menu_attach_to_widget() which 
 * will be called when the menu is later detached from the widget.
 */
Tim Janik's avatar
Tim Janik committed
95 96
typedef void (*GtkMenuDetachFunc)   (GtkWidget *attach_widget,
				     GtkMenu   *menu);
Elliot Lee's avatar
Elliot Lee committed
97 98 99

struct _GtkMenu
{
100 101 102 103
  GtkMenuShell menu_shell;

  /*< private >*/
  GtkMenuPrivate *priv;
Elliot Lee's avatar
Elliot Lee committed
104 105 106 107 108
};

struct _GtkMenuClass
{
  GtkMenuShellClass parent_class;
109 110 111 112 113 114

  /* Padding for future expansion */
  void (*_gtk_reserved1) (void);
  void (*_gtk_reserved2) (void);
  void (*_gtk_reserved3) (void);
  void (*_gtk_reserved4) (void);
Elliot Lee's avatar
Elliot Lee committed
115 116 117
};


Manish Singh's avatar
Manish Singh committed
118
GType	   gtk_menu_get_type		  (void) G_GNUC_CONST;
Tim Janik's avatar
Tim Janik committed
119
GtkWidget* gtk_menu_new			  (void);
120 121

/* Display the menu onscreen */
Tim Janik's avatar
Tim Janik committed
122 123 124 125 126 127 128
void	   gtk_menu_popup		  (GtkMenu	       *menu,
					   GtkWidget	       *parent_menu_shell,
					   GtkWidget	       *parent_menu_item,
					   GtkMenuPositionFunc	func,
					   gpointer		data,
					   guint		button,
					   guint32		activate_time);
129 130 131 132 133 134
void       gtk_menu_popup_for_device      (GtkMenu             *menu,
                                           GdkDevice           *device,
                                           GtkWidget           *parent_menu_shell,
                                           GtkWidget           *parent_menu_item,
                                           GtkMenuPositionFunc  func,
                                           gpointer             data,
135
                                           GDestroyNotify       destroy,
136 137 138
                                           guint                button,
                                           guint32              activate_time);

139
/* Position the menu according to its position function. Called
140 141
 * from gtkmenuitem.c when a menu-item changes its allocation
 */
Tim Janik's avatar
Tim Janik committed
142
void	   gtk_menu_reposition		  (GtkMenu	       *menu);
143

Tim Janik's avatar
Tim Janik committed
144
void	   gtk_menu_popdown		  (GtkMenu	       *menu);
145 146 147 148

/* Keep track of the last menu item selected. (For the purposes
 * of the option menu
 */
Tim Janik's avatar
Tim Janik committed
149 150
GtkWidget* gtk_menu_get_active		  (GtkMenu	       *menu);
void	   gtk_menu_set_active		  (GtkMenu	       *menu,
Pavel Holejsovsky's avatar
Pavel Holejsovsky committed
151
					   guint		index);
152

153
/* set/get the accelerator group that holds global accelerators (should
154 155 156
 * be added to the corresponding toplevel with gtk_window_add_accel_group().
 */
void	       gtk_menu_set_accel_group	  (GtkMenu	       *menu,
Tim Janik's avatar
Tim Janik committed
157
					   GtkAccelGroup       *accel_group);
158
GtkAccelGroup* gtk_menu_get_accel_group	  (GtkMenu	       *menu);
159 160
void           gtk_menu_set_accel_path    (GtkMenu             *menu,
					   const gchar         *accel_path);
Tim Janik's avatar
Tim Janik committed
161
const gchar*   gtk_menu_get_accel_path    (GtkMenu             *menu);
162 163 164 165 166

/* A reference count is kept for a widget when it is attached to
 * a particular widget. This is typically a menu item; it may also
 * be a widget with a popup menu - for instance, the Notebook widget.
 */
Tim Janik's avatar
Tim Janik committed
167 168 169
void	   gtk_menu_attach_to_widget	  (GtkMenu	       *menu,
					   GtkWidget	       *attach_widget,
					   GtkMenuDetachFunc	detacher);
170 171 172 173 174 175
void	   gtk_menu_detach		  (GtkMenu	       *menu);

/* This should be dumped in favor of data set when the menu is popped
 * up - that is currently in the ItemFactory code, but should be
 * in the Menu code.
 */
176
GtkWidget* gtk_menu_get_attach_widget	  (GtkMenu	       *menu);
177

178 179
void       gtk_menu_set_tearoff_state     (GtkMenu             *menu,
					   gboolean             torn_off);
180
gboolean   gtk_menu_get_tearoff_state     (GtkMenu             *menu);
181 182 183 184

/* This sets the window manager title for the window that
 * appears when a menu is torn off
 */
185 186 187
void          gtk_menu_set_title          (GtkMenu             *menu,
                                           const gchar         *title);
const gchar * gtk_menu_get_title          (GtkMenu             *menu);
Elliot Lee's avatar
Elliot Lee committed
188

189 190 191 192
void       gtk_menu_reorder_child         (GtkMenu             *menu,
                                           GtkWidget           *child,
                                           gint                position);

193 194
void	   gtk_menu_set_screen		  (GtkMenu	       *menu,
					   GdkScreen	       *screen);
195 196 197 198 199 200 201 202

void       gtk_menu_attach                (GtkMenu             *menu,
                                           GtkWidget           *child,
                                           guint                left_attach,
                                           guint                right_attach,
                                           guint                top_attach,
                                           guint                bottom_attach);

203 204
void       gtk_menu_set_monitor           (GtkMenu             *menu,
                                           gint                 monitor_num);
Tim Janik's avatar
Tim Janik committed
205
gint       gtk_menu_get_monitor           (GtkMenu             *menu);
206
GList*     gtk_menu_get_for_attach_widget (GtkWidget           *widget); 
207

208 209 210
void     gtk_menu_set_reserve_toggle_size (GtkMenu  *menu,
                                          gboolean   reserve_toggle_size);
gboolean gtk_menu_get_reserve_toggle_size (GtkMenu  *menu);
Matthias Clasen's avatar
Matthias Clasen committed
211 212


213
G_END_DECLS
Elliot Lee's avatar
Elliot Lee committed
214 215

#endif /* __GTK_MENU_H__ */