summaryrefslogtreecommitdiff
path: root/gobject
diff options
context:
space:
mode:
authorHyunjee Kim <hj0426.kim@samsung.com>2019-12-03 10:35:59 +0900
committerHyunjee Kim <hj0426.kim@samsung.com>2019-12-03 10:35:59 +0900
commitaedbffaae7e80f2e7d90374faea486abbc5e57f7 (patch)
treeb32b9c1e815ddc6804f1b96f191688f1dd860802 /gobject
parent5de945120591a487ffe65d50419ef336d3fe14d5 (diff)
downloadglib-aedbffaae7e80f2e7d90374faea486abbc5e57f7.tar.gz
glib-aedbffaae7e80f2e7d90374faea486abbc5e57f7.tar.bz2
glib-aedbffaae7e80f2e7d90374faea486abbc5e57f7.zip
Imported Upstream version 2.57.1
Diffstat (limited to 'gobject')
-rw-r--r--gobject/gclosure.c4
-rw-r--r--gobject/gclosure.h2
-rwxr-xr-xgobject/glib-mkenums.in4
-rw-r--r--gobject/gobject-autocleanups.h4
-rw-r--r--gobject/gobject.c18
-rw-r--r--gobject/gobject_gdb.py39
-rw-r--r--gobject/gsignal.c2
-rw-r--r--gobject/gsourceclosure.c2
-rw-r--r--gobject/gtype.h109
-rw-r--r--gobject/gtypemodule.c6
-rw-r--r--gobject/gvaluecollector.h12
-rw-r--r--gobject/meson.build15
12 files changed, 161 insertions, 56 deletions
diff --git a/gobject/gclosure.c b/gobject/gclosure.c
index caa11549c..b42af60bb 100644
--- a/gobject/gclosure.c
+++ b/gobject/gclosure.c
@@ -54,7 +54,9 @@
* library provides the #GCClosure type for this purpose. Bindings for
* other languages need marshallers which convert between #GValues
* and suitable representations in the runtime of the language in
- * order to use functions written in that languages as callbacks.
+ * order to use functions written in that language as callbacks. Use
+ * g_closure_set_marshal() to set the marshaller on such a custom
+ * closure implementation.
*
* Within GObject, closures play an important role in the
* implementation of signals. When a signal is registered, the
diff --git a/gobject/gclosure.h b/gobject/gclosure.h
index 393348c7c..a5c1c3fcb 100644
--- a/gobject/gclosure.h
+++ b/gobject/gclosure.h
@@ -200,7 +200,7 @@ struct _GClosure
/*< private >*/ GClosureNotifyData *notifiers;
- /* invariants/constrains:
+ /* invariants/constraints:
* - ->marshal and ->data are _invalid_ as soon as ->is_invalid==TRUE
* - invocation of all inotifiers occours prior to fnotifiers
* - order of inotifiers is random
diff --git a/gobject/glib-mkenums.in b/gobject/glib-mkenums.in
index 32e81af05..fe9a10756 100755
--- a/gobject/glib-mkenums.in
+++ b/gobject/glib-mkenums.in
@@ -99,7 +99,7 @@ codecs.register_error('replace_and_warn', replace_and_warn)
# glib-mkenums.py
# Information about the current enumeration
flags = None # Is enumeration a bitmask?
-option_underscore_name = '' # Overriden underscore variant of the enum name
+option_underscore_name = '' # Overridden underscore variant of the enum name
# for example to fix the cases we don't get the
# mixed-case -> underscorized transform right.
option_lowercase_name = '' # DEPRECATED. A lower case name to use as part
@@ -486,7 +486,7 @@ def process_file(curfilename):
if option_lowercase_name is not None:
if option_underscore_name is not None:
- print_warning("lowercase_name overriden with underscore_name")
+ print_warning("lowercase_name overridden with underscore_name")
option_lowercase_name = None
else:
print_warning("lowercase_name is deprecated, use underscore_name")
diff --git a/gobject/gobject-autocleanups.h b/gobject/gobject-autocleanups.h
index 8aeda2eb9..1613857ec 100644
--- a/gobject/gobject-autocleanups.h
+++ b/gobject/gobject-autocleanups.h
@@ -22,6 +22,10 @@
#endif
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GClosure, g_closure_unref)
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GEnumClass, g_type_class_unref)
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GFlagsClass, g_type_class_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GObject, g_object_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GInitiallyUnowned, g_object_unref)
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GParamSpec, g_param_spec_unref)
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GTypeClass, g_type_class_unref)
G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC(GValue, g_value_unset)
diff --git a/gobject/gobject.c b/gobject/gobject.c
index 81a1162e9..555ca3fae 100644
--- a/gobject/gobject.c
+++ b/gobject/gobject.c
@@ -477,11 +477,17 @@ g_object_do_class_init (GObjectClass *class)
* @gobject: the object which received the signal.
* @pspec: the #GParamSpec of the property which changed.
*
- * The notify signal is emitted on an object when one of its
- * properties has been changed. Note that getting this signal
- * doesn't guarantee that the value of the property has actually
- * changed, it may also be emitted when the setter for the property
- * is called to reinstate the previous value.
+ * The notify signal is emitted on an object when one of its properties has
+ * its value set through g_object_set_property(), g_object_set(), et al.
+ *
+ * Note that getting this signal doesn’t itself guarantee that the value of
+ * the property has actually changed. When it is emitted is determined by the
+ * derived GObject class. If the implementor did not create the property with
+ * %G_PARAM_EXPLICIT_NOTIFY, then any call to g_object_set_property() results
+ * in ::notify being emitted, even if the new value is the same as the old.
+ * If they did pass %G_PARAM_EXPLICIT_NOTIFY, then this signal is emitted only
+ * when they explicitly call g_object_notify() or g_object_notify_by_pspec(),
+ * and common practice is to do that only when the value has actually changed.
*
* This signal is typically used to obtain change notification for a
* single property, by specifying the property name as a detail in the
@@ -1899,7 +1905,7 @@ g_object_new_is_valid_property (GType object_type,
/**
- * g_object_new_with_properties: (rename-to g_object_new)
+ * g_object_new_with_properties: (skip)
* @object_type: the object type to instantiate
* @n_properties: the number of properties
* @names: (array length=n_properties): the names of each property to be set
diff --git a/gobject/gobject_gdb.py b/gobject/gobject_gdb.py
index c86dbd1b7..1746576fd 100644
--- a/gobject/gobject_gdb.py
+++ b/gobject/gobject_gdb.py
@@ -21,7 +21,7 @@ except ImportError:
def read_global_var (symname):
return gdb.selected_frame().read_var(symname)
-def g_type_to_name (gtype):
+def g_type_to_typenode (gtype):
def lookup_fundamental_type (typenode):
if typenode == 0:
return None
@@ -36,6 +36,10 @@ def g_type_to_name (gtype):
typenode = gdb.Value(typenode).cast (gdb.lookup_type("TypeNode").pointer())
else:
typenode = lookup_fundamental_type (typenode)
+ return typenode
+
+def g_type_to_name (gtype):
+ typenode = g_type_to_typenode(gtype)
if typenode != None:
return glib_gdb.g_quark_to_string (typenode["qname"])
return None
@@ -88,9 +92,42 @@ class GTypePrettyPrinter:
return ("0x%x [%s]")% (long(self.val), name)
return ("0x%x") % (long(self.val))
+def is_g_type_class_instance (val):
+ type = val.type
+ if type.code != gdb.TYPE_CODE_PTR:
+ return False
+ return str(type.target()) == "GTypeClass"
+
+class GTypeHandlePrettyPrinter:
+ "Prints a GType instance"
+
+ def __init__ (self, val, hint = ""):
+ self.val = val
+ self.hint = hint
+
+ def to_string (self):
+ typenode = g_type_to_typenode(self.val)
+ if typenode != None:
+ name = glib_gdb.g_quark_to_string (typenode["qname"])
+ s = ("0x%x [%s%s")% (long(self.val), self.hint, name)
+ for i in range (1, int(typenode["n_supers"])):
+ node = g_type_to_typenode(typenode["supers"][i])
+ if node:
+ name = glib_gdb.g_quark_to_string(node["qname"])
+ else:
+ name = "???"
+ s += "/" + name
+ return s + "]"
+ else:
+ return ("0x%x") % (long(self.val))
+
def pretty_printer_lookup (val):
if is_g_type_instance (val):
return GTypePrettyPrinter (val)
+ if str(val.type) == "GType":
+ return GTypeHandlePrettyPrinter (val)
+ if is_g_type_class_instance (val):
+ return GTypeHandlePrettyPrinter (val["g_type"], "g_type: ")
return None
diff --git a/gobject/gsignal.c b/gobject/gsignal.c
index b22dfcca8..76f1dc93c 100644
--- a/gobject/gsignal.c
+++ b/gobject/gsignal.c
@@ -1467,7 +1467,7 @@ g_signal_new (const gchar *signal_name,
* Creates a new signal. (This is usually done in the class initializer.)
*
* This is a variant of g_signal_new() that takes a C callback instead
- * off a class offset for the signal's class handler. This function
+ * of a class offset for the signal's class handler. This function
* doesn't need a function pointer exposed in the class structure of
* an object definition, instead the function pointer is passed
* directly and can be overriden by derived classes with
diff --git a/gobject/gsourceclosure.c b/gobject/gsourceclosure.c
index 3a1a1238a..0d0d2e87c 100644
--- a/gobject/gsourceclosure.c
+++ b/gobject/gsourceclosure.c
@@ -258,7 +258,7 @@ g_source_set_closure (GSource *source,
source->source_funcs != &g_timeout_funcs &&
source->source_funcs != &g_idle_funcs)
{
- g_critical (G_STRLOC ": closure cannot be set on GSource without GSourceFuncs::closure_callback\n");
+ g_critical (G_STRLOC ": closure cannot be set on GSource without GSourceFuncs::closure_callback");
return;
}
diff --git a/gobject/gtype.h b/gobject/gtype.h
index 375dfa210..cf7770322 100644
--- a/gobject/gtype.h
+++ b/gobject/gtype.h
@@ -1948,6 +1948,7 @@ static void type_name##_class_intern_init (gpointer klass) \
\
static void type_name##_init (TypeName *self); \
static void type_name##_class_init (TypeName##Class *klass); \
+static GType type_name##_get_type_once (void); \
static gpointer type_name##_parent_class = NULL; \
static gint TypeName##_private_offset; \
\
@@ -1970,7 +1971,17 @@ type_name##_get_type (void) \
#define _G_DEFINE_TYPE_EXTENDED_BEGIN_REGISTER(TypeName, type_name, TYPE_PARENT, flags) \
if (g_once_init_enter (&g_define_type_id__volatile)) \
{ \
- GType g_define_type_id = \
+ GType g_define_type_id = type_name##_get_type_once (); \
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); \
+ } \
+ return g_define_type_id__volatile; \
+} /* closes type_name##_get_type() */ \
+\
+G_GNUC_NO_INLINE \
+static GType \
+type_name##_get_type_once (void) \
+{ \
+ GType g_define_type_id = \
g_type_register_static_simple (TYPE_PARENT, \
g_intern_static_string (#TypeName), \
sizeof (TypeName##Class), \
@@ -1978,14 +1989,12 @@ type_name##_get_type (void) \
sizeof (TypeName), \
(GInstanceInitFunc)(void (*)(void)) type_name##_init, \
(GTypeFlags) flags); \
- { /* custom code follows */
+ { /* custom code follows */
#define _G_DEFINE_TYPE_EXTENDED_END() \
- /* following custom code */ \
- } \
- g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); \
+ /* following custom code */ \
} \
- return g_define_type_id__volatile; \
-} /* closes type_name##_get_type() */
+ return g_define_type_id; \
+} /* closes type_name##_get_type_once() */
/* This was defined before we had G_DEFINE_TYPE_WITH_CODE_AND_PRELUDE, it's simplest
* to keep it.
@@ -2070,42 +2079,66 @@ type_name##_get_type (void) \
*/
#if !defined (__cplusplus) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)) && !(defined (__APPLE__) && defined (__ppc64__))
#define _G_DEFINE_BOXED_TYPE_BEGIN(TypeName, type_name, copy_func, free_func) \
+static GType type_name##_get_type_once (void); \
+\
GType \
type_name##_get_type (void) \
{ \
static volatile gsize g_define_type_id__volatile = 0; \
if (g_once_init_enter (&g_define_type_id__volatile)) \
{ \
- GType (* _g_register_boxed) \
- (const gchar *, \
- union \
- { \
- TypeName * (*do_copy_type) (TypeName *); \
- TypeName * (*do_const_copy_type) (const TypeName *); \
- GBoxedCopyFunc do_copy_boxed; \
- } __attribute__((__transparent_union__)), \
- union \
- { \
- void (* do_free_type) (TypeName *); \
- GBoxedFreeFunc do_free_boxed; \
- } __attribute__((__transparent_union__)) \
- ) = g_boxed_type_register_static; \
- GType g_define_type_id = \
- _g_register_boxed (g_intern_static_string (#TypeName), copy_func, free_func); \
- { /* custom code follows */
+ GType g_define_type_id = type_name##_get_type_once (); \
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); \
+ } \
+ return g_define_type_id__volatile; \
+} \
+\
+G_GNUC_NO_INLINE \
+static GType \
+type_name##_get_type_once (void) \
+{ \
+ GType (* _g_register_boxed) \
+ (const gchar *, \
+ union \
+ { \
+ TypeName * (*do_copy_type) (TypeName *); \
+ TypeName * (*do_const_copy_type) (const TypeName *); \
+ GBoxedCopyFunc do_copy_boxed; \
+ } __attribute__((__transparent_union__)), \
+ union \
+ { \
+ void (* do_free_type) (TypeName *); \
+ GBoxedFreeFunc do_free_boxed; \
+ } __attribute__((__transparent_union__)) \
+ ) = g_boxed_type_register_static; \
+ GType g_define_type_id = \
+ _g_register_boxed (g_intern_static_string (#TypeName), copy_func, free_func); \
+ { /* custom code follows */
#else
#define _G_DEFINE_BOXED_TYPE_BEGIN(TypeName, type_name, copy_func, free_func) \
+static GType type_name##_get_type_once (void); \
+\
GType \
type_name##_get_type (void) \
{ \
static volatile gsize g_define_type_id__volatile = 0; \
if (g_once_init_enter (&g_define_type_id__volatile)) \
{ \
- GType g_define_type_id = \
- g_boxed_type_register_static (g_intern_static_string (#TypeName), \
- (GBoxedCopyFunc) copy_func, \
- (GBoxedFreeFunc) free_func); \
- { /* custom code follows */
+ GType g_define_type_id = type_name##_get_type_once (); \
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); \
+ } \
+ return g_define_type_id__volatile; \
+} \
+\
+G_GNUC_NO_INLINE \
+static GType \
+type_name##_get_type_once (void) \
+{ \
+ GType g_define_type_id = \
+ g_boxed_type_register_static (g_intern_static_string (#TypeName), \
+ (GBoxedCopyFunc) copy_func, \
+ (GBoxedFreeFunc) free_func); \
+ { /* custom code follows */
#endif /* __GNUC__ */
/**
@@ -2136,15 +2169,27 @@ type_name##_get_type (void) \
#define G_DEFINE_POINTER_TYPE_WITH_CODE(TypeName, type_name, _C_) _G_DEFINE_POINTER_TYPE_BEGIN (TypeName, type_name) {_C_;} _G_DEFINE_TYPE_EXTENDED_END()
#define _G_DEFINE_POINTER_TYPE_BEGIN(TypeName, type_name) \
+static GType type_name##_get_type_once (void); \
+\
GType \
type_name##_get_type (void) \
{ \
static volatile gsize g_define_type_id__volatile = 0; \
if (g_once_init_enter (&g_define_type_id__volatile)) \
{ \
- GType g_define_type_id = \
- g_pointer_type_register_static (g_intern_static_string (#TypeName)); \
- { /* custom code follows */
+ GType g_define_type_id = type_name##_get_type_once (); \
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); \
+ } \
+ return g_define_type_id__volatile; \
+} \
+\
+G_GNUC_NO_INLINE \
+static GType \
+type_name##_get_type_once (void) \
+{ \
+ GType g_define_type_id = \
+ g_pointer_type_register_static (g_intern_static_string (#TypeName)); \
+ { /* custom code follows */
/* --- protected (for fundamental type implementations) --- */
GLIB_AVAILABLE_IN_ALL
diff --git a/gobject/gtypemodule.c b/gobject/gtypemodule.c
index c67f789b1..4ecaf8c88 100644
--- a/gobject/gtypemodule.c
+++ b/gobject/gtypemodule.c
@@ -253,7 +253,7 @@ g_type_module_use (GTypeModule *module)
ModuleTypeInfo *type_info = tmp_list->data;
if (!type_info->loaded)
{
- g_warning ("plugin '%s' failed to register type '%s'\n",
+ g_warning ("plugin '%s' failed to register type '%s'",
module->name ? module->name : "(unknown)",
g_type_name (type_info->type));
module->use_count--;
@@ -309,7 +309,7 @@ g_type_module_use_plugin (GTypePlugin *plugin)
if (!g_type_module_use (module))
{
- g_warning ("Fatal error - Could not reload previously loaded plugin '%s'\n",
+ g_warning ("Fatal error - Could not reload previously loaded plugin '%s'",
module->name ? module->name : "(unknown)");
exit (1);
}
@@ -413,7 +413,7 @@ g_type_module_register_type (GTypeModule *module,
{
const gchar *parent_type_name = g_type_name (parent_type);
- g_warning ("Type '%s' recreated with different parent type.\n"
+ g_warning ("Type '%s' recreated with different parent type."
"(was '%s', now '%s')", type_name,
g_type_name (module_type_info->parent_type),
parent_type_name ? parent_type_name : "(unknown)");
diff --git a/gobject/gvaluecollector.h b/gobject/gvaluecollector.h
index f58858841..d083084f1 100644
--- a/gobject/gvaluecollector.h
+++ b/gobject/gvaluecollector.h
@@ -195,16 +195,16 @@ G_STMT_START { \
/**
* G_VALUE_LCOPY:
- * @value: a #GValue return location. @value is supposed to be initialized
- * according to the value type to be collected
+ * @value: a #GValue to store into the @var_args; this must be initialized
+ * and set
* @var_args: the va_list variable; it may be evaluated multiple times
* @flags: flags which are passed on to the lcopy_value() function of
* the #GTypeValueTable of @value.
* @__error: a #gchar** variable that will be modified to hold a g_new()
- * allocated error messages if something fails
- *
- * Collects a value's variable argument locations from a va_list. Usage is
- * analogous to G_VALUE_COLLECT().
+ * allocated error message if something fails
+ *
+ * Stores a value’s value into one or more argument locations from a va_list.
+ * This is the inverse of G_VALUE_COLLECT().
*/
#define G_VALUE_LCOPY(value, var_args, flags, __error) \
G_STMT_START { \
diff --git a/gobject/meson.build b/gobject/meson.build
index f1ab8fd46..d34a897a7 100644
--- a/gobject/meson.build
+++ b/gobject/meson.build
@@ -68,8 +68,19 @@ libgobject = library('gobject-2.0',
soversion : soversion,
install : true,
include_directories : [configinc],
- dependencies : [libintl, libffi_dep, libglib_dep],
- c_args : ['-DG_LOG_DOMAIN="GLib-GObject"', '-DGOBJECT_COMPILATION'] + glib_hidden_visibility_args)
+ dependencies : [libffi_dep, libglib_dep],
+ c_args : ['-DG_LOG_DOMAIN="GLib-GObject"', '-DGOBJECT_COMPILATION'] + glib_hidden_visibility_args,
+ link_args : glib_link_flags,
+)
+
+pkg.generate(libraries : libgobject,
+ requires : ['glib-2.0'],
+ version : glib_version,
+ install_dir : glib_pkgconfigreldir,
+ filebase : 'gobject-2.0',
+ name : 'GObject',
+ description : 'GLib Type, Object, Parameter and Signal Library',
+)
libgobject_dep = declare_dependency(link_with : libgobject,
include_directories : gobjectinc)