summaryrefslogtreecommitdiff
path: root/gtk/gtkwidget.h
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/gtkwidget.h')
-rw-r--r--gtk/gtkwidget.h505
1 files changed, 505 insertions, 0 deletions
diff --git a/gtk/gtkwidget.h b/gtk/gtkwidget.h
new file mode 100644
index 0000000000..51ea9940c8
--- /dev/null
+++ b/gtk/gtkwidget.h
@@ -0,0 +1,505 @@
+/* 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 Library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+#ifndef __GTK_WIDGET_H__
+#define __GTK_WIDGET_H__
+
+
+#include <gdk/gdk.h>
+#include <gtk/gtkaccelerator.h>
+#include <gtk/gtkobject.h>
+#include <gtk/gtkstyle.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+/* The flags that are used in the flags member of the GtkObject
+ * structure.
+ */
+enum
+{
+ GTK_VISIBLE = 1 << 3,
+ GTK_MAPPED = 1 << 4,
+ GTK_UNMAPPED = 1 << 5,
+ GTK_REALIZED = 1 << 6,
+ GTK_SENSITIVE = 1 << 7,
+ GTK_PARENT_SENSITIVE = 1 << 8,
+ GTK_NO_WINDOW = 1 << 9,
+ GTK_HAS_FOCUS = 1 << 10,
+ GTK_CAN_FOCUS = 1 << 11,
+ GTK_HAS_DEFAULT = 1 << 12,
+ GTK_CAN_DEFAULT = 1 << 13,
+ GTK_PROPAGATE_STATE = 1 << 14,
+ GTK_ANCHORED = 1 << 15,
+ GTK_BASIC = 1 << 16,
+ GTK_USER_STYLE = 1 << 17,
+ GTK_GRAB_ALL = 1 << 18,
+ GTK_REDRAW_PENDING = 1 << 19,
+ GTK_RESIZE_PENDING = 1 << 20,
+ GTK_RESIZE_NEEDED = 1 << 21,
+ GTK_HAS_SHAPE_MASK = 1 << 22
+};
+
+
+/* Macro for casting a pointer to a GtkWidget pointer.
+ */
+#define GTK_WIDGET(obj) GTK_CHECK_CAST (obj, gtk_widget_get_type (), GtkWidget)
+
+/* Macro for casting the "class" field of an object to
+ * a GtkWidgetClass pointer.
+ */
+#define GTK_WIDGET_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, gtk_widget_get_type (), GtkWidgetClass)
+
+/* Macros for extracting various fields from GtkWidget and
+ * GtkWidgetClass structures.
+ */
+#define GTK_WIDGET_TYPE(obj) (GTK_OBJECT_TYPE (obj))
+#define GTK_WIDGET_STATE(obj) (GTK_WIDGET (obj)->state)
+#define GTK_WIDGET_SAVED_STATE(obj) (GTK_WIDGET (obj)->saved_state)
+#define GTK_WIDGET_VISIBLE(obj) (GTK_OBJECT_FLAGS (obj) & GTK_VISIBLE)
+#define GTK_WIDGET_MAPPED(obj) (GTK_OBJECT_FLAGS (obj) & GTK_MAPPED)
+#define GTK_WIDGET_UNMAPPED(obj) (GTK_OBJECT_FLAGS (obj) & GTK_UNMAPPED)
+#define GTK_WIDGET_REALIZED(obj) (GTK_OBJECT_FLAGS (obj) & GTK_REALIZED)
+#define GTK_WIDGET_SENSITIVE(obj) (GTK_OBJECT_FLAGS (obj) & GTK_SENSITIVE)
+#define GTK_WIDGET_PARENT_SENSITIVE(obj) (GTK_OBJECT_FLAGS (obj) & GTK_PARENT_SENSITIVE)
+#define GTK_WIDGET_IS_SENSITIVE(obj) ((GTK_WIDGET_SENSITIVE (obj) && \
+ GTK_WIDGET_PARENT_SENSITIVE (obj)) != 0)
+#define GTK_WIDGET_NO_WINDOW(obj) (GTK_OBJECT_FLAGS (obj) & GTK_NO_WINDOW)
+#define GTK_WIDGET_HAS_FOCUS(obj) (GTK_OBJECT_FLAGS (obj) & GTK_HAS_FOCUS)
+#define GTK_WIDGET_CAN_FOCUS(obj) (GTK_OBJECT_FLAGS (obj) & GTK_CAN_FOCUS)
+#define GTK_WIDGET_HAS_DEFAULT(obj) (GTK_OBJECT_FLAGS (obj) & GTK_HAS_DEFAULT)
+#define GTK_WIDGET_CAN_DEFAULT(obj) (GTK_OBJECT_FLAGS (obj) & GTK_CAN_DEFAULT)
+#define GTK_WIDGET_PROPAGATE_STATE(obj) (GTK_OBJECT_FLAGS (obj) & GTK_PROPAGATE_STATE)
+#define GTK_WIDGET_DRAWABLE(obj) (GTK_WIDGET_VISIBLE (obj) && GTK_WIDGET_MAPPED (obj))
+#define GTK_WIDGET_ANCHORED(obj) (GTK_OBJECT_FLAGS (obj) & GTK_ANCHORED)
+#define GTK_WIDGET_BASIC(obj) (GTK_OBJECT_FLAGS (obj) & GTK_BASIC)
+#define GTK_WIDGET_USER_STYLE(obj) (GTK_OBJECT_FLAGS (obj) & GTK_USER_STYLE)
+#define GTK_WIDGET_GRAB_ALL(obj) (GTK_OBJECT_FLAGS (obj) & GTK_GRAB_ALL)
+#define GTK_WIDGET_REDRAW_PENDING(obj) (GTK_OBJECT_FLAGS (obj) & GTK_REDRAW_PENDING)
+#define GTK_WIDGET_RESIZE_PENDING(obj) (GTK_OBJECT_FLAGS (obj) & GTK_RESIZE_PENDING)
+#define GTK_WIDGET_RESIZE_NEEDED(obj) (GTK_OBJECT_FLAGS (obj) & GTK_RESIZE_NEEDED)
+#define GTK_WIDGET_HAS_SHAPE_MASK(obj) (GTK_OBJECT_FLAGS (obj) & GTK_HAS_SHAPE_MASK)
+
+#define GTK_TYPE_WIDGET (gtk_widget_get_type ())
+
+/* Macro for testing whether "obj" is of type GtkWidget.
+ */
+#define GTK_IS_WIDGET(obj) GTK_CHECK_TYPE (obj, GTK_TYPE_WIDGET)
+
+/* Macros for setting and clearing widget flags. Notice
+ * that these are only wrappers for the macros which
+ * set and clear the flags in the GtkObject structure.
+ */
+#define GTK_WIDGET_SET_FLAGS(obj,flag) (GTK_OBJECT_SET_FLAGS (obj, flag))
+#define GTK_WIDGET_UNSET_FLAGS(obj,flag) (GTK_OBJECT_UNSET_FLAGS (obj, flag))
+
+
+
+typedef struct _GtkRequisition GtkRequisition;
+typedef struct _GtkAllocation GtkAllocation;
+typedef struct _GtkSelectionData GtkSelectionData;
+typedef struct _GtkWidget GtkWidget;
+typedef struct _GtkWidgetClass GtkWidgetClass;
+typedef struct _GtkWidgetAuxInfo GtkWidgetAuxInfo;
+typedef struct _GtkWidgetShapeInfo GtkWidgetShapeInfo;
+
+typedef void (*GtkCallback) (GtkWidget *widget,
+ gpointer data);
+
+/* A requisition is a desired amount of space which a
+ * widget may request.
+ */
+struct _GtkRequisition
+{
+ guint16 width;
+ guint16 height;
+};
+
+/* An allocation is a size and position. Where a widget
+ * can ask for a desired size, it is actually given
+ * this amount of space at the specified position.
+ */
+struct _GtkAllocation
+{
+ gint16 x;
+ gint16 y;
+ guint16 width;
+ guint16 height;
+};
+
+/* The contents of a selection are returned in a GtkSelectionData
+ structure. selection/target identify the request.
+ type specifies the type of the return; if length < 0, and
+ the data should be ignored. This structure has object semantics -
+ no fields should be modified directly, they should not be created
+ directly, and pointers to them should not be stored beyond the duration of
+ a callback. (If the last is changed, we'll need to add reference
+ counting) */
+
+struct _GtkSelectionData
+{
+ GdkAtom selection;
+ GdkAtom target;
+ GdkAtom type;
+ gint format;
+ guchar *data;
+ gint length;
+};
+
+/* The widget is the base of the tree for displayable objects.
+ * (A displayable object is one which takes up some amount
+ * of screen real estate). It provides a common base and interface
+ * which actual widgets must adhere to.
+ */
+struct _GtkWidget
+{
+ /* The object structure needs to be the first
+ * element in the widget structure in order for
+ * the object mechanism to work correctly. This
+ * allows a GtkWidget pointer to be cast to a
+ * GtkObject pointer.
+ */
+ GtkObject object;
+
+ /* The state of the widget. There are actually only
+ * 5 widget states (defined in "gtkenums.h").
+ */
+ guint8 state;
+
+ /* The saved state of the widget. When a widgets state
+ * is changed via "gtk_widget_set_state" the old state
+ * is kept around in this field. The state may be
+ * restored using "gtk_widget_restore_state".
+ */
+ guint8 saved_state;
+
+ /* The widgets name. If the widget does not have a name
+ * (the name is NULL), then its name (as returned by
+ * "gtk_widget_get_name") is its classes name.
+ * The widget name is used to determine the style to
+ * use for a widget.
+ */
+ gchar *name;
+
+ /* The style for the widget. The style contains the
+ * colors the widget should be drawn in for each state
+ * along with graphics contexts used to draw with and
+ * the font to use for text.
+ */
+ GtkStyle *style;
+
+ /* The widgets desired size.
+ */
+ GtkRequisition requisition;
+
+ /* The widgets allocated size.
+ */
+ GtkAllocation allocation;
+
+ /* The widgets window or its parent window if it does
+ * not have a window. (Which will be indicated by the
+ * GTK_NO_WINDOW flag being set).
+ */
+ GdkWindow *window;
+
+ /* The widgets parent.
+ */
+ GtkWidget *parent;
+};
+
+struct _GtkWidgetClass
+{
+ /* The object class structure needs to be the first
+ * element in the widget class structure in order for
+ * the class mechanism to work correctly. This allows a
+ * GtkWidgetClass pointer to be cast to a GtkObjectClass
+ * pointer.
+ */
+ GtkObjectClass parent_class;
+
+ /* The signal to emit when an object of this class is activated.
+ * This is used when activating the current focus widget and
+ * the default widget.
+ */
+ gint activate_signal;
+
+ /* basics */
+ void (* show) (GtkWidget *widget);
+ void (* hide) (GtkWidget *widget);
+ void (* map) (GtkWidget *widget);
+ void (* unmap) (GtkWidget *widget);
+ void (* realize) (GtkWidget *widget);
+ void (* unrealize) (GtkWidget *widget);
+ void (* draw) (GtkWidget *widget,
+ GdkRectangle *area);
+ void (* draw_focus) (GtkWidget *widget);
+ void (* draw_default) (GtkWidget *widget);
+ void (* size_request) (GtkWidget *widget,
+ GtkRequisition *requisition);
+ void (* size_allocate) (GtkWidget *widget,
+ GtkAllocation *allocation);
+ void (* state_changed) (GtkWidget *widget);
+
+ /* accelerators */
+ gint (* install_accelerator) (GtkWidget *widget,
+ const gchar *signal_name,
+ gchar key,
+ guint8 modifiers);
+ void (* remove_accelerator) (GtkWidget *widget,
+ const gchar *signal_name);
+
+ /* events */
+ gint (* event) (GtkWidget *widget,
+ GdkEvent *event);
+ gint (* button_press_event) (GtkWidget *widget,
+ GdkEventButton *event);
+ gint (* button_release_event) (GtkWidget *widget,
+ GdkEventButton *event);
+ gint (* motion_notify_event) (GtkWidget *widget,
+ GdkEventMotion *event);
+ gint (* delete_event) (GtkWidget *widget,
+ GdkEventAny *event);
+ gint (* destroy_event) (GtkWidget *widget,
+ GdkEventAny *event);
+ gint (* expose_event) (GtkWidget *widget,
+ GdkEventExpose *event);
+ gint (* key_press_event) (GtkWidget *widget,
+ GdkEventKey *event);
+ gint (* key_release_event) (GtkWidget *widget,
+ GdkEventKey *event);
+ gint (* enter_notify_event) (GtkWidget *widget,
+ GdkEventCrossing *event);
+ gint (* leave_notify_event) (GtkWidget *widget,
+ GdkEventCrossing *event);
+ gint (* configure_event) (GtkWidget *widget,
+ GdkEventConfigure *event);
+ gint (* focus_in_event) (GtkWidget *widget,
+ GdkEventFocus *event);
+ gint (* focus_out_event) (GtkWidget *widget,
+ GdkEventFocus *event);
+ gint (* map_event) (GtkWidget *widget,
+ GdkEventAny *event);
+ gint (* unmap_event) (GtkWidget *widget,
+ GdkEventAny *event);
+ gint (* property_notify_event) (GtkWidget *widget,
+ GdkEventProperty *event);
+ gint (* selection_clear_event) (GtkWidget *widget,
+ GdkEventSelection *event);
+ gint (* selection_request_event) (GtkWidget *widget,
+ GdkEventSelection *event);
+ gint (* selection_notify_event) (GtkWidget *widget,
+ GdkEventSelection *event);
+ gint (* proximity_in_event) (GtkWidget *widget,
+ GdkEventProximity *event);
+ gint (* proximity_out_event) (GtkWidget *widget,
+ GdkEventProximity *event);
+ gint (* drag_begin_event) (GtkWidget *widget,
+ GdkEventDragBegin *event);
+ gint (* drag_request_event) (GtkWidget *widget,
+ GdkEventDragRequest *event);
+ gint (* drop_enter_event) (GtkWidget *widget,
+ GdkEventDropEnter *event);
+ gint (* drop_leave_event) (GtkWidget *widget,
+ GdkEventDropLeave *event);
+ gint (* drop_data_available_event) (GtkWidget *widget,
+ GdkEventDropDataAvailable *event);
+ gint (* other_event) (GtkWidget *widget,
+ GdkEventOther *event);
+
+ /* selection */
+ void (* selection_received) (GtkWidget *widget,
+ GtkSelectionData *selection_data);
+
+ gint (* client_event) (GtkWidget *widget,
+ GdkEventClient *event);
+};
+
+struct _GtkWidgetAuxInfo
+{
+ gint16 x;
+ gint16 y;
+ guint16 width;
+ guint16 height;
+};
+
+struct _GtkWidgetShapeInfo
+{
+ gint16 offset_x;
+ gint16 offset_y;
+ GdkBitmap *shape_mask;
+};
+
+
+guint gtk_widget_get_type (void);
+GtkWidget* gtk_widget_new (guint type,
+ ...);
+GtkWidget* gtk_widget_newv (guint type,
+ gint nargs,
+ GtkArg *args);
+void gtk_widget_set (GtkWidget *widget,
+ ...);
+void gtk_widget_setv (GtkWidget *widget,
+ gint nargs,
+ GtkArg *args);
+void gtk_widget_destroy (GtkWidget *widget);
+void gtk_widget_unparent (GtkWidget *widget);
+void gtk_widget_show (GtkWidget *widget);
+void gtk_widget_hide (GtkWidget *widget);
+void gtk_widget_map (GtkWidget *widget);
+void gtk_widget_unmap (GtkWidget *widget);
+void gtk_widget_realize (GtkWidget *widget);
+void gtk_widget_unrealize (GtkWidget *widget);
+void gtk_widget_queue_draw (GtkWidget *widget);
+void gtk_widget_queue_resize (GtkWidget *widget);
+void gtk_widget_draw (GtkWidget *widget,
+ GdkRectangle *area);
+void gtk_widget_draw_focus (GtkWidget *widget);
+void gtk_widget_draw_default (GtkWidget *widget);
+void gtk_widget_draw_children (GtkWidget *widget);
+void gtk_widget_size_request (GtkWidget *widget,
+ GtkRequisition *requisition);
+void gtk_widget_size_allocate (GtkWidget *widget,
+ GtkAllocation *allocation);
+void gtk_widget_install_accelerator (GtkWidget *widget,
+ GtkAcceleratorTable *table,
+ const gchar *signal_name,
+ gchar key,
+ guint8 modifiers);
+void gtk_widget_remove_accelerator (GtkWidget *widget,
+ GtkAcceleratorTable *table,
+ const gchar *signal_name);
+gint gtk_widget_event (GtkWidget *widget,
+ GdkEvent *event);
+
+void gtk_widget_activate (GtkWidget *widget);
+void gtk_widget_reparent (GtkWidget *widget,
+ GtkWidget *new_parent);
+void gtk_widget_popup (GtkWidget *widget,
+ gint x,
+ gint y);
+gint gtk_widget_intersect (GtkWidget *widget,
+ GdkRectangle *area,
+ GdkRectangle *intersection);
+gint gtk_widget_basic (GtkWidget *widget);
+
+void gtk_widget_grab_focus (GtkWidget *widget);
+void gtk_widget_grab_default (GtkWidget *widget);
+
+void gtk_widget_restore_state (GtkWidget *widget);
+void gtk_widget_set_name (GtkWidget *widget,
+ const gchar *name);
+gchar* gtk_widget_get_name (GtkWidget *widget);
+void gtk_widget_set_state (GtkWidget *widget,
+ GtkStateType state);
+void gtk_widget_set_sensitive (GtkWidget *widget,
+ gint sensitive);
+void gtk_widget_set_parent (GtkWidget *widget,
+ GtkWidget *parent);
+void gtk_widget_set_style (GtkWidget *widget,
+ GtkStyle *style);
+void gtk_widget_set_uposition (GtkWidget *widget,
+ gint x,
+ gint y);
+void gtk_widget_set_usize (GtkWidget *widget,
+ gint width,
+ gint height);
+void gtk_widget_set_events (GtkWidget *widget,
+ gint events);
+void gtk_widget_set_extension_events (GtkWidget *widget,
+ GdkExtensionMode mode);
+
+GtkWidget* gtk_widget_get_toplevel (GtkWidget *widget);
+GtkWidget* gtk_widget_get_ancestor (GtkWidget *widget,
+ gint type);
+GdkColormap* gtk_widget_get_colormap (GtkWidget *widget);
+GdkVisual* gtk_widget_get_visual (GtkWidget *widget);
+GtkStyle* gtk_widget_get_style (GtkWidget *widget);
+gint gtk_widget_get_events (GtkWidget *widget);
+GdkExtensionMode gtk_widget_get_extension_events (GtkWidget *widget);
+void gtk_widget_get_pointer (GtkWidget *widget,
+ gint *x,
+ gint *y);
+
+gint gtk_widget_is_ancestor (GtkWidget *widget,
+ GtkWidget *ancestor);
+gint gtk_widget_is_child (GtkWidget *widget,
+ GtkWidget *child);
+
+void gtk_widget_push_colormap (GdkColormap *cmap);
+void gtk_widget_push_visual (GdkVisual *visual);
+void gtk_widget_push_style (GtkStyle *style);
+
+void gtk_widget_pop_colormap (void);
+void gtk_widget_pop_visual (void);
+void gtk_widget_pop_style (void);
+
+void gtk_widget_set_default_colormap (GdkColormap *colormap);
+void gtk_widget_set_default_visual (GdkVisual *visual);
+void gtk_widget_set_default_style (GtkStyle *style);
+/* Tells other Gtk applications to use the same default style */
+void gtk_widget_propagate_default_style(void);
+GdkColormap* gtk_widget_get_default_colormap (void);
+GdkVisual* gtk_widget_get_default_visual (void);
+GtkStyle* gtk_widget_get_default_style (void);
+
+/*
+ * see gdk_window_shape_combine_mask
+ */
+void gtk_widget_shape_combine_mask (GtkWidget *widget,
+ GdkBitmap *shape_mask,
+ gint offset_x,
+ gint offset_y);
+
+/*
+ * When you get a drag_enter event, you can use this to tell Gtk of other
+ * items that are to be dragged as well...
+ */
+void gtk_widget_dnd_drag_add (GtkWidget *widget);
+
+/*
+ * These two functions enable drag and/or drop on a widget,
+ * and also let Gtk know what data types will be accepted (use MIME type
+ * naming, plus tacking "URL:" on the front for link dragging)
+ */
+void gtk_widget_dnd_drag_set (GtkWidget *widget,
+ guint8 drag_enable,
+ gchar **type_accept_list,
+ guint numtypes);
+void gtk_widget_dnd_drop_set (GtkWidget *widget,
+ guint8 drop_enable,
+ gchar **type_accept_list,
+ guint numtypes,
+ guint8 is_destructive_operation);
+
+/*
+ * used to reply to a DRAG_REQUEST event - if you don't want to
+ * give the data then pass in NULL for it
+ */
+void gtk_widget_dnd_data_set (GtkWidget *widget,
+ GdkEvent *event,
+ gpointer data,
+ gulong data_numbytes);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+
+#endif /* __GTK_WIDGET_H__ */