Blob Blame History Raw
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML
><HEAD
><TITLE
>GTK+ 2.0 Tutorial</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
REL="NEXT"
TITLE="Tutorial Availability"
HREF="c17.html"></HEAD
><BODY
CLASS="BOOK"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="BOOK"
><A
NAME="GTK-TUT"
></A
><DIV
CLASS="TITLEPAGE"
><H1
CLASS="TITLE"
><A
NAME="AEN2"
>GTK+ 2.0 Tutorial</A
></H1
><H3
CLASS="AUTHOR"
><A
NAME="AEN6"
></A
>Tony Gale</H3
><H3
CLASS="AUTHOR"
><A
NAME="AEN9"
></A
>Ian Main</H3
><H3
CLASS="AUTHOR"
><A
NAME="AEN12"
></A
>&#38; the GTK team</H3
><HR></DIV
><DIV
CLASS="TOC"
><DL
><DT
><B
>Table of Contents</B
></DT
><DT
><A
HREF="c17.html"
>Tutorial Availability</A
></DT
><DT
><A
HREF="c24.html"
>Introduction</A
></DT
><DT
><A
HREF="c39.html"
>Getting Started</A
></DT
><DD
><DL
><DT
><A
HREF="c39.html#SEC-HELLOWORLD"
>Hello World in GTK</A
></DT
><DT
><A
HREF="x111.html"
>Compiling Hello World</A
></DT
><DT
><A
HREF="x159.html"
>Theory of Signals and Callbacks</A
></DT
><DT
><A
HREF="x182.html"
>Events</A
></DT
><DT
><A
HREF="x281.html"
>Stepping Through Hello World</A
></DT
></DL
></DD
><DT
><A
HREF="c325.html"
>Moving On</A
></DT
><DD
><DL
><DT
><A
HREF="c325.html#SEC-DATATYPES"
>Data Types</A
></DT
><DT
><A
HREF="x334.html"
>More on Signal Handlers</A
></DT
><DT
><A
HREF="x344.html"
>An Upgraded Hello World</A
></DT
></DL
></DD
><DT
><A
HREF="c354.html"
>Packing Widgets</A
></DT
><DD
><DL
><DT
><A
HREF="c354.html#SEC-THEORYOFPACKINGBOXES"
>Theory of Packing Boxes</A
></DT
><DT
><A
HREF="x363.html"
>Details of Boxes</A
></DT
><DT
><A
HREF="x386.html"
>Packing Demonstration Program</A
></DT
><DT
><A
HREF="x389.html"
>Packing Using Tables</A
></DT
><DT
><A
HREF="x441.html"
>Table Packing Example</A
></DT
></DL
></DD
><DT
><A
HREF="c450.html"
>Widget Overview</A
></DT
><DD
><DL
><DT
><A
HREF="c450.html#SEC-CASTING"
>Casting</A
></DT
><DT
><A
HREF="x477.html"
>Widget Hierarchy</A
></DT
><DT
><A
HREF="x481.html"
>Widgets Without Windows</A
></DT
></DL
></DD
><DT
><A
HREF="c489.html"
>The Button Widget</A
></DT
><DD
><DL
><DT
><A
HREF="c489.html#SEC-NORMALBUTTONS"
>Normal Buttons</A
></DT
><DT
><A
HREF="x518.html"
>Toggle Buttons</A
></DT
><DT
><A
HREF="x535.html"
>Check Buttons</A
></DT
><DT
><A
HREF="x542.html"
>Radio Buttons</A
></DT
></DL
></DD
><DT
><A
HREF="c563.html"
>Adjustments</A
></DT
><DD
><DL
><DT
><A
HREF="c563.html#SEC-CREATINGANADJUSTMENT"
>Creating an Adjustment</A
></DT
><DT
><A
HREF="x587.html"
>Using Adjustments the Easy Way</A
></DT
><DT
><A
HREF="x602.html"
>Adjustment Internals</A
></DT
></DL
></DD
><DT
><A
HREF="c633.html"
>Range Widgets</A
></DT
><DD
><DL
><DT
><A
HREF="c633.html#SEC-SCROLLBARWIDGETS"
>Scrollbar Widgets</A
></DT
><DT
><A
HREF="x645.html"
>Scale Widgets</A
></DT
><DD
><DL
><DT
><A
HREF="x645.html#AEN648"
>Creating a Scale Widget</A
></DT
><DT
><A
HREF="x645.html#AEN660"
>Functions and Signals (well, functions, at least)</A
></DT
></DL
></DD
><DT
><A
HREF="x684.html"
>Common Range Functions</A
></DT
><DD
><DL
><DT
><A
HREF="x684.html#AEN688"
>Setting the Update Policy</A
></DT
><DT
><A
HREF="x684.html#AEN713"
>Getting and Setting Adjustments</A
></DT
></DL
></DD
><DT
><A
HREF="x725.html"
>Key and Mouse bindings</A
></DT
><DT
><A
HREF="x743.html"
>Example</A
></DT
></DL
></DD
><DT
><A
HREF="c753.html"
>Miscellaneous Widgets</A
></DT
><DD
><DL
><DT
><A
HREF="c753.html#SEC-LABELS"
>Labels</A
></DT
><DT
><A
HREF="x793.html"
>Arrows</A
></DT
><DT
><A
HREF="x810.html"
>The Tooltips Object</A
></DT
><DT
><A
HREF="x829.html"
>Progress Bars</A
></DT
><DT
><A
HREF="x861.html"
>Dialogs</A
></DT
><DT
><A
HREF="x891.html"
>Rulers</A
></DT
><DT
><A
HREF="x919.html"
>Statusbars</A
></DT
><DT
><A
HREF="x939.html"
>Text Entries</A
></DT
><DT
><A
HREF="x967.html"
>Spin Buttons</A
></DT
><DT
><A
HREF="x1063.html"
>Combo Box</A
></DT
><DT
><A
HREF="x1100.html"
>Calendar</A
></DT
><DT
><A
HREF="x1184.html"
>Color Selection</A
></DT
><DT
><A
HREF="x1207.html"
>File Selections</A
></DT
></DL
></DD
><DT
><A
HREF="c1226.html"
>Container Widgets</A
></DT
><DD
><DL
><DT
><A
HREF="c1226.html#SEC-EVENTBOX"
>The EventBox</A
></DT
><DT
><A
HREF="x1243.html"
>The Alignment widget</A
></DT
><DT
><A
HREF="x1258.html"
>Fixed Container</A
></DT
><DT
><A
HREF="x1279.html"
>Layout Container</A
></DT
><DT
><A
HREF="x1291.html"
>Frames</A
></DT
><DT
><A
HREF="x1317.html"
>Aspect Frames</A
></DT
><DT
><A
HREF="x1335.html"
>Paned Window Widgets</A
></DT
><DT
><A
HREF="x1352.html"
>Viewports</A
></DT
><DT
><A
HREF="x1368.html"
>Scrolled Windows</A
></DT
><DT
><A
HREF="x1390.html"
>Button Boxes</A
></DT
><DT
><A
HREF="x1402.html"
>Toolbar</A
></DT
><DT
><A
HREF="x1450.html"
>Notebooks</A
></DT
></DL
></DD
><DT
><A
HREF="c1499.html"
>Menu Widget</A
></DT
><DD
><DL
><DT
><A
HREF="c1499.html#SEC-MANUALMENUCREATION"
>Manual Menu Creation</A
></DT
><DT
><A
HREF="x1577.html"
>Manual Menu Example</A
></DT
><DT
><A
HREF="x1586.html"
>Using ItemFactory</A
></DT
><DD
><DL
><DT
><A
HREF="x1586.html#SEC-ITEMFACTORYENTRIES"
>ItemFactory entries</A
></DT
><DT
><A
HREF="x1586.html#SEC-ITEMFACTORYCREATION"
>Creating an ItemFactory</A
></DT
><DT
><A
HREF="x1586.html#SEC-USINGMENUANDITEMS"
>Making use of the menu and its menu items</A
></DT
></DL
></DD
><DT
><A
HREF="x1697.html"
>Item Factory Example</A
></DT
></DL
></DD
><DT
><A
HREF="c1701.html"
>Undocumented Widgets</A
></DT
><DD
><DL
><DT
><A
HREF="c1701.html#SEC-ACCELLABEL"
>Accel Label</A
></DT
><DT
><A
HREF="x1709.html"
>Option Menu</A
></DT
><DT
><A
HREF="x1712.html"
>Menu Items</A
></DT
><DD
><DL
><DT
><A
HREF="x1712.html#SEC-CHECKMENUITEM"
>Check Menu Item</A
></DT
><DT
><A
HREF="x1712.html#SEC-RADIOMENUITEM"
>Radio Menu Item</A
></DT
><DT
><A
HREF="x1712.html#SEC-SEPARATORMENUITEM"
>Separator Menu Item</A
></DT
><DT
><A
HREF="x1712.html#SEC-TEAROFFMENUITEM"
>Tearoff Menu Item</A
></DT
></DL
></DD
><DT
><A
HREF="x1727.html"
>Curves</A
></DT
><DT
><A
HREF="x1730.html"
>Drawing Area</A
></DT
><DT
><A
HREF="x1733.html"
>Font Selection Dialog</A
></DT
><DT
><A
HREF="x1736.html"
>Message Dialog</A
></DT
><DT
><A
HREF="x1739.html"
>Gamma Curve</A
></DT
><DT
><A
HREF="x1742.html"
>Image</A
></DT
><DT
><A
HREF="x1745.html"
>Plugs and Sockets</A
></DT
><DT
><A
HREF="x1748.html"
>Tree View</A
></DT
><DT
><A
HREF="x1751.html"
>Text View</A
></DT
></DL
></DD
><DT
><A
HREF="c1754.html"
>Setting Widget Attributes</A
></DT
><DT
><A
HREF="c1759.html"
>Timeouts, IO and Idle Functions</A
></DT
><DD
><DL
><DT
><A
HREF="c1759.html#SEC-TIMEOUTS"
>Timeouts</A
></DT
><DT
><A
HREF="x1770.html"
>Monitoring IO</A
></DT
><DT
><A
HREF="x1790.html"
>Idle Functions</A
></DT
></DL
></DD
><DT
><A
HREF="c1797.html"
>Advanced Event and Signal Handling</A
></DT
><DD
><DL
><DT
><A
HREF="c1797.html#SEC-SIGNALFUNCTIONS"
>Signal Functions</A
></DT
><DD
><DL
><DT
><A
HREF="c1797.html#AEN1801"
>Connecting and Disconnecting Signal Handlers</A
></DT
><DT
><A
HREF="c1797.html#AEN1804"
>Blocking and Unblocking Signal Handlers</A
></DT
><DT
><A
HREF="c1797.html#AEN1807"
>Emitting and Stopping Signals</A
></DT
></DL
></DD
><DT
><A
HREF="x1810.html"
>Signal Emission and Propagation</A
></DT
></DL
></DD
><DT
><A
HREF="c1834.html"
>Managing Selections</A
></DT
><DD
><DL
><DT
><A
HREF="c1834.html#SEC-SELECTIONSOVERVIEW"
>Overview</A
></DT
><DT
><A
HREF="x1850.html"
>Retrieving the selection</A
></DT
><DT
><A
HREF="x1873.html"
>Supplying the selection</A
></DT
></DL
></DD
><DT
><A
HREF="c1899.html"
>Drag-and-drop (DND)</A
></DT
><DD
><DL
><DT
><A
HREF="c1899.html#SEC-DRAGANDDROPOVERVIEW"
>Overview</A
></DT
><DT
><A
HREF="x1921.html"
>Properties</A
></DT
><DT
><A
HREF="x1939.html"
>Functions</A
></DT
><DD
><DL
><DT
><A
HREF="x1939.html#SEC-DNDSOURCEWIDGETS"
>Setting up the source widget</A
></DT
><DT
><A
HREF="x1939.html#SEC-SIGNALSONSOURCEWIDGETS"
>Signals on the source widget:</A
></DT
><DT
><A
HREF="x1939.html#SEC-DNDDESTWIDGETS"
>Setting up a destination widget:</A
></DT
><DT
><A
HREF="x1939.html#SEC-SIGNALSONDESTWIDGETS"
>Signals on the destination widget:</A
></DT
></DL
></DD
></DL
></DD
><DT
><A
HREF="c2023.html"
>GLib</A
></DT
><DD
><DL
><DT
><A
HREF="c2023.html#SEC-DEFINITIONS"
>Definitions</A
></DT
><DT
><A
HREF="x2035.html"
>Doubly Linked Lists</A
></DT
><DT
><A
HREF="x2055.html"
>Singly Linked Lists</A
></DT
><DT
><A
HREF="x2059.html"
>Memory Management</A
></DT
><DT
><A
HREF="x2076.html"
>Timers</A
></DT
><DT
><A
HREF="x2080.html"
>String Handling</A
></DT
><DT
><A
HREF="x2095.html"
>Utility and Error Functions</A
></DT
></DL
></DD
><DT
><A
HREF="c2116.html"
>GTK's rc Files</A
></DT
><DD
><DL
><DT
><A
HREF="c2116.html#SEC-FUNCTIONSFORRCFILES"
>Functions For rc Files</A
></DT
><DT
><A
HREF="x2136.html"
>GTK's rc File Format</A
></DT
><DT
><A
HREF="x2177.html"
>Example rc file</A
></DT
></DL
></DD
><DT
><A
HREF="c2180.html"
>Writing Your Own Widgets</A
></DT
><DD
><DL
><DT
><A
HREF="c2180.html#SEC-WIDGETSOVERVIEW"
>Overview</A
></DT
><DT
><A
HREF="x2189.html"
>The Anatomy Of A Widget</A
></DT
><DT
><A
HREF="x2200.html"
>Creating a Composite widget</A
></DT
><DD
><DL
><DT
><A
HREF="x2200.html#AEN2202"
>Introduction</A
></DT
><DT
><A
HREF="x2200.html#AEN2213"
>Choosing a parent class</A
></DT
><DT
><A
HREF="x2200.html#AEN2216"
>The header file</A
></DT
><DT
><A
HREF="x2200.html#AEN2228"
>The <TT
CLASS="LITERAL"
>_get_type()</TT
> function</A
></DT
><DT
><A
HREF="x2200.html#AEN2240"
>The <TT
CLASS="LITERAL"
>_class_init()</TT
> function</A
></DT
><DT
><A
HREF="x2200.html#AEN2293"
>The <TT
CLASS="LITERAL"
>_init()</TT
> function</A
></DT
><DT
><A
HREF="x2200.html#AEN2298"
>And the rest...</A
></DT
></DL
></DD
><DT
><A
HREF="x2310.html"
>Creating a widget from scratch</A
></DT
><DD
><DL
><DT
><A
HREF="x2310.html#AEN2312"
>Introduction</A
></DT
><DT
><A
HREF="x2310.html#AEN2319"
>Displaying a widget on the screen</A
></DT
><DT
><A
HREF="x2310.html#AEN2352"
>The origins of the Dial Widget</A
></DT
><DT
><A
HREF="x2310.html#AEN2356"
>The Basics</A
></DT
><DT
><A
HREF="x2310.html#AEN2368"
><TT
CLASS="LITERAL"
>gtk_dial_realize()</TT
></A
></DT
><DT
><A
HREF="x2310.html#AEN2377"
>Size negotiation</A
></DT
><DT
><A
HREF="x2310.html#AEN2385"
><TT
CLASS="LITERAL"
>gtk_dial_expose()</TT
></A
></DT
><DT
><A
HREF="x2310.html#AEN2391"
>Event handling</A
></DT
><DT
><A
HREF="x2310.html#AEN2407"
>Possible Enhancements</A
></DT
></DL
></DD
><DT
><A
HREF="x2419.html"
>Learning More</A
></DT
></DL
></DD
><DT
><A
HREF="c2422.html"
>Scribble, A Simple Example Drawing Program</A
></DT
><DD
><DL
><DT
><A
HREF="c2422.html#SEC-SCRIBBLEOVERVIEW"
>Overview</A
></DT
><DT
><A
HREF="x2431.html"
>Event Handling</A
></DT
><DT
><A
HREF="x2470.html"
>The DrawingArea Widget, And Drawing</A
></DT
><DT
><A
HREF="x2529.html"
>Adding XInput support</A
></DT
><DD
><DL
><DT
><A
HREF="x2529.html#AEN2557"
>Enabling extended device information</A
></DT
><DT
><A
HREF="x2529.html#AEN2570"
>Using extended device information</A
></DT
><DT
><A
HREF="x2529.html#AEN2588"
>Finding out more about a device</A
></DT
><DT
><A
HREF="x2529.html#SEC-FURTHERSOPHISTICATIONS"
>Further sophistications</A
></DT
></DL
></DD
></DL
></DD
><DT
><A
HREF="c2615.html"
>Tips For Writing GTK Applications</A
></DT
><DT
><A
HREF="c2620.html"
>Contributing</A
></DT
><DT
><A
HREF="c2627.html"
>Credits</A
></DT
><DT
><A
HREF="c2689.html"
>Tutorial Copyright and Permissions Notice</A
></DT
><DT
><A
HREF="a2698.html"
>GTK Signals</A
></DT
><DD
><DL
><DT
><A
HREF="a2698.html#SEC-GTKOBJECT"
>GtkObject</A
></DT
><DT
><A
HREF="x2704.html"
>GtkWidget</A
></DT
><DT
><A
HREF="x2707.html"
>GtkData</A
></DT
><DT
><A
HREF="x2710.html"
>GtkContainer</A
></DT
><DT
><A
HREF="x2713.html"
>GtkCalendar</A
></DT
><DT
><A
HREF="x2716.html"
>GtkEditable</A
></DT
><DT
><A
HREF="x2719.html"
>GtkNotebook</A
></DT
><DT
><A
HREF="x2722.html"
>GtkList</A
></DT
><DT
><A
HREF="x2725.html"
>GtkMenuShell</A
></DT
><DT
><A
HREF="x2728.html"
>GtkToolbar</A
></DT
><DT
><A
HREF="x2731.html"
>GtkButton</A
></DT
><DT
><A
HREF="x2734.html"
>GtkItem</A
></DT
><DT
><A
HREF="x2737.html"
>GtkWindow</A
></DT
><DT
><A
HREF="x2740.html"
>GtkHandleBox</A
></DT
><DT
><A
HREF="x2743.html"
>GtkToggleButton</A
></DT
><DT
><A
HREF="x2746.html"
>GtkMenuItem</A
></DT
><DT
><A
HREF="x2749.html"
>GtkCheckMenuItem</A
></DT
><DT
><A
HREF="x2752.html"
>GtkInputDialog</A
></DT
><DT
><A
HREF="x2755.html"
>GtkColorSelection</A
></DT
><DT
><A
HREF="x2758.html"
>GtkStatusBar</A
></DT
><DT
><A
HREF="x2761.html"
>GtkCurve</A
></DT
><DT
><A
HREF="x2764.html"
>GtkAdjustment</A
></DT
></DL
></DD
><DT
><A
HREF="a2767.html"
>GDK Event Types</A
></DT
><DT
><A
HREF="a2901.html"
>Code Examples</A
></DT
><DD
><DL
><DT
><A
HREF="a2901.html#SEC-TICTACTOE"
>Tictactoe</A
></DT
><DD
><DL
><DT
><A
HREF="a2901.html#AEN2906"
>tictactoe.h</A
></DT
><DT
><A
HREF="a2901.html#AEN2909"
>tictactoe.c</A
></DT
><DT
><A
HREF="a2901.html#AEN2912"
>ttt_test.c</A
></DT
></DL
></DD
><DT
><A
HREF="x2915.html"
>GtkDial</A
></DT
><DD
><DL
><DT
><A
HREF="x2915.html#AEN2917"
>gtkdial.h</A
></DT
><DT
><A
HREF="x2915.html#AEN2920"
>gtkdial.c</A
></DT
><DT
><A
HREF="x2915.html#AEN2923"
>dial_test.c</A
></DT
></DL
></DD
><DT
><A
HREF="x2926.html"
>Scribble</A
></DT
><DD
><DL
><DT
><A
HREF="x2926.html#AEN2928"
>scribble-simple.c</A
></DT
><DT
><A
HREF="x2926.html#AEN2931"
>scribble-xinput.c</A
></DT
></DL
></DD
></DL
></DD
></DL
></DIV
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="c17.html"
ACCESSKEY="N"
>Next &#62;&#62;&#62;</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Tutorial Availability</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>