diff options
-rw-r--r-- | module/Makefile.am | 2 | ||||
-rw-r--r-- | module/gtk3privates.h | 193 | ||||
-rw-r--r-- | module/main.c | 3 | ||||
-rw-r--r-- | module/menuitem-proxy.c | 146 |
4 files changed, 196 insertions, 148 deletions
diff --git a/module/Makefile.am b/module/Makefile.am index 169d304..19d7943 100644 --- a/module/Makefile.am +++ b/module/Makefile.am @@ -3,7 +3,7 @@ gtk_moduledir = $(GTK_MODULE_DIR) gtk_module_LTLIBRARIES = libtopmenu-gtk-module.la libtopmenu_gtk_module_la_SOURCES = main.c data.c data.h \ - menuitem-proxy.c menuitem-proxy.h appmenu.c appmenu.h + menuitem-proxy.c menuitem-proxy.h appmenu.c appmenu.h gtk3privates.h libtopmenu_gtk_module_la_CPPFLAGS = $(GTK_CFLAGS) -DG_LOG_DOMAIN=\"topmenu-module\" libtopmenu_gtk_module_la_LIBADD = $(GTK_LIBS) ../libtopmenu-client/libtopmenu-client-gtk$(GTK_VERSION).la libtopmenu_gtk_module_la_LDFLAGS = -avoid-version -module -shared diff --git a/module/gtk3privates.h b/module/gtk3privates.h new file mode 100644 index 0000000..bce2b61 --- /dev/null +++ b/module/gtk3privates.h @@ -0,0 +1,193 @@ +/* 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/>. + */ + +#ifndef _GTK3PRIVATES_H_ +#define _GTK3PRIVATES_H_ + +#include "../global.h" + +#if GTK_MAJOR_VERSION == 3 +#include <gtk/gtk.h> + +/* What could possibly go wrong if I just pull all those privates here? */ +typedef enum +{ + GTK_DIRECTION_LEFT, + GTK_DIRECTION_RIGHT +} GtkSubmenuDirection; + +typedef enum +{ + GTK_TOP_BOTTOM, + GTK_LEFT_RIGHT +} GtkSubmenuPlacement; + +typedef struct _GtkMenuTracker GtkMenuTracker; +typedef struct _GtkMnemnonicHash GtkMnemonicHash; +typedef struct _GtkKeyHash GtkKeyHash; +typedef struct _GtkActionHelper GtkActionHelper; + +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; +}; + +struct _GtkMenuShellPrivate +{ + GList *children; + + GtkWidget *active_menu_item; /* This is not an "active" menu item + * (there is no such thing) but rather, + * the selected menu item in that MenuShell, + * if there is one. + */ + GtkWidget *parent_menu_shell; + GtkMenuTracker *tracker; // if bound to a GMenuModel + + guint button; + guint32 activate_time; + + guint active : 1; + guint have_grab : 1; + guint have_xgrab : 1; + guint ignore_enter : 1; + guint keyboard_mode : 1; + + guint take_focus : 1; + guint activated_submenu : 1; + guint in_unselectable_item : 1; /* This flag is a crutch to keep + * mnemonics in the same menu if + * the user moves the mouse over + * an unselectable menuitem. + */ + GtkMnemonicHash *mnemonic_hash; + GtkKeyHash *key_hash; + + GdkDevice *grab_pointer; +}; + +struct _GtkMenuItemPrivate +{ + GtkWidget *submenu; + GdkWindow *event_window; + + guint16 toggle_size; + guint16 accelerator_width; + + guint timer; + + gchar *accel_path; + + GtkAction *action; + GtkActionHelper *action_helper; + + guint show_submenu_indicator : 1; + guint submenu_placement : 1; + guint submenu_direction : 1; + guint right_justify : 1; + guint timer_from_keypress : 1; + guint from_menubar : 1; + guint use_action_appearance : 1; + guint reserve_indicator : 1; +}; + +#endif /* GTK_MAJOR_VERSION == 3 */ + +#endif /* _GTK3PRIVATES_H_ */ diff --git a/module/main.c b/module/main.c index 12ce49c..2df60b2 100644 --- a/module/main.c +++ b/module/main.c @@ -93,9 +93,6 @@ count_container_items (GtkContainer *container) return count; } - - - static gboolean topmenu_should_hide_menubar_on_window (GtkWindow *window) { diff --git a/module/menuitem-proxy.c b/module/menuitem-proxy.c index b39b064..898d972 100644 --- a/module/menuitem-proxy.c +++ b/module/menuitem-proxy.c @@ -37,7 +37,7 @@ */ #include "../libtopmenu-client/topmenu-monitor.h" - +#include "../global.h" #include "menuitem-proxy.h" static gboolean static_data_ok = FALSE; @@ -59,149 +59,7 @@ static void init_static_data() } #if GTK_MAJOR_VERSION == 3 -/* What could possibly go wrong? */ -typedef enum -{ - GTK_DIRECTION_LEFT, - GTK_DIRECTION_RIGHT -} GtkSubmenuDirection; - -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; - - 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; -}; - -struct _GtkMenuShellPrivate -{ - GList *children; - - GtkWidget *active_menu_item; - GtkWidget *parent_menu_shell; - void *tracker; - - guint button; - guint32 activate_time; - - guint active : 1; - guint have_grab : 1; - guint have_xgrab : 1; - guint ignore_enter : 1; - guint keyboard_mode : 1; - - guint take_focus : 1; - guint activated_submenu : 1; - guint in_unselectable_item : 1; -}; - -struct _GtkMenuItemPrivate -{ - GtkWidget *submenu; - GdkWindow *event_window; - - guint16 toggle_size; - guint16 accelerator_width; - - guint timer; - - gchar *accel_path; - - GtkAction *action; - void *action_helper; - - guint show_submenu_indicator : 1; - guint submenu_placement : 1; - guint submenu_direction : 1; - guint right_justify : 1; - guint timer_from_keypress : 1; - guint from_menubar : 1; - guint use_action_appearance : 1; - guint reserve_indicator : 1; -}; +#include "gtk3privates.h" #endif static gboolean |