 47f9435e99
			
		
	
	47f9435e99
	
	
	
		
			
			This makes overflown menus scrollable via direct manipulation. Once past the threshold, the item below the pointer is unselected and scrolling starts.
		
			
				
	
	
		
			138 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			138 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* GTK - The GIMP Toolkit
 | |
|  * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser General Public
 | |
|  * 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
 | |
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library. If not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
 | |
|  * file for a list of people on the GTK+ Team.  See the ChangeLog
 | |
|  * files for a list of changes.  These files are distributed with
 | |
|  * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
 | |
|  */
 | |
| 
 | |
| #ifndef __GTK_MENU_PRIVATE_H__
 | |
| #define __GTK_MENU_PRIVATE_H__
 | |
| 
 | |
| #include <gtk/gtkmenu.h>
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /* Directions for submenus */
 | |
| typedef enum
 | |
| {
 | |
|   GTK_DIRECTION_LEFT,
 | |
|   GTK_DIRECTION_RIGHT
 | |
| } GtkSubmenuDirection;
 | |
| 
 | |
| /* Placement of submenus */
 | |
| typedef enum
 | |
| {
 | |
|   GTK_TOP_BOTTOM,
 | |
|   GTK_LEFT_RIGHT
 | |
| } GtkSubmenuPlacement;
 | |
| 
 | |
| 
 | |
| struct _GtkMenuPrivate
 | |
| {
 | |
|   GtkWidget *parent_menu_item;
 | |
|   GtkWidget *old_active_menu_item;
 | |
| 
 | |
|   GtkAccelGroup *accel_group;
 | |
|   gchar         *accel_path;
 | |
| 
 | |
|   GtkMenuPositionFunc position_func;
 | |
|   gpointer            position_func_data;
 | |
|   GDestroyNotify      position_func_data_destroy;
 | |
|   gint                position_x;
 | |
|   gint                position_y;
 | |
| 
 | |
|   guint toggle_size;
 | |
|   guint accel_size;
 | |
| 
 | |
|   /* Do _not_ touch these widgets directly. We hide the reference
 | |
|    * count from the toplevel to the menu, so it must be restored
 | |
|    * before operating on these widgets
 | |
|    */
 | |
|   GtkWidget *toplevel;
 | |
| 
 | |
|   GtkWidget     *tearoff_window;
 | |
|   GtkWidget     *tearoff_hbox;
 | |
|   GtkWidget     *tearoff_scrollbar;
 | |
|   GtkAdjustment *tearoff_adjustment;
 | |
| 
 | |
|   GdkWindow *view_window;
 | |
|   GdkWindow *bin_window;
 | |
| 
 | |
|   gint scroll_offset;
 | |
|   gint saved_scroll_offset;
 | |
|   gint scroll_step;
 | |
| 
 | |
|   guint scroll_timeout;
 | |
| 
 | |
|   guint needs_destruction_ref : 1;
 | |
|   guint torn_off              : 1;
 | |
|   /* The tearoff is active when it is torn off and the not-torn-off
 | |
|    * menu is not popped up.
 | |
|    */
 | |
|   guint tearoff_active        : 1;
 | |
|   guint scroll_fast           : 1;
 | |
| 
 | |
|   guint upper_arrow_visible   : 1;
 | |
|   guint lower_arrow_visible   : 1;
 | |
|   guint upper_arrow_prelight  : 1;
 | |
|   guint lower_arrow_prelight  : 1;
 | |
| 
 | |
|   guint have_position         : 1;
 | |
|   guint have_layout           : 1;
 | |
|   guint seen_item_enter       : 1;
 | |
|   guint ignore_button_release : 1;
 | |
|   guint no_toggle_size        : 1;
 | |
|   guint drag_already_pressed  : 1;
 | |
|   guint drag_scroll_started   : 1;
 | |
| 
 | |
|   /* info used for the table */
 | |
|   guint *heights;
 | |
|   gint heights_length;
 | |
|   gint requested_height;
 | |
| 
 | |
|   gboolean initially_pushed_in;
 | |
|   gint monitor_num;
 | |
| 
 | |
|   /* Cached layout information */
 | |
|   gint n_rows;
 | |
|   gint n_columns;
 | |
| 
 | |
|   gchar *title;
 | |
| 
 | |
|  /* Arrow states */
 | |
|   GtkStateFlags lower_arrow_state;
 | |
|   GtkStateFlags upper_arrow_state;
 | |
| 
 | |
|   /* navigation region */
 | |
|   gint navigation_x;
 | |
|   gint navigation_y;
 | |
|   gint navigation_width;
 | |
|   gint navigation_height;
 | |
| 
 | |
|   guint navigation_timeout;
 | |
| 
 | |
|   gdouble drag_start_y;
 | |
|   gint initial_drag_offset;
 | |
| };
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __GTK_MENU_PRIVATE_H__ */
 |