-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfaq.html
692 lines (692 loc) · 29.3 KB
/
faq.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=UTF-8" http-equiv="content-type">
<title>Xfce Foundation Classes</title>
<meta content="The XFC Development Team" name="author">
<meta content="Website: FAQ Page" name="description">
<link type="text/css" href="images/website.css" rel="stylesheet">
<link href="http://www.xfce.org/favicon.ico" rel="shortcut icon">
</head>
<body style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);"
alink="#000099" link="#000099" vlink="#990099">
<!--Main table: holds the entire contents of the web page.-->
<table style="text-align: left; width: 100%;" border="0" cellpadding="0"
cellspacing="0">
<tbody>
<tr>
<td
style="vertical-align: middle; white-space: nowrap; text-align: right; height: 25px;"
class="darkbluestripe"><a href="http://xfce.org" class="foot">Xfce.org</a>
| <a href="http://xfce-goodies.berlios.de/" class="foot">Xfce
Goodies</a> | Xfce Foundation
Classes | <a href="http://bugzilla.xfce.org/" class="foot">Xfce
Bug
Tracker</a>
| <a href="http://www.xfcewiki.org/" class="foot">Xfce Wiki</a>
| <a href="http://forum.xfce.org/" class="foot">Xfce Forum</a>
| <a href="http://blog.xfce.org/" class="foot">Xfce DevBlog</a>
<!--Top dark-blue stripe: contains links to other Xfce sites.--></td>
</tr>
<tr>
<td
style="vertical-align: top; white-space: nowrap; text-align: left; height: 140px; font-size: 12px;"><!--Logo area: white background.-->
<table style="text-align: left; width: 100%; height: 100%;"
border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td
style="vertical-align: middle; white-space: nowrap; text-align: left;"><img
style="width: 300px; height: 110px;" alt="" src="images/xfc.png"
align="middle"></td>
<td
style="vertical-align: middle; white-space: nowrap; text-align: left; color: rgb(17, 55, 95);">
<h2>... the power of
gtk, the power of c++!</h2>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td
style="vertical-align: middle; white-space: nowrap; text-align: center; height: 25px;"
class="greybluestripe"><!--Top grey-blue stripe: contains links to other website pages.-->
<a href="index.html" class="qn">Home</a>
| <a class="qn" href="news.html">News</a>
| <a class="qn" href="history.html">History</a>
| <a class="hl" href="faq.html">FAQ</a>
| <a class="qn" href="documentation.html">Documentation</a>
| <a class="qn" href="download.html">Download</a>
| <a class="qn" href="contact.html">Contact</a>
| <a class="qn" href="links.html">Links</a><br>
</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left;">
<table style="text-align: left; width: 100%;" border="0"
cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td class="leftmenu"
style="vertical-align: top; white-space: nowrap; text-align: left; width: 20%;">
<ul class="menu">
<li><a class="mbold" href="index.html">Home</a></li>
<li> <a href="news.html" class="mbold">News</a></li>
<li> <a class="mbold" href="history.html">History</a></li>
<li> <a class="mhl" href="faq.html">FAQ</a></li>
<li> <a class="mbold" href="documentation.html">Documentation</a></li>
<li> <a class="mbold" href="download.html">Download</a></li>
<li> <a class="mbold" href="contact.html">Contact</a></li>
<li> <a class="mbold" href="links.html">Links</a></li>
</ul>
<br>
</td>
<td
style="vertical-align: top; white-space: nowrap; text-align: left; width: 1px;"
class="greybluestripe"><!--Left menu grey-blue border--><br>
</td>
<td style="vertical-align: top; text-align: left;"
class="pagecontents">
<h3><!--Here starts the main content of the page.-->Table
of contents</h3>
<ol>
<li><a href="faq.html#faq01">What is GTK+?</a></li>
<li><a href="faq.html#faq02">What are the Xfce
Foundation Classes?</a></li>
<li><a href="faq.html#faq03">How has XFC evolved?</a></li>
<li><a href="faq.html#faq04">What are the goals of XFC?</a></li>
<li><a href="faq.html#faq05">What is the relationship
between XFC and GTK+?</a></li>
<li><a href="faq.html#faq06">Why use XFC instead of GTK+?</a></li>
<li><a href="faq.html#faq07">What does XFC include?</a></li>
<li><a href="faq.html#faq08">How does XFC improve on
GTK+?</a></li>
<li><a href="faq.html#faq09">How does XFC differ from
the other C++ language
bindings for GTK+?</a></li>
<li><a href="faq.html#faq10">How does the XFC virtual
signal class system work?</a></li>
<li><a href="faq.html#faq11">How does XFC memory
management work?</a></li>
<li><a href="faq.html#faq12">What modules
does XFC distribute?</a></li>
<li><a href="faq.html#faq13">How is XFC
licensed?</a></li>
<li><a href="faq.html#faq14">What
documentation is there?</a></li>
</ol>
<br>
<h3><a name="faq01">What is GTK+?</a></h3>
<a name="faq01"> </a><a class="phl"
href="http://www.gtk.org/">GTK+</a>
is a
powerful
graphical
user interface library originally designed
for the Linux platform. Written completely in C, it comprises a
collection of graphical objects, such as buttons, menus and
dialogs, and
the function calls needed to implement them. The graphical objects are
known as widgets and the collection of widgets is known as the GIMP
toolkit or the GTK+ widget set.<br>
<br>
<h3><a name="faq02">What are the Xfce
Foundation Classes?</a></h3>
<a name="faq02">The Xfce Foundation Classes (XFC) is a set
of well integrated C++
classes that wrap the functionality provided by Xfce and GTK+ into a
light-weight, easy to use application framework. Such frameworks are
called language bindings. Here are some other C++ language bindings you
might be familiar with:<br>
</a>
<ul>
<a name="faq02"> </a>
<li><a name="faq02">the </a><a class="phl"
href="http://www.gtkmm.org/">Gtkmm</a>
package is a
high level C++ encapsulation that
includes the use of exceptions, STL-like widget interfaces, template
classes and offers both automatic memory management and normal C++
memory management techniques. </li>
<li>the <a class="phl" href="http://vdkbuilder.sf.net/">VDK/VDKBuilder</a>
package, which is a Borland-like builder
for rapid application development. VDK is a C++ wrapper for GTK+.
VDKBuilder is a general purpose integrated
development environment for constructing GUI applications using VDK.
VDK was built as the base library for VDKBuilder and therefore
implements an object hierarchy and API more suited to rapid application
development.</li>
<li>the <a class="phl" href="http://www.wxwidgets.org/">wxWindows/GTK</a>
package, which is a free C++
library for cross-platform GUI development. Currently it supports MS
Windows, Unix with GTK+, Unix with Motif, and Mac OS.</li>
</ul>
There are many language bindings available for GTK+, including C#,
Java, Objective-C, Guile, Perl and PyGtk. You can find more information
on these and others in the <a class="phl"
href="http://www.gtk.org/bindings.html">bindings</a>
page on the
GTK+ web site.<br>
<br>
<h3><a name="faq03">How has XFC
evolved?</a></h3>
<a name="faq03">The Xfce Foundation Classes is not a new
library but rather the latest
incarnation of a stable library that has been in development for the
past 5 years. XFC started out as the GCode library in early
2000,
about the same time that GTK+ development version 1.3.1 was released.
Unfortunately for GCode there was a CAD program of the same name, so a
new name had to be found, not an easy task! Havoc Pennington was
approached and he kindly agreed to let GCode use the name Inti,
originally a set of C++ foundation libraries written by him but no
longer in active development. Inti was the original library on which
GCode was based.<br>
<br>
Under the new project name, Inti: Integrated Foundation Classes,
stable versions up to 1.2.0 were released. During the development of
the Inti 2.0 source code base it was decided to change the project name
to GTK+ Foundation Classes, to better reflect the library's usage as a
GTK+ language binding. To get this name Inti had to merge with two
abandoned projects, GFC: GNU/GTK Foundation Classes and GFCLIB: GNU/GTK
Foundation Classes. GFC 2.3.1 was the only release made under the newly
merged project. Prior to its first stable release GFC became a part of
the Xfce project.<br>
<br>
A lot of time has been spent developing the GFC source code base,
which had been a 'one-person' project. With the source code now mature
and stable the time was right for the library to become part of a
larger project, to assure its continued development. The Xfce Desktop
Environment was the obvious choice because many of its goals were
similar. Under the new name: Xfce Foundation Classes, the library is
now an integral part of the Xfce project. Compared with the early days,
the source code base has continually improved and evolved to the point
now where XFC is essentially a complete rewrite; almost none of the
original source code is left.<br>
<br>
</a>
<h3><a name="faq04">What are the goals
of XFC?</a></h3>
<a name="faq04">The main goal for the Xfce Foundation
Classes is to implement a
light-weight, fast and easy to use C++ interface for the Xfce and GTK+
libraries. Some other goals are: <br>
</a>
<ul>
<a name="faq04"> </a>
<li><a name="faq04">Ahere to the
GTK+ programming paradigm so programmers can continue use concepts
they're already familiar with.</a></li>
<a name="faq04"> </a>
<li><a name="faq04">Only implement
essential C++ features. </a></li>
<a name="faq04"> </a>
<li><a name="faq04">Stable
interfaces, with an upgrade path that follows
the
Xfce Desktop Environment release cycle. </a></li>
<a name="faq04"> </a>
<li><a name="faq04">Use of the
standard C++ library features. </a></li>
<a name="faq04"> </a>
<li><a name="faq04">Automatic memory
management to help prevent memory
leaks. </a></li>
<a name="faq04"> </a>
<li><a name="faq04">Consistency; to
make XFC easier to learn, the
interfaces
religiously follow strict conventions.</a></li>
<a name="faq04"> </a>
<li><a name="faq04">Ease of
use; XFC gives you an integrated
package,
with all the interfaces you need.</a></li>
<a name="faq04"> </a>
<li><a name="faq04">Documentation;
stable releases of XFC will have
excellent
documentation. </a></li>
<a name="faq04"> </a>
<li><a name="faq04">Maturity; XFC
will not be maintained as a 'bleeding
edge'
library; it will support features as they become mature.</a></li>
<a name="faq04"> </a>
</ul>
<a name="faq04"> <br>
</a>
<h3><a name="faq05">What is the
relationship between XFC and GTK+?</a></h3>
<a name="faq05">GTK+ is a C toolkit that comprises several
component libraries. These
include:<br>
</a>
<ul>
<a name="faq05"> </a>
<li><a name="faq05">the ATK
Accessibility Toolkit</a></li>
<a name="faq05"> </a>
<li><a name="faq05">the GDK Drawing
Kit</a></li>
<a name="faq05"> </a>
<li><a name="faq05"> the
GDK-PIXBUF Image Library</a></li>
<a name="faq05"> </a>
<li><a name="faq05">the GLib utility
library</a></li>
<a name="faq05"> </a>
<li><a name="faq05">the GTK GUI
Toolkit</a></li>
<a name="faq05"> </a>
<li><a name="faq05">the Pango
internationalized text handling library</a></li>
<a name="faq05"> </a>
</ul>
<a name="faq05">The Xfce Foundation Classes wraps these
libraries in a consistent and
easy to use C++ interface. XFC should be immediately familiar to most
GTK+ programmers because it uses the same widget hierarchy, and the
same API names and identifiers. <br>
<br>
</a>
<h3><a name="faq06">Why use XFC
instead of GTK+?</a></h3>
<a name="faq06">Over the years application programming has
become more complex. Today,
C++ is a better way the manage that complexity because it provides you
with a variety of programming designs, both object-oriented and
conventional, that let you develop high-quality applications. Properly
used, C++ code is easily maintainable, is extensible and can be
performance and memory efficient.<br>
<br>
The Xfce Foundation Classes provide a compact but comprehensive C++
wrapper
around the GTK+ libraries. XFC judiciously uses C++ language features
and
does not layer on too much extra C++ complexity. Its API is easy to
understand and use, and should feel immediately familiar to most GTK+
programmers. Throughout its development XFC has maintained a good
balance between remaining faithful to GTK+ and remaining faithful to
C++. Hence the catchphrase - "the power of gtk+, the power of c++". <br>
<br>
</a>
<h3><a name="faq07">What does XFC
include?</a></h3>
<a name="faq07">The Xfce Foundation Classes includes C++
wrappers for most features
implemented in the GTK+
package. These include: <br>
</a>
<ul>
<a name="faq07"> </a>
<li><a name="faq07">A GUI toolkit</a></li>
<a name="faq07"> </a>
<li><a name="faq07">An Accessibility
Toolkit for writing programs for the
disabled.</a></li>
<a name="faq07"> </a>
<li><a name="faq07">Internationalized
text handling.</a></li>
<a name="faq07"> </a>
<li><a name="faq07">Main loop
support </a></li>
<a name="faq07"> </a>
<li><a name="faq07">A signal system.</a></li>
<a name="faq07"> </a>
<li><a name="faq07">A UTF-8 string
class.</a></li>
<a name="faq07"> </a>
</ul>
<a name="faq07"> <br>
</a>
<h3><a name="faq08">How does XFC
improve on GTK+?</a></h3>
<a name="faq08">The Xfce Foundation Classes adds a
number of C++ features: <br>
</a>
<ul>
<a name="faq08"> </a>
<li><a name="faq08">Namespace
support </a></li>
<a name="faq08"> </a>
<li><a name="faq08">Type safety, no
need for type casting. </a></li>
<a name="faq08"> </a>
<li><a name="faq08">Use of C++
native types such as string and vector.</a></li>
<a name="faq08"> </a>
<li><a name="faq08">Automatic memory
management.</a></li>
<a name="faq08"> </a>
<li><a name="faq08">Derivation of
new widgets using standard C++
mechanisms. </a></li>
<a name="faq08"> </a>
<li><a name="faq08">Deprecated and
legacy interfaces that have built up
over
the years in GTK+ are not included in XFC. </a></li>
<a name="faq08"> </a>
<li><a name="faq08">Full wrapper for
all C types, including enumerations
and
GDK types.</a></li>
<a name="faq08"> </a>
<li><a name="faq08">Typesafe C++
signal system based on the new libsigc++
2.0
callback library.</a></li>
<a name="faq08"> </a>
<li><a name="faq08">Widget signal
classes that minimize the overhead of
implementing large numbers of virtual signal handlers.</a></li>
<a name="faq08"> </a>
</ul>
<a name="faq08"> <br>
</a>
<h3><a name="faq09">How does XFC
differ from the other C++ language bindings for GTK+?</a></h3>
<a name="faq09">The differences between the Xfce Foundation
Classes and other C++
language bindings for GTK+ include: <br>
</a>
<ul>
<a name="faq09"> </a>
<li><a name="faq09">The use of
virtual signal classes which are optimized for size, execution speed
and performance.</a></li>
<a name="faq09"> </a>
<li><a name="faq09">The judicious
use of C++ language features to improve performance. </a></li>
<a name="faq09"> </a>
<li><a name="faq09">Minimal use of
exceptions, leaving the decision whether or not to use exceptions
optional and up to the user.</a></li>
<a name="faq09"> </a>
<li><a name="faq09">No STL-like
widget interfaces; to avoid adding extra layers of C++ object code and
risking a bloated interface.</a></li>
<a name="faq09"> </a>
<li><a name="faq09">The use of the
new libsigc2 callback library to implement a typesafe system of C++
signals and slots as an alternative to the virtual signal classes.</a></li>
<a name="faq09"> </a>
<li><a name="faq09">The use of
automatic C++ memory management based on the GTK+ reference counting
system.</a></li>
<a name="faq09"> </a>
</ul>
<a name="faq09"> <br>
</a>
<h3><a name="faq10">How does the XFC
virtual signal class system work?</a></h3>
<a name="faq10">Most C++ language bindings put widget
virtual signal handlers, all 70+
of them, directly into their respective widget classes. This hooks each
virtual signal handler directly into the GTK+ signal emission chain. As
a result, every time a GTK+ widget signal is emitted the corresponding
virtual signal handler gets called, which usually does nothing but call
the default GTK+ signal handler. What a waste! Each widget ends up with
huge virtual function table filled with 70+ entries, and the overhead
needed to call them. And that's just for one widget. Multiply that by
all
the widgets in your application and it starts to add up.<br>
<br>
The pre-eminent goal for the Xfce Foundation Classes was to implement a
virtual signal handler system that overcame these problems. It took
some time to develop but the result is impressive. Now there is real
potential for smaller, faster applications, depending on your C++
programming style. So how does the virtual signal class system work? In
XFC, all widget
virtual signal handlers have been moved into an abstract signal class
hierarchy. To override one or more widget signal handlers a custom
widget class must multiplely inherit from its parent widget's signal
class, or one of its base signal classes. For example, to customize
your main window by overriding one or more Gtk::Widget signal handlers
you would derive your window class like this:<br>
<br>
</a>
<div class="fbox"><code><a name="faq10">#include
<xfc/gtk/window.hh><br>
#include <xfc/gtk/widgetsignals.hh><br>
<br>
using namespace Xfc;<br>
<br>
class MyWindow : public Gtk::Window, protected
Gtk::WidgetSignals<br>
{<br>
protected:<br>
virtual bool
on_delete_event(const Gdk::EventAny& event);<br>
virtual bool
on_configure_event(const Gdk::EventConfigure& event);<br>
virtual bool
on_expose_event(const Gdk::EventExpose& event);<br>
<br>
public:<br>
MyWindow();<br>
virtual ~MyWindow();<br>
};<br>
<br>
MyWindow::MyWindow()<br>
: Gtk::WidgetSignals(this)<br>
{<br>
}</a></code></div>
<a name="faq10"> <br>
The on_delete_event(), on_configure_event() and
on_expose_event() signal handlers are all inherited from
Gtk::WidgetSignals. One thing to note here is that the widget header
file
must be included before the widget signal class header file. This is
because
signal class header files are interfaces and don't include widget
header files. The other thing to note is that the Gtk::WidgetSignals
constructor takes a widget pointer as its only argument. This enforces
type safety and simplifies the inheritance hierarchy.<br>
<br>
</a>
<h3><a name="faq11">How does XFC
memory management work?</a></h3>
<a name="faq11">The Xfce Foundation Classes uses GTK+
reference counting to manage the
memory of its objects. This ensures that the principles of memory
management are kept consistent across the GTK+ and XFC libraries, and
it minimizes the risks of memory leaks. Essentially, if you already
know how to manage memory in GTK+ using functions like g_object_ref()
and g_object_unref() then you already know how to manage memory in XFC
using the corresponding functions ref() and unref().<br>
<br>
Most XFC objects can either be created dynamically on the heap or
automatically on the stack. When you create a XFC object dynamically by
calling operator new, the caller is responsible for correctly handling
the new object's reference count. Objects that derive directly from
G::Object, but not Gtk::Object, are created with an initial reference
count of one. This reference count is owned by the caller and must be
explicitly released by calling unref(). Objects that derive from
Gtk::Object are also created with an initial reference count of one,
but unlike G::Objects the initial reference count is floating. A
floating reference count is not owned by any object. Its purpose is the
keep the new Gtk::Object alive until an owner calls ref() on the object
for the first time. The first call to ref() will automatically sink a
floating object so there is no sink() function. Once a new Gtk::Object
has been referenced it is no longer floating but its reference count
will still be one. At this point the caller owns the new Gtk::Object
and is responsible for releasing its initial reference count by calling
unref().<br>
<br>
One thing to note about Gtk::Objects. You can pass a newly created
Gtk::Object as an argument to any standard XFC API method, or add it to
a container widget, without calling ref(). This is because object
methods that take a Gtk::Object as an argument will call ref() on the
object and take ownership of it. The same goes for containers. So as a
general rule you don't need to call ref() on a Gtk::Object unless you
specifically want to hold on to a reference.<br>
<br>
Here are a few memory management rules that should be remembered:<br>
</a>
<ul>
<a name="faq11"> </a>
<li><a name="faq11">If you call
operator new to create a G::Object you
must call unref() on the object when it's no longer required.</a></li>
<a name="faq11"> </a>
<li><a name="faq11">You don't need
to call unref() on a new Gtk::Object
if you pass it as an argument to a standard XFC API function or add it
to a widget container.</a></li>
<a name="faq11"> </a>
<li><a name="faq11">Otherwise, you
only need to call unref() if you first
called ref().</a></li>
<a name="faq11"> </a>
<li><a name="faq11">Every call to
ref() must be accompanied by a call to
unref().</a></li>
<a name="faq11"> </a>
<li><a name="faq11">Never call
operator delete on a XFC object. When you
call unref() on a XFC object, delete is automatically called when the
object's reference count reaches zero. </a></li>
<a name="faq11"> </a>
<li><a name="faq11">You can ignore
the initial reference count for
automatic stack objects, but if you do call ref() on one you must also
call unref(). </a></li>
<a name="faq11"> </a>
<li><a name="faq11">Never call
unref() on a Gtk::Window. GTK+ owns all
top level windows. The correct way to destroy a top level window is to
call dispose().</a></li>
<a name="faq11"> </a>
<li><a name="faq11">Having
remembered all this, there is an easier way to
handle an
object's initial reference count. XFC provides Pointer<>,
a
special smart pointer that knows how to handle a XFC object's initial
reference count. It also provides automatic memory management similar
to std::auto_ptr<>.</a></li>
<a name="faq11"> </a>
</ul>
<a name="faq11"> </a>
<h3><a name="faq11"><br>
</a></h3>
<a name="faq11"> </a>
<h3><a name="faq12">What modules does
XFC distribute?</a></h3>
<a name="faq12">Currently there are two modules in the Xfce
Foundation Classes, the
core object system and utility library (libXFCcore) and the user
interface library (libXFCui). A third module is planned (libXFCde)
which will
wrap
the functionality provided by the Xfce libraries.<br>
<br>
libXFCcore wraps the GLib object system and selected objects from
the GLIb utility library. Essentially it provides a low level object
system that can be used to build other libraries; libXFCui depends on
this library. libXFCcore uses the new libsigc++ 2.0 callback library to
implement a system of signals and slots which make using native GObject
signals or creating your own signals easy. There is a standard string
compatible UTF-8 string class, reference documentation and several test
programs.<br>
<br>
libXFCui combines the power of GTK+ and the power of C++ into a
state-of-the-art user interface toolkit that makes developing GTK+
applications in C++ easy, intuitive and efficient. There are more
than 420 classes that wrap most of the objects found in the ATK, GDK,
Gdk-pixbuf, GTK and Pango libraries. Included is a full set of simple
example programs, a C++ version of the GTK+ widget demonstration
program, extensive reference documentation and a new tutorial.<br>
<br>
libXFCde provides C++ class wrappers for the
GTK+ objects implemented by the Xfce libraries. libXFCde depends on
libXFCcore and libXFCui and should become
available some time in the next few months, once Xfce 4.4 development
starts to progress. <br>
<br>
</a>
<h3><a name="faq13">How is XFC
licensed?</a></h3>
<a name="faq13">The Xfce Foundation Classes is licensed
under the GNU Library or Lesser
General Public License
(LGPL), similar to most libraries on the Linux operating system. In
general terms, this means that it's OK to develop proprietary software
with XFC; however you should read the license yourself (or have your
lawyers read it), in order to get all the details about your rights and
responsibilities.<br>
<br>
</a>
<h3><a name="faq14">What documentation
is there?</a></h3>
<a name="faq14">Stacks! The documentation can be found in
the <doc>
subdirectory where the Xfce Foundation Classes was installed, usually
</usr/share/doc>
for stable releases. There are four kinds of documentation: this FAQ
sheet, the API reference manual, a new tutorial and numerous widget
HOWTOs with examples. <br>
<br>
The API reference manual is written with Doxygen, so if you look at the
header files you will find them filled with doxygen comments. The XFC
tutorial takes you step-by-step through the process of writing three
simple XFC applications. Then using one of these programs, XfcApp, it
shows you how to write a feature packed main window that can be used as
a starting point for any application. The tutorial finishes up by
building XfcApp into GNU compliant autotols project with international
language support. New to XFC are the numerous widget HOWTOs, one for
most widgets, that discuss how each widget is used and works through a
real example. <br>
<br>
<br>
</a></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td class="greybluestripe"
style="vertical-align: top; white-space: nowrap; text-align: left; height: 25px;"><!--Bottem grey-blue stripe--><br>
</td>
</tr>
<tr>
<td
style="vertical-align: middle; white-space: nowrap; text-align: center; height: 54px;"><!--Centered logos at bottom on a white background.--><a
href="http://validator.w3.org/check/referer"><img
src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0"
style="border: 0px solid ; width: 88px; height: 31px;" align="middle"></a>
<a href="http://www.lunar-linux.org"><img
style="border: 0px solid ; width: 120px; height: 32px;" alt=""
src="images/poweredbylunar.png" align="middle"></a></td>
</tr>
<tr>
<td
style="vertical-align: top; white-space: nowrap; text-align: left; height: 25px;"><!--Bottom dark-blue stripe: for copyright information.-->
<table style="text-align: left; width: 100%;" border="0"
cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td class="darkbluestripe"
style="vertical-align: middle; white-space: nowrap; text-align: left; width: 50%; height: 25px;"><em>
Copyright
© 2004-2012 The XFC Development Team</em></td>
<td class="darkbluestripe"
style="vertical-align: middle; white-space: nowrap; text-align: right; width: 50%;">Xfce
is © <a class="foot" href="mailto:[email protected]">Olivier
FOURDAN</a>
1996-2005 <br>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</body>
</html>