Commit Graph

13872 Commits

Author SHA1 Message Date
Emmanuele Bassi
a2a6cb2058 Drop an unnecessary argument from G_DEFINE_PROPERTIES
By renaming the variable holding the properties array (which can also
conflict with existing code) we can avoid the lowercase type name.
2013-07-05 18:14:59 +01:00
Emmanuele Bassi
55941c1e1a property: Remove implicit notify with explicit setters
If the user passes an explicit setter function when creating a
GProperty, we assume that a notify signal will be emitted. For direct
access to a structure field, we can emit an implicit notification
ourselves, since we know that if the value has changed.

This changes the signature of the explicit setter functions.
2013-07-05 18:13:55 +01:00
Emmanuele Bassi
b4e3aa15c7 docs: Update the GObject tutorial section on properties
Get rid of a bunch of Maman stuff, and use the new macros and functions
instead of the existing GParamSpec API.

https://bugzilla.gnome.org/show_bug.cgi?id=648526
2013-07-05 18:13:55 +01:00
Emmanuele Bassi
5387361df2 docs: Add a section on the GProperty macros
https://bugzilla.gnome.org/show_bug.cgi?id=648526
2013-07-05 18:13:55 +01:00
Emmanuele Bassi
d2e0e4dcde docs: Update examples in GProperty
https://bugzilla.gnome.org/show_bug.cgi?id=648526
2013-07-05 18:13:55 +01:00
Emmanuele Bassi
d778ffd6fa gobject: Add wrappers for overriding GProperty default values
We need convenience API for sub-classes that wish to override the
default value of a property installed by one of their parents.

https://bugzilla.gnome.org/show_bug.cgi?id=648526
2013-07-05 18:13:55 +01:00
Emmanuele Bassi
e783b3883e property: Use the field offset everywhere
Do not implicitly grab the private data offset inside GProperty: we
allow passing any offset when creating a new GProperty, and let the
user decide where the property is stored, by giving us the correct
offset — either from the instance structure, or from the private
structure.

https://bugzilla.gnome.org/show_bug.cgi?id=648526
2013-07-05 18:13:55 +01:00
Emmanuele Bassi
f8900df2cf property: Add macros for defining properties
Alongside the macros for defining accessors we may want to use simple
macros for defining properties to install on a GObject class.

https://bugzilla.gnome.org/show_bug.cgi?id=648526
2013-07-05 18:13:55 +01:00
Emmanuele Bassi
91a35e96e3 property: Add autogeneration of accessors
We can use macros to autogenerate accessor methods for GObject classes
using GProperty.

https://bugzilla.gnome.org/show_bug.cgi?id=648526
2013-07-05 18:12:55 +01:00
Emmanuele Bassi
12947909b5 gparam: Add setters for static nick and blurb
We are going to need them for GProperty.

https://bugzilla.gnome.org/show_bug.cgi?id=648526
2013-07-05 18:12:55 +01:00
Emmanuele Bassi
b47e898e5c gobject: Initialize GProperties at instance creation
Using their default value. This removes the need to manually calling
g_property_init_default(), which means we can make it private.

https://bugzilla.gnome.org/show_bug.cgi?id=648526
2013-07-05 18:12:55 +01:00
Emmanuele Bassi
f5b8e4bea6 gobject: Use GProperty varargs API when accessing properties
Instead of using GValue, let's take advantage of the fast paths with no
boxing/unboxing inside GProperty.

https://bugzilla.gnome.org/show_bug.cgi?id=648526
2013-07-05 18:12:55 +01:00
Emmanuele Bassi
8c134ac8a4 gproperty: Add default values
GProperty should store the default value (if any) of a property, as well
as the eventual overrides coming from the sub-classes of the class that
defined the property.

https://bugzilla.gnome.org/show_bug.cgi?id=648526
2013-07-05 18:12:55 +01:00
Emmanuele Bassi
959940f896 gobject: Add GProperty
Dealing with GParamSpec is tedious and less efficient than necessary.
GParamSpec is a data type meant to be used to validate GValue, and only
incidentally provides us with the facilities to implement properties on
GObject. GObject itself requires us to provide accessors functions and
then call them from within a huge switch() inside two virtual functions.

Property definitions should be able to either directly access a struct
field or specify the accessors pair that control a property. On top of
that, most of the property and accessor definition can be autogenerated
from simple pre-processor directives.

So, here's to you GProperty.

GProperty is a GParamSpec sub-class that encapsulates all the C
fundamental types inside a single, opaque structure (to avoid leaking
out implementation details); a GProperty can access the structure member
holding the value of the property, or invoke the accessor functions
passed to its constructor. Type safety is enforced at compile time
through the C type system, and at run time through the GType system.
GProperty will try *very* hard to avoid boxing and unboxing fundamental
type values into GValues.

GObject will recognize whether a GParamSpec used to set or get a
property is really a GProperty, and thus will shortcircuit most of the
GValue-based marshalled code, preferring the direct C function and
direct argument collection instead of boxing/unboxing of GValues.

https://bugzilla.gnome.org/show_bug.cgi?id=648526
2013-07-05 18:12:55 +01:00
Emmanuele Bassi
c44fdf47f6 Deprecate g_type_class_add_private()
We have a new set of macros for adding private data structures to
instances of a new type.

https://bugzilla.gnome.org/show_bug.cgi?id=700035
2013-07-05 18:12:55 +01:00
Gil Forcada
9675bcc5e7 [l10n] Update Catalan translation 2013-07-05 02:23:48 +02:00
Sebastian Dröge
dbdfcb69ce gthread: Use pthread_cond_timedwait_monotonic() if available
Otherwise we have to rely on pthread_cond_timedwait() actually using
the monotonic clock, which might be true or not. On Android at least
it is using the realtime clock, no pthread_condattr_setclock() is available
but instead pthread_cond_timedwait_monotonic() can be used.
2013-07-04 10:41:59 +02:00
Emmanuele Bassi
a4c352cd99 Ensure that MAX_ALLOWED keeps working with the type macros
When using the GLIB_VERSION_MAX_ALLOWED macro to define the upper bound
of allowed API the G_DEFINE_TYPE_EXTENDED starts warning about the newly
added g_type_class_adjust_private_offset() function; this effectively
introduces a run-time dependency on GLib 2.38 even if we don't use its
API explicitly.

https://bugzilla.gnome.org/show_bug.cgi?id=703191
2013-07-03 09:37:03 -04:00
Martin Ejdestig
4cd7bcaf00 Add missing G_BEGIN/END_DECLS to gsettingsschema.h.
Without this fix, using any of the enclosed functions when building with a
C++ compiler will result in undefined references.

https://bugzilla.gnome.org/show_bug.cgi?id=703478
2013-07-03 09:03:20 -04:00
Ryan Lortie
cb4469600c GDBusConnection: be more careful with async GetAll
It's possible to get a org.freedesktop.Properties.GetAll call even if we
have no readable properties in the introspection, in which case we
should return the empty list in the usual way.

We should certainly _not_ be dispatching to the method call handler of
an interface which has no properties (since it will not be expecting
this).

Add a check to make sure that there is at least one readable property
before assuming that a NULL get_property handler implies that we want to
handle properties asynchronously.

Add a testcase that was failing before the change and works after it.

https://bugzilla.gnome.org/show_bug.cgi?id=703437
2013-07-01 23:36:30 -04:00
Ryan Lortie
3cefb7248a Revert two errant commits to GMutex, etc.
This reverts commits dfbac178bd and
56348210f3.

These two commits introduce undesirable behaviour and were made with no
apparent approval from anybody at all, and without reference to a bug or
mailing list discussion.
2013-07-01 23:30:47 -04:00
Paul Barbieri
e55ccf7338 gspawn: Fix leak of internal pipe with G_SPAWN_LEAVE_DESCRIPTORS_OPEN
Even when the app author specifies G_SPAWN_LEAVE_DESCRIPTORS_OPEN,
we should avoid leaking our internal pipe machinery into the
child.

Commit message written by: Colin Walters <walters@verbum.org>

https://bugzilla.gnome.org/show_bug.cgi?id=703407
2013-07-01 21:10:28 +01:00
Bastien Nocera
1891eafd1d Fix typo in documentation
s/doucumentation/documentation
2013-07-01 08:40:40 +02:00
Jeffrey Stedfast
dfbac178bd Finish the previous fix for GMutex, GRecMutex, GRWLock and GCond 2013-06-30 14:02:38 -04:00
Jeffrey Stedfast
56348210f3 Fixed g_mutex_clear() to fully undo g_mutex_init()
In order to fully undo the effects of g_mutex_init(),
it is necessary to reset the internal mutex pointer
back to NULL so that a later call to g_mutex_init()
actually works as expected.
2013-06-30 13:46:28 -04:00
Sébastien Wilmet
b05bf77223 Doc: small fixes
This commit adds the GTestSubprocessFlags enum to the docs, and fixes
several minor typos in various places.

https://bugzilla.gnome.org/show_bug.cgi?id=703254
2013-06-30 10:32:18 +02:00
Dan Winship
b7b3838401 Make G_STRFUNC consistent across platforms
Recent versions of clang have changed __PRETTY_FUNCTION__ to always
include the function signature (rather than including the function
signature in C++ but not in C like gcc does). This causes G_STRFUNC to
give different results under clang and gcc, causing some tests with
g_test_expect_messages() to fail.

Fix this by only using __PRETTY_FUNCTION__ in C++, and using
__FUNCTION__ in C. (Under gcc this change has no effect.)

https://bugzilla.gnome.org/show_bug.cgi?id=702147
2013-06-29 23:23:36 -04:00
Matthias Clasen
a3182e3b9a Improve various section headings in the docs
We don't use # or other forms of links in the section headings.
We also capitalize them and don't put a final period.

This commit corrects several headings to follow these rules.
2013-06-29 22:51:31 -04:00
Matthias Clasen
d30a2d92f3 docs: minor formatting fixes to the gresource man page
Make the SECTION argument appear the same way throughout.
2013-06-29 22:46:38 -04:00
Dan Winship
5989651bee tests: add a test for the previous commit 2013-06-25 09:35:05 -04:00
Wim Taymans
1d5c815ecd gmain: handle blocked source in g_source_add_child_source()
When a child_source is added to a blocked source it has no context, yet we
call block_source on it that segfaults when it dereferences the NULL context
when it attempts to remove the file descriptors. To fix this we:

- Ensure that when we block a source, we don't attempt to remove its file
  descriptors from a NULL context.

- Also ensure that when we attach a blocked source to a context, we don't add the
  file descriptors to the context.

https://bugzilla.gnome.org/show_bug.cgi?id=701283
2013-06-25 09:25:57 -04:00
Ryan Lortie
5841267a6c version bump 2013-06-24 12:13:30 -04:00
Ryan Lortie
1b12e9511c GLib 2.37.3 2.37.3 2013-06-24 11:19:25 -04:00
Ryan Lortie
a61f718e5e small docs xml fixup 2013-06-24 11:19:25 -04:00
Emmanuele Bassi
54cc43630d Rename the generated private data getter function
As it turns out, we have examples of internal functions called
type_name_get_private() in the wild (especially among older libraries),
so we need to use a name for the per-instance private data getter
function that hopefully won't conflict with anything.
2013-06-24 15:43:04 +01:00
Emmanuele Bassi
6000bc9ea8 gio: Missing G_ADD_PRIVATE in GFileInputStream 2013-06-24 15:43:00 +01:00
Emmanuele Bassi
1f6f7e1c4d docs: Clean up the GObject tutorial a bit
Started off by using the new instance private data macro, ended up
cleaning up the obscure, out of date, or simply broken concepts and
paragraphs.

https://bugzilla.gnome.org/show_bug.cgi?id=700035
2013-06-24 14:18:01 +01:00
Emmanuele Bassi
f870d5abdb docs: Include newly added functions and macros
The functions are private, and an implementation detail of the macros.

https://bugzilla.gnome.org/show_bug.cgi?id=700035
2013-06-24 14:18:01 +01:00
Emmanuele Bassi
32747def4b gio: Use the new private instance data declaration
Use the newly added macros, and remove the explicit calls to
g_type_class_add_private().

https://bugzilla.gnome.org/show_bug.cgi?id=700035
2013-06-24 14:18:01 +01:00
Emmanuele Bassi
aba80eea6c gparam: Use the new private instance data API
https://bugzilla.gnome.org/show_bug.cgi?id=700035
2013-06-24 14:18:01 +01:00
Emmanuele Bassi
39ba7c8142 gobject: Add private field access macros
Similar to G_STRUCT_MEMBER and G_STRUCT_MEMBER_P, but automatically using
the G_PRIVATE_OFFSET macro.

https://bugzilla.gnome.org/show_bug.cgi?id=700035
2013-06-24 14:18:01 +01:00
Emmanuele Bassi
d91d114a54 Add G_PRIVATE_OFFSET
A macro that evaluates to the offset of a field inside an instance
private data structure.

https://bugzilla.gnome.org/show_bug.cgi?id=700035
2013-06-24 14:18:01 +01:00
Emmanuele Bassi
d3dec6ec80 Allow registering instance private data during get_type()
For static types, it should be possible to register a private data
structure right when we are registering the type, i.e. from the
get_type() implementation. By allowing this, we can take advantage of
the existing type definition macros to cut down the amount of code
necessary (as well as the knowledge baggage) when creating a new type.

The main issue with this new feature is that it cannot be mixed with the
old idiomatic way of adding private instance data by calling a function
in the middle of the class_init() implementation, as that imposes the
additional constraint of initializing the whole type hierarchy in order
to retrieve the offset of the private data in the GTypeInstance
allocation.

For this reason we are going to follow a two-step process; in the first
step, we are going to introduce the new (semi-private) API to register
the intent to add private instance data from within the get_type()
implementation, and hide it behind a macro; at the same time, the
G_DEFINE_TYPE_EXTENDED macro is going to be modified so that it will
register the private instance data if the macro was used, using a new
(semi-private) function as well. Once we have migrated all our code, we
will make the first new function perform the actual private data
registration, and turn the second new function into a no-op. This should
guarantee a transparent migration of existing code to the new idiomatic
form.

https://bugzilla.gnome.org/show_bug.cgi?id=700035
2013-06-24 14:18:01 +01:00
Matthias Clasen
ebdbbd9b62 Define GTESTER_REPORT for non-GLIB too 2013-06-23 19:35:50 -04:00
Dieter Verfaillie
fdc9379132 docs: fix GTK-Doc build
cd html && gtkdoc-mkhtml $mkhtml_options  gio ../gio-docs.xml
../xml/gdbusconnection.xml:2063: parser error : Opening and ending tag mismatch: literal line 2062 and para
</para>
       ^
2013-06-23 14:15:05 +02:00
Ryan Lortie
edf16aace4 GDBusMethodInvocation: add missing 'goto out'
We do a bunch of new validity checks for return values in response to
calls on the D-Bus property API but we miss the 'goto out' in one case.
Add it.

https://bugzilla.gnome.org/show_bug.cgi?id=698375
2013-06-22 13:41:12 -04:00
Ryan Lortie
317e8c132d GDBusMethodInvocation: add property return checks
Add some type checking for the values returned from async property
handling calls, similar in spirit to the type checking we do for normal
method calls.

https://bugzilla.gnome.org/show_bug.cgi?id=698375
2013-06-22 13:38:32 -04:00
Ryan Lortie
f754c4e85b GDBusConnection: allow async property handling
The existing advice in the documentation to "simply" register the
"org.freedesktop.DBus.Properties" interface if you want to handle
properties asynchronously is pretty unreasonable.  If you want to handle
this interface you have to deal with all properties for all interfaces
on the path, and you have to do all of the checking for yourself.  You
also have to provide your own introspection data.

Introduce a new convention for dealing with properties asynchronously.

If the user provides NULL for their get_property() or set_property()
functions in the vtable and has properties registered then the
properties are sent to the method_call() handler.  We get lucky here
that this function takes an "interface_name" parameter that we can set
to "org.freedesktop.DBus.Properties".

We also do the user the favour of setting the GDBusPropertyInfo on the
GDBusMethodInvocation for their convenience (for much the same reasons
as they might want the already-available GDBusMethodInfo).

Add a testcase as well as a bunch of documentation about this new
feature.

https://bugzilla.gnome.org/show_bug.cgi?id=698375
2013-06-22 13:38:31 -04:00
Ryan Lortie
c691f7b6ca GDBusMethodInvocation: add 'property_info'
Add a field on GDBusMethodInvocation for GDBusPropertyInfo.

For now, it is always %NULL.  It will be set in future patches.

https://bugzilla.gnome.org/show_bug.cgi?id=698375
2013-06-22 13:38:31 -04:00
Ryan Lortie
14dc028003 GDBusConnection: some straight-up refactoring
Separate the code for validating a method call from the code for
actually scheduling it for dispatch.

This will allow property Get/Set/GetAll calls to be dispatched to the
method_call handler without duplicating a lot of code.

https://bugzilla.gnome.org/show_bug.cgi?id=698375
2013-06-22 13:38:30 -04:00