1GOB2(1) General Commands Manual GOB2(1)
2
3
4
6 GOB2 - The GObject Builder
7
9 gob2 [ option ] ... file
10
11
13 GObject Builder is a simple preprocessor for easily creating GObject
14 objects. It does not parse any C code and ignores any C errors. It is
15 in spirit similar to things like lex or yacc. In some ways it also
16 resembles java. But it is really just a simple preprocessor for creat‐
17 ing GObjects for use in C or C++ and it is not a programming language.
18
19
21 -? -h --help
22 Display a simple help screen.
23
24 --version
25 Display version information
26
27 -w --exit-on-warn
28 Exit with an error code even when you encounter a warning.
29
30 --no-exit-on-warn
31 Exit with an error only on errors, not on warnings, this is the
32 default.
33
34 --for-cpp
35 Generate C++ code.
36
37 --no-extern-c
38 Never add the extern "C" to the header.
39
40 --no-gnu
41 Never generate any code with GNU C extensions. However all the
42 GNU C extensions are always wrapped in #ifdef __GNUC__, so code
43 using them compiles correctly even on non-GNU compilers. This
44 option is for purists only. (using GNU extensions some warnings
45 are eliminated, some ugly hacks and there is better argument
46 type safety, so it´s good to use them)
47
48 --no-touch
49 Don´t touch output files unless they really changed (implies
50 --no-touch-headers). Be careful with automake, see section PRE‐
51 VENTING SPURIOUS BUILDS.
52
53 --no-touch-headers
54 Don´t touch the generated header file unless it really changed,
55 this avoids spurious rebuilds, but can confuse some make systems
56 (automake in particular), so it is not enabled by default. Pri‐
57 vate header is still touched even if unchanged however.
58
59 --always-private-header
60 Always create a <basename>-private.h file, even if it would be
61 empty.
62
63 --ondemand-private-header
64 Create the private header only if it would have something in it,
65 that is, if there are some private data members or protected
66 methods. This is the default.
67
68 --no-private-header
69 Never create a private header file. If we use any private data
70 members, define the private data structure at the point in the
71 .c source where the class definition begins.
72
73 --m4 Preprocess source with m4. Following args will be passed to m4.
74
75 --m4-dir
76 Print directory that will be searched for m4 files.
77
78 -n --no-write
79 Do not write any output files, just check syntax of the input
80 file.
81
82 --no-lines
83 Do not print out the ´#line´ statements into the output. Useful
84 for debugging the auto-generated generated code.
85
86 --no-self-alias
87 Do not create the Self and SelfClass type aliases and the SELF,
88 IS_SELF and SELF_CLASS macros.
89
90 --no-kill-underscores
91 Do not remove the initial underscore from method names.
92
93 --always-private-struct
94 Always include the private pointer in the public header file.
95 This is useful for files which are part of a library and you
96 want to reserve the right to add some private data members with‐
97 out breaking binary compatibility.
98
99 -o --output-dir
100 The directory into which output should be placed.
101
102 --file-sep[=c]
103 Replace default `-´ file name separator. If no separator char‐
104 acter is given then none is used. Only one character can be
105 used.
106
107
109 Because we need to parse out different parts of the typename, sometimes
110 you need to specify the typename with some special syntax. Types are
111 specified in capitalized form and words are separated by `:´. The
112 first word of the type (which can be empty) is the "namespace". This
113 fact is for example used for the type checking macro and the type
114 macro. For "Gtk:New:Button", the macros will be GTK_IS_NEW_BUTTON and
115 GTK_TYPE_NEW_BUTTON. This colon separated format of typenames is used
116 in the class declaration header and for method argument types.
117
118
120 The filenames are created from the typename. The words are separated
121 by `-´ (this can be changed with --file-sep option) and all in lower
122 case. For example for an object named "Gtk:New:Button", the files are
123 gtk-new-button.c and gtk-new-button.h. If you are using C++ mode, the
124 output .c file will in fact be a .cc file. If you have any private
125 data members, a private header file will also be created, called <base‐
126 name>-private.h (for the example above it would be gtk-new-button-pri‐
127 vate.h). The public header file is created to be human readable and to
128 be used as a reference to the object. The .c source file is not cre‐
129 ated as a human readable source and is littered with #line statements,
130 which make the compiler attempt to point you to the right line in your
131 .gob file in case of parsing errors. The output should not be edited
132 by hand, and you should only edit the .gob file.
133
134
136 To include some code directly in the output C file begin with ´%{´ on
137 an empty line and end the code with a ´%}´ on an empty line. These
138 sections will appear in the output files in the order they are given.
139 There are several other sections to which you can put code. You can
140 put it in the ´header´ section (which can be abbreviated ´h´) and it
141 will go into the public header file. You can also put it in the ´pri‐
142 vateheader´ section (abbreviated ´ph´) which will make the code go into
143 the private header file. Sometimes you want some code (other includes)
144 to appear before the extern "C" and the protecting define. To do this
145 you can put them into the ´headertop´ (or ´ht´) section. You may wish
146 to include code or comments in all the files, which you can do by
147 putting them into the ´all´ (or ´a´) section. Similarly, code you wish
148 to appear at the top of all files go in the ´alltop´ (or ´at´) section.
149 For example:
150
151 %alltop{
152 /* this will be on top of all output files */
153 %}
154
155 %headertop{
156 /* this will be on top of the public header */
157 %}
158
159 %privateheader{
160 /* this will go into the private header file */
161 %}
162
163 %h{
164 /* will be included in the header */
165 void somefunc(int i);
166 %}
167
168 %a{
169 /* will be included in all files */
170 %}
171
172 %{
173 /* will be included in the C file */
174 void somefunc(int i)
175 {
176 /* some code */
177 }
178 %}
179
180
181
183 Gob will automatically include the class header file at the top of the
184 .c source file. If you wish to include it somewhere else, put the
185 include into some %{ %} section above the class definition, and gob
186 will not include it automatically. This way you can avoid circular
187 includes and control where in the file do you want to include the
188 header.
189
190 If you made any data members private, gob will also create a source
191 file that will be called <basename>-private.h. Same rule as above
192 applies for this just as it does for the regular header file. If you
193 do explicitly include the regular header file, you should always
194 include this private header file below it. That is, if you use any
195 private data members. If you don´t, the private header file automati‐
196 cally includes the public header file, and thus the public header file
197 will be indirectly included at the very top of the file.
198
199
201 There can be only one class per input file. Defining a class is sort
202 of like in Java, you define the class and write inline code directly
203 into the class definition. To define a class you need to specify the
204 new object name and the name of the object from which it is derived
205 from, such as this "class <new type> from <parent type> { <class code>
206 }". For example:
207
208 class Gtk:New:Button from Gtk:Button {
209 <class code>
210 }
211
212
213 To make an abstract class (to pass G_TYPE_FLAG_ABSTRACT) add
214 ´(abstract)´ before the curly braces above. This works since version
215 2.0.13.
216
217
219 There are five types of data members. Three of them are normal data
220 members, one is class wide (global) in scope and one is a virtual one,
221 usually linked to a normal data member or a class wide data member.
222 The three normal data members are public, protected and private. Pub‐
223 lic and protected are basically just entries in the object structure,
224 while private has it´s own dynamically allocated private structure.
225 Protected members are always put after the public one in the structure
226 and are marked protected in the header file. There is only one identi‐
227 fier allowed per typename unlike in normal C. Example:
228
229 public int i;
230 private GtkWidget *h;
231 protected long k;
232
233
234 Public and protected data members are accessed normally as members of
235 the object struct. Example where ´i´ is as above a public data member:
236
237 object->i = 1;
238
239
240 The private data members are defined in a structure which is only
241 available inside the .c file, or by including a private header file.
242 You must access them using the structure _priv. Example where ´h´ is
243 the private data member (as in the above example):
244
245 object->_priv->h = NULL;
246
247 The _priv structure is defined in the <basename>-private.h. This file
248 is automatically included if you don´t include it yourself. You should
249 always explicitly include it in your .gob file if you explicitly also
250 include the main header file. The reason it is a separate header file
251 is that you can also include it in other places that need to access
252 this objects private data, such as if you have the majority of func‐
253 tionality of an object in a separate .c file. Or if a derived object
254 needs to access the protected methods.
255
256 In case you use the --no-private-header option, no private header file
257 is created and you can only access the _priv pointer below the class
258 definition in the .gob file.
259
260 Also note that this structure is dynamically allocated, and is freed in
261 the finalize handler. If you override the finalized handler, your code
262 will be run first and only then will the _priv structure be freed.
263
264 Classwide data members:
265
266 Sometimes you want a datamember to be shared by all objects. You then
267 need the "classwide" scope keyword. So for example the following adds
268 a global member foo:
269
270 classwide int foo;
271
272 To access the member you do the standard voodoo of getting the class
273 from the object and casting it to your class pointer. Thus the follow‐
274 ing would work:
275
276 SELF_CLASS(GTK_OBJECT(object)->klass)->foo = 20;
277
278
279 Automatic Initialization:
280
281 You can automatically initialize the public private and protected data
282 members without having to add an init method. The advantage here is
283 that initialization is kept close to the definition of the data member
284 and thus it´s easier to check. To do this, just add a ´=´ followed by
285 a number or a token. It is also possible to include arbitrary C code
286 for more elaborate initializations by putting it all in curly braces.
287 Note that the curly braces will not be printed into the output, but
288 since gob does not C parsing it needs them to figure out where the C
289 code ends. The code will be inserted into the init method, above the
290 user defined body. So for example the following will initialize an
291 integer to -1 and a string with a newly allocated string of "hello".
292
293 public int foo = -1;
294 private char *bar = {g_strdup("hello")};
295
296
297 Automatic Destruction:
298
299 Most data stored as pointers needs to have a function called when the
300 object is finalized to either free the data. Gob will let you define a
301 function to be called on the data the object is finalized. This is
302 achieved by putting ´destroywith´ followed by a function name after the
303 variable definition. It is only called if the data you defined this on
304 is not NULL, so you cans specify functions which do not handle NULL.
305 It is very much like the GDestroyNotify function used in GTK+ and glib
306 in many places. Unlike many other places, gob will not enforce any
307 kind of type safety here so be a little bit more careful. Any function
308 you give it will be called as a "void function(void *)". It will in
309 fact be cast into such a form before called. This is to avoid spurious
310 warnings for gtk calls to subclass methods. The function needs not be
311 of that form exactly, it just has to take one argument which is the
312 pointer to the data. You should also not define this on any non-
313 pointer data as the results may be undefined. Example:
314
315 public char *foo = {g_strdup("bar")}
316 destroywith g_free;
317
318 Note that the function name you give must be a real function and not
319 macro. Also note that this is always called in the "finalize" method
320 of GObject. It is always called after any user defined body of the
321 finalize handler.
322
323 Sometimes you may want to run arbitrary code on destruction. While
324 this can be perfectly well done in the finalize handler. Depending on
325 the style you may want to include all destruction/initialization code
326 together with the definition of the data member. Thus you may want to
327 put arbitrary code which will then be inserted into the "finalize"
328 method of GObject. This can be done with the "destroy" keyword fol‐
329 lowed by arbitrary code in curly braces. Inside this code a macro
330 called VAR will be define which refers to your variable. So for exam‐
331 ple destroying a GString can be either done with a helper routine or
332 the following code:
333
334 public GString *string = {g_string_new(NULL)}
335 destroy {
336 if(VAR) g_string_free(VAR, TRUE);
337 };
338
339 The thing to remember with these is that there are many ways to do this
340 and you´d better be consistent in your code in how you use the above
341 things. Also defining a helper routine that will do the destruction
342 will be a nicer thing to do if that´s a possibility. The "destroy"
343 keyword with code does take up more space in the file and it may become
344 more cluttered.
345
346 The data is zeroed out after being destroyed. This is to make debug‐
347 ging easier in case your code might try to access an already finalized
348 object. In case you have overridden the finalize method, your code
349 will be run first and only then will the destructors be called. You
350 should not however make any assumptions about the order at which the
351 destructors are called. If you have interdependencies between destruc‐
352 tors for different data members, you will have to do this in your own
353 finalize override function.
354
355 Automatic Unreffing:
356
357 This is very much like the automatic destruction, but is instead run in
358 the dispose method (it is among other places called from the "destroy"
359 method of GtkObject). All data and other objects that you need to
360 unref should be done here, and not at finalize time. The semantics are
361 otherwise the same as for the "destroywith" and "destroy" keywords,
362 except that you use "unrefwith" and "unref".
363
364 public G:Object *foo = NULL
365 unrefwith g_object_unref;
366 public G:Object *bar = NULL
367 unref {
368 g_object_unref (VAR);
369 };
370
371
372
374 The fourth type of a data member a property type. It is a named data
375 member which is one of the features of the GObject system. It just
376 defines a way to get and set some data, but you have to take care of
377 storing that data somewhere. So it is normal to also have a normal
378 private (or public) data member where you store the real data. You
379 normally need to define a get and a set handler. They are fragments of
380 C code that will be used to get the value or set the value of the argu‐
381 ment. Inside them you can use the define VAL to which you assign the
382 data or get the data. You should treat this VAL as a GValue which
383 stores the data of the correct type. You can also use the identifier
384 "self" as pointer to the object instance. The type is defined as one
385 of the GObject type enums, but without the G_TYPE_ prefix. There are
386 also some attributes of a property which you can set. For example the
387 following is a definition of an integer property ´height´ which will be
388 synchronized with a private integer data member also of the name
389 ´height´.
390
391 private int height;
392 property INT height
393 (nick = _("Short nickname"),
394 blurb = _("Long description"),
395 minimum = 10,
396 maximum = 200,
397 default_value = 100)
398 set { self->_priv->height = g_value_get_int (VAL); }
399 get { g_value_set_int (VAL, self->_priv->height); };
400
401
402 The attributes are really optional though you should at least set some
403 of them. All property types have a ´nick´ and a ´blurb´ attribute and
404 you should set those accordingly. This will make runtime querying the
405 object nicer as things such as gui editors and class browsers can be
406 more verbose about the class itself. You can use the ´_("string")´
407 notation instead of just "string", and that will mark the string for
408 translation.
409
410 Almost all types also have a ´default_value´ attribute which sets the
411 initial value of this property (on object initialization, the set han‐
412 dler will be run automatically with this value). This value will be
413 overriden if the user sets a value of this property on the call to
414 g_object_new.
415
416 All the numeric types (including CHAR) have ´minimum´ and ´maximum´
417 attributes which can restrict the range. If you do not specify these
418 the range will be the full range that the data type can handle.
419
420 Types such as UNICHAR and BOOLEAN only have the ´nick´, ´blurb´ and
421 ´default_value´ attributes.
422
423 The ENUM type has an ´enum_type´ attribute which is the exact type of
424 the enum. This is so that the property knows which exact type you can
425 set, rather then just knowing it is an enum. You should always create
426 an enum type specific for the enum itself (see section on the enum
427 types)
428
429 Similarly FLAGS type has a ´flags_type´ which again you should set to
430 the specific type of this flags data member.
431
432 There is a STRING type which has only the extra ´default_value´
433 attribute.
434
435 The OBJECT type is one of the types that doesn´t have a ´default_value´
436 and it only has an ´object_type´ attribute (in addition to nick and
437 blurb of course) that is the exact object type that this property
438 accepts. The object_type should be as a type, that is for example
439 ´Gtk:Button´.
440
441 There is a BOXED type which is a pointer which has a boxed type defined
442 (such that GObject knows how to copy and destroy this pointer). Here
443 you will need to specify the ´boxed_type´ attribute with the specific
444 type of the boxed pointer.
445
446 There is also a POINTER type, which has only the ´nick´ and ´blurb´
447 attributes. This is for storing arbitrary pointers. You should be
448 careful with this one, as GObject knows nothing about the data stored
449 at this pointer. It is somewhat like a ´void *´ type.
450
451 There is also the PARAM type for storing parameters with a ´param_type´
452 attribute.
453
454 You should notice that this list is pretty much like the list of
455 g_param_spec_* functions from gobject/gparamspecs.h, and the attributes
456 are like the arguments of those functions. Note however that value
457 array is NOT supported yet.
458
459 You can also specify extra flags, such as CONSTRUCT or CONSTRUCT_ONLY
460 using the ´flags´ attribute. You can specify multiple flags by oring
461 them together with ´|´. These flags correspond to the GParamFlags enu‐
462 meration except do not include the G_PARAM_ prefix. So for example to
463 define an enumeration property, which is a CONSTRUCT_ONLY property, we
464 could do the following:
465
466 private SomeEnumerationType foo;
467 property ENUM foo
468 (nick = _("Short nickname"),
469 blurb = _("Long description"),
470 enum_type = Some:Enumeration:Type
471 default_value = SOME_ENUMERATION_VALUE,
472 flags = CONSTRUCT_ONLY,
473 link);
474
475
476 The above example also gives an example of automatic linking to a stan‐
477 dard data memember. By including the attribute ´link´ a get and set
478 handlers will be automatically added without having to type them by
479 hand. This is useful for a vast majority data types that are just
480 linked to some standard data member and do not need to do anything
481 extra on get or set.
482
483 Another extra feature of properties is the possibility of automatically
484 exporing methods to get and set the property. That is without having
485 to use g_object_set and g_object_get. This is achieved by adding an
486 ´export´ attribute to the list of property attributes.
487
488 If you do not define a set or get handler, the property will automati‐
489 cally be only readable or writable as appropriate.
490
491 Gob2 also creates macros which can be used for type safe access to
492 properties through g_object_set and g_object_get. The macros are
493 called <type>_PROP_<argument name>(x) and <type>_GET_PROP_<argument
494 name>(x). They define both the string and the value part of the argu‐
495 ment. So for setting an argument of height, one would use (for object
496 type My:Object):
497
498 g_object_set (G_OBJECT (object),
499 MY_OBJECT_PROP_HEIGHT (7),
500 NULL);
501
502 And for getting, you would use:
503
504 int height;
505 g_object_get (G_OBJECT (object),
506 MY_OBJECT_GET_PROP_HEIGHT (&height),
507 NULL);
508
509 Note however that the type safety only works completely on GNU C com‐
510 pilers. The code will compile on other compilers but with minimal type
511 safety. For complete type safety it is useful to use the get/set meth‐
512 ods that are defined by using the ´export´ attribute.
513
514 To get bettery type safety on some of the property types, you can spec‐
515 ify the ´type´ attribute which will add casts where appropriate in code
516 dealing with this property. This is especially useful for POINTER and
517 OBJECT types. But even for others.
518
519 You can also override properties from parent objects (that is override
520 their implementation, not their attributes). Do this by adding the
521 special ´override´ attribute. For example if the parent object had a
522 ´height´ property then you could override it by
523
524 private int height;
525 property INT height
526 (override)
527 set { self->_priv->height = g_value_get_int (VAL); }
528 get { g_value_set_int (VAL, self->_priv->height); };
529
530 Overriding is supported since gob 2.0.10.
531
532
534 There is a whole array of possible methods. The three normal, "famil‐
535 iar" method types are private, protected and public. Public are
536 defined as normal functions with a prototype in the header file. Pro‐
537 tected methods are defined as normal methods (which you can call from
538 other files), but their prototype is placed in the private header file.
539 Private methods are defined as static functions with prototypes at the
540 top of the .c file. Then there are signal, virtual and override meth‐
541 ods. More on those later. You can also define init and class_init
542 methods with a special definition if you want to add code to the con‐
543 structors or you can just leave them out. You can also not define a
544 body for a method, by just using ´;´ instead of a body. This will
545 define an empty function. You can´t do this for non-void regular pub‐
546 lic, private or protected methods, however it is acceptable for non-
547 void virtual, signal and override methods.
548
549 Function argument lists:
550
551 For all but the init and class_init methods, you use the following syn‐
552 tax for arguments. The first argument can be just "self", which gob
553 will translate into a pointer to the object instance. The rest of the
554 arguments are very similar to normal C arguments. If the typename is
555 an object pointer you should use the syntax defined above with the
556 words separated by ´:´
557 <type> <argument id>
558 or
559 <type> <argument id> (check <list of checks>)
560
561 The checks are glib type preconditions, and can be the following:
562 "null", which tests pointers for being NULL, "type" which checks GTK+
563 object pointers for being the right type, "<test> <number>" which tests
564 numeric arguments for being a certain value. The test can be a
565 <,>,<=,>= != or ==. Example:
566
567 public int
568 foo (self,
569 int h (check > 0 < 11),
570 Gtk:Widget *w (check null type))
571
572
573 This will be the prototype of a function which has a self pointer as
574 the first argument, an integer argument which will be checked and has
575 to be more then 0 and less then 11, and a pointer to a GtkWidget object
576 instance and it is checked for being null and the type will also be
577 checked.
578
579 Error return:
580
581 Methods which have a return value, there also has to be something
582 returned if there is an error, such as if a precondition is not met.
583 The default is 0, casted to the type of the method. If you need to
584 return something else then you can specify an "onerror" keyword after
585 the prototype and after that a number, a token (an identifier) or a bit
586 of C code enclosed in braces {}. The braces will not be printed into
587 the output, they just delimit the string. For example:
588
589 public void * get_something (self, int i (check >= 0)) onerror NULL {
590 ...
591 }
592
593 The onerror value is also used in overrides that have a return value,
594 in case there isn´t a parent method, PARENT_HANDLER will return it.
595 More about this later.
596
597 Default return:
598
599 Some signal and virtual methods have a return type. But what happens
600 if there is no default handler and no one connects to a signal. GOB2
601 will normally have the wrappers return whatever you specify with
602 onerror or ´0´ if you haven´t specified anything. You can also specify
603 a default return value with the keyword ´defreturn´. It´s use is iden‐
604 tical to the use of onerror, and you can in fact use both at the same
605 time. Example
606
607 virtual int get_some_int (self) onerror -1 defreturn 10 ;
608
609 That is an empty virtual method (in C++ terms a pure virtual). If you
610 never specify any handler for it in the derived children it will just
611 return 10.
612
613 Constructor methods:
614
615 There are two methods that handle the construction of an object, init
616 and class_init. You define them by just using the init or class_init
617 keyword with an untyped argument in the argument list. The argument
618 will be usable in your function as a pointer to your object or class
619 depending if it´s init or class_init. For example:
620
621 init (self) {
622 /* initialize the object here */
623 self->a = 9;
624 self->b = 9;
625 }
626
627 class_init (class) {
628 /* initialize the class, this is rarely needed */
629 class->blah = NULL;
630 }
631
632 The class_init function is very rarely needed as all standard class
633 initialization is taken care of for you by gob itself. The init func‐
634 tion should on the other hand be used whenever you need to construct or
635 initialize anything in the object to put it into a sane state.
636
637 Virtual methods:
638
639 Virtual methods are basically pointers in the class structure, so that
640 one can override the method in derived methods. That is to implement
641 the method in a derived class, you must then use an override method
642 (more on those later). They can be empty (if you put ´;´ instead of
643 the C code). A wrapper will also be defined which makes calling the
644 methods he same as public methods. This type of method is just a lit‐
645 tle bit "slower" then normal functions, but not as slow as signals.
646 You define them by using "virtual" keyword before the prototype. If
647 you put the keyword "private" right after the "virtual" keyword, the
648 wrapper will not be a public method, but a private one. You can do the
649 same with "protected" to make a protected wrapper.
650
651 Signals:
652
653 Signals are methods to which the user can bind other handlers and over‐
654 ride the default handler. The default handler is basically the method
655 body. This is the most versatile and flexible type of a method and
656 also the slowest. You need to specify a whole bunch of things when you
657 define a signal. One thing is when the default handler will be run,
658 first or last. You specify that by "first" or "last" right after the
659 "signal" keyword. Then you need to define the GObject enum types
660 (again without the G_TYPE_ prefix). For that you define the return
661 types and the types of arguments after the "self" pointer (not includ‐
662 ing the "self" pointer). You put it in the following syntax "<return
663 type> (<list of arguments>)". If the return type is void, the type
664 should be "NONE", the same should be for the argument list. The rest
665 of the prototype is the same as for other method types. The body can
666 also be empty, and also there is a public method wrapper which you can
667 use for calling the signal just like a public method. Example:
668
669 signal first INT (POINTER, INT)
670 int do_something (self, Gtk:Widget *w (check null type), int length)
671 {
672 ...
673 }
674
675 or
676
677 signal last NONE (NONE) void foo (self);
678
679
680 If you don´t want the wrapper that emits the signal to be public, you
681 can include the keyword "private" after the "signal" keyword. This
682 will make the wrapper a normal private method. You can also make a
683 protected wrapper by using "protected" instead of "private".
684
685 If you don´t define a "first" or a "last", the default will be taken as
686 "last".
687
688 You can also add additional flags. You do this just like with the
689 argument flags, although this is probably very rare. These are the
690 G_SIGNAL_* flags, and you can add them without the G_SIGNAL_ prefix
691 into a parenthesis, just after the "signal" keyword. By default all
692 public signals are G_SIGNAL_ACTION.
693
694 Also gob2 creates a wrapper macros for typesafe signal connection.
695 That is you will be warned by the compiler if you pass a callback that
696 is not the correct prototype. This will again only warn you on gcc,
697 but it will compile without warning on another compiler. So as with
698 all the typesafety hacks in gob, it is better to test your objects
699 under gcc to get any warnings even if you are using a different com‐
700 piler in the end.
701
702 The methods that are created for you are:
703
704 <class_name>_connect__<signal_name> (<object>, <callback>, <data>)
705 <class_name>_connect_after__<signal_name> (<object>, <callback>, <data>)
706 <class_name>_connect_data__<signal_name> (<object>, <callback>, <data>,
707 <destroy_notify>, <flags>)
708
709
710 These three functions correspond to the g_signal_connect, g_signal_con‐
711 nect_after and g_signal_connect_data functions that you would normally
712 use, except they are for a specific signal. Also do note the two
713 underscores between the method name and the signal name. For example
714 to connect the signal "foo" on the object "Test:Object" you would do:
715
716 test_object_connect__foo (object, callback, data);
717
718
719 To use BOXED in the signal arguments you need to tell gob which type of
720 boxed argument you want to use. For this you can just add
721 BOXED_GTK_TYPE_STRING instead of BOXED. For example
722 BOXED_GTK_TYPE_TREE_ITER for GtkTreeIter. This works since version
723 2.0.13.
724
725 Override methods:
726
727 If you need to override some method (a signal or a virtual method of
728 some class in the parent tree of the new object), you can define and
729 override method. After the "override" keyword, you should put the
730 typename of the class you are overriding a method from. Other then
731 that it is the same as for other methods. The "self" pointer in this
732 case should be the type of the method you are overriding so that you
733 don´t get warnings during compilation. Also to call the method of the
734 parent class, you can use the PARENT_HANDLER macro with your arguments.
735 Example:
736
737 override (Gtk:Container) void
738 add (Gtk:Container *self (check null type), Gtk:Widget *wid (check null type))
739 {
740 /* some code here */
741 PARENT_HANDLER(self, wid);
742 }
743
744 If the function has a return value, then PARENT_HANDLER is an expres‐
745 sion that you can use. It will return whatever the parent handler
746 returned, or the "onerror" expression if there was no parent handler.
747
748 Method names:
749
750 Inside the code, aliases are set for the methods, so that you don´t
751 have to type the class name before each call, just type self_ instead
752 of the name of the class. So to call a method called blah, you would
753 use the name self_blah. Example:
754
755 private int
756 foo (self)
757 {
758 return self->len;
759 }
760
761 private int
762 bar (self, int i)
763 {
764 return self_foo (self) + i;
765 }
766
767
768
770 You should define a new method which should be a normal public method.
771 Inside this method, you can use the GET_NEW macro that is defined for
772 you and that will fetch a new object, so a fairly standard new method
773 would look like:
774
775 public GObject *
776 new (void) {
777 GObject *ret = GET_NEW;
778 return G_OBJECT (ret);
779 }
780
781
782 You should not a subtle peculiarity of the GObject system here. If
783 there is any code inside the G_OBJECT macro argument, it will get exe‐
784 cuted multiple times. This means that things such as G_OBJECT(GET_NEW)
785 would actually create 4 objects, leaking 3 of them. A good rule (as
786 with anywhere in C) is to be careful with all macros.
787
788
790 Self alias casts:
791
792 There are some standard casts defined for you. Instead of using the
793 full macros inside the .c file, you can use SELF, IS_SELF and
794 SELF_CLASS. Using these makes it easier to for example change class
795 names around.
796
797 Self alias types:
798
799 There are also the Self and SelfClass types inside your .c file. These
800 serve the same function as the above, they make it easier to type and
801 easier to change typenames around which can help a lot during prototyp‐
802 ing stage. However you should note that the Self type should not be
803 used in function prototypes as one of the arguments or as a return
804 value type. This is because this is a simple C typedef which is only
805 available inside your .c file and not in the header files. You can
806 disable both the self casting macros and the self type aliases by pass‐
807 ing --no-self-alias to gob.
808
809
811 Defines:
812
813 In your generated C file, you can use the defines GOB_VERSION_MAJOR
814 GOB_VERSION_MINOR and GOB_VERSION_PATCHLEVEL if you wish to for example
815 use a feature that is only available in some newer gob version. Note
816 however that you can only use these defines in the C code portions of
817 your .gob file, and #ifdef´s cannot span multiple functions. Check the
818 BUGS section for more on using the C preprocessor and gob.
819
820 Minimum version requires:
821
822 You can also make your .gob file require at least certain version of
823 gob. You do this by putting ´requires x.y.z´ (where x.y.z is the ver‐
824 sion number) outside of any C block, comment or class, usually you
825 should make this the first line in the file or close to the top. If
826 gob finds this and the version of gob used to compile the code is lower
827 then that listed in the require, gob will generate an error and exit.
828 For example to require that gob2 version 2.0.0 or higher be used to
829 compile a file, put this at the top of that file:
830
831 requires 2.0.0
832
833
834
836 You can create new GObject ENUM, FLAGS and GError types for use in your
837 classes easily. Glib includes some utilities for handling these, how‐
838 ever it may be cleaner to use the below specified way in your classes.
839 It also then doesn´t require any Makefile setup. Make sure this is
840 defined in the same section as the class, that is not in any of the
841 ´%?{´ ´%}´ sections.
842
843 You use the keywords ´enum´ ´flags´ and ´error´ as you would use the
844 ´class´ keyword. Then you give a prefix for the values in the enumera‐
845 tion. Then you define a list of values just like in C. For ´enum´
846 types you can also specify the values assigned to each string. Then
847 you specify the type in the standard gob style of specifying types.
848 Here are a few examples of all of these:
849
850 enum LAME_CLIENT {
851 IS_CONNECTED,
852 NONE = 9,
853 LAST
854 } Test:Enum;
855
856 flags BUGA_BUGA {
857 ONE,
858 TWO,
859 MANY,
860 } Some:Flags;
861
862 error TEST_OBJECT_ERROR {
863 BAD_THIS,
864 BAD_THAT
865 } Test:Object:Error;
866
867
868 This will for example define an enum that is equivalent to the follow‐
869 ing C code:
870
871 typedef enum {
872 LAME_CLIENT_IS_CONNECTED,
873 LAME_CLIENT_NONE = 9,
874 LAME_CLIENT_LAST
875 } TestEnum;
876
877
878
880 There is a C++ mode so that gob creates C++ compiler friendly files.
881 You need to use the --for-cpp argument to gob. This will make the gen‐
882 erated file have a .cc instead of a .c extension, and several things
883 will be adjusted to make it all work for a C++ compiler. One thing
884 that will be missing is an alias to the new method, as that clashes
885 with C++, so instead you´ll have to use the full name of the method
886 inside your code. Also note that gob does not use any C++ features,
887 this option will just make the generated code compile with a C++ com‐
888 piler.
889
890
892 The get_type is not really a method, but a function which initializes
893 your object. Recently objects appeared which require you to make a
894 custom get_type function. So it is possible to override this function.
895 To do so, just define a new public method called get_type, with no
896 arguments. Example:
897
898 public GType
899 get_type (void)
900 {
901 /* code goes here */
902 return some_type;
903 }
904
905
906
908 Currently gob will only allow you to implement interfaces (that is,
909 define new classes which implement an interface) and doesn´t yet have
910 support for making new interfaces, but this will be coming at some
911 point in the future.
912
913 To define a class that implements an interface add a class flag ´inter‐
914 face´ with the type name of the interface as an argument. Then to
915 implement a specific method of the interface, just add ´interface
916 <typename>´ before the method definition. The method can, and probably
917 should be, private.
918
919 The following example implements a new object, that implements the
920 Gtk:Tree:Model interface and implements the get_flags method of that
921 interface. Do note that except for standard (GTK+ and glib) specific
922 interfaces which seem to have a non-standard name for the interface
923 structure, the structure should end with and Iface, if you are imple‐
924 menting an interface. That is for example for the Gtk:Tree:Model, the
925 structure containing the table of methods should be named GtkTreeMod‐
926 elIface.
927 class Some:Object from G:Object
928 (interface Gtk:Tree:Model)
929 {
930 /* function implemented for the Gtk:Tree:Model interface */
931 interface Gtk:Tree:Model
932 private GtkTreeModelFlags
933 get_flags (Gtk:Tree:Model *self (check null type))
934 {
935 /* Here would be the implementation */
936 return (GtkTreeModelFlags)0;
937 }
938 }
939
940
941 If you want to implement multiple interfaces just list more class flag
942 lines as follows:
943
944 class Some:Object from G:Object
945 (interface Gtk:Tree:Model)
946 (interface Gtk:Editable)
947 {
948 /* ... */
949 }
950
951
952
954 If you want to build a BonoboObject class gob2 has direct support for
955 these. Just create a new object that derives from Bonobo:Object. Then
956 use a "BonoboObject" class flag with the interface name as an argument.
957 The interface name should be as you would type it in C, that is with
958 underscores as namespace separators. Then you add the methods (using
959 exact same names as in the idl file) and prepend those methods with a
960 BonoboObject keyword. For example imagine you have an interface
961 GNOME/Foo/SomeInterface, with a method fooBar that takes a single
962 string:
963
964 class Foo:Some:Interface from Bonobo:Object
965 (BonoboObject GNOME_Foo_SomeInterface) {
966
967 BonoboObject
968 private void
969 fooBar (PortableServer_Servant servant,
970 const CORBA_char *string,
971 CORBA_Environment *ev)
972 {
973 Self *self = SELF (bonobo_object_from_servant (servant));
974
975 /* your code here */
976 }
977
978 /* rest of class */
979 }
980
981 Note that the implementation method can be private, in fact that´s
982 probably a good idea to do. It won´t work to make this a signal, it
983 can however be a virtual. Note that the method prototype must match
984 the one from the interface header file, or you will get a bad assign‐
985 ment warning. You should check the header file generated by orbit-idl
986 and see the epv structure for the correct prototypes if you can´t fig‐
987 ure them out from the idl itself. Also note that the first argument is
988 not "self", but the servant and you must use bonobo_object_from_servant
989 function to get the actual object pointer.
990
991
993 Gob can simplify writing a libglade class. Just create a new object
994 that derives from a GtkContainer widget. Then use a "GladeXML" class
995 flag with the glade file name, root widget and optional domain as
996 arguments between double quotes. For example:
997
998 class My:Glade from Gtk:Window (GladeXML "gob-libglade.glade" "root")
999 {
1000 ....
1001 }
1002
1003 Note however that then "gob-libglade.glade" would have to be in the
1004 current directory. You could specify a path, but that may not work for
1005 all installations. You can replace the glade filename with a token to
1006 be used in the generated .c file and you can then have a macro with the
1007 filename, as follows:
1008
1009 class My:Glade from Gtk:Window (GladeXML GLADE_FILE "root")
1010 {
1011 ....
1012 }
1013
1014 And somewhere in your header files you would have
1015
1016 #define GLADE_FILE "/path/to/file.glade"
1017
1018
1019 You can declare widgets as data members by adding a 'GladeXML' to the
1020 definition.
1021
1022 private Gtk:Button * button1 GladeXML;
1023
1024 This will automatically set the "button1" from the GladeXML file.
1025
1026 All signals created with glade are automatically connected if you
1027 defined those class methods in your class. For example suppose in
1028 glade that we set the "connect" signal on button1 to go to on_but‐
1029 ton1_clicked, then in our gob file we can just write:
1030
1031 public void
1032 on_button1_clicked(self, GtkButton * button)
1033 {
1034 }
1035
1036
1037 See the examples directory for a full example. Note that this feature
1038 requires version at least 2.0.12.
1039
1040
1041
1043 Gob will need to define some local variables and functions in the gen‐
1044 erated files, so you need to take some precaution not to conflict with
1045 these. The general rule of thumb is that all of these start with three
1046 underscores. There is one, "parent_class" which doesn´t because it´s
1047 intended for use in your code. For virtuals or signals, you cannot use
1048 the identifier __parent__ which is used for the parent of the object.
1049 You should actually never access __parent__ either as it not guaranteed
1050 that it will stay named this way. Data members cannot be named __par‐
1051 ent__ nor _priv. For methods, you cannot use the identifiers "init" or
1052 "class_init" unless you mean the constructor methods. You shouldn´t
1053 generally use 3 underscores even in override method argument lists and
1054 virtual and signal method names as it might confuse the PARENT_HANDLER
1055 macro. In fact avoiding all names with three underscores is the best
1056 policy when working with gob.
1057
1058 There are a couple of defines which you shouldn´t be redefining in the
1059 code or other headers. These are SELF, IS_SELF, SELF_CLASS, SELF_TYPE,
1060 ARG, VAR, PARENT_HANDLER, GET_NEW, GOB_VERSION_MAJOR, GOB_VERSION_MINOR
1061 and GOB_VERSION_PATCHLEVEL.
1062
1063 As for types, there are Self and SelfClass types which are only defined
1064 in your source files. Their generation (just like the generation of
1065 the SELF macros) can be turned off, see command line options.
1066
1067
1069 If you want to use gtk-doc style inline documentation for your objects,
1070 you can do one of two things. First, you could include the inline doc‐
1071 umentation comments in your %{ %} section which will then be put verba‐
1072 tim into the output source file. This is the way you should use for
1073 functions you define outside of the class.
1074
1075 For class methods, you should use a gtk+ style comment, however it can
1076 be indented any number of tabs or spaces and you can use the short
1077 method name without the type prefix. Gob will automatically try to
1078 extract these and translate to full names and put them in the output
1079 source file. An example would be:
1080
1081 class Gtk:Button:Example from Gtk:Button {
1082 /**
1083 * new:
1084 *
1085 * Makes a new #GtkButtonExample widget
1086 *
1087 * Returns: a new widget
1088 **/
1089 public
1090 GtkWidget *
1091 new(void)
1092 {
1093 return (GtkWidget *)GET_NEW;
1094 }
1095 }
1096
1097 If the function you are documenting is a signal or a virtual then it
1098 will be documenting the wrapper that starts that virtual function or
1099 emits that signal.
1100
1101
1103 Sometimes you may need to use an object of type MyObjectA in the MyOb‐
1104 jectB class and vice versa. Obviously you can´t include headers for
1105 both. So you need to just declare the typedef in the header of A for
1106 B, and the other way around as well. The headers generated include a
1107 protecting define before it declares the typedef. This define is the
1108 __TYPEDEF_<upper case object name>__. So inside my-object-a.h there
1109 will be this:
1110
1111 #ifndef __TYPEDEF_MY_OBJECT_A__
1112 #define __TYPEDEF_MY_OBJECT_A__
1113 typedef struct _MyObjectA MyObjectA;
1114 #endif
1115
1116 Now instead of including my-object-a.h in the header section of my-
1117 object-b.gob, just copy the above code there and you´re set for using
1118 MyObjectA as a type in the method parameters and public types.
1119
1120 Another way to get out of this problem is if you can use those types
1121 only in the private members, in which case they won´t be in the gener‐
1122 ated public header.
1123
1124
1126 If you are using normal makefiles, what you need to do is to add a
1127 generic rule for .gob files. So you would include the following in the
1128 Makefile and then just use the .c and .h files as usual (make sure the
1129 space before the ´gob2´ is a tab, not spaces):
1130
1131 %.c %.h %-private.h: %.gob
1132 gob2 $<
1133
1134
1135
1137 This is a little bit more involved. Basically the first thing to do is
1138 to check for GOB2 in your configure.in file. You can use the supplied
1139 m4 macro which will also check the version of gob. Basically you
1140 include this:
1141
1142 GOB2_CHECK([2.0.0])
1143
1144 This will replace @GOB2@ in your makefiles with the full path of gob2.
1145 Thus when adding the generic rule to your Makefile.am file, it should
1146 look like:
1147
1148 %.c %.h %-private.h: %.gob
1149 @GOB2@ $<
1150
1151
1152 For Makefile.am you have to set up a couple more things. First you
1153 have to include the generated .c and .h files into BUILT_SOURCES vari‐
1154 able. You have to include both the .gob and the .c and .h files in the
1155 SOURCES for your program.
1156
1157
1159 When nothing has changed you might not really want to rebuild every‐
1160 thing and gob provides options --no-touch (since 2.0.13) and --no-
1161 touch-headers to avoid this. When working with build systems such as
1162 automake you have to be more careful as just using those options can
1163 cause automake to get confused and you will need to use something like
1164 the following:
1165
1166 foo_SOURCES = foo.gob foo.gob.stamp foo.c foo.h foo-private.h
1167 BUILT_SOURCES = foo.gob.stamp
1168 MAINTAINERCLEANFILES = foo.gob.stamp
1169
1170 %.gob.stamp: %.gob
1171 @GOB2@ --no-touch $<
1172 @touch $@
1173
1174
1175
1177 GOB does several things to make debugging the code easier. First it
1178 adds preprocessor commands into the output c file that point to the
1179 correct places in your .gob input file. However sometimes there might
1180 be some bigger confusion and this is just not helpful. In this case
1181 you will probably want to have gcc point you directly at the generated
1182 files. For this use the --no-lines command line option. You should
1183 also note that these commands are not generated for the public header
1184 file at all. If there is an error which points you to the public
1185 header file, make sure you fix this error in the .gob file, otherwise
1186 your changes will not have any effect after gob recompiles the sources
1187 again.
1188
1189 Sometimes you might want to know which method you are in for some
1190 debugging output. GOB will define __GOB_FUNCTION__ macro, which is
1191 just a string constant with a pretty name of the method.
1192
1193
1195 It is possible to have your .gob file also preprocessed by m4. This is
1196 useful if you have a lot of files and you´d like to have some pre‐
1197 processor put in some common features. All you have to do is add --m4
1198 to the command line of gob2 and gob2 will first run your file through
1199 m4. You can print the directory that is searched for m4 files by run‐
1200 ning "gob2 --m4-dir"
1201
1202 All the arguments after --m4 will be passed to m4 itself, so it has to
1203 be the last gob2 argument on the command line. This way you can spec‐
1204 ify arbitrary options to pass to m4.
1205
1206
1208 The lexer does not actually parse the C code, so I´m sure that some
1209 corner cases or maybe even some not so corner cases of C syntax might
1210 confuse gob completely. If you find any, send me the source that makes
1211 it go gaga and I´ll try to make the lexer try to handle it properly,
1212 but no promises.
1213
1214 Another thing is that gob ignores preprocessor macros. Since gob
1215 counts braces, the following code won´t work:
1216
1217 #ifdef SOME_DEFINE
1218 if(foo) {
1219 #else
1220 if(bar) {
1221 #endif
1222 blah();
1223 }
1224
1225 To make this work, you´d have to do this:
1226
1227 #ifdef SOME_DEFINE
1228 if(foo)
1229 #else
1230 if(bar)
1231 #endif
1232 {
1233 blah();
1234 }
1235
1236 There is no real good way we can handle this without parsing C code, so
1237 we probably never will. In the future, I might add #if 0 as a comment
1238 but that´s about as far as I can really take it and even that is prob‐
1239 lematic. Basically, if you use gob, just don´t use the C preprocessor
1240 too extensively. And if you use it make sure that you do not cross the
1241 boundaries of the C code segments.
1242
1243 Comments will not get through to the generated files unless inside C
1244 code. This is not the case for gtk-doc style comments which are sup‐
1245 ported.
1246
1247 The short name aliases are actually implemented as pointers to func‐
1248 tions. Thus if you want to get the pointer of a function using the
1249 short name alias you can´t use the ´&´. Thus:
1250
1251 void (*foo)(Self *);
1252
1253 /* this will NOT work */
1254 foo = &self_short_name;
1255
1256 /* this will work */
1257 foo = self_short_name;
1258
1259 /* Both of these will work */
1260 foo = &my_class_long_name;
1261 foo = my_class_long_name;
1262
1263
1264
1266 George Lebl <jirka@5z.com>
1267
1268 GOB2 Homepage: http://www.jirka.org/gob.html
1269
1270
1271
1272 GOB2 2.0.14 GOB2(1)