gtkwidget.h 47.9 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);
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 768
  guint x_set : 1;
  guint y_set : 1;
769 770

  GtkRequisition natural_size;
Elliot Lee's avatar
Elliot Lee committed
771 772 773 774 775 776 777 778 779
};

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

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

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


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

865 866 867 868
gboolean   gtk_widget_activate		     (GtkWidget	       *widget);
gboolean   gtk_widget_set_scroll_adjustments (GtkWidget        *widget,
					      GtkAdjustment    *hadjustment,
					      GtkAdjustment    *vadjustment);
869
     
870 871
void	   gtk_widget_reparent		  (GtkWidget	       *widget,
					   GtkWidget	       *new_parent);
872
gboolean   gtk_widget_intersect		  (GtkWidget	       *widget,
873
					   const GdkRectangle  *area,
874
					   GdkRectangle	       *intersection);
875
GdkRegion *gtk_widget_region_intersect	  (GtkWidget	       *widget,
876
					   const GdkRegion     *region);
877

Tim Janik's avatar
Tim Janik committed
878 879 880 881 882
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);

883 884 885
void       gtk_widget_set_can_focus       (GtkWidget           *widget,
                                           gboolean             can_focus);
gboolean   gtk_widget_get_can_focus       (GtkWidget           *widget);
886
gboolean   gtk_widget_has_focus           (GtkWidget           *widget);
887
gboolean   gtk_widget_is_focus            (GtkWidget           *widget);
888 889 890 891 892 893 894
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);
895

896 897 898 899
void      gtk_widget_set_receives_default (GtkWidget           *widget,
                                           gboolean             receives_default);
gboolean  gtk_widget_get_receives_default (GtkWidget           *widget);

900 901
gboolean   gtk_widget_has_grab            (GtkWidget           *widget);

902 903 904
void                  gtk_widget_set_name               (GtkWidget    *widget,
							 const gchar  *name);
G_CONST_RETURN gchar* gtk_widget_get_name               (GtkWidget    *widget);
905

906 907
void                  gtk_widget_set_state              (GtkWidget    *widget,
							 GtkStateType  state);
908
GtkStateType          gtk_widget_get_state              (GtkWidget    *widget);
909

910 911
void                  gtk_widget_set_sensitive          (GtkWidget    *widget,
							 gboolean      sensitive);
912 913 914
gboolean              gtk_widget_get_sensitive          (GtkWidget    *widget);
gboolean              gtk_widget_is_sensitive           (GtkWidget    *widget);

915 916 917 918
void                  gtk_widget_set_visible            (GtkWidget    *widget,
                                                         gboolean      visible);
gboolean              gtk_widget_get_visible            (GtkWidget    *widget);

919 920 921 922
void                  gtk_widget_set_has_window         (GtkWidget    *widget,
                                                         gboolean      has_window);
gboolean              gtk_widget_get_has_window         (GtkWidget    *widget);

923 924
gboolean              gtk_widget_is_toplevel            (GtkWidget    *widget);
gboolean              gtk_widget_is_drawable            (GtkWidget    *widget);
925 926 927 928 929 930 931
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);

932 933
void                  gtk_widget_set_app_paintable      (GtkWidget    *widget,
							 gboolean      app_paintable);
934 935
gboolean              gtk_widget_get_app_paintable      (GtkWidget    *widget);

936 937
void                  gtk_widget_set_double_buffered    (GtkWidget    *widget,
							 gboolean      double_buffered);
938 939
gboolean              gtk_widget_get_double_buffered    (GtkWidget    *widget);

940 941
void                  gtk_widget_set_redraw_on_allocate (GtkWidget    *widget,
							 gboolean      redraw_on_allocate);
942

943 944
void                  gtk_widget_set_parent             (GtkWidget    *widget,
							 GtkWidget    *parent);
945
GtkWidget           * gtk_widget_get_parent             (GtkWidget    *widget);
946

947 948
void                  gtk_widget_set_parent_window      (GtkWidget    *widget,
							 GdkWindow    *parent_window);
949
GdkWindow           * gtk_widget_get_parent_window      (GtkWidget    *widget);
950

951 952 953
void                  gtk_widget_set_child_visible      (GtkWidget    *widget,
							 gboolean      is_visible);
gboolean              gtk_widget_get_child_visible      (GtkWidget    *widget);
954 955 956 957

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

959 960
void                  gtk_widget_get_allocation         (GtkWidget     *widget,
                                                         GtkAllocation *allocation);
961 962
void                  gtk_widget_set_allocation         (GtkWidget     *widget,
                                                         const GtkAllocation *allocation);
963

964 965 966
void                  gtk_widget_get_requisition        (GtkWidget     *widget,
                                                         GtkRequisition *requisition);

967 968
gboolean   gtk_widget_child_focus         (GtkWidget           *widget,
                                           GtkDirectionType     direction);
969 970 971
gboolean   gtk_widget_keynav_failed       (GtkWidget           *widget,
                                           GtkDirectionType     direction);
void       gtk_widget_error_bell          (GtkWidget           *widget);
Havoc Pennington's avatar
Havoc Pennington committed
972 973 974 975 976 977 978 979

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
980 981 982 983 984 985
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
986 987
#endif

988 989
void	   gtk_widget_set_events	  (GtkWidget	       *widget,
					   gint			events);
990 991
void       gtk_widget_add_events          (GtkWidget           *widget,
					   gint	                events);
992 993
void	   gtk_widget_set_extension_events (GtkWidget		*widget,
					    GdkExtensionMode	mode);
Elliot Lee's avatar
Elliot Lee committed
994

995 996 997
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
998
					 GType		 widget_type);
999 1000
GdkColormap* gtk_widget_get_colormap	(GtkWidget	*widget);
GdkVisual*   gtk_widget_get_visual	(GtkWidget	*widget);
1001

1002 1003 1004 1005 1006 1007 1008
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);
1009 1010
GdkPixmap *   gtk_widget_get_snapshot    (GtkWidget    *widget,
                                          GdkRectangle *clip_rect);
1011

1012
#ifndef GTK_DISABLE_DEPRECATED
1013 1014 1015 1016 1017 1018 1019 1020

/**
 * gtk_widget_set_visual:
 * @widget: a #GtkWidget
 * @visual: a visual
 *
 * This function is deprecated; it does nothing.
 */
1021
#define gtk_widget_set_visual(widget,visual)  ((void) 0)
1022 1023 1024 1025 1026 1027 1028

/**
 * gtk_widget_push_visual:
 * @visual: a visual
 *
 * This function is deprecated; it does nothing.
 */
1029
#define gtk_widget_push_visual(visual)        ((void) 0)
1030 1031 1032 1033 1034 1035

/**
 * gtk_widget_pop_visual:
 *
 * This function is deprecated; it does nothing.
 */
1036
#define gtk_widget_pop_visual()               ((void) 0)
1037 1038 1039 1040 1041 1042 1043

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

1046
#endif /* GTK_DISABLE_DEPRECATED */
1047 1048 1049 1050

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

1051 1052 1053 1054 1055 1056 1057 1058 1059
/* 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);

1060 1061 1062 1063 1064
gint	     gtk_widget_get_events	(GtkWidget	*widget);
void	     gtk_widget_get_pointer	(GtkWidget	*widget,
					 gint		*x,
					 gint		*y);

1065
gboolean     gtk_widget_is_ancestor	(GtkWidget	*widget,
1066 1067
					 GtkWidget	*ancestor);

1068 1069 1070 1071 1072 1073 1074
gboolean     gtk_widget_translate_coordinates (GtkWidget  *src_widget,
					       GtkWidget  *dest_widget,
					       gint        src_x,
					       gint        src_y,
					       gint       *dest_x,
					       gint       *dest_y);

1075 1076
/* Hide widget and return TRUE.
 */
1077
gboolean     gtk_widget_hide_on_delete	(GtkWidget	*widget);
1078

1079 1080
/* Widget styles.
 */
1081 1082 1083 1084 1085 1086 1087
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);
1088

1089 1090 1091 1092 1093
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,
1094
					   const GdkColor       *color);
1095 1096
void        gtk_widget_modify_bg          (GtkWidget            *widget,
					   GtkStateType          state,
1097
					   const GdkColor       *color);
1098 1099
void        gtk_widget_modify_text        (GtkWidget            *widget,
					   GtkStateType          state,
1100
					   const GdkColor       *color);
1101 1102
void        gtk_widget_modify_base        (GtkWidget            *widget,
					   GtkStateType          state,
1103
					   const GdkColor       *color);
1104 1105 1106
void        gtk_widget_modify_cursor      (GtkWidget            *widget,
					   const GdkColor       *primary,
					   const GdkColor       *secondary);
1107 1108
void        gtk_widget_modify_font        (GtkWidget            *widget,
					   PangoFontDescription *font_desc);
1109

1110
#ifndef GTK_DISABLE_DEPRECATED
1111 1112 1113 1114 1115 1116 1117

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

/**
 * gtk_widget_restore_default_style:
 * @widget: a #GtkWidget.
 *
 * Equivalent to <literal>gtk_widget_set_style (widget, NULL)</literal>.
 *
1128
 * Deprecated: 2.0: Use gtk_widget_set_style() with a %NULL @style argument instead.
1129
 */
1130 1131 1132
#define gtk_widget_restore_default_style(widget) (gtk_widget_set_style (widget, NULL))
#endif

1133 1134 1135 1136
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);
1137

1138 1139
GdkPixbuf    *gtk_widget_render_icon          (GtkWidget   *widget,
                                               const gchar *stock_id,
1140
                                               GtkIconSize  size,
1141
                                               const gchar *detail);
1142

1143 1144 1145 1146
/* handle composite names for GTK_COMPOSITE_CHILD widgets,
 * the returned name is newly allocated.
 */
void   gtk_widget_set_composite_name	(GtkWidget	*widget,
Owen Taylor's avatar
Owen Taylor committed
1147
					 const gchar   	*name);
1148 1149
gchar* gtk_widget_get_composite_name	(GtkWidget	*widget);
     
1150 1151 1152
/* Descend recursively and set rc-style on all widgets without user styles */
void       gtk_widget_reset_rc_styles   (GtkWidget      *widget);

1153 1154 1155 1156
/* Push/pop pairs, to change default values upon a widget's creation.
 * This will override the values that got set by the
 * gtk_widget_set_default_* () functions.
 */
1157 1158 1159 1160
void	     gtk_widget_push_colormap	     (GdkColormap *cmap);
void	     gtk_widget_push_composite_child (void);
void	     gtk_widget_pop_composite_child  (void);
void	     gtk_widget_pop_colormap	     (void);
Elliot Lee's avatar
Elliot Lee committed
1161

1162 1163
/* widget style properties
 */
Tim Janik's avatar
Tim Janik committed
1164
void gtk_widget_class_install_style_property        (GtkWidgetClass     *klass,
1165
						     GParamSpec         *pspec);
Tim Janik's avatar
Tim Janik committed
1166
void gtk_widget_class_install_style_property_parser (GtkWidgetClass     *klass,
1167 1168
						     GParamSpec         *pspec,
						     GtkRcPropertyParser parser);
1169 1170 1171 1172
GParamSpec*  gtk_widget_class_find_style_property   (GtkWidgetClass     *klass,
						     const gchar        *property_name);
GParamSpec** gtk_widget_class_list_style_properties (GtkWidgetClass     *klass,
						     guint              *n_properties);
1173 1174 1175 1176 1177 1178 1179 1180
void gtk_widget_style_get_property (GtkWidget	     *widget,
				    const gchar    *property_name,
				    GValue	     *value);
void gtk_widget_style_get_valist   (GtkWidget	     *widget,
				    const gchar    *first_property_name,
				    va_list         var_args);
void gtk_widget_style_get          (GtkWidget	     *widget,
				    const gchar    *first_property_name,
1181
				    ...) G_GNUC_NULL_TERMINATED;
1182 1183


1184 1185
/* Set certain default values to be used at widget creation time.
 */
1186
void	     gtk_widget_set_default_colormap (GdkColormap *colormap);
1187
GtkStyle*    gtk_widget_get_default_style    (void);
1188
#ifndef GDK_MULTIHEAD_SAFE
Elliot Lee's avatar
Elliot Lee committed
1189 1190
GdkColormap* gtk_widget_get_default_colormap (void);
GdkVisual*   gtk_widget_get_default_visual   (void);
1191
#endif
Elliot Lee's avatar
Elliot Lee committed
1192