writing really rad gtk+ & gnome applications...who are we? andrew cowie spends an awful lot of...
TRANSCRIPT
![Page 1: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/1.jpg)
Writing Really RadGTK+ & GNOME
Applicationsin C, Python or Java
Andrew CowieOperational Dynamics
Davyd MadeleyFugro Seismic Imaging
![Page 2: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/2.jpg)
Who Are We?
Andrew Cowiespends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s, picked up Java in 1997, and now, 10 years later, is the maintainer of the java-gnome project.
Davyd Madeleyhas been programming for a long time. He now works as a software engineer, writing GTK applications for geophysical analysis. Previously he was the gnome-applets maintainer. He plays the tenor saxophone.
![Page 3: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/3.jpg)
An Overview
● Why choose GTK+ for your application?
● GTK+ Fundamentals
– Building a UI– Box packing– The main loop & signals
● Getting started (in C)
● Window tricks (in Java)
● Complex data models (in Python)
![Page 4: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/4.jpg)
Why Would You Choose GTK+?
● Fast, flexible, ubiquitous● Multi-platform
– Linux, Unix, Mac OS, Win32, and more
● Many languages– C, Python and Java– Perl, C++, Ruby, Haskell, C#, PHP, OCml, Eiffel,
Erlang, Guile/Scheme/Lisp, Lua, Octave, D, TCL, Smalltalk, and more!
● LGPL
![Page 5: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/5.jpg)
A Word on Versions
● Today we're using the following:– gcc 4.1.x– GTK+ 2.12.x– Python 2.5– pyGTK 2.10– Sun Java 1.5 (& Free Java too!)– Eclipse 3.3.x– java-gnome 4.0.6rc1– Glade 3.4.x
![Page 6: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/6.jpg)
Widgets 'n stuff
● all displayed items are a GtkWidget; all interfaces are built down from a “top level”, inevitably GtkWindow
![Page 7: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/7.jpg)
Building a UI
● You can write code ...– Programmatically create elaborate custom content,
dynamic layouts, and smaller Widgets
![Page 8: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/8.jpg)
C Demo!
A GtkWindow
with aGtkButton
in it!
![Page 9: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/9.jpg)
Compiling
gcc -o demo \`pkg-config --cflags --libs \ gtk+-2.0` demo.c
![Page 10: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/10.jpg)
Building a UI
● You can write code ...– Programmatically create elaborate custom content,
dynamic layouts, and smaller Widgets
● or use Glade ...– Great for big, complex windows with lots of Layout
![Page 11: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/11.jpg)
C Demo!
A GtkWindow
with aGtkButtonwith Glade!
![Page 12: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/12.jpg)
Building a UI
● You can write code ...– Programmatically create elaborate custom content,
dynamic layouts, and smaller Widgets
● or use Glade ...– Great for big, complex windows with lots of Layout
● or do both simultaneously!– No point using Glade if coding it directly is less
lines of code– Use Glade for most of Window (ie, Labels) and
code for the dynamically generated bits
![Page 13: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/13.jpg)
Box Packing
GTK+ uses a“box packing”
model.
![Page 14: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/14.jpg)
Box Packing
● Start with a GtkWindow
![Page 15: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/15.jpg)
Box Packing
● Start with a GtkWindow
● Pack a GtkVBox into the Window
![Page 16: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/16.jpg)
Box Packing
● Start with a GtkWindow
● Pack a GtkVBox into the Window
● Pack a GtkLabel into the VBox
![Page 17: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/17.jpg)
Box Packing
● Start with a GtkWindow
● Pack a GtkVBox into the Window
● Pack a GtkLabel into the VBox
● Pack a GtkButton into the VBox
![Page 18: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/18.jpg)
Box Packing
● Start with a GtkWindow
● Pack a GtkVBox into the Window
● Pack a GtkLabel into the VBox
● Pack a GtkButton into the VBox
● Pack a GtkStatusbar into the VBox
![Page 19: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/19.jpg)
Box Packing
● Start with a GtkWindow
● Pack a GtkVBox into the Window
● Pack a GtkLabel into the VBox
● Pack a GtkButton into the VBox
● Pack a GtkStatusbar into the VBox
![Page 20: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/20.jpg)
Button an atomic element, right?
GtkButton
![Page 21: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/21.jpg)
Button is a composite Widget too!
GtkHBox
![Page 22: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/22.jpg)
Button an atomic element, right?
GtkImage GtkLabel
![Page 23: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/23.jpg)
Or go the other way. Your icon,
GtkImage
![Page 24: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/24.jpg)
...some text...
GtkLabel
![Page 25: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/25.jpg)
a Container to hold them
GtkHBox
![Page 26: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/26.jpg)
pack 'em in
GtkLabelGtkImage
![Page 27: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/27.jpg)
and you've got your Widget
MyCustomButton
![Page 28: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/28.jpg)
Glade Demo!
UsingGlade
to do complexBox packing
layouts
![Page 29: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/29.jpg)
Packing Containers
● GtkVBox – vertical packing
● GtkHBox – horizontal packing
● GtkTable – rows and columns
● GtkHButtonBox – Buttons horizontally
● GtkAlignment – fine grained layout control.
Also,● GtkSizeGroup – child Widgets share same
horizontal/vertical size.
![Page 30: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/30.jpg)
The Main Loop
● GUI programming is event driven programming● The main loop polls sources for events● events include user activity (keyboard or
mouse), I/O, or a timeout● events issued as named signals; register
callbacks for signals you want to react to
![Page 31: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/31.jpg)
The Main Loop
Callbacks for events are issued from the main loop...
... one at a time
... and it's single threaded!
DON'T BLOCK THE MAIN LOOP!
![Page 32: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/32.jpg)
Signals
● Signals are connected to GObjects
● Often you pass 4 things:– object– signal name– callback function– optional free-form “user data”
● Prototype for each callback in API docs● Some callbacks return information to GTK+
(eg a gboolean)
![Page 33: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/33.jpg)
Signals – C
g_signal_connect(my_gobject, “notify::parent”, G_CALLBACK(notify_parent_cb), NULL);
void notify_parent_cb(GObject *my_gobject, GParamSpec arg1, gpointer user_data){
...
}
![Page 34: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/34.jpg)
C Demo!
Hooking up asignal
![Page 35: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/35.jpg)
Signals
● Some signals already have handlers registered– eg. expose-event
● Some signals are passed up the widget tree from your widget all the way to the toplevel– eg. expose-event, enter-notify-event– You can choose whether or not to stop these in
your signal handler by returning True or False
![Page 36: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/36.jpg)
Java Demo!
Same code, different language:
Java
![Page 37: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/37.jpg)
gtk_widget_show_all()
A Widget must be show()n
to be seen
Size request and allocation does not happen until the Widget is mapped.
![Page 38: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/38.jpg)
delete-event
Closing a Window!=
Terminating application
Beware the main loop!
![Page 39: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/39.jpg)
GtkFileChooser
Choose a file,any file
![Page 40: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/40.jpg)
Python Demo!
Same code, different language:
Python
![Page 41: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/41.jpg)
GtkTreeView
● Can display trees or lists of data● Uses an model, view, control (MVC) paradigm● You need three things:
– a GtkTreeView
– a GtkTreeModel (GtkTreeStore, GtkListStore or write your own)
– GtkCellRenderers
● You can store more data in a row than you display (handy!)
![Page 42: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/42.jpg)
Python Demo!
See the gtk.TreeView for
the Forrest
![Page 43: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/43.jpg)
Getting More Out of GTK+/GNOME
● GConf – store configuration data● GNOME-VFS – access data over networks● Cairo – antialiased vector graphics● GooCanvas – Cairo based canvas widget● D-BUS – cross-desktop IPC with GLib tie-in● Soup – HTTP, XML-RPC and SOAP libraries● libwnck – Access window information● libnotify – Popup balloons
![Page 44: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/44.jpg)
GConf
GConf
![Page 45: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/45.jpg)
GConf
What GConf is for:● user preferences and settings
What GConf is not for:● storing application state● IPC● general purpose data storage (use a DB)
![Page 46: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/46.jpg)
GConf
● GConf keys are stored in a hierarchy and have a type (e.g. String, Boolean, Integer, List):– /apps/nautilus/desktop/computer_icon_visible– /desktop/gnome/background/picture_filename
● Don't go creating your own top level directories. Your application's settings go in /apps.
● You can get or set keys or connect a signal for when they change
![Page 47: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/47.jpg)
GConf
AGConf
Example
![Page 48: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/48.jpg)
Design and Usability
Getting thatGNOME
Style
![Page 49: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/49.jpg)
Design and Usability
● Dialog button order matters!● Use stock icons whenever possible● Use default fonts, sizes, and colours; theme is
the user's choice, not yours.● Be consistent with other applications● Human Interface Guidelines (“the HIG”) just
that: guidelines
![Page 50: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/50.jpg)
Translation (i18n/l10n)
Translation
![Page 51: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/51.jpg)
Translation (i18n/l10n)
● Native language only:
g_print(“Hello World”);
:
![Page 52: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/52.jpg)
Translation (i18n/l10n)
● Translatable...
g_print(_(“Hello World”));
:
![Page 53: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/53.jpg)
Translation (i18n/l10n)
● fr.po (French Translation)
# ../src/hello.c:4
msgid “Hello World”
msgstr “Bonjour Monde”
:
![Page 54: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/54.jpg)
Translation (i18n/l10n)
● Provided via GNU gettext● Requires some build infrastructure● GNOME's enthusiastic translation team can
help!
![Page 55: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/55.jpg)
Would Ye Like To Know More?
● In C:
– http://www.gtk.org/tutorial/– Matthias Warkus, The Official GNOME 2
Developer's Guide (No Starch Press, 2004)
– Andrew Krause, Foundations of GTK+ Development (Apress, 2007)
● In Java:
– http://java-gnome.sourceforge.net/4.0/doc/● In Python:
– http://www.pygtk.org/pygtk2tutorial/index.html
![Page 56: Writing Really Rad GTK+ & GNOME Applications...Who Are We? Andrew Cowie spends an awful lot of time programming for someone who is actually a suit. He started with C in the early 80s,](https://reader031.vdocument.in/reader031/viewer/2022040915/5e8d203814dca665ce748b6c/html5/thumbnails/56.jpg)
Fin ;)Questions?
www.davyd.id.au/articles.shtml
operationaldynamics.com/talks