summaryrefslogtreecommitdiff
path: root/docs/widget_system.txt
diff options
context:
space:
mode:
authorTim Janik <timj@src.gnome.org>1998-02-04 03:18:53 +0000
committerTim Janik <timj@src.gnome.org>1998-02-04 03:18:53 +0000
commit4b86717650d07daeb791416550aee79ba3106c02 (patch)
tree61eaf037da0934ca7f372722c2f2b337fa2cb565 /docs/widget_system.txt
parent8d2bb0f43edd8e8540c4b2ea97b927c4a3710caf (diff)
downloadgtk+-4b86717650d07daeb791416550aee79ba3106c02.tar.gz
documentation. -timj
documentation. -timj
Diffstat (limited to 'docs/widget_system.txt')
-rw-r--r--docs/widget_system.txt180
1 files changed, 142 insertions, 38 deletions
diff --git a/docs/widget_system.txt b/docs/widget_system.txt
index 6607aa2768..2b43d3a21c 100644
--- a/docs/widget_system.txt
+++ b/docs/widget_system.txt
@@ -1,3 +1,6 @@
+Notes about the inner workings of the widget system of GTK+
+===========================================================
+
This file contains some notes as to how the widget system does
and should work. It consists of three parts:
@@ -5,7 +8,7 @@ and should work. It consists of three parts:
II) A list of invariants about the states of the widgets.
(Throughout this document, we refer to the states of the
- widgets by referring to the flags for gtkwidget)
+ widgets by referring to the flags for GtkWidget)
III) Some notes about the ways that a widget changes states
@@ -26,73 +29,176 @@ Section II is mostly of interest to those maintaining GTK, the
other sections may also be interesting to people writing
new widgets.
- Owen Taylor <owt1@cornell.edu>
- 98/02/03
+Main outline:
+ - Owen Taylor <owt1@cornell.edu>
+ 98/02/03
+
+Flag descriptions:
+ - Tim Janik <timj@gimp.org>
+ 98/02/04
I. Flags
--------
+GtkObject:
+
+GTK_DESTROYED:
+ This flagged is set for a GtkObject right before its
+ destruction code is executed. Its main use is the
+ prevention of multiple destruction invokations.
+
+GTK_FLOATING:
+ This flag reflects the fact that the holder of the
+ initial reference count is unknown. Refer to refcounting.txt
+ for further details.
+
+GTK_RESERVED_1:
+GTK_RESERVED_2:
+ Reserved flags.
+
+
+GtkWidget, public flags:
+
+GTK_TOPLEVEL:
+ Widgets witghout a real parent, as there are GtkWindows and
+ GtkMenus have this flag set throughout their lifetime.
+ Toplevel widgets always contain their own GdkWindow.
+
+GTK_NO_WINDOW:
+ This flag is indicative for a widget that does not provide
+ its own GdkWindow. Visible action (e.g. drawing) is performed
+ on the parents GdkWindow.
+
GTK_REALIZED:
- set by gtk_widget_realize, unset by gtk_widget_unrealize
- relies on ((widget->parent && widget->parent->window)
- || GTK_WIDGET_TOPLEVEL (widget);
- means: widget has an associated GdkWindow (XWindow)
+ Set by gtk_widget_realize, unset by gtk_widget_unrealize.
+ Relies on ((widget->parent && widget->parent->window)
+ || GTK_WIDGET_TOPLEVEL (widget));
+ Means: widget has an associated GdkWindow (XWindow).
GTK_MAPPED:
- set by gtk_widget_map, unset by gtk_widget_unmap
- may only be set if GTK_WIDGET_REALIZED(widget)
- means: gdk_window_show() has been called on the widgets window(s).
+ Set by gtk_widget_map, unset by gtk_widget_unmap.
+ May only be set if GTK_WIDGET_REALIZED (widget).
+ Means: gdk_window_show() has been called on the widgets window(s).
GTK_VISIBLE:
- set by gtk_widget_show
- implies that a widget will be GTK_MAPPED as soon as it's
- parent is GTK_MAPPED.
+ Set by gtk_widget_show.
+ Implies that a widget will be flagged GTK_MAPPED as soon as its
+ parent is mapped.
!GTK_VISIBLE:
- set by gtk_widget_hide
- implies that a widget is not onscreen, therefore !GTK_MAPPED
+ Set by gtk_widget_hide.
+ Implies that a widget is not onscreen, therefore !GTK_MAPPED.
+
+GTK_SENSITIVE:
+ Set and unset by gtk_widget_set_sensitive.
+ The sensitivity of a widget determines wether it will receive
+ certain events (e.g. button or key presses). One premise for
+ the widgets sensitivity is to have GTK_SENSITIVE 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 widgets 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:
+ There are no directly corresponding functions for setting/unsetting
+ this flag, but it can be affected by the GtkWidget::has_focus argument
+ via gtk_widget_set_arg.
+ This flag determines wether a widget is able to handle focus grabs.
+
+GTK_HAS_FOCUS:
+ This flag will be set by gtk_widget_grab_focus for widgets that also
+ have GTK_CAN_FOCUS set. The flag will bve unset once another widget
+ grabs the focus.
+
+GTK_CAN_DEFAULT:
+GTK_HAS_DEFAULT:
+ These two flags are mostly equal in functionality to their *_FOCUS
+ counterparts, but for the defalt widget.
+GTK_HAS_GRAB:
+ Set by gtk_grab_add, unset by gtk_grab_remove.
+ Means: widget is in the grab_widgets stack, and will be the preferred
+ one for receiving events other than ones of cosmetic value.
+
+GTK_BASIC:
+ The GTK_BASIC flag is an attempted at making a distinction between
+ widgets that will proper handle user input e.g. key/button presses.
+ Supsequent parent<->child relation ships of non `basic' widgets
+ should be avoided. The checking for this is currently not proper
+ enforced in the code. For example GtkButton is a non `basic' widget,
+ that will therefore disallow to act as a container for another
+ GtkButton. Now the gnit is, one can add a GtkHBox (which is a
+ `basic' widget) to the first button, and put the second into
+ the box.
+
+
+GtkWidget, private flags:
+
+GTK_USER_STYLE:
+ A widget is flagged to have a user style, once gtk_widget_set_style
+ has been invoked for it. The use of this flag is to tell widgets
+ wich share a global user style from the ones which got a certain
+ style assign from outside the toolkit.
+
GTK_REDRAW_PENDING:
- relies on GTK_WIDGET_MAPPED(widget)
- [this is not really enforced throughout the code, but should
+ Relies on GTK_WIDGET_MAPPED (widget).
+ [FIXME: this is not really enforced throughout the code, but should
be. it only requires a few checks for GTK_WIDGET_MAPPED and
minor changes to gtk_widget_unmap, we can then remove the check
in gtk_widget_real_destroy]
- means: there is an idle handler waiting for the widget, that
- will cause a full redraw (gtk_widget_draw(widget, NULL))
+ Means: there is an idle handler waiting for the widget, that
+ will cause a full redraw (gtk_widget_draw (widget, NULL)).
GTK_RESIZE_PENDING:
- first, this is only valid for GtkContainers.
+ First, this is only valid for GtkContainers.
[some of the code should move to gtkcontainer.c therefore]
- relies on GTK_WIDGET_REALIZED(widget)
+ Relies on GTK_WIDGET_REALIZED(widget)
[this is not really enforced throughout the code, but should
be. it only requires a few checks for GTK_WIDGET_RELIZED and
minor changes to gtk_widget_unrealize, we can then remove the check
in gtk_widget_real_destroy]
- means: there is an idle handler waiting for the container to
+ Means: there is an idle handler waiting for the container to
resize it.
GTK_RESIZE_NEEDED:
- relies on GTK_WIDGET_REALIZED(widget)
- [puhhh, this isn't rely enforced either..., bla bla ...remove check
- in gtk_widget_real_destroy]
- means: a widget has been added to the resize_widgets list of
+ Relies on GTK_WIDGET_REALIZED(widget)
+ [this is not really enforced throughout the code, but should
+ be. once this is done special checking in gtk_widget_real_destroy
+ can be avoided]
+ Means: a widget has been added to the resize_widgets list of
its _toplevel_ container (keep this in mind for GtkViewport).
- remark: this flag is also used internaly by gtkwindow.c.
+ Remark: this flag is also used internaly by gtkwindow.c during
+ the evaluation of resizing worthy widgets.
GTK_LEAVE_PENDING:
- a widget is flagged as such if there is a leave_notify event
- pending for it. it receives this event regardless of a grab or
- its current sensitivity.
+ A widget is flagged as such if there is a leave_notify event
+ pending for it. It will receive this event regardless of a grab
+ through another widget or its current sensitivity.
[this should be made relying on GTK_REALIZED]
-GTK_HAS_GRAB:
- set by gtk_grab_add, unset by gtk_grab_remove
- means: widget is in the grab_widgets stack.
+GTK_HAS_SHAPE_MASK:
+ Set by gtk_widget_shape_combine_mask if a widget got a shape mask
+ assigned (making use of the X11 shaped window extension).
+
+GTK_IN_REPARENT:
+ During the act of reparentation widgets which are already
+ realized and will be added to an already realized parent need
+ to have this flag set to prevent natural unrealization on the
+ process of getting unparented.
+
+Related Macros:
GTK_WIDGET_DRAWABLE:
- a widget is flagged as GTK_WIDGET_VISIBLE and GTK_WIDGET_MAPPED
- means: it _makes sense_ to draw in a widgets window.
+ This macro examines wether a widget is flagged as GTK_WIDGET_VISIBLE
+ and GTK_WIDGET_MAPPED.
+ Means: it _makes sense_ to draw in a widgets window.
+GTK_WIDGET_IS_SENSITIVE:
+ This macro tells the real sensitivity state of a widget. It returns
+ wether both the widget and all its parents are in sensitive state.
II. Invariants:
@@ -105,7 +211,7 @@ In the following
A => B means if A is true, than B is true
A <=> B means A is true, if and only if B is true
- (equivalent to A => B and B <= A)
+ (equivalent to A => B and A <= B)
1) GTK_WIDGET_DESTROYED (widget) => !GTK_WIDGET_REALIZED (widget)
@@ -375,5 +481,3 @@ it was not overridden in the Bar class structure) and
gtk_widget_destroy will call gtk_object_destroy because
the parent_class variable referenced by gtk_foo_destroy is the
static variable in gtkwidget.c: GtkObjectClass.
-
-