gtkwidget.h 47.6 KB
Newer Older
Cody Russell's avatar
Cody Russell committed
1
/* GTK - The GIMP Toolkit
Elliot Lee's avatar
Elliot Lee committed
2
3
4
 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
 *
 * This library is free software; you can redistribute it and/or
5
 * modify it under the terms of the GNU Lesser General Public
Elliot Lee's avatar
Elliot Lee committed
6
7
8
9
10
 * 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
11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
12
 * Lesser General Public License for more details.
Elliot Lee's avatar
Elliot Lee committed
13
 *
14
 * You should have received a copy of the GNU Lesser General Public
15
16
17
 * License along with this library; if not, write to the
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 * Boston, MA 02111-1307, USA.
Elliot Lee's avatar
Elliot Lee committed
18
 */
19
20

/*
21
 * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
22
23
 * file for a list of people on the GTK+ Team.  See the ChangeLog
 * files for a list of changes.  These files are distributed with
24
 * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
25
26
 */

27
28
29
30
#if defined(GTK_DISABLE_SINGLE_INCLUDES) && !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
#error "Only <gtk/gtk.h> can be included directly."
#endif

Elliot Lee's avatar
Elliot Lee committed
31
32
33
34
#ifndef __GTK_WIDGET_H__
#define __GTK_WIDGET_H__

#include <gdk/gdk.h>
Tim Janik's avatar
Tim Janik committed
35
#include <gtk/gtkaccelgroup.h>
Elliot Lee's avatar
Elliot Lee committed
36
#include <gtk/gtkobject.h>
37
#include <gtk/gtkadjustment.h>
Elliot Lee's avatar
Elliot Lee committed
38
#include <gtk/gtkstyle.h>
39
#include <gtk/gtksettings.h>
40
#include <atk/atk.h>
Elliot Lee's avatar
Elliot Lee committed
41

Matthias Clasen's avatar
Matthias Clasen committed
42
G_BEGIN_DECLS
43

44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/**
 * GtkWidgetFlags:
 * @GTK_TOPLEVEL: widgets without a real parent, as there are #GtkWindow<!-- -->s and
 *  #GtkMenu<!-- -->s have this flag set throughout their lifetime.
 *  Toplevel widgets always contain their own #GdkWindow.
 * @GTK_NO_WINDOW: Indicative for a widget that does not provide its own #GdkWindow.
 *  Visible action (e.g. drawing) is performed on the parent's #GdkWindow.
 * @GTK_REALIZED: Set by gtk_widget_realize(), unset by gtk_widget_unrealize().
 *  A realized widget has an associated #GdkWindow.
 * @GTK_MAPPED: Set by gtk_widget_map(), unset by gtk_widget_unmap().
 *  Only realized widgets can be mapped. It means that gdk_window_show()
 *  has been called on the widgets window(s).
 * @GTK_VISIBLE: Set by gtk_widget_show(), unset by gtk_widget_hide(). Implies that a
 *  widget will be mapped as soon as its parent is mapped.
 * @GTK_SENSITIVE: Set and unset by gtk_widget_set_sensitive().
 *  The sensitivity of a widget determines whether it will receive
 *  certain events (e.g. button or key presses). One premise for
 *  the widget's sensitivity is to have this flag set.
 * @GTK_PARENT_SENSITIVE: Set and unset by gtk_widget_set_sensitive() operations on the
 *  parents of the widget.
 *  This is the second premise for the widget's sensitivity. Once
 *  it has %GTK_SENSITIVE and %GTK_PARENT_SENSITIVE set, its state is
 *  effectively sensitive. This is expressed (and can be examined) by
 *  the #GTK_WIDGET_IS_SENSITIVE macro.
 * @GTK_CAN_FOCUS: Determines whether a widget is able to handle focus grabs.
 * @GTK_HAS_FOCUS: Set by gtk_widget_grab_focus() for widgets that also
 *  have %GTK_CAN_FOCUS set. The flag will be unset once another widget
 *  grabs the focus.
 * @GTK_CAN_DEFAULT: The widget is allowed to receive the default action via
 *  gtk_widget_grab_default() and will reserve space to draw the default if possible
 * @GTK_HAS_DEFAULT: The widget currently is receiving the default action and
 *  should be drawn appropriately if possible
 * @GTK_HAS_GRAB: Set by gtk_grab_add(), unset by gtk_grab_remove(). It means that the
 *  widget is in the grab_widgets stack, and will be the preferred one for
 *  receiving events other than ones of cosmetic value.
 * @GTK_RC_STYLE: Indicates that the widget's style has been looked up through the rc
 *  mechanism. It does not imply that the widget actually had a style
 *  defined through the rc mechanism.
 * @GTK_COMPOSITE_CHILD: Indicates that the widget is a composite child of its parent; see
 *  gtk_widget_push_composite_child(), gtk_widget_pop_composite_child().
 * @GTK_NO_REPARENT: Unused since before GTK+ 1.2, will be removed in a future version.
 * @GTK_APP_PAINTABLE: Set and unset by gtk_widget_set_app_paintable().
 *  Must be set on widgets whose window the application directly draws on,
 *  in order to keep GTK+ from overwriting the drawn stuff.  See
 *  <xref linkend="app-paintable-widgets"/> for a detailed
 *  description of this flag.
 * @GTK_RECEIVES_DEFAULT: The widget when focused will receive the default action and have
 *  %GTK_HAS_DEFAULT set even if there is a different widget set as default.
 * @GTK_DOUBLE_BUFFERED: Set and unset by gtk_widget_set_double_buffered().
 *  Indicates that exposes done on the widget should be
 *  double-buffered.  See <xref linkend="double-buffering"/> for a
 *  detailed discussion of how double-buffering works in GTK+ and
 *  why you may want to disable it for special cases.
 * @GTK_NO_SHOW_ALL:
 *
 * Tells about certain properties of the widget.
Elliot Lee's avatar
Elliot Lee committed
100
 */
Tim Janik's avatar
Tim Janik committed
101
typedef enum
Elliot Lee's avatar
Elliot Lee committed
102
{
103
104
105
106
107
108
109
110
111
112
113
114
115
  GTK_TOPLEVEL         = 1 << 4,
  GTK_NO_WINDOW        = 1 << 5,
  GTK_REALIZED         = 1 << 6,
  GTK_MAPPED           = 1 << 7,
  GTK_VISIBLE          = 1 << 8,
  GTK_SENSITIVE        = 1 << 9,
  GTK_PARENT_SENSITIVE = 1 << 10,
  GTK_CAN_FOCUS        = 1 << 11,
  GTK_HAS_FOCUS        = 1 << 12,
  GTK_CAN_DEFAULT      = 1 << 13,
  GTK_HAS_DEFAULT      = 1 << 14,
  GTK_HAS_GRAB	       = 1 << 15,
  GTK_RC_STYLE	       = 1 << 16,
116
  GTK_COMPOSITE_CHILD  = 1 << 17,
Owen Taylor's avatar
Owen Taylor committed
117
  GTK_NO_REPARENT      = 1 << 18,
118
  GTK_APP_PAINTABLE    = 1 << 19,
119
  GTK_RECEIVES_DEFAULT = 1 << 20,
120
121
  GTK_DOUBLE_BUFFERED  = 1 << 21,
  GTK_NO_SHOW_ALL      = 1 << 22
122
} GtkWidgetFlags;
Elliot Lee's avatar
Elliot Lee committed
123

124
125
126
127
128
129
130
/* Kinds of widget-specific help */
typedef enum
{
  GTK_WIDGET_HELP_TOOLTIP,
  GTK_WIDGET_HELP_WHATS_THIS
} GtkWidgetHelpType;

131
132
/* Macro for casting a pointer to a GtkWidget or GtkWidgetClass pointer.
 * Macros for testing whether `widget' or `klass' are of type GTK_TYPE_WIDGET.
Elliot Lee's avatar
Elliot Lee committed
133
 */
134
#define GTK_TYPE_WIDGET			  (gtk_widget_get_type ())
Manish Singh's avatar
Manish Singh committed
135
136
137
138
139
#define GTK_WIDGET(widget)		  (G_TYPE_CHECK_INSTANCE_CAST ((widget), GTK_TYPE_WIDGET, GtkWidget))
#define GTK_WIDGET_CLASS(klass)		  (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_WIDGET, GtkWidgetClass))
#define GTK_IS_WIDGET(widget)		  (G_TYPE_CHECK_INSTANCE_TYPE ((widget), GTK_TYPE_WIDGET))
#define GTK_IS_WIDGET_CLASS(klass)	  (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_WIDGET))
#define GTK_WIDGET_GET_CLASS(obj)         (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_WIDGET, GtkWidgetClass))
Elliot Lee's avatar
Elliot Lee committed
140

141
/* Macros for extracting various fields from GtkWidget and GtkWidgetClass.
Elliot Lee's avatar
Elliot Lee committed
142
 */
143
#ifndef GTK_DISABLE_DEPRECATED
144
145
146
147
148
/**
 * GTK_WIDGET_TYPE:
 * @wid: a #GtkWidget.
 *
 * Gets the type of a widget.
149
150
 *
 * Deprecated: 2.20: Use G_OBJECT_TYPE() instead.
151
 */
152
#define GTK_WIDGET_TYPE(wid)		  (GTK_OBJECT_TYPE (wid))
153
#endif
154
155
156
157
158
159

/**
 * GTK_WIDGET_STATE:
 * @wid: a #GtkWidget.
 *
 * Returns the current state of the widget, as a #GtkStateType.
160
161
 *
 * Deprecated: 2.20: Use gtk_widget_get_state() instead.
162
 */
163
#define GTK_WIDGET_STATE(wid)		  (GTK_WIDGET (wid)->state)
164
/* FIXME: Deprecating GTK_WIDGET_STATE requires fixing GTK internals. */
165

166
#ifndef GTK_DISABLE_DEPRECATED
167
168
169
170
171
172
173
174
175
/**
 * GTK_WIDGET_SAVED_STATE:
 * @wid: a #GtkWidget.
 *
 * Returns the saved state of the widget, as a #GtkStateType.
 *
 * The saved state will be restored when a widget gets sensitive
 * again, after it has been made insensitive with gtk_widget_set_state()
 * or gtk_widget_set_sensitive().
176
177
 *
 * Deprecated: 2.20: Do not used it.
178
 */
179
#define GTK_WIDGET_SAVED_STATE(wid)	  (GTK_WIDGET (wid)->saved_state)
180
#endif
Elliot Lee's avatar
Elliot Lee committed
181

182

183
184
/* Macros for extracting the widget flags from GtkWidget.
 */
185
186
187
188
189
/**
 * GTK_WIDGET_FLAGS:
 * @wid: a #GtkWidget.
 *
 * Returns the widget flags from @wid.
190
191
 *
 * Deprecated: 2.20: Do not use it.
192
 */
193
#define GTK_WIDGET_FLAGS(wid)		  (GTK_OBJECT_FLAGS (wid))
194
/* FIXME: Deprecating GTK_WIDGET_FLAGS requires fixing GTK internals. */
195

196
#ifndef GTK_DISABLE_DEPRECATED
197
198
199
200
201
/**
 * GTK_WIDGET_TOPLEVEL:
 * @wid: a #GtkWidget.
 *
 * Evaluates to %TRUE if the widget is a toplevel widget.
202
203
 *
 * Deprecated: 2.20: Use gtk_widget_is_toplevel() instead.
204
 */
205
#define GTK_WIDGET_TOPLEVEL(wid)	  ((GTK_WIDGET_FLAGS (wid) & GTK_TOPLEVEL) != 0)
206
#endif
207
208
209
210
211
212

/**
 * GTK_WIDGET_NO_WINDOW:
 * @wid: a #GtkWidget.
 *
 * Evaluates to %TRUE if the widget doesn't have an own #GdkWindow.
213
214
 *
 * Deprecated: 2.20: Use gtk_widget_get_has_window() instead.
215
 */
216
#define GTK_WIDGET_NO_WINDOW(wid)	  ((GTK_WIDGET_FLAGS (wid) & GTK_NO_WINDOW) != 0)
217
/* FIXME: Deprecating GTK_WIDGET_NO_WINDOW requires fixing GTK internals. */
218
219
220
221
222
223
224

/**
 * GTK_WIDGET_REALIZED:
 * @wid: a #GtkWidget.
 *
 * Evaluates to %TRUE if the widget is realized.
 */
225
#define GTK_WIDGET_REALIZED(wid)	  ((GTK_WIDGET_FLAGS (wid) & GTK_REALIZED) != 0)
226
227
228
229
230
231
232

/**
 * GTK_WIDGET_MAPPED:
 * @wid: a #GtkWidget.
 *
 * Evaluates to %TRUE if the widget is mapped.
 */
233
#define GTK_WIDGET_MAPPED(wid)		  ((GTK_WIDGET_FLAGS (wid) & GTK_MAPPED) != 0)
234
235
236
237
238
239
240

/**
 * GTK_WIDGET_VISIBLE:
 * @wid: a #GtkWidget.
 *
 * Evaluates to %TRUE if the widget is visible.
 */
241
#define GTK_WIDGET_VISIBLE(wid)		  ((GTK_WIDGET_FLAGS (wid) & GTK_VISIBLE) != 0)
242
243
244
245
246
247
248

/**
 * GTK_WIDGET_DRAWABLE:
 * @wid: a #GtkWidget.
 *
 * Evaluates to %TRUE if the widget is mapped and visible.
 */
249
#define GTK_WIDGET_DRAWABLE(wid)	  (GTK_WIDGET_VISIBLE (wid) && GTK_WIDGET_MAPPED (wid))
250
251
252
253
254
255
256

/**
 * GTK_WIDGET_SENSITIVE:
 * @wid: a #GtkWidget.
 *
 * Evaluates to %TRUE if the #GTK_SENSITIVE flag has be set on the widget.
 */
257
#define GTK_WIDGET_SENSITIVE(wid)	  ((GTK_WIDGET_FLAGS (wid) & GTK_SENSITIVE) != 0)
258
259
260
261
262
263
264

/**
 * GTK_WIDGET_PARENT_SENSITIVE:
 * @wid: a #GtkWidget.
 *
 * Evaluates to %TRUE if the #GTK_PARENT_SENSITIVE flag has be set on the widget.
 */
265
#define GTK_WIDGET_PARENT_SENSITIVE(wid)  ((GTK_WIDGET_FLAGS (wid) & GTK_PARENT_SENSITIVE) != 0)
266
267
268
269
270
271
272

/**
 * GTK_WIDGET_IS_SENSITIVE:
 * @wid: a #GtkWidget.
 *
 * Evaluates to %TRUE if the widget is effectively sensitive.
 */
273
274
#define GTK_WIDGET_IS_SENSITIVE(wid)	  (GTK_WIDGET_SENSITIVE (wid) && \
					   GTK_WIDGET_PARENT_SENSITIVE (wid))
275
276

#ifndef GTK_DISABLE_DEPRECATED
277
278
279
280
281
/**
 * GTK_WIDGET_CAN_FOCUS:
 * @wid: a #GtkWidget.
 *
 * Evaluates to %TRUE if the widget is able to handle focus grabs.
282
283
 *
 * Deprecated: 2.20: Use gtk_widget_get_can_focus() instead.
284
 */
285
#define GTK_WIDGET_CAN_FOCUS(wid)	  ((GTK_WIDGET_FLAGS (wid) & GTK_CAN_FOCUS) != 0)
286
#endif
287
288
289
290
291
292
293
294

/**
 * GTK_WIDGET_HAS_FOCUS:
 * @wid: a #GtkWidget.
 *
 * Evaluates to %TRUE if the widget has grabbed the focus and no other
 * widget has done so more recently.
 */
295
#define GTK_WIDGET_HAS_FOCUS(wid)	  ((GTK_WIDGET_FLAGS (wid) & GTK_HAS_FOCUS) != 0)
296

Javier Jardón's avatar
Javier Jardón committed
297
#ifndef GTK_DISABLE_DEPRECATED
298
299
300
301
302
303
/**
 * GTK_WIDGET_CAN_DEFAULT:
 * @wid: a #GtkWidget.
 *
 * Evaluates to %TRUE if the widget is allowed to receive the default action
 * via gtk_widget_grab_default().
Javier Jardón's avatar
Javier Jardón committed
304
305
 *
 * Deprecated: 2.20: Use gtk_widget_get_can_default() instead.
306
 */
307
#define GTK_WIDGET_CAN_DEFAULT(wid)	  ((GTK_WIDGET_FLAGS (wid) & GTK_CAN_DEFAULT) != 0)
Javier Jardón's avatar
Javier Jardón committed
308
#endif
309

Javier Jardón's avatar
Javier Jardón committed
310
#ifndef GTK_DISABLE_DEPRECATED
311
312
313
314
315
/**
 * GTK_WIDGET_HAS_DEFAULT:
 * @wid: a #GtkWidget.
 *
 * Evaluates to %TRUE if the widget currently is receiving the default action.
Javier Jardón's avatar
Javier Jardón committed
316
317
 *
 * Deprecated: 2.20: Use gtk_widget_has_default() instead.
318
 */
319
#define GTK_WIDGET_HAS_DEFAULT(wid)	  ((GTK_WIDGET_FLAGS (wid) & GTK_HAS_DEFAULT) != 0)
Javier Jardón's avatar
Javier Jardón committed
320
#endif
321

Javier Jardón's avatar
Javier Jardón committed
322
#ifndef GTK_DISABLE_DEPRECATED
323
324
325
326
327
328
/**
 * GTK_WIDGET_HAS_GRAB:
 * @wid: a #GtkWidget.
 *
 * Evaluates to %TRUE if the widget is in the grab_widgets stack, and will be
 * the preferred one for receiving events other than ones of cosmetic value.
Javier Jardón's avatar
Javier Jardón committed
329
330
 *
 * Deprecated: 2.20: Use gtk_widget_has_grab() instead.
331
 */
332
#define GTK_WIDGET_HAS_GRAB(wid)	  ((GTK_WIDGET_FLAGS (wid) & GTK_HAS_GRAB) != 0)
Javier Jardón's avatar
Javier Jardón committed
333
#endif
334

335
#ifndef GTK_DISABLE_DEPRECATED
336
337
338
339
340
341
/**
 * GTK_WIDGET_RC_STYLE:
 * @wid: a #GtkWidget.
 *
 * Evaluates to %TRUE if the widget's style has been looked up through the rc
 * mechanism.
342
343
 *
 * Deprecated: 2.20: Use gtk_widget_has_rc_style() instead.
344
 */
345
#define GTK_WIDGET_RC_STYLE(wid)	  ((GTK_WIDGET_FLAGS (wid) & GTK_RC_STYLE) != 0)
346
347
#endif

348
#ifndef GTK_DISABLE_DEPRECATED
349
350
351
352
353
/**
 * GTK_WIDGET_COMPOSITE_CHILD:
 * @wid: a #GtkWidget.
 *
 * Evaluates to %TRUE if the widget is a composite child of its parent.
354
 *
355
 * Deprecated: 2.20: Use the #GtkWidget:composite-child property instead.
356
 */
357
#define GTK_WIDGET_COMPOSITE_CHILD(wid)	  ((GTK_WIDGET_FLAGS (wid) & GTK_COMPOSITE_CHILD) != 0)
358
#endif
359

Javier Jardón's avatar
Javier Jardón committed
360
#ifndef GTK_DISABLE_DEPRECATED
361
362
363
364
365
/**
 * GTK_WIDGET_APP_PAINTABLE:
 * @wid: a #GtkWidget.
 *
 * Evaluates to %TRUE if the #GTK_APP_PAINTABLE flag has been set on the widget.
Javier Jardón's avatar
Javier Jardón committed
366
367
 *
 * Deprecated: 2.20: Use gtk_widget_get_app_paintable() instead.
368
 */
369
#define GTK_WIDGET_APP_PAINTABLE(wid)	  ((GTK_WIDGET_FLAGS (wid) & GTK_APP_PAINTABLE) != 0)
Javier Jardón's avatar
Javier Jardón committed
370
#endif
371

Javier Jardón's avatar
Javier Jardón committed
372
#ifndef GTK_DISABLE_DEPRECATED
373
374
375
376
377
378
/**
 * GTK_WIDGET_RECEIVES_DEFAULT:
 * @wid: a #GtkWidget.
 *
 * Evaluates to %TRUE if the widget when focused will receive the default action
 * even if there is a different widget set as default.
Javier Jardón's avatar
Javier Jardón committed
379
380
 *
 * Deprecated: 2.20: Use gtk_widget_get_receives_default() instead.
381
 */
382
#define GTK_WIDGET_RECEIVES_DEFAULT(wid)  ((GTK_WIDGET_FLAGS (wid) & GTK_RECEIVES_DEFAULT) != 0)
Javier Jardón's avatar
Javier Jardón committed
383
#endif
384

Javier Jardón's avatar
Javier Jardón committed
385
#ifndef GTK_DISABLE_DEPRECATED
386
387
388
389
390
/**
 * GTK_WIDGET_DOUBLE_BUFFERED:
 * @wid: a #GtkWidget.
 *
 * Evaluates to %TRUE if the #GTK_DOUBLE_BUFFERED flag has been set on the widget.
Javier Jardón's avatar
Javier Jardón committed
391
392
 *
 * Deprecated: 2.20: Use gtk_widget_get_double_buffered() instead.
393
 */
394
#define GTK_WIDGET_DOUBLE_BUFFERED(wid)	  ((GTK_WIDGET_FLAGS (wid) & GTK_DOUBLE_BUFFERED) != 0)
Javier Jardón's avatar
Javier Jardón committed
395
#endif
396
397


398
/* Macros for setting and clearing widget flags.
Elliot Lee's avatar
Elliot Lee committed
399
 */
400
401
402
403
404
405
406
/**
 * GTK_WIDGET_SET_FLAGS:
 * @wid: a #GtkWidget.
 * @flag: the flags to set.
 *
 * Turns on certain widget flags.
 */
407
#define GTK_WIDGET_SET_FLAGS(wid,flag)	  G_STMT_START{ (GTK_WIDGET_FLAGS (wid) |= (flag)); }G_STMT_END
408
409
410
411
412
413
414
415

/**
 * GTK_WIDGET_UNSET_FLAGS:
 * @wid: a #GtkWidget.
 * @flag: the flags to unset.
 *
 * Turns off certain widget flags.
 */
416
#define GTK_WIDGET_UNSET_FLAGS(wid,flag)  G_STMT_START{ (GTK_WIDGET_FLAGS (wid) &= ~(flag)); }G_STMT_END
Elliot Lee's avatar
Elliot Lee committed
417

418
#define GTK_TYPE_REQUISITION              (gtk_requisition_get_type ())
419
420
421
422
423
424
425
426

/* forward declaration to avoid excessive includes (and concurrent includes)
 */
typedef struct _GtkRequisition	   GtkRequisition;
typedef struct _GtkSelectionData   GtkSelectionData;
typedef struct _GtkWidgetClass	   GtkWidgetClass;
typedef struct _GtkWidgetAuxInfo   GtkWidgetAuxInfo;
typedef struct _GtkWidgetShapeInfo GtkWidgetShapeInfo;
427
typedef struct _GtkClipboard	   GtkClipboard;
Kristian Rietveld's avatar
Kristian Rietveld committed
428
429
typedef struct _GtkTooltip         GtkTooltip;
typedef struct _GtkWindow          GtkWindow;
Elliot Lee's avatar
Elliot Lee committed
430

431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
/**
 * GtkAllocation:
 * @x: the X position of the widget's area relative to its parents allocation.
 * @y: the Y position of the widget's area relative to its parents allocation.
 * @width: the width of the widget's allocated area.
 * @height: the height of the widget's allocated area.
 *
 * A <structname>GtkAllocation</structname> of a widget represents region which has been allocated to the
 * widget by its parent. It is a subregion of its parents allocation. See
 * <xref linkend="size-allocation"/> for more information.
 */
typedef 	GdkRectangle	   GtkAllocation;

/**
 * GtkCallback:
 * @widget: the widget to operate on
 * @data: user-supplied data
 *
 * The type of the callback functions used for e.g. iterating over
 * the children of a container, see gtk_container_foreach().
 */
typedef void    (*GtkCallback)     (GtkWidget        *widget,
				    gpointer          data);

/**
 * GtkRequisition:
 * @width: the widget's desired width
 * @height: the widget's desired height
 *
 * A <structname>GtkRequisition</structname> represents the desired size of a widget. See
 * <xref linkend="size-requisition"/> for more information.
Elliot Lee's avatar
Elliot Lee committed
462
463
464
 */
struct _GtkRequisition
{
465
466
  gint width;
  gint height;
Elliot Lee's avatar
Elliot Lee committed
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
};

/* 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;
483
  
484
485
486
487
488
  /* 16 bits of internally used private flags.
   * this will be packed into the same 4 byte alignment frame that
   * state and saved_state go. we therefore don't waste any new
   * space on this.
   */
Tim Janik's avatar
Tim Janik committed
489
  guint16 GSEAL (private_flags);
490
  
Elliot Lee's avatar
Elliot Lee committed
491
492
493
  /* The state of the widget. There are actually only
   *  5 widget states (defined in "gtkenums.h").
   */
Tim Janik's avatar
Tim Janik committed
494
  guint8 GSEAL (state);
495
  
496
  /* The saved state of the widget. When a widget's state
497
498
499
500
   *  is changed to GTK_STATE_INSENSITIVE via
   *  "gtk_widget_set_state" or "gtk_widget_set_sensitive"
   *  the old state is kept around in this field. The state
   *  will be restored once the widget gets sensitive again.
Elliot Lee's avatar
Elliot Lee committed
501
   */
Tim Janik's avatar
Tim Janik committed
502
  guint8 GSEAL (saved_state);
503
  
504
  /* The widget's name. If the widget does not have a name
Elliot Lee's avatar
Elliot Lee committed
505
   *  (the name is NULL), then its name (as returned by
506
   *  "gtk_widget_get_name") is its class's name.
507
508
   * Among other things, the widget name is used to determine
   *  the style to use for a widget.
Elliot Lee's avatar
Elliot Lee committed
509
   */
Tim Janik's avatar
Tim Janik committed
510
  gchar *GSEAL (name);
511
  
512
513
  /*< public >*/

Elliot Lee's avatar
Elliot Lee committed
514
515
516
517
518
  /* 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.
   */
Tim Janik's avatar
Tim Janik committed
519
  GtkStyle *GSEAL (style);
520
  
521
  /* The widget's desired size.
Elliot Lee's avatar
Elliot Lee committed
522
   */
Tim Janik's avatar
Tim Janik committed
523
  GtkRequisition GSEAL (requisition);
524
  
525
  /* The widget's allocated size.
Elliot Lee's avatar
Elliot Lee committed
526
   */
Tim Janik's avatar
Tim Janik committed
527
  GtkAllocation GSEAL (allocation);
528
  
529
  /* The widget's window or its parent window if it does
Elliot Lee's avatar
Elliot Lee committed
530
531
532
   *  not have a window. (Which will be indicated by the
   *  GTK_NO_WINDOW flag being set).
   */
Tim Janik's avatar
Tim Janik committed
533
  GdkWindow *GSEAL (window);
534
  
535
  /* The widget's parent.
Elliot Lee's avatar
Elliot Lee committed
536
   */
Tim Janik's avatar
Tim Janik committed
537
  GtkWidget *GSEAL (parent);
Elliot Lee's avatar
Elliot Lee committed
538
539
};

540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
/**
 * GtkWidgetClass:
 * @parent_class:
 * @activate_signal:
 * @set_scroll_adjustments_signal:
 *
 * <structfield>activate_signal</structfield>
 * The signal to emit when a widget of this class is activated,
 * gtk_widget_activate() handles the emission. Implementation of this
 * signal is optional.
 *
 *
 * <structfield>set_scroll_adjustment_signal</structfield>
 * This signal is emitted  when a widget of this class is added
 * to a scrolling aware parent, gtk_widget_set_scroll_adjustments()
 * handles the emission.
 * Implementation of this signal is optional.
 */
Elliot Lee's avatar
Elliot Lee committed
558
559
560
561
562
563
564
565
566
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;
Soren Sandmann's avatar
Soren Sandmann committed
567
568

  /*< public >*/
569
  
570
  guint activate_signal;
571

572
  guint set_scroll_adjustments_signal;
573

Soren Sandmann's avatar
Soren Sandmann committed
574
575
  /*< private >*/
  
Tim Janik's avatar
Tim Janik committed
576
577
578
579
580
  /* seldomly overidden */
  void (*dispatch_child_properties_changed) (GtkWidget   *widget,
					     guint        n_pspecs,
					     GParamSpec **pspecs);

Elliot Lee's avatar
Elliot Lee committed
581
  /* basics */
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
  void (* show)		       (GtkWidget        *widget);
  void (* show_all)            (GtkWidget        *widget);
  void (* hide)		       (GtkWidget        *widget);
  void (* hide_all)            (GtkWidget        *widget);
  void (* map)		       (GtkWidget        *widget);
  void (* unmap)	       (GtkWidget        *widget);
  void (* realize)	       (GtkWidget        *widget);
  void (* unrealize)	       (GtkWidget        *widget);
  void (* size_request)	       (GtkWidget        *widget,
				GtkRequisition   *requisition);
  void (* size_allocate)       (GtkWidget        *widget,
				GtkAllocation    *allocation);
  void (* state_changed)       (GtkWidget        *widget,
				GtkStateType   	  previous_state);
  void (* parent_set)	       (GtkWidget        *widget,
				GtkWidget        *previous_parent);
598
599
  void (* hierarchy_changed)   (GtkWidget        *widget,
				GtkWidget        *previous_toplevel);
600
601
602
603
  void (* style_set)	       (GtkWidget        *widget,
				GtkStyle         *previous_style);
  void (* direction_changed)   (GtkWidget        *widget,
				GtkTextDirection  previous_direction);
604
605
  void (* grab_notify)         (GtkWidget        *widget,
				gboolean          was_grabbed);
Tim Janik's avatar
Tim Janik committed
606
607
  void (* child_notify)        (GtkWidget	 *widget,
				GParamSpec       *pspec);
608
  
609
  /* Mnemonics */
610
  gboolean (* mnemonic_activate) (GtkWidget    *widget,
611
612
				  gboolean      group_cycling);
  
613
  /* explicit focus */
Tim Janik's avatar
Tim Janik committed
614
  void     (* grab_focus)      (GtkWidget        *widget);
615
616
  gboolean (* focus)           (GtkWidget        *widget,
                                GtkDirectionType  direction);
617
  
Elliot Lee's avatar
Elliot Lee committed
618
  /* events */
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
  gboolean (* event)			(GtkWidget	     *widget,
					 GdkEvent	     *event);
  gboolean (* button_press_event)	(GtkWidget	     *widget,
					 GdkEventButton      *event);
  gboolean (* button_release_event)	(GtkWidget	     *widget,
					 GdkEventButton      *event);
  gboolean (* scroll_event)		(GtkWidget           *widget,
					 GdkEventScroll      *event);
  gboolean (* motion_notify_event)	(GtkWidget	     *widget,
					 GdkEventMotion      *event);
  gboolean (* delete_event)		(GtkWidget	     *widget,
					 GdkEventAny	     *event);
  gboolean (* destroy_event)		(GtkWidget	     *widget,
					 GdkEventAny	     *event);
  gboolean (* expose_event)		(GtkWidget	     *widget,
					 GdkEventExpose      *event);
  gboolean (* key_press_event)		(GtkWidget	     *widget,
					 GdkEventKey	     *event);
  gboolean (* key_release_event)	(GtkWidget	     *widget,
					 GdkEventKey	     *event);
  gboolean (* enter_notify_event)	(GtkWidget	     *widget,
					 GdkEventCrossing    *event);
  gboolean (* leave_notify_event)	(GtkWidget	     *widget,
					 GdkEventCrossing    *event);
  gboolean (* configure_event)		(GtkWidget	     *widget,
					 GdkEventConfigure   *event);
  gboolean (* focus_in_event)		(GtkWidget	     *widget,
					 GdkEventFocus       *event);
  gboolean (* focus_out_event)		(GtkWidget	     *widget,
					 GdkEventFocus       *event);
  gboolean (* map_event)		(GtkWidget	     *widget,
					 GdkEventAny	     *event);
  gboolean (* unmap_event)		(GtkWidget	     *widget,
					 GdkEventAny	     *event);
  gboolean (* property_notify_event)	(GtkWidget	     *widget,
					 GdkEventProperty    *event);
  gboolean (* selection_clear_event)	(GtkWidget	     *widget,
					 GdkEventSelection   *event);
  gboolean (* selection_request_event)	(GtkWidget	     *widget,
					 GdkEventSelection   *event);
  gboolean (* selection_notify_event)	(GtkWidget	     *widget,
					 GdkEventSelection   *event);
  gboolean (* proximity_in_event)	(GtkWidget	     *widget,
					 GdkEventProximity   *event);
  gboolean (* proximity_out_event)	(GtkWidget	     *widget,
					 GdkEventProximity   *event);
  gboolean (* visibility_notify_event)	(GtkWidget	     *widget,
					 GdkEventVisibility  *event);
  gboolean (* client_event)		(GtkWidget	     *widget,
					 GdkEventClient	     *event);
  gboolean (* no_expose_event)		(GtkWidget	     *widget,
					 GdkEventAny	     *event);
  gboolean (* window_state_event)	(GtkWidget	     *widget,
					 GdkEventWindowState *event);
Havoc Pennington's avatar
Havoc Pennington committed
673
  
Elliot Lee's avatar
Elliot Lee committed
674
  /* selection */
675
676
677
  void (* selection_get)           (GtkWidget          *widget,
				    GtkSelectionData   *selection_data,
				    guint               info,
678
				    guint               time_);
679
  void (* selection_received)      (GtkWidget          *widget,
680
				    GtkSelectionData   *selection_data,
681
				    guint               time_);
682
683
684
685
686
687
688
689
690
691

  /* Source side drag signals */
  void (* drag_begin)	           (GtkWidget	       *widget,
				    GdkDragContext     *context);
  void (* drag_end)	           (GtkWidget	       *widget,
				    GdkDragContext     *context);
  void (* drag_data_get)           (GtkWidget          *widget,
				    GdkDragContext     *context,
				    GtkSelectionData   *selection_data,
				    guint               info,
692
				    guint               time_);
693
694
695
696
697
698
  void (* drag_data_delete)        (GtkWidget	       *widget,
				    GdkDragContext     *context);

  /* Target side drag signals */
  void (* drag_leave)	           (GtkWidget	       *widget,
				    GdkDragContext     *context,
699
				    guint               time_);
700
701
702
703
  gboolean (* drag_motion)         (GtkWidget	       *widget,
				    GdkDragContext     *context,
				    gint                x,
				    gint                y,
704
				    guint               time_);
705
706
707
708
  gboolean (* drag_drop)           (GtkWidget	       *widget,
				    GdkDragContext     *context,
				    gint                x,
				    gint                y,
709
				    guint               time_);
710
711
  void (* drag_data_received)      (GtkWidget          *widget,
				    GdkDragContext     *context,
712
713
				    gint                x,
				    gint                y,
714
715
				    GtkSelectionData   *selection_data,
				    guint               info,
716
				    guint               time_);
Owen Taylor's avatar
Owen Taylor committed
717
718

  /* Signals used only for keybindings */
719
  gboolean (* popup_menu)          (GtkWidget          *widget);
720
721
722
723
724
725

  /* If a widget has multiple tooltips/whatsthis, it should show the
   * one for the current focus location, or if that doesn't make
   * sense, should cycle through them showing each tip alongside
   * whatever piece of the widget it applies to.
   */
726
  gboolean (* show_help)           (GtkWidget          *widget,
727
                                    GtkWidgetHelpType   help_type);
728
729
730
  
  /* accessibility support 
   */
731
732
733
734
735
736
  AtkObject*   (*get_accessible)     (GtkWidget *widget);

  void         (*screen_changed)     (GtkWidget *widget,
                                      GdkScreen *previous_screen);
  gboolean     (*can_activate_accel) (GtkWidget *widget,
                                      guint      signal_id);
737

738
739
740
741
  /* Sent when a grab is broken. */
  gboolean (*grab_broken_event) (GtkWidget	     *widget,
                                 GdkEventGrabBroken  *event);

Søren Sandmann's avatar
Søren Sandmann committed
742
  void         (* composited_changed) (GtkWidget *widget);
743

Kristian Rietveld's avatar
Kristian Rietveld committed
744
745
746
747
748
  gboolean     (* query_tooltip)      (GtkWidget  *widget,
				       gint        x,
				       gint        y,
				       gboolean    keyboard_tooltip,
				       GtkTooltip *tooltip);
749
750
751
752
  /* Signals without a C default handler class slot:
   * gboolean	(*damage_event)	(GtkWidget      *widget,
   *                             GdkEventExpose *event);
   */
Kristian Rietveld's avatar
Kristian Rietveld committed
753

Owen Taylor's avatar
Owen Taylor committed
754
  /* Padding for future expansion */
755
756
757
  void (*_gtk_reserved5) (void);
  void (*_gtk_reserved6) (void);
  void (*_gtk_reserved7) (void);
Elliot Lee's avatar
Elliot Lee committed
758
759
760
761
};

struct _GtkWidgetAuxInfo
{
762
763
764
765
  gint x;
  gint y;
  gint width;
  gint height;
766
767
  guint x_set : 1;
  guint y_set : 1;
Elliot Lee's avatar
Elliot Lee committed
768
769
770
771
772
773
774
775
776
};

struct _GtkWidgetShapeInfo
{
  gint16     offset_x;
  gint16     offset_y;
  GdkBitmap *shape_mask;
};

Manish Singh's avatar
Manish Singh committed
777
778
GType	   gtk_widget_get_type		  (void) G_GNUC_CONST;
GtkWidget* gtk_widget_new		  (GType		type,
779
					   const gchar	       *first_property_name,
780
					   ...);
781
782
783
void	   gtk_widget_destroy		  (GtkWidget	       *widget);
void	   gtk_widget_destroyed		  (GtkWidget	       *widget,
					   GtkWidget	      **widget_pointer);
Owen Taylor's avatar
Owen Taylor committed
784
#ifndef GTK_DISABLE_DEPRECATED
785
786
GtkWidget* gtk_widget_ref		  (GtkWidget	       *widget);
void	   gtk_widget_unref		  (GtkWidget	       *widget);
787
void	   gtk_widget_set		  (GtkWidget	       *widget,
788
					   const gchar         *first_property_name,
789
					   ...) G_GNUC_NULL_TERMINATED;
Owen Taylor's avatar
Owen Taylor committed
790
#endif /* GTK_DISABLE_DEPRECATED */
791
792
void	   gtk_widget_unparent		  (GtkWidget	       *widget);
void	   gtk_widget_show		  (GtkWidget	       *widget);
793
void       gtk_widget_show_now            (GtkWidget           *widget);
794
795
796
void	   gtk_widget_hide		  (GtkWidget	       *widget);
void	   gtk_widget_show_all		  (GtkWidget	       *widget);
void	   gtk_widget_hide_all		  (GtkWidget	       *widget);
797
798
799
void       gtk_widget_set_no_show_all     (GtkWidget           *widget,
					   gboolean             no_show_all);
gboolean   gtk_widget_get_no_show_all     (GtkWidget           *widget);
800
801
802
803
void	   gtk_widget_map		  (GtkWidget	       *widget);
void	   gtk_widget_unmap		  (GtkWidget	       *widget);
void	   gtk_widget_realize		  (GtkWidget	       *widget);
void	   gtk_widget_unrealize		  (GtkWidget	       *widget);
804
805

/* Queuing draws */
806
void	   gtk_widget_queue_draw	  (GtkWidget	       *widget);
807
808
809
810
811
void	   gtk_widget_queue_draw_area	  (GtkWidget	       *widget,
					   gint                 x,
					   gint                 y,
					   gint                 width,
					   gint                 height);
812
#ifndef GTK_DISABLE_DEPRECATED
813
814
815
816
817
818
void	   gtk_widget_queue_clear	  (GtkWidget	       *widget);
void	   gtk_widget_queue_clear_area	  (GtkWidget	       *widget,
					   gint                 x,
					   gint                 y,
					   gint                 width,
					   gint                 height);
819
#endif /* GTK_DISABLE_DEPRECATED */
820
821


822
void	   gtk_widget_queue_resize	  (GtkWidget	       *widget);
Soeren Sandmann's avatar
Soeren Sandmann committed
823
void	   gtk_widget_queue_resize_no_redraw (GtkWidget *widget);
824
#ifndef GTK_DISABLE_DEPRECATED
825
void	   gtk_widget_draw		  (GtkWidget	       *widget,
826
					   const GdkRectangle  *area);
827
#endif /* GTK_DISABLE_DEPRECATED */
828
void	   gtk_widget_size_request	  (GtkWidget	       *widget,
Elliot Lee's avatar
Elliot Lee committed
829
					   GtkRequisition      *requisition);
830
void	   gtk_widget_size_allocate	  (GtkWidget	       *widget,
Elliot Lee's avatar
Elliot Lee committed
831
					   GtkAllocation       *allocation);
832
833
void       gtk_widget_get_child_requisition (GtkWidget	       *widget,
					     GtkRequisition    *requisition);
Tim Janik's avatar
Tim Janik committed
834
835
836
837
void	   gtk_widget_add_accelerator	  (GtkWidget           *widget,
					   const gchar         *accel_signal,
					   GtkAccelGroup       *accel_group,
					   guint                accel_key,
838
					   GdkModifierType      accel_mods,
Tim Janik's avatar
Tim Janik committed
839
					   GtkAccelFlags        accel_flags);
840
gboolean   gtk_widget_remove_accelerator  (GtkWidget           *widget,
Tim Janik's avatar
Tim Janik committed
841
842
					   GtkAccelGroup       *accel_group,
					   guint                accel_key,
843
					   GdkModifierType      accel_mods);
844
void       gtk_widget_set_accel_path      (GtkWidget           *widget,
845
846
					   const gchar         *accel_path,
					   GtkAccelGroup       *accel_group);
847
848
const gchar* _gtk_widget_get_accel_path   (GtkWidget           *widget,
					   gboolean	       *locked);
849
GList*     gtk_widget_list_accel_closures (GtkWidget	       *widget);
850
851
gboolean   gtk_widget_can_activate_accel  (GtkWidget           *widget,
                                           guint                signal_id);
852
gboolean   gtk_widget_mnemonic_activate   (GtkWidget           *widget,
853
					   gboolean             group_cycling);
854
gboolean   gtk_widget_event		  (GtkWidget	       *widget,
855
					   GdkEvent	       *event);
856
857
gint       gtk_widget_send_expose         (GtkWidget           *widget,
					   GdkEvent            *event);
858

859
860
861
862
gboolean   gtk_widget_activate		     (GtkWidget	       *widget);
gboolean   gtk_widget_set_scroll_adjustments (GtkWidget        *widget,
					      GtkAdjustment    *hadjustment,
					      GtkAdjustment    *vadjustment);
863
     
864
865
void	   gtk_widget_reparent		  (GtkWidget	       *widget,
					   GtkWidget	       *new_parent);
866
gboolean   gtk_widget_intersect		  (GtkWidget	       *widget,
867
					   const GdkRectangle  *area,
868
					   GdkRectangle	       *intersection);
869
GdkRegion *gtk_widget_region_intersect	  (GtkWidget	       *widget,
870
					   const GdkRegion     *region);
871

Tim Janik's avatar
Tim Janik committed
872
873
874
875
876
void	gtk_widget_freeze_child_notify	  (GtkWidget	       *widget);
void	gtk_widget_child_notify		  (GtkWidget	       *widget,
					   const gchar	       *child_property);
void	gtk_widget_thaw_child_notify	  (GtkWidget	       *widget);

877
878
879
void       gtk_widget_set_can_focus       (GtkWidget           *widget,
                                           gboolean             can_focus);
gboolean   gtk_widget_get_can_focus       (GtkWidget           *widget);
880
gboolean   gtk_widget_has_focus           (GtkWidget           *widget);
881
gboolean   gtk_widget_is_focus            (GtkWidget           *widget);
882
883
884
885
886
887
888
void       gtk_widget_grab_focus          (GtkWidget           *widget);

void       gtk_widget_set_can_default     (GtkWidget           *widget,
                                           gboolean             can_default);
gboolean   gtk_widget_get_can_default     (GtkWidget           *widget);
gboolean   gtk_widget_has_default         (GtkWidget           *widget);
void       gtk_widget_grab_default        (GtkWidget           *widget);
889

890
891
892
893
void      gtk_widget_set_receives_default (GtkWidget           *widget,
                                           gboolean             receives_default);
gboolean  gtk_widget_get_receives_default (GtkWidget           *widget);

894
895
gboolean   gtk_widget_has_grab            (GtkWidget           *widget);

896
897
898
void                  gtk_widget_set_name               (GtkWidget    *widget,
							 const gchar  *name);
G_CONST_RETURN gchar* gtk_widget_get_name               (GtkWidget    *widget);
899

900
901
void                  gtk_widget_set_state              (GtkWidget    *widget,
							 GtkStateType  state);
902
GtkStateType          gtk_widget_get_state              (GtkWidget    *widget);
903

904
905
void                  gtk_widget_set_sensitive          (GtkWidget    *widget,
							 gboolean      sensitive);
906
907
908
gboolean              gtk_widget_get_sensitive          (GtkWidget    *widget);
gboolean              gtk_widget_is_sensitive           (GtkWidget    *widget);

909
910
911
912
void                  gtk_widget_set_visible            (GtkWidget    *widget,
                                                         gboolean      visible);
gboolean              gtk_widget_get_visible            (GtkWidget    *widget);

913
914
915
916
void                  gtk_widget_set_has_window         (GtkWidget    *widget,
                                                         gboolean      has_window);
gboolean              gtk_widget_get_has_window         (GtkWidget    *widget);

917
918
gboolean              gtk_widget_is_toplevel            (GtkWidget    *widget);
gboolean              gtk_widget_is_drawable            (GtkWidget    *widget);
919
920
921
922
923
924
925
void                  gtk_widget_set_realized           (GtkWidget    *widget,
                                                         gboolean      realized);
gboolean              gtk_widget_get_realized           (GtkWidget    *widget);
void                  gtk_widget_set_mapped             (GtkWidget    *widget,
                                                         gboolean      mapped);
gboolean              gtk_widget_get_mapped             (GtkWidget    *widget);

926
927
void                  gtk_widget_set_app_paintable      (GtkWidget    *widget,
							 gboolean      app_paintable);
928
929
gboolean              gtk_widget_get_app_paintable      (GtkWidget    *widget);

930
931
void                  gtk_widget_set_double_buffered    (GtkWidget    *widget,
							 gboolean      double_buffered);
932
933
gboolean              gtk_widget_get_double_buffered    (GtkWidget    *widget);

934
935
void                  gtk_widget_set_redraw_on_allocate (GtkWidget    *widget,
							 gboolean      redraw_on_allocate);
936

937
938
void                  gtk_widget_set_parent             (GtkWidget    *widget,
							 GtkWidget    *parent);
939
GtkWidget           * gtk_widget_get_parent             (GtkWidget    *widget);
940

941
942
void                  gtk_widget_set_parent_window      (GtkWidget    *widget,
							 GdkWindow    *parent_window);
943
GdkWindow           * gtk_widget_get_parent_window      (GtkWidget    *widget);
944

945
946
947
void                  gtk_widget_set_child_visible      (GtkWidget    *widget,
							 gboolean      is_visible);
gboolean              gtk_widget_get_child_visible      (GtkWidget    *widget);
Michael Natterer's avatar
Michael Natterer committed
948
949
950
951

void                  gtk_widget_set_window             (GtkWidget    *widget,
                                                         GdkWindow    *window);
GdkWindow           * gtk_widget_get_window             (GtkWidget    *widget);
952

953
954
void                  gtk_widget_get_allocation         (GtkWidget     *widget,
                                                         GtkAllocation *allocation);
955
956
void                  gtk_widget_set_allocation         (GtkWidget     *widget,
                                                         const GtkAllocation *allocation);
957

958
959
gboolean   gtk_widget_child_focus         (GtkWidget           *widget,
                                           GtkDirectionType     direction);
960
961
962
gboolean   gtk_widget_keynav_failed       (GtkWidget           *widget,
                                           GtkDirectionType     direction);
void       gtk_widget_error_bell          (GtkWidget           *widget);
Havoc Pennington's avatar
Havoc Pennington committed
963
964
965
966
967
968
969
970

void       gtk_widget_set_size_request    (GtkWidget           *widget,
                                           gint                 width,
                                           gint                 height);
void       gtk_widget_get_size_request    (GtkWidget           *widget,
                                           gint                *width,
                                           gint                *height);
#ifndef GTK_DISABLE_DEPRECATED
971
972
973
974
975
976
void	   gtk_widget_set_uposition	  (GtkWidget	       *widget,
					   gint			x,
					   gint			y);
void	   gtk_widget_set_usize		  (GtkWidget	       *widget,
					   gint			width,
					   gint			height);
Havoc Pennington's avatar
Havoc Pennington committed
977
978
#endif

979
980
void	   gtk_widget_set_events	  (GtkWidget	       *widget,
					   gint			events);
981
982
void       gtk_widget_add_events          (GtkWidget           *widget,
					   gint	                events);
983
984
void	   gtk_widget_set_extension_events (GtkWidget		*widget,
					    GdkExtensionMode	mode);
Elliot Lee's avatar
Elliot Lee committed
985

986
987
988
GdkExtensionMode gtk_widget_get_extension_events (GtkWidget	*widget);
GtkWidget*   gtk_widget_get_toplevel	(GtkWidget	*widget);
GtkWidget*   gtk_widget_get_ancestor	(GtkWidget	*widget,
Manish Singh's avatar
Manish Singh committed
989
					 GType		 widget_type);
990
991
GdkColormap* gtk_widget_get_colormap	(GtkWidget	*widget);
GdkVisual*   gtk_widget_get_visual	(GtkWidget	*widget);
992

993
994
995
996
997
998
999
GdkScreen *   gtk_widget_get_screen      (GtkWidget *widget);
gboolean      gtk_widget_has_screen      (GtkWidget *widget);
GdkDisplay *  gtk_widget_get_display     (GtkWidget *widget);
GdkWindow *   gtk_widget_get_root_window (GtkWidget *widget);
GtkSettings*  gtk_widget_get_settings    (GtkWidget *widget);
GtkClipboard *gtk_widget_get_clipboard   (GtkWidget *widget,
					  GdkAtom    selection);
1000
1001
GdkPixmap *   gtk_widget_get_snapshot    (GtkWidget    *widget,
                                          GdkRectangle *clip_rect);
1002

1003
#ifndef GTK_DISABLE_DEPRECATED
1004
1005
1006
1007
1008
1009
1010
1011

/**
 * gtk_widget_set_visual:
 * @widget: a #GtkWidget
 * @visual: a visual
 *
 * This function is deprecated; it does nothing.
 */
1012
#define gtk_widget_set_visual(widget,visual)  ((void) 0)
1013
1014
1015
1016
1017
1018
1019

/**
 * gtk_widget_push_visual:
 * @visual: a visual
 *
 * This function is deprecated; it does nothing.
 */
1020
#define gtk_widget_push_visual(visual)        ((void) 0)
1021
1022
1023
1024
1025
1026

/**
 * gtk_widget_pop_visual:
 *
 * This function is deprecated; it does nothing.
 */
1027
#define gtk_widget_pop_visual()               ((void) 0)
1028
1029
1030
1031
1032
1033
1034

/**
 * gtk_widget_set_default_visual:
 * @visual: a visual
 *
 * This function is deprecated; it does nothing.
 */
1035
#define gtk_widget_set_default_visual(visual) ((void) 0)
1036

1037
#endif /* GTK_DISABLE_DEPRECATED */
1038
1039
1040
1041

/* Accessibility support */
AtkObject*       gtk_widget_get_accessible               (GtkWidget          *widget);

1042
1043
1044
1045
1046
1047
1048
1049
1050
/* The following functions must not be called on an already
 * realized widget. Because it is possible that somebody
 * can call get_colormap() or get_visual() and save the
 * result, these functions are probably only safe to
 * call in a widget's init() function.
 */
void         gtk_widget_set_colormap    (GtkWidget      *widget,
					 GdkColormap    *colormap);

1051
1052
1053
1054
1055
gint	     gtk_widget_get_events	(GtkWidget	*widget);
void	     gtk_widget_get_pointer	(GtkWidget	*widget,
					 gint		*x,
					 gint		*y);

1056
gboolean     gtk_widget_is_ancestor	(GtkWidget	*widget,
1057
1058
					 GtkWidget	*ancestor);

1059
1060
1061
1062
1063
1064
1065
gboolean     gtk_widget_translate_coordinates (GtkWidget  *src_widget,
					       GtkWidget  *dest_widget,
					       gint        src_x,
					       gint        src_y,
					       gint       *dest_x,
					       gint       *dest_y);

1066
1067
/* Hide widget and return TRUE.
 */
1068
gboolean     gtk_widget_hide_on_delete	(GtkWidget	*widget);
1069

1070
1071
/* Widget styles.
 */
1072
1073
1074
1075
1076
1077
1078
void        gtk_widget_style_attach       (GtkWidget            *style);

gboolean    gtk_widget_has_rc_style       (GtkWidget            *widget);
void	    gtk_widget_set_style          (GtkWidget            *widget,
                                           GtkStyle             *style);
void        gtk_widget_ensure_style       (GtkWidget            *widget);
GtkStyle *  gtk_widget_get_style          (GtkWidget            *widget);
1079

1080
1081
1082
1083
1084
void        gtk_widget_modify_style       (GtkWidget            *widget,
					   GtkRcStyle           *style);
GtkRcStyle *gtk_widget_get_modifier_style (GtkWidget            *widget);
void        gtk_widget_modify_fg          (GtkWidget            *widget,
					   GtkStateType          state,
1085
					   const GdkColor       *color);
1086
1087
void        gtk_widget_modify_bg          (GtkWidget            *widget,
					   GtkStateType          state,
1088
					   const GdkColor       *color);
1089
1090
void        gtk_widget_modify_text        (GtkWidget            *widget,
					   GtkStateType          state,
1091
					   const GdkColor       *color);
1092
1093
void        gtk_widget_modify_base        (GtkWidget            *widget,
					   GtkStateType          state,
1094
					   const GdkColor       *color);
1095
1096
1097
void        gtk_widget_modify_cursor      (GtkWidget            *widget,
					   const GdkColor       *primary,
					   const GdkColor       *secondary);
1098
1099
void        gtk_widget_modify_font        (GtkWidget            *widget,
					   PangoFontDescription *font_desc);
1100

1101
#ifndef GTK_DISABLE_DEPRECATED
1102
1103
1104
1105
1106
1107
1108

/**
 * gtk_widget_set_rc_style:
 * @widget: a #GtkWidget.
 *
 * Equivalent to <literal>gtk_widget_set_style (widget, NULL)</literal>.
 *
1109
 * Deprecated: 2.0: Use gtk_widget_set_style() with a %NULL @style argument instead.
1110
 */
1111
#define gtk_widget_set_rc_style(widget)          (gtk_widget_set_style (widget, NULL))
1112
1113
1114
1115
1116
1117
1118

/**
 * gtk_widget_restore_default_style:
 * @widget: a #GtkWidget.
 *
 * Equivalent to <literal>gtk_widget_set_style (widget, NULL)</literal>.
 *
1119
 * Deprecated: 2.0: Use gtk_widget_set_style() with a %NULL @style argument instead.
1120
 */
1121
1122
1123
#define gtk_widget_restore_default_style(widget) (gtk_widget_set_style (widget, NULL))
#endif

1124
1125
1126
1127
PangoContext *gtk_widget_create_pango_context (GtkWidget   *widget);
PangoContext *gtk_widget_get_pango_context    (GtkWidget   *widget);
PangoLayout  *gtk_widget_create_pango_layout  (GtkWidget   *widget,
					       const gchar *text);
1128

1129
1130
GdkPixbuf    *gtk_widget_render_icon          (GtkWidget   *widget,
                                               const gchar *stock_id,
1131
                                               GtkIconSize  size,
1132
                                               const gchar *detail);