diff options
author | Christian Dywan <christian@twotoasts.de> | 2009-10-07 18:14:27 +0200 |
---|---|---|
committer | Javier Jardón <jjardon@gnome.org> | 2010-05-03 01:40:40 +0200 |
commit | 474529e2c06e38f941bea91ed4decdfaceee9a56 (patch) | |
tree | 19722d403a28c630085022c4b4fd695e6775b470 | |
parent | ea36fff086dc5afc4993f7f6bc970c61bda56c00 (diff) | |
download | gtk+-474529e2c06e38f941bea91ed4decdfaceee9a56.tar.gz |
Remove GtkItemFactory completely
-rw-r--r-- | gtk/gtkitemfactory.c | 1586 | ||||
-rw-r--r-- | gtk/gtkitemfactory.h | 236 |
2 files changed, 0 insertions, 1822 deletions
diff --git a/gtk/gtkitemfactory.c b/gtk/gtkitemfactory.c deleted file mode 100644 index 4197866b14..0000000000 --- a/gtk/gtkitemfactory.c +++ /dev/null @@ -1,1586 +0,0 @@ -/* GTK - The GIMP Toolkit - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * GtkItemFactory: Flexible item factory with automatic rc handling - * Copyright (C) 1998 Tim Janik - * - * 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, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * 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/. - */ - -#include <config.h> - -#undef GTK_DISABLE_DEPRECATED -#include "gtkitemfactory.h" -#include "gtkoptionmenu.h" -#include "gtkmenubar.h" -#include "gtkmenu.h" -#include "gtkmenuitem.h" -#include "gtkradiomenuitem.h" -#include "gtkcheckmenuitem.h" -#include "gtkimagemenuitem.h" -#include "gtktearoffmenuitem.h" -#include "gtkaccelmap.h" -#include "gtkaccellabel.h" -#include "gdk/gdkkeysyms.h" -#include "gtkimage.h" -#include "gtkstock.h" -#include "gtkiconfactory.h" -#include "gtkintl.h" -#include <string.h> -#include <fcntl.h> -#ifdef HAVE_UNISTD_H -#include <unistd.h> -#endif -#include <stdio.h> - -#include "gtkalias.h" - -/* --- defines --- */ -#define ITEM_FACTORY_STRING ((gchar*) item_factory_string) -#define ITEM_BLOCK_SIZE (128) - - -/* --- structures --- */ -typedef struct _GtkIFCBData GtkIFCBData; -typedef struct _GtkIFDumpData GtkIFDumpData; -struct _GtkIFCBData -{ - GtkItemFactoryCallback func; - guint callback_type; - gpointer func_data; - guint callback_action; -}; - - -/* --- prototypes --- */ -static void gtk_item_factory_destroy (GtkObject *object); -static void gtk_item_factory_finalize (GObject *object); - - -/* --- static variables --- */ -static const gchar item_factory_string[] = "Gtk-<ItemFactory>"; -static GQuark quark_popup_data = 0; -static GQuark quark_if_menu_pos = 0; -static GQuark quark_item_factory = 0; -static GQuark quark_item_path = 0; -static GQuark quark_action = 0; -static GQuark quark_accel_group = 0; -static GQuark quark_type_item = 0; -static GQuark quark_type_title = 0; -static GQuark quark_type_radio_item = 0; -static GQuark quark_type_check_item = 0; -static GQuark quark_type_toggle_item = 0; -static GQuark quark_type_image_item = 0; -static GQuark quark_type_stock_item = 0; -static GQuark quark_type_tearoff_item = 0; -static GQuark quark_type_separator_item = 0; -static GQuark quark_type_branch = 0; -static GQuark quark_type_last_branch = 0; - -G_DEFINE_TYPE (GtkItemFactory, gtk_item_factory, GTK_TYPE_OBJECT) - -/* --- functions --- */ -static void -gtk_item_factory_class_init (GtkItemFactoryClass *class) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (class); - GtkObjectClass *object_class = GTK_OBJECT_CLASS (class); - - gobject_class->finalize = gtk_item_factory_finalize; - - object_class->destroy = gtk_item_factory_destroy; - - class->item_ht = g_hash_table_new (g_str_hash, g_str_equal); - - quark_popup_data = g_quark_from_static_string ("GtkItemFactory-popup-data"); - quark_if_menu_pos = g_quark_from_static_string ("GtkItemFactory-menu-position"); - quark_item_factory = g_quark_from_static_string ("GtkItemFactory"); - quark_item_path = g_quark_from_static_string ("GtkItemFactory-path"); - quark_action = g_quark_from_static_string ("GtkItemFactory-action"); - quark_accel_group = g_quark_from_static_string ("GtkAccelGroup"); - quark_type_item = g_quark_from_static_string ("<Item>"); - quark_type_title = g_quark_from_static_string ("<Title>"); - quark_type_radio_item = g_quark_from_static_string ("<RadioItem>"); - quark_type_check_item = g_quark_from_static_string ("<CheckItem>"); - quark_type_toggle_item = g_quark_from_static_string ("<ToggleItem>"); - quark_type_image_item = g_quark_from_static_string ("<ImageItem>"); - quark_type_stock_item = g_quark_from_static_string ("<StockItem>"); - quark_type_separator_item = g_quark_from_static_string ("<Separator>"); - quark_type_tearoff_item = g_quark_from_static_string ("<Tearoff>"); - quark_type_branch = g_quark_from_static_string ("<Branch>"); - quark_type_last_branch = g_quark_from_static_string ("<LastBranch>"); -} - -static void -gtk_item_factory_init (GtkItemFactory *ifactory) -{ - ifactory->path = NULL; - ifactory->accel_group = NULL; - ifactory->widget = NULL; - ifactory->items = NULL; - ifactory->translate_func = NULL; - ifactory->translate_data = NULL; - ifactory->translate_notify = NULL; -} - -/** - * gtk_item_factory_new: - * @container_type: the kind of menu to create; can be - * #GTK_TYPE_MENU_BAR, #GTK_TYPE_MENU or #GTK_TYPE_OPTION_MENU - * @path: the factory path of the new item factory, a string of the form - * <literal>"<name>"</literal> - * @accel_group: (allow-none): a #GtkAccelGroup to which the accelerators for the - * menu items will be added, or %NULL to create a new one - * @returns: a new #GtkItemFactory - * - * Creates a new #GtkItemFactory. - * - * Beware that the returned object does not have a floating reference. - * - * Deprecated: 2.4: Use #GtkUIManager instead. - */ -GtkItemFactory* -gtk_item_factory_new (GType container_type, - const gchar *path, - GtkAccelGroup *accel_group) -{ - GtkItemFactory *ifactory; - - g_return_val_if_fail (path != NULL, NULL); - - ifactory = g_object_new (GTK_TYPE_ITEM_FACTORY, NULL); - gtk_item_factory_construct (ifactory, container_type, path, accel_group); - - return ifactory; -} - -static void -gtk_item_factory_callback_marshal (GtkWidget *widget, - gpointer func_data) -{ - GtkIFCBData *data; - - data = func_data; - - if (data->callback_type == 1) - { - GtkItemFactoryCallback1 func1 = (GtkItemFactoryCallback1) data->func; - func1 (data->func_data, data->callback_action, widget); - } - else if (data->callback_type == 2) - { - GtkItemFactoryCallback2 func2 = (GtkItemFactoryCallback2) data->func; - func2 (widget, data->func_data, data->callback_action); - } -} - -static void -gtk_item_factory_item_remove_widget (GtkWidget *widget, - GtkItemFactoryItem *item) -{ - item->widgets = g_slist_remove (item->widgets, widget); - g_object_set_qdata (G_OBJECT (widget), quark_item_factory, NULL); - g_object_set_qdata (G_OBJECT (widget), quark_item_path, NULL); -} - -/** - * gtk_item_factory_add_foreign: - * @accel_widget: widget to install an accelerator on - * @full_path: the full path for the @accel_widget - * @accel_group: the accelerator group to install the accelerator in - * @keyval: key value of the accelerator - * @modifiers: modifier combination of the accelerator - * - * Installs an accelerator for @accel_widget in @accel_group, that causes - * the ::activate signal to be emitted if the accelerator is activated. - * - * This function can be used to make widgets participate in the accel - * saving/restoring functionality provided by gtk_accel_map_save() and - * gtk_accel_map_load(), even if they haven't been created by an item - * factory. - * - * Deprecated: 2.4: The recommended API for this purpose are the functions - * gtk_menu_item_set_accel_path() and gtk_widget_set_accel_path(); don't - * use gtk_item_factory_add_foreign() in new code, since it is likely to - * be removed in the future. - */ -void -gtk_item_factory_add_foreign (GtkWidget *accel_widget, - const gchar *full_path, - GtkAccelGroup *accel_group, - guint keyval, - GdkModifierType modifiers) -{ - GtkItemFactoryClass *class; - GtkItemFactoryItem *item; - - g_return_if_fail (GTK_IS_WIDGET (accel_widget)); - g_return_if_fail (full_path != NULL); - - class = gtk_type_class (GTK_TYPE_ITEM_FACTORY); - - keyval = keyval != GDK_VoidSymbol ? keyval : 0; - - item = g_hash_table_lookup (class->item_ht, full_path); - if (!item) - { - item = g_slice_new (GtkItemFactoryItem); - - item->path = g_strdup (full_path); - item->widgets = NULL; - - g_hash_table_insert (class->item_ht, item->path, item); - } - - item->widgets = g_slist_prepend (item->widgets, accel_widget); - g_signal_connect (accel_widget, - "destroy", - G_CALLBACK (gtk_item_factory_item_remove_widget), - item); - - /* set the item path for the widget - */ - g_object_set_qdata (G_OBJECT (accel_widget), quark_item_path, item->path); - gtk_widget_set_name (accel_widget, item->path); - if (accel_group) - { - g_object_ref (accel_group); - g_object_set_qdata_full (G_OBJECT (accel_widget), - quark_accel_group, - accel_group, - g_object_unref); - } - else - g_object_set_qdata (G_OBJECT (accel_widget), quark_accel_group, NULL); - - /* install defined accelerators - */ - if (g_signal_lookup ("activate", G_TYPE_FROM_INSTANCE (accel_widget))) - { - if (accel_group) - { - gtk_accel_map_add_entry (full_path, keyval, modifiers); - gtk_widget_set_accel_path (accel_widget, full_path, accel_group); - } - } -} - -static void -ifactory_cb_data_free (gpointer mem) -{ - g_slice_free (GtkIFCBData, mem); -} - -static void -gtk_item_factory_add_item (GtkItemFactory *ifactory, - const gchar *path, - const gchar *accelerator, - GtkItemFactoryCallback callback, - guint callback_action, - gpointer callback_data, - guint callback_type, - gchar *item_type, - GtkWidget *widget) -{ - GtkItemFactoryClass *class; - GtkItemFactoryItem *item; - gchar *fpath; - guint keyval; - GdkModifierType mods; - - g_return_if_fail (widget != NULL); - g_return_if_fail (item_type != NULL); - - class = GTK_ITEM_FACTORY_GET_CLASS (ifactory); - - /* set accelerator group on menu widgets - */ - if (GTK_IS_MENU (widget)) - gtk_menu_set_accel_group ((GtkMenu*) widget, ifactory->accel_group); - - /* connect callback if necessary - */ - if (callback) - { - GtkIFCBData *data; - - data = g_slice_new (GtkIFCBData); - data->func = callback; - data->callback_type = callback_type; - data->func_data = callback_data; - data->callback_action = callback_action; - - g_object_weak_ref (G_OBJECT (widget), - (GWeakNotify) ifactory_cb_data_free, - data); - g_signal_connect (widget, - "activate", - G_CALLBACK (gtk_item_factory_callback_marshal), - data); - } - - /* link the widget into its item-entry - * and keep back pointer on both the item factory and the widget - */ - g_object_set_qdata (G_OBJECT (widget), quark_action, GUINT_TO_POINTER (callback_action)); - g_object_set_qdata (G_OBJECT (widget), quark_item_factory, ifactory); - if (accelerator) - gtk_accelerator_parse (accelerator, &keyval, &mods); - else - { - keyval = 0; - mods = 0; - } - fpath = g_strconcat (ifactory->path, path, NULL); - gtk_item_factory_add_foreign (widget, fpath, ifactory->accel_group, keyval, mods); - item = g_hash_table_lookup (class->item_ht, fpath); - g_free (fpath); - - g_return_if_fail (item != NULL); - - if (!g_slist_find (ifactory->items, item)) - ifactory->items = g_slist_prepend (ifactory->items, item); -} - -/** - * gtk_item_factory_construct: - * @ifactory: a #GtkItemFactory - * @container_type: the kind of menu to create; can be - * #GTK_TYPE_MENU_BAR, #GTK_TYPE_MENU or #GTK_TYPE_OPTION_MENU - * @path: the factory path of @ifactory, a string of the form - * <literal>"<name>"</literal> - * @accel_group: a #GtkAccelGroup to which the accelerators for the - * menu items will be added, or %NULL to create a new one - * - * Initializes an item factory. - * - * Deprecated: 2.4: Use #GtkUIManager instead. - */ -void -gtk_item_factory_construct (GtkItemFactory *ifactory, - GType container_type, - const gchar *path, - GtkAccelGroup *accel_group) -{ - guint len; - - g_return_if_fail (GTK_IS_ITEM_FACTORY (ifactory)); - g_return_if_fail (ifactory->accel_group == NULL); - g_return_if_fail (path != NULL); - if (!g_type_is_a (container_type, GTK_TYPE_OPTION_MENU)) - g_return_if_fail (g_type_is_a (container_type, GTK_TYPE_MENU_SHELL)); - - len = strlen (path); - - if (path[0] != '<' && path[len - 1] != '>') - { - g_warning ("GtkItemFactory: invalid factory path `%s'", path); - return; - } - - if (accel_group) - { - ifactory->accel_group = accel_group; - g_object_ref (ifactory->accel_group); - } - else - ifactory->accel_group = gtk_accel_group_new (); - - ifactory->path = g_strdup (path); - ifactory->widget = g_object_connect (g_object_new (container_type, NULL), - "signal::destroy", gtk_widget_destroyed, &ifactory->widget, - NULL); - g_object_ref_sink (ifactory); - - gtk_item_factory_add_item (ifactory, - "", NULL, - NULL, 0, NULL, 0, - ITEM_FACTORY_STRING, - ifactory->widget); -} - -/** - * gtk_item_factory_from_path: - * @path: a string starting with a factory path of the form - * <literal>"<name>"</literal> - * @returns: (allow-none): the #GtkItemFactory created for the given factory path, or %NULL - * - * Finds an item factory which has been constructed using the - * <literal>"<name>"</literal> prefix of @path as the @path argument - * for gtk_item_factory_new(). - * - * Deprecated: 2.4: Use #GtkUIManager instead. - */ -GtkItemFactory* -gtk_item_factory_from_path (const gchar *path) -{ - GtkItemFactoryClass *class; - GtkItemFactoryItem *item; - gchar *fname; - guint i; - - g_return_val_if_fail (path != NULL, NULL); - g_return_val_if_fail (path[0] == '<', NULL); - - class = gtk_type_class (GTK_TYPE_ITEM_FACTORY); - - i = 0; - while (path[i] && path[i] != '>') - i++; - if (path[i] != '>') - { - g_warning ("gtk_item_factory_from_path(): invalid factory path \"%s\"", - path); - return NULL; - } - fname = g_new (gchar, i + 2); - g_memmove (fname, path, i + 1); - fname[i + 1] = 0; - - item = g_hash_table_lookup (class->item_ht, fname); - - g_free (fname); - - if (item && item->widgets) - return gtk_item_factory_from_widget (item->widgets->data); - - return NULL; -} - -static void -gtk_item_factory_destroy (GtkObject *object) -{ - GtkItemFactory *ifactory = (GtkItemFactory*) object; - GSList *slist; - - if (ifactory->widget) - { - GtkObject *dobj; - - dobj = GTK_OBJECT (ifactory->widget); - - g_object_ref_sink (dobj); - gtk_object_destroy (dobj); - g_object_unref (dobj); - - ifactory->widget = NULL; - } - - for (slist = ifactory->items; slist; slist = slist->next) - { - GtkItemFactoryItem *item = slist->data; - GSList *link; - - for (link = item->widgets; link; link = link->next) - if (g_object_get_qdata (link->data, quark_item_factory) == ifactory) - g_object_set_qdata (link->data, quark_item_factory, NULL); - } - g_slist_free (ifactory->items); - ifactory->items = NULL; - - GTK_OBJECT_CLASS (gtk_item_factory_parent_class)->destroy (object); -} - -static void -gtk_item_factory_finalize (GObject *object) -{ - GtkItemFactory *ifactory = GTK_ITEM_FACTORY (object); - - if (ifactory->accel_group) - g_object_unref (ifactory->accel_group); - - g_free (ifactory->path); - g_assert (ifactory->widget == NULL); - - if (ifactory->translate_notify) - ifactory->translate_notify (ifactory->translate_data); - - G_OBJECT_CLASS (gtk_item_factory_parent_class)->finalize (object); -} - -/** - * gtk_item_factory_from_widget: - * @widget: a widget - * @returns: (allow-none): the item factory from which @widget was created, or %NULL - * - * Obtains the item factory from which a widget was created. - * - * Deprecated: 2.4: Use #GtkUIManager instead. - */ -GtkItemFactory* -gtk_item_factory_from_widget (GtkWidget *widget) -{ - GtkItemFactory *ifactory; - - g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL); - - ifactory = g_object_get_qdata (G_OBJECT (widget), quark_item_factory); - - if (ifactory == NULL && GTK_IS_MENU_ITEM (widget) && - GTK_MENU_ITEM (widget)->submenu != NULL) - { - GtkWidget *menu = GTK_MENU_ITEM (widget)->submenu; - ifactory = g_object_get_qdata (G_OBJECT (menu), quark_item_factory); - } - - return ifactory; -} - -/** - * gtk_item_factory_path_from_widget: - * @widget: a widget - * @returns: the full path to @widget if it has been created by an item - * factory, %NULL otherwise. This value is owned by GTK+ and must not be - * modified or freed. - * - * If @widget has been created by an item factory, returns the full path - * to it. (The full path of a widget is the concatenation of the factory - * path specified in gtk_item_factory_new() with the path specified in the - * #GtkItemFactoryEntry from which the widget was created.) - * - * Deprecated: 2.4: Use #GtkUIManager instead. - */ -G_CONST_RETURN gchar* -gtk_item_factory_path_from_widget (GtkWidget *widget) -{ - gchar* path; - - g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL); - - path = g_object_get_qdata (G_OBJECT (widget), quark_item_path); - - if (path == NULL && GTK_IS_MENU_ITEM (widget) && - GTK_MENU_ITEM (widget)->submenu != NULL) - { - GtkWidget *menu = GTK_MENU_ITEM (widget)->submenu; - path = g_object_get_qdata (G_OBJECT (menu), quark_item_path); - } - - return path; -} - -/** - * gtk_item_factory_create_items: - * @ifactory: a #GtkItemFactory - * @n_entries: the length of @entries - * @entries: an array of #GtkItemFactoryEntry<!-- -->s whose @callback members - * must by of type #GtkItemFactoryCallback1 - * @callback_data: data passed to the callback functions of all entries - * - * Creates the menu items from the @entries. - * - * Deprecated: 2.4: Use #GtkUIManager instead. - */ -void -gtk_item_factory_create_items (GtkItemFactory *ifactory, - guint n_entries, - GtkItemFactoryEntry *entries, - gpointer callback_data) -{ - gtk_item_factory_create_items_ac (ifactory, n_entries, entries, callback_data, 1); -} - -/** - * gtk_item_factory_create_items_ac: - * @ifactory: a #GtkItemFactory - * @n_entries: the length of @entries - * @entries: an array of #GtkItemFactoryEntry<!-- -->s - * @callback_data: data passed to the callback functions of all entries - * @callback_type: 1 if the callback functions in @entries are of type - * #GtkItemFactoryCallback1, 2 if they are of type #GtkItemFactoryCallback2 - * - * Creates the menu items from the @entries. - * - * Deprecated: 2.4: Use #GtkUIManager instead. - */ -void -gtk_item_factory_create_items_ac (GtkItemFactory *ifactory, - guint n_entries, - GtkItemFactoryEntry *entries, - gpointer callback_data, - guint callback_type) -{ - guint i; - - g_return_if_fail (GTK_IS_ITEM_FACTORY (ifactory)); - g_return_if_fail (callback_type >= 1 && callback_type <= 2); - - if (n_entries == 0) - return; - - g_return_if_fail (entries != NULL); - - for (i = 0; i < n_entries; i++) - gtk_item_factory_create_item (ifactory, entries + i, callback_data, callback_type); -} - -/** - * gtk_item_factory_get_widget: - * @ifactory: a #GtkItemFactory - * @path: the path to the widget - * @returns: (allow-none): the widget for the given path, or %NULL if @path doesn't lead - * to a widget - * - * Obtains the widget which corresponds to @path. - * - * If the widget corresponding to @path is a menu item which opens a - * submenu, then the submenu is returned. If you are interested in the menu - * item, use gtk_item_factory_get_item() instead. - * - * Deprecated: 2.4: Use #GtkUIManager instead. - */ -GtkWidget* -gtk_item_factory_get_widget (GtkItemFactory *ifactory, - const gchar *path) -{ - GtkItemFactoryClass *class; - GtkItemFactoryItem *item; - - g_return_val_if_fail (GTK_IS_ITEM_FACTORY (ifactory), NULL); - g_return_val_if_fail (path != NULL, NULL); - - class = GTK_ITEM_FACTORY_GET_CLASS (ifactory); - - if (path[0] == '<') - item = g_hash_table_lookup (class->item_ht, (gpointer) path); - else - { - gchar *fpath; - - fpath = g_strconcat (ifactory->path, path, NULL); - item = g_hash_table_lookup (class->item_ht, fpath); - g_free (fpath); - } - - if (item) - { - GSList *slist; - - for (slist = item->widgets; slist; slist = slist->next) - { - if (gtk_item_factory_from_widget (slist->data) == ifactory) - return slist->data; - } - } - - return NULL; -} - -/** - * gtk_item_factory_get_widget_by_action: - * @ifactory: a #GtkItemFactory - * @action: an action as specified in the @callback_action field - * of #GtkItemFactoryEntry - * @returns: (allow-none): the widget which corresponds to the given action, or %NULL - * if no widget was found - * - * Obtains the widget which was constructed from the #GtkItemFactoryEntry - * with the given @action. - * - * If there are multiple items with the same action, the result is - * undefined. - * - * Deprecated: 2.4: Use #GtkUIManager instead. - */ -GtkWidget* -gtk_item_factory_get_widget_by_action (GtkItemFactory *ifactory, - guint action) -{ - GSList *slist; - - g_return_val_if_fail (GTK_IS_ITEM_FACTORY (ifactory), NULL); - - for (slist = ifactory->items; slist; slist = slist->next) - { - GtkItemFactoryItem *item = slist->data; - GSList *link; - - for (link = item->widgets; link; link = link->next) - if (g_object_get_qdata (link->data, quark_item_factory) == ifactory && - g_object_get_qdata (link->data, quark_action) == GUINT_TO_POINTER (action)) - return link->data; - } - - return NULL; -} - -/** - * gtk_item_factory_get_item: - * @ifactory: a #GtkItemFactory - * @path: the path to the menu item - * @returns: (allow-none): the menu item for the given path, or %NULL if @path doesn't - * lead to a menu item - * - * Obtains the menu item which corresponds to @path. - * - * If the widget corresponding to @path is a menu item which opens a - * submenu, then the item is returned. If you are interested in the submenu, - * use gtk_item_factory_get_widget() instead. - * - * Deprecated: 2.4: Use #GtkUIManager instead. - */ -GtkWidget* -gtk_item_factory_get_item (GtkItemFactory *ifactory, - const gchar *path) -{ - GtkWidget *widget; - - g_return_val_if_fail (GTK_IS_ITEM_FACTORY (ifactory), NULL); - g_return_val_if_fail (path != NULL, NULL); - - widget = gtk_item_factory_get_widget (ifactory, path); - - if (GTK_IS_MENU (widget)) - widget = gtk_menu_get_attach_widget (GTK_MENU (widget)); - - return GTK_IS_ITEM (widget) ? widget : NULL; -} - - -/** - * gtk_item_factory_get_item_by_action: - * @ifactory: a #GtkItemFactory - * @action: an action as specified in the @callback_action field - * of #GtkItemFactoryEntry - * @returns: (allow-none): the menu item which corresponds to the given action, or %NULL - * if no menu item was found - * - * Obtains the menu item which was constructed from the first - * #GtkItemFactoryEntry with the given @action. - * - * Deprecated: 2.4: Use #GtkUIManager instead. - */ -GtkWidget* -gtk_item_factory_get_item_by_action (GtkItemFactory *ifactory, - guint action) -{ - GtkWidget *widget; - - g_return_val_if_fail (GTK_IS_ITEM_FACTORY (ifactory), NULL); - - widget = gtk_item_factory_get_widget_by_action (ifactory, action); - - if (GTK_IS_MENU (widget)) - widget = gtk_menu_get_attach_widget (GTK_MENU (widget)); - - return GTK_IS_ITEM (widget) ? widget : NULL; -} - -static char * -item_factory_find_separator_r (char *path) -{ - gchar *result = NULL; - gboolean escaped = FALSE; - - while (*path) - { - if (escaped) - escaped = FALSE; - else - { - if (*path == '\\') - escaped = TRUE; - else if (*path == '/') - result = path; - } - - path++; - } - - return result; -} - -static char * -item_factory_unescape_label (const char *label) -{ - char *new = g_malloc (strlen (label) + 1); - char *p = new; - gboolean escaped = FALSE; - - while (*label) - { - if (escaped) - { - *p++ = *label; - escaped = FALSE; - } - else - { - if (*label == '\\') - escaped = TRUE; - else - *p++ = *label; - } - - label++; - } - - *p = '\0'; - - return new; -} - -static gboolean -gtk_item_factory_parse_path (GtkItemFactory *ifactory, - gchar *str, - gchar **path, - gchar **parent_path, - gchar **item) -{ - gchar *translation; - gchar *p, *q; - - *path = g_strdup (str); - - p = q = *path; - while (*p) - { - if (*p == '_') - { - if (p[1] == '_') - { - p++; - *q++ = '_'; - } - } - else - { - *q++ = *p; - } - p++; - } - *q = 0; - - *parent_path = g_strdup (*path); - p = item_factory_find_separator_r (*parent_path); - if (!p) - { - g_warning ("GtkItemFactory: invalid entry path `%s'", str); - return FALSE; - } - *p = 0; - - if (ifactory->translate_func) - translation = ifactory->translate_func (str, ifactory->translate_data); - else - translation = str; - - p = item_factory_find_separator_r (translation); - if (p) - p++; - else - p = translation; - - *item = item_factory_unescape_label (p); - - return TRUE; -} - -/** - * gtk_item_factory_create_item: - * @ifactory: a #GtkItemFactory - * @entry: the #GtkItemFactoryEntry to create an item for - * @callback_data: data passed to the callback function of @entry - * @callback_type: 1 if the callback function of @entry is of type - * #GtkItemFactoryCallback1, 2 if it is of type #GtkItemFactoryCallback2 - * - * Creates an item for @entry. - * - * Deprecated: 2.4: Use #GtkUIManager instead. - */ -void -gtk_item_factory_create_item (GtkItemFactory *ifactory, - GtkItemFactoryEntry *entry, - gpointer callback_data, - guint callback_type) -{ - GtkOptionMenu *option_menu = NULL; - GtkWidget *parent; - GtkWidget *widget; - GtkWidget *image; - GSList *radio_group; - gchar *name; - gchar *parent_path; - gchar *path; - gchar *accelerator; - guint type_id; - GType type; - gchar *item_type_path; - GtkStockItem stock_item; - - g_return_if_fail (GTK_IS_ITEM_FACTORY (ifactory)); - g_return_if_fail (entry != NULL); - g_return_if_fail (entry->path != NULL); - g_return_if_fail (entry->path[0] == '/'); - g_return_if_fail (callback_type >= 1 && callback_type <= 2); - - if (!entry->item_type || - entry->item_type[0] == 0) - { - item_type_path = "<Item>"; - type_id = quark_type_item; - } - else - { - item_type_path = entry->item_type; - type_id = g_quark_try_string (item_type_path); - } - - radio_group = NULL; - if (type_id == quark_type_item) - type = GTK_TYPE_MENU_ITEM; - else if (type_id == quark_type_title) - type = GTK_TYPE_MENU_ITEM; - else if (type_id == quark_type_radio_item) - type = GTK_TYPE_RADIO_MENU_ITEM; - else if (type_id == quark_type_check_item) - type = GTK_TYPE_CHECK_MENU_ITEM; - else if (type_id == quark_type_image_item) - type = GTK_TYPE_IMAGE_MENU_ITEM; - else if (type_id == quark_type_stock_item) - type = GTK_TYPE_IMAGE_MENU_ITEM; - else if (type_id == quark_type_tearoff_item) - type = GTK_TYPE_TEAROFF_MENU_ITEM; - else if (type_id == quark_type_toggle_item) - type = GTK_TYPE_CHECK_MENU_ITEM; - else if (type_id == quark_type_separator_item) - type = GTK_TYPE_MENU_ITEM; - else if (type_id == quark_type_branch) - type = GTK_TYPE_MENU_ITEM; - else if (type_id == quark_type_last_branch) - type = GTK_TYPE_MENU_ITEM; - else - { - GtkWidget *radio_link; - - radio_link = gtk_item_factory_get_widget (ifactory, item_type_path); - if (radio_link && GTK_IS_RADIO_MENU_ITEM (radio_link)) - { - type = GTK_TYPE_RADIO_MENU_ITEM; - radio_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (radio_link)); - } - else - { - g_warning ("GtkItemFactory: entry path `%s' has invalid type `%s'", - entry->path, - item_type_path); - return; - } - } - - if (!gtk_item_factory_parse_path (ifactory, entry->path, - &path, &parent_path, &name)) - return; - - parent = gtk_item_factory_get_widget (ifactory, parent_path); - if (!parent) - { - GtkItemFactoryEntry pentry; - gchar *ppath, *p; - - ppath = g_strdup (entry->path); - p = item_factory_find_separator_r (ppath); - g_return_if_fail (p != NULL); - *p = 0; - pentry.path = ppath; - pentry.accelerator = NULL; - pentry.callback = NULL; - pentry.callback_action = 0; - pentry.item_type = "<Branch>"; - - gtk_item_factory_create_item (ifactory, &pentry, NULL, 1); - g_free (ppath); - - parent = gtk_item_factory_get_widget (ifactory, parent_path); - g_return_if_fail (parent != NULL); - } - - if (GTK_IS_OPTION_MENU (parent)) - { - option_menu = GTK_OPTION_MENU (parent); - if (!option_menu->menu) - { - GtkWidget *menu = g_object_new (GTK_TYPE_MENU, NULL); - gchar *p = g_strconcat (ifactory->path, parent_path, NULL); - - gtk_menu_set_accel_path (GTK_MENU (menu), p); - g_free (p); - gtk_option_menu_set_menu (option_menu, menu); - } - parent = option_menu->menu; - } - g_free (parent_path); - - g_return_if_fail (GTK_IS_CONTAINER (parent)); - - accelerator = entry->accelerator; - - widget = g_object_new (type, - "visible", TRUE, - "sensitive", (type_id != quark_type_separator_item && - type_id != quark_type_title), - "parent", parent, - NULL); - if (option_menu && !option_menu->menu_item) - gtk_option_menu_set_history (option_menu, 0); - - if (GTK_IS_RADIO_MENU_ITEM (widget)) - gtk_radio_menu_item_set_group (GTK_RADIO_MENU_ITEM (widget), radio_group); - if (type_id == quark_type_image_item) - { - GdkPixbuf *pixbuf = NULL; - image = NULL; - if (entry->extra_data) - { - pixbuf = gdk_pixbuf_new_from_inline (-1, - entry->extra_data, - FALSE, - NULL); - if (pixbuf) - image = gtk_image_new_from_pixbuf (pixbuf); - } - if (image) - { - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (widget), image); - gtk_widget_show (image); - } - if (pixbuf) - g_object_unref (pixbuf); - } - if (type_id == quark_type_stock_item) - { - image = gtk_image_new_from_stock (entry->extra_data, GTK_ICON_SIZE_MENU); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (widget), image); - gtk_widget_show (image); - - if (gtk_stock_lookup (entry->extra_data, &stock_item)) - { - if (!accelerator) - accelerator = gtk_accelerator_name (stock_item.keyval, stock_item.modifier); - } - } - - /* install underline accelerators for this item - */ - if (type_id != quark_type_separator_item && - type_id != quark_type_tearoff_item && - *name) - { - GtkWidget *label; - - label = g_object_new (GTK_TYPE_ACCEL_LABEL, - "visible", TRUE, - "parent", widget, - "accel-widget", widget, - "xalign", 0.0, - NULL); - gtk_label_set_text_with_mnemonic (GTK_LABEL (label), name); - } - - g_free (name); - - if (type_id == quark_type_branch || - type_id == quark_type_last_branch) - { - gchar *p; - - if (entry->callback) - g_warning ("gtk_item_factory_create_item(): Can't specify a callback on a branch: \"%s\"", - entry->path); - if (type_id == quark_type_last_branch) - gtk_menu_item_set_right_justified (GTK_MENU_ITEM (widget), TRUE); - - parent = widget; - widget = g_object_new (GTK_TYPE_MENU, NULL); - p = g_strconcat (ifactory->path, path, NULL); - gtk_menu_set_accel_path (GTK_MENU (widget), p); - g_free (p); - - gtk_menu_item_set_submenu (GTK_MENU_ITEM (parent), widget); - } - - gtk_item_factory_add_item (ifactory, - path, accelerator, - (type_id == quark_type_branch || - type_id == quark_type_last_branch) ? - (GtkItemFactoryCallback) NULL : entry->callback, - entry->callback_action, callback_data, - callback_type, - item_type_path, - widget); - if (accelerator != entry->accelerator) - g_free (accelerator); - g_free (path); -} - -/** - * gtk_item_factory_create_menu_entries: - * @n_entries: the length of @entries - * @entries: an array of #GtkMenuEntry<!-- -->s - * - * Creates the menu items from the @entries. - * - * Deprecated: 2.4: Use #GtkUIManager instead. - */ -void -gtk_item_factory_create_menu_entries (guint n_entries, - GtkMenuEntry *entries) -{ - static GPatternSpec *pspec_separator = NULL; - static GPatternSpec *pspec_check = NULL; - guint i; - - if (!n_entries) - return; - g_return_if_fail (entries != NULL); - - if (!pspec_separator) - { - pspec_separator = g_pattern_spec_new ("*<separator>*"); - pspec_check = g_pattern_spec_new ("*<check>*"); - } - - for (i = 0; i < n_entries; i++) - { - GtkItemFactory *ifactory; - GtkItemFactoryEntry entry; - gchar *path; - gchar *cpath; - - path = entries[i].path; - ifactory = gtk_item_factory_from_path (path); - if (!ifactory) - { - g_warning ("gtk_item_factory_create_menu_entries(): " - "entry[%u] refers to unknown item factory: \"%s\"", - i, entries[i].path); - continue; - } - - while (*path != '>') - path++; - path++; - cpath = NULL; - - entry.path = path; - entry.accelerator = entries[i].accelerator; - entry.callback = entries[i].callback; - entry.callback_action = 0; - if (g_pattern_match_string (pspec_separator, path)) - entry.item_type = "<Separator>"; - else if (!g_pattern_match_string (pspec_check, path)) - entry.item_type = NULL; - else - { - gboolean in_brace = FALSE; - gchar *c; - - cpath = g_new (gchar, strlen (path)); - c = cpath; - while (*path != 0) - { - if (*path == '<') - in_brace = TRUE; - else if (*path == '>') - in_brace = FALSE; - else if (!in_brace) - *(c++) = *path; - path++; - } - *c = 0; - entry.item_type = "<ToggleItem>"; - entry.path = cpath; - } - - gtk_item_factory_create_item (ifactory, &entry, entries[i].callback_data, 2); - entries[i].widget = gtk_item_factory_get_widget (ifactory, entries[i].path); - g_free (cpath); - } -} - -/** - * gtk_item_factories_path_delete: - * @ifactory_path: a factory path to prepend to @path. May be %NULL if @path - * starts with a factory path - * @path: a path - * - * Deletes all widgets constructed from the specified path. - * - * Deprecated: 2.4: Use #GtkUIManager instead. - */ -void -gtk_item_factories_path_delete (const gchar *ifactory_path, - const gchar *path) -{ - GtkItemFactoryClass *class; - GtkItemFactoryItem *item; - - g_return_if_fail (path != NULL); - - class = gtk_type_class (GTK_TYPE_ITEM_FACTORY); - - if (path[0] == '<') - item = g_hash_table_lookup (class->item_ht, (gpointer) path); - else - { - gchar *fpath; - - g_return_if_fail (ifactory_path != NULL); - - fpath = g_strconcat (ifactory_path, path, NULL); - item = g_hash_table_lookup (class->item_ht, fpath); - g_free (fpath); - } - - if (item) - { - GSList *widget_list; - GSList *slist; - - widget_list = NULL; - for (slist = item->widgets; slist; slist = slist->next) - { - GtkWidget *widget; - - widget = slist->data; - widget_list = g_slist_prepend (widget_list, widget); - g_object_ref (widget); - } - - for (slist = widget_list; slist; slist = slist->next) - { - GtkWidget *widget; - - widget = slist->data; - gtk_widget_destroy (widget); - g_object_unref (widget); - } - g_slist_free (widget_list); - } -} - -/** - * gtk_item_factory_delete_item: - * @ifactory: a #GtkItemFactory - * @path: a path - * - * Deletes the menu item which was created for @path by the given - * item factory. - * - * Deprecated: 2.4: Use #GtkUIManager instead. - */ -void -gtk_item_factory_delete_item (GtkItemFactory *ifactory, - const gchar *path) -{ - GtkWidget *widget; - - g_return_if_fail (GTK_IS_ITEM_FACTORY (ifactory)); - g_return_if_fail (path != NULL); - - widget = gtk_item_factory_get_widget (ifactory, path); - - if (widget) - { - if (GTK_IS_MENU (widget)) - widget = gtk_menu_get_attach_widget (GTK_MENU (widget)); - - gtk_widget_destroy (widget); - } -} - -/** - * gtk_item_factory_delete_entry: - * @ifactory: a #GtkItemFactory - * @entry: a #GtkItemFactoryEntry - * - * Deletes the menu item which was created from @entry by the given - * item factory. - * - * Deprecated: 2.4: Use #GtkUIManager instead. - */ -void -gtk_item_factory_delete_entry (GtkItemFactory *ifactory, - GtkItemFactoryEntry *entry) -{ - gchar *path; - gchar *parent_path; - gchar *name; - - g_return_if_fail (GTK_IS_ITEM_FACTORY (ifactory)); - g_return_if_fail (entry != NULL); - g_return_if_fail (entry->path != NULL); - g_return_if_fail (entry->path[0] == '/'); - - if (!gtk_item_factory_parse_path (ifactory, entry->path, - &path, &parent_path, &name)) - return; - - gtk_item_factory_delete_item (ifactory, path); - - g_free (path); - g_free (parent_path); - g_free (name); -} - -/** - * gtk_item_factory_delete_entries: - * @ifactory: a #GtkItemFactory - * @n_entries: the length of @entries - * @entries: an array of #GtkItemFactoryEntry<!-- -->s - * - * Deletes the menu items which were created from the @entries by the given - * item factory. - * - * Deprecated: 2.4: Use #GtkUIManager instead. - */ -void -gtk_item_factory_delete_entries (GtkItemFactory *ifactory, - guint n_entries, - GtkItemFactoryEntry *entries) -{ - guint i; - - g_return_if_fail (GTK_IS_ITEM_FACTORY (ifactory)); - if (n_entries > 0) - g_return_if_fail (entries != NULL); - - for (i = 0; i < n_entries; i++) - gtk_item_factory_delete_entry (ifactory, entries + i); -} - -typedef struct -{ - guint x; - guint y; -} MenuPos; - -static void -gtk_item_factory_menu_pos (GtkMenu *menu, - gint *x, - gint *y, - gboolean *push_in, - gpointer func_data) -{ - MenuPos *mpos = func_data; - - *x = mpos->x; - *y = mpos->y; -} - -/** - * gtk_item_factory_popup_data_from_widget: - * @widget: a widget - * @returns: @popup_data associated with the item factory from - * which @widget was created, or %NULL if @widget wasn't created - * by an item factory - * - * Obtains the @popup_data which was passed to - * gtk_item_factory_popup_with_data(). This data is available until the menu - * is popped down again. - * - * Deprecated: 2.4: Use #GtkUIManager instead. - */ -gpointer -gtk_item_factory_popup_data_from_widget (GtkWidget *widget) -{ - GtkItemFactory *ifactory; - - g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL); - - ifactory = gtk_item_factory_from_widget (widget); - if (ifactory) - return g_object_get_qdata (G_OBJECT (ifactory), quark_popup_data); - - return NULL; -} - -/** - * gtk_item_factory_popup_data: - * @ifactory: a #GtkItemFactory - * @returns: @popup_data associated with @ifactory - * - * Obtains the @popup_data which was passed to - * gtk_item_factory_popup_with_data(). This data is available until the menu - * is popped down again. - * - * Deprecated: 2.4: Use #GtkUIManager instead. - */ -gpointer -gtk_item_factory_popup_data (GtkItemFactory *ifactory) -{ - g_return_val_if_fail (GTK_IS_ITEM_FACTORY (ifactory), NULL); - - return g_object_get_qdata (G_OBJECT (ifactory), quark_popup_data); -} - -static void -ifactory_delete_popup_data (GtkObject *object, - GtkItemFactory *ifactory) -{ - g_signal_handlers_disconnect_by_func (object, - ifactory_delete_popup_data, - ifactory); - g_object_set_qdata (G_OBJECT (ifactory), quark_popup_data, NULL); -} - -/** - * gtk_item_factory_popup: - * @ifactory: a #GtkItemFactory of type #GTK_TYPE_MENU (see gtk_item_factory_new()) - * @x: the x position - * @y: the y position - * @mouse_button: the mouse button which was pressed to initiate the popup - * @time_: the time at which the activation event occurred - * - * Pops up the menu constructed from the item factory at (@x, @y). - * - * The @mouse_button parameter should be the mouse button pressed to initiate - * the menu popup. If the menu popup was initiated by something other than - * a mouse button press, such as a mouse button release or a keypress, - * @mouse_button should be 0. - * - * The @time_ parameter should be the time stamp of the event that - * initiated the popup. If such an event is not available, use - * gtk_get_current_event_time() instead. - * - * The operation of the @mouse_button and the @time_ parameter is the same - * as the @button and @activation_time parameters for gtk_menu_popup(). - * - * Deprecated: 2.4: Use #GtkUIManager instead. - */ -void -gtk_item_factory_popup (GtkItemFactory *ifactory, - guint x, - guint y, - guint mouse_button, - guint32 time) -{ - gtk_item_factory_popup_with_data (ifactory, NULL, NULL, x, y, mouse_button, time); -} - -/** - * gtk_item_factory_popup_with_data: - * @ifactory: a #GtkItemFactory of type #GTK_TYPE_MENU (see gtk_item_factory_new()) - * @popup_data: data available for callbacks while the menu is posted - * @destroy: a #GDestroyNotify function to be called on @popup_data when - * the menu is unposted - * @x: the x position - * @y: the y position - * @mouse_button: the mouse button which was pressed to initiate the popup - * @time_: the time at which the activation event occurred - * - * Pops up the menu constructed from the item factory at (@x, @y). Callbacks - * can access the @popup_data while the menu is posted via - * gtk_item_factory_popup_data() and gtk_item_factory_popup_data_from_widget(). - * - * The @mouse_button parameter should be the mouse button pressed to initiate - * the menu popup. If the menu popup was initiated by something other than - * a mouse button press, such as a mouse button release or a keypress, - * @mouse_button should be 0. - * - * The @time_ parameter should be the time stamp of the event that - * initiated the popup. If such an event is not available, use - * gtk_get_current_event_time() instead. - * - * The operation of the @mouse_button and the @time_ parameters is the same - * as the @button and @activation_time parameters for gtk_menu_popup(). - * - * Deprecated: 2.4: Use #GtkUIManager instead. - */ -void -gtk_item_factory_popup_with_data (GtkItemFactory *ifactory, - gpointer popup_data, - GDestroyNotify destroy, - guint x, - guint y, - guint mouse_button, - guint32 time) -{ - MenuPos *mpos; - - g_return_if_fail (GTK_IS_ITEM_FACTORY (ifactory)); - g_return_if_fail (GTK_IS_MENU (ifactory->widget)); - - mpos = g_object_get_qdata (G_OBJECT (ifactory->widget), quark_if_menu_pos); - - if (!mpos) - { - mpos = g_new0 (MenuPos, 1); - g_object_set_qdata_full (G_OBJECT (ifactory->widget), - quark_if_menu_pos, - mpos, - g_free); - } - - mpos->x = x; - mpos->y = y; - - if (popup_data != NULL) - { - g_object_set_qdata_full (G_OBJECT (ifactory), - quark_popup_data, - popup_data, - destroy); - g_signal_connect (ifactory->widget, - "selection-done", - G_CALLBACK (ifactory_delete_popup_data), - ifactory); - } - - gtk_menu_popup (GTK_MENU (ifactory->widget), - NULL, NULL, - gtk_item_factory_menu_pos, mpos, - mouse_button, time); -} - -/** - * gtk_item_factory_set_translate_func: - * @ifactory: a #GtkItemFactory - * @func: the #GtkTranslateFunc function to be used to translate path elements - * @data: data to pass to @func and @notify - * @notify: a #GDestroyNotify function to be called when @ifactory is - * destroyed and when the translation function is changed again - * - * Sets a function to be used for translating the path elements before they - * are displayed. - * - * Deprecated: 2.4: Use #GtkUIManager instead. - */ -void -gtk_item_factory_set_translate_func (GtkItemFactory *ifactory, - GtkTranslateFunc func, - gpointer data, - GDestroyNotify notify) -{ - g_return_if_fail (ifactory != NULL); - - if (ifactory->translate_notify) - ifactory->translate_notify (ifactory->translate_data); - - ifactory->translate_func = func; - ifactory->translate_data = data; - ifactory->translate_notify = notify; -} - -#define __GTK_ITEM_FACTORY_C__ -#include "gtkaliasdef.c" diff --git a/gtk/gtkitemfactory.h b/gtk/gtkitemfactory.h deleted file mode 100644 index 5c57b8032e..0000000000 --- a/gtk/gtkitemfactory.h +++ /dev/null @@ -1,236 +0,0 @@ -/* GTK - The GIMP Toolkit - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * GtkItemFactory: Flexible item factory with automatic rc handling - * Copyright (C) 1998 Tim Janik - * - * 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, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * 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_DISABLE_DEPRECATED - -#ifndef __GTK_ITEM_FACTORY_H__ -#define __GTK_ITEM_FACTORY_H__ - -#include <gtk/gtk.h> - - -G_BEGIN_DECLS - -typedef void (*GtkPrintFunc) (gpointer func_data, - const gchar *str); -/* We use () here to mean unspecified arguments. This is deprecated - * as of C99, but we can't change it without breaking compatibility. - * (Note that if we are included from a C++ program () will mean - * (void) so an explicit cast will be needed.) - */ -typedef void (*GtkItemFactoryCallback) (); -typedef void (*GtkItemFactoryCallback1) (gpointer callback_data, - guint callback_action, - GtkWidget *widget); - -#define GTK_TYPE_ITEM_FACTORY (gtk_item_factory_get_type ()) -#define GTK_ITEM_FACTORY(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GTK_TYPE_ITEM_FACTORY, GtkItemFactory)) -#define GTK_ITEM_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_ITEM_FACTORY, GtkItemFactoryClass)) -#define GTK_IS_ITEM_FACTORY(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GTK_TYPE_ITEM_FACTORY)) -#define GTK_IS_ITEM_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_ITEM_FACTORY)) -#define GTK_ITEM_FACTORY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_ITEM_FACTORY, GtkItemFactoryClass)) - - -typedef struct _GtkItemFactory GtkItemFactory; -typedef struct _GtkItemFactoryClass GtkItemFactoryClass; -typedef struct _GtkItemFactoryEntry GtkItemFactoryEntry; -typedef struct _GtkItemFactoryItem GtkItemFactoryItem; - -struct _GtkItemFactory -{ - GtkObject object; - - gchar *path; - GtkAccelGroup *accel_group; - GtkWidget *widget; - GSList *items; - - GtkTranslateFunc translate_func; - gpointer translate_data; - GDestroyNotify translate_notify; -}; - -struct _GtkItemFactoryClass -{ - GtkObjectClass object_class; - - GHashTable *item_ht; - - /* Padding for future expansion */ - void (*_gtk_reserved1) (void); - void (*_gtk_reserved2) (void); - void (*_gtk_reserved3) (void); - void (*_gtk_reserved4) (void); -}; - -struct _GtkItemFactoryEntry -{ - gchar *path; - gchar *accelerator; - - GtkItemFactoryCallback callback; - guint callback_action; - - /* possible values: - * NULL -> "<Item>" - * "" -> "<Item>" - * "<Title>" -> create a title item - * "<Item>" -> create a simple item - * "<ImageItem>" -> create an item holding an image - * "<StockItem>" -> create an item holding a stock image - * "<CheckItem>" -> create a check item - * "<ToggleItem>" -> create a toggle item - * "<RadioItem>" -> create a radio item - * <path> -> path of a radio item to link against - * "<Separator>" -> create a separator - * "<Tearoff>" -> create a tearoff separator - * "<Branch>" -> create an item to hold sub items - * "<LastBranch>" -> create a right justified item to hold sub items - */ - gchar *item_type; - - /* Extra data for some item types: - * ImageItem -> pointer to inlined pixbuf stream - * StockItem -> name of stock item - */ - gconstpointer extra_data; -}; - -struct _GtkItemFactoryItem -{ - gchar *path; - GSList *widgets; -}; - - -GType gtk_item_factory_get_type (void) G_GNUC_CONST; - -/* `container_type' must be of GTK_TYPE_MENU_BAR, GTK_TYPE_MENU, - * or GTK_TYPE_OPTION_MENU. - */ -GtkItemFactory* gtk_item_factory_new (GType container_type, - const gchar *path, - GtkAccelGroup *accel_group); -void gtk_item_factory_construct (GtkItemFactory *ifactory, - GType container_type, - const gchar *path, - GtkAccelGroup *accel_group); - -/* These functions operate on GtkItemFactoryClass basis. - */ -void gtk_item_factory_add_foreign (GtkWidget *accel_widget, - const gchar *full_path, - GtkAccelGroup *accel_group, - guint keyval, - GdkModifierType modifiers); - -GtkItemFactory* gtk_item_factory_from_widget (GtkWidget *widget); -G_CONST_RETURN gchar* gtk_item_factory_path_from_widget (GtkWidget *widget); - -GtkWidget* gtk_item_factory_get_item (GtkItemFactory *ifactory, - const gchar *path); -GtkWidget* gtk_item_factory_get_widget (GtkItemFactory *ifactory, - const gchar *path); -GtkWidget* gtk_item_factory_get_widget_by_action (GtkItemFactory *ifactory, - guint action); -GtkWidget* gtk_item_factory_get_item_by_action (GtkItemFactory *ifactory, - guint action); - -void gtk_item_factory_create_item (GtkItemFactory *ifactory, - GtkItemFactoryEntry *entry, - gpointer callback_data, - guint callback_type); -void gtk_item_factory_create_items (GtkItemFactory *ifactory, - guint n_entries, - GtkItemFactoryEntry *entries, - gpointer callback_data); -void gtk_item_factory_delete_item (GtkItemFactory *ifactory, - const gchar *path); -void gtk_item_factory_delete_entry (GtkItemFactory *ifactory, - GtkItemFactoryEntry *entry); -void gtk_item_factory_delete_entries (GtkItemFactory *ifactory, - guint n_entries, - GtkItemFactoryEntry *entries); -void gtk_item_factory_popup (GtkItemFactory *ifactory, - guint x, - guint y, - guint mouse_button, - guint32 time_); -void gtk_item_factory_popup_with_data(GtkItemFactory *ifactory, - gpointer popup_data, - GDestroyNotify destroy, - guint x, - guint y, - guint mouse_button, - guint32 time_); -gpointer gtk_item_factory_popup_data (GtkItemFactory *ifactory); -gpointer gtk_item_factory_popup_data_from_widget (GtkWidget *widget); -void gtk_item_factory_set_translate_func (GtkItemFactory *ifactory, - GtkTranslateFunc func, - gpointer data, - GDestroyNotify notify); - -/* Compatibility functions for deprecated GtkMenuFactory code - */ - -/* Used by gtk_item_factory_create_menu_entries () */ -typedef void (*GtkMenuCallback) (GtkWidget *widget, - gpointer user_data); -typedef struct { - gchar *path; - gchar *accelerator; - GtkMenuCallback callback; - gpointer callback_data; - GtkWidget *widget; -} GtkMenuEntry; - -/* Used by gtk_item_factory_callback_marshal () */ -typedef void (*GtkItemFactoryCallback2) (GtkWidget *widget, - gpointer callback_data, - guint callback_action); - -/* Used by gtk_item_factory_create_items () */ -void gtk_item_factory_create_items_ac (GtkItemFactory *ifactory, - guint n_entries, - GtkItemFactoryEntry *entries, - gpointer callback_data, - guint callback_type); - -GtkItemFactory* gtk_item_factory_from_path (const gchar *path); -void gtk_item_factory_create_menu_entries (guint n_entries, - GtkMenuEntry *entries); -void gtk_item_factories_path_delete (const gchar *ifactory_path, - const gchar *path); - -G_END_DECLS - -#endif /* !GTK_DISABLE_DEPRECATED */ - -#endif /* __GTK_ITEM_FACTORY_H__ */ - |