gtkwidget.h 48.7 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
#ifndef GTK_DISABLE_DEPRECATED
209 210 211 212 213
/**
 * GTK_WIDGET_NO_WINDOW:
 * @wid: a #GtkWidget.
 *
 * Evaluates to %TRUE if the widget doesn't have an own #GdkWindow.
214 215
 *
 * Deprecated: 2.20: Use gtk_widget_get_has_window() instead.
216
 */
217
#define GTK_WIDGET_NO_WINDOW(wid)	  ((GTK_WIDGET_FLAGS (wid) & GTK_NO_WINDOW) != 0)
218
#endif
219

220
#ifndef GTK_DISABLE_DEPRECATED
221 222 223 224 225
/**
 * GTK_WIDGET_REALIZED:
 * @wid: a #GtkWidget.
 *
 * Evaluates to %TRUE if the widget is realized.
226 227
 *
 * Deprecated: 2.20: Use gtk_widget_get_realized() instead.
228
 */
229
#define GTK_WIDGET_REALIZED(wid)	  ((GTK_WIDGET_FLAGS (wid) & GTK_REALIZED) != 0)
230
#endif
231

232
#ifndef GTK_DISABLE_DEPRECATED
233 234 235 236 237
/**
 * GTK_WIDGET_MAPPED:
 * @wid: a #GtkWidget.
 *
 * Evaluates to %TRUE if the widget is mapped.
238 239
 *
 * Deprecated: 2.20: Use gtk_widget_get_mapped() instead.
240
 */
241
#define GTK_WIDGET_MAPPED(wid)		  ((GTK_WIDGET_FLAGS (wid) & GTK_MAPPED) != 0)
242
#endif
243

244
#ifndef GTK_DISABLE_DEPRECATED
245 246 247 248 249
/**
 * GTK_WIDGET_VISIBLE:
 * @wid: a #GtkWidget.
 *
 * Evaluates to %TRUE if the widget is visible.
250 251
 *
 * Deprecated: 2.20: Use gtk_widget_get_visible() instead.
252
 */
253
#define GTK_WIDGET_VISIBLE(wid)		  ((GTK_WIDGET_FLAGS (wid) & GTK_VISIBLE) != 0)
254
#endif
255

256
#ifndef GTK_DISABLE_DEPRECATED
257 258 259 260 261
/**
 * GTK_WIDGET_DRAWABLE:
 * @wid: a #GtkWidget.
 *
 * Evaluates to %TRUE if the widget is mapped and visible.
262 263
 *
 * Deprecated: 2.20: Use gtk_widget_is_drawable() instead.
264
 */
265
#define GTK_WIDGET_DRAWABLE(wid)	  (GTK_WIDGET_VISIBLE (wid) && GTK_WIDGET_MAPPED (wid))
266
#endif
267

268
#ifndef GTK_DISABLE_DEPRECATED
269 270 271 272 273
/**
 * GTK_WIDGET_SENSITIVE:
 * @wid: a #GtkWidget.
 *
 * Evaluates to %TRUE if the #GTK_SENSITIVE flag has be set on the widget.
274 275
 *
 * Deprecated: 2.20: Use gtk_widget_get_sensitive() instead.
276
 */
277
#define GTK_WIDGET_SENSITIVE(wid)	  ((GTK_WIDGET_FLAGS (wid) & GTK_SENSITIVE) != 0)
278
#endif
279

280
#ifndef GTK_DISABLE_DEPRECATED
281 282 283 284 285
/**
 * GTK_WIDGET_PARENT_SENSITIVE:
 * @wid: a #GtkWidget.
 *
 * Evaluates to %TRUE if the #GTK_PARENT_SENSITIVE flag has be set on the widget.
286 287
 *
 * Deprecated: 2.20: Use gtk_widget_get_sensitive() on the parent widget instead.
288
 */
289
#define GTK_WIDGET_PARENT_SENSITIVE(wid)  ((GTK_WIDGET_FLAGS (wid) & GTK_PARENT_SENSITIVE) != 0)
290
#endif
291

292
#ifndef GTK_DISABLE_DEPRECATED
293 294 295 296 297
/**
 * GTK_WIDGET_IS_SENSITIVE:
 * @wid: a #GtkWidget.
 *
 * Evaluates to %TRUE if the widget is effectively sensitive.
298 299
 *
 * Deprecated: 2.20: Use gtk_widget_is_sensitive() instead.
300
 */
301 302
#define GTK_WIDGET_IS_SENSITIVE(wid)	  (GTK_WIDGET_SENSITIVE (wid) && \
					   GTK_WIDGET_PARENT_SENSITIVE (wid))
303
#endif
304 305

#ifndef GTK_DISABLE_DEPRECATED
306 307 308 309 310
/**
 * GTK_WIDGET_CAN_FOCUS:
 * @wid: a #GtkWidget.
 *
 * Evaluates to %TRUE if the widget is able to handle focus grabs.
311 312
 *
 * Deprecated: 2.20: Use gtk_widget_get_can_focus() instead.
313
 */
314
#define GTK_WIDGET_CAN_FOCUS(wid)	  ((GTK_WIDGET_FLAGS (wid) & GTK_CAN_FOCUS) != 0)
315
#endif
316

317
#ifndef GTK_DISABLE_DEPRECATED
318 319 320 321 322 323
/**
 * 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.
324 325
 *
 * Deprecated: 2.20: Use gtk_widget_has_focus() instead.
326
 */
327
#define GTK_WIDGET_HAS_FOCUS(wid)	  ((GTK_WIDGET_FLAGS (wid) & GTK_HAS_FOCUS) != 0)
328
#endif
329

Javier Jardón's avatar
Javier Jardón committed
330
#ifndef GTK_DISABLE_DEPRECATED
331 332 333 334 335 336
/**
 * 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
337 338
 *
 * Deprecated: 2.20: Use gtk_widget_get_can_default() instead.
339
 */
340
#define GTK_WIDGET_CAN_DEFAULT(wid)	  ((GTK_WIDGET_FLAGS (wid) & GTK_CAN_DEFAULT) != 0)
Javier Jardón's avatar
Javier Jardón committed
341
#endif
342

Javier Jardón's avatar
Javier Jardón committed
343
#ifndef GTK_DISABLE_DEPRECATED
344 345 346 347 348
/**
 * 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
349 350
 *
 * Deprecated: 2.20: Use gtk_widget_has_default() instead.
351
 */
352
#define GTK_WIDGET_HAS_DEFAULT(wid)	  ((GTK_WIDGET_FLAGS (wid) & GTK_HAS_DEFAULT) != 0)
Javier Jardón's avatar
Javier Jardón committed
353
#endif
354

Javier Jardón's avatar
Javier Jardón committed
355
#ifndef GTK_DISABLE_DEPRECATED
356 357 358 359 360 361
/**
 * 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
362 363
 *
 * Deprecated: 2.20: Use gtk_widget_has_grab() instead.
364
 */
365
#define GTK_WIDGET_HAS_GRAB(wid)	  ((GTK_WIDGET_FLAGS (wid) & GTK_HAS_GRAB) != 0)
Javier Jardón's avatar
Javier Jardón committed
366
#endif
367

368
#ifndef GTK_DISABLE_DEPRECATED
369 370 371 372 373 374
/**
 * GTK_WIDGET_RC_STYLE:
 * @wid: a #GtkWidget.
 *
 * Evaluates to %TRUE if the widget's style has been looked up through the rc
 * mechanism.
375 376
 *
 * Deprecated: 2.20: Use gtk_widget_has_rc_style() instead.
377
 */
378
#define GTK_WIDGET_RC_STYLE(wid)	  ((GTK_WIDGET_FLAGS (wid) & GTK_RC_STYLE) != 0)
379 380
#endif

381
#ifndef GTK_DISABLE_DEPRECATED
382 383 384 385 386
/**
 * GTK_WIDGET_COMPOSITE_CHILD:
 * @wid: a #GtkWidget.
 *
 * Evaluates to %TRUE if the widget is a composite child of its parent.
387
 *
388
 * Deprecated: 2.20: Use the #GtkWidget:composite-child property instead.
389
 */
390
#define GTK_WIDGET_COMPOSITE_CHILD(wid)	  ((GTK_WIDGET_FLAGS (wid) & GTK_COMPOSITE_CHILD) != 0)
391
#endif
392

Javier Jardón's avatar
Javier Jardón committed
393
#ifndef GTK_DISABLE_DEPRECATED
394 395 396 397 398
/**
 * 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
399 400
 *
 * Deprecated: 2.20: Use gtk_widget_get_app_paintable() instead.
401
 */
402
#define GTK_WIDGET_APP_PAINTABLE(wid)	  ((GTK_WIDGET_FLAGS (wid) & GTK_APP_PAINTABLE) != 0)
Javier Jardón's avatar
Javier Jardón committed
403
#endif
404

Javier Jardón's avatar
Javier Jardón committed
405
#ifndef GTK_DISABLE_DEPRECATED
406 407 408 409 410 411
/**
 * 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
412 413
 *
 * Deprecated: 2.20: Use gtk_widget_get_receives_default() instead.
414
 */
415
#define GTK_WIDGET_RECEIVES_DEFAULT(wid)  ((GTK_WIDGET_FLAGS (wid) & GTK_RECEIVES_DEFAULT) != 0)
Javier Jardón's avatar
Javier Jardón committed
416
#endif
417

Javier Jardón's avatar
Javier Jardón committed
418
#ifndef GTK_DISABLE_DEPRECATED
419 420 421 422 423
/**
 * 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
424 425
 *
 * Deprecated: 2.20: Use gtk_widget_get_double_buffered() instead.
426
 */
427
#define GTK_WIDGET_DOUBLE_BUFFERED(wid)	  ((GTK_WIDGET_FLAGS (wid) & GTK_DOUBLE_BUFFERED) != 0)
Javier Jardón's avatar
Javier Jardón committed
428
#endif
429 430


431
/* Macros for setting and clearing widget flags.
Elliot Lee's avatar
Elliot Lee committed
432
 */
433 434 435 436 437 438 439
/**
 * GTK_WIDGET_SET_FLAGS:
 * @wid: a #GtkWidget.
 * @flag: the flags to set.
 *
 * Turns on certain widget flags.
 */
440
#define GTK_WIDGET_SET_FLAGS(wid,flag)	  G_STMT_START{ (GTK_WIDGET_FLAGS (wid) |= (flag)); }G_STMT_END
441 442 443 444 445 446 447 448

/**
 * GTK_WIDGET_UNSET_FLAGS:
 * @wid: a #GtkWidget.
 * @flag: the flags to unset.
 *
 * Turns off certain widget flags.
 */
449
#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
450

451
#define GTK_TYPE_REQUISITION              (gtk_requisition_get_type ())
452 453 454 455 456 457 458 459

/* 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;
460
typedef struct _GtkClipboard	   GtkClipboard;
Kristian Rietveld's avatar
Kristian Rietveld committed
461 462
typedef struct _GtkTooltip         GtkTooltip;
typedef struct _GtkWindow          GtkWindow;
Elliot Lee's avatar
Elliot Lee committed
463

464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494
/**
 * 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
495 496 497
 */
struct _GtkRequisition
{
498 499
  gint width;
  gint height;
Elliot Lee's avatar
Elliot Lee committed
500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515
};

/* 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;
516
  
517 518 519 520 521
  /* 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
522
  guint16 GSEAL (private_flags);
523
  
Elliot Lee's avatar
Elliot Lee committed
524 525 526
  /* The state of the widget. There are actually only
   *  5 widget states (defined in "gtkenums.h").
   */
Tim Janik's avatar
Tim Janik committed
527
  guint8 GSEAL (state);
528
  
529
  /* The saved state of the widget. When a widget's state
530 531 532 533
   *  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
534
   */
Tim Janik's avatar
Tim Janik committed
535
  guint8 GSEAL (saved_state);
536
  
537
  /* The widget's name. If the widget does not have a name
Elliot Lee's avatar
Elliot Lee committed
538
   *  (the name is NULL), then its name (as returned by
539
   *  "gtk_widget_get_name") is its class's name.
540 541
   * Among other things, the widget name is used to determine
   *  the style to use for a widget.
Elliot Lee's avatar
Elliot Lee committed
542
   */
Tim Janik's avatar
Tim Janik committed
543
  gchar *GSEAL (name);
544
  
545 546
  /*< public >*/

Elliot Lee's avatar
Elliot Lee committed
547 548 549 550 551
  /* 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
552
  GtkStyle *GSEAL (style);
553
  
554
  /* The widget's desired size.
Elliot Lee's avatar
Elliot Lee committed
555
   */
Tim Janik's avatar
Tim Janik committed
556
  GtkRequisition GSEAL (requisition);
557
  
558
  /* The widget's allocated size.
Elliot Lee's avatar
Elliot Lee committed
559
   */
Tim Janik's avatar
Tim Janik committed
560
  GtkAllocation GSEAL (allocation);
561
  
562
  /* The widget's window or its parent window if it does
Elliot Lee's avatar
Elliot Lee committed
563 564 565
   *  not have a window. (Which will be indicated by the
   *  GTK_NO_WINDOW flag being set).
   */
Tim Janik's avatar
Tim Janik committed
566
  GdkWindow *GSEAL (window);
567
  
568
  /* The widget's parent.
Elliot Lee's avatar
Elliot Lee committed
569
   */
Tim Janik's avatar
Tim Janik committed
570
  GtkWidget *GSEAL (parent);
Elliot Lee's avatar
Elliot Lee committed
571 572
};

573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590
/**
 * 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
591 592 593 594 595 596 597 598 599
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
600 601

  /*< public >*/
602
  
603
  guint activate_signal;
604

605
  guint set_scroll_adjustments_signal;
606

Soren Sandmann's avatar
Soren Sandmann committed
607 608
  /*< private >*/
  
Tim Janik's avatar
Tim Janik committed
609 610 611 612 613
  /* seldomly overidden */
  void (*dispatch_child_properties_changed) (GtkWidget   *widget,
					     guint        n_pspecs,
					     GParamSpec **pspecs);

Elliot Lee's avatar
Elliot Lee committed
614
  /* basics */
615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630
  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);
631 632
  void (* hierarchy_changed)   (GtkWidget        *widget,
				GtkWidget        *previous_toplevel);
633 634 635 636
  void (* style_set)	       (GtkWidget        *widget,
				GtkStyle         *previous_style);
  void (* direction_changed)   (GtkWidget        *widget,
				GtkTextDirection  previous_direction);
637 638
  void (* grab_notify)         (GtkWidget        *widget,
				gboolean          was_grabbed);
Tim Janik's avatar
Tim Janik committed
639 640
  void (* child_notify)        (GtkWidget	 *widget,
				GParamSpec       *pspec);
641
  
642
  /* Mnemonics */
643
  gboolean (* mnemonic_activate) (GtkWidget    *widget,
644 645
				  gboolean      group_cycling);
  
646
  /* explicit focus */
Tim Janik's avatar
Tim Janik committed
647
  void     (* grab_focus)      (GtkWidget        *widget);
648 649
  gboolean (* focus)           (GtkWidget        *widget,
                                GtkDirectionType  direction);
650
  
Elliot Lee's avatar
Elliot Lee committed
651
  /* events */
652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705
  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
706
  
Elliot Lee's avatar
Elliot Lee committed
707
  /* selection */
708 709 710
  void (* selection_get)           (GtkWidget          *widget,
				    GtkSelectionData   *selection_data,
				    guint               info,
711
				    guint               time_);
712
  void (* selection_received)      (GtkWidget          *widget,
713
				    GtkSelectionData   *selection_data,
714
				    guint               time_);
715 716 717 718 719 720 721 722 723 724

  /* 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,
725
				    guint               time_);
726 727 728 729 730 731
  void (* drag_data_delete)        (GtkWidget	       *widget,
				    GdkDragContext     *context);

  /* Target side drag signals */
  void (* drag_leave)	           (GtkWidget	       *widget,
				    GdkDragContext     *context,
732
				    guint               time_);
733 734 735 736
  gboolean (* drag_motion)         (GtkWidget	       *widget,
				    GdkDragContext     *context,
				    gint                x,
				    gint                y,
737
				    guint               time_);
738 739 740 741
  gboolean (* drag_drop)           (GtkWidget	       *widget,
				    GdkDragContext     *context,
				    gint                x,
				    gint                y,
742
				    guint               time_);
743 744
  void (* drag_data_received)      (GtkWidget          *widget,
				    GdkDragContext     *context,
745 746
				    gint                x,
				    gint                y,
747 748
				    GtkSelectionData   *selection_data,
				    guint               info,
749
				    guint               time_);
Owen Taylor's avatar
Owen Taylor committed
750 751

  /* Signals used only for keybindings */
752
  gboolean (* popup_menu)          (GtkWidget          *widget);
753 754 755 756 757 758

  /* 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.
   */
759
  gboolean (* show_help)           (GtkWidget          *widget,
760
                                    GtkWidgetHelpType   help_type);
761 762 763
  
  /* accessibility support 
   */
764 765 766 767 768 769
  AtkObject*   (*get_accessible)     (GtkWidget *widget);

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

771 772 773 774
  /* Sent when a grab is broken. */
  gboolean (*grab_broken_event) (GtkWidget	     *widget,
                                 GdkEventGrabBroken  *event);

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

Kristian Rietveld's avatar
Kristian Rietveld committed
777 778 779 780 781
  gboolean     (* query_tooltip)      (GtkWidget  *widget,
				       gint        x,
				       gint        y,
				       gboolean    keyboard_tooltip,
				       GtkTooltip *tooltip);
782 783 784 785
  /* Signals without a C default handler class slot:
   * gboolean	(*damage_event)	(GtkWidget      *widget,
   *                             GdkEventExpose *event);
   */
Kristian Rietveld's avatar
Kristian Rietveld committed
786

Owen Taylor's avatar
Owen Taylor committed
787
  /* Padding for future expansion */
788 789 790
  void (*_gtk_reserved5) (void);
  void (*_gtk_reserved6) (void);
  void (*_gtk_reserved7) (void);
Elliot Lee's avatar
Elliot Lee committed
791 792 793 794
};

struct _GtkWidgetAuxInfo
{
795 796 797 798
  gint x;
  gint y;
  gint width;
  gint height;
799

800 801
  guint x_set : 1;
  guint y_set : 1;
802 803

  GtkRequisition natural_size;
Elliot Lee's avatar
Elliot Lee committed
804 805 806 807 808 809 810 811 812
};

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

Manish Singh's avatar
Manish Singh committed
813 814
GType	   gtk_widget_get_type		  (void) G_GNUC_CONST;
GtkWidget* gtk_widget_new		  (GType		type,
815
					   const gchar	       *first_property_name,
816
					   ...);
817 818 819
void	   gtk_widget_destroy		  (GtkWidget	       *widget);
void	   gtk_widget_destroyed		  (GtkWidget	       *widget,
					   GtkWidget	      **widget_pointer);
Owen Taylor's avatar
Owen Taylor committed
820
#ifndef GTK_DISABLE_DEPRECATED
821 822
GtkWidget* gtk_widget_ref		  (GtkWidget	       *widget);
void	   gtk_widget_unref		  (GtkWidget	       *widget);
823
void	   gtk_widget_set		  (GtkWidget	       *widget,
824
					   const gchar         *first_property_name,
825
					   ...) G_GNUC_NULL_TERMINATED;
Owen Taylor's avatar
Owen Taylor committed
826
#endif /* GTK_DISABLE_DEPRECATED */
827 828
void	   gtk_widget_unparent		  (GtkWidget	       *widget);
void	   gtk_widget_show		  (GtkWidget	       *widget);
829
void       gtk_widget_show_now            (GtkWidget           *widget);
830 831 832
void	   gtk_widget_hide		  (GtkWidget	       *widget);
void	   gtk_widget_show_all		  (GtkWidget	       *widget);
void	   gtk_widget_hide_all		  (GtkWidget	       *widget);
833 834 835
void       gtk_widget_set_no_show_all     (GtkWidget           *widget,
					   gboolean             no_show_all);
gboolean   gtk_widget_get_no_show_all     (GtkWidget           *widget);
836 837 838 839
void	   gtk_widget_map		  (GtkWidget	       *widget);
void	   gtk_widget_unmap		  (GtkWidget	       *widget);
void	   gtk_widget_realize		  (GtkWidget	       *widget);
void	   gtk_widget_unrealize		  (GtkWidget	       *widget);
840 841

/* Queuing draws */
842
void	   gtk_widget_queue_draw	  (GtkWidget	       *widget);
843 844 845 846 847
void	   gtk_widget_queue_draw_area	  (GtkWidget	       *widget,
					   gint                 x,
					   gint                 y,
					   gint                 width,
					   gint                 height);
848
#ifndef GTK_DISABLE_DEPRECATED
849 850 851 852 853 854
void	   gtk_widget_queue_clear	  (GtkWidget	       *widget);
void	   gtk_widget_queue_clear_area	  (GtkWidget	       *widget,
					   gint                 x,
					   gint                 y,
					   gint                 width,
					   gint                 height);
855
#endif /* GTK_DISABLE_DEPRECATED */
856 857


858
void	   gtk_widget_queue_resize	  (GtkWidget	       *widget);
Soeren Sandmann's avatar
Soeren Sandmann committed
859
void	   gtk_widget_queue_resize_no_redraw (GtkWidget *widget);
860
#ifndef GTK_DISABLE_DEPRECATED
861
void	   gtk_widget_draw		  (GtkWidget	       *widget,
862
					   const GdkRectangle  *area);
863
#endif /* GTK_DISABLE_DEPRECATED */
864
void	   gtk_widget_size_request	  (GtkWidget	       *widget,
Elliot Lee's avatar
Elliot Lee committed
865
					   GtkRequisition      *requisition);
866
void	   gtk_widget_size_allocate	  (GtkWidget	       *widget,
Elliot Lee's avatar
Elliot Lee committed
867
					   GtkAllocation       *allocation);
868 869 870
void       gtk_widget_get_desired_size    (GtkWidget           *widget,
					   GtkRequisition      *minimum_size,
					   GtkRequisition      *natural_size);
871 872
void       gtk_widget_get_child_requisition (GtkWidget	       *widget,
					     GtkRequisition    *requisition);
Tim Janik's avatar
Tim Janik committed
873 874 875 876
void	   gtk_widget_add_accelerator	  (GtkWidget           *widget,
					   const gchar         *accel_signal,
					   GtkAccelGroup       *accel_group,
					   guint                accel_key,
877
					   GdkModifierType      accel_mods,
Tim Janik's avatar
Tim Janik committed
878
					   GtkAccelFlags        accel_flags);
879
gboolean   gtk_widget_remove_accelerator  (GtkWidget           *widget,
Tim Janik's avatar
Tim Janik committed
880 881
					   GtkAccelGroup       *accel_group,
					   guint                accel_key,
882
					   GdkModifierType      accel_mods);
883
void       gtk_widget_set_accel_path      (GtkWidget           *widget,
884 885
					   const gchar         *accel_path,
					   GtkAccelGroup       *accel_group);
886 887
const gchar* _gtk_widget_get_accel_path   (GtkWidget           *widget,
					   gboolean	       *locked);
888
GList*     gtk_widget_list_accel_closures (GtkWidget	       *widget);
889 890
gboolean   gtk_widget_can_activate_accel  (GtkWidget           *widget,
                                           guint                signal_id);
891
gboolean   gtk_widget_mnemonic_activate   (GtkWidget           *widget,
892
					   gboolean             group_cycling);
893
gboolean   gtk_widget_event		  (GtkWidget	       *widget,
894
					   GdkEvent	       *event);
895 896
gint       gtk_widget_send_expose         (GtkWidget           *widget,
					   GdkEvent            *event);
897

898 899 900 901
gboolean   gtk_widget_activate		     (GtkWidget	       *widget);
gboolean   gtk_widget_set_scroll_adjustments (GtkWidget        *widget,
					      GtkAdjustment    *hadjustment,
					      GtkAdjustment    *vadjustment);
902
     
903 904
void	   gtk_widget_reparent		  (GtkWidget	       *widget,
					   GtkWidget	       *new_parent);
905
gboolean   gtk_widget_intersect		  (GtkWidget	       *widget,
906
					   const GdkRectangle  *area,
907
					   GdkRectangle	       *intersection);
908
GdkRegion *gtk_widget_region_intersect	  (GtkWidget	       *widget,
909
					   const GdkRegion     *region);
910

Tim Janik's avatar
Tim Janik committed
911 912 913 914 915
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);

916 917 918
void       gtk_widget_set_can_focus       (GtkWidget           *widget,
                                           gboolean             can_focus);
gboolean   gtk_widget_get_can_focus       (GtkWidget           *widget);
919
gboolean   gtk_widget_has_focus           (GtkWidget           *widget);
920
gboolean   gtk_widget_is_focus            (GtkWidget           *widget);
921 922 923 924 925 926 927
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);
928

929 930 931 932
void      gtk_widget_set_receives_default (GtkWidget           *widget,
                                           gboolean             receives_default);
gboolean  gtk_widget_get_receives_default (GtkWidget           *widget);

933 934
gboolean   gtk_widget_has_grab            (GtkWidget           *widget);

935 936 937
void                  gtk_widget_set_name               (GtkWidget    *widget,
							 const gchar  *name);
G_CONST_RETURN gchar* gtk_widget_get_name               (GtkWidget    *widget);
Michael Natterer's avatar