Use xdotool to automate window positioning tests
[pipeglade.git] / pipeglade.1
blob0196885f6b53f9800a4f098b9e17baa9481332f9
1 .\" Copyright (c) 2014-2016 Bert Burgemeister <trebbu@googlemail.com>
2 .\"
3 .\" Permission is hereby granted, free of charge, to any person obtaining
4 .\" a copy of this software and associated documentation files (the
5 .\" "Software"), to deal in the Software without restriction, including
6 .\" without limitation the rights to use, copy, modify, merge, publish,
7 .\" distribute, sublicense, and/or sell copies of the Software, and to
8 .\" permit persons to whom the Software is furnished to do so, subject to
9 .\" the following conditions:
10 .\"
11 .\" The above copyright notice and this permission notice shall be
12 .\" included in all copies or substantial portions of the Software.
13 .\"
14 .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16 .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17 .\" NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18 .\" LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19 .\" OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20 .\" WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 .\"
22 .Dd May 07, 2016
23 .Dt PIPEGLADE 1 PRM
24 .Os BSD
25 .Sh NAME
26 .Nm pipeglade
27 .Nd pipe-driven GTK+ interface
28 .Sh SYNOPSIS
29 .Nm
30 .Oo
31 .Op Fl i Ar in-fifo
32 .Op Fl o Ar out-fifo
33 .Op Fl b
34 .Op Fl u Ar builder-file
35 .Op Fl e Ar parent-xid
36 .Op Fl l Ar log-file
37 .Op Fl O Ar err-file
38 .Op Fl -display Ar X-server
39 .Oc |
40 .Op Fl h | G | V
41 .Sh DESCRIPTION
42 .Nm
43 is a helper program that displays graphical user
44 interfaces for other programs.
45 It renders the GUI definition found in a GtkBuilder XML file
46 (typically created using the
47 .Xr glade 1
48 interface designer), and communicates with the main program solely
49 through plain text messages via pipes or fifos.
50 It provides access to a subset of features of a subset of widgets of
51 GTK+ 3.
52 Simple one-shot dialogs as well as more complex, long-running programs
53 can be built using
54 .Nm ;
55 see
56 .Sx EXAMPLES .
57 .Sh OPTIONS
58 .Bl -tag -width Ds
59 .It Fl i Ar in-fifo
60 Creates a named pipe
61 .Ar in-fifo
62 if necessary, sets its permissions to
63 .Li 0600 ,
64 and uses it for command input.
65 .Pp
66 A command is a line of text.
67 Its format is
68 .Qq Ar id Ns Cm \&: Ns Ar action Bq Ar data ,
69 .Ar id
70 being the name of the receiving widget;
71 .Ar data
72 is separated from the rest of the command by a single whitespace
73 character.
74 Commands whose first non-whitespace character is
75 .Cm #
76 are considered comments and ignored silently, as are empty input lines.
77 Any occurences of the two-character sequences
78 .Cm \en
79 and
80 .Cm \er
81 will be converted into newline or carriage return, respectively.
82 Every other character following a backslash will be left unchanged,
83 but the backslash will be removed.
84 Invalid commands are reported on
85 .Va stderr
86 and are otherwise ignored.
87 See
88 .Sx WIDGETS
89 for applicable commands.
90 .Pp
91 It is an error if
92 .Ar in-fifo
93 exists but is not a named pipe.
94 The named pipe
95 .Ar in-fifo
96 is deleted upon successful program termination.
97 .Pp
98 Default command input is
99 .Va stdin .
100 .It Fl o Ar out-fifo
101 Creates a named pipe
102 .Ar out-fifo
103 if necessary, sets its permissions to
104 .Li 0600 ,
105 and uses it for output of feedback messages from the
106 graphical user interface.
108 A feedback message is a line of text; its format is
109 .Qq Ar id Ns Cm \&: Ns Ar info Bq Ar data ,
110 .Ar id
111 being the name of the sending widget.
113 .Sx WIDGETS
114 for possible feedback messages.
116 It is an error if
117 .Ar out-fifo
118 exists but is not a named pipe.
119 The named pipe
120 .Ar out-fifo
121 is deleted upon successful program termination.
123 Default feedback-message output is
124 .Va stdout .
125 .It Fl b
126 Runs
128 in the background after printing its process ID to
129 .Va stdout .
131 It is an error if option
132 .Fl b
133 is used and not both
134 .Fl i Ar in-fifo
136 .Fl o Ar out-fifo
137 are specified.
138 .It Fl u Ar builder-file
139 Displays the graphical user interface
140 .Ar builder-file
141 which should be created using the
142 .Xr glade 1
143 user interface designer and saved in GtkBuilder (.ui) format.
144 Widget ids should be alphanumeric, including underscores, and the
145 main window must must be given the id
146 .Cm main .
148 Default is
149 .Pa ./pipeglade.ui .
150 .It Fl e Ar parent-xid
151 Embeds the main window into the XEmbed socket
152 .Ar parent-xid
153 of another process.
154 .It Fl l Ar log-file
155 Appends for each command a line of
156 .Qq Ar time activity
158 .Ar log-file ,
159 .Ar time
160 being the number of microseconds elapsed during
161 .Ar activity .
162 .Ar time
164 .Ar activity
165 are separated by a tab character.
166 Permissions of
167 .Ar log-file
168 are set to
169 .Li 0600 .
171 .Ar log-file
172 name of
173 .Ql -
174 means
175 .Va stderr .
176 .It Fl O Ar err-file
177 Redirects
178 .Va stderr ,
179 appending its output to
180 .Ar err-file .
181 Permissions of
182 .Ar err-file
183 are set to
184 .Li 0600 .
185 .It Fl -display Ar X-server
186 Uses the display on
187 .Ar X-server
188 for user interaction.
189 .It Fl h
190 Prints a help message and exits.
191 .It Fl G
192 Prints the versions of the underlying GTK+ and cairo libraries and
193 exits.
194 .It Fl V
195 Prints the
197 version and exits.
199 .Sh WIDGETS
200 The widget classes able to communicate through
203 .Sx GtkButton ,
204 .Sx GtkCalendar ,
205 .Sx GtkCheckButton ,
206 .Sx GtkColorButton ,
207 .Sx GtkComboBoxText ,
208 .Sx GtkDialog ,
209 .Sx GtkDrawingArea ,
210 .Sx GtkEntry ,
211 .Sx GtkEventBox ,
212 .Sx GtkExpander ,
213 .Sx GtkFileChooserButton ,
214 .Sx GtkFileChooserDialog ,
215 .Sx GtkFontButton ,
216 .Sx GtkFrame ,
217 .Sx GtkImage ,
218 .Sx GtkLabel ,
219 .Sx GtkMenuItem, GtkImageMenuItem ,
220 .Sx GtkNotebook ,
221 .Sx GtkPrintUnixDialog ,
222 .Sx GtkProgressBar ,
223 .Sx GtkRadioButton ,
224 .Sx GtkScale ,
225 .Sx GtkScrolledWindow
226 .Sx GtkSocket ,
227 .Sx GtkSpinButton ,
228 .Sx GtkSpinner ,
229 .Sx GtkStatusbar ,
230 .Sx GtkSwitch ,
231 .Sx GtkTextView ,
232 .Sx GtkToggleButton ,
233 .Sx GtkTreeView ,
234 .Sx GtkTreeViewColumn ,
236 .Sx GtkWindow .
239 references a widget by the
240 .Ar id
241 attribute it is given in Glade.
242 In the
243 .Pa .ui
244 file, a
245 .Cm GtkWindow
246 named
247 .Li foo
248 would appear as
249 .Dl <object class="GtkWindow" id="foo"> .
250 .Ss Any Widget (including widgets not mentioned above)
251 .Bl -tag -width "commands "
252 .It Commands
253 .Qq Ar id Ns Cm :set_sensitive Brq Cm 0 | 1
254 makes the widget grayed out
255 .Pq Cm 0
256 or responsive
257 .Pq Cm 1 .
259 .Qq Ar id Ns Cm :set_visible Brq Cm 0 | 1
260 hides
261 .Pq Cm 0
262 the widget, or makes it visible
263 .Pq Cm 1 .
265 .Qq Ar id Ns Cm :grab_focus
266 puts the keyboard focus onto the widget, if possible.
268 .Qq Ar id Ns Cm :set_size_request Bq Ar width height
269 sets the widget's minimum size to
270 .Ar width
272 .Ar height .
273 Default is the widget's natural size.
276 .Ar id Ns Cm :style
277 .Bo Ar prop Ns Cm \&: Ns Ar val Ns Bo Cm \&; Ar prop Ns Cm \&: Ns Ar val ... Bc Bc
279 sets properties
280 .Ar prop
281 of the widget style to
282 .Ar val .
283 Properties not explicitly specified are reset to their default values.
284 Examples:
285 .Bl -dash -offset indent -compact
287 .Ql label1:style font:Bold 11; background-color:green
289 .Ql label1:style font-style:italic; font-weight:bold; color:blue
291 .Ql frame1:style border-color:red yellow; border-width:5px
293 .Ql frame1:style border-radius:10px; transition:10s
295 For a description of possible color notations see
296 .Sx GtkColorButton .
298 .Qq Ar id Ns Cm :set_tooltip_text Bq Ar text
299 sets the widget's tooltip
300 .Ar text .
301 Default is disabling the tooltip.
303 .Qq Ar id Ns Cm :force
304 simulates a click on widget
305 .Ar id ,
306 triggering a response as described with the widgets below.
307 Exceptions:
308 .Bl -dash -offset indent -compact
310 The command is ignored by
311 .Sx GtkComboBoxText
312 (address its child
313 .Sx GtkEntry
314 instead),
315 .Sx GtkEventBox ,
316 .Sx GtkTreeView ,
318 .Sx GtkTreeViewColumn ;
320 .Sx GtkCalendar , GtkEntry , GtkFileChooserButton , GtkScale ,
322 .Sx GtkSpinButton
323 report the currently selected item;
325 .Sx GtkColorButton
327 .Sx GtkFontButton
328 just open their respective dialogs.
331 .Qq Ar id Ns Cm :load Ar file
332 reads arbitrary
334 commands from
335 .Ar file .
336 A non-empty
337 .Ar id
338 is required but ignored.
339 .Cm :load
340 commands may be nested but on attempts to read from the same file, the
341 inner
342 .Cm :load
343 is ignored.
344 There is also a
345 .Cm :save
346 command; see
347 .Sx GtkTextView
349 .Sx GtkTreeView .
351 .Qq Ar id Ns Cm :main_quit
352 kills the user interface.
353 A non-empty
354 .Ar id
355 is required but ignored.
357 .Ss GtkButton
358 .Bl -tag -width "commands "
359 .It Commands
360 .Qq Ar id Ns Cm :set_label Ar string
361 replaces the button text with
362 .Ar string .
363 .It Feedback
364 .Qq Ar id Ns Cm \&:clicked
366 .Cm GtkButton Ns
367 s with ids ending in
368 .Cm _ok , _apply , _cancel , _send_text ,
370 .Cm _send_selection
371 may work differently; see
372 .Sx GtkDialog , GtkFileChooserDialog ,
374 .Sx GtkTextView
375 for details.
377 .Ss GtkCalendar
378 .Bl -tag -width "commands "
379 .It Commands
380 .Qq Ar id Ns Cm :select_date Ar yyyy Ns Cm - Ns Ar mm Ns Cm - Ns Ar dd
381 selects the date on the calendar.
383 .Qq Ar id Ns Cm :mark_day Ar day
384 marks
385 .Ar day Pq 1-31
386 on the calendar.
388 .Qq Ar id Ns Cm :clear_marks
389 unmarks all days on the calendar.
390 .It Feedback
391 .Qq Ar id Ns Cm \&:clicked Ar yyyy Ns Cm - Ns Ar mm Ns Cm - Ns Ar dd
393 .Qq Ar id Ns Cm \&:doubleclicked Ar yyyy Ns Cm - Ns Ar mm Ns Cm - Ns Ar dd
395 .Ss GtkCheckButton
396 .Bl -tag -width "commands "
397 .It Commands
398 .Qq Ar id Ns Cm :set_active Brq Cm 0 | 1
399 switches the check mark off
400 .Pq Cm 0
401 or on
402 .Pq Cm 1 .
404 .Qq Ar id Ns Cm :set_label Ar string
405 replaces the button text with
406 .Ar string .
407 .It Feedback
408 .Qq Ar id Ns Cm \&:1
409 if switched on, or
410 .Qq Ar id Ns Cm \&:0
411 otherwise.
413 .Ss GtkColorButton
414 .Bl -tag -width "commands "
415 .It Commands
416 .Qq Ar id Ns Cm :set_color Ar color
417 preselects the color.
418 .Ar color
419 can be
420 .Bl -dash -offset indent -compact
422 a standard X11 color name, like
423 .Ql Dark Sea Green ,
425 a hexadecimal value in the form
426 .Cm # Ns Ar rgb , Cm # Ns Ar rrggbb , Cm # Ns Ar rrrgggbbb ,
428 .Cm # Ns Ar rrrrggggbbbb ,
430 an RGB color in the form
431 .Cm rgb( Ns Ar red Ns Cm \&, Ns Ar green Ns Cm \&, Ns Ar blue Ns Cm \&) ,
434 an RGBA color in the form
435 .Cm rgba( Ns Ar red Ns Cm \&, Ns Ar green Ns Cm \&, Ns
436 .Ar blue Ns Cm \&, Ns Ar alpha Ns Cm \&) .
438 .It Feedback
439 .Qq Ar id Ns Cm \&:color Cm rgb( Ns Ar red Ns Cm \&, Ns Ar green Ns Cm \&, Ns Ar blue Ns Cm \&)
441 .Qq Ar id Ns Cm \&:color Cm rgba( Ns Ar red Ns Cm \&, Ns Ar green Ns Cm \&, Ns Ar blue Ns Cm \&, Ns Ar alpha Ns Cm \&) .
442 .Ar red , green ,
444 .Ar blue
445 lie between 0 and 255, and
446 .Ar alpha
447 between 0 and 1.
449 .Ss GtkComboBoxText
451 .Cm GtkComboBoxText
452 should contain a
453 .Cm GtkEntry .
454 .Bl -tag -width "commands "
455 .It Commands
456 .Qq Ar id Ns Cm :prepend_text Ar string
458 .Qq Ar id Ns Cm :append_text Ar string
459 prepend/append a new selectable item marked
460 .Ar string .
462 .Qq Ar id Ns Cm :insert_text Ar position string
463 inserts item
464 .Ar string
466 .Ar position .
468 .Qq Ar id Ns Cm :remove Ar position
469 removes the item at
470 .Ar position .
471 .It Feedback
472 .Qq Ar entry_id Ns Cm \&:text Ar text ,
473 .Ar entry_id
474 being the id of the child
475 .Cm GtkEntry .
477 .Ss GtkDialog
479 .Cm GtkDialog
480 with id
481 .Ar foo
482 will be invoked by a
483 .Sx GtkMenuItem
484 or a
485 .Sx GtkImageMenuItem
486 with id
487 .Ar foo Ns Cm _invoke .
490 .Cm GtkDialog
491 should have a
492 .Sq Cancel
493 .Sx GtkButton
494 with id
495 .Ar foo Ns Cm _cancel
496 .Po Cm main_cancel
497 if the dialog is the sole window of the GUI and therefore named
498 .Cm main
499 .Pc .
501 If the
502 .Cm GtkDialog
503 has an
504 .Sq Ok
505 .Sx GtkButton
506 with id
507 .Ar foo Ns Cm _ok ,
508 it will take care of hiding the dialog window.
509 .Bl -tag -width "commands "
510 .It Commands
511 .Qq Ar id Ns Cm :set_title Ar string
512 replaces the text in the title bar with
513 .Ar string .
515 .Qq Ar id Ns Cm :resize Bq Ar width height
516 changes the size of the dialog window to
517 .Ar width
519 .Ar height
520 pixels if specified, or to the default size.
522 .Qq Ar id Ns Cm :move Ar x y
523 moves the dialog window to position
524 .Pq Ar x , y .
526 .Qq Ar id Ns Cm :fullscreen
528 .Qq Ar id Ns Cm :unfullscreen
529 switch fullscreen mode on and off.
530 .It Feedback
531 .Qq Ar id Ns Cm \&:closed
532 if the
533 .Cm GtkDialog
534 window was closed by the window manager.
536 .Ss GtkDrawingArea
537 Drawing commands
538 .Pq except Cm :save
539 expect a context parameter of the form
540 .Bro Ar n Ns | Ns Cm = Ns Ar n Ns | Ns Ar n Ns Cm < Ns Ar m Brc
541 where
542 .Ar n
543 is an arbitrary non-negative integer that can be used later to
544 reference the command.
545 The first form,
546 .Ar n ,
547 appends its command to the current list of drawing operations.
548 The second form,
549 .Cm = Ns Ar n ,
550 replaces the first drawing operation with context parameter
551 .Ar n
552 by the new command.
553 The third form,
554 .Ar n Ns Cm < Ns Ar m ,
555 inserts its command before the first drawing operation with context
556 parameter
557 .Ar m .
558 Both second and third form fall back to appending.
560 The default coordinate system is a left-handed system with its origin
561 in the upper-left corner.
562 Angles increase from the positive X axis towards the positve Y axis
563 .Pq clockwise in the default system .
564 .Bl -tag -width "commands "
565 .It Commands
566 .Qq Ar id Ns Cm :arc Bro Ar n Ns | Ns Cm = Ns Ar n Ns | Ns Ar n Ns Cm < Ns Ar m Brc x y radius angle1 angle2
567 adds a circular arc to the current path.
568 The arc is centered at
569 .Pq Ar x , y
570 and proceeds from
571 .Ar angle1
573 .Ar angle2
574 .Pq in degrees .
576 .Qq Ar id Ns Cm :arc_negative Bro Ar n Ns | Ns Cm = Ns Ar n Ns | Ns Ar n Ns Cm < Ns Ar m Brc x y radius angle1 angle2
577 adds a circular arc to the current path.
578 The arc is centered at
579 .Pq Ar x , y
580 and proceeds in the direction of decreasing angles from
581 .Ar angle1
583 .Ar angle2
584 .Pq in degrees .
586 .Qq Ar id Ns Cm :close_path Bro Ar n Ns | Ns Cm = Ns Ar n Ns | Ns Ar n Ns Cm < Ns Ar m Brc
587 adds a line segment from the current point to the point most recently
588 passed to
589 .Ar id Ns Cm :move_to
591 .Ar id Ns Cm :rel_move_to .
593 .Qq Ar id Ns Cm :curve_to Bro Ar n Ns | Ns Cm = Ns Ar n Ns | Ns Ar n Ns Cm < Ns Ar m Brc x1 y1 x2 y2 x3 y3
594 adds a cubic Bezier spline from the current point to
595 .Pq Ar x3 , y3 ,
596 using
597 .Pq Ar x1 , y1
599 .Pq Ar x2 , y2
600 as control points.
601 If there is no current point, the curve will start at
602 .Pq Ar x1 , y1 .
604 .Qq Ar id Ns Cm :fill Bro Ar n Ns | Ns Cm = Ns Ar n Ns | Ns Ar n Ns Cm < Ns Ar m Brc
605 fills the current path and clears it.
607 .Qq Ar id Ns Cm :fill_preserve Bro Ar n Ns | Ns Cm = Ns Ar n Ns | Ns Ar n Ns Cm < Ns Ar m Brc
608 fills the current path without clearing it.
610 .Qq Ar id Ns Cm :line_to Bro Ar n Ns | Ns Cm = Ns Ar n Ns | Ns Ar n Ns Cm < Ns Ar m Brc x y
611 adds a line from the current point to
612 .Pq Ar x , y ,
613 or creates a new current point at
614 .Pq Ar x , y .
616 .Qq Ar id Ns Cm :move_to Bro Ar n Ns | Ns Cm = Ns Ar n Ns | Ns Ar n Ns Cm < Ns Ar m Brc x y
617 sets the current point to
618 .Pq Ar x , y .
620 .Qq Ar id Ns Cm :rectangle Bro Ar n Ns | Ns Cm = Ns Ar n Ns | Ns Ar n Ns Cm < Ns Ar m Brc x y width height
621 adds a rectangle to the current path.
622 The top left corner is at
623 .Pq Ar x , y .
625 .Qq Ar id Ns Cm :rel_curve_to Bro Ar n Ns | Ns Cm = Ns Ar n Ns | Ns Ar n Ns Cm < Ns Ar m Brc dx1 dy1 dx2 dy2 dx3 dy3
626 adds a cubic Bezier spline from the current point to
627 .Pq Ar dx3 , dy3 ,
628 using
629 .Pq Ar dx1 , dy1
631 .Pq Ar dx2 , dy2
632 as control points.
633 All coordinates are offsets relative to the current point.
635 .Qq Ar id Ns Cm :rel_line_to Bro Ar n Ns | Ns Cm = Ns Ar n Ns | Ns Ar n Ns Cm < Ns Ar m Brc dx dy
636 adds a line from the current point to a point offset from there by
637 .Pq Ar dx , dy .
639 .Qo Ar id Ns Cm :rel_move_for Bro Ar n Ns | Ns Cm = Ns Ar n Ns | Ns Ar n Ns Cm < Ns Ar m Brc
640 .Brq Cm c Ns | Ns Cm e Ns | Ns Cm n Ns | Ns Cm ne Ns | Ns Cm nw Ns | Ns Cm s Ns | Ns Cm se Ns | Ns Cm sw Ns | Ns Cm w
641 .Ar text
643 moves the current point such that
644 .Qq Ar id Ns Cm :show_text Ar n text
645 will place the specified reference point of
646 .Ar text
647 on the original current point.
649 .Qq Ar id Ns Cm :rel_move_to Bro Ar n Ns | Ns Cm = Ns Ar n Ns | Ns Ar n Ns Cm < Ns Ar m Brc dx dy
650 moves the current point by
651 .Pq Ar dx , dy .
653 .Qq Ar id Ns Cm :remove Ar n
654 removes the elements with context parameter
655 .Ar n
656 from the
657 .Cm GtkDrawingArea Ar id .
659 .Qq Ar id Ns Cm :rotate Bro Ar n Ns | Ns Cm = Ns Ar n Ns | Ns Ar n Ns Cm < Ns Ar m Brc Ar angle
660 rotates the user space axes by
661 .Ar angle
662 .Pq in degrees .
664 .Qq Ar id Ns Cm :save Ar file Ns Brq Cm .ps Ns | Ns Cm .eps Ns | Ns Cm .epsf Ns | Ns Cm .pdf Ns | Ns Cm .svg
665 writes the content of the
666 .Cm GtkDrawingArea
667 to an image file of the specified type.
669 .Qq Ar id Ns Cm :scale Bro Ar n Ns | Ns Cm = Ns Ar n Ns | Ns Ar n Ns Cm < Ns Ar m Brc Ar sx sy
670 scales the user space axes by
671 .Pq Ar sx , sy .
673 .Qq Ar id Ns Cm :set_dash Bro Ar n Ns | Ns Cm = Ns Ar n Ns | Ns Ar n Ns Cm < Ns Ar m Brc l
674 sets the dash pattern to
675 .Ar l
677 .Ar l
678 off.
680 .Qq Ar id Ns Cm :set_dash Bro Ar n Ns | Ns Cm = Ns Ar n Ns | Ns Ar n Ns Cm < Ns Ar m Brc l1on l1off l2on l2off ...
681 resets the dash pattern to a line with arbitrary on/off portions.
683 .Qq Ar id Ns Cm :set_dash Bro Ar n Ns | Ns Cm = Ns Ar n Ns | Ns Ar n Ns Cm < Ns Ar m Brc
684 resets the dash pattern to a solid line.
686 .Qo Ar id Ns Cm :set_font_face Bro Ar n Ns | Ns Cm = Ns Ar n Ns | Ns Ar n Ns Cm < Ns Ar m Brc
687 .Brq Cm normal | italic | oblique
688 .Brq Cm normal | bold
689 .Bq Cm family
691 sets the font face for subsequent calls of
692 .Ar id Ns Cm :show_text .
694 .Qq Ar id Ns Cm :set_font_size Bro Ar n Ns | Ns Cm = Ns Ar n Ns | Ns Ar n Ns Cm < Ns Ar m Brc size
695 sets the font size for subsequent calls of
696 .Ar id Ns Cm :show_text .
698 .Qq Ar id Ns Cm :set_line_cap Bro Ar n Ns | Ns Cm = Ns Ar n Ns | Ns Ar n Ns Cm < Ns Ar m Brc Brq Cm butt | round | square
699 sets the line cap style.
700 Default is
701 .Cm butt .
703 .Qq Ar id Ns Cm :set_line_join Bro Ar n Ns | Ns Cm = Ns Ar n Ns | Ns Ar n Ns Cm < Ns Ar m Brc Brq Cm miter | round | bevel
704 sets the line junction style.
705 Default is
706 .Cm miter .
708 .Qq Ar id Ns Cm :set_line_width Bro Ar n Ns | Ns Cm = Ns Ar n Ns | Ns Ar n Ns Cm < Ns Ar m Brc width
709 sets the line width.
710 Default
711 .Ar width
712 is 2.
714 .Qq Ar id Ns Cm :set_source_rgba Bro Ar n Ns | Ns Cm = Ns Ar n Ns | Ns Ar n Ns Cm < Ns Ar m Brc color
715 sets the color.
716 .Ar color
717 is in the format used with
718 .Sx GtkColorButton .
720 .Qq Ar id Ns Cm :show_text Bro Ar n Ns | Ns Cm = Ns Ar n Ns | Ns Ar n Ns Cm < Ns Ar m Brc text
721 writes
722 .Ar text ,
723 beginning at the current point.
725 .Qq Ar id Ns Cm :stroke Bro Ar n Ns | Ns Cm = Ns Ar n Ns | Ns Ar n Ns Cm < Ns Ar m Brc
726 strokes the current path and clears it.
728 .Qq Ar id Ns Cm :stroke_preserve Bro Ar n Ns | Ns Cm = Ns Ar n Ns | Ns Ar n Ns Cm < Ns Ar m Brc
729 strokes the current path without clearing it.
731 .Qq Ar id Ns Cm :transform Bro Ar n Ns | Ns Cm = Ns Ar n Ns | Ns Ar n Ns Cm < Ns Ar m Brc Bq Ar xx yx xy yy x0 y0
732 modifies the current transformation matrix such that
734 .Dl Va x' Li = Ar xx Va x Li + Ar xy Va y Li + Ar x0 ,
735 .Dl Va y' Li = Ar yx Va y Li + Ar yy Va y Li + Ar y0 .
737 Default is resetting the current transformation matrix.
739 .Qq Ar id Ns Cm :translate Bro Ar n Ns | Ns Cm = Ns Ar n Ns | Ns Ar n Ns Cm < Ns Ar m Brc Ar tx ty
740 translates the user space origin by
741 .Pq Ar tx , ty .
742 .It Feedback
743 none
745 .Ss GtkEntry
746 .Bl -tag -width "commands "
747 .It Commands
748 .Qq Ar id Ns Cm :set_text Ar string
749 replaces the user-editable text with
750 .Ar string .
752 .Qq Ar id Ns Cm :set_placeholder_text Ar string
753 sets the
754 .Ar string
755 that is displayed when the entry is empty and unfocused.
756 .It Feedback
757 .Qq Ar id Ns Cm \&:text Ar text ,
758 once for each change of
759 .Ar text .
761 .Ss GtkEventBox
762 .Ar x , y
763 are mouse pointer coordinates relative to the
764 .Cm GtkEventBox .
765 .Bl -tag -width "commands "
766 .It Commands
767 none
768 .It Feedback
769 .Qq Ar id Ns Cm \&:button_press Ar b x y ,
770 .Qq Ar id Ns Cm \&:button_release Ar b x y
771 where
772 .Ar b
773 is the mouse button (normally 1, 2, or 3 for the left, middle, and
774 right button; others may exist).
776 .Qq Ar id Ns Cm \&:motion Ar x y
777 is reported repeatedly while the mouse is being moved with a button
778 pressed.
780 .Qq Ar id Ns Cm \&:key_press Ar key ,
781 .Ar key
782 being the key's name
783 .Po e.g.
784 .Ql Control_L ,
785 .Ql Tab ,
786 .Ql a
787 .Pc .
789 .Ss GtkExpander
790 .Bl -tag -width "commands "
791 .It Commands
792 .Qq Ar id Ns Cm :set_label Ar string
793 replaces the expander label text with
794 .Ar string .
796 .Qq Ar id Ns Cm :set_expanded Brq Cm 0 |  1
797 hides
798 .Pq Cm 0
799 the child widget, or makes it visible
800 .Pq Cm 1 .
801 .It Feedback
802 none
804 .Ss GtkFileChooserButton
805 .Bl -tag -width "commands "
806 .It Commands
807 .Qq Ar id Ns Cm :set_filename Ar path
808 preselects
809 .Ar path
810 to the extent it exists.
811 .It Feedback
812 .Qq Ar id Ns Cm \&:file Ar pathname
813 if the selection has changed.
815 .Ss GtkFileChooserDialog
817 .Cm GtkFileChooserDialog
818 with id
819 .Ar foo
820 will be invoked by a
821 .Sx GtkMenuItem
822 or a
823 .Sx GtkImageMenuItem
824 with id
825 .Ar foo Ns Cm _invoke .
828 .Cm GtkFileChooserDialog
829 should have an
830 .Sq OK
831 .Sx GtkButton
832 with id
833 .Ar foo Ns Cm _ok
834 .Po Cm main_ok
835 if the dialog is the sole window of the GUI and therefore named
836 .Cm main
837 .Pc .
840 .Cm GtkFileChooserDialog
841 may have a
842 .Sq Cancel
843 .Sx GtkButton
844 with id
845 .Ar foo Ns Cm _cancel
846 .Po Cm main_cancel
847 if the dialog is the sole window of the GUI and therefore named
848 .Cm main
849 .Pc .
852 .Cm GtkFileChooserDialog
853 may have an
854 .Sq Apply
855 .Sx GtkButton
856 with id
857 .Ar foo Ns Cm _apply
858 .Po Cm main_apply
859 if the dialog is the sole window of the GUI and therefore named
860 .Cm main
861 .Pc .
862 .Bl -tag -width "commands "
863 .It Commands
864 .Qq Ar id Ns Cm :set_filename Ar path
865 preselects
866 .Ar path
867 to the extent it exists.
869 .Qq Ar id Ns Cm :set_current_name Ar string
870 makes
871 .Ar string
872 the suggested filename, which may not yet exist.
873 .Ar string
874 should either resemble an absolute path, or the
875 .Ar directory
876 must be set separately by
877 .Ar id Ns Cm :set_filename Ar directory .
879 .Qq Ar id Ns Cm :set_title Ar string
880 replaces the text in the title bar with
881 .Ar string .
883 .Qq Ar id Ns Cm :resize Bq Ar width height
884 changes the size of the dialog window to
885 .Ar width
887 .Ar height
888 pixels if specified, or to the default size.
890 .Qq Ar id Ns Cm :move Ar x y
891 moves the dialog window to position
892 .Pq Ar x , y .
894 .Qq Ar id Ns Cm :fullscreen
896 .Qq Ar id Ns Cm :unfullscreen
897 switch fullscreen mode on and off.
898 .It Feedback
899 .Qq Ar id Ns Cm :file Ar pathname
900 and/or
901 .Qq Ar id Ns Cm :folder Ar pathname
903 .Qq Ar id Ns Cm \&:closed
904 if the
905 .Cm GtkFileChooserDialog
906 window was closed by the window manager.
908 .Ss GtkFontButton
909 .Bl -tag -width "commands "
910 .It Commands
911 .Qq Ar id Ns Cm :set_font_name Ar fontname
912 preselects the font.
913 .It Feedback
914 .Qq Ar id Ns Cm \&:font Ar fontname
916 .Ss GtkFrame
917 .Bl -tag -width "commands "
918 .It Commands
919 .Qq Ar id Ns Cm :set_label Ar text
920 replaces the frame label text with
921 .Ar string .
922 .It Feedback
923 none
925 .Ss GtkImage
926 .Bl -tag -width "commands "
927 .It Commands
928 .Qq Ar id Ns Cm :set_from_icon_name Ar icon-name
929 replaces the image with one of the standard icons.
931 .Qq Ar id Ns Cm :set_from_file Ar path
932 replaces the image by the one found at
933 .Ar path Ns .
934 .It Feedback
935 none
937 .Ss GtkLabel
938 .Bl -tag -width "commands "
939 .It Commands
940 .Qq Ar id Ns Cm :set_text Ar string
941 replaces the label text with
942 .Ar string .
943 .It Feedback
944 none
946 .Ss GtkMenuItem, GtkImageMenuItem
947 .Bl -tag -width "commands "
948 .It Commands
949 none
950 .It Feedback
952 .Cm GtkMenuItem
954 .Cm GtkImageMenuItem
955 with id
956 .Ar foo Ns Cm _invoke
957 will invoke the
958 .Sx GtkDialog
960 .Sx GtkFileChooserDialog
961 with id
962 .Ar foo
963 if it exists.
964 If there isn't any dialog attached to the
965 .Cm GtkMenuItem ,
966 it reports
967 .Qq Ar id Ns Cm \&:active Ar label .
969 .Ss GtkNotebook
970 .Bl -tag -width "commands "
971 .It Commands
972 .Qq Ar id Ns Cm :set_current_page Ar n
973 switches to zero-based page number
974 .Ar n .
975 .It Feedback
976 none
978 .Ss GtkPrintUnixDialog
979 .Bl -tag -width "commands "
980 .It Commands
981 .Qq Ar id Ns Cm :print Ar file.ps
982 opens the print dialog.
983 Pressing the
984 .Ql Print
985 button sends
986 .Ar file.ps
987 to the printer the user selected in the dialog.
988 .It Feedback
989 .Qq Ar id Ns Cm \&:closed
990 if the
991 .Cm GtkPrintUnixDialog
992 window was closed by the window manager.
994 .Ss GtkProgressBar
995 .Bl -tag -width "commands "
996 .It Commands
997 .Qq Ar id Ns Cm :set_fraction Ar x
998 moves the progress bar to
999 .Ar x
1000 .Pq between 0 and 1 .
1002 .Qq Ar id Ns Cm :set_text Bq Ar string
1003 replaces the text of the progress bar with
1004 .Ar string .
1005 Default is the progress percentage.
1006 .It Feedback
1007 none
1009 .Ss GtkRadioButton
1010 .Bl -tag -width "commands "
1011 .It Commands
1012 .Qq Ar id Ns Cm :set_active 1
1013 switches the button on.
1014 All other buttons of the same group will go off automatically.
1016 .Qq Ar id Ns Cm :set_label Ar string
1017 replaces the button text with
1018 .Ar string .
1019 .It Feedback
1020 .Qq Ar id Ns Cm \&:1
1021 if switched on, or
1022 .Qq Ar id Ns Cm \&:0
1023 otherwise.
1025 .Ss GtkScale
1026 .Bl -tag -width "commands "
1027 .It Commands
1028 .Qq Ar id Ns Cm :set_value Ar x
1029 moves the slider to value
1030 .Ar x .
1032 .Qq Ar id Ns Cm :set_fill_level Bq Ar x
1033 moves the fill level indicator to value
1034 .Ar x .
1035 Default is hiding the fill level indicator.
1037 .Qq Ar id Ns Cm :set_range Ar min max
1038 changes the range.
1040 .Qq Ar id Ns Cm :set_increments Ar step page
1041 sets the steps the slider moves while pressing arrow keys and
1042 .Ql Page_Up Ns
1043 .Pf / Ql Page_Down ,
1044 respectively.
1045 .It Feedback
1046 .Qq Ar id Ns Cm \&:value Ar number
1048 .Ss GtkScrolledWindow
1049 .Bl -tag -width "commands "
1050 .It Commands
1051 .Qq Ar id Ns Cm :hscroll Ar position
1053 .Qq Ar id Ns Cm :vscroll Ar position
1054 scroll
1055 .Ar position
1056 to the left or top edge of the
1057 .Cm GtkScrolledWindow ,
1058 respectively.
1060 .Qq Ar id Ns Cm :hscroll_to_range Ar pos0 pos1
1062 .Qq Ar id Ns Cm :vscroll_to_range Ar pos0 pos1
1063 scroll, if necessary, the range between
1064 .Ar pos0
1066 .Ar pos1
1067 into the
1068 .Cm GtkScrolledWindow .
1069 If the range is greater than the window, the initial part of the range
1070 will be visible.
1071 .It Feedback
1072 none
1074 .Ss GtkSocket
1075 .Cm GtkSocket
1076 may be unsupported by Glade, but its definition can be inserted
1077 manually into the GtkBuilder
1078 .Pq Pa .ui
1079 file:
1080 .Bd -literal -offset indent
1081 <child>
1082   <object class="GtkSocket" id="socket1">
1083     <property name="visible">True</property>
1084     <property name="can_focus">True</property>
1085   </object>
1086   <packing>
1087     <property name="expand">True</property>
1088     <property name="fill">True</property>
1089     <property name="position">1</property>
1090   </packing>
1091 </child>
1093 .Bl -tag -width "commands "
1094 .It Commands
1095 .Qq Ar id Ns Cm :id
1096 requests a feedback message containing the socket
1097 .Ar xid .
1098 .It Feedback
1099 .Qq Ar id Ns Cm :id Ar xid
1100 can be used by another process to XEmbed its widgets into the
1101 .Cm GtkSocket .
1103 .Qq Ar id Ns Cm :plug-added ,
1105 .Ar id Ns
1106 .Cm :plug-removed
1107 .Qc .
1108 Notification that the other process has inserted its widgets into or
1109 removed them from the
1110 .Cm GtkSocket .
1112 .Ss GtkSpinButton
1113 .Bl -tag -width "commands "
1114 .It Commands
1115 .Qq Ar id Ns Cm :set_text Ar string
1116 sets the selected value to
1117 .Ar string .
1119 .Qq Ar id Ns Cm :set_range Ar min max
1120 changes the range.
1122 .Qq Ar id Ns Cm :set_increments Ar step page
1123 sets the steps the value changes while pressing arrow keys/left mouse
1124 button, and
1125 .Ql Page_Up Ns
1126 .Pf / Ql Page_Down Ns
1127 /middle mouse button,
1128 respectively.
1129 .It Feedback
1130 .Qq Ar id Ns Cm \&:text Ar text
1132 .Ss GtkSpinner
1133 .Bl -tag -width "commands "
1134 .It Commands
1135 .Qq Ar id Ns Cm :start
1137 .Qq Ar id Ns Cm :stop
1138 start and stop the spinner.
1139 .It Feedback
1140 none
1142 .Ss GtkStatusbar
1143 The context parameter
1144 .Ar c
1145 is an arbitrary non-whitespace string.
1146 .Bl -tag -width "commands "
1147 .It Commands
1148 .Qq Ar id Ns Cm :push_id Ar c string ,
1149 .Qq Ar id Ns Cm :push Ar string
1150 associate
1151 .Ar string
1152 with context parameter
1153 .Ar c
1155 .Ql 0 ,
1156 respectively, and display it in the statusbar.
1158 .Qq Ar id Ns Cm :pop_id Ar c ,
1159 .Qq Ar id Ns Cm :pop
1160 remove the latest entry associated with context parameter
1161 .Ar c
1163 .Ql 0 ,
1164 respectively, from the statusbar.
1166 .Qq Ar id Ns Cm :remove_all_id Ar c ,
1167 .Qq Ar id Ns Cm :remove_all
1168 remove the entries associated with context parameter
1169 .Ar c
1171 .Ql 0 ,
1172 respectively, from the statusbar.
1173 .It Feedback
1174 none
1176 .Ss GtkSwitch
1177 .Bl -tag -width "commands "
1178 .It Commands
1179 .Qq Ar id Ns Cm :set_active Brq Cm 0 | 1
1180 turns the switch off
1181 .Pq Cm 0
1182 or on
1183 .Pq Cm 1 .
1184 .It Feedback
1185 .Qq Ar id Ns Cm \&:1
1186 if switched on, or
1187 .Qq Ar id Ns Cm \&:0
1188 otherwise.
1190 .Ss GtkTextView
1191 There should be a dedicated
1192 .Sx GtkButton
1193 for sending (parts of) the text.
1194 If the id of the
1195 .Cm GtkTextView
1197 .Ar foo ,
1199 .Sx GtkButton
1200 with id
1201 .Ar foo Ns Cm _send_text
1202 will send the content of the
1203 .Cm GtkTextView ;
1205 .Sx GtkButton
1206 with id
1207 .Ar foo Ns Cm _send_selection
1208 will send the highlighted part the
1209 .Cm GtkTextView .
1210 .Bl -tag -width "commands "
1211 .It Commands
1212 .Qq Ar id Ns Cm :set_text Ar string
1213 replaces the user-editable text with (potentially empty)
1214 .Ar string Ns .
1216 .Qq Ar id Ns Cm :delete
1217 deletes the text.
1219 .Qq Ar id Ns Cm :insert_at_cursor Ar string
1220 inserts
1221 .Ar string
1222 at cursor position.
1224 .Qq Ar id Ns Cm :place_cursor Brq Ar position | Cm end
1225 places the text cursor at
1226 .Ar position
1227 or at the end of the text.
1229 .Qq Ar id Ns Cm :place_cursor_at_line Ar line
1230 places the text cursor at the beginning of
1231 .Ar line .
1233 .Qq Ar id Ns Cm :scroll_to_cursor
1234 scrolls to the cursor position if necessary.
1236 .Qq Ar id Ns Cm :save Ar file
1237 stores in
1238 .Ar file
1241 command containing the text.
1242 .It Feedback
1243 .Qq Ar button_id Ns Cm :text Ar text ,
1244 .Ar button_id
1245 being the id of the
1246 .Sx GtkButton .
1247 Line endings in
1248 .Ar text
1249 are replaced by
1250 .Cm \en ,
1251 and backslashes are replaced by
1252 .Cm \e\e .
1254 .Ss GtkToggleButton
1255 .Bl -tag -width "commands "
1256 .It Commands
1257 .Qq Ar id Ns Cm :set_active Brq Cm 0 | 1
1258 switches the button off
1259 .Pq Cm 0
1260 or on
1261 .Pq Cm 1 .
1263 .Qq Ar id Ns Cm :set_label Ar string
1264 replaces the button text with
1265 .Ar string .
1266 .It Feedback
1267 .Qq Ar id Ns Cm \&:1
1268 if switched on, or
1269 .Qq Ar id Ns Cm \&:0
1270 otherwise.
1272 .Ss GtkTreeView
1274 can deal with columns of type
1275 .Cm gboolean , gint , guint , glong , gulong , gint64 , guint64 , gfloat , gdouble ,
1277 .Cm gchararray .
1279 .Ar row
1281 .Ar column
1282 refer to the underlying model
1283 .Cm ( GtkListStore
1285 .Cm GtkTreeStore ) .
1286 .Ar row
1287 is a sequence of one or more colon-separated integers, e.g.
1288 .Ql 3
1290 .Ql 0:0:1 .
1291 .Bl -tag -width "commands "
1292 .It Commands
1293 .Qq Ar id Ns Cm :set Ar row column data
1294 replaces the content at
1295 .Pq Ar row , column
1296 with
1297 .Ar data
1298 (which should be compatible with the type of
1299 .Ar column ) .
1300 If necessary, new tree nodes are created to obtain the minimal tree
1301 structure needed to support
1302 .Ar row .
1304 .Qq Ar id Ns Cm :insert_row Brq Ar row Bo Cm as_child Bc | Cm end
1305 inserts a new, empty row; either as a sibling of
1306 .Ar row
1307 at position
1308 .Ar row ,
1309 or as a child of
1310 .Ar row ,
1311 or at the end of the list, respectively.
1313 .Qq Ar id Ns Cm :move_row Ar origin Brq Ar destination | Cm end
1314 moves the row at
1315 .Ar origin
1316 within its current level to
1317 .Ar destination
1318 or to the end.
1320 .Qq Ar id Ns Cm :remove_row Ar row
1321 removes the row at position
1322 .Ar row .
1324 .Qq Ar id Ns Cm :clear
1325 removes all rows.
1327 .Qq Ar id Ns Cm :expand Ar row
1328 expands one level of the subtree below
1329 .Ar row .
1331 .Qq Ar id Ns Cm :expand_all Bq Ar row
1332 expands the subtree below
1333 .Ar row ,
1334 or the whole tree.
1336 .Qq Ar id Ns Cm :collapse Bq Ar row
1337 collapses the subtree below
1338 .Ar row ,
1339 or the whole tree.
1341 .Qq Ar id Ns Cm :set_cursor Bq Ar row
1342 sets the cursor to
1343 .Ar row ,
1344 or unsets it.
1346 .Qq Ar id Ns Cm :scroll Ar row column
1347 scrolls the cell at
1348 .Pq Ar row , column
1349 into view.
1351 .Qq Ar id Ns Cm :save Ar file
1352 stores the content of the underlying model as a sequence of
1354 commands into
1355 .Ar file .
1356 .It Feedback
1357 .Qq Ar id Ns Cm \&:clicked
1359 .Qq Ar id Ns Cm \&: Ns Ar column_type row column value ,
1360 one message per cell in the underlying model for each selected row; or
1362 .Qq Ar id Ns Cm \&: Ns Ar column_type row column new_value ,
1363 if the cell at
1364 .Pq Ar row , column
1365 has been edited.
1367 .Ss GtkTreeViewColumn
1368 .Bl -tag -width "commands "
1369 .It Commands
1370 none
1371 .It Feedback
1372 .Qq Ar id Ns Cm \&:clicked
1374 .Ss GtkWindow
1375 .Bl -tag -width "commands "
1376 .It Commands
1377 .Qq Ar id Ns Cm :set_title Ar string
1378 replaces the text in the title bar with
1379 .Ar string .
1381 .Qq Ar id Ns Cm :resize Bq Ar width height
1382 changes the window size to
1383 .Ar width
1385 .Ar height
1386 pixels if specified, or to the default size.
1388 .Qq Ar id Ns Cm :move Ar x y
1389 moves the window to position
1390 .Pq Ar x , y .
1392 .Qq Ar id Ns Cm :fullscreen
1394 .Qq Ar id Ns Cm :unfullscreen
1395 switch fullscreen mode on and off.
1396 .It Feedback
1397 .Qq Ar id Ns Cm \&:closed
1398 if the
1399 .Cm GtkWindow
1400 was closed by the window manager.
1402 .Sh EXIT STATUS
1403 .Ex -std
1404 .Sh EXAMPLES
1405 .Ss Discovering Pipeglade Interactively
1406 Suppose the interface in
1407 .Pa ./pipeglade.ui
1408 has a
1409 .Sx GtkLabel Ql label1
1410 and a
1411 .Sx GtkButton Ql button1 .
1412 After invoking
1414 .Dl pipeglade
1416 and clicking the
1417 .Sx GtkButton , Ql button1:clicked
1418 will be reported on the terminal.
1419 Typing
1421 .Dl label1:set_text The Button
1423 will change the text shown on the label into
1424 .Ql The Button .
1425 .Ss One-Shot File Dialog
1426 Suppose the interface in
1427 .Pa ./simple_open.ui
1428 contains a
1429 .Sx GtkFileChooserDialog
1430 with an
1431 .Sq OK
1432 .Sx GtkButton
1433 whose id is
1434 .Ql main_ok .
1435 Invoking
1437 .Dl pipeglade -u simple_open.ui
1439 will open the dialog; pressing
1440 .Sq OK
1441 will close it after sending the selected filename to
1442 .Va stdout .
1443 .Ss One-Shot User Notification
1444 If the interface in
1445 .Pa ./simple_dialog.ui
1446 contains a
1447 .Sx GtkLabel Ql label1 ,
1448 then
1449 .Bd -literal -offset indent
1450 pipeglade -u simple_dialog.ui <<< \e
1451     "label1:set_text NOW READ THIS!"
1453 will set the label text accordingly and wait for user input.
1454 .Ss Continuous Input
1455 The following shell command displays a running clock:
1456 .Bd -literal -offset indent
1457 while true; do
1458     echo "label1:set_text `date`";
1459     sleep 1;
1460 done | pipeglade -u simple_dialog.ui
1462 .Ss Continuous Input and Output
1463 The following shell script fragment sets up
1465 for continuous communication with another program,
1466 .Pa main_prog :
1467 .Bd -literal -offset indent
1468 pipeglade -i in.fifo -o out.fifo -b
1469 main_prog <out.fifo >in.fifo
1471 .Sh SEE ALSO
1472 .Xr dialog 1 ,
1473 .Xr glade 1 ,
1474 .Xr gxmessage 1 ,
1475 .Xr kdialog 1 ,
1476 .Xr whiptail 1 ,
1477 .Xr xmessage 1 ,
1478 .Xr zenity 1
1479 .Sh AUTHOR
1481 was written by
1482 .An Bert Burgemeister
1483 .Aq Mt trebbu@googlemail.com .
1484 .Sh BUGS
1485 Due to what appears to be a bug in cairo v1.14.0,
1487 used with this library version occasionally crashes on
1488 .Cm GtkDrawingArea
1489 commands.