1 /* GTK - The GIMP Toolkit
2 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
14 * You should have received a copy of the GNU Library General Public
15 * License along with this library; if not, write to the Free
16 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 #ifndef __GTK_WIDGET_H__
19 #define __GTK_WIDGET_H__
23 #include <gtk/gtkaccelerator.h>
24 #include <gtk/gtkobject.h>
25 #include <gtk/gtkstyle.h>
30 #endif /* __cplusplus */
33 /* The flags that are used in the flags member of the GtkObject
40 GTK_UNMAPPED = 1 << 5,
41 GTK_REALIZED = 1 << 6,
42 GTK_SENSITIVE = 1 << 7,
43 GTK_PARENT_SENSITIVE = 1 << 8,
44 GTK_NO_WINDOW = 1 << 9,
45 GTK_HAS_FOCUS = 1 << 10,
46 GTK_CAN_FOCUS = 1 << 11,
47 GTK_HAS_DEFAULT = 1 << 12,
48 GTK_CAN_DEFAULT = 1 << 13,
49 GTK_PROPAGATE_STATE = 1 << 14,
50 GTK_ANCHORED = 1 << 15,
52 GTK_USER_STYLE = 1 << 17,
53 GTK_HAS_GRAB = 1 << 18,
54 GTK_REDRAW_PENDING = 1 << 19,
55 GTK_RESIZE_PENDING = 1 << 20,
56 GTK_RESIZE_NEEDED = 1 << 21,
57 GTK_HAS_SHAPE_MASK = 1 << 22,
58 GTK_LEAVE_PENDING = 1 << 23,
59 GTK_TOPLEVEL = 1 << 24,
60 GTK_TOPLEVEL_ONSCREEN = 1 << 25
64 /* Macro for casting a pointer to a GtkWidget pointer.
66 #define GTK_WIDGET(obj) GTK_CHECK_CAST (obj, gtk_widget_get_type (), GtkWidget)
68 /* Macro for casting the "class" field of an object to
69 * a GtkWidgetClass pointer.
71 #define GTK_WIDGET_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, gtk_widget_get_type (), GtkWidgetClass)
73 /* Macros for extracting various fields from GtkWidget and
74 * GtkWidgetClass structures.
76 #define GTK_WIDGET_TYPE(obj) (GTK_OBJECT_TYPE (obj))
77 #define GTK_WIDGET_STATE(obj) (GTK_WIDGET (obj)->state)
78 #define GTK_WIDGET_SAVED_STATE(obj) (GTK_WIDGET (obj)->saved_state)
79 #define GTK_WIDGET_VISIBLE(obj) (GTK_OBJECT_FLAGS (obj) & GTK_VISIBLE)
80 #define GTK_WIDGET_MAPPED(obj) (GTK_OBJECT_FLAGS (obj) & GTK_MAPPED)
81 #define GTK_WIDGET_UNMAPPED(obj) (GTK_OBJECT_FLAGS (obj) & GTK_UNMAPPED)
82 #define GTK_WIDGET_REALIZED(obj) (GTK_OBJECT_FLAGS (obj) & GTK_REALIZED)
83 #define GTK_WIDGET_SENSITIVE(obj) (GTK_OBJECT_FLAGS (obj) & GTK_SENSITIVE)
84 #define GTK_WIDGET_PARENT_SENSITIVE(obj) (GTK_OBJECT_FLAGS (obj) & GTK_PARENT_SENSITIVE)
85 #define GTK_WIDGET_IS_SENSITIVE(obj) ((GTK_WIDGET_SENSITIVE (obj) && \
86 GTK_WIDGET_PARENT_SENSITIVE (obj)) != 0)
87 #define GTK_WIDGET_NO_WINDOW(obj) (GTK_OBJECT_FLAGS (obj) & GTK_NO_WINDOW)
88 #define GTK_WIDGET_HAS_FOCUS(obj) (GTK_OBJECT_FLAGS (obj) & GTK_HAS_FOCUS)
89 #define GTK_WIDGET_CAN_FOCUS(obj) (GTK_OBJECT_FLAGS (obj) & GTK_CAN_FOCUS)
90 #define GTK_WIDGET_HAS_DEFAULT(obj) (GTK_OBJECT_FLAGS (obj) & GTK_HAS_DEFAULT)
91 #define GTK_WIDGET_CAN_DEFAULT(obj) (GTK_OBJECT_FLAGS (obj) & GTK_CAN_DEFAULT)
92 #define GTK_WIDGET_PROPAGATE_STATE(obj) (GTK_OBJECT_FLAGS (obj) & GTK_PROPAGATE_STATE)
93 #define GTK_WIDGET_DRAWABLE(obj) (GTK_WIDGET_VISIBLE (obj) && GTK_WIDGET_MAPPED (obj))
94 #define GTK_WIDGET_ANCHORED(obj) (GTK_OBJECT_FLAGS (obj) & GTK_ANCHORED)
95 #define GTK_WIDGET_BASIC(obj) (GTK_OBJECT_FLAGS (obj) & GTK_BASIC)
96 #define GTK_WIDGET_USER_STYLE(obj) (GTK_OBJECT_FLAGS (obj) & GTK_USER_STYLE)
97 #define GTK_WIDGET_HAS_GRAB(obj) (GTK_OBJECT_FLAGS (obj) & GTK_HAS_GRAB)
98 #define GTK_WIDGET_REDRAW_PENDING(obj) (GTK_OBJECT_FLAGS (obj) & GTK_REDRAW_PENDING)
99 #define GTK_WIDGET_RESIZE_PENDING(obj) (GTK_OBJECT_FLAGS (obj) & GTK_RESIZE_PENDING)
100 #define GTK_WIDGET_RESIZE_NEEDED(obj) (GTK_OBJECT_FLAGS (obj) & GTK_RESIZE_NEEDED)
101 #define GTK_WIDGET_HAS_SHAPE_MASK(obj) (GTK_OBJECT_FLAGS (obj) & GTK_HAS_SHAPE_MASK)
102 #define GTK_WIDGET_LEAVE_PENDING(obj) (GTK_OBJECT_FLAGS (obj) & GTK_LEAVE_PENDING)
103 #define GTK_WIDGET_TOPLEVEL(obj) (GTK_OBJECT_FLAGS (obj) & GTK_TOPLEVEL)
104 #define GTK_WIDGET_TOPLEVEL_ONSCREEN(obj) (GTK_OBJECT_FLAGS (obj) & GTK_TOPLEVEL_ONSCREEN)
106 #define GTK_TYPE_WIDGET (gtk_widget_get_type ())
108 /* Macro for testing whether "obj" is of type GtkWidget.
110 #define GTK_IS_WIDGET(obj) GTK_CHECK_TYPE (obj, GTK_TYPE_WIDGET)
112 /* Macros for setting and clearing widget flags. Notice
113 * that these are only wrappers for the macros which
114 * set and clear the flags in the GtkObject structure.
116 #define GTK_WIDGET_SET_FLAGS(obj,flag) (GTK_OBJECT_SET_FLAGS (obj, flag))
117 #define GTK_WIDGET_UNSET_FLAGS(obj,flag) (GTK_OBJECT_UNSET_FLAGS (obj, flag))
121 typedef struct _GtkRequisition GtkRequisition;
122 typedef struct _GtkAllocation GtkAllocation;
123 typedef struct _GtkSelectionData GtkSelectionData;
124 typedef struct _GtkWidget GtkWidget;
125 typedef struct _GtkWidgetClass GtkWidgetClass;
126 typedef struct _GtkWidgetAuxInfo GtkWidgetAuxInfo;
127 typedef struct _GtkWidgetShapeInfo GtkWidgetShapeInfo;
129 typedef void (*GtkCallback) (GtkWidget *widget,
132 /* A requisition is a desired amount of space which a
133 * widget may request.
135 struct _GtkRequisition
141 /* An allocation is a size and position. Where a widget
142 * can ask for a desired size, it is actually given
143 * this amount of space at the specified position.
145 struct _GtkAllocation
153 /* The contents of a selection are returned in a GtkSelectionData
154 structure. selection/target identify the request.
155 type specifies the type of the return; if length < 0, and
156 the data should be ignored. This structure has object semantics -
157 no fields should be modified directly, they should not be created
158 directly, and pointers to them should not be stored beyond the duration of
159 a callback. (If the last is changed, we'll need to add reference
162 struct _GtkSelectionData
172 /* The widget is the base of the tree for displayable objects.
173 * (A displayable object is one which takes up some amount
174 * of screen real estate). It provides a common base and interface
175 * which actual widgets must adhere to.
179 /* The object structure needs to be the first
180 * element in the widget structure in order for
181 * the object mechanism to work correctly. This
182 * allows a GtkWidget pointer to be cast to a
187 /* The state of the widget. There are actually only
188 * 5 widget states (defined in "gtkenums.h").
192 /* The saved state of the widget. When a widgets state
193 * is changed to GTK_STATE_INSENSITIVE via
194 * "gtk_widget_set_state" or "gtk_widget_set_sensitive"
195 * the old state is kept around in this field. The state
196 * will be restored once the widget gets sensitive again.
200 /* The widgets name. If the widget does not have a name
201 * (the name is NULL), then its name (as returned by
202 * "gtk_widget_get_name") is its classes name.
203 * The widget name is used to determine the style to
208 /* The style for the widget. The style contains the
209 * colors the widget should be drawn in for each state
210 * along with graphics contexts used to draw with and
211 * the font to use for text.
215 /* The widgets desired size.
217 GtkRequisition requisition;
219 /* The widgets allocated size.
221 GtkAllocation allocation;
223 /* The widgets window or its parent window if it does
224 * not have a window. (Which will be indicated by the
225 * GTK_NO_WINDOW flag being set).
229 /* The widgets parent.
234 struct _GtkWidgetClass
236 /* The object class structure needs to be the first
237 * element in the widget class structure in order for
238 * the class mechanism to work correctly. This allows a
239 * GtkWidgetClass pointer to be cast to a GtkObjectClass
242 GtkObjectClass parent_class;
244 /* The signal to emit when an object of this class is activated.
245 * This is used when activating the current focus widget and
246 * the default widget.
248 gint activate_signal;
251 void (* show) (GtkWidget *widget);
252 void (* hide) (GtkWidget *widget);
253 void (* show_all) (GtkWidget *widget);
254 void (* hide_all) (GtkWidget *widget);
255 void (* map) (GtkWidget *widget);
256 void (* unmap) (GtkWidget *widget);
257 void (* realize) (GtkWidget *widget);
258 void (* unrealize) (GtkWidget *widget);
259 void (* draw) (GtkWidget *widget,
261 void (* draw_focus) (GtkWidget *widget);
262 void (* draw_default) (GtkWidget *widget);
263 void (* size_request) (GtkWidget *widget,
264 GtkRequisition *requisition);
265 void (* size_allocate) (GtkWidget *widget,
266 GtkAllocation *allocation);
267 void (* state_changed) (GtkWidget *widget,
268 guint previous_state);
271 gint (* install_accelerator) (GtkWidget *widget,
272 const gchar *signal_name,
275 void (* remove_accelerator) (GtkWidget *widget,
276 const gchar *signal_name);
279 gint (* event) (GtkWidget *widget,
281 gint (* button_press_event) (GtkWidget *widget,
282 GdkEventButton *event);
283 gint (* button_release_event) (GtkWidget *widget,
284 GdkEventButton *event);
285 gint (* motion_notify_event) (GtkWidget *widget,
286 GdkEventMotion *event);
287 gint (* delete_event) (GtkWidget *widget,
289 gint (* destroy_event) (GtkWidget *widget,
291 gint (* expose_event) (GtkWidget *widget,
292 GdkEventExpose *event);
293 gint (* key_press_event) (GtkWidget *widget,
295 gint (* key_release_event) (GtkWidget *widget,
297 gint (* enter_notify_event) (GtkWidget *widget,
298 GdkEventCrossing *event);
299 gint (* leave_notify_event) (GtkWidget *widget,
300 GdkEventCrossing *event);
301 gint (* configure_event) (GtkWidget *widget,
302 GdkEventConfigure *event);
303 gint (* focus_in_event) (GtkWidget *widget,
304 GdkEventFocus *event);
305 gint (* focus_out_event) (GtkWidget *widget,
306 GdkEventFocus *event);
307 gint (* map_event) (GtkWidget *widget,
309 gint (* unmap_event) (GtkWidget *widget,
311 gint (* property_notify_event) (GtkWidget *widget,
312 GdkEventProperty *event);
313 gint (* selection_clear_event) (GtkWidget *widget,
314 GdkEventSelection *event);
315 gint (* selection_request_event) (GtkWidget *widget,
316 GdkEventSelection *event);
317 gint (* selection_notify_event) (GtkWidget *widget,
318 GdkEventSelection *event);
319 gint (* proximity_in_event) (GtkWidget *widget,
320 GdkEventProximity *event);
321 gint (* proximity_out_event) (GtkWidget *widget,
322 GdkEventProximity *event);
323 gint (* drag_begin_event) (GtkWidget *widget,
324 GdkEventDragBegin *event);
325 gint (* drag_request_event) (GtkWidget *widget,
326 GdkEventDragRequest *event);
327 gint (* drop_enter_event) (GtkWidget *widget,
328 GdkEventDropEnter *event);
329 gint (* drop_leave_event) (GtkWidget *widget,
330 GdkEventDropLeave *event);
331 gint (* drop_data_available_event) (GtkWidget *widget,
332 GdkEventDropDataAvailable *event);
333 gint (* other_event) (GtkWidget *widget,
334 GdkEventOther *event);
337 void (* selection_received) (GtkWidget *widget,
338 GtkSelectionData *selection_data);
340 gint (* client_event) (GtkWidget *widget,
341 GdkEventClient *event);
342 gint (* no_expose_event) (GtkWidget *widget,
346 struct _GtkWidgetAuxInfo
354 struct _GtkWidgetShapeInfo
358 GdkBitmap *shape_mask;
362 guint gtk_widget_get_type (void);
363 GtkWidget* gtk_widget_new (guint type,
365 GtkWidget* gtk_widget_newv (guint type,
368 void gtk_widget_ref (GtkWidget *widget);
369 void gtk_widget_unref (GtkWidget *widget);
370 void gtk_widget_sink (GtkWidget *widget);
371 void gtk_widget_destroy (GtkWidget *widget);
372 void gtk_widget_destroyed (GtkWidget *widget,
373 GtkWidget **widget_pointer);
374 void gtk_widget_get (GtkWidget *widget,
376 void gtk_widget_getv (GtkWidget *widget,
379 void gtk_widget_set (GtkWidget *widget,
381 void gtk_widget_setv (GtkWidget *widget,
384 void gtk_widget_unparent (GtkWidget *widget);
385 void gtk_widget_show (GtkWidget *widget);
386 void gtk_widget_hide (GtkWidget *widget);
387 void gtk_widget_show_all (GtkWidget *widget);
388 void gtk_widget_hide_all (GtkWidget *widget);
389 void gtk_widget_map (GtkWidget *widget);
390 void gtk_widget_unmap (GtkWidget *widget);
391 void gtk_widget_realize (GtkWidget *widget);
392 void gtk_widget_unrealize (GtkWidget *widget);
393 void gtk_widget_queue_draw (GtkWidget *widget);
394 void gtk_widget_queue_resize (GtkWidget *widget);
395 void gtk_widget_draw (GtkWidget *widget,
397 void gtk_widget_draw_focus (GtkWidget *widget);
398 void gtk_widget_draw_default (GtkWidget *widget);
399 void gtk_widget_draw_children (GtkWidget *widget);
400 void gtk_widget_size_request (GtkWidget *widget,
401 GtkRequisition *requisition);
402 void gtk_widget_size_allocate (GtkWidget *widget,
403 GtkAllocation *allocation);
404 void gtk_widget_install_accelerator (GtkWidget *widget,
405 GtkAcceleratorTable *table,
406 const gchar *signal_name,
409 void gtk_widget_remove_accelerator (GtkWidget *widget,
410 GtkAcceleratorTable *table,
411 const gchar *signal_name);
412 gint gtk_widget_event (GtkWidget *widget,
415 void gtk_widget_activate (GtkWidget *widget);
416 void gtk_widget_reparent (GtkWidget *widget,
417 GtkWidget *new_parent);
418 void gtk_widget_popup (GtkWidget *widget,
421 gint gtk_widget_intersect (GtkWidget *widget,
423 GdkRectangle *intersection);
424 gint gtk_widget_basic (GtkWidget *widget);
426 void gtk_widget_grab_focus (GtkWidget *widget);
427 void gtk_widget_grab_default (GtkWidget *widget);
429 void gtk_widget_set_name (GtkWidget *widget,
431 gchar* gtk_widget_get_name (GtkWidget *widget);
432 void gtk_widget_set_state (GtkWidget *widget,
434 void gtk_widget_set_sensitive (GtkWidget *widget,
436 void gtk_widget_set_parent (GtkWidget *widget,
438 void gtk_widget_set_parent_window (GtkWidget *widget,
439 GdkWindow *parent_window);
440 GdkWindow *gtk_widget_get_parent_window (GtkWidget *widget);
441 void gtk_widget_set_style (GtkWidget *widget,
443 void gtk_widget_set_uposition (GtkWidget *widget,
446 void gtk_widget_set_usize (GtkWidget *widget,
449 void gtk_widget_set_events (GtkWidget *widget,
451 void gtk_widget_set_extension_events (GtkWidget *widget,
452 GdkExtensionMode mode);
454 GtkWidget* gtk_widget_get_toplevel (GtkWidget *widget);
455 GtkWidget* gtk_widget_get_ancestor (GtkWidget *widget,
457 GdkColormap* gtk_widget_get_colormap (GtkWidget *widget);
458 GdkVisual* gtk_widget_get_visual (GtkWidget *widget);
459 GtkStyle* gtk_widget_get_style (GtkWidget *widget);
460 gint gtk_widget_get_events (GtkWidget *widget);
461 GdkExtensionMode gtk_widget_get_extension_events (GtkWidget *widget);
462 void gtk_widget_get_pointer (GtkWidget *widget,
466 gint gtk_widget_is_ancestor (GtkWidget *widget,
467 GtkWidget *ancestor);
468 gint gtk_widget_is_child (GtkWidget *widget,
471 void gtk_widget_push_colormap (GdkColormap *cmap);
472 void gtk_widget_push_visual (GdkVisual *visual);
473 void gtk_widget_push_style (GtkStyle *style);
475 void gtk_widget_pop_colormap (void);
476 void gtk_widget_pop_visual (void);
477 void gtk_widget_pop_style (void);
479 void gtk_widget_set_default_colormap (GdkColormap *colormap);
480 void gtk_widget_set_default_visual (GdkVisual *visual);
481 void gtk_widget_set_default_style (GtkStyle *style);
482 /* Tells other Gtk applications to use the same default style */
483 void gtk_widget_propagate_default_style(void);
484 GdkColormap* gtk_widget_get_default_colormap (void);
485 GdkVisual* gtk_widget_get_default_visual (void);
486 GtkStyle* gtk_widget_get_default_style (void);
489 * see gdk_window_shape_combine_mask
491 void gtk_widget_shape_combine_mask (GtkWidget *widget,
492 GdkBitmap *shape_mask,
497 * When you get a drag_enter event, you can use this to tell Gtk of other
498 * items that are to be dragged as well...
500 void gtk_widget_dnd_drag_add (GtkWidget *widget);
503 * These two functions enable drag and/or drop on a widget,
504 * and also let Gtk know what data types will be accepted (use MIME type
505 * naming, plus tacking "URL:" on the front for link dragging)
507 void gtk_widget_dnd_drag_set (GtkWidget *widget,
509 gchar **type_accept_list,
511 void gtk_widget_dnd_drop_set (GtkWidget *widget,
513 gchar **type_accept_list,
515 guint8 is_destructive_operation);
518 * used to reply to a DRAG_REQUEST event - if you don't want to
519 * give the data then pass in NULL for it
521 void gtk_widget_dnd_data_set (GtkWidget *widget,
524 gulong data_numbytes);
528 #endif /* __cplusplus */
531 #endif /* __GTK_WIDGET_H__ */