Commit Graph

203 Commits

Author SHA1 Message Date
Ryan Lortie
ac0ddcf23f [notify] dispatch 'notify' directly if not frozen
Avoid the notify queue in the case that we're not already frozen.
2011-11-16 17:50:13 +00:00
Ryan Lortie
39458748dd [notify] add 'conditional' to _notify_queue_freeze
When the 'conditional' parameter is TRUE, the queue will only be frozen
(ie: have its freeze count increase by one) if it is already frozen.

This will allow us to avoid a freeze-notify-thaw in the case that we
just want to notify on a single property.

Another approach may have been to add an is_frozen() type call and avoid
even increasing the freeze count at all in this case.  Unfortunately,
I'm not totally sure what is the exact expected semantics of
simultaneous notifications in multiple threads and this may interact
badly with someone freezing or thawing in between our check and
emission.
2011-11-16 17:50:13 +00:00
Ryan Lortie
393d4c28b4 [notify] Remove GObjectNotifyContext indirection
This silly abstraction is causing more trouble than it's worth -- just
use the relevant bits directly.
2011-11-16 17:50:13 +00:00
Ryan Lortie
8215fc5f25 [notify] lift some logic out of _notify_queue_add
Lift the check-if-READABLE and redirect-target logic from out of
g_object_notify_queue_add() into its own function, get_notify_pspec().

Use that function at the site of our two calls to
g_object_notify_queue_add().
2011-11-16 17:50:12 +00:00
Ryan Lortie
760037ec46 [notify] remove an obviously false comment 2011-11-16 17:50:12 +00:00
Ryan Lortie
45d80cf9bd [notify] lift some code outside of critical region 2011-11-16 17:50:12 +00:00
Ryan Lortie
1d98f93194 [notify] drop some unused code 2011-11-16 17:50:12 +00:00
Ryan Lortie
128862eafe [notify] merge gobjectnotifyqueue.c into gobject.c
This was done as a separate file before, and #include brought it into
gobject.c.  That's a bit mad, so stop doing that.

Unfortunately, the insanity steps up a level: gobjectnotifyqueue.c is
installed in the public include dir, so we can't just get rid of it
entirely.
2011-11-16 17:50:12 +00:00
Ryan Lortie
688059cb94 [notify] remove some useless forward declarations
These cause trouble in the next commit.
2011-11-16 17:50:12 +00:00
Marc-André Lureau
fb95c20c96 Add G_SIGNAL_DEPRECATED
Similar to G_PARAM_DEPRECATED. It will warn only for users of the
signals, so a signal can still be emited without warning, for
compatibility reasons.

Apparently, there is no way user flags could have been used before,
so that shouldn't break anyone.

https://bugzilla.gnome.org/show_bug.cgi?id=663581
2011-11-07 23:12:45 +01:00
Javier Jardón
108480b7ba gobject: Use G_VALUE_INIT 2011-10-18 17:12:33 +01:00
Ryan Lortie
9829d04be8 GObject docs: resolve broken links
Some links were broken due to typos, because functionality was removed
in GLib 2.0 or for various other reasons.  Fix up as many of them as is
reasonable.
2011-09-05 18:46:59 -04:00
Matthias Clasen
1b28408b8b Spelling fixes
Spelling fixes in comments and docs, provided by
Kjartan Maraas in bug 657336.
2011-08-29 14:49:32 -04:00
Pavel Holejsovsky
d4c5e3b156 Add (allow-none) annotation for GValue setters.
Assorted g_value_set_xxx() and g_value_take_xxx() functions actually
allow NULL in source parameter.
2011-08-17 12:55:12 +02:00
Ryan Lortie
8f21e8145c gobject: remove -DG_DISABLE_CONST_RETURNS
GObject had a few cases of depending on G_CONST_RETURN not being defined
to 'const'.  Remove those in preparation for deprecation of
G_CONST_RETURN.
2011-06-09 11:11:30 -04:00
Matthias Clasen
d811f0cdc9 Fix a typo
And reword some docs.
2011-06-05 19:07:06 -04:00
Matthias Clasen
3b242bc5e9 Use g_param_spec_ref_sink instead of separate ref, sink 2011-06-04 23:43:05 -04:00
Matthias Clasen
38dc7955e4 No necessary to init qdata atomically 2011-06-04 23:14:32 -04:00
Alexander Larsson
0a918c0d2a Make g_object_get_data use the new faster g_datalist_get_data
https://bugzilla.gnome.org/show_bug.cgi?id=650458
2011-06-03 21:11:26 -04:00
Colin Walters
3bd3067ffc gobject: Use _ prefixing in private headers over G_GNUC_INTERNAL in public headers
This helps out gtk-doc and g-ir-scanner, and also makes much clearer
what's private versus public.

https://bugzilla.gnome.org/show_bug.cgi?id=651745
2011-06-03 12:40:01 -04:00
Ryan Lortie
8382135265 glib: Rewrite gatomic.[ch]
- remove all inline assembly versions

 - implement the atomic operations using either GCC intrinsics, the
   Windows interlocked API or a mutex-based fallback

 - drop gatomic-gcc.c since these are now defined in the header file.
   Adjust Makefile.am accordingly.

 - expand the set of operations: support 'get', 'set', 'compare and
   exchange', 'add', 'or', and 'xor' for both integers and pointers

 - deprecate g_atomic_int_exchange_and_add since g_atomic_int_add (as
   with all the new arithmetic operations) now returns the prior value

 - unify the use of macros: all functions are now wrapped in macros that
   perform the proper casts and checks

 - remove G_GNUC_MAY_ALIAS use; it was never required for the integer
   operations (since casting between pointers that only vary in
   signedness of the target is explicitly permitted) and we avoid the
   need for the pointer operations by using simple 'void *' instead of
   'gpointer *' (which caused the 'type-punned pointer' warning)

 - provide function implementations of g_atomic_int_inc and
   g_atomic_int_dec_and_test: these were strictly macros before

 - improve the documentation to make it very clear exactly which types
   of pointers these operations may be used with

 - remove a few uses of the now-deprecated g_atomic_int_exchange_and_add

 - drop initialisation of gatomic from gthread (by using a GStaticMutex
   instead of a GMutex)

 - update glib.symbols and documentation sections files

Closes #650823 and #650935
2011-05-28 16:10:44 -04:00
Benjamin Otte
02877e2902 gobject: Warn if someone uses the wrong property in g_object_get/set
"Interface::property" was not detected before and led to a crash.
2011-05-02 19:33:51 +02:00
Dan Winship
bdc23c44e8 Fix compiler warnings 2011-05-02 11:50:23 -04:00
Stef Walter
6cd08472b2 Better documentation for g_value_dup_object().
State that NULL is returned when value is NULL.
2011-02-16 00:21:27 -05:00
Will Thompson
c2d98c5609 GObject: correct documentation typos 2011-02-11 15:21:12 +00:00
Michael Natterer
634e9e43cf gobject: add an empty default impl of GObject::constructed()
to allow unconditional upchaining.
2011-01-12 19:45:40 +01:00
Matthias Clasen
068d53358b Make object_interface_check_properties work
As pointed out in bug 637738, it does not currently work, since
g_type_class_peek always returns NULL.
2010-12-27 23:41:10 -05:00
Pavel Holejsovsky
58e36daf29 Add GI annotations to GObject 2010-12-27 22:08:15 +01:00
Pavel Holejsovsky
3264d8d159 Add GI annotations to GClosure and friends. 2010-12-19 22:20:21 +01:00
Pavel Holejsovsky
ea577d60d4 Add GI annotations to GValue and GValueArray. 2010-12-19 10:39:36 +01:00
Will Thompson
ac4722df1c g_object_get_property: document that value must be initialized
I couldn't tell from reading the documentation whether I had to pass in
an uninitialized value, or a value initialized to the exact type, or
something else. It turns out (from reading the source) that you have to
pass in an initialized value, but you can use any type to which the
property's actual type can be transformed.

So, let's document this.
2010-12-17 13:21:07 +00:00
Jonas Holmberg
349f547561 gobject: initialize memory in g_object_new_valist
memset parameters array in g_object_new_valist to zeroes when expanding
the array to avoid acces to uninitialized memory.
2010-11-28 18:27:30 -05:00
Ryan Lortie
1a1fc130ec New function: g_clear_object()
By analogy to g_clear_error, takes a pass-by-reference GObject reference
and, if non-%NULL, unrefs it and sets it equal to %NULL.

Bug #620263.
2010-11-08 18:21:51 -05:00
Florian Müllner
a62b43fd9c Fix deadlock in g_object_remove_toggle_ref()
The code section guarded with toggle_refs_mutex includes a call to
g_object_unref(), which may call toggle_refs_notify(). As the latter
tries to acquire the same mutex, glib locks up.

https://bugzilla.gnome.org/show_bug.cgi?id=632884
2010-10-22 14:52:41 +02:00
Alberto Garcia
b7616114c6 Protect access to closure, weak refs and toggle refs arrays
This fixes https://bugzilla.gnome.org/show_bug.cgi?id=613822
2010-10-21 15:20:55 +02:00
Emmanuele Bassi
44a8ff2f8f gobject: Improve install_properties()
Cache the parent type outside of the loop, and fix a typo in the
documentation.
2010-10-08 16:10:18 +01:00
Johan Dahlin
701ce5d201 [introspection] Add GObject annotations
These were moved in from gobject-introspection
2010-09-24 16:23:31 -03:00
Emmanuele Bassi
9cd43d7a4c gobject: Add install_properties()
Since we added g_object_notify_by_pspec(), an efficient way to install
and notify properties relies on storing the GParamSpec pointers inside
a static arrays, like we do for signal identifiers.

Instead of multiple calls to g_object_class_install_property(), we
should have a single function to take the static array of GParamSpecs
and iterate it.

https://bugzilla.gnome.org/show_bug.cgi?id=626919

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
2010-09-13 12:34:53 +01:00
Emmanuele Bassi
016cecb179 Revert hack that broke things badly on Windows
This should fix bug #628952.

Don't include glib/gdatasetprivate.h directly. Especially don't define
GLIB_COMPILATION when doing that, as that causes breakage on Windows
because of the variable dllimport/dllexport stuff in gtypes.h that
checks GLIB_COMPILATION. That macro really should be defined only when
compiling code that goes into the libglib DLL. Otherwise the compiler
thinks that variables that should be imported from libglib are
actually defined in the code being compiled.

Just call g_atomic_pointer_get() as such, don't bother with
G_DATALIST_GET_FLAGS.

Signed-off-by: Tor Lillqvist <tml@iki.fi>
2010-09-08 12:06:49 +03:00
Emmanuele Bassi
01a46e5c65 Hack to include glib/gdatasetprivate.h directly
The gdatasetprivate.h header includes gatomic.h directly. It all works
well in GLib, but inside GObject it will trigger the single inclusion
guard.

Since this is a private header, and it's kind of a special case, one way
to fix it is to declare GLIB_COMPILATION around it and fool the single
inclusion guard in gatomic.h into thinking we're compiling GLib and not
GObject.
2010-09-04 17:25:37 +01:00
Olivier Crête
65797f7e54 notify: Remove g_object_notify_queue_from_object()
The function will not be safe with object locking in place, so we remove
it. The workaround is somewhat ugly, but it works.

https://bugzilla.gnome.org/show_bug.cgi?id=166020
2010-07-22 21:56:20 +02:00
Ryan Lortie
0fc50fa5f7 gobject/: fully remove gobjectalias hacks 2010-07-07 19:40:48 -04:00
Christian Dywan
272836936e Introduce G_PARAM_DEPRECATED and G_ENABLE_DIAGNOSTIC
See https://bugzilla.gnome.org/show_bug.cgi?id=601686
2010-06-23 16:45:12 +02:00
Damien Lespiau
f3879a4bdc Introduce g_object_notify_by_pspec()
g_object_notify_by_pspec() will emit the "notify" signal on the given
pspec, short-circuiting the hash table lookup needed by
g_object_notify(). The suggested and documented way of using
g_object_notify_by_pspec() is similar to the way of emitting signals
with their ID.

Emission tests (with no handler attached to the notify signal) show a
10-15% speedup over using g_object_notify().

https://bugzilla.gnome.org/show_bug.cgi?id=615425
2010-06-15 10:51:36 +01:00
Alexander Larsson
8e41be13ef Add dtrace and systemtap support for gobject
This adds static markers and systemtap tapsets for:

* type creation
* object lifetimes (creation, ref, unref, dispose, finalize)
* signal creation and emission

Signal emissions and finalization marker have a corresponding
*_end (or *-end in dtrace) version that is when the corresponding
operation is finished.

https://bugzilla.gnome.org/show_bug.cgi?id=606044
2010-05-27 14:51:41 -04:00
Edward Hervey
cecf61d1c3 gobject: Don't use G_PARAM_SPEC_VALUE_TYPE when we know the pspec is valid
https://bugzilla.gnome.org/show_bug.cgi?id=605667
2010-02-23 18:42:03 +01:00
Benjamin Otte
914120b970 Ensure values are memset to 0 when calling G_VALUE_COLLECT_INIT()
The reason we need to enforce this is that the GTypeValueTable
documentation explicitly states that memory is memset to 0 when the
value_init function is called.

https://bugzilla.gnome.org/show_bug.cgi?id=603590
2010-01-18 14:46:55 +01:00
Edward Hervey
40bf3aa5d2 gobject: Use new G_VALUE_COLLECT_INIT variant
Makes g_object_new_valist 20% to 30% faster (against 2321e5a).

Profiled against the pan newsreader which uses a variant of simple
and complex object creation.

https://bugzilla.gnome.org/show_bug.cgi?id=603590
2010-01-13 10:16:49 +01:00
Kamal Mostafa
f4ccd96ea1 g_object_new(): skip varargs for simple calls
g_object_new() avoids useless varargs processing for simple calls with no
properties.  Fixes https://bugzilla.gnome.org/show_bug.cgi?id=605883
2010-01-11 15:34:41 +01:00
Benjamin Otte
2a78adc5e3 Only add object to list new objects when it has a custom constructor
This works around the need to take a custom mutex twice and add the
object to a GSList of objects that are currently in construction for the
common case. Only when the constructor is overwritten do we use the
previous behavior and allow things like singleton objects.

The only slightly incompatible change is that previously, it was ok to
call g_object_set() on construct-only properties while the object was
initialized. This will now fail. If that behavior is needed, setting a
custom constructor that just chains up will reenable this functionality.

https://bugzilla.gnome.org/show_bug.cgi?id=557151
2009-11-30 20:52:33 +01:00
Cody Russell
855deaa578 g_object_unref racy condition can lead to crash
Store whether the object has a toggleref before decrementing the
refcount to prevent race condition when two threads simultaneously
try to unref an object with a refcount of 2.
Patch by Antoine Tremblay.

https://bugzilla.gnome.org/show_bug.cgi?id=551706
2009-10-06 12:27:12 -04:00
Alexander Larsson
1937765f9f Add fast path for construction with no params
This avoids a bunch of code and makes construction of simple objects
faster.

Object construction performance improvement:
         Non-Threaded   Threaded
Simple:           14%         5%
Complex:        -1.1%      -2.2%

Other tests stable.

https://bugzilla.gnome.org/show_bug.cgi?id=557100
2009-10-02 21:02:48 +02:00
Alexander Larsson
ffc625ec9b Don't freeze/thaw notification during construction if no properties
If the class has no properties there could be no notification anyway.
This is an important optimization for construction of simple objects.

Object construction performance improvement:
         Non-Threaded   Threaded
Simple:           84%        91%
Complex:        -1.4%      -0.6%

Other tests stable.

https://bugzilla.gnome.org/show_bug.cgi?id=557100
2009-10-02 21:02:48 +02:00
Alexander Larsson
302d13a757 Add a check that no properties are added after a class is derived
We can't support that, because that would cause the CLASS_HAS_PROPS_FLAG
class flag to not be correct.
2009-10-02 21:02:48 +02:00
Alexander Larsson
39a1fe5782 Add GObjectClass flag CLASS_HAS_PROPS_FLAG
This is set if a class or any of its parents have installed any
properties.

https://bugzilla.gnome.org/show_bug.cgi?id=557100
2009-10-02 21:02:48 +02:00
Matthias Clasen
f548330275 Fix "it's" vs "its" confusion throughout the source. Patch by Will
* Fix "it's" vs "its" confusion throughout the source. Patch
        by Will Thompson.


svn path=/trunk/; revision=7897
2009-02-23 04:30:06 +00:00
Matthias Clasen
c8e37b63e7 Fix strict aliasing warnings and viiolations to make GLib and
GLib users buildable with gcc 4.4. Patch by Jakub Jelinek.

        * glib/gatomic.[hc]: Add G_GNUC_MAY_ALIAS to pointer arguments,
        fix macro versions to only operate on objects of the same size.

        * glib/gdataset.c:
        * glib/gthread.[hc]:
        * glib/gdatasetprivate.h: Remove unnecessary casts in
        g_atomic_pointer_get calls.


svn path=/trunk/; revision=7875
2009-02-17 16:14:39 +00:00
Behdad Esfahbod
bf201e0fb7 Bug 565136 – Gobject's "notify" signal parameters are wrong in gtk-doc
2009-01-02  Behdad Esfahbod  <behdad@gnome.org>

        Bug 565136 – Gobject's "notify" signal parameters are wrong in gtk-doc
        Patch from  Andrzej Zaborowski

        * gobject.c (g_object_do_class_init): Fix param order in docs.


svn path=/trunk/; revision=7759
2009-01-02 06:09:26 +00:00
Matthias Clasen
8b14e3744c Expand the docs of g_object_class_install_property. Proposed by Maciej
* gobject.c: Expand the docs of g_object_class_install_property.
Proposed by Maciej Piechotka

svn path=/trunk/; revision=7642
2008-11-04 04:17:40 +00:00
Dan Winship
7afe2bb07a add uint* -> int* casts in g_atomic_int calls to avoid gcc warnings
* gobject.c (g_object_ref, g_object_unref)
	(g_object_freeze_notify, g_object_notify, g_object_thaw_notify):
	* gparam.c (g_param_spec_ref, g_param_spec_unref):
	* gsignal.c (handler_ref, handler_unref_R): add uint* -> int*
	casts in g_atomic_int calls to avoid gcc warnings

svn path=/trunk/; revision=7551
2008-09-26 16:00:33 +00:00
Johan Dahlin
306db46123 Bug 548800 – Missing a g_object_get_type function
2008-08-21  Johan Dahlin  <johan@gnome.org>

    Bug 548800 – Missing a g_object_get_type function

    * gobject.c (g_object_get_type):
    * gobject.h:
    * gobject.symbols:
    Add g_object_get_type


svn path=/trunk/; revision=7377
2008-08-21 09:18:25 +00:00
Michael Natterer
6f1f1342e4 remove unused #define PREALLOC_CPARAMS.
2008-07-04  Michael Natterer  <mitch@imendio.com>

	* gobject.c: remove unused #define PREALLOC_CPARAMS.


svn path=/trunk/; revision=7159
2008-07-04 13:08:39 +00:00
Matthias Clasen
d6d221911d Fix up section comments
svn path=/trunk/; revision=7137
2008-07-02 03:43:13 +00:00
Björn Lindqvist
eba8246ce5 Bug 539626 – Update docstrings for g_object_freeze_notify and
2008-06-29  Björn Lindqvist  <bjourne@gmail.com>

	Bug 539626 – Update docstrings for g_object_freeze_notify and
	g_object_thaw_notify

	* gobject/gobject.c: Explain how the freeze count works.

svn path=/trunk/; revision=7102
2008-06-29 12:09:31 +00:00
Michael Natterer
6347be5fb6 remove trailing whitespace from newly added gtk-doc comments and
2008-06-22  Michael Natterer  <mitch@imendio.com>

	* *.c: remove trailing whitespace from newly added gtk-doc
	comments and reformatted some where they contained overly long or
	ill-formatted lines.


svn path=/trunk/; revision=7090
2008-06-22 14:53:09 +00:00
Michael Natterer
5602b7e275 moved includes back to the top of the files (before gtk-doc SECTION
2008-06-22  Michael Natterer  <mitch@imendio.com>

	* *.c: moved includes back to the top of the files (before gtk-doc
	SECTION comments). Add "config.h" in all files and move system
	included before glib includes. Remove trailing whitespace from
	SECTION comments and did some reformatting where lines were overly
	long, no documentation content was changed.


svn path=/trunk/; revision=7089
2008-06-22 14:29:25 +00:00
Stefan Kost
356fe46531 Migrating docs.
* docs/reference/gobject/tmpl/signals.sgml:
	* gobject/gclosure.c:
	* gobject/gobject.c:
	* gobject/gsignal.c:
	* gobject/gsignal.h:
	  Migrating docs.


svn path=/trunk/; revision=7083
2008-06-22 09:29:52 +00:00
Stefan Kost
fca3fb5818 Migrating docs.
* docs/reference/gobject/tmpl/param_value_types.sgml:
	* gobject/gboxed.c:
	* gobject/gboxed.h:
	* gobject/genums.c:
	* gobject/genums.h:
	* gobject/gobject.c:
	* gobject/gobject.h:
	* gobject/gparam.c:
	* gobject/gparam.h:
	* gobject/gparamspecs.c:
	* gobject/gparamspecs.h:
	* gobject/gvaluetypes.c:
	* gobject/gvaluetypes.h:
	  Migrating docs.


svn path=/trunk/; revision=7081
2008-06-21 22:16:14 +00:00
Stefan Kost
fedbbf5d74 Migrating docs.
* docs/reference/gobject/tmpl/objects.sgml:
	* gobject/gobject.c:
	* gobject/gobject.h:
	* gobject/gparam.h:
	  Migrating docs.


svn path=/trunk/; revision=7080
2008-06-21 20:07:57 +00:00
Stefan Kost
83dd545044 Migrating docs.
* docs/reference/gobject/tmpl/gclosure.sgml:
	* gobject/gboxed.h:
	* gobject/gclosure.c:
	* gobject/gclosure.h:
	* gobject/gobject.c:
	* gobject/gsourceclosure.c:
	* gobject/gsourceclosure.h:
	  Migrating docs.


svn path=/trunk/; revision=7069
2008-06-21 12:18:12 +00:00
Ryan Lortie
dac885cba5 invoke GObjectClass.constructed() only for newly constructed objects, and
Tue Apr  3 12:34:14 2007  Tim Janik  <timj@gtk.org>

        * gobject.[hc]: invoke GObjectClass.constructed() only for newly
        constructed objects, and invoke it while the notify queue is
        still being frozen, after all CONSTRUCT* properties have been
        set and before random other properties are being set.

        * applied modified patch from Ryan Lortie to implement
        GObjectClass.constructed() to fix #425324.

2007-04-02  Ryan Lortie  <desrt@desrt.ca>

        * gobject/gobject.h: Add 'constructed' vcall to GObjectClass.
        * gobject/gobject.c (g_object_newv): call ->constructed() as last
        step of object construction.



svn path=/trunk/; revision=5441
2007-04-03 10:44:30 +00:00
Matthias Clasen
20b39ffafa Fix some issues with PLT entries. 2006-09-30 13:59:01 +00:00
Tim Janik
08e3a830fb fixed to print usage and version info on STDOUT (#322502).
Tue Aug 29 13:27:33 2006  Tim Janik  <timj@gtk.org>

        * glib-mkenums.in: fixed to print usage and version info on STDOUT
        (#322502).

        * gobject.c (g_initially_unowned_init): restore ; after G_DEFINE_TYPE.
2006-08-29 11:29:24 +00:00
Matthias Clasen
ed9c3c2696 Fix some typos. (#351741, Kjartan Maraas)
2006-08-26  Matthias Clasen  <mclasen@redhat.com>

	* glib/gutils.h:
	* glib/gscanner.c: Fix some typos.  (#351741, Kjartan Maraas)
2006-08-26 04:03:37 +00:00
Sven Neumann
89f9ebaef3 changed return value of g_value_dup_object(), fixes #343292.
Wed Aug 23 10:35:32 2006  Tim Janik  <timj@gtk.org>

        * gobject.[hc]: changed return value of g_value_dup_object(), fixes #343292.

2006-08-23  Sven Neumann  <sven@gimp.org>

        * gobject/glib-genmarshal.[c1]: added new command-line option
        "--internal" that can be used to let glib-genmarshal generate
        internal functions using the G_GNUC_INTERNAL attribute (bug #346647).
2006-08-23 08:46:21 +00:00
Tim Janik
13fe93378e conditionally thaw the notify queue after construction, so we don't
Wed Aug 16 13:55:08 2006  Tim Janik  <timj@imendio.com>

        * gobject.c: conditionally thaw the notify queue after construction,
        so we don't trigger warnings when trying to thaw an unfrozen singleton.
2006-08-16 12:09:51 +00:00
Tim Janik
e9b421f212 added case3 to hand out the original floating flag handler. required by
Tue Mar  7 17:09:07 2006  Tim Janik  <timj@gtk.org>

        * gobject.c (g_object_compat_control): added case3 to hand out the
        original floating flag handler. required by gtk+ >= 2.10.
2006-03-07 16:15:20 +00:00
Tim Janik
648da9d63f renamed GUnowned to GInitiallyUnowned.
Thu Dec 22 18:53:14 2005  Tim Janik  <timj@gtk.org>

        * gobject.[hc]: renamed GUnowned to GInitiallyUnowned.
2005-12-22 17:58:21 +00:00
Tim Janik
6f01d0c34f implemented G_TYPE_GTPYE. applied patch from matthias which implements
Thu Dec 22 14:59:24 2005  Tim Janik  <timj@imendio.com>

        * gvaluetypes.[hc]: implemented G_TYPE_GTPYE. applied patch
        from matthias which implements GType accessors for GValue.

        * gparamspecs.[hc]: applied patch from matthias which
        implements G_TYPE_PARAM_GTYPE.

        * gobject.[hc]:
        GUnowned: introduced a new object type that has an initially
        floating reference.
        g_object_compat_control(): allow setting of a floating flag handler.
2005-12-22 15:07:03 +00:00
Tim Janik
6e5f465924 added floating reference count. g_object_is_floating():
Wed Nov 23 18:01:46 2005  Tim Janik  <timj@imendio.com>

        * gobject.[hc]: added floating reference count.
        g_object_is_floating():
        g_object_ref_sink(): new functions to deal with floating references.
        g_object_force_floating(): new funciton for object implementations
        to set the floating flag.

        * gobject.c (g_object_init): make objects initially floating.

Wed Nov 23 17:58:13 2005  Tim Janik  <timj@gtk.org>

        * gparam.[hc]: added g_param_spec_ref_sink().
2005-11-23 17:54:41 +00:00
Matthias Clasen
f7a681d65d Intern the signal name.
2005-08-31  Matthias Clasen  <mclasen@redhat.com>

	* gobject.c (g_object_do_class_init): Intern the signal name.
2005-08-31 19:42:51 +00:00
Matthias Clasen
07c4d80d55 Intern type names before registering the type to avoid unnecessary copies.
2005-08-31  Matthias Clasen  <mclasen@redhat.com>

	* gvaluetypes.c (g_value_types_init):
	* gtypeplugin.c (g_type_plugin_get_type):
	* gtypemodule.c (g_type_module_get_type):
	* gparam.c (g_param_type_init):
	* gobject.c (g_object_type_init):
	* genums.c (g_enum_types_init):
	* gboxed.c (g_boxed_type_init): Intern type names
	before registering the type to avoid unnecessary
	copies.
2005-08-31 14:38:18 +00:00
Tim Janik
834ddd1920 turned all modifications to the first 32 integer bits in a closure into
Mon Aug  1 23:00:42 2005  Tim Janik  <timj@imendio.com>

        * gclosure.c: turned all modifications to the first 32 integer bits in a
        closure into atomic accesses. wrapped write accesses into special macros
        to keep the atomic modification logic in a single place. comment cleanups.

        * gclosure.h: made all atomicly accessed closure fields volatile.

        * gobject.h: made ref_count field volatile.
2005-08-01 21:17:50 +00:00
Tim Janik
4746cf2ce0 use g_datalist_set_flags() and g_datalist_unset_flags() to allow proper
Sun Jul 31 02:04:23 2005  Tim Janik  <timj@gtk.org>

        * gobject.c: use g_datalist_set_flags() and g_datalist_unset_flags() to
        allow proper locking around &qdata modifications.
2005-07-31 00:05:22 +00:00
Tim Janik
f0cfc267ba reverted notify_mutex introduction, since this prevents parallelized
Sat Jul 30 21:10:26 2005  Tim Janik  <timj@gtk.org>

        * gobject.c: reverted notify_mutex introduction, since this prevents
        parallelized setting of object properties on different objects, and
        serves no apparent purpose (to me at least).
        g_object_real_dispose(): removed non-atomic reference count
        modifications.
        g_object_unref(): make sure the closures array is destroyed when
        destroying signal handlers.

        * gparam.c: cosmetic changes.

        * gsignal.c: comment fixup. allow 16bit blocking count.

        * gsignal.c: reverted GClosure related changes.

        * gclosure.c: reverted premature commit of atomic reference
        counting attempt.
2005-07-30 19:46:11 +00:00
Matthias Clasen
39ea11ce6b Make refcounting threadsafe by using atomic operations. (#166020, Wim
2005-07-15  Matthias Clasen  <mclasen@redhat.com>

	Make refcounting threadsafe by using atomic
	operations.  (#166020, Wim Taymans)

	* gobject.c: Use a recursive lock to protect the
	notify queue.
	(g_object_unref): Get rid of g_object_last_unref and
	do the last unref handling in g_object_unref.
	(g_object_ref, g_object_unref): Use atomic operations.

	* gsignal.c (struct _HandlerMatch): Use a full integer
	for the ref_count field.
	(handler_ref, handler_unref_R): Use atomic operations.

	* gparam.c (g_param_spec_ref, g_param_spec_unref):
	Use atomic operations instead of a lock to make the
	refcounting threadsafe.

	* gclosure.c (g_closure_ref, g_closure_unref): Use atomic
	operations. This is more complicated here, since the
	refcount is stored in a bitfield, so we also have
	to access all other bitfield members atomically.

	* gsignal.c (handlers_find): Read the meta_marshal flag
	of the closure atomically.

	* tests/Makefile.am (SUBDIRS): Add tests/refcount

	* configure.in: Add tests/refcount

	* tests/refcount/properties.c: Test property changes
	from multiple threads.

	* tests/refcount/signals.c: Test signal emission from
	multiple threads.

	* tests/refcount/objects.c: Test refcounting from
	multiple threads.

	* tests/refcount/objects2.c:
	* tests/refcount/properties2.c: Tests to measure the
	overhead of threadsafe refcounting.

	* glib/giochannel.c (g_io_channel_ref, g_io_channel_unref):
	Use atomic operations to make refcounting
	threadsafe.  (#166020, Wim Taymans)
2005-07-15 16:51:10 +00:00
Owen Taylor
2ae1a46b4c Add g_object_add/remove_toggle_ref() functions to get notification when a
2005-05-05  Owen Taylor  <otaylor@redhat.com>

        * gobject.[ch] gobject.symbols: Add
        g_object_add/remove_toggle_ref() functions to get notification
        when a reference count is the last remaining reference; this
        enables better memory management for language bindings.
        (http://mail.gnome.org/archives/gtk-devel-list/2005-April/msg00095.html)

2005-05-05  Owen Taylor  <otaylor@redhat.com>

        * glib/gdataset.[ch] glib/gdatasetprivate.h: Add
        g_datalist_set/unset_flags(), g_datalist_get_flags() functions
        to squeeze some bits into a GDataSet... this is needed for
        efficient implementation of toggle references in GObject.

        * tests/gobject/references.c tests/gobject/Makefile.am:
        Add a test case for weak and toggle references.

        * glib/gfileutils.[ch]: Rename g_file_replace() back
        to g_file_set_contents().

        * glib/glib.symbols: Update.

2005-05-05  Owen Taylor  <otaylor@redhat.com>

        * glib/Makefile.am glib/glib-sections.txt gobject/gobject-sections.txt:
        Update

        * gobject/tmpl/objects.sgml: Document toggle-references.
2005-05-05 14:57:29 +00:00
Matthias Clasen
3448a27829 Make work again.
2005-03-14  Matthias Clasen  <mclasen@redhat.com>

	* abicheck.sh: Make work again.

	* gsourceclosure.c: Fix a typo.

	Make PLT-reduction work with gcc4, and don't include
	everything in gobjectalias.h:

	* gobject.symbols: Group symbols by header and source
	file.
	* makegobjectalias.pl: Protect definitions by the same
	preprocessor symbols used to guard the headers. Move
	the alias declarations to a separate file which is
	produced when calling makegalias.pl -def
	* Makefile.am (gobjectaliasdef.c): Add a rule to
	build this file.
	* *.c: Include gobjectalias.h after the other i
        GLib headers, include gobjectaliasdef.c at the bottom.
2005-03-14 06:47:51 +00:00
Matthias Clasen
465c7d1ead Implement the same PLT reduction technique used in GTK+:
2004-09-16  Matthias Clasen  <mclasen@redhat.com>

	Implement the same PLT reduction technique used in GTK+:

	* Makefile.am: Generate gobjectalias.h from gobject.symbols.
	(BUILT_SOURCES): Add gobjectalias.h.

	* makegobjectalias.pl: Script to generate gobjectalias.h.

	* *.c: Include gobjectalias.h
2004-09-16 18:52:40 +00:00
Tim Janik
aa63f7e373 fix g_object_set() whithin _init() implementations not working for
Sat Nov 29 14:57:20 2003  Tim Janik  <timj@gtk.org>

        * gobject.c: fix g_object_set() whithin _init() implementations
        not working for construct-only properties.
        (g_object_init): make the object enter a construct_objects list.
        (g_object_newv): remove object from construct_objects after creation.
        (g_object_set_valist):
        (g_object_set_property): allow construct-only properties for
        objects which are in construct_objects.
2003-11-29 14:00:06 +00:00
Tim Janik
0642df0ab3 variant of class_peek() which works for static types only.
Thu Nov 27 17:53:52 2003  Tim Janik  <timj@gtk.org>

        * gtype.[hc]:
        (g_type_class_peek_static): variant of class_peek() which works for
        static types only.

        * gobject.c:
        (g_object_do_class_init): make ::notify a run-action signal.
        (g_object_newv): use g_type_class_peek_static() by default to
        speed up common code path (trades two write-locks for one read-lock).
        (g_object_disconnect):
        (g_object_connect): allow signal specification words to be
        seperated by '-'.
        (g_object_set_valist):
        (g_object_new_valist): don't leak values.
        (g_object_get_property): check property for readability.
        (g_object_set_property): check property for writability and to
        not be construct-only.
        (g_object_set_valist): check property to not be construct-only.
2003-11-27 17:08:06 +00:00
Owen Taylor
6f5794fad0 Add a new GParamSpecOverride type that is a pointer to a different
Tue Oct 14 17:40:19 2003  Owen Taylor  <otaylor@redhat.com>

        * gparamspecs.[ch]: Add a new GParamSpecOverride type
        that is a pointer to a different paramspec in a parent
        class or interface.

        * gparam.[ch]: Add g_paramspec_get_redirect_target()
        which follows GParamSpecOverride to the real property.
        Make g_param_spec_pool_list() hand redirections,
        properties on interfaces.

        * gobject.[ch] gobjectnotifyqueue.c: Add
        g_object_interface_install_property,
        g_object_interface_find_property,
        g_object_interface_list_properties(). Redirect virtually all
        publically exposed GParamSpec's to the redirect target if
        any. (->constructor is the exception.)
        (#105894)
2003-10-21 19:12:27 +00:00
Matthias Clasen
c3acb9da0c Make the g_value_set_x_take_ownership() functions "official" part of the
2003-09-12  Matthias Clasen  <maclas@gmx.de>

	Make the g_value_set_x_take_ownership() functions "official"
	part of the API (#100948):

	* gvaluetypes.[hc]: Add g_value_take_string() (synonym to the
	now deprecated g_value_set_string_take_ownership()).

	* gparam.[hc]: Add g_value_take_param() (synonym to the
	now deprecated g_value_set_param_take_ownership()).

	* gobject.[hc]: Add g_value_take_object() (synonym to the
	now deprecated g_value_set_object_take_ownership()).

	* gboxed.[hc]: Add g_value_take_boxed() (synonym to the
	now deprecated g_value_set_boxed_take_ownership()).

	* gobject/gobject-sections.txt: Add new g_value_take_x() functions.

	* gobject/tmpl/param_value_types.sgml: Document new g_value_take_x()
	functions.  (#100948)
2003-09-12 20:11:38 +00:00
Manish Singh
056041aab9 removed stray change from previous commit.
Wed Aug 27 19:53:26 2003  Manish Singh  <yosh@gimp.org>

        * gobject.c: removed stray change from previous commit.
2003-08-28 02:55:58 +00:00
Matthias Clasen
29606d90b0 Improve the wording of the warning for invalid
values.  (#117246, Mariano Suarez-Alvarez)
2003-08-08 19:47:35 +00:00
Owen Taylor
68e49c7811 Order refs/unrefs so setting the same object back is safe. (#112861,
Fri May 30 14:42:24 2003  Owen Taylor  <otaylor@redhat.com>

        * gobject.c (g_value_set_object): Order refs/unrefs
        so setting the same object back is safe. (#112861,
        Morten Welinder)
2003-05-30 18:44:57 +00:00
Matthias Clasen
fa21b512d5 Remove all docs from gobject at Tims request. Documentation is only for
2003-02-07  Matthias Clasen  <maclas@gmx.de>

	* gtypemodule.c:
	* gtype.c:
	* gsourceclosure.c:
	* gparamspecs.c:
	* gparam.c:
	* gobject.c:
	* gsignal.c: Remove all docs from gobject at Tims
	request. Documentation is only for weenies anyway...
2003-02-07 22:04:24 +00:00
Matthias Clasen
634b48f254 Add docs. 2002-12-18 23:46:18 +00:00
Matthias Clasen
8b8616bb9c Move some docs inline.
* gobject/tmpl/param_value_types.sgml: Move some docs inline.

	* gsignal.c (g_signal_new): Typo fix.

	* gparamspecs.c:
	* gparam.c (g_param_spec_internal):
	* gobject.c (g_object_class_install_property): Add docs.
2002-12-15 02:38:49 +00:00
Matthias Clasen
0b93fa4048 More GSignal docs. 2002-12-02 19:56:12 +00:00