diff options
author | Leonard Kugis <leonardkugis@gmail.com> | 2018-01-13 22:56:35 +0100 |
---|---|---|
committer | Leonard Kugis <leonardkugis@gmail.com> | 2018-01-13 22:56:35 +0100 |
commit | 97b5922a75b6f0337c2d3ae4bc62dc18347f861e (patch) | |
tree | 9a11aa45941d35061cefd59e787e93696f5b35c7 /Release | |
parent | 78109333d989fa678c3c864defc4ef9d170f58ce (diff) |
Funktionierendes settings GUI
Diffstat (limited to 'Release')
49 files changed, 8730 insertions, 0 deletions
diff --git a/Release/share/glib-2.0/codegen/__init__.py b/Release/share/glib-2.0/codegen/__init__.py new file mode 100644 index 0000000..ed3a570 --- /dev/null +++ b/Release/share/glib-2.0/codegen/__init__.py @@ -0,0 +1,27 @@ +# -*- Mode: Python -*- + +# GDBus - GLib D-Bus Library +# +# Copyright (C) 2008-2011 Red Hat, Inc. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General +# Public License along with this library; if not, see <http://www.gnu.org/licenses/>. +# +# Author: David Zeuthen <davidz@redhat.com> + +import os + +builddir = os.environ.get('UNINSTALLED_GLIB_BUILDDIR') + +if builddir is not None: + __path__.append(os.path.abspath(os.path.join(builddir, 'gio', 'gdbus-2.0', 'codegen'))) diff --git a/Release/share/glib-2.0/codegen/codegen.py b/Release/share/glib-2.0/codegen/codegen.py new file mode 100644 index 0000000..09de619 --- /dev/null +++ b/Release/share/glib-2.0/codegen/codegen.py @@ -0,0 +1,3444 @@ +# -*- Mode: Python -*- + +# GDBus - GLib D-Bus Library +# +# Copyright (C) 2008-2011 Red Hat, Inc. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General +# Public License along with this library; if not, see <http://www.gnu.org/licenses/>. +# +# Author: David Zeuthen <davidz@redhat.com> + +import sys + +from . import config +from . import utils +from . import dbustypes + +# ---------------------------------------------------------------------------------------------------- + +class CodeGenerator: + def __init__(self, ifaces, namespace, interface_prefix, generate_objmanager, generate_autocleanup, docbook_gen, h, c): + self.docbook_gen = docbook_gen + self.generate_objmanager = generate_objmanager + self.generate_autocleanup = generate_autocleanup + self.ifaces = ifaces + self.h = h + self.c = c + self.namespace = namespace + if len(namespace) > 0: + if utils.is_ugly_case(namespace): + self.namespace = namespace.replace('_', '') + self.ns_upper = namespace.upper() + '_' + self.ns_lower = namespace.lower() + '_' + else: + self.ns_upper = utils.camel_case_to_uscore(namespace).upper() + '_' + self.ns_lower = utils.camel_case_to_uscore(namespace).lower() + '_' + else: + self.ns_upper = '' + self.ns_lower = '' + self.interface_prefix = interface_prefix + self.header_guard = self.h.name.upper().replace('.', '_').replace('-', '_').replace('/', '_') + + # ---------------------------------------------------------------------------------------------------- + + def generate_intro(self): + self.c.write('/*\n' + ' * Generated by gdbus-codegen %s. DO NOT EDIT.\n' + ' *\n' + ' * The license of this code is the same as for the source it was derived from.\n' + ' */\n' + '\n' + %(config.VERSION)) + self.c.write('#ifdef HAVE_CONFIG_H\n' + '# include "config.h"\n' + '#endif\n' + '\n' + '#include "%s"\n' + '\n' + '#include <string.h>\n' + %(self.h.name)) + + self.c.write('#ifdef G_OS_UNIX\n' + '# include <gio/gunixfdlist.h>\n' + '#endif\n' + '\n') + + self.c.write('typedef struct\n' + '{\n' + ' GDBusArgInfo parent_struct;\n' + ' gboolean use_gvariant;\n' + '} _ExtendedGDBusArgInfo;\n' + '\n') + + self.c.write('typedef struct\n' + '{\n' + ' GDBusMethodInfo parent_struct;\n' + ' const gchar *signal_name;\n' + ' gboolean pass_fdlist;\n' + '} _ExtendedGDBusMethodInfo;\n' + '\n') + + self.c.write('typedef struct\n' + '{\n' + ' GDBusSignalInfo parent_struct;\n' + ' const gchar *signal_name;\n' + '} _ExtendedGDBusSignalInfo;\n' + '\n') + + self.c.write('typedef struct\n' + '{\n' + ' GDBusPropertyInfo parent_struct;\n' + ' const gchar *hyphen_name;\n' + ' gboolean use_gvariant;\n' + '} _ExtendedGDBusPropertyInfo;\n' + '\n') + + self.c.write('typedef struct\n' + '{\n' + ' GDBusInterfaceInfo parent_struct;\n' + ' const gchar *hyphen_name;\n' + '} _ExtendedGDBusInterfaceInfo;\n' + '\n') + + self.c.write('typedef struct\n' + '{\n' + ' const _ExtendedGDBusPropertyInfo *info;\n' + ' guint prop_id;\n' + ' GValue orig_value; /* the value before the change */\n' + '} ChangedProperty;\n' + '\n' + 'static void\n' + '_changed_property_free (ChangedProperty *data)\n' + '{\n' + ' g_value_unset (&data->orig_value);\n' + ' g_free (data);\n' + '}\n' + '\n') + + self.c.write('static gboolean\n' + '_g_strv_equal0 (gchar **a, gchar **b)\n' + '{\n' + ' gboolean ret = FALSE;\n' + ' guint n;\n' + ' if (a == NULL && b == NULL)\n' + ' {\n' + ' ret = TRUE;\n' + ' goto out;\n' + ' }\n' + ' if (a == NULL || b == NULL)\n' + ' goto out;\n' + ' if (g_strv_length (a) != g_strv_length (b))\n' + ' goto out;\n' + ' for (n = 0; a[n] != NULL; n++)\n' + ' if (g_strcmp0 (a[n], b[n]) != 0)\n' + ' goto out;\n' + ' ret = TRUE;\n' + 'out:\n' + ' return ret;\n' + '}\n' + '\n') + + self.c.write('static gboolean\n' + '_g_variant_equal0 (GVariant *a, GVariant *b)\n' + '{\n' + ' gboolean ret = FALSE;\n' + ' if (a == NULL && b == NULL)\n' + ' {\n' + ' ret = TRUE;\n' + ' goto out;\n' + ' }\n' + ' if (a == NULL || b == NULL)\n' + ' goto out;\n' + ' ret = g_variant_equal (a, b);\n' + 'out:\n' + ' return ret;\n' + '}\n' + '\n') + + # simplified - only supports the types we use + self.c.write('G_GNUC_UNUSED static gboolean\n' + '_g_value_equal (const GValue *a, const GValue *b)\n' + '{\n' + ' gboolean ret = FALSE;\n' + ' g_assert (G_VALUE_TYPE (a) == G_VALUE_TYPE (b));\n' + ' switch (G_VALUE_TYPE (a))\n' + ' {\n' + ' case G_TYPE_BOOLEAN:\n' + ' ret = (g_value_get_boolean (a) == g_value_get_boolean (b));\n' + ' break;\n' + ' case G_TYPE_UCHAR:\n' + ' ret = (g_value_get_uchar (a) == g_value_get_uchar (b));\n' + ' break;\n' + ' case G_TYPE_INT:\n' + ' ret = (g_value_get_int (a) == g_value_get_int (b));\n' + ' break;\n' + ' case G_TYPE_UINT:\n' + ' ret = (g_value_get_uint (a) == g_value_get_uint (b));\n' + ' break;\n' + ' case G_TYPE_INT64:\n' + ' ret = (g_value_get_int64 (a) == g_value_get_int64 (b));\n' + ' break;\n' + ' case G_TYPE_UINT64:\n' + ' ret = (g_value_get_uint64 (a) == g_value_get_uint64 (b));\n' + ' break;\n' + ' case G_TYPE_DOUBLE:\n' + ' {\n' + ' /* Avoid -Wfloat-equal warnings by doing a direct bit compare */\n' + ' gdouble da = g_value_get_double (a);\n' + ' gdouble db = g_value_get_double (b);\n' + ' ret = memcmp (&da, &db, sizeof (gdouble)) == 0;\n' + ' }\n' + ' break;\n' + ' case G_TYPE_STRING:\n' + ' ret = (g_strcmp0 (g_value_get_string (a), g_value_get_string (b)) == 0);\n' + ' break;\n' + ' case G_TYPE_VARIANT:\n' + ' ret = _g_variant_equal0 (g_value_get_variant (a), g_value_get_variant (b));\n' + ' break;\n' + ' default:\n' + ' if (G_VALUE_TYPE (a) == G_TYPE_STRV)\n' + ' ret = _g_strv_equal0 (g_value_get_boxed (a), g_value_get_boxed (b));\n' + ' else\n' + ' g_critical ("_g_value_equal() does not handle type %s", g_type_name (G_VALUE_TYPE (a)));\n' + ' break;\n' + ' }\n' + ' return ret;\n' + '}\n' + '\n') + + self.h.write('/*\n' + ' * Generated by gdbus-codegen %s. DO NOT EDIT.\n' + ' *\n' + ' * The license of this code is the same as for the source it was derived from.\n' + ' */\n' + '\n' + '#ifndef __%s__\n' + '#define __%s__\n' + '\n'%(config.VERSION, self.header_guard, self.header_guard)) + self.h.write('#include <gio/gio.h>\n' + '\n' + 'G_BEGIN_DECLS\n' + '\n') + + # ---------------------------------------------------------------------------------------------------- + + def declare_types(self): + for i in self.ifaces: + self.h.write('\n') + self.h.write('/* ------------------------------------------------------------------------ */\n') + self.h.write('/* Declarations for %s */\n'%i.name) + self.h.write('\n') + + # First the GInterface + self.h.write('#define %sTYPE_%s (%s_get_type ())\n'%(i.ns_upper, i.name_upper, i.name_lower)) + self.h.write('#define %s%s(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), %sTYPE_%s, %s))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper, i.camel_name)) + self.h.write('#define %sIS_%s(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), %sTYPE_%s))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper)) + self.h.write('#define %s%s_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE ((o), %sTYPE_%s, %sIface))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper, i.camel_name)) + self.h.write('\n') + self.h.write('struct _%s;\n'%(i.camel_name)) + self.h.write('typedef struct _%s %s;\n'%(i.camel_name, i.camel_name)) + self.h.write('typedef struct _%sIface %sIface;\n'%(i.camel_name, i.camel_name)) + self.h.write('\n') + self.h.write('struct _%sIface\n'%(i.camel_name)) + self.h.write('{\n') + self.h.write(' GTypeInterface parent_iface;\n') + + function_pointers = {} + + # vfuncs for methods + if len(i.methods) > 0: + self.h.write('\n') + for m in i.methods: + unix_fd = False + if utils.lookup_annotation(m.annotations, 'org.gtk.GDBus.C.UnixFD'): + unix_fd = True + key = (m.since, '_method_%s'%m.name_lower) + value = ' gboolean (*handle_%s) (\n'%(m.name_lower) + value += ' %s *object,\n'%(i.camel_name) + value += ' GDBusMethodInvocation *invocation'%() + if unix_fd: + value += ',\n GUnixFDList *fd_list' + for a in m.in_args: + value += ',\n %sarg_%s'%(a.ctype_in, a.name) + value += ');\n\n' + function_pointers[key] = value + + # vfuncs for signals + if len(i.signals) > 0: + self.h.write('\n') + for s in i.signals: + key = (s.since, '_signal_%s'%s.name_lower) + value = ' void (*%s) (\n'%(s.name_lower) + value += ' %s *object'%(i.camel_name) + for a in s.args: + value += ',\n %sarg_%s'%(a.ctype_in, a.name) + value += ');\n\n' + function_pointers[key] = value + + # vfuncs for properties + if len(i.properties) > 0: + self.h.write('\n') + for p in i.properties: + key = (p.since, '_prop_get_%s'%p.name_lower) + value = ' %s (*get_%s) (%s *object);\n\n'%(p.arg.ctype_in, p.name_lower, i.camel_name) + function_pointers[key] = value + + # Sort according to @since tag, then name.. this ensures + # that the function pointers don't change order assuming + # judicious use of @since + # + # Also use a proper version comparison function so e.g. + # 10.0 comes after 2.0. + # + # See https://bugzilla.gnome.org/show_bug.cgi?id=647577#c5 + # for discussion + for key in sorted(function_pointers.keys(), key=utils.version_cmp_key): + self.h.write('%s'%function_pointers[key]) + + self.h.write('};\n') + self.h.write('\n') + if self.generate_autocleanup == 'all': + self.h.write('#if GLIB_CHECK_VERSION(2, 44, 0)\n') + self.h.write('G_DEFINE_AUTOPTR_CLEANUP_FUNC (%s, g_object_unref)\n' % (i.camel_name)) + self.h.write('#endif\n') + self.h.write('\n') + self.h.write('GType %s_get_type (void) G_GNUC_CONST;\n'%(i.name_lower)) + self.h.write('\n') + self.h.write('GDBusInterfaceInfo *%s_interface_info (void);\n'%(i.name_lower)) + self.h.write('guint %s_override_properties (GObjectClass *klass, guint property_id_begin);\n'%(i.name_lower)) + self.h.write('\n') + + # Then method call completion functions + if len(i.methods) > 0: + self.h.write('\n') + self.h.write('/* D-Bus method call completion functions: */\n') + for m in i.methods: + unix_fd = False + if utils.lookup_annotation(m.annotations, 'org.gtk.GDBus.C.UnixFD'): + unix_fd = True + if m.deprecated: + self.h.write('G_GNUC_DEPRECATED ') + self.h.write('void %s_complete_%s (\n' + ' %s *object,\n' + ' GDBusMethodInvocation *invocation'%(i.name_lower, m.name_lower, i.camel_name)) + if unix_fd: + self.h.write(',\n GUnixFDList *fd_list') + for a in m.out_args: + self.h.write(',\n %s%s'%(a.ctype_in, a.name)) + self.h.write(');\n') + self.h.write('\n') + self.h.write('\n') + + # Then signal emission functions + if len(i.signals) > 0: + self.h.write('\n') + self.h.write('/* D-Bus signal emissions functions: */\n') + for s in i.signals: + if s.deprecated: + self.h.write('G_GNUC_DEPRECATED ') + self.h.write('void %s_emit_%s (\n' + ' %s *object'%(i.name_lower, s.name_lower, i.camel_name)) + for a in s.args: + self.h.write(',\n %sarg_%s'%(a.ctype_in, a.name)) + self.h.write(');\n') + self.h.write('\n') + self.h.write('\n') + + # Then method call declarations + if len(i.methods) > 0: + self.h.write('\n') + self.h.write('/* D-Bus method calls: */\n') + for m in i.methods: + unix_fd = False + if utils.lookup_annotation(m.annotations, 'org.gtk.GDBus.C.UnixFD'): + unix_fd = True + # async begin + if m.deprecated: + self.h.write('G_GNUC_DEPRECATED ') + self.h.write('void %s_call_%s (\n' + ' %s *proxy'%(i.name_lower, m.name_lower, i.camel_name)) + for a in m.in_args: + self.h.write(',\n %sarg_%s'%(a.ctype_in, a.name)) + if unix_fd: + self.h.write(',\n GUnixFDList *fd_list') + self.h.write(',\n' + ' GCancellable *cancellable,\n' + ' GAsyncReadyCallback callback,\n' + ' gpointer user_data);\n') + self.h.write('\n') + # async finish + if m.deprecated: + self.h.write('G_GNUC_DEPRECATED ') + self.h.write('gboolean %s_call_%s_finish (\n' + ' %s *proxy'%(i.name_lower, m.name_lower, i.camel_name)) + for a in m.out_args: + self.h.write(',\n %sout_%s'%(a.ctype_out, a.name)) + if unix_fd: + self.h.write(',\n GUnixFDList **out_fd_list') + self.h.write(',\n' + ' GAsyncResult *res,\n' + ' GError **error);\n') + self.h.write('\n') + # sync + if m.deprecated: + self.h.write('G_GNUC_DEPRECATED ') + self.h.write('gboolean %s_call_%s_sync (\n' + ' %s *proxy'%(i.name_lower, m.name_lower, i.camel_name)) + for a in m.in_args: + self.h.write(',\n %sarg_%s'%(a.ctype_in, a.name)) + if unix_fd: + self.h.write(',\n GUnixFDList *fd_list') + for a in m.out_args: + self.h.write(',\n %sout_%s'%(a.ctype_out, a.name)) + if unix_fd: + self.h.write(',\n GUnixFDList **out_fd_list') + self.h.write(',\n' + ' GCancellable *cancellable,\n' + ' GError **error);\n') + self.h.write('\n') + self.h.write('\n') + + # Then the property accessor declarations + if len(i.properties) > 0: + self.h.write('\n') + self.h.write('/* D-Bus property accessors: */\n') + for p in i.properties: + # getter + if p.deprecated: + self.h.write('G_GNUC_DEPRECATED ') + self.h.write('%s%s_get_%s (%s *object);\n'%(p.arg.ctype_in, i.name_lower, p.name_lower, i.camel_name)) + if p.arg.free_func != None: + if p.deprecated: + self.h.write('G_GNUC_DEPRECATED ') + self.h.write('%s%s_dup_%s (%s *object);\n'%(p.arg.ctype_in_dup, i.name_lower, p.name_lower, i.camel_name)) + # setter + if p.deprecated: + self.h.write('G_GNUC_DEPRECATED ') + self.h.write('void %s_set_%s (%s *object, %svalue);\n'%(i.name_lower, p.name_lower, i.camel_name, p.arg.ctype_in, )) + self.h.write('\n') + + # Then the proxy + self.h.write('\n') + self.h.write('/* ---- */\n') + self.h.write('\n') + self.h.write('#define %sTYPE_%s_PROXY (%s_proxy_get_type ())\n'%(i.ns_upper, i.name_upper, i.name_lower)) + self.h.write('#define %s%s_PROXY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), %sTYPE_%s_PROXY, %sProxy))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper, i.camel_name)) + self.h.write('#define %s%s_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), %sTYPE_%s_PROXY, %sProxyClass))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper, i.camel_name)) + self.h.write('#define %s%s_PROXY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), %sTYPE_%s_PROXY, %sProxyClass))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper, i.camel_name)) + self.h.write('#define %sIS_%s_PROXY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), %sTYPE_%s_PROXY))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper)) + self.h.write('#define %sIS_%s_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), %sTYPE_%s_PROXY))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper)) + self.h.write('\n') + self.h.write('typedef struct _%sProxy %sProxy;\n'%(i.camel_name, i.camel_name)) + self.h.write('typedef struct _%sProxyClass %sProxyClass;\n'%(i.camel_name, i.camel_name)) + self.h.write('typedef struct _%sProxyPrivate %sProxyPrivate;\n'%(i.camel_name, i.camel_name)) + self.h.write('\n') + self.h.write('struct _%sProxy\n'%(i.camel_name)) + self.h.write('{\n') + self.h.write(' /*< private >*/\n') + self.h.write(' GDBusProxy parent_instance;\n') + self.h.write(' %sProxyPrivate *priv;\n'%(i.camel_name)) + self.h.write('};\n') + self.h.write('\n') + self.h.write('struct _%sProxyClass\n'%(i.camel_name)) + self.h.write('{\n') + self.h.write(' GDBusProxyClass parent_class;\n') + self.h.write('};\n') + self.h.write('\n') + self.h.write('GType %s_proxy_get_type (void) G_GNUC_CONST;\n'%(i.name_lower)) + self.h.write('\n') + if self.generate_autocleanup in ('objects', 'all'): + self.h.write('#if GLIB_CHECK_VERSION(2, 44, 0)\n') + self.h.write('G_DEFINE_AUTOPTR_CLEANUP_FUNC (%sProxy, g_object_unref)\n' % (i.camel_name)) + self.h.write('#endif\n') + self.h.write('\n') + if i.deprecated: + self.h.write('G_GNUC_DEPRECATED ') + self.h.write('void %s_proxy_new (\n' + ' GDBusConnection *connection,\n' + ' GDBusProxyFlags flags,\n' + ' const gchar *name,\n' + ' const gchar *object_path,\n' + ' GCancellable *cancellable,\n' + ' GAsyncReadyCallback callback,\n' + ' gpointer user_data);\n' + %(i.name_lower)) + if i.deprecated: + self.h.write('G_GNUC_DEPRECATED ') + self.h.write('%s *%s_proxy_new_finish (\n' + ' GAsyncResult *res,\n' + ' GError **error);\n' + %(i.camel_name, i.name_lower)) + if i.deprecated: + self.h.write('G_GNUC_DEPRECATED ') + self.h.write('%s *%s_proxy_new_sync (\n' + ' GDBusConnection *connection,\n' + ' GDBusProxyFlags flags,\n' + ' const gchar *name,\n' + ' const gchar *object_path,\n' + ' GCancellable *cancellable,\n' + ' GError **error);\n' + %(i.camel_name, i.name_lower)) + self.h.write('\n') + if i.deprecated: + self.h.write('G_GNUC_DEPRECATED ') + self.h.write('void %s_proxy_new_for_bus (\n' + ' GBusType bus_type,\n' + ' GDBusProxyFlags flags,\n' + ' const gchar *name,\n' + ' const gchar *object_path,\n' + ' GCancellable *cancellable,\n' + ' GAsyncReadyCallback callback,\n' + ' gpointer user_data);\n' + %(i.name_lower)) + if i.deprecated: + self.h.write('G_GNUC_DEPRECATED ') + self.h.write('%s *%s_proxy_new_for_bus_finish (\n' + ' GAsyncResult *res,\n' + ' GError **error);\n' + %(i.camel_name, i.name_lower)) + if i.deprecated: + self.h.write('G_GNUC_DEPRECATED ') + self.h.write('%s *%s_proxy_new_for_bus_sync (\n' + ' GBusType bus_type,\n' + ' GDBusProxyFlags flags,\n' + ' const gchar *name,\n' + ' const gchar *object_path,\n' + ' GCancellable *cancellable,\n' + ' GError **error);\n' + %(i.camel_name, i.name_lower)) + self.h.write('\n') + + # Then the skeleton + self.h.write('\n') + self.h.write('/* ---- */\n') + self.h.write('\n') + self.h.write('#define %sTYPE_%s_SKELETON (%s_skeleton_get_type ())\n'%(i.ns_upper, i.name_upper, i.name_lower)) + self.h.write('#define %s%s_SKELETON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), %sTYPE_%s_SKELETON, %sSkeleton))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper, i.camel_name)) + self.h.write('#define %s%s_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), %sTYPE_%s_SKELETON, %sSkeletonClass))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper, i.camel_name)) + self.h.write('#define %s%s_SKELETON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), %sTYPE_%s_SKELETON, %sSkeletonClass))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper, i.camel_name)) + self.h.write('#define %sIS_%s_SKELETON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), %sTYPE_%s_SKELETON))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper)) + self.h.write('#define %sIS_%s_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), %sTYPE_%s_SKELETON))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper)) + self.h.write('\n') + self.h.write('typedef struct _%sSkeleton %sSkeleton;\n'%(i.camel_name, i.camel_name)) + self.h.write('typedef struct _%sSkeletonClass %sSkeletonClass;\n'%(i.camel_name, i.camel_name)) + self.h.write('typedef struct _%sSkeletonPrivate %sSkeletonPrivate;\n'%(i.camel_name, i.camel_name)) + self.h.write('\n') + self.h.write('struct _%sSkeleton\n'%(i.camel_name)) + self.h.write('{\n') + self.h.write(' /*< private >*/\n') + self.h.write(' GDBusInterfaceSkeleton parent_instance;\n') + self.h.write(' %sSkeletonPrivate *priv;\n'%(i.camel_name)) + self.h.write('};\n') + self.h.write('\n') + self.h.write('struct _%sSkeletonClass\n'%(i.camel_name)) + self.h.write('{\n') + self.h.write(' GDBusInterfaceSkeletonClass parent_class;\n') + self.h.write('};\n') + self.h.write('\n') + self.h.write('GType %s_skeleton_get_type (void) G_GNUC_CONST;\n'%(i.name_lower)) + self.h.write('\n') + if self.generate_autocleanup in ('objects', 'all'): + self.h.write('#if GLIB_CHECK_VERSION(2, 44, 0)\n') + self.h.write('G_DEFINE_AUTOPTR_CLEANUP_FUNC (%sSkeleton, g_object_unref)\n' % (i.camel_name)) + self.h.write('#endif\n') + self.h.write('\n') + if i.deprecated: + self.h.write('G_GNUC_DEPRECATED ') + self.h.write('%s *%s_skeleton_new (void);\n'%(i.camel_name, i.name_lower)) + + self.h.write('\n') + + # Finally, the Object, ObjectProxy, ObjectSkeleton and ObjectManagerClient + if self.generate_objmanager: + self.h.write('\n') + self.h.write('/* ---- */\n') + self.h.write('\n') + self.h.write('#define %sTYPE_OBJECT (%sobject_get_type ())\n'%(self.ns_upper, self.ns_lower)) + self.h.write('#define %sOBJECT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), %sTYPE_OBJECT, %sObject))\n'%(self.ns_upper, self.ns_upper, self.namespace)) + self.h.write('#define %sIS_OBJECT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), %sTYPE_OBJECT))\n'%(self.ns_upper, self.ns_upper)) + self.h.write('#define %sOBJECT_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE ((o), %sTYPE_OBJECT, %sObject))\n'%(self.ns_upper, self.ns_upper, self.namespace)) + self.h.write('\n') + self.h.write('struct _%sObject;\n'%(self.namespace)) + self.h.write('typedef struct _%sObject %sObject;\n'%(self.namespace, self.namespace)) + self.h.write('typedef struct _%sObjectIface %sObjectIface;\n'%(self.namespace, self.namespace)) + self.h.write('\n') + self.h.write('struct _%sObjectIface\n'%(self.namespace)) + self.h.write('{\n' + ' GTypeInterface parent_iface;\n' + '};\n' + '\n') + self.h.write('GType %sobject_get_type (void) G_GNUC_CONST;\n' + '\n' + %(self.ns_lower)) + for i in self.ifaces: + if i.deprecated: + self.h.write('G_GNUC_DEPRECATED ') + self.h.write ('%s *%sobject_get_%s (%sObject *object);\n' + %(i.camel_name, self.ns_lower, i.name_upper.lower(), self.namespace)) + for i in self.ifaces: + if i.deprecated: + self.h.write('G_GNUC_DEPRECATED ') + self.h.write ('%s *%sobject_peek_%s (%sObject *object);\n' + %(i.camel_name, self.ns_lower, i.name_upper.lower(), self.namespace)) + self.h.write('\n') + self.h.write('#define %sTYPE_OBJECT_PROXY (%sobject_proxy_get_type ())\n'%(self.ns_upper, self.ns_lower)) + self.h.write('#define %sOBJECT_PROXY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), %sTYPE_OBJECT_PROXY, %sObjectProxy))\n'%(self.ns_upper, self.ns_upper, self.namespace)) + self.h.write('#define %sOBJECT_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), %sTYPE_OBJECT_PROXY, %sObjectProxyClass))\n'%(self.ns_upper, self.ns_upper, self.namespace)) + self.h.write('#define %sOBJECT_PROXY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), %sTYPE_OBJECT_PROXY, %sObjectProxyClass))\n'%(self.ns_upper, self.ns_upper, self.namespace)) + self.h.write('#define %sIS_OBJECT_PROXY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), %sTYPE_OBJECT_PROXY))\n'%(self.ns_upper, self.ns_upper)) + self.h.write('#define %sIS_OBJECT_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), %sTYPE_OBJECT_PROXY))\n'%(self.ns_upper, self.ns_upper)) + self.h.write('\n') + self.h.write('typedef struct _%sObjectProxy %sObjectProxy;\n'%(self.namespace, self.namespace)) + self.h.write('typedef struct _%sObjectProxyClass %sObjectProxyClass;\n'%(self.namespace, self.namespace)) + self.h.write('typedef struct _%sObjectProxyPrivate %sObjectProxyPrivate;\n'%(self.namespace, self.namespace)) + self.h.write('\n') + self.h.write('struct _%sObjectProxy\n'%(self.namespace)) + self.h.write('{\n') + self.h.write(' /*< private >*/\n') + self.h.write(' GDBusObjectProxy parent_instance;\n') + self.h.write(' %sObjectProxyPrivate *priv;\n'%(self.namespace)) + self.h.write('};\n') + self.h.write('\n') + self.h.write('struct _%sObjectProxyClass\n'%(self.namespace)) + self.h.write('{\n') + self.h.write(' GDBusObjectProxyClass parent_class;\n') + self.h.write('};\n') + self.h.write('\n') + self.h.write('GType %sobject_proxy_get_type (void) G_GNUC_CONST;\n'%(self.ns_lower)) + self.h.write('\n') + if self.generate_autocleanup in ('objects', 'all'): + self.h.write('#if GLIB_CHECK_VERSION(2, 44, 0)\n') + self.h.write('G_DEFINE_AUTOPTR_CLEANUP_FUNC (%sObjectProxy, g_object_unref)\n' % (self.namespace)) + self.h.write('#endif\n') + self.h.write('\n') + self.h.write('%sObjectProxy *%sobject_proxy_new (GDBusConnection *connection, const gchar *object_path);\n'%(self.namespace, self.ns_lower)) + self.h.write('\n') + self.h.write('#define %sTYPE_OBJECT_SKELETON (%sobject_skeleton_get_type ())\n'%(self.ns_upper, self.ns_lower)) + self.h.write('#define %sOBJECT_SKELETON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), %sTYPE_OBJECT_SKELETON, %sObjectSkeleton))\n'%(self.ns_upper, self.ns_upper, self.namespace)) + self.h.write('#define %sOBJECT_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), %sTYPE_OBJECT_SKELETON, %sObjectSkeletonClass))\n'%(self.ns_upper, self.ns_upper, self.namespace)) + self.h.write('#define %sOBJECT_SKELETON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), %sTYPE_OBJECT_SKELETON, %sObjectSkeletonClass))\n'%(self.ns_upper, self.ns_upper, self.namespace)) + self.h.write('#define %sIS_OBJECT_SKELETON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), %sTYPE_OBJECT_SKELETON))\n'%(self.ns_upper, self.ns_upper)) + self.h.write('#define %sIS_OBJECT_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), %sTYPE_OBJECT_SKELETON))\n'%(self.ns_upper, self.ns_upper)) + self.h.write('\n') + self.h.write('typedef struct _%sObjectSkeleton %sObjectSkeleton;\n'%(self.namespace, self.namespace)) + self.h.write('typedef struct _%sObjectSkeletonClass %sObjectSkeletonClass;\n'%(self.namespace, self.namespace)) + self.h.write('typedef struct _%sObjectSkeletonPrivate %sObjectSkeletonPrivate;\n'%(self.namespace, self.namespace)) + self.h.write('\n') + self.h.write('struct _%sObjectSkeleton\n'%(self.namespace)) + self.h.write('{\n') + self.h.write(' /*< private >*/\n') + self.h.write(' GDBusObjectSkeleton parent_instance;\n') + self.h.write(' %sObjectSkeletonPrivate *priv;\n'%(self.namespace)) + self.h.write('};\n') + self.h.write('\n') + self.h.write('struct _%sObjectSkeletonClass\n'%(self.namespace)) + self.h.write('{\n') + self.h.write(' GDBusObjectSkeletonClass parent_class;\n') + self.h.write('};\n') + self.h.write('\n') + self.h.write('GType %sobject_skeleton_get_type (void) G_GNUC_CONST;\n'%(self.ns_lower)) + self.h.write('\n') + if self.generate_autocleanup in ('objects', 'all'): + self.h.write('#if GLIB_CHECK_VERSION(2, 44, 0)\n') + self.h.write('G_DEFINE_AUTOPTR_CLEANUP_FUNC (%sObjectSkeleton, g_object_unref)\n' % (self.namespace)) + self.h.write('#endif\n') + self.h.write('\n') + self.h.write('%sObjectSkeleton *%sobject_skeleton_new (const gchar *object_path);\n' + %(self.namespace, self.ns_lower)) + for i in self.ifaces: + if i.deprecated: + self.h.write('G_GNUC_DEPRECATED ') + self.h.write ('void %sobject_skeleton_set_%s (%sObjectSkeleton *object, %s *interface_);\n' + %(self.ns_lower, i.name_upper.lower(), self.namespace, i.camel_name)) + self.h.write('\n') + + self.h.write('/* ---- */\n') + self.h.write('\n') + self.h.write('#define %sTYPE_OBJECT_MANAGER_CLIENT (%sobject_manager_client_get_type ())\n'%(self.ns_upper, self.ns_lower)) + self.h.write('#define %sOBJECT_MANAGER_CLIENT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), %sTYPE_OBJECT_MANAGER_CLIENT, %sObjectManagerClient))\n'%(self.ns_upper, self.ns_upper, self.namespace)) + self.h.write('#define %sOBJECT_MANAGER_CLIENT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), %sTYPE_OBJECT_MANAGER_CLIENT, %sObjectManagerClientClass))\n'%(self.ns_upper, self.ns_upper, self.namespace)) + self.h.write('#define %sOBJECT_MANAGER_CLIENT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), %sTYPE_OBJECT_MANAGER_CLIENT, %sObjectManagerClientClass))\n'%(self.ns_upper, self.ns_upper, self.namespace)) + self.h.write('#define %sIS_OBJECT_MANAGER_CLIENT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), %sTYPE_OBJECT_MANAGER_CLIENT))\n'%(self.ns_upper, self.ns_upper)) + self.h.write('#define %sIS_OBJECT_MANAGER_CLIENT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), %sTYPE_OBJECT_MANAGER_CLIENT))\n'%(self.ns_upper, self.ns_upper)) + self.h.write('\n') + self.h.write('typedef struct _%sObjectManagerClient %sObjectManagerClient;\n'%(self.namespace, self.namespace)) + self.h.write('typedef struct _%sObjectManagerClientClass %sObjectManagerClientClass;\n'%(self.namespace, self.namespace)) + self.h.write('typedef struct _%sObjectManagerClientPrivate %sObjectManagerClientPrivate;\n'%(self.namespace, self.namespace)) + self.h.write('\n') + self.h.write('struct _%sObjectManagerClient\n'%(self.namespace)) + self.h.write('{\n') + self.h.write(' /*< private >*/\n') + self.h.write(' GDBusObjectManagerClient parent_instance;\n') + self.h.write(' %sObjectManagerClientPrivate *priv;\n'%(self.namespace)) + self.h.write('};\n') + self.h.write('\n') + self.h.write('struct _%sObjectManagerClientClass\n'%(self.namespace)) + self.h.write('{\n') + self.h.write(' GDBusObjectManagerClientClass parent_class;\n') + self.h.write('};\n') + self.h.write('\n') + if self.generate_autocleanup in ('objects', 'all'): + self.h.write('#if GLIB_CHECK_VERSION(2, 44, 0)\n') + self.h.write('G_DEFINE_AUTOPTR_CLEANUP_FUNC (%sObjectManagerClient, g_object_unref)\n' % (self.namespace)) + self.h.write('#endif\n') + self.h.write('\n') + self.h.write('GType %sobject_manager_client_get_type (void) G_GNUC_CONST;\n'%(self.ns_lower)) + self.h.write('\n') + self.h.write('GType %sobject_manager_client_get_proxy_type (GDBusObjectManagerClient *manager, const gchar *object_path, const gchar *interface_name, gpointer user_data);\n'%(self.ns_lower)) + self.h.write('\n') + self.h.write('void %sobject_manager_client_new (\n' + ' GDBusConnection *connection,\n' + ' GDBusObjectManagerClientFlags flags,\n' + ' const gchar *name,\n' + ' const gchar *object_path,\n' + ' GCancellable *cancellable,\n' + ' GAsyncReadyCallback callback,\n' + ' gpointer user_data);\n' + %(self.ns_lower)) + self.h.write('GDBusObjectManager *%sobject_manager_client_new_finish (\n' + ' GAsyncResult *res,\n' + ' GError **error);\n' + %(self.ns_lower)) + self.h.write('GDBusObjectManager *%sobject_manager_client_new_sync (\n' + ' GDBusConnection *connection,\n' + ' GDBusObjectManagerClientFlags flags,\n' + ' const gchar *name,\n' + ' const gchar *object_path,\n' + ' GCancellable *cancellable,\n' + ' GError **error);\n' + %(self.ns_lower)) + self.h.write('\n') + self.h.write('void %sobject_manager_client_new_for_bus (\n' + ' GBusType bus_type,\n' + ' GDBusObjectManagerClientFlags flags,\n' + ' const gchar *name,\n' + ' const gchar *object_path,\n' + ' GCancellable *cancellable,\n' + ' GAsyncReadyCallback callback,\n' + ' gpointer user_data);\n' + %(self.ns_lower)) + self.h.write('GDBusObjectManager *%sobject_manager_client_new_for_bus_finish (\n' + ' GAsyncResult *res,\n' + ' GError **error);\n' + %(self.ns_lower)) + self.h.write('GDBusObjectManager *%sobject_manager_client_new_for_bus_sync (\n' + ' GBusType bus_type,\n' + ' GDBusObjectManagerClientFlags flags,\n' + ' const gchar *name,\n' + ' const gchar *object_path,\n' + ' GCancellable *cancellable,\n' + ' GError **error);\n' + %(self.ns_lower)) + self.h.write('\n') + + # ---------------------------------------------------------------------------------------------------- + + def generate_outro(self): + self.h.write('\n' + 'G_END_DECLS\n' + '\n' + '#endif /* __%s__ */\n'%(self.header_guard)) + + # ---------------------------------------------------------------------------------------------------- + + def generate_annotations(self, prefix, annotations): + if annotations == None: + return + + n = 0 + for a in annotations: + #self.generate_annotations('%s_%d'%(prefix, n), a.get_annotations()) + + # skip internal annotations + if a.key.startswith('org.gtk.GDBus'): + continue + + self.c.write('static const GDBusAnnotationInfo %s_%d =\n' + '{\n' + ' -1,\n' + ' (gchar *) "%s",\n' + ' (gchar *) "%s",\n'%(prefix, n, a.key, a.value)) + if len(a.annotations) == 0: + self.c.write(' NULL\n') + else: + self.c.write(' (GDBusAnnotationInfo **) &%s_%d_pointers\n'%(prefix, n)) + self.c.write('};\n' + '\n') + n += 1 + + if n > 0: + self.c.write('static const GDBusAnnotationInfo * const %s_pointers[] =\n' + '{\n'%(prefix)) + m = 0; + for a in annotations: + if a.key.startswith('org.gtk.GDBus'): + continue + self.c.write(' &%s_%d,\n'%(prefix, m)) + m += 1 + self.c.write(' NULL\n' + '};\n' + '\n') + return n + + def generate_args(self, prefix, args): + for a in args: + num_anno = self.generate_annotations('%s_arg_%s_annotation_info'%(prefix, a.name), a.annotations) + + self.c.write('static const _ExtendedGDBusArgInfo %s_%s =\n' + '{\n' + ' {\n' + ' -1,\n' + ' (gchar *) "%s",\n' + ' (gchar *) "%s",\n'%(prefix, a.name, a.name, a.signature)) + if num_anno == 0: + self.c.write(' NULL\n') + else: + self.c.write(' (GDBusAnnotationInfo **) &%s_arg_%s_annotation_info_pointers\n'%(prefix, a.name)) + self.c.write(' },\n') + if not utils.lookup_annotation(a.annotations, 'org.gtk.GDBus.C.ForceGVariant'): + self.c.write(' FALSE\n') + else: + self.c.write(' TRUE\n') + self.c.write('};\n' + '\n') + + if len(args) > 0: + self.c.write('static const _ExtendedGDBusArgInfo * const %s_pointers[] =\n' + '{\n'%(prefix)) + for a in args: + self.c.write(' &%s_%s,\n'%(prefix, a.name)) + self.c.write(' NULL\n' + '};\n' + '\n') + + def generate_introspection_for_interface(self, i): + self.c.write('/* ---- Introspection data for %s ---- */\n' + '\n'%(i.name)) + + if len(i.methods) > 0: + for m in i.methods: + unix_fd = False + if utils.lookup_annotation(m.annotations, 'org.gtk.GDBus.C.UnixFD'): + unix_fd = True + self.generate_args('_%s_method_info_%s_IN_ARG'%(i.name_lower, m.name_lower), m.in_args) + self.generate_args('_%s_method_info_%s_OUT_ARG'%(i.name_lower, m.name_lower), m.out_args) + + num_anno = self.generate_annotations('_%s_method_%s_annotation_info'%(i.name_lower, m.name_lower), m.annotations) + + self.c.write('static const _ExtendedGDBusMethodInfo _%s_method_info_%s =\n' + '{\n' + ' {\n' + ' -1,\n' + ' (gchar *) "%s",\n'%(i.name_lower, m.name_lower, m.name)) + if len(m.in_args) == 0: + self.c.write(' NULL,\n') + else: + self.c.write(' (GDBusArgInfo **) &_%s_method_info_%s_IN_ARG_pointers,\n'%(i.name_lower, m.name_lower)) + if len(m.out_args) == 0: + self.c.write(' NULL,\n') + else: + self.c.write(' (GDBusArgInfo **) &_%s_method_info_%s_OUT_ARG_pointers,\n'%(i.name_lower, m.name_lower)) + if num_anno == 0: + self.c.write(' NULL\n') + else: + self.c.write(' (GDBusAnnotationInfo **) &_%s_method_%s_annotation_info_pointers\n'%(i.name_lower, m.name_lower)) + self.c.write(' },\n' + ' "handle-%s",\n' + ' %s\n' + %(m.name_hyphen, 'TRUE' if unix_fd else 'FALSE')) + self.c.write('};\n' + '\n') + + self.c.write('static const _ExtendedGDBusMethodInfo * const _%s_method_info_pointers[] =\n' + '{\n'%(i.name_lower)) + for m in i.methods: + self.c.write(' &_%s_method_info_%s,\n'%(i.name_lower, m.name_lower)) + self.c.write(' NULL\n' + '};\n' + '\n') + + # --- + + if len(i.signals) > 0: + for s in i.signals: + self.generate_args('_%s_signal_info_%s_ARG'%(i.name_lower, s.name_lower), s.args) + + num_anno = self.generate_annotations('_%s_signal_%s_annotation_info'%(i.name_lower, s.name_lower), s.annotations) + self.c.write('static const _ExtendedGDBusSignalInfo _%s_signal_info_%s =\n' + '{\n' + ' {\n' + ' -1,\n' + ' (gchar *) "%s",\n'%(i.name_lower, s.name_lower, s.name)) + if len(s.args) == 0: + self.c.write(' NULL,\n') + else: + self.c.write(' (GDBusArgInfo **) &_%s_signal_info_%s_ARG_pointers,\n'%(i.name_lower, s.name_lower)) + if num_anno == 0: + self.c.write(' NULL\n') + else: + self.c.write(' (GDBusAnnotationInfo **) &_%s_signal_%s_annotation_info_pointers\n'%(i.name_lower, s.name_lower)) + self.c.write(' },\n' + ' "%s"\n' + %(s.name_hyphen)) + self.c.write('};\n' + '\n') + + self.c.write('static const _ExtendedGDBusSignalInfo * const _%s_signal_info_pointers[] =\n' + '{\n'%(i.name_lower)) + for s in i.signals: + self.c.write(' &_%s_signal_info_%s,\n'%(i.name_lower, s.name_lower)) + self.c.write(' NULL\n' + '};\n' + '\n') + + # --- + + if len(i.properties) > 0: + for p in i.properties: + if p.readable and p.writable: + access = 'G_DBUS_PROPERTY_INFO_FLAGS_READABLE | G_DBUS_PROPERTY_INFO_FLAGS_WRITABLE' + elif p.readable: + access = 'G_DBUS_PROPERTY_INFO_FLAGS_READABLE' + elif p.writable: + access = 'G_DBUS_PROPERTY_INFO_FLAGS_WRITABLE' + else: + access = 'G_DBUS_PROPERTY_INFO_FLAGS_NONE' + num_anno = self.generate_annotations('_%s_property_%s_annotation_info'%(i.name_lower, p.name_lower), p.annotations) + self.c.write('static const _ExtendedGDBusPropertyInfo _%s_property_info_%s =\n' + '{\n' + ' {\n' + ' -1,\n' + ' (gchar *) "%s",\n' + ' (gchar *) "%s",\n' + ' %s,\n'%(i.name_lower, p.name_lower, p.name, p.arg.signature, access)) + if num_anno == 0: + self.c.write(' NULL\n') + else: + self.c.write(' (GDBusAnnotationInfo **) &_%s_property_%s_annotation_info_pointers\n'%(i.name_lower, p.name_lower)) + self.c.write(' },\n' + ' "%s",\n' + %(p.name_hyphen)) + if not utils.lookup_annotation(p.annotations, 'org.gtk.GDBus.C.ForceGVariant'): + self.c.write(' FALSE\n') + else: + self.c.write(' TRUE\n') + self.c.write('};\n' + '\n') + + self.c.write('static const _ExtendedGDBusPropertyInfo * const _%s_property_info_pointers[] =\n' + '{\n'%(i.name_lower)) + for p in i.properties: + self.c.write(' &_%s_property_info_%s,\n'%(i.name_lower, p.name_lower)) + self.c.write(' NULL\n' + '};\n' + '\n') + + num_anno = self.generate_annotations('_%s_annotation_info'%(i.name_lower), i.annotations) + self.c.write('static const _ExtendedGDBusInterfaceInfo _%s_interface_info =\n' + '{\n' + ' {\n' + ' -1,\n' + ' (gchar *) "%s",\n'%(i.name_lower, i.name)) + if len(i.methods) == 0: + self.c.write(' NULL,\n') + else: + self.c.write(' (GDBusMethodInfo **) &_%s_method_info_pointers,\n'%(i.name_lower)) + if len(i.signals) == 0: + self.c.write(' NULL,\n') + else: + self.c.write(' (GDBusSignalInfo **) &_%s_signal_info_pointers,\n'%(i.name_lower)) + if len(i.properties) == 0: + self.c.write(' NULL,\n') + else: + self.c.write(' (GDBusPropertyInfo **) &_%s_property_info_pointers,\n'%(i.name_lower)) + if num_anno == 0: + self.c.write(' NULL\n') + else: + self.c.write(' (GDBusAnnotationInfo **) &_%s_annotation_info_pointers\n'%(i.name_lower)) + self.c.write(' },\n' + ' "%s",\n' + '};\n' + '\n' + %(i.name_hyphen)) + self.c.write('\n') + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * %s_interface_info:\n' + ' *\n' + ' * Gets a machine-readable description of the #%s D-Bus interface.\n' + ' *\n' + ' * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free.\n' + %(i.name_lower, i.name), False)) + self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 0) + self.c.write('GDBusInterfaceInfo *\n' + '%s_interface_info (void)\n' + '{\n' + ' return (GDBusInterfaceInfo *) &_%s_interface_info.parent_struct;\n' + '}\n' + '\n'%(i.name_lower, i.name_lower)) + + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * %s_override_properties:\n' + ' * @klass: The class structure for a #GObject<!-- -->-derived class.\n' + ' * @property_id_begin: The property id to assign to the first overridden property.\n' + ' *\n' + ' * Overrides all #GObject properties in the #%s interface for a concrete class.\n' + ' * The properties are overridden in the order they are defined.\n' + ' *\n' + ' * Returns: The last property id.\n' + %(i.name_lower, i.camel_name), False)) + self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 0) + self.c.write('guint\n' + '%s_override_properties (GObjectClass *klass, guint property_id_begin)\n' + '{\n'%(i.name_lower)) + for p in i.properties: + self.c.write (' g_object_class_override_property (klass, property_id_begin++, "%s");\n'%(p.name_hyphen)) + self.c.write(' return property_id_begin - 1;\n' + '}\n' + '\n') + self.c.write('\n') + + # ---------------------------------------------------------------------------------------------------- + + def generate_interface(self, i): + self.c.write('\n') + + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * %s:\n' + ' *\n' + ' * Abstract interface type for the D-Bus interface #%s.\n' + %(i.camel_name, i.name), False)) + self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 0) + self.c.write('\n') + + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * %sIface:\n' + ' * @parent_iface: The parent interface.\n' + %(i.camel_name), False)) + + doc_bits = {} + if len(i.methods) > 0: + for m in i.methods: + key = (m.since, '_method_%s'%m.name_lower) + value = '@handle_%s: '%(m.name_lower) + value += 'Handler for the #%s::handle-%s signal.'%(i.camel_name, m.name_hyphen) + doc_bits[key] = value + if len(i.signals) > 0: + for s in i.signals: + key = (s.since, '_signal_%s'%s.name_lower) + value = '@%s: '%(s.name_lower) + value += 'Handler for the #%s::%s signal.'%(i.camel_name, s.name_hyphen) + doc_bits[key] = value + if len(i.properties) > 0: + for p in i.properties: + key = (p.since, '_prop_get_%s'%p.name_lower) + value = '@get_%s: '%(p.name_lower) + value += 'Getter for the #%s:%s property.'%(i.camel_name, p.name_hyphen) + doc_bits[key] = value + for key in sorted(doc_bits.keys(), key=utils.version_cmp_key): + self.c.write(' * %s\n'%doc_bits[key]) + + self.c.write(self.docbook_gen.expand( + ' *\n' + ' * Virtual table for the D-Bus interface #%s.\n' + %(i.name), False)) + self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 0) + self.c.write('\n') + + self.c.write('typedef %sIface %sInterface;\n'%(i.camel_name, i.camel_name)) + self.c.write('G_DEFINE_INTERFACE (%s, %s, G_TYPE_OBJECT);\n'%(i.camel_name, i.name_lower)) + self.c.write('\n') + + self.c.write('static void\n' + '%s_default_init (%sIface *iface)\n' + '{\n'%(i.name_lower, i.camel_name)); + + if len(i.methods) > 0: + self.c.write(' /* GObject signals for incoming D-Bus method calls: */\n') + for m in i.methods: + unix_fd = False + if utils.lookup_annotation(m.annotations, 'org.gtk.GDBus.C.UnixFD'): + unix_fd = True + self.c.write(self.docbook_gen.expand( + ' /**\n' + ' * %s::handle-%s:\n' + ' * @object: A #%s.\n' + ' * @invocation: A #GDBusMethodInvocation.\n' + %(i.camel_name, m.name_hyphen, i.camel_name), False)) + if unix_fd: + self.c.write (' * @fd_list: (allow-none): A #GUnixFDList or %NULL.\n') + for a in m.in_args: + self.c.write (' * @arg_%s: Argument passed by remote caller.\n'%(a.name)) + self.c.write(self.docbook_gen.expand( + ' *\n' + ' * Signal emitted when a remote caller is invoking the %s.%s() D-Bus method.\n' + ' *\n' + ' * If a signal handler returns %%TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call %s_complete_%s() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %%G_DBUS_ERROR_UNKNOWN_METHOD error is returned.\n' + ' *\n' + ' * Returns: %%TRUE if the invocation was handled, %%FALSE to let other signal handlers run.\n' + %(i.name, m.name, i.name_lower, m.name_lower), False)) + self.write_gtkdoc_deprecated_and_since_and_close(m, self.c, 2) + if unix_fd: + extra_args = 2 + else: + extra_args = 1 + self.c.write(' g_signal_new ("handle-%s",\n' + ' G_TYPE_FROM_INTERFACE (iface),\n' + ' G_SIGNAL_RUN_LAST,\n' + ' G_STRUCT_OFFSET (%sIface, handle_%s),\n' + ' g_signal_accumulator_true_handled,\n' + ' NULL,\n' # accu_data + ' g_cclosure_marshal_generic,\n' + ' G_TYPE_BOOLEAN,\n' + ' %d,\n' + ' G_TYPE_DBUS_METHOD_INVOCATION' + %(m.name_hyphen, i.camel_name, m.name_lower, len(m.in_args) + extra_args)) + if unix_fd: + self.c.write(', G_TYPE_UNIX_FD_LIST') + for a in m.in_args: + self.c.write (', %s'%(a.gtype)) + self.c.write(');\n') + self.c.write('\n') + + if len(i.signals) > 0: + self.c.write(' /* GObject signals for received D-Bus signals: */\n') + for s in i.signals: + self.c.write(self.docbook_gen.expand( + ' /**\n' + ' * %s::%s:\n' + ' * @object: A #%s.\n' + %(i.camel_name, s.name_hyphen, i.camel_name), False)) + for a in s.args: + self.c.write (' * @arg_%s: Argument.\n'%(a.name)) + self.c.write(self.docbook_gen.expand( + ' *\n' + ' * On the client-side, this signal is emitted whenever the D-Bus signal #%s::%s is received.\n' + ' *\n' + ' * On the service-side, this signal can be used with e.g. g_signal_emit_by_name() to make the object emit the D-Bus signal.\n' + %(i.name, s.name), False)) + self.write_gtkdoc_deprecated_and_since_and_close(s, self.c, 2) + self.c.write(' g_signal_new ("%s",\n' + ' G_TYPE_FROM_INTERFACE (iface),\n' + ' G_SIGNAL_RUN_LAST,\n' + ' G_STRUCT_OFFSET (%sIface, %s),\n' + ' NULL,\n' # accumulator + ' NULL,\n' # accu_data + ' g_cclosure_marshal_generic,\n' + ' G_TYPE_NONE,\n' + ' %d' + %(s.name_hyphen, i.camel_name, s.name_lower, len(s.args))) + for a in s.args: + self.c.write (', %s'%(a.gtype)) + self.c.write(');\n') + self.c.write('\n') + + if len(i.properties) > 0: + self.c.write(' /* GObject properties for D-Bus properties: */\n') + for p in i.properties: + if p.readable and p.writable: + hint = 'Since the D-Bus property for this #GObject property is both readable and writable, it is meaningful to both read from it and write to it on both the service- and client-side.' + elif p.readable: + hint = 'Since the D-Bus property for this #GObject property is readable but not writable, it is meaningful to read from it on both the client- and service-side. It is only meaningful, however, to write to it on the service-side.' + elif p.writable: + hint = 'Since the D-Bus property for this #GObject property is writable but not readable, it is meaningful to write to it on both the client- and service-side. It is only meaningful, however, to read from it on the service-side.' + else: + raise RuntimeError('Cannot handle property %s that neither readable nor writable'%(p.name)) + self.c.write(self.docbook_gen.expand( + ' /**\n' + ' * %s:%s:\n' + ' *\n' + ' * Represents the D-Bus property #%s:%s.\n' + ' *\n' + ' * %s\n' + %(i.camel_name, p.name_hyphen, i.name, p.name, hint), False)) + self.write_gtkdoc_deprecated_and_since_and_close(p, self.c, 2) + self.c.write(' g_object_interface_install_property (iface,\n') + if p.arg.gtype == 'G_TYPE_VARIANT': + s = 'g_param_spec_variant ("%s", "%s", "%s", G_VARIANT_TYPE ("%s"), NULL'%(p.name_hyphen, p.name, p.name, p.arg.signature) + elif p.arg.signature == 'b': + s = 'g_param_spec_boolean ("%s", "%s", "%s", FALSE'%(p.name_hyphen, p.name, p.name) + elif p.arg.signature == 'y': + s = 'g_param_spec_uchar ("%s", "%s", "%s", 0, 255, 0'%(p.name_hyphen, p.name, p.name) + elif p.arg.signature == 'n': + s = 'g_param_spec_int ("%s", "%s", "%s", G_MININT16, G_MAXINT16, 0'%(p.name_hyphen, p.name, p.name) + elif p.arg.signature == 'q': + s = 'g_param_spec_uint ("%s", "%s", "%s", 0, G_MAXUINT16, 0'%(p.name_hyphen, p.name, p.name) + elif p.arg.signature == 'i': + s = 'g_param_spec_int ("%s", "%s", "%s", G_MININT32, G_MAXINT32, 0'%(p.name_hyphen, p.name, p.name) + elif p.arg.signature == 'u': + s = 'g_param_spec_uint ("%s", "%s", "%s", 0, G_MAXUINT32, 0'%(p.name_hyphen, p.name, p.name) + elif p.arg.signature == 'x': + s = 'g_param_spec_int64 ("%s", "%s", "%s", G_MININT64, G_MAXINT64, 0'%(p.name_hyphen, p.name, p.name) + elif p.arg.signature == 't': + s = 'g_param_spec_uint64 ("%s", "%s", "%s", 0, G_MAXUINT64, 0'%(p.name_hyphen, p.name, p.name) + elif p.arg.signature == 'd': + s = 'g_param_spec_double ("%s", "%s", "%s", -G_MAXDOUBLE, G_MAXDOUBLE, 0.0'%(p.name_hyphen, p.name, p.name) + elif p.arg.signature == 's': + s = 'g_param_spec_string ("%s", "%s", "%s", NULL'%(p.name_hyphen, p.name, p.name) + elif p.arg.signature == 'o': + s = 'g_param_spec_string ("%s", "%s", "%s", NULL'%(p.name_hyphen, p.name, p.name) + elif p.arg.signature == 'g': + s = 'g_param_spec_string ("%s", "%s", "%s", NULL'%(p.name_hyphen, p.name, p.name) + elif p.arg.signature == 'ay': + s = 'g_param_spec_string ("%s", "%s", "%s", NULL'%(p.name_hyphen, p.name, p.name) + elif p.arg.signature == 'as': + s = 'g_param_spec_boxed ("%s", "%s", "%s", G_TYPE_STRV'%(p.name_hyphen, p.name, p.name) + elif p.arg.signature == 'ao': + s = 'g_param_spec_boxed ("%s", "%s", "%s", G_TYPE_STRV'%(p.name_hyphen, p.name, p.name) + elif p.arg.signature == 'aay': + s = 'g_param_spec_boxed ("%s", "%s", "%s", G_TYPE_STRV'%(p.name_hyphen, p.name, p.name) + else: + raise RuntimeError('Unsupported gtype %s for GParamSpec'%(p.arg.gtype)) + self.c.write(' %s, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));'%s); + self.c.write('\n') + + self.c.write('}\n' + '\n') + + # ---------------------------------------------------------------------------------------------------- + + def generate_property_accessors(self, i): + for p in i.properties: + # getter + if p.readable and p.writable: + hint = 'Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side.' + elif p.readable: + hint = 'Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.' + elif p.writable: + hint = 'Since this D-Bus property is not readable, it is only meaningful to use this function on the service-side.' + else: + raise RuntimeError('Cannot handle property %s that neither readable nor writable'%(p.name)) + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * %s_get_%s: (skip)\n' + ' * @object: A #%s.\n' + ' *\n' + ' * Gets the value of the #%s:%s D-Bus property.\n' + ' *\n' + ' * %s\n' + ' *\n' + %(i.name_lower, p.name_lower, i.camel_name, i.name, p.name, hint), False)) + if p.arg.free_func != None: + self.c.write(' * <warning>The returned value is only valid until the property changes so on the client-side it is only safe to use this function on the thread where @object was constructed. Use %s_dup_%s() if on another thread.</warning>\n' + ' *\n' + ' * Returns: (transfer none): The property value or %%NULL if the property is not set. Do not free the returned value, it belongs to @object.\n' + %(i.name_lower, p.name_lower)) + else: + self.c.write(' * Returns: The property value.\n') + self.write_gtkdoc_deprecated_and_since_and_close(p, self.c, 0) + self.c.write('%s\n' + '%s_get_%s (%s *object)\n' + '{\n'%(p.arg.ctype_in, i.name_lower, p.name_lower, i.camel_name)) + self.c.write(' return %s%s_GET_IFACE (object)->get_%s (object);\n'%(i.ns_upper, i.name_upper, p.name_lower)) + self.c.write('}\n') + self.c.write('\n') + if p.arg.free_func != None: + + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * %s_dup_%s: (skip)\n' + ' * @object: A #%s.\n' + ' *\n' + ' * Gets a copy of the #%s:%s D-Bus property.\n' + ' *\n' + ' * %s\n' + ' *\n' + ' * Returns: (transfer full): The property value or %%NULL if the property is not set. The returned value should be freed with %s().\n' + %(i.name_lower, p.name_lower, i.camel_name, i.name, p.name, hint, p.arg.free_func), False)) + self.write_gtkdoc_deprecated_and_since_and_close(p, self.c, 0) + self.c.write('%s\n' + '%s_dup_%s (%s *object)\n' + '{\n' + ' %svalue;\n'%(p.arg.ctype_in_dup, i.name_lower, p.name_lower, i.camel_name, p.arg.ctype_in_dup)) + self.c.write(' g_object_get (G_OBJECT (object), "%s", &value, NULL);\n'%(p.name_hyphen)) + self.c.write(' return value;\n') + self.c.write('}\n') + self.c.write('\n') + + # setter + if p.readable and p.writable: + hint = 'Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side.' + elif p.readable: + hint = 'Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.' + elif p.writable: + hint = 'Since this D-Bus property is writable, it is meaningful to use this function on both the client- and service-side.' + else: + raise RuntimeError('Cannot handle property %s that neither readable nor writable'%(p.name)) + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * %s_set_%s: (skip)\n' + ' * @object: A #%s.\n' + ' * @value: The value to set.\n' + ' *\n' + ' * Sets the #%s:%s D-Bus property to @value.\n' + ' *\n' + ' * %s\n' + %(i.name_lower, p.name_lower, i.camel_name, i.name, p.name, hint), False)) + self.write_gtkdoc_deprecated_and_since_and_close(p, self.c, 0) + self.c.write('void\n' + '%s_set_%s (%s *object, %svalue)\n' + '{\n'%(i.name_lower, p.name_lower, i.camel_name, p.arg.ctype_in, )) + self.c.write(' g_object_set (G_OBJECT (object), "%s", value, NULL);\n'%(p.name_hyphen)) + self.c.write('}\n') + self.c.write('\n') + + # --------------------------------------------------------------------------------------------------- + + def generate_signal_emitters(self, i): + for s in i.signals: + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * %s_emit_%s:\n' + ' * @object: A #%s.\n' + %(i.name_lower, s.name_lower, i.camel_name), False)) + for a in s.args: + self.c.write(' * @arg_%s: Argument to pass with the signal.\n'%(a.name)) + self.c.write(self.docbook_gen.expand( + ' *\n' + ' * Emits the #%s::%s D-Bus signal.\n' + %(i.name, s.name), False)) + self.write_gtkdoc_deprecated_and_since_and_close(s, self.c, 0) + self.c.write('void\n' + '%s_emit_%s (\n' + ' %s *object'%(i.name_lower, s.name_lower, i.camel_name)) + for a in s.args: + self.c.write(',\n %sarg_%s'%(a.ctype_in, a.name)) + self.c.write(')\n' + '{\n' + ' g_signal_emit_by_name (object, "%s"'%(s.name_hyphen)) + for a in s.args: + self.c.write(', arg_%s'%a.name) + self.c.write(');\n') + self.c.write('}\n' + '\n') + + # --------------------------------------------------------------------------------------------------- + + def generate_method_calls(self, i): + for m in i.methods: + unix_fd = False + if utils.lookup_annotation(m.annotations, 'org.gtk.GDBus.C.UnixFD'): + unix_fd = True + # async begin + self.c.write('/**\n' + ' * %s_call_%s:\n' + ' * @proxy: A #%sProxy.\n' + %(i.name_lower, m.name_lower, i.camel_name)) + for a in m.in_args: + self.c.write(' * @arg_%s: Argument to pass with the method invocation.\n'%(a.name)) + if unix_fd: + self.c.write(' * @fd_list: (allow-none): A #GUnixFDList or %NULL.\n') + self.c.write(self.docbook_gen.expand( + ' * @cancellable: (allow-none): A #GCancellable or %%NULL.\n' + ' * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %%NULL.\n' + ' * @user_data: User data to pass to @callback.\n' + ' *\n' + ' * Asynchronously invokes the %s.%s() D-Bus method on @proxy.\n' + ' * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.\n' + ' * You can then call %s_call_%s_finish() to get the result of the operation.\n' + ' *\n' + ' * See %s_call_%s_sync() for the synchronous, blocking version of this method.\n' + %(i.name, m.name, i.name_lower, m.name_lower, i.name_lower, m.name_lower), False)) + self.write_gtkdoc_deprecated_and_since_and_close(m, self.c, 0) + self.c.write('void\n' + '%s_call_%s (\n' + ' %s *proxy'%(i.name_lower, m.name_lower, i.camel_name)) + for a in m.in_args: + self.c.write(',\n %sarg_%s'%(a.ctype_in, a.name)) + if unix_fd: + self.c.write(',\n GUnixFDList *fd_list') + self.c.write(',\n' + ' GCancellable *cancellable,\n' + ' GAsyncReadyCallback callback,\n' + ' gpointer user_data)\n' + '{\n') + if unix_fd: + self.c.write(' g_dbus_proxy_call_with_unix_fd_list (G_DBUS_PROXY (proxy),\n') + else: + self.c.write(' g_dbus_proxy_call (G_DBUS_PROXY (proxy),\n') + self.c.write(' "%s",\n' + ' g_variant_new ("('%(m.name)) + for a in m.in_args: + self.c.write('%s'%(a.format_in)) + self.c.write(')"') + for a in m.in_args: + self.c.write(',\n arg_%s'%(a.name)) + self.c.write('),\n' + ' G_DBUS_CALL_FLAGS_NONE,\n' + ' -1,\n') + if unix_fd: + self.c.write(' fd_list,\n') + self.c.write(' cancellable,\n' + ' callback,\n' + ' user_data);\n') + self.c.write('}\n' + '\n') + # async finish + self.c.write('/**\n' + ' * %s_call_%s_finish:\n' + ' * @proxy: A #%sProxy.\n' + %(i.name_lower, m.name_lower, i.camel_name)) + for a in m.out_args: + self.c.write(' * @out_%s: (out): Return location for return parameter or %%NULL to ignore.\n'%(a.name)) + if unix_fd: + self.c.write(' * @out_fd_list: (out): Return location for a #GUnixFDList or %NULL.\n') + self.c.write(self.docbook_gen.expand( + ' * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to %s_call_%s().\n' + ' * @error: Return location for error or %%NULL.\n' + ' *\n' + ' * Finishes an operation started with %s_call_%s().\n' + ' *\n' + ' * Returns: (skip): %%TRUE if the call succeded, %%FALSE if @error is set.\n' + %(i.name_lower, m.name_lower, i.name_lower, m.name_lower), False)) + self.write_gtkdoc_deprecated_and_since_and_close(m, self.c, 0) + self.c.write('gboolean\n' + '%s_call_%s_finish (\n' + ' %s *proxy'%(i.name_lower, m.name_lower, i.camel_name)) + for a in m.out_args: + self.c.write(',\n %sout_%s'%(a.ctype_out, a.name)) + if unix_fd: + self.c.write(',\n GUnixFDList **out_fd_list') + self.c.write(',\n' + ' GAsyncResult *res,\n' + ' GError **error)\n' + '{\n' + ' GVariant *_ret;\n') + if unix_fd: + self.c.write(' _ret = g_dbus_proxy_call_with_unix_fd_list_finish (G_DBUS_PROXY (proxy), out_fd_list, res, error);\n') + else: + self.c.write(' _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);\n') + self.c.write(' if (_ret == NULL)\n' + ' goto _out;\n') + self.c.write(' g_variant_get (_ret,\n' + ' \"(') + for a in m.out_args: + self.c.write('%s'%(a.format_out)) + self.c.write(')"') + for a in m.out_args: + self.c.write(',\n out_%s'%(a.name)) + self.c.write(');\n' + ' g_variant_unref (_ret);\n') + self.c.write('_out:\n' + ' return _ret != NULL;\n' + '}\n' + '\n') + + + # sync + self.c.write('/**\n' + ' * %s_call_%s_sync:\n' + ' * @proxy: A #%sProxy.\n' + %(i.name_lower, m.name_lower, i.camel_name)) + for a in m.in_args: + self.c.write(' * @arg_%s: Argument to pass with the method invocation.\n'%(a.name)) + if unix_fd: + self.c.write(' * @fd_list: (allow-none): A #GUnixFDList or %NULL.\n') + for a in m.out_args: + self.c.write(' * @out_%s: (out): Return location for return parameter or %%NULL to ignore.\n'%(a.name)) + if unix_fd: + self.c.write(' * @out_fd_list: (out): Return location for a #GUnixFDList or %NULL.\n') + self.c.write(self.docbook_gen.expand( + ' * @cancellable: (allow-none): A #GCancellable or %%NULL.\n' + ' * @error: Return location for error or %%NULL.\n' + ' *\n' + ' * Synchronously invokes the %s.%s() D-Bus method on @proxy. The calling thread is blocked until a reply is received.\n' + ' *\n' + ' * See %s_call_%s() for the asynchronous version of this method.\n' + ' *\n' + ' * Returns: (skip): %%TRUE if the call succeded, %%FALSE if @error is set.\n' + %(i.name, m.name, i.name_lower, m.name_lower), False)) + self.write_gtkdoc_deprecated_and_since_and_close(m, self.c, 0) + self.c.write('gboolean\n' + '%s_call_%s_sync (\n' + ' %s *proxy'%(i.name_lower, m.name_lower, i.camel_name)) + for a in m.in_args: + self.c.write(',\n %sarg_%s'%(a.ctype_in, a.name)) + if unix_fd: + self.c.write(',\n GUnixFDList *fd_list') + for a in m.out_args: + self.c.write(',\n %sout_%s'%(a.ctype_out, a.name)) + if unix_fd: + self.c.write(',\n GUnixFDList **out_fd_list') + self.c.write(',\n' + ' GCancellable *cancellable,\n' + ' GError **error)\n' + '{\n' + ' GVariant *_ret;\n') + if unix_fd: + self.c.write(' _ret = g_dbus_proxy_call_with_unix_fd_list_sync (G_DBUS_PROXY (proxy),\n') + else: + self.c.write(' _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),\n') + self.c.write(' "%s",\n' + ' g_variant_new ("('%(m.name)) + for a in m.in_args: + self.c.write('%s'%(a.format_in)) + self.c.write(')"') + for a in m.in_args: + self.c.write(',\n arg_%s'%(a.name)) + self.c.write('),\n' + ' G_DBUS_CALL_FLAGS_NONE,\n' + ' -1,\n') + if unix_fd: + self.c.write(' fd_list,\n' + ' out_fd_list,\n') + self.c.write(' cancellable,\n' + ' error);\n' + ' if (_ret == NULL)\n' + ' goto _out;\n') + self.c.write(' g_variant_get (_ret,\n' + ' \"(') + for a in m.out_args: + self.c.write('%s'%(a.format_out)) + self.c.write(')"') + for a in m.out_args: + self.c.write(',\n out_%s'%(a.name)) + self.c.write(');\n' + ' g_variant_unref (_ret);\n') + self.c.write('_out:\n' + ' return _ret != NULL;\n' + '}\n' + '\n') + + # --------------------------------------------------------------------------------------------------- + + def generate_method_completers(self, i): + for m in i.methods: + unix_fd = False + if utils.lookup_annotation(m.annotations, 'org.gtk.GDBus.C.UnixFD'): + unix_fd = True + self.c.write('/**\n' + ' * %s_complete_%s:\n' + ' * @object: A #%s.\n' + ' * @invocation: (transfer full): A #GDBusMethodInvocation.\n' + %(i.name_lower, m.name_lower, i.camel_name)) + if unix_fd: + self.c.write (' * @fd_list: (allow-none): A #GUnixFDList or %NULL.\n') + for a in m.out_args: + self.c.write(' * @%s: Parameter to return.\n'%(a.name)) + self.c.write(self.docbook_gen.expand( + ' *\n' + ' * Helper function used in service implementations to finish handling invocations of the %s.%s() D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.\n' + ' *\n' + ' * This method will free @invocation, you cannot use it afterwards.\n' + %(i.name, m.name), False)) + self.write_gtkdoc_deprecated_and_since_and_close(m, self.c, 0) + self.c.write('void\n' + '%s_complete_%s (\n' + ' %s *object,\n' + ' GDBusMethodInvocation *invocation'%(i.name_lower, m.name_lower, i.camel_name)) + if unix_fd: + self.c.write(',\n GUnixFDList *fd_list') + for a in m.out_args: + self.c.write(',\n %s%s'%(a.ctype_in, a.name)) + self.c.write(')\n' + '{\n') + + if unix_fd: + self.c.write(' g_dbus_method_invocation_return_value_with_unix_fd_list (invocation,\n' + ' g_variant_new ("(') + else: + self.c.write(' g_dbus_method_invocation_return_value (invocation,\n' + ' g_variant_new ("(') + for a in m.out_args: + self.c.write('%s'%(a.format_in)) + self.c.write(')"') + for a in m.out_args: + self.c.write(',\n %s'%(a.name)) + if unix_fd: + self.c.write('),\n fd_list);\n') + else: + self.c.write('));\n') + self.c.write('}\n' + '\n') + + # --------------------------------------------------------------------------------------------------- + + def generate_proxy(self, i): + # class boilerplate + self.c.write('/* ------------------------------------------------------------------------ */\n' + '\n') + + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * %sProxy:\n' + ' *\n' + ' * The #%sProxy structure contains only private data and should only be accessed using the provided API.\n' + %(i.camel_name, i.camel_name), False)) + self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 0) + self.c.write('\n') + + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * %sProxyClass:\n' + ' * @parent_class: The parent class.\n' + ' *\n' + ' * Class structure for #%sProxy.\n' + %(i.camel_name, i.camel_name), False)) + self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 0) + self.c.write('\n') + + self.c.write('struct _%sProxyPrivate\n' + '{\n' + ' GData *qdata;\n' + '};\n' + '\n'%i.camel_name) + + self.c.write('static void %s_proxy_iface_init (%sIface *iface);\n' + '\n'%(i.name_lower, i.camel_name)) + self.c.write('#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38\n') + self.c.write('G_DEFINE_TYPE_WITH_CODE (%sProxy, %s_proxy, G_TYPE_DBUS_PROXY,\n'%(i.camel_name, i.name_lower)) + self.c.write(' G_ADD_PRIVATE (%sProxy)\n'%(i.camel_name)) + self.c.write(' G_IMPLEMENT_INTERFACE (%sTYPE_%s, %s_proxy_iface_init));\n\n'%(i.ns_upper, i.name_upper, i.name_lower)) + self.c.write('#else\n') + self.c.write('G_DEFINE_TYPE_WITH_CODE (%sProxy, %s_proxy, G_TYPE_DBUS_PROXY,\n'%(i.camel_name, i.name_lower)) + self.c.write(' G_IMPLEMENT_INTERFACE (%sTYPE_%s, %s_proxy_iface_init));\n\n'%(i.ns_upper, i.name_upper, i.name_lower)) + self.c.write('#endif\n') + + # finalize + self.c.write('static void\n' + '%s_proxy_finalize (GObject *object)\n' + '{\n'%(i.name_lower)) + self.c.write(' %sProxy *proxy = %s%s_PROXY (object);\n'%(i.camel_name, i.ns_upper, i.name_upper)) + self.c.write(' g_datalist_clear (&proxy->priv->qdata);\n') + self.c.write(' G_OBJECT_CLASS (%s_proxy_parent_class)->finalize (object);\n' + '}\n' + '\n'%(i.name_lower)) + + # property accessors + # + # Note that we are guaranteed that prop_id starts at 1 and is + # laid out in the same order as introspection data pointers + # + self.c.write('static void\n' + '%s_proxy_get_property (GObject *object,\n' + ' guint prop_id,\n' + ' GValue *value,\n' + ' GParamSpec *pspec G_GNUC_UNUSED)\n' + '{\n'%(i.name_lower)) + if len(i.properties) > 0: + self.c.write(' const _ExtendedGDBusPropertyInfo *info;\n' + ' GVariant *variant;\n' + ' g_assert (prop_id != 0 && prop_id - 1 < %d);\n' + ' info = _%s_property_info_pointers[prop_id - 1];\n' + ' variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (object), info->parent_struct.name);\n' + ' if (info->use_gvariant)\n' + ' {\n' + ' g_value_set_variant (value, variant);\n' + ' }\n' + ' else\n' + ' {\n' + # could be that we don't have the value in cache - in that case, we do + # nothing and the user gets the default value for the GType + ' if (variant != NULL)\n' + ' g_dbus_gvariant_to_gvalue (variant, value);\n' + ' }\n' + ' if (variant != NULL)\n' + ' g_variant_unref (variant);\n' + %(len(i.properties), i.name_lower)) + self.c.write('}\n' + '\n') + if len(i.properties) > 0: + self.c.write('static void\n' + '%s_proxy_set_property_cb (GDBusProxy *proxy,\n' + ' GAsyncResult *res,\n' + ' gpointer user_data)\n' + '{\n'%(i.name_lower)) + self.c.write(' const _ExtendedGDBusPropertyInfo *info = user_data;\n' + ' GError *error;\n' + ' GVariant *_ret;\n' + ' error = NULL;\n' + ' _ret = g_dbus_proxy_call_finish (proxy, res, &error);\n' + ' if (!_ret)\n' + ' {\n' + ' g_warning ("Error setting property \'%%s\' on interface %s: %%s (%%s, %%d)",\n' + ' info->parent_struct.name, \n' + ' error->message, g_quark_to_string (error->domain), error->code);\n' + ' g_error_free (error);\n' + ' }\n' + ' else\n' + ' {\n' + ' g_variant_unref (_ret);\n' + ' }\n' + %(i.name)) + self.c.write('}\n' + '\n') + self.c.write('static void\n' + '%s_proxy_set_property (GObject *object,\n' + ' guint prop_id,\n' + ' const GValue *value,\n' + ' GParamSpec *pspec G_GNUC_UNUSED)\n' + '{\n'%(i.name_lower)) + if len(i.properties) > 0: + self.c.write(' const _ExtendedGDBusPropertyInfo *info;\n' + ' GVariant *variant;\n' + ' g_assert (prop_id != 0 && prop_id - 1 < %d);\n' + ' info = _%s_property_info_pointers[prop_id - 1];\n' + ' variant = g_dbus_gvalue_to_gvariant (value, G_VARIANT_TYPE (info->parent_struct.signature));\n' + ' g_dbus_proxy_call (G_DBUS_PROXY (object),\n' + ' "org.freedesktop.DBus.Properties.Set",\n' + ' g_variant_new ("(ssv)", "%s", info->parent_struct.name, variant),\n' + ' G_DBUS_CALL_FLAGS_NONE,\n' + ' -1,\n' + ' NULL, (GAsyncReadyCallback) %s_proxy_set_property_cb, (GDBusPropertyInfo *) &info->parent_struct);\n' + ' g_variant_unref (variant);\n' + %(len(i.properties), i.name_lower, i.name, i.name_lower)) + self.c.write('}\n' + '\n') + + # signal received + self.c.write('static void\n' + '%s_proxy_g_signal (GDBusProxy *proxy,\n' + ' const gchar *sender_name G_GNUC_UNUSED,\n' + ' const gchar *signal_name,\n' + ' GVariant *parameters)\n' + '{\n'%(i.name_lower)) + self.c.write(' _ExtendedGDBusSignalInfo *info;\n' + ' GVariantIter iter;\n' + ' GVariant *child;\n' + ' GValue *paramv;\n' + ' guint num_params;\n' + ' guint n;\n' + ' guint signal_id;\n'); + # Note: info could be NULL if we are talking to a newer version of the interface + self.c.write(' info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) &_%s_interface_info.parent_struct, signal_name);\n' + ' if (info == NULL)\n' + ' return;\n' + %(i.name_lower)) + self.c.write (' num_params = g_variant_n_children (parameters);\n' + ' paramv = g_new0 (GValue, num_params + 1);\n' + ' g_value_init (¶mv[0], %sTYPE_%s);\n' + ' g_value_set_object (¶mv[0], proxy);\n' + %(i.ns_upper, i.name_upper)) + self.c.write(' g_variant_iter_init (&iter, parameters);\n' + ' n = 1;\n' + ' while ((child = g_variant_iter_next_value (&iter)) != NULL)\n' + ' {\n' + ' _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1];\n' + ' if (arg_info->use_gvariant)\n' + ' {\n' + ' g_value_init (¶mv[n], G_TYPE_VARIANT);\n' + ' g_value_set_variant (¶mv[n], child);\n' + ' n++;\n' + ' }\n' + ' else\n' + ' g_dbus_gvariant_to_gvalue (child, ¶mv[n++]);\n' + ' g_variant_unref (child);\n' + ' }\n' + ) + self.c.write(' signal_id = g_signal_lookup (info->signal_name, %sTYPE_%s);\n' + %(i.ns_upper, i.name_upper)) + self.c.write(' g_signal_emitv (paramv, signal_id, 0, NULL);\n') + self.c.write(' for (n = 0; n < num_params + 1; n++)\n' + ' g_value_unset (¶mv[n]);\n' + ' g_free (paramv);\n') + self.c.write('}\n' + '\n') + + # property changed + self.c.write('static void\n' + '%s_proxy_g_properties_changed (GDBusProxy *_proxy,\n' + ' GVariant *changed_properties,\n' + ' const gchar *const *invalidated_properties)\n' + '{\n'%(i.name_lower)) + # Note: info could be NULL if we are talking to a newer version of the interface + self.c.write(' %sProxy *proxy = %s%s_PROXY (_proxy);\n' + ' guint n;\n' + ' const gchar *key;\n' + ' GVariantIter *iter;\n' + ' _ExtendedGDBusPropertyInfo *info;\n' + ' g_variant_get (changed_properties, "a{sv}", &iter);\n' + ' while (g_variant_iter_next (iter, "{&sv}", &key, NULL))\n' + ' {\n' + ' info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_%s_interface_info.parent_struct, key);\n' + ' g_datalist_remove_data (&proxy->priv->qdata, key);\n' + ' if (info != NULL)\n' + ' g_object_notify (G_OBJECT (proxy), info->hyphen_name);\n' + ' }\n' + ' g_variant_iter_free (iter);\n' + ' for (n = 0; invalidated_properties[n] != NULL; n++)\n' + ' {\n' + ' info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_%s_interface_info.parent_struct, invalidated_properties[n]);\n' + ' g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]);\n' + ' if (info != NULL)\n' + ' g_object_notify (G_OBJECT (proxy), info->hyphen_name);\n' + ' }\n' + '}\n' + '\n' + %(i.camel_name, i.ns_upper, i.name_upper, + i.name_lower, i.name_lower)) + + # property vfuncs + for p in i.properties: + nul_value = '0' + if p.arg.free_func != None: + nul_value = 'NULL' + self.c.write('static %s\n' + '%s_proxy_get_%s (%s *object)\n' + '{\n' + ' %sProxy *proxy = %s%s_PROXY (object);\n' + ' GVariant *variant;\n' + ' %svalue = %s;\n'%(p.arg.ctype_in, i.name_lower, p.name_lower, i.camel_name, + i.camel_name, i.ns_upper, i.name_upper, + p.arg.ctype_in, nul_value)) + # For some property types, we have to free the returned + # value (or part of it, e.g. the container) because of how + # GVariant works.. see https://bugzilla.gnome.org/show_bug.cgi?id=657100 + # for details + # + free_container = False; + if p.arg.gvariant_get == 'g_variant_get_strv' or p.arg.gvariant_get == 'g_variant_get_objpathv' or p.arg.gvariant_get == 'g_variant_get_bytestring_array': + free_container = True; + # If already using an old value for strv, objpathv, bytestring_array (see below), + # then just return that... that way the result from multiple consecutive calls + # to the getter are valid as long as they're freed + # + if free_container: + self.c.write(' value = g_datalist_get_data (&proxy->priv->qdata, \"%s\");\n' + ' if (value != NULL)\n' + ' return value;\n' + %(p.name)) + self.c.write(' variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), \"%s\");\n'%(p.name)) + if p.arg.gtype == 'G_TYPE_VARIANT': + self.c.write(' value = variant;\n') + self.c.write(' if (variant != NULL)\n') + self.c.write(' g_variant_unref (variant);\n') + else: + self.c.write(' if (variant != NULL)\n' + ' {\n') + extra_len = '' + if p.arg.gvariant_get == 'g_variant_get_string' or p.arg.gvariant_get == 'g_variant_get_strv' or p.arg.gvariant_get == 'g_variant_get_objv' or p.arg.gvariant_get == 'g_variant_get_bytestring_array': + extra_len = ', NULL' + self.c.write(' value = %s (variant%s);\n'%(p.arg.gvariant_get, extra_len)) + if free_container: + self.c.write(' g_datalist_set_data_full (&proxy->priv->qdata, \"%s\", (gpointer) value, g_free);\n' + %(p.name)) + self.c.write(' g_variant_unref (variant);\n') + self.c.write(' }\n') + self.c.write(' return value;\n') + self.c.write('}\n') + self.c.write('\n') + + # class boilerplate + self.c.write('static void\n' + '%s_proxy_init (%sProxy *proxy)\n' + '{\n' + '#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38\n' + ' proxy->priv = %s_proxy_get_instance_private (proxy);\n' + '#else\n' + ' proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, %sTYPE_%s_PROXY, %sProxyPrivate);\n' + '#endif\n\n' + ' g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), %s_interface_info ());\n' + '}\n' + '\n' + %(i.name_lower, i.camel_name, + i.name_lower, + i.ns_upper, i.name_upper, i.camel_name, + i.name_lower)) + self.c.write('static void\n' + '%s_proxy_class_init (%sProxyClass *klass)\n' + '{\n' + ' GObjectClass *gobject_class;\n' + ' GDBusProxyClass *proxy_class;\n' + '\n' + ' gobject_class = G_OBJECT_CLASS (klass);\n' + ' gobject_class->finalize = %s_proxy_finalize;\n' + ' gobject_class->get_property = %s_proxy_get_property;\n' + ' gobject_class->set_property = %s_proxy_set_property;\n' + '\n' + ' proxy_class = G_DBUS_PROXY_CLASS (klass);\n' + ' proxy_class->g_signal = %s_proxy_g_signal;\n' + ' proxy_class->g_properties_changed = %s_proxy_g_properties_changed;\n' + '\n'%(i.name_lower, i.camel_name, + i.name_lower, i.name_lower, i.name_lower, i.name_lower, i.name_lower)) + if len(i.properties) > 0: + self.c.write(' %s_override_properties (gobject_class, 1);\n\n'%(i.name_lower)) + self.c.write('#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38\n' + ' g_type_class_add_private (klass, sizeof (%sProxyPrivate));\n' + '#endif\n'%(i.camel_name)) + self.c.write('}\n' + '\n') + + self.c.write('static void\n' + '%s_proxy_iface_init (%sIface *iface)\n' + '{\n'%(i.name_lower, i.camel_name)) + for p in i.properties: + self.c.write(' iface->get_%s = %s_proxy_get_%s;\n'%(p.name_lower, i.name_lower, p.name_lower)) + self.c.write('}\n' + '\n') + + # constructors + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * %s_proxy_new:\n' + ' * @connection: A #GDBusConnection.\n' + ' * @flags: Flags from the #GDBusProxyFlags enumeration.\n' + ' * @name: (allow-none): A bus name (well-known or unique) or %%NULL if @connection is not a message bus connection.\n' + ' * @object_path: An object path.\n' + ' * @cancellable: (allow-none): A #GCancellable or %%NULL.\n' + ' * @callback: A #GAsyncReadyCallback to call when the request is satisfied.\n' + ' * @user_data: User data to pass to @callback.\n' + ' *\n' + ' * Asynchronously creates a proxy for the D-Bus interface #%s. See g_dbus_proxy_new() for more details.\n' + ' *\n' + ' * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.\n' + ' * You can then call %s_proxy_new_finish() to get the result of the operation.\n' + ' *\n' + ' * See %s_proxy_new_sync() for the synchronous, blocking version of this constructor.\n' + %(i.name_lower, i.name, i.name_lower, i.name_lower), False)) + self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 0) + self.c.write('void\n' + '%s_proxy_new (\n' + ' GDBusConnection *connection,\n' + ' GDBusProxyFlags flags,\n' + ' const gchar *name,\n' + ' const gchar *object_path,\n' + ' GCancellable *cancellable,\n' + ' GAsyncReadyCallback callback,\n' + ' gpointer user_data)\n' + '{\n' + ' g_async_initable_new_async (%sTYPE_%s_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "%s", NULL);\n' + '}\n' + '\n' + %(i.name_lower, i.ns_upper, i.name_upper, i.name)) + self.c.write('/**\n' + ' * %s_proxy_new_finish:\n' + ' * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to %s_proxy_new().\n' + ' * @error: Return location for error or %%NULL\n' + ' *\n' + ' * Finishes an operation started with %s_proxy_new().\n' + ' *\n' + ' * Returns: (transfer full) (type %sProxy): The constructed proxy object or %%NULL if @error is set.\n' + %(i.name_lower, i.name_lower, i.name_lower, i.camel_name)) + self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 0) + self.c.write('%s *\n' + '%s_proxy_new_finish (\n' + ' GAsyncResult *res,\n' + ' GError **error)\n' + '{\n' + ' GObject *ret;\n' + ' GObject *source_object;\n' + ' source_object = g_async_result_get_source_object (res);\n' + ' ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);\n' + ' g_object_unref (source_object);\n' + ' if (ret != NULL)\n' + ' return %s%s (ret);\n' + ' else\n' + ' return NULL;\n' + '}\n' + '\n' + %(i.camel_name, i.name_lower, i.ns_upper, i.name_upper)) + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * %s_proxy_new_sync:\n' + ' * @connection: A #GDBusConnection.\n' + ' * @flags: Flags from the #GDBusProxyFlags enumeration.\n' + ' * @name: (allow-none): A bus name (well-known or unique) or %%NULL if @connection is not a message bus connection.\n' + ' * @object_path: An object path.\n' + ' * @cancellable: (allow-none): A #GCancellable or %%NULL.\n' + ' * @error: Return location for error or %%NULL\n' + ' *\n' + ' * Synchronously creates a proxy for the D-Bus interface #%s. See g_dbus_proxy_new_sync() for more details.\n' + ' *\n' + ' * The calling thread is blocked until a reply is received.\n' + ' *\n' + ' * See %s_proxy_new() for the asynchronous version of this constructor.\n' + ' *\n' + ' * Returns: (transfer full) (type %sProxy): The constructed proxy object or %%NULL if @error is set.\n' + %(i.name_lower, i.name, i.name_lower, i.camel_name), False)) + self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 0) + self.c.write('%s *\n' + '%s_proxy_new_sync (\n' + ' GDBusConnection *connection,\n' + ' GDBusProxyFlags flags,\n' + ' const gchar *name,\n' + ' const gchar *object_path,\n' + ' GCancellable *cancellable,\n' + ' GError **error)\n' + '{\n' + ' GInitable *ret;\n' + ' ret = g_initable_new (%sTYPE_%s_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "%s", NULL);\n' + ' if (ret != NULL)\n' + ' return %s%s (ret);\n' + ' else\n' + ' return NULL;\n' + '}\n' + '\n' + %(i.camel_name, i.name_lower, i.ns_upper, i.name_upper, i.name, i.ns_upper, i.name_upper)) + self.c.write('\n') + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * %s_proxy_new_for_bus:\n' + ' * @bus_type: A #GBusType.\n' + ' * @flags: Flags from the #GDBusProxyFlags enumeration.\n' + ' * @name: A bus name (well-known or unique).\n' + ' * @object_path: An object path.\n' + ' * @cancellable: (allow-none): A #GCancellable or %%NULL.\n' + ' * @callback: A #GAsyncReadyCallback to call when the request is satisfied.\n' + ' * @user_data: User data to pass to @callback.\n' + ' *\n' + ' * Like %s_proxy_new() but takes a #GBusType instead of a #GDBusConnection.\n' + ' *\n' + ' * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.\n' + ' * You can then call %s_proxy_new_for_bus_finish() to get the result of the operation.\n' + ' *\n' + ' * See %s_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor.\n' + %(i.name_lower, i.name_lower, i.name_lower, i.name_lower), False)) + self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 0) + self.c.write('void\n' + '%s_proxy_new_for_bus (\n' + ' GBusType bus_type,\n' + ' GDBusProxyFlags flags,\n' + ' const gchar *name,\n' + ' const gchar *object_path,\n' + ' GCancellable *cancellable,\n' + ' GAsyncReadyCallback callback,\n' + ' gpointer user_data)\n' + '{\n' + ' g_async_initable_new_async (%sTYPE_%s_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "%s", NULL);\n' + '}\n' + '\n' + %(i.name_lower, i.ns_upper, i.name_upper, i.name)) + self.c.write('/**\n' + ' * %s_proxy_new_for_bus_finish:\n' + ' * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to %s_proxy_new_for_bus().\n' + ' * @error: Return location for error or %%NULL\n' + ' *\n' + ' * Finishes an operation started with %s_proxy_new_for_bus().\n' + ' *\n' + ' * Returns: (transfer full) (type %sProxy): The constructed proxy object or %%NULL if @error is set.\n' + %(i.name_lower, i.name_lower, i.name_lower, i.camel_name)) + self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 0) + self.c.write('%s *\n' + '%s_proxy_new_for_bus_finish (\n' + ' GAsyncResult *res,\n' + ' GError **error)\n' + '{\n' + ' GObject *ret;\n' + ' GObject *source_object;\n' + ' source_object = g_async_result_get_source_object (res);\n' + ' ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);\n' + ' g_object_unref (source_object);\n' + ' if (ret != NULL)\n' + ' return %s%s (ret);\n' + ' else\n' + ' return NULL;\n' + '}\n' + '\n' + %(i.camel_name, i.name_lower, i.ns_upper, i.name_upper)) + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * %s_proxy_new_for_bus_sync:\n' + ' * @bus_type: A #GBusType.\n' + ' * @flags: Flags from the #GDBusProxyFlags enumeration.\n' + ' * @name: A bus name (well-known or unique).\n' + ' * @object_path: An object path.\n' + ' * @cancellable: (allow-none): A #GCancellable or %%NULL.\n' + ' * @error: Return location for error or %%NULL\n' + ' *\n' + ' * Like %s_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection.\n' + ' *\n' + ' * The calling thread is blocked until a reply is received.\n' + ' *\n' + ' * See %s_proxy_new_for_bus() for the asynchronous version of this constructor.\n' + ' *\n' + ' * Returns: (transfer full) (type %sProxy): The constructed proxy object or %%NULL if @error is set.\n' + %(i.name_lower, i.name_lower, i.name_lower, i.camel_name), False)) + self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 0) + self.c.write('%s *\n' + '%s_proxy_new_for_bus_sync (\n' + ' GBusType bus_type,\n' + ' GDBusProxyFlags flags,\n' + ' const gchar *name,\n' + ' const gchar *object_path,\n' + ' GCancellable *cancellable,\n' + ' GError **error)\n' + '{\n' + ' GInitable *ret;\n' + ' ret = g_initable_new (%sTYPE_%s_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "%s", NULL);\n' + ' if (ret != NULL)\n' + ' return %s%s (ret);\n' + ' else\n' + ' return NULL;\n' + '}\n' + '\n' + %(i.camel_name, i.name_lower, i.ns_upper, i.name_upper, i.name, i.ns_upper, i.name_upper)) + self.c.write('\n') + + # --------------------------------------------------------------------------------------------------- + + def generate_skeleton(self, i): + # class boilerplate + self.c.write('/* ------------------------------------------------------------------------ */\n' + '\n') + + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * %sSkeleton:\n' + ' *\n' + ' * The #%sSkeleton structure contains only private data and should only be accessed using the provided API.\n' + %(i.camel_name, i.camel_name), False)) + self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 0) + self.c.write('\n') + + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * %sSkeletonClass:\n' + ' * @parent_class: The parent class.\n' + ' *\n' + ' * Class structure for #%sSkeleton.\n' + %(i.camel_name, i.camel_name), False)) + self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 0) + self.c.write('\n') + + self.c.write('struct _%sSkeletonPrivate\n' + '{\n' + ' GValue *properties;\n' + ' GList *changed_properties;\n' + ' GSource *changed_properties_idle_source;\n' + ' GMainContext *context;\n' + ' GMutex lock;\n' + '};\n' + '\n'%i.camel_name) + + self.c.write('static void\n' + '_%s_skeleton_handle_method_call (\n' + ' GDBusConnection *connection G_GNUC_UNUSED,\n' + ' const gchar *sender G_GNUC_UNUSED,\n' + ' const gchar *object_path G_GNUC_UNUSED,\n' + ' const gchar *interface_name,\n' + ' const gchar *method_name,\n' + ' GVariant *parameters,\n' + ' GDBusMethodInvocation *invocation,\n' + ' gpointer user_data)\n' + '{\n' + ' %sSkeleton *skeleton = %s%s_SKELETON (user_data);\n' + ' _ExtendedGDBusMethodInfo *info;\n' + ' GVariantIter iter;\n' + ' GVariant *child;\n' + ' GValue *paramv;\n' + ' guint num_params;\n' + ' guint num_extra;\n' + ' guint n;\n' + ' guint signal_id;\n' + ' GValue return_value = G_VALUE_INIT;\n' + %(i.name_lower, i.camel_name, i.ns_upper, i.name_upper)) + self.c.write(' info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation);\n' + ' g_assert (info != NULL);\n' + %()) + self.c.write (' num_params = g_variant_n_children (parameters);\n' + ' num_extra = info->pass_fdlist ? 3 : 2;' + ' paramv = g_new0 (GValue, num_params + num_extra);\n' + ' n = 0;\n' + ' g_value_init (¶mv[n], %sTYPE_%s);\n' + ' g_value_set_object (¶mv[n++], skeleton);\n' + ' g_value_init (¶mv[n], G_TYPE_DBUS_METHOD_INVOCATION);\n' + ' g_value_set_object (¶mv[n++], invocation);\n' + ' if (info->pass_fdlist)\n' + ' {\n' + '#ifdef G_OS_UNIX\n' + ' g_value_init (¶mv[n], G_TYPE_UNIX_FD_LIST);\n' + ' g_value_set_object (¶mv[n++], g_dbus_message_get_unix_fd_list (g_dbus_method_invocation_get_message (invocation)));\n' + '#else\n' + ' g_assert_not_reached ();\n' + '#endif\n' + ' }\n' + %(i.ns_upper, i.name_upper)) + self.c.write(' g_variant_iter_init (&iter, parameters);\n' + ' while ((child = g_variant_iter_next_value (&iter)) != NULL)\n' + ' {\n' + ' _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra];\n' + ' if (arg_info->use_gvariant)\n' + ' {\n' + ' g_value_init (¶mv[n], G_TYPE_VARIANT);\n' + ' g_value_set_variant (¶mv[n], child);\n' + ' n++;\n' + ' }\n' + ' else\n' + ' g_dbus_gvariant_to_gvalue (child, ¶mv[n++]);\n' + ' g_variant_unref (child);\n' + ' }\n' + ) + self.c.write(' signal_id = g_signal_lookup (info->signal_name, %sTYPE_%s);\n' + %(i.ns_upper, i.name_upper)) + self.c.write(' g_value_init (&return_value, G_TYPE_BOOLEAN);\n' + ' g_signal_emitv (paramv, signal_id, 0, &return_value);\n' + ' if (!g_value_get_boolean (&return_value))\n' + ' g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s is not implemented on interface %s", method_name, interface_name);\n' + ' g_value_unset (&return_value);\n' + ) + self.c.write(' for (n = 0; n < num_params + num_extra; n++)\n' + ' g_value_unset (¶mv[n]);\n' + ' g_free (paramv);\n') + self.c.write('}\n' + '\n') + + self.c.write('static GVariant *\n' + '_%s_skeleton_handle_get_property (\n' + ' GDBusConnection *connection G_GNUC_UNUSED,\n' + ' const gchar *sender G_GNUC_UNUSED,\n' + ' const gchar *object_path G_GNUC_UNUSED,\n' + ' const gchar *interface_name G_GNUC_UNUSED,\n' + ' const gchar *property_name,\n' + ' GError **error,\n' + ' gpointer user_data)\n' + '{\n' + ' %sSkeleton *skeleton = %s%s_SKELETON (user_data);\n' + ' GValue value = G_VALUE_INIT;\n' + ' GParamSpec *pspec;\n' + ' _ExtendedGDBusPropertyInfo *info;\n' + ' GVariant *ret;\n' + %(i.name_lower, i.camel_name, i.ns_upper, i.name_upper)) + self.c.write(' ret = NULL;\n' + ' info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_%s_interface_info.parent_struct, property_name);\n' + ' g_assert (info != NULL);\n' + ' pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);\n' + ' if (pspec == NULL)\n' + ' {\n' + ' g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %%s", property_name);\n' + ' }\n' + ' else\n' + ' {\n' + ' g_value_init (&value, pspec->value_type);\n' + ' g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value);\n' + ' ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature));\n' + ' g_value_unset (&value);\n' + ' }\n' + ' return ret;\n' + '}\n' + '\n' + %(i.name_lower)) + + self.c.write('static gboolean\n' + '_%s_skeleton_handle_set_property (\n' + ' GDBusConnection *connection G_GNUC_UNUSED,\n' + ' const gchar *sender G_GNUC_UNUSED,\n' + ' const gchar *object_path G_GNUC_UNUSED,\n' + ' const gchar *interface_name G_GNUC_UNUSED,\n' + ' const gchar *property_name,\n' + ' GVariant *variant,\n' + ' GError **error,\n' + ' gpointer user_data)\n' + '{\n' + ' %sSkeleton *skeleton = %s%s_SKELETON (user_data);\n' + ' GValue value = G_VALUE_INIT;\n' + ' GParamSpec *pspec;\n' + ' _ExtendedGDBusPropertyInfo *info;\n' + ' gboolean ret;\n' + %(i.name_lower, i.camel_name, i.ns_upper, i.name_upper)) + self.c.write(' ret = FALSE;\n' + ' info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_%s_interface_info.parent_struct, property_name);\n' + ' g_assert (info != NULL);\n' + ' pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);\n' + ' if (pspec == NULL)\n' + ' {\n' + ' g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %%s", property_name);\n' + ' }\n' + ' else\n' + ' {\n' + ' if (info->use_gvariant)\n' + ' g_value_set_variant (&value, variant);\n' + ' else\n' + ' g_dbus_gvariant_to_gvalue (variant, &value);\n' + ' g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value);\n' + ' g_value_unset (&value);\n' + ' ret = TRUE;\n' + ' }\n' + ' return ret;\n' + '}\n' + '\n' + %(i.name_lower)) + + + self.c.write('static const GDBusInterfaceVTable _%s_skeleton_vtable =\n' + '{\n' + ' _%s_skeleton_handle_method_call,\n' + ' _%s_skeleton_handle_get_property,\n' + ' _%s_skeleton_handle_set_property,\n' + ' {NULL}\n' + '};\n' + '\n'%(i.name_lower, i.name_lower, i.name_lower, i.name_lower)) + + self.c.write('static GDBusInterfaceInfo *\n' + '%s_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)\n' + '{\n' + ' return %s_interface_info ();\n' + %(i.name_lower, i.name_lower)) + self.c.write('}\n' + '\n') + + self.c.write('static GDBusInterfaceVTable *\n' + '%s_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)\n' + '{\n' + ' return (GDBusInterfaceVTable *) &_%s_skeleton_vtable;\n' + %(i.name_lower, i.name_lower)) + self.c.write('}\n' + '\n') + + self.c.write('static GVariant *\n' + '%s_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton)\n' + '{\n' + ' %sSkeleton *skeleton = %s%s_SKELETON (_skeleton);\n' + %(i.name_lower, i.camel_name, i.ns_upper, i.name_upper)) + self.c.write('\n' + ' GVariantBuilder builder;\n' + ' guint n;\n' + ' g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));\n' + ' if (_%s_interface_info.parent_struct.properties == NULL)\n' + ' goto out;\n' + ' for (n = 0; _%s_interface_info.parent_struct.properties[n] != NULL; n++)\n' + ' {\n' + ' GDBusPropertyInfo *info = _%s_interface_info.parent_struct.properties[n];\n' + ' if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE)\n' + ' {\n' + ' GVariant *value;\n' + ' value = _%s_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "%s", info->name, NULL, skeleton);\n' + ' if (value != NULL)\n' + ' {\n' + ' g_variant_take_ref (value);\n' + ' g_variant_builder_add (&builder, "{sv}", info->name, value);\n' + ' g_variant_unref (value);\n' + ' }\n' + ' }\n' + ' }\n' + 'out:\n' + ' return g_variant_builder_end (&builder);\n' + '}\n' + '\n' + %(i.name_lower, i.name_lower, i.name_lower, i.name_lower, i.name)) + + if len(i.properties) > 0: + self.c.write('static gboolean _%s_emit_changed (gpointer user_data);\n' + '\n' + %(i.name_lower)) + + self.c.write('static void\n' + '%s_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton)\n' + '{\n' + %(i.name_lower)) + if len(i.properties) > 0: + self.c.write(' %sSkeleton *skeleton = %s%s_SKELETON (_skeleton);\n' + ' gboolean emit_changed = FALSE;\n' + '\n' + ' g_mutex_lock (&skeleton->priv->lock);\n' + ' if (skeleton->priv->changed_properties_idle_source != NULL)\n' + ' {\n' + ' g_source_destroy (skeleton->priv->changed_properties_idle_source);\n' + ' skeleton->priv->changed_properties_idle_source = NULL;\n' + ' emit_changed = TRUE;\n' + ' }\n' + ' g_mutex_unlock (&skeleton->priv->lock);\n' + '\n' + ' if (emit_changed)\n' + ' _%s_emit_changed (skeleton);\n' + %(i.camel_name, i.ns_upper, i.name_upper, i.name_lower)) + self.c.write('}\n' + '\n') + + for s in i.signals: + self.c.write('static void\n' + '_%s_on_signal_%s (\n' + ' %s *object'%(i.name_lower, s.name_lower, i.camel_name)) + for a in s.args: + self.c.write(',\n %sarg_%s'%(a.ctype_in, a.name)) + self.c.write(')\n' + '{\n' + ' %sSkeleton *skeleton = %s%s_SKELETON (object);\n\n' + ' GList *connections, *l;\n' + ' GVariant *signal_variant;\n' + ' connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton));\n' + %(i.camel_name, i.ns_upper, i.name_upper)) + self.c.write('\n' + ' signal_variant = g_variant_ref_sink (g_variant_new ("(') + for a in s.args: + self.c.write('%s'%(a.format_in)) + self.c.write(')"') + for a in s.args: + self.c.write(',\n arg_%s'%(a.name)) + self.c.write('));\n') + + self.c.write(' for (l = connections; l != NULL; l = l->next)\n' + ' {\n' + ' GDBusConnection *connection = l->data;\n' + ' g_dbus_connection_emit_signal (connection,\n' + ' NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "%s", "%s",\n' + ' signal_variant, NULL);\n' + ' }\n' + %(i.name, s.name)) + self.c.write(' g_variant_unref (signal_variant);\n') + self.c.write(' g_list_free_full (connections, g_object_unref);\n') + self.c.write('}\n' + '\n') + + self.c.write('static void %s_skeleton_iface_init (%sIface *iface);\n' + %(i.name_lower, i.camel_name)) + + self.c.write('#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38\n') + self.c.write('G_DEFINE_TYPE_WITH_CODE (%sSkeleton, %s_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,\n'%(i.camel_name, i.name_lower)) + self.c.write(' G_ADD_PRIVATE (%sSkeleton)\n'%(i.camel_name)) + self.c.write(' G_IMPLEMENT_INTERFACE (%sTYPE_%s, %s_skeleton_iface_init));\n\n'%(i.ns_upper, i.name_upper, i.name_lower)) + self.c.write('#else\n') + self.c.write('G_DEFINE_TYPE_WITH_CODE (%sSkeleton, %s_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,\n'%(i.camel_name, i.name_lower)) + self.c.write(' G_IMPLEMENT_INTERFACE (%sTYPE_%s, %s_skeleton_iface_init));\n\n'%(i.ns_upper, i.name_upper, i.name_lower)) + self.c.write('#endif\n') + + # finalize + self.c.write('static void\n' + '%s_skeleton_finalize (GObject *object)\n' + '{\n'%(i.name_lower)) + self.c.write(' %sSkeleton *skeleton = %s%s_SKELETON (object);\n'%(i.camel_name, i.ns_upper, i.name_upper)) + if len(i.properties) > 0: + self.c.write(' guint n;\n' + ' for (n = 0; n < %d; n++)\n' + ' g_value_unset (&skeleton->priv->properties[n]);\n'%(len(i.properties))) + self.c.write(' g_free (skeleton->priv->properties);\n') + self.c.write(' g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free);\n') + self.c.write(' if (skeleton->priv->changed_properties_idle_source != NULL)\n') + self.c.write(' g_source_destroy (skeleton->priv->changed_properties_idle_source);\n') + self.c.write(' g_main_context_unref (skeleton->priv->context);\n') + self.c.write(' g_mutex_clear (&skeleton->priv->lock);\n') + self.c.write(' G_OBJECT_CLASS (%s_skeleton_parent_class)->finalize (object);\n' + '}\n' + '\n'%(i.name_lower)) + + # property accessors (TODO: generate PropertiesChanged signals in setter) + if len(i.properties) > 0: + self.c.write('static void\n' + '%s_skeleton_get_property (GObject *object,\n' + ' guint prop_id,\n' + ' GValue *value,\n' + ' GParamSpec *pspec G_GNUC_UNUSED)\n' + '{\n'%(i.name_lower)) + self.c.write(' %sSkeleton *skeleton = %s%s_SKELETON (object);\n' + ' g_assert (prop_id != 0 && prop_id - 1 < %d);\n' + ' g_mutex_lock (&skeleton->priv->lock);\n' + ' g_value_copy (&skeleton->priv->properties[prop_id - 1], value);\n' + ' g_mutex_unlock (&skeleton->priv->lock);\n' + %(i.camel_name, i.ns_upper, i.name_upper, len(i.properties))) + self.c.write('}\n' + '\n') + + # if property is already scheduled then re-use entry.. though it could be + # that the user did + # + # foo_set_prop_bar (object, ""); + # foo_set_prop_bar (object, "blah"); + # + # say, every update... In this case, where nothing happens, we obviously + # don't want a PropertiesChanged() event. We can easily check for this + # by comparing against the _original value_ recorded before the first + # change event. If the latest value is not different from the original + # one, we can simply ignore the ChangedProperty + # + self.c.write('static gboolean\n' + '_%s_emit_changed (gpointer user_data)\n' + '{\n' + ' %sSkeleton *skeleton = %s%s_SKELETON (user_data);\n' + %(i.name_lower, i.camel_name, i.ns_upper, i.name_upper)) + self.c.write(' GList *l;\n' + ' GVariantBuilder builder;\n' + ' GVariantBuilder invalidated_builder;\n' + ' guint num_changes;\n' + '\n' + ' g_mutex_lock (&skeleton->priv->lock);\n' + ' g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));\n' + ' g_variant_builder_init (&invalidated_builder, G_VARIANT_TYPE ("as"));\n' + ' for (l = skeleton->priv->changed_properties, num_changes = 0; l != NULL; l = l->next)\n' + ' {\n' + ' ChangedProperty *cp = l->data;\n' + ' GVariant *variant;\n' + ' const GValue *cur_value;\n' + '\n' + ' cur_value = &skeleton->priv->properties[cp->prop_id - 1];\n' + ' if (!_g_value_equal (cur_value, &cp->orig_value))\n' + ' {\n' + ' variant = g_dbus_gvalue_to_gvariant (cur_value, G_VARIANT_TYPE (cp->info->parent_struct.signature));\n' + ' g_variant_builder_add (&builder, "{sv}", cp->info->parent_struct.name, variant);\n' + ' g_variant_unref (variant);\n' + ' num_changes++;\n' + ' }\n' + ' }\n' + ' if (num_changes > 0)\n' + ' {\n' + ' GList *connections, *ll;\n' + ' GVariant *signal_variant;' + '\n' + ' signal_variant = g_variant_ref_sink (g_variant_new ("(sa{sv}as)", "%s",\n' + ' &builder, &invalidated_builder));\n' + ' connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton));\n' + ' for (ll = connections; ll != NULL; ll = ll->next)\n' + ' {\n' + ' GDBusConnection *connection = ll->data;\n' + '\n' + ' g_dbus_connection_emit_signal (connection,\n' + ' NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)),\n' + ' "org.freedesktop.DBus.Properties",\n' + ' "PropertiesChanged",\n' + ' signal_variant,\n' + ' NULL);\n' + ' }\n' + ' g_variant_unref (signal_variant);\n' + ' g_list_free_full (connections, g_object_unref);\n' + ' }\n' + ' else\n' + ' {\n' + ' g_variant_builder_clear (&builder);\n' + ' g_variant_builder_clear (&invalidated_builder);\n' + ' }\n' + %(i.name)) + self.c.write(' g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free);\n') + self.c.write(' skeleton->priv->changed_properties = NULL;\n') + self.c.write(' skeleton->priv->changed_properties_idle_source = NULL;\n') + self.c.write(' g_mutex_unlock (&skeleton->priv->lock);\n') + self.c.write(' return FALSE;\n' + '}\n' + '\n') + # holding lock while being called + self.c.write('static void\n' + '_%s_schedule_emit_changed (%sSkeleton *skeleton, const _ExtendedGDBusPropertyInfo *info, guint prop_id, const GValue *orig_value)\n' + '{\n' + ' ChangedProperty *cp;\n' + ' GList *l;\n' + ' cp = NULL;\n' + ' for (l = skeleton->priv->changed_properties; l != NULL; l = l->next)\n' + ' {\n' + ' ChangedProperty *i_cp = l->data;\n' + ' if (i_cp->info == info)\n' + ' {\n' + ' cp = i_cp;\n' + ' break;\n' + ' }\n' + ' }\n' + %(i.name_lower, i.camel_name)) + self.c.write(' if (cp == NULL)\n' + ' {\n' + ' cp = g_new0 (ChangedProperty, 1);\n' + ' cp->prop_id = prop_id;\n' + ' cp->info = info;\n' + ' skeleton->priv->changed_properties = g_list_prepend (skeleton->priv->changed_properties, cp);\n' + ' g_value_init (&cp->orig_value, G_VALUE_TYPE (orig_value));\n' + ' g_value_copy (orig_value, &cp->orig_value);\n' + ' }\n' + '}\n' + '\n' + %()) + + # Postpone setting up the refresh source until the ::notify signal is emitted as + # this allows use of g_object_freeze_notify()/g_object_thaw_notify() ... + # This is useful when updating several properties from another thread than + # where the idle will be emitted from + self.c.write('static void\n' + '%s_skeleton_notify (GObject *object,\n' + ' GParamSpec *pspec G_GNUC_UNUSED)\n' + '{\n' + ' %sSkeleton *skeleton = %s%s_SKELETON (object);\n' + ' g_mutex_lock (&skeleton->priv->lock);\n' + ' if (skeleton->priv->changed_properties != NULL &&\n' + ' skeleton->priv->changed_properties_idle_source == NULL)\n' + ' {\n' + ' skeleton->priv->changed_properties_idle_source = g_idle_source_new ();\n' + ' g_source_set_priority (skeleton->priv->changed_properties_idle_source, G_PRIORITY_DEFAULT);\n' + ' g_source_set_callback (skeleton->priv->changed_properties_idle_source, _%s_emit_changed, g_object_ref (skeleton), (GDestroyNotify) g_object_unref);\n' + ' g_source_set_name (skeleton->priv->changed_properties_idle_source, "[generated] _%s_emit_changed");\n' + ' g_source_attach (skeleton->priv->changed_properties_idle_source, skeleton->priv->context);\n' + ' g_source_unref (skeleton->priv->changed_properties_idle_source);\n' + ' }\n' + ' g_mutex_unlock (&skeleton->priv->lock);\n' + '}\n' + '\n' + %(i.name_lower, i.camel_name, i.ns_upper, i.name_upper, i.name_lower, i.name_lower)) + + self.c.write('static void\n' + '%s_skeleton_set_property (GObject *object,\n' + ' guint prop_id,\n' + ' const GValue *value,\n' + ' GParamSpec *pspec)\n' + '{\n'%(i.name_lower)) + self.c.write(' %sSkeleton *skeleton = %s%s_SKELETON (object);\n' + ' g_assert (prop_id != 0 && prop_id - 1 < %d);\n' + ' g_mutex_lock (&skeleton->priv->lock);\n' + ' g_object_freeze_notify (object);\n' + ' if (!_g_value_equal (value, &skeleton->priv->properties[prop_id - 1]))\n' + ' {\n' + ' if (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)) != NULL)\n' + ' _%s_schedule_emit_changed (skeleton, _%s_property_info_pointers[prop_id - 1], prop_id, &skeleton->priv->properties[prop_id - 1]);\n' + ' g_value_copy (value, &skeleton->priv->properties[prop_id - 1]);\n' + ' g_object_notify_by_pspec (object, pspec);\n' + ' }\n' + ' g_mutex_unlock (&skeleton->priv->lock);\n' + ' g_object_thaw_notify (object);\n' + %(i.camel_name, i.ns_upper, i.name_upper, len(i.properties), i.name_lower, i.name_lower)) + self.c.write('}\n' + '\n') + + self.c.write('static void\n' + '%s_skeleton_init (%sSkeleton *skeleton)\n' + '{\n' + '#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38\n' + ' skeleton->priv = %s_skeleton_get_instance_private (skeleton);\n' + '#else\n' + ' skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, %sTYPE_%s_SKELETON, %sSkeletonPrivate);\n' + '#endif\n\n' + %(i.name_lower, i.camel_name, + i.name_lower, + i.ns_upper, i.name_upper, i.camel_name)) + self.c.write(' g_mutex_init (&skeleton->priv->lock);\n') + self.c.write(' skeleton->priv->context = g_main_context_ref_thread_default ();\n') + if len(i.properties) > 0: + self.c.write(' skeleton->priv->properties = g_new0 (GValue, %d);\n'%(len(i.properties))) + n = 0 + for p in i.properties: + self.c.write(' g_value_init (&skeleton->priv->properties[%d], %s);\n'%(n, p.arg.gtype)) + n += 1 + self.c.write('}\n' + '\n') + + # property vfuncs + n = 0 + for p in i.properties: + self.c.write('static %s\n' + '%s_skeleton_get_%s (%s *object)\n' + '{\n' + %(p.arg.ctype_in, i.name_lower, p.name_lower, i.camel_name)) + self.c.write(' %sSkeleton *skeleton = %s%s_SKELETON (object);\n'%(i.camel_name, i.ns_upper, i.name_upper)) + self.c.write(' %svalue;\n' + ' g_mutex_lock (&skeleton->priv->lock);\n' + ' value = %s (&(skeleton->priv->properties[%d]));\n' + ' g_mutex_unlock (&skeleton->priv->lock);\n' + %(p.arg.ctype_in_g, p.arg.gvalue_get, n)) + self.c.write(' return value;\n') + self.c.write('}\n') + self.c.write('\n') + n += 1 + + self.c.write('static void\n' + '%s_skeleton_class_init (%sSkeletonClass *klass)\n' + '{\n' + ' GObjectClass *gobject_class;\n' + ' GDBusInterfaceSkeletonClass *skeleton_class;\n' + '\n' + ' gobject_class = G_OBJECT_CLASS (klass);\n' + ' gobject_class->finalize = %s_skeleton_finalize;\n' + %(i.name_lower, i.camel_name, i.name_lower)) + if len(i.properties) > 0: + self.c.write(' gobject_class->get_property = %s_skeleton_get_property;\n' + ' gobject_class->set_property = %s_skeleton_set_property;\n' + ' gobject_class->notify = %s_skeleton_notify;\n' + '\n'%(i.name_lower, i.name_lower, i.name_lower)) + self.c.write('\n' + ' %s_override_properties (gobject_class, 1);\n'%(i.name_lower)) + self.c.write('\n' + ' skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass);\n'); + self.c.write(' skeleton_class->get_info = %s_skeleton_dbus_interface_get_info;\n'%(i.name_lower)) + self.c.write(' skeleton_class->get_properties = %s_skeleton_dbus_interface_get_properties;\n'%(i.name_lower)) + self.c.write(' skeleton_class->flush = %s_skeleton_dbus_interface_flush;\n'%(i.name_lower)) + self.c.write(' skeleton_class->get_vtable = %s_skeleton_dbus_interface_get_vtable;\n'%(i.name_lower)) + + self.c.write('\n' + '#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38\n' + ' g_type_class_add_private (klass, sizeof (%sSkeletonPrivate));\n' + '#endif\n'%(i.camel_name)) + + self.c.write('}\n' + '\n') + + self.c.write('static void\n' + '%s_skeleton_iface_init (%sIface *iface)\n' + '{\n' + %(i.name_lower, i.camel_name)) + for s in i.signals: + self.c.write(' iface->%s = _%s_on_signal_%s;\n' + %(s.name_lower, i.name_lower, s.name_lower)) + for p in i.properties: + self.c.write(' iface->get_%s = %s_skeleton_get_%s;\n'%(p.name_lower, i.name_lower, p.name_lower)) + self.c.write('}\n' + '\n') + + # constructors + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * %s_skeleton_new:\n' + ' *\n' + ' * Creates a skeleton object for the D-Bus interface #%s.\n' + ' *\n' + ' * Returns: (transfer full) (type %sSkeleton): The skeleton object.\n' + %(i.name_lower, i.name, i.camel_name), False)) + self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 0) + self.c.write('%s *\n' + '%s_skeleton_new (void)\n' + '{\n' + ' return %s%s (g_object_new (%sTYPE_%s_SKELETON, NULL));\n' + '}\n' + '\n'%(i.camel_name, i.name_lower, i.ns_upper, i.name_upper, i.ns_upper, i.name_upper)) + + # --------------------------------------------------------------------------------------------------- + + def generate_object(self): + self.c.write('/* ------------------------------------------------------------------------\n' + ' * Code for Object, ObjectProxy and ObjectSkeleton\n' + ' * ------------------------------------------------------------------------\n' + ' */\n' + '\n') + + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * SECTION:%sObject\n' + ' * @title: %sObject\n' + ' * @short_description: Specialized GDBusObject types\n' + ' *\n' + ' * This section contains the #%sObject, #%sObjectProxy, and #%sObjectSkeleton types which make it easier to work with objects implementing generated types for D-Bus interfaces.\n' + ' */\n' + %(self.namespace, self.namespace, self.namespace, self.namespace, self.namespace), False)) + self.c.write('\n') + + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * %sObject:\n' + ' *\n' + ' * The #%sObject type is a specialized container of interfaces.\n' + ' */\n' + %(self.namespace, self.namespace), False)) + self.c.write('\n') + + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * %sObjectIface:\n' + ' * @parent_iface: The parent interface.\n' + ' *\n' + ' * Virtual table for the #%sObject interface.\n' + ' */\n' + %(self.namespace, self.namespace), False)) + self.c.write('\n') + + self.c.write('typedef %sObjectIface %sObjectInterface;\n'%(self.namespace, self.namespace)) + self.c.write('G_DEFINE_INTERFACE_WITH_CODE (%sObject, %sobject, G_TYPE_OBJECT, g_type_interface_add_prerequisite (g_define_type_id, G_TYPE_DBUS_OBJECT));\n'%(self.namespace, self.ns_lower)) + self.c.write('\n') + self.c.write('static void\n' + '%sobject_default_init (%sObjectIface *iface)\n' + '{\n' + %(self.ns_lower, self.namespace)); + for i in self.ifaces: + self.c.write(self.docbook_gen.expand( + ' /**\n' + ' * %sObject:%s:\n' + ' *\n' + ' * The #%s instance corresponding to the D-Bus interface #%s, if any.\n' + ' *\n' + ' * Connect to the #GObject::notify signal to get informed of property changes.\n' + %(self.namespace, i.name_hyphen, i.camel_name, i.name), False)) + self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 2) + self.c.write(' g_object_interface_install_property (iface, g_param_spec_object ("%s", "%s", "%s", %sTYPE_%s, G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS));\n' + '\n' + %(i.name_hyphen, i.name_hyphen, i.name_hyphen, self.ns_upper, i.name_upper)) + self.c.write('}\n' + '\n') + + for i in self.ifaces: + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * %sobject_get_%s:\n' + ' * @object: A #%sObject.\n' + ' *\n' + ' * Gets the #%s instance for the D-Bus interface #%s on @object, if any.\n' + ' *\n' + ' * Returns: (transfer full): A #%s that must be freed with g_object_unref() or %%NULL if @object does not implement the interface.\n' + %(self.ns_lower, i.name_upper.lower(), self.namespace, i.camel_name, i.name, i.camel_name), False)) + self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 0) + self.c.write ('%s *%sobject_get_%s (%sObject *object)\n' + %(i.camel_name, self.ns_lower, i.name_upper.lower(), self.namespace)) + self.c.write('{\n' + ' GDBusInterface *ret;\n' + ' ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "%s");\n' + ' if (ret == NULL)\n' + ' return NULL;\n' + ' return %s%s (ret);\n' + '}\n' + '\n' + %(i.name, self.ns_upper, i.name_upper)) + self.c.write('\n') + for i in self.ifaces: + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * %sobject_peek_%s: (skip)\n' + ' * @object: A #%sObject.\n' + ' *\n' + ' * Like %sobject_get_%s() but doesn\'t increase the reference count on the returned object.\n' + ' *\n' + ' * <warning>It is not safe to use the returned object if you are on another thread than the one where the #GDBusObjectManagerClient or #GDBusObjectManagerServer for @object is running.</warning>\n' + ' *\n' + ' * Returns: (transfer none): A #%s or %%NULL if @object does not implement the interface. Do not free the returned object, it is owned by @object.\n' + %(self.ns_lower, i.name_upper.lower(), self.namespace, self.ns_lower, i.name_upper.lower(), i.camel_name), False)) + self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 0) + self.c.write ('%s *%sobject_peek_%s (%sObject *object)\n' + %(i.camel_name, self.ns_lower, i.name_upper.lower(), self.namespace)) + self.c.write('{\n' + ' GDBusInterface *ret;\n' + ' ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "%s");\n' + ' if (ret == NULL)\n' + ' return NULL;\n' + ' g_object_unref (ret);\n' + ' return %s%s (ret);\n' + '}\n' + '\n' + %(i.name, self.ns_upper, i.name_upper)) + self.c.write('\n') + # shared by ObjectProxy and ObjectSkeleton classes + self.c.write('static void\n' + '%sobject_notify (GDBusObject *object, GDBusInterface *interface)\n' + '{\n' + ' _ExtendedGDBusInterfaceInfo *info = (_ExtendedGDBusInterfaceInfo *) g_dbus_interface_get_info (interface);\n' + ' /* info can be NULL if the other end is using a D-Bus interface we don\'t know\n' + ' * anything about, for example old generated code in this process talking to\n' + ' * newer generated code in the other process. */\n' + ' if (info != NULL)\n' + ' g_object_notify (G_OBJECT (object), info->hyphen_name);\n' + '}\n' + '\n' + %(self.ns_lower)) + + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * %sObjectProxy:\n' + ' *\n' + ' * The #%sObjectProxy structure contains only private data and should only be accessed using the provided API.\n' + %(self.namespace, self.namespace), False)) + self.c.write(' */\n') + self.c.write('\n') + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * %sObjectProxyClass:\n' + ' * @parent_class: The parent class.\n' + ' *\n' + ' * Class structure for #%sObjectProxy.\n' + %(self.namespace, self.namespace), False)) + self.c.write(' */\n') + self.c.write('\n') + # class boilerplate + self.c.write('static void\n' + '%sobject_proxy__%sobject_iface_init (%sObjectIface *iface G_GNUC_UNUSED)\n' + '{\n' + '}\n' + '\n' + %(self.ns_lower, self.ns_lower, self.namespace)) + self.c.write('static void\n' + '%sobject_proxy__g_dbus_object_iface_init (GDBusObjectIface *iface)\n' + '{\n' + ' iface->interface_added = %sobject_notify;\n' + ' iface->interface_removed = %sobject_notify;\n' + '}\n' + '\n' + %(self.ns_lower, self.ns_lower, self.ns_lower)) + self.c.write('\n') + self.c.write('G_DEFINE_TYPE_WITH_CODE (%sObjectProxy, %sobject_proxy, G_TYPE_DBUS_OBJECT_PROXY,\n' + ' G_IMPLEMENT_INTERFACE (%sTYPE_OBJECT, %sobject_proxy__%sobject_iface_init)\n' + ' G_IMPLEMENT_INTERFACE (G_TYPE_DBUS_OBJECT, %sobject_proxy__g_dbus_object_iface_init));\n' + '\n' + %(self.namespace, self.ns_lower, self.ns_upper, self.ns_lower, self.ns_lower, self.ns_lower)) + # class boilerplate + self.c.write('static void\n' + '%sobject_proxy_init (%sObjectProxy *object G_GNUC_UNUSED)\n' + '{\n' + '}\n' + '\n'%(self.ns_lower, self.namespace)) + self.c.write('static void\n' + '%sobject_proxy_set_property (GObject *gobject,\n' + ' guint prop_id,\n' + ' const GValue *value G_GNUC_UNUSED,\n' + ' GParamSpec *pspec)\n' + '{\n' + ' G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);\n' + %(self.ns_lower)) + self.c.write('}\n' + '\n'%()) + self.c.write('static void\n' + '%sobject_proxy_get_property (GObject *gobject,\n' + ' guint prop_id,\n' + ' GValue *value,\n' + ' GParamSpec *pspec)\n' + '{\n' + ' %sObjectProxy *object = %sOBJECT_PROXY (gobject);\n' + ' GDBusInterface *interface;\n' + '\n' + ' switch (prop_id)\n' + ' {\n' + %(self.ns_lower, self.namespace, self.ns_upper)) + n = 1 + for i in self.ifaces: + self.c.write(' case %d:\n' + ' interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "%s");\n' + ' g_value_take_object (value, interface);\n' + ' break;\n' + '\n' + %(n, i.name)) + n += 1 + self.c.write(' default:\n' + ' G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);\n' + ' break;\n' + ' }\n' + '}\n' + '\n'%()) + self.c.write('static void\n' + '%sobject_proxy_class_init (%sObjectProxyClass *klass)\n' + '{\n' + ' GObjectClass *gobject_class = G_OBJECT_CLASS (klass);\n' + '\n' + ' gobject_class->set_property = %sobject_proxy_set_property;\n' + ' gobject_class->get_property = %sobject_proxy_get_property;\n' + '\n' + %(self.ns_lower, self.namespace, self.ns_lower, self.ns_lower)) + n = 1 + for i in self.ifaces: + self.c.write(' g_object_class_override_property (gobject_class, %d, "%s");' + '\n' + %(n, i.name_hyphen)) + n += 1 + self.c.write('}\n' + '\n') + + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * %sobject_proxy_new:\n' + ' * @connection: A #GDBusConnection.\n' + ' * @object_path: An object path.\n' + ' *\n' + ' * Creates a new proxy object.\n' + ' *\n' + ' * Returns: (transfer full): The proxy object.\n' + ' */\n' + %(self.ns_lower), False)) + self.c.write('%sObjectProxy *\n' + '%sobject_proxy_new (GDBusConnection *connection,\n' + ' const gchar *object_path)\n' + '{\n' + ' g_return_val_if_fail (G_IS_DBUS_CONNECTION (connection), NULL);\n' + ' g_return_val_if_fail (g_variant_is_object_path (object_path), NULL);\n' + ' return %sOBJECT_PROXY (g_object_new (%sTYPE_OBJECT_PROXY, "g-connection", connection, "g-object-path", object_path, NULL));\n' + '}\n' + '\n'%(self.namespace, self.ns_lower, self.ns_upper, self.ns_upper)) + + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * %sObjectSkeleton:\n' + ' *\n' + ' * The #%sObjectSkeleton structure contains only private data and should only be accessed using the provided API.\n' + %(self.namespace, self.namespace), False)) + self.c.write(' */\n') + self.c.write('\n') + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * %sObjectSkeletonClass:\n' + ' * @parent_class: The parent class.\n' + ' *\n' + ' * Class structure for #%sObjectSkeleton.\n' + %(self.namespace, self.namespace), False)) + self.c.write(' */\n') + self.c.write('\n') + # class boilerplate + self.c.write('static void\n' + '%sobject_skeleton__%sobject_iface_init (%sObjectIface *iface G_GNUC_UNUSED)\n' + '{\n' + '}\n' + '\n' + %(self.ns_lower, self.ns_lower, self.namespace)) + self.c.write('\n') + self.c.write('static void\n' + '%sobject_skeleton__g_dbus_object_iface_init (GDBusObjectIface *iface)\n' + '{\n' + ' iface->interface_added = %sobject_notify;\n' + ' iface->interface_removed = %sobject_notify;\n' + '}\n' + '\n' + %(self.ns_lower, self.ns_lower, self.ns_lower)) + self.c.write('G_DEFINE_TYPE_WITH_CODE (%sObjectSkeleton, %sobject_skeleton, G_TYPE_DBUS_OBJECT_SKELETON,\n' + ' G_IMPLEMENT_INTERFACE (%sTYPE_OBJECT, %sobject_skeleton__%sobject_iface_init)\n' + ' G_IMPLEMENT_INTERFACE (G_TYPE_DBUS_OBJECT, %sobject_skeleton__g_dbus_object_iface_init));\n' + '\n' + %(self.namespace, self.ns_lower, self.ns_upper, self.ns_lower, self.ns_lower, self.ns_lower)) + # class boilerplate + self.c.write('static void\n' + '%sobject_skeleton_init (%sObjectSkeleton *object G_GNUC_UNUSED)\n' + '{\n' + '}\n' + '\n'%(self.ns_lower, self.namespace)) + self.c.write('static void\n' + '%sobject_skeleton_set_property (GObject *gobject,\n' + ' guint prop_id,\n' + ' const GValue *value,\n' + ' GParamSpec *pspec)\n' + '{\n' + ' %sObjectSkeleton *object = %sOBJECT_SKELETON (gobject);\n' + ' GDBusInterfaceSkeleton *interface;\n' + '\n' + ' switch (prop_id)\n' + ' {\n' + %(self.ns_lower, self.namespace, self.ns_upper)) + n = 1 + for i in self.ifaces: + self.c.write(' case %d:\n' + ' interface = g_value_get_object (value);\n' + ' if (interface != NULL)\n' + ' {\n' + ' g_warn_if_fail (%sIS_%s (interface));\n' + ' g_dbus_object_skeleton_add_interface (G_DBUS_OBJECT_SKELETON (object), interface);\n' + ' }\n' + ' else\n' + ' {\n' + ' g_dbus_object_skeleton_remove_interface_by_name (G_DBUS_OBJECT_SKELETON (object), "%s");\n' + ' }\n' + ' break;\n' + '\n' + %(n, self.ns_upper, i.name_upper, i.name)) + n += 1 + self.c.write(' default:\n' + ' G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);\n' + ' break;\n' + ' }\n' + '}\n' + '\n'%()) + self.c.write('static void\n' + '%sobject_skeleton_get_property (GObject *gobject,\n' + ' guint prop_id,\n' + ' GValue *value,\n' + ' GParamSpec *pspec)\n' + '{\n' + ' %sObjectSkeleton *object = %sOBJECT_SKELETON (gobject);\n' + ' GDBusInterface *interface;\n' + '\n' + ' switch (prop_id)\n' + ' {\n' + %(self.ns_lower, self.namespace, self.ns_upper)) + n = 1 + for i in self.ifaces: + self.c.write(' case %d:\n' + ' interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "%s");\n' + ' g_value_take_object (value, interface);\n' + ' break;\n' + '\n' + %(n, i.name)) + n += 1 + self.c.write(' default:\n' + ' G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);\n' + ' break;\n' + ' }\n' + '}\n' + '\n'%()) + self.c.write('static void\n' + '%sobject_skeleton_class_init (%sObjectSkeletonClass *klass)\n' + '{\n' + ' GObjectClass *gobject_class = G_OBJECT_CLASS (klass);\n' + '\n' + ' gobject_class->set_property = %sobject_skeleton_set_property;\n' + ' gobject_class->get_property = %sobject_skeleton_get_property;\n' + '\n' + %(self.ns_lower, self.namespace, self.ns_lower, self.ns_lower)) + n = 1 + for i in self.ifaces: + self.c.write(' g_object_class_override_property (gobject_class, %d, "%s");' + '\n' + %(n, i.name_hyphen)) + n += 1 + self.c.write('}\n' + '\n') + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * %sobject_skeleton_new:\n' + ' * @object_path: An object path.\n' + ' *\n' + ' * Creates a new skeleton object.\n' + ' *\n' + ' * Returns: (transfer full): The skeleton object.\n' + ' */\n' + %(self.ns_lower), False)) + self.c.write('%sObjectSkeleton *\n' + '%sobject_skeleton_new (const gchar *object_path)\n' + '{\n' + ' g_return_val_if_fail (g_variant_is_object_path (object_path), NULL);\n' + ' return %sOBJECT_SKELETON (g_object_new (%sTYPE_OBJECT_SKELETON, "g-object-path", object_path, NULL));\n' + '}\n' + '\n'%(self.namespace, self.ns_lower, self.ns_upper, self.ns_upper)) + for i in self.ifaces: + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * %sobject_skeleton_set_%s:\n' + ' * @object: A #%sObjectSkeleton.\n' + ' * @interface_: (allow-none): A #%s or %%NULL to clear the interface.\n' + ' *\n' + ' * Sets the #%s instance for the D-Bus interface #%s on @object.\n' + %(self.ns_lower, i.name_upper.lower(), self.namespace, i.camel_name, i.camel_name, i.name), False)) + self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 0) + self.c.write ('void %sobject_skeleton_set_%s (%sObjectSkeleton *object, %s *interface_)\n' + %(self.ns_lower, i.name_upper.lower(), self.namespace, i.camel_name)) + self.c.write('{\n' + ' g_object_set (G_OBJECT (object), "%s", interface_, NULL);\n' + '}\n' + '\n' + %(i.name_hyphen)) + self.c.write('\n') + + + def generate_object_manager_client(self): + self.c.write('/* ------------------------------------------------------------------------\n' + ' * Code for ObjectManager client\n' + ' * ------------------------------------------------------------------------\n' + ' */\n' + '\n') + + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * SECTION:%sObjectManagerClient\n' + ' * @title: %sObjectManagerClient\n' + ' * @short_description: Generated GDBusObjectManagerClient type\n' + ' *\n' + ' * This section contains a #GDBusObjectManagerClient that uses %sobject_manager_client_get_proxy_type() as the #GDBusProxyTypeFunc.\n' + ' */\n' + %(self.namespace, self.namespace, self.ns_lower), False)) + self.c.write('\n') + + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * %sObjectManagerClient:\n' + ' *\n' + ' * The #%sObjectManagerClient structure contains only private data and should only be accessed using the provided API.\n' + %(self.namespace, self.namespace), False)) + self.c.write(' */\n') + self.c.write('\n') + + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * %sObjectManagerClientClass:\n' + ' * @parent_class: The parent class.\n' + ' *\n' + ' * Class structure for #%sObjectManagerClient.\n' + %(self.namespace, self.namespace), False)) + self.c.write(' */\n') + self.c.write('\n') + + # class boilerplate + self.c.write('G_DEFINE_TYPE (%sObjectManagerClient, %sobject_manager_client, G_TYPE_DBUS_OBJECT_MANAGER_CLIENT);\n' + '\n' + %(self.namespace, self.ns_lower)) + + # class boilerplate + self.c.write('static void\n' + '%sobject_manager_client_init (%sObjectManagerClient *manager G_GNUC_UNUSED)\n' + '{\n' + '}\n' + '\n'%(self.ns_lower, self.namespace)) + self.c.write('static void\n' + '%sobject_manager_client_class_init (%sObjectManagerClientClass *klass G_GNUC_UNUSED)\n' + '{\n' + '}\n' + '\n'%(self.ns_lower, self.namespace)) + + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * %sobject_manager_client_get_proxy_type:\n' + ' * @manager: A #GDBusObjectManagerClient.\n' + ' * @object_path: The object path of the remote object (unused).\n' + ' * @interface_name: (allow-none): Interface name of the remote object or %%NULL to get the object proxy #GType.\n' + ' * @user_data: User data (unused).\n' + ' *\n' + ' * A #GDBusProxyTypeFunc that maps @interface_name to the generated #GDBusObjectProxy<!-- -->- and #GDBusProxy<!-- -->-derived types.\n' + ' *\n' + ' * Returns: A #GDBusProxy<!-- -->-derived #GType if @interface_name is not %%NULL, otherwise the #GType for #%sObjectProxy.\n' + %(self.ns_lower, self.namespace), False)) + self.c.write(' */\n') + self.c.write('GType\n' + '%sobject_manager_client_get_proxy_type (GDBusObjectManagerClient *manager G_GNUC_UNUSED, const gchar *object_path G_GNUC_UNUSED, const gchar *interface_name, gpointer user_data G_GNUC_UNUSED)\n' + '{\n' + %(self.ns_lower)) + self.c.write(' static gsize once_init_value = 0;\n' + ' static GHashTable *lookup_hash;\n' + ' GType ret;\n' + '\n' + ' if (interface_name == NULL)\n' + ' return %sTYPE_OBJECT_PROXY;\n' + ' if (g_once_init_enter (&once_init_value))\n' + ' {\n' + ' lookup_hash = g_hash_table_new (g_str_hash, g_str_equal);\n' + %(self.ns_upper)) + for i in self.ifaces: + self.c.write(' g_hash_table_insert (lookup_hash, (gpointer) "%s", GSIZE_TO_POINTER (%sTYPE_%s_PROXY));\n' + %(i.name, i.ns_upper, i.name_upper)) + self.c.write(' g_once_init_leave (&once_init_value, 1);\n' + ' }\n') + self.c.write(' ret = (GType) GPOINTER_TO_SIZE (g_hash_table_lookup (lookup_hash, interface_name));\n' + ' if (ret == (GType) 0)\n' + ' ret = G_TYPE_DBUS_PROXY;\n') + self.c.write(' return ret;\n' + '}\n' + '\n') + + # constructors + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * %sobject_manager_client_new:\n' + ' * @connection: A #GDBusConnection.\n' + ' * @flags: Flags from the #GDBusObjectManagerClientFlags enumeration.\n' + ' * @name: (allow-none): A bus name (well-known or unique) or %%NULL if @connection is not a message bus connection.\n' + ' * @object_path: An object path.\n' + ' * @cancellable: (allow-none): A #GCancellable or %%NULL.\n' + ' * @callback: A #GAsyncReadyCallback to call when the request is satisfied.\n' + ' * @user_data: User data to pass to @callback.\n' + ' *\n' + ' * Asynchronously creates #GDBusObjectManagerClient using %sobject_manager_client_get_proxy_type() as the #GDBusProxyTypeFunc. See g_dbus_object_manager_client_new() for more details.\n' + ' *\n' + ' * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.\n' + ' * You can then call %sobject_manager_client_new_finish() to get the result of the operation.\n' + ' *\n' + ' * See %sobject_manager_client_new_sync() for the synchronous, blocking version of this constructor.\n' + %(self.ns_lower, self.ns_lower, self.ns_lower, self.ns_lower), False)) + self.c.write(' */\n') + self.c.write('void\n' + '%sobject_manager_client_new (\n' + ' GDBusConnection *connection,\n' + ' GDBusObjectManagerClientFlags flags,\n' + ' const gchar *name,\n' + ' const gchar *object_path,\n' + ' GCancellable *cancellable,\n' + ' GAsyncReadyCallback callback,\n' + ' gpointer user_data)\n' + '{\n' + ' g_async_initable_new_async (%sTYPE_OBJECT_MANAGER_CLIENT, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "flags", flags, "name", name, "connection", connection, "object-path", object_path, "get-proxy-type-func", %sobject_manager_client_get_proxy_type, NULL);\n' + '}\n' + '\n' + %(self.ns_lower, self.ns_upper, self.ns_lower)) + self.c.write('/**\n' + ' * %sobject_manager_client_new_finish:\n' + ' * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to %sobject_manager_client_new().\n' + ' * @error: Return location for error or %%NULL\n' + ' *\n' + ' * Finishes an operation started with %sobject_manager_client_new().\n' + ' *\n' + ' * Returns: (transfer full) (type %sObjectManagerClient): The constructed object manager client or %%NULL if @error is set.\n' + %(self.ns_lower, self.ns_lower, self.ns_lower, self.namespace)) + self.c.write(' */\n') + self.c.write('GDBusObjectManager *\n' + '%sobject_manager_client_new_finish (\n' + ' GAsyncResult *res,\n' + ' GError **error)\n' + '{\n' + ' GObject *ret;\n' + ' GObject *source_object;\n' + ' source_object = g_async_result_get_source_object (res);\n' + ' ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);\n' + ' g_object_unref (source_object);\n' + ' if (ret != NULL)\n' + ' return G_DBUS_OBJECT_MANAGER (ret);\n' + ' else\n' + ' return NULL;\n' + '}\n' + '\n' + %(self.ns_lower)) + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * %sobject_manager_client_new_sync:\n' + ' * @connection: A #GDBusConnection.\n' + ' * @flags: Flags from the #GDBusObjectManagerClientFlags enumeration.\n' + ' * @name: (allow-none): A bus name (well-known or unique) or %%NULL if @connection is not a message bus connection.\n' + ' * @object_path: An object path.\n' + ' * @cancellable: (allow-none): A #GCancellable or %%NULL.\n' + ' * @error: Return location for error or %%NULL\n' + ' *\n' + ' * Synchronously creates #GDBusObjectManagerClient using %sobject_manager_client_get_proxy_type() as the #GDBusProxyTypeFunc. See g_dbus_object_manager_client_new_sync() for more details.\n' + ' *\n' + ' * The calling thread is blocked until a reply is received.\n' + ' *\n' + ' * See %sobject_manager_client_new() for the asynchronous version of this constructor.\n' + ' *\n' + ' * Returns: (transfer full) (type %sObjectManagerClient): The constructed object manager client or %%NULL if @error is set.\n' + %(self.ns_lower, self.ns_lower, self.ns_lower, self.namespace), False)) + self.c.write(' */\n') + self.c.write('GDBusObjectManager *\n' + '%sobject_manager_client_new_sync (\n' + ' GDBusConnection *connection,\n' + ' GDBusObjectManagerClientFlags flags,\n' + ' const gchar *name,\n' + ' const gchar *object_path,\n' + ' GCancellable *cancellable,\n' + ' GError **error)\n' + '{\n' + ' GInitable *ret;\n' + ' ret = g_initable_new (%sTYPE_OBJECT_MANAGER_CLIENT, cancellable, error, "flags", flags, "name", name, "connection", connection, "object-path", object_path, "get-proxy-type-func", %sobject_manager_client_get_proxy_type, NULL);\n' + ' if (ret != NULL)\n' + ' return G_DBUS_OBJECT_MANAGER (ret);\n' + ' else\n' + ' return NULL;\n' + '}\n' + '\n' + %(self.ns_lower, self.ns_upper, self.ns_lower)) + self.c.write('\n') + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * %sobject_manager_client_new_for_bus:\n' + ' * @bus_type: A #GBusType.\n' + ' * @flags: Flags from the #GDBusObjectManagerClientFlags enumeration.\n' + ' * @name: A bus name (well-known or unique).\n' + ' * @object_path: An object path.\n' + ' * @cancellable: (allow-none): A #GCancellable or %%NULL.\n' + ' * @callback: A #GAsyncReadyCallback to call when the request is satisfied.\n' + ' * @user_data: User data to pass to @callback.\n' + ' *\n' + ' * Like %sobject_manager_client_new() but takes a #GBusType instead of a #GDBusConnection.\n' + ' *\n' + ' * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.\n' + ' * You can then call %sobject_manager_client_new_for_bus_finish() to get the result of the operation.\n' + ' *\n' + ' * See %sobject_manager_client_new_for_bus_sync() for the synchronous, blocking version of this constructor.\n' + %(self.ns_lower, self.ns_lower, self.ns_lower, self.ns_lower), False)) + self.c.write(' */\n') + self.c.write('void\n' + '%sobject_manager_client_new_for_bus (\n' + ' GBusType bus_type,\n' + ' GDBusObjectManagerClientFlags flags,\n' + ' const gchar *name,\n' + ' const gchar *object_path,\n' + ' GCancellable *cancellable,\n' + ' GAsyncReadyCallback callback,\n' + ' gpointer user_data)\n' + '{\n' + ' g_async_initable_new_async (%sTYPE_OBJECT_MANAGER_CLIENT, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "flags", flags, "name", name, "bus-type", bus_type, "object-path", object_path, "get-proxy-type-func", %sobject_manager_client_get_proxy_type, NULL);\n' + '}\n' + '\n' + %(self.ns_lower, self.ns_upper, self.ns_lower)) + self.c.write('/**\n' + ' * %sobject_manager_client_new_for_bus_finish:\n' + ' * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to %sobject_manager_client_new_for_bus().\n' + ' * @error: Return location for error or %%NULL\n' + ' *\n' + ' * Finishes an operation started with %sobject_manager_client_new_for_bus().\n' + ' *\n' + ' * Returns: (transfer full) (type %sObjectManagerClient): The constructed object manager client or %%NULL if @error is set.\n' + %(self.ns_lower, self.ns_lower, self.ns_lower, self.namespace)) + self.c.write(' */\n') + self.c.write('GDBusObjectManager *\n' + '%sobject_manager_client_new_for_bus_finish (\n' + ' GAsyncResult *res,\n' + ' GError **error)\n' + '{\n' + ' GObject *ret;\n' + ' GObject *source_object;\n' + ' source_object = g_async_result_get_source_object (res);\n' + ' ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);\n' + ' g_object_unref (source_object);\n' + ' if (ret != NULL)\n' + ' return G_DBUS_OBJECT_MANAGER (ret);\n' + ' else\n' + ' return NULL;\n' + '}\n' + '\n' + %(self.ns_lower)) + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * %sobject_manager_client_new_for_bus_sync:\n' + ' * @bus_type: A #GBusType.\n' + ' * @flags: Flags from the #GDBusObjectManagerClientFlags enumeration.\n' + ' * @name: A bus name (well-known or unique).\n' + ' * @object_path: An object path.\n' + ' * @cancellable: (allow-none): A #GCancellable or %%NULL.\n' + ' * @error: Return location for error or %%NULL\n' + ' *\n' + ' * Like %sobject_manager_client_new_sync() but takes a #GBusType instead of a #GDBusConnection.\n' + ' *\n' + ' * The calling thread is blocked until a reply is received.\n' + ' *\n' + ' * See %sobject_manager_client_new_for_bus() for the asynchronous version of this constructor.\n' + ' *\n' + ' * Returns: (transfer full) (type %sObjectManagerClient): The constructed object manager client or %%NULL if @error is set.\n' + %(self.ns_lower, self.ns_lower, self.ns_lower, self.namespace), False)) + self.c.write(' */\n') + self.c.write('GDBusObjectManager *\n' + '%sobject_manager_client_new_for_bus_sync (\n' + ' GBusType bus_type,\n' + ' GDBusObjectManagerClientFlags flags,\n' + ' const gchar *name,\n' + ' const gchar *object_path,\n' + ' GCancellable *cancellable,\n' + ' GError **error)\n' + '{\n' + ' GInitable *ret;\n' + ' ret = g_initable_new (%sTYPE_OBJECT_MANAGER_CLIENT, cancellable, error, "flags", flags, "name", name, "bus-type", bus_type, "object-path", object_path, "get-proxy-type-func", %sobject_manager_client_get_proxy_type, NULL);\n' + ' if (ret != NULL)\n' + ' return G_DBUS_OBJECT_MANAGER (ret);\n' + ' else\n' + ' return NULL;\n' + '}\n' + '\n' + %(self.ns_lower, self.ns_upper, self.ns_lower)) + self.c.write('\n') + + # --------------------------------------------------------------------------------------------------- + + def write_gtkdoc_deprecated_and_since_and_close(self, obj, f, indent): + if len(obj.since) > 0: + f.write('%*s *\n' + '%*s * Since: %s\n' + %(indent, '', indent, '', obj.since)) + if obj.deprecated: + if isinstance(obj, dbustypes.Interface): + thing = 'The D-Bus interface' + elif isinstance(obj, dbustypes.Method): + thing = 'The D-Bus method' + elif isinstance(obj, dbustypes.Signal): + thing = 'The D-Bus signal' + elif isinstance(obj, dbustypes.Property): + thing = 'The D-Bus property' + else: + raise RuntimeError('Cannot handle object ', obj) + f.write(self.docbook_gen.expand( + '%*s *\n' + '%*s * Deprecated: %s has been deprecated.\n' + %(indent, '', indent, '', thing), False)) + f.write('%*s */\n'%(indent, '')) + + # --------------------------------------------------------------------------------------------------- + + def generate_interface_intro(self, i): + self.c.write('/* ------------------------------------------------------------------------\n' + ' * Code for interface %s\n' + ' * ------------------------------------------------------------------------\n' + ' */\n' + '\n'%(i.name)) + + self.c.write(self.docbook_gen.expand( + '/**\n' + ' * SECTION:%s\n' + ' * @title: %s\n' + ' * @short_description: Generated C code for the %s D-Bus interface\n' + ' *\n' + ' * This section contains code for working with the #%s D-Bus interface in C.\n' + ' */\n' + %(i.camel_name, i.camel_name, i.name, i.name), False)) + self.c.write('\n') + + def generate(self): + self.generate_intro() + self.declare_types() + for i in self.ifaces: + self.generate_interface_intro(i) + self.generate_introspection_for_interface(i) + self.generate_interface(i) + self.generate_property_accessors(i) + self.generate_signal_emitters(i) + self.generate_method_calls(i) + self.generate_method_completers(i) + self.generate_proxy(i) + self.generate_skeleton(i) + if self.generate_objmanager: + self.generate_object() + self.generate_object_manager_client() + + self.generate_outro() diff --git a/Release/share/glib-2.0/codegen/codegen_docbook.py b/Release/share/glib-2.0/codegen/codegen_docbook.py new file mode 100644 index 0000000..18e3d00 --- /dev/null +++ b/Release/share/glib-2.0/codegen/codegen_docbook.py @@ -0,0 +1,329 @@ +# -*- Mode: Python -*- + +# GDBus - GLib D-Bus Library +# +# Copyright (C) 2008-2011 Red Hat, Inc. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General +# Public License along with this library; if not, see <http://www.gnu.org/licenses/>. +# +# Author: David Zeuthen <davidz@redhat.com> + +import sys +import re + +from . import config +from . import utils +from . import dbustypes +from . import parser + +# ---------------------------------------------------------------------------------------------------- + +class DocbookCodeGenerator: + def __init__(self, ifaces, docbook): + self.ifaces = ifaces + self.docbook = docbook + self.generate_expand_dicts() + + def print_method_prototype(self, i, m, in_synopsis): + max_method_len = 0 + if in_synopsis: + for _m in i.methods: + max_method_len = max(len(_m.name), max_method_len) + else: + max_method_len = max(len(m.name), max_method_len) + + max_signature_len = 0 + if in_synopsis: + for _m in i.methods: + for a in _m.in_args: + max_signature_len = max(len(a.signature), max_signature_len) + for a in _m.out_args: + max_signature_len = max(len(a.signature), max_signature_len) + else: + for a in m.in_args: + max_signature_len = max(len(a.signature), max_signature_len) + for a in m.out_args: + max_signature_len = max(len(a.signature), max_signature_len) + + if in_synopsis: + self.out.write('<link linkend="gdbus-method-%s.%s">%s</link>%*s (' + %(utils.dots_to_hyphens(i.name), m.name, m.name, max_method_len - len(m.name), '')) + else: + self.out.write('%s%*s (' + %(m.name, max_method_len - len(m.name), '')) + count = 0 + for a in m.in_args: + if (count > 0): + self.out.write(',\n%*s'%(max_method_len + 2, '')) + self.out.write('IN %s%*s %s'%(a.signature, max_signature_len - len(a.signature), '', a.name)) + count = count + 1 + for a in m.out_args: + if (count > 0): + self.out.write(',\n%*s'%(max_method_len + 2, '')) + self.out.write('OUT %s%*s %s'%(a.signature, max_signature_len - len(a.signature), '', a.name)) + count = count + 1 + self.out.write(');\n') + + def print_signal_prototype(self, i, s, in_synopsis): + max_signal_len = 0 + if in_synopsis: + for _s in i.signals: + max_signal_len = max(len(_s.name), max_signal_len) + else: + max_signal_len = max(len(s.name), max_signal_len) + + max_signature_len = 0 + if in_synopsis: + for _s in i.signals: + for a in _s.args: + max_signature_len = max(len(a.signature), max_signature_len) + else: + for a in s.args: + max_signature_len = max(len(a.signature), max_signature_len) + + if in_synopsis: + self.out.write('<link linkend="gdbus-signal-%s.%s">%s</link>%*s (' + %(utils.dots_to_hyphens(i.name), s.name, s.name, max_signal_len - len(s.name), '')) + else: + self.out.write('%s%*s (' + %(s.name, max_signal_len - len(s.name), '')) + count = 0 + for a in s.args: + if (count > 0): + self.out.write(',\n%*s'%(max_signal_len + 2, '')) + self.out.write('%s%*s %s'%(a.signature, max_signature_len - len(a.signature), '', a.name)) + count = count + 1 + self.out.write(');\n') + + def print_property_prototype(self, i, p, in_synopsis): + max_property_len = 0 + if in_synopsis: + for _p in i.properties: + max_property_len = max(len(_p.name), max_property_len) + else: + max_property_len = max(len(p.name), max_property_len) + + max_signature_len = 0 + if in_synopsis: + for _p in i.properties: + max_signature_len = max(len(_p.signature), max_signature_len) + else: + max_signature_len = max(len(p.signature), max_signature_len) + + if in_synopsis: + self.out.write('<link linkend="gdbus-property-%s.%s">%s</link>%*s' + %(utils.dots_to_hyphens(i.name), p.name, p.name, max_property_len - len(p.name), '')) + else: + self.out.write('%s%*s' + %(p.name, max_property_len - len(p.name), '')) + if p.readable and p.writable: + access = 'readwrite' + elif p.readable: + access = 'readable ' + else: + access = 'writable ' + self.out.write(' %s %s\n'%(access, p.signature)) + + + def print_synopsis_methods(self, i): + self.out.write(' <refsynopsisdiv role="synopsis">\n'%()) + self.out.write(' <title role="synopsis.title">Methods</title>\n'%()) + self.out.write(' <synopsis>\n'%()) + for m in i.methods: + self.print_method_prototype(i, m, in_synopsis=True) + self.out.write('</synopsis>\n'%()) + self.out.write(' </refsynopsisdiv>\n'%()) + + def print_synopsis_signals(self, i): + self.out.write(' <refsect1 role="signal_proto">\n'%()) + self.out.write(' <title role="signal_proto.title">Signals</title>\n'%()) + self.out.write(' <synopsis>\n'%()) + for s in i.signals: + self.print_signal_prototype(i, s, in_synopsis=True) + self.out.write('</synopsis>\n'%()) + self.out.write(' </refsect1>\n'%()) + + def print_synopsis_properties(self, i): + self.out.write(' <refsect1 role="properties">\n'%()) + self.out.write(' <title role="properties.title">Properties</title>\n'%()) + self.out.write(' <synopsis>\n'%()) + for p in i.properties: + self.print_property_prototype(i, p, in_synopsis=True) + self.out.write('</synopsis>\n'%()) + self.out.write(' </refsect1>\n'%()) + + def print_method(self, i, m): + self.out.write('<refsect2 role="method" id="gdbus-method-%s.%s">\n'%(utils.dots_to_hyphens(i.name), m.name)) + self.out.write(' <title>The %s() method</title>\n'%(m.name)) + self.out.write(' <indexterm zone="gdbus-method-%s.%s"><primary sortas="%s.%s">%s.%s()</primary></indexterm>\n'%(utils.dots_to_hyphens(i.name), m.name, i.name_without_prefix, m.name, i.name, m.name)) + self.out.write('<programlisting>\n') + self.print_method_prototype(i, m, in_synopsis=False) + self.out.write('</programlisting>\n') + self.out.write('%s\n'%(self.expand_paras(m.doc_string, True))) + if m.in_args or m.out_args: + self.out.write('<variablelist role="params">\n') + for a in m.in_args: + self.out.write('<varlistentry>\n'%()) + self.out.write(' <term><literal>IN %s <parameter>%s</parameter></literal>:</term>\n'%(a.signature, a.name)) + self.out.write(' <listitem>%s</listitem>\n'%(self.expand_paras(a.doc_string, True))) + self.out.write('</varlistentry>\n'%()) + for a in m.out_args: + self.out.write('<varlistentry>\n'%()) + self.out.write(' <term><literal>OUT %s <parameter>%s</parameter></literal>:</term>\n'%(a.signature, a.name)) + self.out.write(' <listitem>%s</listitem>\n'%(self.expand_paras(a.doc_string, True))) + self.out.write('</varlistentry>\n'%()) + self.out.write('</variablelist>\n') + if len(m.since) > 0: + self.out.write('<para role="since">Since %s</para>\n'%(m.since)) + if m.deprecated: + self.out.write('<warning><para>The %s() method is deprecated.</para></warning>'%(m.name)) + self.out.write('</refsect2>\n') + + def print_signal(self, i, s): + self.out.write('<refsect2 role="signal" id="gdbus-signal-%s.%s">\n'%(utils.dots_to_hyphens(i.name), s.name)) + self.out.write(' <title>The "%s" signal</title>\n'%(s.name)) + self.out.write(' <indexterm zone="gdbus-signal-%s.%s"><primary sortas="%s::%s">%s::%s</primary></indexterm>\n'%(utils.dots_to_hyphens(i.name), s.name, i.name_without_prefix, s.name, i.name, s.name)) + self.out.write('<programlisting>\n') + self.print_signal_prototype(i, s, in_synopsis=False) + self.out.write('</programlisting>\n') + self.out.write('%s\n'%(self.expand_paras(s.doc_string, True))) + if s.args: + self.out.write('<variablelist role="params">\n') + for a in s.args: + self.out.write('<varlistentry>\n'%()) + self.out.write(' <term><literal>%s <parameter>%s</parameter></literal>:</term>\n'%(a.signature, a.name)) + self.out.write(' <listitem>%s</listitem>\n'%(self.expand_paras(a.doc_string, True))) + self.out.write('</varlistentry>\n'%()) + self.out.write('</variablelist>\n') + if len(s.since) > 0: + self.out.write('<para role="since">Since %s</para>\n'%(s.since)) + if s.deprecated: + self.out.write('<warning><para>The "%s" signal is deprecated.</para></warning>'%(s.name)) + self.out.write('</refsect2>\n') + + def print_property(self, i, p): + self.out.write('<refsect2 role="property" id="gdbus-property-%s.%s">\n'%(utils.dots_to_hyphens(i.name), p.name)) + self.out.write(' <title>The "%s" property</title>\n'%(p.name)) + self.out.write(' <indexterm zone="gdbus-property-%s.%s"><primary sortas="%s:%s">%s:%s</primary></indexterm>\n'%(utils.dots_to_hyphens(i.name), p.name, i.name_without_prefix, p.name, i.name, p.name)) + self.out.write('<programlisting>\n') + self.print_property_prototype(i, p, in_synopsis=False) + self.out.write('</programlisting>\n') + self.out.write('%s\n'%(self.expand_paras(p.doc_string, True))) + if len(p.since) > 0: + self.out.write('<para role="since">Since %s</para>\n'%(p.since)) + if p.deprecated: + self.out.write('<warning><para>The "%s" property is deprecated.</para></warning>'%(p.name)) + self.out.write('</refsect2>\n') + + def expand(self, s, expandParamsAndConstants): + for key in self.expand_member_dict_keys: + s = s.replace(key, self.expand_member_dict[key]) + for key in self.expand_iface_dict_keys: + s = s.replace(key, self.expand_iface_dict[key]) + if expandParamsAndConstants: + # replace @foo with <parameter>foo</parameter> + s = re.sub('@[a-zA-Z0-9_]*', lambda m: '<parameter>' + m.group(0)[1:] + '</parameter>', s) + # replace e.g. %TRUE with <constant>TRUE</constant> + s = re.sub('%[a-zA-Z0-9_]*', lambda m: '<constant>' + m.group(0)[1:] + '</constant>', s) + return s + + def expand_paras(self, s, expandParamsAndConstants): + s = self.expand(s, expandParamsAndConstants).strip() + if not s.startswith("<para"): + s = "<para>%s</para>" % s + return s + + def generate_expand_dicts(self): + self.expand_member_dict = {} + self.expand_iface_dict = {} + for i in self.ifaces: + key = '#%s'%(i.name) + value = '<link linkend="gdbus-interface-%s.top_of_page">%s</link>'%(utils.dots_to_hyphens(i.name), i.name) + self.expand_iface_dict[key] = value + for m in i.methods: + key = '%s.%s()'%(i.name, m.name) + value = '<link linkend="gdbus-method-%s.%s">%s()</link>'%(utils.dots_to_hyphens(i.name), m.name, m.name) + self.expand_member_dict[key] = value + for s in i.signals: + key = '#%s::%s'%(i.name, s.name) + value = '<link linkend="gdbus-signal-%s.%s">"%s"</link>'%(utils.dots_to_hyphens(i.name), s.name, s.name) + self.expand_member_dict[key] = value + for p in i.properties: + key = '#%s:%s'%(i.name, p.name) + value = '<link linkend="gdbus-property-%s.%s">"%s"</link>'%(utils.dots_to_hyphens(i.name), p.name, p.name) + self.expand_member_dict[key] = value + # Make sure to expand the keys in reverse order so e.g. #org.foo.Iface:MediaCompat + # is evaluated before #org.foo.Iface:Media ... + self.expand_member_dict_keys = sorted(self.expand_member_dict.keys(), reverse=True) + self.expand_iface_dict_keys = sorted(self.expand_iface_dict.keys(), reverse=True) + + def generate(self): + for i in self.ifaces: + self.out = open('%s-%s.xml'%(self.docbook, i.name), 'w') + self.out.write(''%()) + self.out.write('<?xml version="1.0" encoding="utf-8"?>\n'%()) + self.out.write('<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"\n'%()) + self.out.write(' "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [\n'%()) + self.out.write(']>\n'%()) + self.out.write('<refentry id="gdbus-%s">\n'%(i.name)) + self.out.write(' <refmeta>'%()) + self.out.write(' <refentrytitle role="top_of_page" id="gdbus-interface-%s.top_of_page">%s</refentrytitle>\n'%(utils.dots_to_hyphens(i.name), i.name)) + self.out.write(' <indexterm zone="gdbus-interface-%s.top_of_page"><primary sortas="%s">%s</primary></indexterm>\n'%(utils.dots_to_hyphens(i.name), i.name_without_prefix, i.name)) + self.out.write(' </refmeta>'%()) + + self.out.write(' <refnamediv>'%()) + self.out.write(' <refname>%s</refname>'%(i.name)) + self.out.write(' <refpurpose>%s</refpurpose>'%(i.doc_string_brief)) + self.out.write(' </refnamediv>'%()) + + if len(i.methods) > 0: + self.print_synopsis_methods(i) + if len(i.signals) > 0: + self.print_synopsis_signals(i) + if len(i.properties) > 0: + self.print_synopsis_properties(i) + + self.out.write('<refsect1 role="desc" id="gdbus-interface-%s">\n'%(utils.dots_to_hyphens(i.name))) + self.out.write(' <title role="desc.title">Description</title>\n'%()) + self.out.write(' %s\n'%(self.expand_paras(i.doc_string, True))) + if len(i.since) > 0: + self.out.write(' <para role="since">Since %s</para>\n'%(i.since)) + if i.deprecated: + self.out.write('<warning><para>The %s interface is deprecated.</para></warning>'%(i.name)) + self.out.write('</refsect1>\n'%()) + + if len(i.methods) > 0: + self.out.write('<refsect1 role="details" id="gdbus-methods-%s">\n'%(i.name)) + self.out.write(' <title role="details.title">Method Details</title>\n'%()) + for m in i.methods: + self.print_method(i, m) + self.out.write('</refsect1>\n'%()) + + if len(i.signals) > 0: + self.out.write('<refsect1 role="details" id="gdbus-signals-%s">\n'%(i.name)) + self.out.write(' <title role="details.title">Signal Details</title>\n'%()) + for s in i.signals: + self.print_signal(i, s) + self.out.write('</refsect1>\n'%()) + + if len(i.properties) > 0: + self.out.write('<refsect1 role="details" id="gdbus-properties-%s">\n'%(i.name)) + self.out.write(' <title role="details.title">Property Details</title>\n'%()) + for s in i.properties: + self.print_property(i, s) + self.out.write('</refsect1>\n'%()) + + self.out.write('</refentry>\n') + self.out.write('\n') + diff --git a/Release/share/glib-2.0/codegen/codegen_main.py b/Release/share/glib-2.0/codegen/codegen_main.py new file mode 100644 index 0000000..cc28c81 --- /dev/null +++ b/Release/share/glib-2.0/codegen/codegen_main.py @@ -0,0 +1,204 @@ +# -*- Mode: Python -*- + +# GDBus - GLib D-Bus Library +# +# Copyright (C) 2008-2011 Red Hat, Inc. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General +# Public License along with this library; if not, see <http://www.gnu.org/licenses/>. +# +# Author: David Zeuthen <davidz@redhat.com> + +import sys +import optparse + +from . import config +from . import utils +from . import dbustypes +from . import parser +from . import codegen +from . import codegen_docbook + +def find_arg(arg_list, arg_name): + for a in arg_list: + if a.name == arg_name: + return a + return None + +def find_method(iface, method): + for m in iface.methods: + if m.name == method: + return m + return None + +def find_signal(iface, signal): + for m in iface.signals: + if m.name == signal: + return m + return None + +def find_prop(iface, prop): + for m in iface.properties: + if m.name == prop: + return m + return None + +def apply_annotation(iface_list, iface, method, signal, prop, arg, key, value): + iface_obj = None + for i in iface_list: + if i.name == iface: + iface_obj = i + break + + if iface_obj == None: + raise RuntimeError('No interface %s'%iface) + + target_obj = None + + if method: + method_obj = find_method(iface_obj, method) + if method_obj == None: + raise RuntimeError('No method %s on interface %s'%(method, iface)) + if arg: + arg_obj = find_arg(method_obj.in_args, arg) + if (arg_obj == None): + arg_obj = find_arg(method_obj.out_args, arg) + if (arg_obj == None): + raise RuntimeError('No arg %s on method %s on interface %s'%(arg, method, iface)) + target_obj = arg_obj + else: + target_obj = method_obj + elif signal: + signal_obj = find_signal(iface_obj, signal) + if signal_obj == None: + raise RuntimeError('No signal %s on interface %s'%(signal, iface)) + if arg: + arg_obj = find_arg(signal_obj.args, arg) + if (arg_obj == None): + raise RuntimeError('No arg %s on signal %s on interface %s'%(arg, signal, iface)) + target_obj = arg_obj + else: + target_obj = signal_obj + elif prop: + prop_obj = find_prop(iface_obj, prop) + if prop_obj == None: + raise RuntimeError('No property %s on interface %s'%(prop, iface)) + target_obj = prop_obj + else: + target_obj = iface_obj + target_obj.annotations.insert(0, dbustypes.Annotation(key, value)) + + +def apply_annotations(iface_list, annotation_list): + # apply annotations given on the command line + for (what, key, value) in annotation_list: + pos = what.find('::') + if pos != -1: + # signal + iface = what[0:pos]; + signal = what[pos + 2:] + pos = signal.find('[') + if pos != -1: + arg = signal[pos + 1:] + signal = signal[0:pos] + pos = arg.find(']') + arg = arg[0:pos] + apply_annotation(iface_list, iface, None, signal, None, arg, key, value) + else: + apply_annotation(iface_list, iface, None, signal, None, None, key, value) + else: + pos = what.find(':') + if pos != -1: + # property + iface = what[0:pos]; + prop = what[pos + 1:] + apply_annotation(iface_list, iface, None, None, prop, None, key, value) + else: + pos = what.find('()') + if pos != -1: + # method + combined = what[0:pos] + pos = combined.rfind('.') + iface = combined[0:pos] + method = combined[pos + 1:] + pos = what.find('[') + if pos != -1: + arg = what[pos + 1:] + pos = arg.find(']') + arg = arg[0:pos] + apply_annotation(iface_list, iface, method, None, None, arg, key, value) + else: + apply_annotation(iface_list, iface, method, None, None, None, key, value) + else: + # must be an interface + iface = what + apply_annotation(iface_list, iface, None, None, None, None, key, value) + +def codegen_main(): + arg_parser = optparse.OptionParser('%prog [options]') + arg_parser.add_option('', '--xml-files', metavar='FILE', action='append', + help='D-Bus introspection XML file') + arg_parser.add_option('', '--interface-prefix', metavar='PREFIX', default='', + help='String to strip from D-Bus interface names for code and docs') + arg_parser.add_option('', '--c-namespace', metavar='NAMESPACE', default='', + help='The namespace to use for generated C code') + arg_parser.add_option('', '--c-generate-object-manager', action='store_true', + help='Generate a GDBusObjectManagerClient subclass when generating C code') + arg_parser.add_option('', '--generate-c-code', metavar='OUTFILES', + help='Generate C code in OUTFILES.[ch]') + arg_parser.add_option('', '--c-generate-autocleanup', type='choice', choices=['none', 'objects', 'all'], default='objects', + help='Generate autocleanup support') + arg_parser.add_option('', '--generate-docbook', metavar='OUTFILES', + help='Generate Docbook in OUTFILES-org.Project.IFace.xml') + arg_parser.add_option('', '--annotate', nargs=3, action='append', metavar='WHAT KEY VALUE', + help='Add annotation (may be used several times)') + (opts, args) = arg_parser.parse_args(); + + all_ifaces = [] + for fname in args: + f = open(fname, 'rb') + xml_data = f.read() + f.close() + parsed_ifaces = parser.parse_dbus_xml(xml_data) + all_ifaces.extend(parsed_ifaces) + + if opts.annotate != None: + apply_annotations(all_ifaces, opts.annotate) + + for i in all_ifaces: + i.post_process(opts.interface_prefix, opts.c_namespace) + + docbook = opts.generate_docbook + docbook_gen = codegen_docbook.DocbookCodeGenerator(all_ifaces, docbook); + if docbook: + ret = docbook_gen.generate() + + c_code = opts.generate_c_code + if c_code: + h = open(c_code + '.h', 'w') + c = open(c_code + '.c', 'w') + gen = codegen.CodeGenerator(all_ifaces, + opts.c_namespace, + opts.interface_prefix, + opts.c_generate_object_manager, + opts.c_generate_autocleanup, + docbook_gen, + h, c); + ret = gen.generate() + h.close() + c.close() + + sys.exit(0) + +if __name__ == "__main__": + codegen_main() diff --git a/Release/share/glib-2.0/codegen/config.py b/Release/share/glib-2.0/codegen/config.py new file mode 100644 index 0000000..983eda6 --- /dev/null +++ b/Release/share/glib-2.0/codegen/config.py @@ -0,0 +1,25 @@ +# -*- Mode: Python -*- + +# GDBus - GLib D-Bus Library +# +# Copyright (C) 2008-2011 Red Hat, Inc. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General +# Public License along with this library; if not, see <http://www.gnu.org/licenses/>. +# +# Author: David Zeuthen <davidz@redhat.com> + +DATADIR = "${prefix}/share" +DATADIR = DATADIR.replace( + "${prefix}", "/mingw64") +VERSION = "2.50.1" diff --git a/Release/share/glib-2.0/codegen/dbustypes.py b/Release/share/glib-2.0/codegen/dbustypes.py new file mode 100644 index 0000000..8787c92 --- /dev/null +++ b/Release/share/glib-2.0/codegen/dbustypes.py @@ -0,0 +1,424 @@ +# -*- Mode: Python -*- + +# GDBus - GLib D-Bus Library +# +# Copyright (C) 2008-2011 Red Hat, Inc. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General +# Public License along with this library; if not, see <http://www.gnu.org/licenses/>. +# +# Author: David Zeuthen <davidz@redhat.com> + +from . import utils + +class Annotation: + def __init__(self, key, value): + self.key = key + self.value = value + self.annotations = [] + +class Arg: + def __init__(self, name, signature): + self.name = name + self.signature = signature + self.annotations = [] + self.doc_string = '' + self.since = '' + + def post_process(self, interface_prefix, cns, cns_upper, cns_lower, arg_number): + if len(self.doc_string) == 0: + self.doc_string = utils.lookup_docs(self.annotations) + if len(self.since) == 0: + self.since = utils.lookup_since(self.annotations) + + if self.name == None: + self.name = 'unnamed_arg%d'%arg_number + # default to GVariant + self.ctype_in_g = 'GVariant *' + self.ctype_in = 'GVariant *' + self.ctype_in_dup = 'GVariant *' + self.ctype_out = 'GVariant **' + self.gtype = 'G_TYPE_VARIANT' + self.free_func = 'g_variant_unref' + self.format_in = '@' + self.signature + self.format_out = '@' + self.signature + self.gvariant_get = 'XXX' + self.gvalue_get = 'g_value_get_variant' + if not utils.lookup_annotation(self.annotations, 'org.gtk.GDBus.C.ForceGVariant'): + if self.signature == 'b': + self.ctype_in_g = 'gboolean ' + self.ctype_in = 'gboolean ' + self.ctype_out = 'gboolean *' + self.gtype = 'G_TYPE_BOOLEAN' + self.free_func = None + self.format_in = 'b' + self.format_out = 'b' + self.gvariant_get = 'g_variant_get_boolean' + self.gvalue_get = 'g_value_get_boolean' + elif self.signature == 'y': + self.ctype_in_g = 'guchar ' + self.ctype_in = 'guchar ' + self.ctype_out = 'guchar *' + self.gtype = 'G_TYPE_UCHAR' + self.free_func = None + self.format_in = 'y' + self.format_out = 'y' + self.gvariant_get = 'g_variant_get_byte' + self.gvalue_get = 'g_value_get_uchar' + elif self.signature == 'n': + self.ctype_in_g = 'gint ' + self.ctype_in = 'gint16 ' + self.ctype_out = 'gint16 *' + self.gtype = 'G_TYPE_INT' + self.free_func = None + self.format_in = 'n' + self.format_out = 'n' + self.gvariant_get = 'g_variant_get_int16' + self.gvalue_get = 'g_value_get_int' + elif self.signature == 'q': + self.ctype_in_g = 'guint ' + self.ctype_in = 'guint16 ' + self.ctype_out = 'guint16 *' + self.gtype = 'G_TYPE_UINT' + self.free_func = None + self.format_in = 'q' + self.format_out = 'q' + self.gvariant_get = 'g_variant_get_uint16' + self.gvalue_get = 'g_value_get_uint' + elif self.signature == 'i': + self.ctype_in_g = 'gint ' + self.ctype_in = 'gint ' + self.ctype_out = 'gint *' + self.gtype = 'G_TYPE_INT' + self.free_func = None + self.format_in = 'i' + self.format_out = 'i' + self.gvariant_get = 'g_variant_get_int32' + self.gvalue_get = 'g_value_get_int' + elif self.signature == 'u': + self.ctype_in_g = 'guint ' + self.ctype_in = 'guint ' + self.ctype_out = 'guint *' + self.gtype = 'G_TYPE_UINT' + self.free_func = None + self.format_in = 'u' + self.format_out = 'u' + self.gvariant_get = 'g_variant_get_uint32' + self.gvalue_get = 'g_value_get_uint' + elif self.signature == 'x': + self.ctype_in_g = 'gint64 ' + self.ctype_in = 'gint64 ' + self.ctype_out = 'gint64 *' + self.gtype = 'G_TYPE_INT64' + self.free_func = None + self.format_in = 'x' + self.format_out = 'x' + self.gvariant_get = 'g_variant_get_int64' + self.gvalue_get = 'g_value_get_int64' + elif self.signature == 't': + self.ctype_in_g = 'guint64 ' + self.ctype_in = 'guint64 ' + self.ctype_out = 'guint64 *' + self.gtype = 'G_TYPE_UINT64' + self.free_func = None + self.format_in = 't' + self.format_out = 't' + self.gvariant_get = 'g_variant_get_uint64' + self.gvalue_get = 'g_value_get_uint64' + elif self.signature == 'd': + self.ctype_in_g = 'gdouble ' + self.ctype_in = 'gdouble ' + self.ctype_out = 'gdouble *' + self.gtype = 'G_TYPE_DOUBLE' + self.free_func = None + self.format_in = 'd' + self.format_out = 'd' + self.gvariant_get = 'g_variant_get_double' + self.gvalue_get = 'g_value_get_double' + elif self.signature == 's': + self.ctype_in_g = 'const gchar *' + self.ctype_in = 'const gchar *' + self.ctype_in_dup = 'gchar *' + self.ctype_out = 'gchar **' + self.gtype = 'G_TYPE_STRING' + self.free_func = 'g_free' + self.format_in = 's' + self.format_out = 's' + self.gvariant_get = 'g_variant_get_string' + self.gvalue_get = 'g_value_get_string' + elif self.signature == 'o': + self.ctype_in_g = 'const gchar *' + self.ctype_in = 'const gchar *' + self.ctype_in_dup = 'gchar *' + self.ctype_out = 'gchar **' + self.gtype = 'G_TYPE_STRING' + self.free_func = 'g_free' + self.format_in = 'o' + self.format_out = 'o' + self.gvariant_get = 'g_variant_get_string' + self.gvalue_get = 'g_value_get_string' + elif self.signature == 'g': + self.ctype_in_g = 'const gchar *' + self.ctype_in = 'const gchar *' + self.ctype_in_dup = 'gchar *' + self.ctype_out = 'gchar **' + self.gtype = 'G_TYPE_STRING' + self.free_func = 'g_free' + self.format_in = 'g' + self.format_out = 'g' + self.gvariant_get = 'g_variant_get_string' + self.gvalue_get = 'g_value_get_string' + elif self.signature == 'ay': + self.ctype_in_g = 'const gchar *' + self.ctype_in = 'const gchar *' + self.ctype_in_dup = 'gchar *' + self.ctype_out = 'gchar **' + self.gtype = 'G_TYPE_STRING' + self.free_func = 'g_free' + self.format_in = '^ay' + self.format_out = '^ay' + self.gvariant_get = 'g_variant_get_bytestring' + self.gvalue_get = 'g_value_get_string' + elif self.signature == 'as': + self.ctype_in_g = 'const gchar *const *' + self.ctype_in = 'const gchar *const *' + self.ctype_in_dup = 'gchar **' + self.ctype_out = 'gchar ***' + self.gtype = 'G_TYPE_STRV' + self.free_func = 'g_strfreev' + self.format_in = '^as' + self.format_out = '^as' + self.gvariant_get = 'g_variant_get_strv' + self.gvalue_get = 'g_value_get_boxed' + elif self.signature == 'ao': + self.ctype_in_g = 'const gchar *const *' + self.ctype_in = 'const gchar *const *' + self.ctype_in_dup = 'gchar **' + self.ctype_out = 'gchar ***' + self.gtype = 'G_TYPE_STRV' + self.free_func = 'g_strfreev' + self.format_in = '^ao' + self.format_out = '^ao' + self.gvariant_get = 'g_variant_get_objv' + self.gvalue_get = 'g_value_get_boxed' + elif self.signature == 'aay': + self.ctype_in_g = 'const gchar *const *' + self.ctype_in = 'const gchar *const *' + self.ctype_in_dup = 'gchar **' + self.ctype_out = 'gchar ***' + self.gtype = 'G_TYPE_STRV' + self.free_func = 'g_strfreev' + self.format_in = '^aay' + self.format_out = '^aay' + self.gvariant_get = 'g_variant_get_bytestring_array' + self.gvalue_get = 'g_value_get_boxed' + +class Method: + def __init__(self, name): + self.name = name + self.in_args = [] + self.out_args = [] + self.annotations = [] + self.doc_string = '' + self.since = '' + self.deprecated = False + + def post_process(self, interface_prefix, cns, cns_upper, cns_lower, containing_iface): + if len(self.doc_string) == 0: + self.doc_string = utils.lookup_docs(self.annotations) + if len(self.since) == 0: + self.since = utils.lookup_since(self.annotations) + if len(self.since) == 0: + self.since = containing_iface.since + + name = self.name + overridden_name = utils.lookup_annotation(self.annotations, 'org.gtk.GDBus.C.Name') + if utils.is_ugly_case(overridden_name): + self.name_lower = overridden_name.lower() + else: + if overridden_name: + name = overridden_name + self.name_lower = utils.camel_case_to_uscore(name).lower().replace('-', '_') + self.name_hyphen = self.name_lower.replace('_', '-') + + arg_count = 0 + for a in self.in_args: + a.post_process(interface_prefix, cns, cns_upper, cns_lower, arg_count) + arg_count += 1 + + for a in self.out_args: + a.post_process(interface_prefix, cns, cns_upper, cns_lower, arg_count) + arg_count += 1 + + if utils.lookup_annotation(self.annotations, 'org.freedesktop.DBus.Deprecated') == 'true': + self.deprecated = True + +class Signal: + def __init__(self, name): + self.name = name + self.args = [] + self.annotations = [] + self.doc_string = '' + self.since = '' + self.deprecated = False + + def post_process(self, interface_prefix, cns, cns_upper, cns_lower, containing_iface): + if len(self.doc_string) == 0: + self.doc_string = utils.lookup_docs(self.annotations) + if len(self.since) == 0: + self.since = utils.lookup_since(self.annotations) + if len(self.since) == 0: + self.since = containing_iface.since + + name = self.name + overridden_name = utils.lookup_annotation(self.annotations, 'org.gtk.GDBus.C.Name') + if utils.is_ugly_case(overridden_name): + self.name_lower = overridden_name.lower() + else: + if overridden_name: + name = overridden_name + self.name_lower = utils.camel_case_to_uscore(name).lower().replace('-', '_') + self.name_hyphen = self.name_lower.replace('_', '-') + + arg_count = 0 + for a in self.args: + a.post_process(interface_prefix, cns, cns_upper, cns_lower, arg_count) + arg_count += 1 + + if utils.lookup_annotation(self.annotations, 'org.freedesktop.DBus.Deprecated') == 'true': + self.deprecated = True + +class Property: + def __init__(self, name, signature, access): + self.name = name + self.signature = signature + self.access = access + self.annotations = [] + self.arg = Arg('value', self.signature) + self.arg.annotations = self.annotations + self.readable = False + self.writable = False + if self.access == 'readwrite': + self.readable = True + self.writable = True + elif self.access == 'read': + self.readable = True + elif self.access == 'write': + self.writable = True + else: + raise RuntimeError('Invalid access type %s'%self.access) + self.doc_string = '' + self.since = '' + self.deprecated = False + + def post_process(self, interface_prefix, cns, cns_upper, cns_lower, containing_iface): + if len(self.doc_string) == 0: + self.doc_string = utils.lookup_docs(self.annotations) + if len(self.since) == 0: + self.since = utils.lookup_since(self.annotations) + if len(self.since) == 0: + self.since = containing_iface.since + + name = self.name + overridden_name = utils.lookup_annotation(self.annotations, 'org.gtk.GDBus.C.Name') + if utils.is_ugly_case(overridden_name): + self.name_lower = overridden_name.lower() + else: + if overridden_name: + name = overridden_name + self.name_lower = utils.camel_case_to_uscore(name).lower().replace('-', '_') + self.name_hyphen = self.name_lower.replace('_', '-') + # don't clash with the GType getter, e.g.: GType foo_bar_get_type (void); G_GNUC_CONST + if self.name_lower == 'type': + self.name_lower = 'type_' + + # recalculate arg + self.arg.annotations = self.annotations + self.arg.post_process(interface_prefix, cns, cns_upper, cns_lower, 0) + + if utils.lookup_annotation(self.annotations, 'org.freedesktop.DBus.Deprecated') == 'true': + self.deprecated = True + +class Interface: + def __init__(self, name): + self.name = name + self.methods = [] + self.signals = [] + self.properties = [] + self.annotations = [] + self.doc_string = '' + self.doc_string_brief = '' + self.since = '' + self.deprecated = False + + def post_process(self, interface_prefix, c_namespace): + if len(self.doc_string) == 0: + self.doc_string = utils.lookup_docs(self.annotations) + if len(self.doc_string_brief) == 0: + self.doc_string_brief = utils.lookup_brief_docs(self.annotations) + if len(self.since) == 0: + self.since = utils.lookup_since(self.annotations) + + if len(c_namespace) > 0: + if utils.is_ugly_case(c_namespace): + cns = c_namespace.replace('_', '') + cns_upper = c_namespace.upper() + '_' + cns_lower = c_namespace.lower() + '_' + else: + cns = c_namespace + cns_upper = utils.camel_case_to_uscore(c_namespace).upper() + '_' + cns_lower = utils.camel_case_to_uscore(c_namespace).lower() + '_' + else: + cns = '' + cns_upper = '' + cns_lower = '' + + overridden_name = utils.lookup_annotation(self.annotations, 'org.gtk.GDBus.C.Name') + if utils.is_ugly_case(overridden_name): + name = overridden_name.replace('_', '') + name_with_ns = cns + name + self.name_without_prefix = name + self.camel_name = name_with_ns + self.ns_upper = cns_upper + self.name_lower = cns_lower + overridden_name.lower() + self.name_upper = overridden_name.upper() + + #raise RuntimeError('handle Ugly_Case ', overridden_name) + else: + if overridden_name: + name = overridden_name + else: + name = self.name + if name.startswith(interface_prefix): + name = name[len(interface_prefix):] + self.name_without_prefix = name + name = utils.strip_dots(name) + name_with_ns = utils.strip_dots(cns + '.' + name) + self.camel_name = name_with_ns + self.ns_upper = cns_upper + self.name_lower = cns_lower + utils.camel_case_to_uscore(name) + self.name_upper = utils.camel_case_to_uscore(name).upper() + + self.name_hyphen = self.name_upper.lower().replace('_', '-') + + if utils.lookup_annotation(self.annotations, 'org.freedesktop.DBus.Deprecated') == 'true': + self.deprecated = True + + for m in self.methods: + m.post_process(interface_prefix, cns, cns_upper, cns_lower, self) + + for s in self.signals: + s.post_process(interface_prefix, cns, cns_upper, cns_lower, self) + + for p in self.properties: + p.post_process(interface_prefix, cns, cns_upper, cns_lower, self) diff --git a/Release/share/glib-2.0/codegen/parser.py b/Release/share/glib-2.0/codegen/parser.py new file mode 100644 index 0000000..90cebd9 --- /dev/null +++ b/Release/share/glib-2.0/codegen/parser.py @@ -0,0 +1,292 @@ +# -*- Mode: Python -*- + +# GDBus - GLib D-Bus Library +# +# Copyright (C) 2008-2011 Red Hat, Inc. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General +# Public License along with this library; if not, see <http://www.gnu.org/licenses/>. +# +# Author: David Zeuthen <davidz@redhat.com> + +import sys +import xml.parsers.expat + +from . import dbustypes + +class DBusXMLParser: + STATE_TOP = 'top' + STATE_NODE = 'node' + STATE_INTERFACE = 'interface' + STATE_METHOD = 'method' + STATE_SIGNAL = 'signal' + STATE_PROPERTY = 'property' + STATE_ARG = 'arg' + STATE_ANNOTATION = 'annotation' + STATE_IGNORED = 'ignored' + + def __init__(self, xml_data): + self._parser = xml.parsers.expat.ParserCreate() + self._parser.CommentHandler = self.handle_comment + self._parser.CharacterDataHandler = self.handle_char_data + self._parser.StartElementHandler = self.handle_start_element + self._parser.EndElementHandler = self.handle_end_element + + self.parsed_interfaces = [] + self._cur_object = None + + self.state = DBusXMLParser.STATE_TOP + self.state_stack = [] + self._cur_object = None + self._cur_object_stack = [] + + self.doc_comment_last_symbol = '' + + self._parser.Parse(xml_data) + + COMMENT_STATE_BEGIN = 'begin' + COMMENT_STATE_PARAMS = 'params' + COMMENT_STATE_BODY = 'body' + COMMENT_STATE_SKIP = 'skip' + def handle_comment(self, data): + comment_state = DBusXMLParser.COMMENT_STATE_BEGIN; + lines = data.split('\n') + symbol = '' + body = '' + in_para = False + params = {} + for line in lines: + orig_line = line + line = line.lstrip() + if comment_state == DBusXMLParser.COMMENT_STATE_BEGIN: + if len(line) > 0: + colon_index = line.find(': ') + if colon_index == -1: + if line.endswith(':'): + symbol = line[0:len(line)-1] + comment_state = DBusXMLParser.COMMENT_STATE_PARAMS + else: + comment_state = DBusXMLParser.COMMENT_STATE_SKIP + else: + symbol = line[0:colon_index] + rest_of_line = line[colon_index+2:].strip() + if len(rest_of_line) > 0: + body += '<para>' + rest_of_line + '</para>' + comment_state = DBusXMLParser.COMMENT_STATE_PARAMS + elif comment_state == DBusXMLParser.COMMENT_STATE_PARAMS: + if line.startswith('@'): + colon_index = line.find(': ') + if colon_index == -1: + comment_state = DBusXMLParser.COMMENT_STATE_BODY + if not in_para: + body += '<para>' + in_para = True + body += orig_line + '\n' + else: + param = line[1:colon_index] + docs = line[colon_index + 2:] + params[param] = docs + else: + comment_state = DBusXMLParser.COMMENT_STATE_BODY + if len(line) > 0: + if not in_para: + body += '<para>' + in_para = True + body += orig_line + '\n' + elif comment_state == DBusXMLParser.COMMENT_STATE_BODY: + if len(line) > 0: + if not in_para: + body += '<para>' + in_para = True + body += orig_line + '\n' + else: + if in_para: + body += '</para>' + in_para = False + if in_para: + body += '</para>' + + if symbol != '': + self.doc_comment_last_symbol = symbol + self.doc_comment_params = params + self.doc_comment_body = body + + def handle_char_data(self, data): + #print 'char_data=%s'%data + pass + + def handle_start_element(self, name, attrs): + old_state = self.state + old_cur_object = self._cur_object + if self.state == DBusXMLParser.STATE_IGNORED: + self.state = DBusXMLParser.STATE_IGNORED + elif self.state == DBusXMLParser.STATE_TOP: + if name == DBusXMLParser.STATE_NODE: + self.state = DBusXMLParser.STATE_NODE + else: + self.state = DBusXMLParser.STATE_IGNORED + elif self.state == DBusXMLParser.STATE_NODE: + if name == DBusXMLParser.STATE_INTERFACE: + self.state = DBusXMLParser.STATE_INTERFACE + iface = dbustypes.Interface(attrs['name']) + self._cur_object = iface + self.parsed_interfaces.append(iface) + elif name == DBusXMLParser.STATE_ANNOTATION: + self.state = DBusXMLParser.STATE_ANNOTATION + anno = dbustypes.Annotation(attrs['name'], attrs['value']) + self._cur_object.annotations.append(anno) + self._cur_object = anno + else: + self.state = DBusXMLParser.STATE_IGNORED + + # assign docs, if any + if 'name' in attrs and self.doc_comment_last_symbol == attrs['name']: + self._cur_object.doc_string = self.doc_comment_body + if 'short_description' in self.doc_comment_params: + short_description = self.doc_comment_params['short_description'] + self._cur_object.doc_string_brief = short_description + if 'since' in self.doc_comment_params: + self._cur_object.since = \ + self.doc_comment_params['since'].strip() + + elif self.state == DBusXMLParser.STATE_INTERFACE: + if name == DBusXMLParser.STATE_METHOD: + self.state = DBusXMLParser.STATE_METHOD + method = dbustypes.Method(attrs['name']) + self._cur_object.methods.append(method) + self._cur_object = method + elif name == DBusXMLParser.STATE_SIGNAL: + self.state = DBusXMLParser.STATE_SIGNAL + signal = dbustypes.Signal(attrs['name']) + self._cur_object.signals.append(signal) + self._cur_object = signal + elif name == DBusXMLParser.STATE_PROPERTY: + self.state = DBusXMLParser.STATE_PROPERTY + prop = dbustypes.Property(attrs['name'], attrs['type'], attrs['access']) + self._cur_object.properties.append(prop) + self._cur_object = prop + elif name == DBusXMLParser.STATE_ANNOTATION: + self.state = DBusXMLParser.STATE_ANNOTATION + anno = dbustypes.Annotation(attrs['name'], attrs['value']) + self._cur_object.annotations.append(anno) + self._cur_object = anno + else: + self.state = DBusXMLParser.STATE_IGNORED + + # assign docs, if any + if 'name' in attrs and self.doc_comment_last_symbol == attrs['name']: + self._cur_object.doc_string = self.doc_comment_body + if 'since' in self.doc_comment_params: + self._cur_object.since = \ + self.doc_comment_params['since'].strip() + + elif self.state == DBusXMLParser.STATE_METHOD: + if name == DBusXMLParser.STATE_ARG: + self.state = DBusXMLParser.STATE_ARG + arg_name = None + if 'name' in attrs: + arg_name = attrs['name'] + arg = dbustypes.Arg(arg_name, attrs['type']) + direction = attrs.get('direction', 'in') + if direction == 'in': + self._cur_object.in_args.append(arg) + elif direction == 'out': + self._cur_object.out_args.append(arg) + else: + raise RuntimeError('Invalid direction "%s"'%(direction)) + self._cur_object = arg + elif name == DBusXMLParser.STATE_ANNOTATION: + self.state = DBusXMLParser.STATE_ANNOTATION + anno = dbustypes.Annotation(attrs['name'], attrs['value']) + self._cur_object.annotations.append(anno) + self._cur_object = anno + else: + self.state = DBusXMLParser.STATE_IGNORED + + # assign docs, if any + if self.doc_comment_last_symbol == old_cur_object.name: + if 'name' in attrs and attrs['name'] in self.doc_comment_params: + doc_string = self.doc_comment_params[attrs['name']] + if doc_string != None: + self._cur_object.doc_string = doc_string + if 'since' in self.doc_comment_params: + self._cur_object.since = \ + self.doc_comment_params['since'].strip() + + elif self.state == DBusXMLParser.STATE_SIGNAL: + if name == DBusXMLParser.STATE_ARG: + self.state = DBusXMLParser.STATE_ARG + arg_name = None + if 'name' in attrs: + arg_name = attrs['name'] + arg = dbustypes.Arg(arg_name, attrs['type']) + self._cur_object.args.append(arg) + self._cur_object = arg + elif name == DBusXMLParser.STATE_ANNOTATION: + self.state = DBusXMLParser.STATE_ANNOTATION + anno = dbustypes.Annotation(attrs['name'], attrs['value']) + self._cur_object.annotations.append(anno) + self._cur_object = anno + else: + self.state = DBusXMLParser.STATE_IGNORED + + # assign docs, if any + if self.doc_comment_last_symbol == old_cur_object.name: + if 'name' in attrs and attrs['name'] in self.doc_comment_params: + doc_string = self.doc_comment_params[attrs['name']] + if doc_string != None: + self._cur_object.doc_string = doc_string + if 'since' in self.doc_comment_params: + self._cur_object.since = \ + self.doc_comment_params['since'].strip() + + elif self.state == DBusXMLParser.STATE_PROPERTY: + if name == DBusXMLParser.STATE_ANNOTATION: + self.state = DBusXMLParser.STATE_ANNOTATION + anno = dbustypes.Annotation(attrs['name'], attrs['value']) + self._cur_object.annotations.append(anno) + self._cur_object = anno + else: + self.state = DBusXMLParser.STATE_IGNORED + + elif self.state == DBusXMLParser.STATE_ARG: + if name == DBusXMLParser.STATE_ANNOTATION: + self.state = DBusXMLParser.STATE_ANNOTATION + anno = dbustypes.Annotation(attrs['name'], attrs['value']) + self._cur_object.annotations.append(anno) + self._cur_object = anno + else: + self.state = DBusXMLParser.STATE_IGNORED + + elif self.state == DBusXMLParser.STATE_ANNOTATION: + if name == DBusXMLParser.STATE_ANNOTATION: + self.state = DBusXMLParser.STATE_ANNOTATION + anno = dbustypes.Annotation(attrs['name'], attrs['value']) + self._cur_object.annotations.append(anno) + self._cur_object = anno + else: + self.state = DBusXMLParser.STATE_IGNORED + + else: + raise RuntimeError('Unhandled state "%s" while entering element with name "%s"'%(self.state, name)) + + self.state_stack.append(old_state) + self._cur_object_stack.append(old_cur_object) + + def handle_end_element(self, name): + self.state = self.state_stack.pop() + self._cur_object = self._cur_object_stack.pop() + +def parse_dbus_xml(xml_data): + parser = DBusXMLParser(xml_data) + return parser.parsed_interfaces diff --git a/Release/share/glib-2.0/codegen/utils.py b/Release/share/glib-2.0/codegen/utils.py new file mode 100644 index 0000000..2c01493 --- /dev/null +++ b/Release/share/glib-2.0/codegen/utils.py @@ -0,0 +1,108 @@ +# -*- Mode: Python -*- + +# GDBus - GLib D-Bus Library +# +# Copyright (C) 2008-2011 Red Hat, Inc. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General +# Public License along with this library; if not, see <http://www.gnu.org/licenses/>. +# +# Author: David Zeuthen <davidz@redhat.com> + +import distutils.version + +def strip_dots(s): + ret = '' + force_upper = False + for c in s: + if c == '.': + force_upper = True + else: + if force_upper: + ret += c.upper() + force_upper = False + else: + ret += c + return ret + +def dots_to_hyphens(s): + return s.replace('.', '-') + +def camel_case_to_uscore(s): + ret = '' + insert_uscore = False + prev_was_lower = False + initial = True; + for c in s: + # Keep initial underscores in camel case + if initial and c == '_': + ret += '_' + continue; + initial = False + + if c.isupper(): + if prev_was_lower: + insert_uscore = True + prev_was_lower = False + else: + prev_was_lower = True + if insert_uscore: + ret += '_' + ret += c.lower() + insert_uscore = False + return ret + +def is_ugly_case(s): + if s and s.find('_') > 0: + return True + return False + +def lookup_annotation(annotations, key): + if annotations: + for a in annotations: + if a.key == key: + return a.value + return None + +def lookup_docs(annotations): + s = lookup_annotation(annotations, 'org.gtk.GDBus.DocString') + if s == None: + return '' + else: + return s + +def lookup_since(annotations): + s = lookup_annotation(annotations, 'org.gtk.GDBus.Since') + if s == None: + return '' + else: + return s + +def lookup_brief_docs(annotations): + s = lookup_annotation(annotations, 'org.gtk.GDBus.DocString.Short') + if s == None: + return '' + else: + return s + +def version_cmp_key(key): + # If the 'since' version is 'UNRELEASED', compare higher than anything else + # If it is empty put a 0 in its place as this will + # allow LooseVersion to work and will always compare lower. + if key[0] == 'UNRELEASED': + v = '9999' + elif key[0]: + v = str(key[0]) + else: + v = '0' + return (distutils.version.LooseVersion(v), key[1]) diff --git a/Release/share/glib-2.0/gdb/glib_gdb.py b/Release/share/glib-2.0/gdb/glib_gdb.py new file mode 100644 index 0000000..38f101a --- /dev/null +++ b/Release/share/glib-2.0/gdb/glib_gdb.py @@ -0,0 +1,261 @@ +import gdb +import sys + +if sys.version_info[0] >= 3: + long = int + +# This is not quite right, as local vars may override symname +def read_global_var (symname): + return gdb.selected_frame().read_var(symname) + +def g_quark_to_string (quark): + if quark == None: + return None + quark = long(quark) + if quark == 0: + return None + try: + val = read_global_var ("quarks") + max_q = long(read_global_var ("quark_seq_id")) + except: + try: + val = read_global_var ("g_quarks") + max_q = long(read_global_var ("g_quark_seq_id")) + except: + return None; + if quark < max_q: + return val[quark].string() + return None + +# We override the node printers too, so that node->next is not expanded +class GListNodePrinter: + "Prints a GList node" + + def __init__ (self, val): + self.val = val + + def to_string (self): + return "{data=%s, next=0x%x, prev=0x%x}" % (str(self.val["data"]), long(self.val["next"]), long(self.val["prev"])) + +class GSListNodePrinter: + "Prints a GSList node" + + def __init__ (self, val): + self.val = val + + def to_string (self): + return "{data=%s, next=0x%x}" % (str(self.val["data"]), long(self.val["next"])) + +class GListPrinter: + "Prints a GList" + + class _iterator: + def __init__(self, head, listtype): + self.link = head + self.listtype = listtype + self.count = 0 + + def __iter__(self): + return self + + def next(self): + if self.link == 0: + raise StopIteration + data = self.link['data'] + self.link = self.link['next'] + count = self.count + self.count = self.count + 1 + return ('[%d]' % count, data) + + __next__ = next + + def __init__ (self, val, listtype): + self.val = val + self.listtype = listtype + + def children(self): + return self._iterator(self.val, self.listtype) + + def to_string (self): + return "0x%x" % (long(self.val)) + + def display_hint (self): + return "array" + +class GHashPrinter: + "Prints a GHashTable" + + class _iterator: + def __init__(self, ht, keys_are_strings): + self.ht = ht + if ht != 0: + self.keys = ht["keys"] + self.values = ht["values"] + self.hashes = ht["hashes"] + self.size = ht["size"] + self.pos = 0 + self.keys_are_strings = keys_are_strings + self.value = None + + def __iter__(self): + return self + + def next(self): + if self.ht == 0: + raise StopIteration + if self.value != None: + v = self.value + self.value = None + return v + while long(self.pos) < long(self.size): + self.pos = self.pos + 1 + if long (self.hashes[self.pos]) >= 2: + key = self.keys[self.pos] + val = self.values[self.pos] + + if self.keys_are_strings: + key = key.cast (gdb.lookup_type("char").pointer()) + + # Queue value for next result + self.value = ('[%dv]'% (self.pos), val) + + # Return key + return ('[%dk]'% (self.pos), key) + raise StopIteration + + __next__ = next + + def __init__ (self, val): + self.val = val + self.keys_are_strings = False + try: + string_hash = read_global_var ("g_str_hash") + except: + string_hash = None + if self.val != 0 and string_hash != None and self.val["hash_func"] == string_hash: + self.keys_are_strings = True + + def children(self): + return self._iterator(self.val, self.keys_are_strings) + + def to_string (self): + return "0x%x" % (long(self.val)) + + def display_hint (self): + return "map" + +def pretty_printer_lookup (val): + # None yet, want things like hash table and list + + type = val.type.unqualified() + + # If it points to a reference, get the reference. + if type.code == gdb.TYPE_CODE_REF: + type = type.target () + + if type.code == gdb.TYPE_CODE_PTR: + type = type.target().unqualified() + t = str(type) + if t == "GList": + return GListPrinter(val, "GList") + if t == "GSList": + return GListPrinter(val, "GSList") + if t == "GHashTable": + return GHashPrinter(val) + else: + t = str(type) + if t == "GList": + return GListNodePrinter(val) + if t == "GSList *": + return GListPrinter(val, "GSList") + return None + +def register (obj): + if obj == None: + obj = gdb + + obj.pretty_printers.append(pretty_printer_lookup) + +class ForeachCommand (gdb.Command): + """Foreach on list""" + + def __init__ (self): + super (ForeachCommand, self).__init__ ("gforeach", + gdb.COMMAND_DATA, + gdb.COMPLETE_SYMBOL) + + def valid_name (self, name): + if not name[0].isalpha(): + return False + return True + + def parse_args (self, arg): + i = arg.find(" ") + if i <= 0: + raise Exception ("No var specified") + var = arg[:i] + if not self.valid_name(var): + raise Exception ("Invalid variable name") + + while i < len (arg) and arg[i].isspace(): + i = i + 1 + + if arg[i:i+2] != "in": + raise Exception ("Invalid syntax, missing in") + + i = i + 2 + + while i < len (arg) and arg[i].isspace(): + i = i + 1 + + colon = arg.find (":", i) + if colon == -1: + raise Exception ("Invalid syntax, missing colon") + + val = arg[i:colon] + + colon = colon + 1 + while colon < len (arg) and arg[colon].isspace(): + colon = colon + 1 + + command = arg[colon:] + + return (var, val, command) + + def do_iter(self, arg, item, command): + item = item.cast (gdb.lookup_type("void").pointer()) + item = long(item) + to_eval = "set $%s = (void *)0x%x\n"%(arg, item) + gdb.execute(to_eval) + gdb.execute(command) + + def slist_iterator (self, arg, container, command): + l = container.cast (gdb.lookup_type("GSList").pointer()) + while long(l) != 0: + self.do_iter (arg, l["data"], command) + l = l["next"] + + def list_iterator (self, arg, container, command): + l = container.cast (gdb.lookup_type("GList").pointer()) + while long(l) != 0: + self.do_iter (arg, l["data"], command) + l = l["next"] + + def pick_iterator (self, container): + t = container.type.unqualified() + if t.code == gdb.TYPE_CODE_PTR: + t = t.target().unqualified() + t = str(t) + if t == "GSList": + return self.slist_iterator + if t == "GList": + return self.list_iterator + raise Exception("Invalid container type %s"%(str(container.type))) + + def invoke (self, arg, from_tty): + (var, container, command) = self.parse_args(arg) + container = gdb.parse_and_eval (container) + func = self.pick_iterator(container) + func(var, container, command) + +ForeachCommand () diff --git a/Release/share/glib-2.0/gdb/gobject_gdb.py b/Release/share/glib-2.0/gdb/gobject_gdb.py new file mode 100644 index 0000000..8c30220 --- /dev/null +++ b/Release/share/glib-2.0/gdb/gobject_gdb.py @@ -0,0 +1,295 @@ +import os.path +import gdb +import glib_gdb +import sys + +if sys.version_info[0] >= 3: + long = int +else: + import itertools + map = itertools.imap + +# FrameDecorator is new in gdb 7.7, so we adapt to its absence. +try: + import gdb.FrameDecorator + HAVE_GDB_FRAMEDECORATOR = True + FrameDecorator = gdb.FrameDecorator.FrameDecorator +except ImportError: + HAVE_GDB_FRAMEDECORATOR = False + +# This is not quite right, as local vars may override symname +def read_global_var (symname): + return gdb.selected_frame().read_var(symname) + +def g_type_to_name (gtype): + def lookup_fundamental_type (typenode): + if typenode == 0: + return None + val = read_global_var ("static_fundamental_type_nodes") + if val == None: + return None + return val[typenode >> 2].address() + + gtype = long(gtype) + typenode = gtype - gtype % 4 + if typenode > (255 << 2): + typenode = gdb.Value(typenode).cast (gdb.lookup_type("TypeNode").pointer()) + else: + typenode = lookup_fundamental_type (typenode) + if typenode != None: + return glib_gdb.g_quark_to_string (typenode["qname"]) + return None + +def is_g_type_instance (val): + def is_g_type_instance_helper (type): + if str(type) == "GTypeInstance": + return True + + while type.code == gdb.TYPE_CODE_TYPEDEF: + type = type.target() + + if type.code != gdb.TYPE_CODE_STRUCT: + return False + + fields = type.fields() + if len (fields) < 1: + return False + + first_field = fields[0] + return is_g_type_instance_helper(first_field.type) + + type = val.type + if type.code != gdb.TYPE_CODE_PTR: + return False + type = type.target() + return is_g_type_instance_helper (type) + +def g_type_name_from_instance (instance): + if long(instance) != 0: + try: + inst = instance.cast (gdb.lookup_type("GTypeInstance").pointer()) + klass = inst["g_class"] + gtype = klass["g_type"] + name = g_type_to_name (gtype) + return name + except RuntimeError: + pass + return None + +class GTypePrettyPrinter: + "Prints a GType instance pointer" + + def __init__ (self, val): + self.val = val + + def to_string (self): + name = g_type_name_from_instance (self.val) + if name: + return ("0x%x [%s]")% (long(self.val), name) + return ("0x%x") % (long(self.val)) + +def pretty_printer_lookup (val): + if is_g_type_instance (val): + return GTypePrettyPrinter (val) + + return None + +def get_signal_name (id): + if id == None: + return None + id = long(id) + if id == 0: + return None + val = read_global_var ("g_signal_nodes") + max_s = read_global_var ("g_n_signal_nodes") + max_s = long(max_s) + if id < max_s: + return val[id]["name"].string() + return None + +def frame_name(frame): + return str(frame.function()) + +def frame_var(frame, var): + return frame.inferior_frame().read_var(var) + + +class SignalFrame(FrameDecorator): + def __init__ (self, frames): + FrameDecorator.__init__(self, frames[-1]) + self.frame = frames[-1] + self.frames = frames + + def name (self): + return "signal-emission" + + def read_var (self, frame, name, array = None): + try: + v = frame_var (frame, name) + if v == None or v.is_optimized_out: + return None + if array != None: + array.append (v) + return v + except ValueError: + return None + + def read_object (self, frame, name, array = None): + try: + v = frame_var (frame, name) + if v == None or v.is_optimized_out: + return None + v = v.cast (gdb.lookup_type("GObject").pointer()) + # Ensure this is a somewhat correct object pointer + if v != None and g_type_name_from_instance (v): + if array != None: + array.append (v) + return v + return None + except ValueError: + return None + + def append (self, array, obj): + if obj != None: + array.append (obj) + + def or_join_array (self, array): + if len(array) == 0: + return "???" + else: + return ' or '.join(set(map(str, array))) + + def get_detailed_signal_from_frame(self, frame, signal): + detail = self.read_var (frame, "detail") + detail = glib_gdb.g_quark_to_string (detail) + if detail is not None: + return signal + ":" + detail + else: + return detail + + def function (self): + instances = [] + signals = [] + + for frame in self.frames: + name = frame_name(frame) + if name == "signal_emit_unlocked_R": + self.read_object (frame, "instance", instances) + node = self.read_var (frame, "node") + if node: + signal = node["name"].string() + signal = self.get_detailed_signal_from_frame(frame, signal) + self.append(signals, signal) + + if name == "g_signal_emitv": + instance_and_params = self.read_var (frame, "instance_and_params") + if instance_and_params: + instance = instance_and_params[0]["v_pointer"].cast (gdb.Type("GObject").pointer()) + self.append (instances, instance) + id = self.read_var (frame, "signal_id") + signal = get_signal_name (id) + if signal: + signal = self.get_detailed_signal_from_frame(frame, signal) + self.append (signals, signal) + + if name == "g_signal_emit_valist" or name == "g_signal_emit": + self.read_object (frame, "instance", instances) + id = self.read_var (frame, "signal_id") + signal = get_signal_name (id) + if signal: + signal = self.get_detailed_signal_from_frame(frame, signal) + self.append (signals, signal) + + if name == "g_signal_emit_by_name": + self.read_object (frame, "instance", instances) + self.read_var (frame, "detailed_signal", signals) + break + + instance = self.or_join_array (instances) + signal = self.or_join_array (signals) + + return "<emit signal %s on instance %s>" % (signal, instance) + + def elided (self): + return self.frames[0:-1] + + def describe (self, stream, full): + stream.write (" " + self.function () + "\n") + +class GFrameDecorator: + def __init__ (self, iter): + self.queue = [] + self.iter = iter + + def __iter__ (self): + return self + + def fill (self): + while len(self.queue) <= 8: + try: + f = next(self.iter) + self.queue.append (f) + except StopIteration: + return + + def find_signal_emission (self): + for i in range (min (len(self.queue), 3)): + if frame_name(self.queue[i]) == "signal_emit_unlocked_R": + return i + return -1 + + def next (self): + # Ensure we have enough frames for a full signal emission + self.fill() + + # Are we at the end? + if len(self.queue) == 0: + raise StopIteration + + emission = self.find_signal_emission () + if emission > 0: + start = emission + while True: + if start == 0: + break + prev_name = frame_name(self.queue[start-1]) + if prev_name.find("_marshal_") >= 0 or prev_name == "g_closure_invoke": + start = start - 1 + else: + break + end = emission + 1 + while end < len(self.queue): + if frame_name(self.queue[end]) in ["g_signal_emitv", + "g_signal_emit_valist", + "g_signal_emit", + "g_signal_emit_by_name", + "_g_closure_invoke_va"]: + end = end + 1 + else: + break + + signal_frames = self.queue[start:end] + new_frames = [SignalFrame(signal_frames)] + self.queue[start:end] = new_frames + + return self.queue.pop(0) + + def __next__ (self): + return self.next() + +class GFrameFilter(object): + name = 'glib' + enabled = True + priority = 100 + + def filter(self, iterator): + return GFrameDecorator(iterator) + +def register (obj): + if obj == None: + obj = gdb + + if HAVE_GDB_FRAMEDECORATOR: + filter = GFrameFilter() + obj.frame_filters[filter.name] = filter + obj.pretty_printers.append(pretty_printer_lookup) diff --git a/Release/share/glib-2.0/gettext/po/Makefile.in.in b/Release/share/glib-2.0/gettext/po/Makefile.in.in new file mode 100644 index 0000000..e6c32cb --- /dev/null +++ b/Release/share/glib-2.0/gettext/po/Makefile.in.in @@ -0,0 +1,268 @@ +# Makefile for program source directory in GNU NLS utilities package. +# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper <drepper@gnu.ai.mit.edu> +# +# This file file be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU Public License +# but which still want to provide support for the GNU gettext functionality. +# Please note that the actual code is *not* freely available. +# +# - Modified by Owen Taylor <otaylor@redhat.com> to use GETTEXT_PACKAGE +# instead of PACKAGE and to look for po2tbl in ./ not in intl/ +# +# - Modified by jacob berkman <jacob@ximian.com> to install +# Makefile.in.in and po2tbl.sed.in for use with glib-gettextize + +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +PACKAGE = @PACKAGE@ +VERSION = @VERSION@ + +SHELL = @SHELL@ +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ + +prefix = @prefix@ +exec_prefix = @exec_prefix@ +datarootdir = @datarootdir@ +datadir = @datadir@ +libdir = @libdir@ +localedir = $(libdir)/locale +gnulocaledir = $(datadir)/locale +gettextsrcdir = $(datadir)/glib-2.0/gettext/po +subdir = po + +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +MKINSTALLDIRS = mkdir -p + +CC = @CC@ +GENCAT = @GENCAT@ +GMSGFMT = @GMSGFMT@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +XGETTEXT = @XGETTEXT@ +MSGMERGE = msgmerge + +DEFS = @DEFS@ +CFLAGS = @CFLAGS@ +CPPFLAGS = @CPPFLAGS@ + +INCLUDES = -I.. -I$(top_srcdir)/intl + +COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) + +SOURCES = +POFILES = @POFILES@ +GMOFILES = @GMOFILES@ +DISTFILES = LINGUAS ChangeLog Makefile.in.in POTFILES.in $(GETTEXT_PACKAGE).pot \ +$(POFILES) $(GMOFILES) $(SOURCES) + +POTFILES = \ + +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +INSTOBJEXT = @INSTOBJEXT@ + +.SUFFIXES: +.SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat + +.c.o: + $(COMPILE) $< + +.po.pox: + $(MAKE) $(GETTEXT_PACKAGE).pot + $(MSGMERGE) $< $(srcdir)/$(GETTEXT_PACKAGE).pot -o $*.pox + +.po.mo: + $(MSGFMT) -o $@ $< + +.po.gmo: + $(AM_V_GEN) file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \ + && rm -f $$file && $(GMSGFMT) $(MSGFMT_OPTS) -o $$file $< + +.po.cat: + sed -f ../intl/po2msg.sed < $< > $*.msg \ + && rm -f $@ && $(GENCAT) $@ $*.msg + + +all: all-@USE_NLS@ + +all-yes: $(CATALOGS) +all-no: + +$(srcdir)/$(GETTEXT_PACKAGE).pot: $(POTFILES) + $(XGETTEXT) --default-domain=$(GETTEXT_PACKAGE) \ + --msgid-bugs-address='http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=general' \ + --add-comments --keyword=_ --keyword=N_ \ + --keyword=C_:1c,2 \ + --keyword=NC_:1c,2 \ + --keyword=g_dcgettext:2 \ + --keyword=g_dngettext:2,3 \ + --keyword=g_dpgettext2:2c,3 \ + --flag=N_:1:pass-c-format \ + --flag=C_:2:pass-c-format \ + --flag=NC_:2:pass-c-format \ + --flag=g_dngettext:2:pass-c-format \ + --flag=g_strdup_printf:1:c-format \ + --flag=g_string_printf:2:c-format \ + --flag=g_string_append_printf:2:c-format \ + --flag=g_error_new:3:c-format \ + --flag=g_set_error:4:c-format \ + --flag=g_markup_printf_escaped:1:c-format \ + --flag=g_log:3:c-format \ + --flag=g_print:1:c-format \ + --flag=g_printerr:1:c-format \ + --flag=g_printf:1:c-format \ + --flag=g_fprintf:2:c-format \ + --flag=g_sprintf:2:c-format \ + --flag=g_snprintf:3:c-format \ + --flag=g_scanner_error:2:c-format \ + --flag=g_scanner_warn:2:c-format \ + $(POTFILES) \ + && test ! -f $(GETTEXT_PACKAGE).po \ + || ( rm -f $(srcdir)/$(GETTEXT_PACKAGE).pot \ + && mv $(GETTEXT_PACKAGE).po $(srcdir)/$(GETTEXT_PACKAGE).pot ) + +install: install-exec install-data +install-exec: +install-data: install-data-@USE_NLS@ +install-data-no: all +install-data-yes: all + $(MKINSTALLDIRS) $(DESTDIR)$(datadir); \ + catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + case "$$cat" in \ + *.gmo) destdir=$(gnulocaledir);; \ + *) destdir=$(localedir);; \ + esac; \ + lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ + dir=$(DESTDIR)$$destdir/$$lang/LC_MESSAGES; \ + $(MKINSTALLDIRS) $$dir; \ + if test -r $$cat; then \ + $(INSTALL_DATA) $$cat $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ + echo "installing $$cat as $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT)"; \ + else \ + $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ + echo "installing $(srcdir)/$$cat as" \ + "$$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT)"; \ + fi; \ + if test -r $$cat.m; then \ + $(INSTALL_DATA) $$cat.m $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ + echo "installing $$cat.m as $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m"; \ + else \ + if test -r $(srcdir)/$$cat.m ; then \ + $(INSTALL_DATA) $(srcdir)/$$cat.m \ + $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ + echo "installing $(srcdir)/$$cat as" \ + "$$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m"; \ + else \ + true; \ + fi; \ + fi; \ + done + if test "$(PACKAGE)" = "glib"; then \ + $(MKINSTALLDIRS) $(DESTDIR)$(gettextsrcdir); \ + $(INSTALL_DATA) $(srcdir)/Makefile.in.in \ + $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \ + else \ + : ; \ + fi + +# Define this as empty until I found a useful application. +installcheck: + +uninstall: + catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ + rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ + rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ + rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ + rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ + done + if test "$(PACKAGE)" = "glib"; then \ + rm -f $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \ + fi + +check: all + +dvi info tags TAGS ID: + +mostlyclean: + rm -f core core.* *.pox $(GETTEXT_PACKAGE).po *.old.po cat-id-tbl.tmp + rm -fr *.o + +clean: mostlyclean + +distclean: clean + rm -f Makefile Makefile.in POTFILES *.mo *.msg *.cat *.cat.m + +maintainer-clean: distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + rm -f $(GMOFILES) + +distdir = ../$(GETTEXT_PACKAGE)-$(VERSION)/$(subdir) +dist distdir: $(DISTFILES) + dists="$(DISTFILES)"; \ + for file in $$dists; do \ + ln $(srcdir)/$$file $(distdir) 2> /dev/null \ + || cp -p $(srcdir)/$$file $(distdir); \ + done + +update-po: Makefile + $(MAKE) $(GETTEXT_PACKAGE).pot + tmpdir=`pwd`; \ + cd $(srcdir); \ + catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ + echo "$$lang:"; \ + if $(MSGMERGE) $$lang.po $(GETTEXT_PACKAGE).pot -o $$tmpdir/$$lang.new.po; then \ + if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ + rm -f $$tmpdir/$$lang.new.po; \ + else \ + if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ + :; \ + else \ + echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ + rm -f $$tmpdir/$$lang.new.po; \ + exit 1; \ + fi; \ + fi; \ + else \ + echo "msgmerge for $$cat failed!"; \ + rm -f $$tmpdir/$$lang.new.po; \ + fi; \ + done + +# POTFILES is created from POTFILES.in by stripping comments, empty lines +# and Intltool tags (enclosed in square brackets), and appending a full +# relative path to them +POTFILES: POTFILES.in + ( if test 'x$(srcdir)' != 'x.'; then \ + posrcprefix='$(top_srcdir)/'; \ + else \ + posrcprefix="../"; \ + fi; \ + rm -f $@-t $@ \ + && (sed -e '/^#/d' \ + -e "s/^\[.*\] +//" \ + -e '/^[ ]*$$/d' \ + -e "s@.*@ $$posrcprefix& \\\\@" < $(srcdir)/$@.in \ + | sed -e '$$s/\\$$//') > $@-t \ + && chmod a-w $@-t \ + && mv $@-t $@ ) + +Makefile: Makefile.in.in ../config.status POTFILES + cd .. \ + && $(SHELL) ./config.status $(subdir)/$@.in + +# Tell versions [3.59,3.63) of GNU make not to export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Release/share/glib-2.0/schemas/gschema.dtd b/Release/share/glib-2.0/schemas/gschema.dtd new file mode 100644 index 0000000..00e3a16 --- /dev/null +++ b/Release/share/glib-2.0/schemas/gschema.dtd @@ -0,0 +1,73 @@ +<!ELEMENT schemalist (schema|enum)* > +<!ATTLIST schemalist gettext-domain CDATA #IMPLIED > + +<!ELEMENT schema (key|child|override)* > +<!ATTLIST schema id CDATA #REQUIRED + path CDATA #IMPLIED + gettext-domain CDATA #IMPLIED + extends CDATA #IMPLIED + list-of CDATA #IMPLIED > + +<!-- enumerated and flags types --> +<!-- each value element maps a nick to a numeric value --> +<!ELEMENT enum (value*) > +<!ATTLIST enum id CDATA #REQUIRED > + +<!ELEMENT flags (value*) > +<!ATTLIST flags id CDATA #REQUIRED > + +<!ELEMENT value EMPTY > +<!-- nick must be at least 2 characters long --> +<!-- value must be parsable as a 32-bit integer --> +<!ATTLIST value nick CDATA #REQUIRED + value CDATA #REQUIRED > + +<!ELEMENT key (default|summary?|description?|range?|choices?|aliases?)* > +<!-- name can only contain lowercase letters, numbers and '-' --> +<!-- type must be a GVariant type string --> +<!-- enum must be the id of an enum type that has been defined earlier --> +<!-- flags must be the id of a flags type that has been defined earlier --> +<!-- exactly one of type, enum or flags must be given --> +<!ATTLIST key name CDATA #REQUIRED + type CDATA #IMPLIED + enum CDATA #IMPLIED + flags CDATA #IMPLIED > + +<!-- the default value is specified a a serialized GVariant, + i.e. you have to include the quotes when specifying a string --> +<!ELEMENT default (#PCDATA) > +<!-- the presence of the l10n attribute marks a default value for + translation, its value is the gettext category to use --> +<!-- if context is present, it specifies msgctxt to use --> +<!ATTLIST default l10n (messages|time) #IMPLIED + context CDATA #IMPLIED > + +<!ELEMENT summary (#PCDATA) > +<!ELEMENT description (#PCDATA) > + +<!-- range is only allowed for keys with numeric type --> +<!ELEMENT range EMPTY > +<!-- min and max must be parseable as values of the key type and min < max --> +<!ATTLIST range min CDATA #REQUIRED + max CDATA #REQUIRED > + +<!-- choices is only allowed for keys with string or string array type --> +<!ELEMENT choices (choice+) > +<!-- each choice element specifies one possible value --> +<!ELEMENT choice EMPTY > +<!ATTLIST choice value CDATA #REQUIRED > + +<!-- aliases is only allowed for keys with enumerated type or with choices --> +<!ELEMENT aliases (alias+) > +<!-- each alias element specifies an alias for one of the possible values --> +<!ELEMENT alias EMPTY > +<!ATTLIST alias value CDATA #REQUIRED > + +<!ELEMENT child EMPTY > +<!ATTLIST child name CDATA #REQUIRED + schema CDATA #REQUIRED > + +<!ELEMENT override (#PCDATA) > +<!ATTLIST override name CDATA #REQUIRED + l10n CDATA #IMPLIED + context CDATA #IMPLIED > diff --git a/Release/share/glib-2.0/schemas/gschemas.compiled b/Release/share/glib-2.0/schemas/gschemas.compiled Binary files differnew file mode 100644 index 0000000..715a6b1 --- /dev/null +++ b/Release/share/glib-2.0/schemas/gschemas.compiled diff --git a/Release/share/glib-2.0/schemas/org.freedesktop.Geoclue.gschema.xml b/Release/share/glib-2.0/schemas/org.freedesktop.Geoclue.gschema.xml new file mode 100644 index 0000000..94ff65d --- /dev/null +++ b/Release/share/glib-2.0/schemas/org.freedesktop.Geoclue.gschema.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<schemalist> + <schema path="/apps/geoclue/" id="org.freedesktop.Geoclue"> + <key type="u" name="gps-baudrate"> + <default>0</default> + <summary>The baud rate for the attached GPS device</summary> + <description>The baud rate for the attached GPS device.</description> + </key> + <key type="s" name="gps-device"> + <default>''</default> + <summary>The device node or Bluetooth address for the attached GPS device</summary> + <description>The device node or Bluetooth address for the attached GPS device.</description> + </key> + </schema> +</schemalist> diff --git a/Release/share/glib-2.0/schemas/org.gnome.desktop.a11y.applications.gschema.xml b/Release/share/glib-2.0/schemas/org.gnome.desktop.a11y.applications.gschema.xml new file mode 100644 index 0000000..c85af3f --- /dev/null +++ b/Release/share/glib-2.0/schemas/org.gnome.desktop.a11y.applications.gschema.xml @@ -0,0 +1,20 @@ +<?xml version="1.0"?> +<schemalist> + <schema id="org.gnome.desktop.a11y.applications" path="/org/gnome/desktop/a11y/applications/"> + <key name="screen-keyboard-enabled" type="b"> + <default>false</default> + <summary>On-screen keyboard</summary> + <description>Whether the on-screen keyboard is turned on.</description> + </key> + <key name="screen-magnifier-enabled" type="b"> + <default>false</default> + <summary>Screen magnifier</summary> + <description>Whether the screen magnifier is turned on.</description> + </key> + <key name="screen-reader-enabled" type="b"> + <default>false</default> + <summary>Screen reader</summary> + <description>Whether the screen reader is turned on.</description> + </key> + </schema> +</schemalist> diff --git a/Release/share/glib-2.0/schemas/org.gnome.desktop.a11y.gschema.xml b/Release/share/glib-2.0/schemas/org.gnome.desktop.a11y.gschema.xml new file mode 100644 index 0000000..2070488 --- /dev/null +++ b/Release/share/glib-2.0/schemas/org.gnome.desktop.a11y.gschema.xml @@ -0,0 +1,21 @@ +<?xml version="1.0"?> +<schemalist> + <schema id="org.gnome.desktop.a11y" path="/org/gnome/desktop/a11y/"> + <key name="always-show-universal-access-status" type="b"> + <default>false</default> + <summary>Always show the Universal Access status icon</summary> + <description> + This key overrides the automatic hiding of the Universal + Access status icon when no accessibility features are enabled. + </description> + </key> + <key name="always-show-text-caret" type="b"> + <default>false</default> + <summary>Always show the text caret</summary> + <description> + This key overrides the hiding of the text caret in noneditable + text in applications. + </description> + </key> + </schema> +</schemalist> diff --git a/Release/share/glib-2.0/schemas/org.gnome.desktop.a11y.keyboard.gschema.xml b/Release/share/glib-2.0/schemas/org.gnome.desktop.a11y.keyboard.gschema.xml new file mode 100644 index 0000000..f505284 --- /dev/null +++ b/Release/share/glib-2.0/schemas/org.gnome.desktop.a11y.keyboard.gschema.xml @@ -0,0 +1,104 @@ +<?xml version="1.0"?> +<schemalist> + <schema id="org.gnome.desktop.a11y.keyboard" path="/org/gnome/desktop/a11y/keyboard/"> + <key name="enable" type="b"> + <default>false</default> + <summary>Enable accessibility keyboard shortcuts</summary> + </key> + <key name="feature-state-change-beep" type="b"> + <default>false</default> + <summary>Beep when a keyboard accessibility feature changes</summary> + <description>Whether to beep when a keyboard accessibility feature is enabled or disabled.</description> + </key> + <key name="timeout-enable" type="b"> + <default>false</default> + <summary>Disable keyboard accessibility after a timeout</summary> + <description>Whether to disable keyboard accessibility after a timeout, useful for shared machines.</description> + </key> + <key name="disable-timeout" type="i"> + <default>200</default> + <summary>Duration of the disabling timeout</summary> + <description>Duration of the timeout before disabling the keyboard accessibility.</description> + </key> + <key name="bouncekeys-enable" type="b"> + <default>false</default> + <summary>Enable 'Bounce Keys'</summary> + <description>Whether the 'Bounce Keys' keyboard accessibility feature is turned on.</description> + </key> + <key name="bouncekeys-delay" type="i"> + <default>300</default> + <summary>Minimum interval in milliseconds</summary> + <description>Ignore multiple presses of the same key within this many milliseconds.</description> + </key> + <key name="bouncekeys-beep-reject" type="b"> + <default>false</default> + <summary>Beep when a key is rejected</summary> + <description>Whether to beep when a key is rejected.</description> + </key> + <key name="mousekeys-enable" type="b"> + <default>false</default> + <summary>Enable 'Mouse Keys'</summary> + <description>Whether the 'Mouse Keys' accessibility feature is turned on.</description> + </key> + <key name="mousekeys-max-speed" type="i"> + <default>10</default> + <summary>Pixels per seconds</summary> + <description>How many pixels per second to move at the maximum speed.</description> + </key> + <key name="mousekeys-accel-time" type="i"> + <default>300</default> + <summary>How long to accelerate in milliseconds</summary> + <description>How many milliseconds it takes to go from 0 to maximum speed.</description> + </key> + <key name="mousekeys-init-delay" type="i"> + <default>300</default> + <summary>Initial delay in milliseconds</summary> + <description>How many milliseconds to wait before mouse movement keys start to operate.</description> + </key> + <key name="slowkeys-enable" type="b"> + <default>false</default> + <summary>Enable 'Slow Keys'</summary> + <description>Whether the 'Slow Keys' accessibility feature is turned on.</description> + </key> + <key name="slowkeys-delay" type="i"> + <default>300</default> + <summary>Minimum interval in milliseconds</summary> + <description>Do not accept a key as being pressed unless held for this many milliseconds.</description> + </key> + <key name="slowkeys-beep-press" type="b"> + <default>false</default> + <summary>Beep when a key is first pressed</summary> + <description>Whether to beep when a key is first pressed.</description> + </key> + <key name="slowkeys-beep-accept" type="b"> + <default>false</default> + <summary>Beep when a key is accepted</summary> + <description>Whether to beep when a key is accepted.</description> + </key> + <key name="slowkeys-beep-reject" type="b"> + <default>false</default> + <summary>Beep when a key is rejected</summary> + <description>Whether to beep when a key is rejected.</description> + </key> + <key name="stickykeys-enable" type="b"> + <default>false</default> + <summary>Enable sticky keys</summary> + <description>Whether the sticky keys accessibility feature is turned on.</description> + </key> + <key name="stickykeys-two-key-off" type="b"> + <default>false</default> + <summary>Disable when two keys are pressed at the same time</summary> + <description>Whether to disable sticky keys if two keys are pressed at the same time.</description> + </key> + <key name="stickykeys-modifier-beep" type="b"> + <default>false</default> + <summary>Beep when a modifier is pressed.</summary> + <description>Whether to beep when a modifier key is pressed.</description> + </key> + <key name="togglekeys-enable" type="b"> + <default>false</default> + <summary>Enable 'Toggle Keys'</summary> + <description>Whether the 'Toggle Keys' accessibility feature is turned on.</description> + </key> + </schema> +</schemalist> diff --git a/Release/share/glib-2.0/schemas/org.gnome.desktop.a11y.magnifier.gschema.xml b/Release/share/glib-2.0/schemas/org.gnome.desktop.a11y.magnifier.gschema.xml new file mode 100644 index 0000000..f84f243 --- /dev/null +++ b/Release/share/glib-2.0/schemas/org.gnome.desktop.a11y.magnifier.gschema.xml @@ -0,0 +1,228 @@ +<schemalist> + + <schema id="org.gnome.desktop.a11y.magnifier" + path="/org/gnome/desktop/a11y/magnifier/" + gettext-domain="gsettings-desktop-schemas"> + <key name="mouse-tracking" enum="org.gnome.desktop.GDesktopMagnifierMouseTrackingMode"> + <default>'proportional'</default> + <summary>Mouse Tracking Mode</summary> + <description> + Determines the position of the magnified mouse image within the + magnified view and how it reacts to system mouse movement. The values + are + - none: no mouse tracking; + - centered: the mouse image is + displayed at the center of the zoom region (which also represents + the point under the system mouse) and the magnified contents are + scrolled as the system mouse moves; + - proportional: the position of the magnified mouse in the zoom region + is proportionally the same as the position of the system mouse on screen; + - push: when the magnified mouse intersects a boundary of the zoom + region, the contents are scrolled into view. + </description> + </key> + <key name="focus-tracking" enum="org.gnome.desktop.GDesktopMagnifierFocusTrackingMode"> + <default>'proportional'</default> + <summary>Focus Tracking Mode</summary> + <description> + Determines the position of the focused widget within magnified view. + + The values are: + + - none: no focus tracking + + - centered: the focused image is displayed at the center of the zoom region (which also represents the + point under the system focus) and the magnified contents are scrolled as the system focus moves + + - proportional: the position of the magnified focus in the zoom region is proportionally the same as the + position of the system focus on screen + + - push: when the magnified focus intersects a boundary of the zoom region, the contents are scrolled + into view + </description> + </key> + <key name="caret-tracking" enum="org.gnome.desktop.GDesktopMagnifierCaretTrackingMode"> + <default>'centered'</default> + <summary>Caret Tracking Mode</summary> + <description> + Determines the position of the caret within magnified view. The values are: + + - none: no caret tracking + + - centered: the image of the caret is displayed at the center of the zoom region (which also represents + the point under the system caret) and the magnified contents are scrolled as the system caret moves + + - proportional: the position of the magnified caret in the zoom region is proportionally the same as the + position of the system caret on screen + + - push: when the magnified caret intersects a boundary of the zoom region, the contents are scrolled into + view + </description> + </key> + <key name="screen-position" enum="org.gnome.desktop.GDesktopMagnifierScreenPosition"> + <default>'full-screen'</default> + <summary>Screen position</summary> + <description> + The magnified view either fills the entire screen, or occupies the + top-half, bottom-half, left-half, or right-half of the screen. + </description> + </key> + <key name="mag-factor" type="d"> + <default>2.0</default> + <range min="0.1" max="32.0"/> + <summary>Magnification factor</summary> + <description> + The power of the magnification. A value of 1.0 means no magnification. + A value of 2.0 doubles the size. + </description> + </key> + <key name="lens-mode" type="b"> + <default>false</default> + <summary>Enable lens mode</summary> + <description> + Whether the magnified view should be centered over the location of + the system mouse and move with it. + </description> + </key> + <key name="scroll-at-edges" type="b"> + <default>false</default> + <summary> + Scroll magnified contents beyond the edges of the desktop + </summary> + <description> + For centered mouse tracking, when the system pointer is at or near the + edge of the screen, the magnified contents continue to scroll such that + the screen edge moves into the magnified view. + </description> + </key> + + <!-- Cross-hairs --> + <key name="show-cross-hairs" type="b"> + <default>false</default> + <summary>Show or hide crosshairs</summary> + <description> + Enables/disables display of crosshairs centered on the magnified + mouse sprite. + </description> + </key> + <key name="cross-hairs-thickness" type="i"> + <default>8</default> + <summary>Thickness of the crosshairs in pixels</summary> + <description> + Width in pixels of the vertical and horizontal lines that make up the crosshairs. + </description> + </key> + <key name="cross-hairs-color" type="s"> + <default>'#ff0000'</default> + <summary>Color of the crosshairs</summary> + <description> + The color of the the vertical and horizontal lines that make up + the crosshairs. + </description> + </key> + <key name="cross-hairs-opacity" type="d"> + <default>0.66</default> + <range min="0.0" max="1.0"/> + <summary>Opacity of the crosshairs</summary> + <description> + Determines the transparency of the crosshairs, from fully opaque + to fully transparent. + </description> + </key> + <key name="cross-hairs-length" type="i"> + <default>4096</default> + <range min="20" max="4096"/> + <summary>Length of the crosshairs in pixels</summary> + <description> + Determines the length in pixels of the vertical and horizontal + lines that make up the crosshairs. + </description> + </key> + <key name="cross-hairs-clip" type="b"> + <default>false</default> + <summary>Clip the crosshairs at the center</summary> + <description> + Determines whether the crosshairs intersect the magnified mouse sprite, + or are clipped such that the ends of the horizontal and vertical lines + surround the mouse image. + </description> + </key> + <key name="invert-lightness" type="b"> + <default>false</default> + <summary>Inverse lightness</summary> + <description> + Determines whether the lightness values are inverted: darker colors + become lighter and vice versa, and white and black are interchanged. + </description> + </key> + <key name="color-saturation" type="d"> + <default>1.0</default> + <range min="0.0" max="1.0"/> + <summary>Color Saturation</summary> + <description> + Represents a change to the color saturation, from 0.0 (grayscale) + to 1.0 (full color). + </description> + </key> + <key name="brightness-red" type="d"> + <default>0.0</default> + <range min="-1.0" max="1.0"/> + <summary>Change brightness of red</summary> + <description> + Represents a change to the default brightness of the red component. Zero + indicates no change, values less than zero indicate a decrease, and + values greater than zero indicate an increase. + </description> + </key> + <key name="brightness-green" type="d"> + <default>0.0</default> + <range min="-1.0" max="1.0"/> + <summary>Change brightness of green</summary> + <description> + Represents a change to the default brightness for the green component. + Zero indicates no change, values less than zero indicate a decrease, and + values greater than zero indicate an increase. + </description> + </key> + <key name="brightness-blue" type="d"> + <default>0.0</default> + <range min="-1.0" max="1.0"/> + <summary>Change brightness of blue</summary> + <description> + Represents a change to the default brightness for the blue component. + Zero indicates no change, values less than zero indicate a decrease, and + values greater than zero indicate an increase. + </description> + </key> + <key name="contrast-red" type="d"> + <default>0.0</default> + <range min="-1.0" max="1.0"/> + <summary>Change contrast of red</summary> + <description> + Represents a change to the default contrast of the red component. Zero + indicates no change in contrast, values less than zero indicate a + decrease, and values greater than zero indicate an increase. + </description> + </key> + <key name="contrast-green" type="d"> + <default>0.0</default> + <range min="-1.0" max="1.0"/> + <summary>Change contrast of green</summary> + <description> + Represents a change to the default contrast of the green component. + Zero indicates no change in contrast, values less than zero indicate a + decrease, and values greater than zero indicate an increase. + </description> + </key> + <key name="contrast-blue" type="d"> + <default>0.0</default> + <range min="-1.0" max="1.0"/> + <summary>Change contrast of blue</summary> + <description> + Represents a change to the default contrast of the blue component. Zero + indicates no change in contrast, values less than zero indicate a + decrease, and values greater than zero indicate an increase. + </description> + </key> + </schema> +</schemalist> diff --git a/Release/share/glib-2.0/schemas/org.gnome.desktop.a11y.mouse.gschema.xml b/Release/share/glib-2.0/schemas/org.gnome.desktop.a11y.mouse.gschema.xml new file mode 100644 index 0000000..4c9779c --- /dev/null +++ b/Release/share/glib-2.0/schemas/org.gnome.desktop.a11y.mouse.gschema.xml @@ -0,0 +1,60 @@ +<?xml version="1.0"?> +<schemalist> + <schema id="org.gnome.desktop.a11y.mouse" path="/org/gnome/desktop/a11y/mouse/"> + <key name="dwell-time" type="d"> + <default>1.20</default> + <summary>Dwell click time</summary> + <description>Time in seconds before a click is triggered.</description> + </key> + <key name="dwell-threshold" type="i"> + <default>10</default> + <summary>Movement threshold</summary> + <description>Distance in pixels before movement will be recognized.</description> + </key> + <key name="dwell-gesture-single" enum="org.gnome.desktop.GDesktopMouseDwellDirection"> + <default>'left'</default> + <summary>Gesture single click</summary> + <description>Direction to perform a single click ('left', 'right', 'up', 'down').</description> + </key> + <key name="dwell-gesture-double" enum="org.gnome.desktop.GDesktopMouseDwellDirection"> + <default>'up'</default> + <summary>Gesture double click</summary> + <description>Direction to perform a double click ('left', 'right', 'up', 'down').</description> + </key> + <key name="dwell-gesture-drag" enum="org.gnome.desktop.GDesktopMouseDwellDirection"> + <default>'down'</default> + <summary>Gesture drag click</summary> + <description>Direction to perform dragging ('left', 'right', 'up', 'down').</description> + </key> + <key name="dwell-gesture-secondary" enum="org.gnome.desktop.GDesktopMouseDwellDirection"> + <default>'right'</default> + <summary>Gesture secondary click</summary> + <description>Direction to perform a secondary click ('left', 'right', 'up', 'down').</description> + </key> + <key name="dwell-mode" enum="org.gnome.desktop.GDesktopMouseDwellMode"> + <default>'window'</default> + <summary>Dwell click mode</summary> + <description>The active dwell click mode. Possible values are 'window' and 'gesture'.</description> + </key> + <key name="click-type-window-visible" type="b"> + <default>true</default> + <summary>Show click type window</summary> + <description>Show click type window.</description> + </key> + <key name="dwell-click-enabled" type="b"> + <default>false</default> + <summary>Enable dwell clicks</summary> + <description>Enable dwell clicks.</description> + </key> + <key name="secondary-click-enabled" type="b"> + <default>false</default> + <summary>Secondary click enabled</summary> + <description>Enable simulated secondary clicks</description> + </key> + <key name="secondary-click-time" type="d"> + <default>1.20</default> + <summary>Secondary click time</summary> + <description>Time in seconds before a simulated secondary click is triggered.</description> + </key> + </schema> +</schemalist> diff --git a/Release/share/glib-2.0/schemas/org.gnome.desktop.app-folders.gschema.xml b/Release/share/glib-2.0/schemas/org.gnome.desktop.app-folders.gschema.xml new file mode 100644 index 0000000..9d2664e --- /dev/null +++ b/Release/share/glib-2.0/schemas/org.gnome.desktop.app-folders.gschema.xml @@ -0,0 +1,44 @@ +<schemalist gettext-domain="gsettings-desktop-schemas"> + <schema id="org.gnome.desktop.app-folders" path="/org/gnome/desktop/app-folders/"> + <key name="folder-children" type="as"> + <default>[]</default> + <summary>Folder children</summary> + <description>List of relative settings paths at which app-folders are + stored. Each folder uses the org.gnome.desktop.app-folders.folder + schema.</description> + </key> + </schema> + <schema id="org.gnome.desktop.app-folders.folder"> + <key name="name" type="s"> + <default>''</default> + <summary>Folder name</summary> + <description>The name of the application folder.</description> + </key> + <key name="translate" type="b"> + <default>false</default> + <summary>Translate the name</summary> + <description>Whether the name key is a filename to be looked up in + /usr/share/desktop-directories.</description> + </key> + <key name="apps" type="as"> + <default>[]</default> + <summary>Applications</summary> + <description>The list of IDs of applications that are explicitly + included in this folder.</description> + </key> + <key name="categories" type="as"> + <default>[]</default> + <summary>Categories</summary> + <description>A list of categories for which apps will be placed + into this folder by default, in addition to the apps that are + listed in the apps key.</description> + </key> + <key name="excluded-apps" type="as"> + <default>[]</default> + <summary>Excluded applications</summary> + <description>A list of IDs of applications that are excluded + from this folder. This can be used to remove applications that + would otherwise be included by category.</description> + </key> + </schema> +</schemalist> diff --git a/Release/share/glib-2.0/schemas/org.gnome.desktop.background.gschema.xml b/Release/share/glib-2.0/schemas/org.gnome.desktop.background.gschema.xml new file mode 100644 index 0000000..75615d7 --- /dev/null +++ b/Release/share/glib-2.0/schemas/org.gnome.desktop.background.gschema.xml @@ -0,0 +1,58 @@ +<schemalist gettext-domain="gsettings-desktop-schemas"> + <schema id="org.gnome.desktop.background" path="/org/gnome/desktop/background/"> + <key name="picture-options" enum="org.gnome.desktop.GDesktopBackgroundStyle"> + <default>'zoom'</default> + <summary>Picture Options</summary> + <description> + Determines how the image set by wallpaper_filename is rendered. + Possible values are "none", "wallpaper", "centered", "scaled", + "stretched", "zoom", "spanned". + </description> + </key> + <key name="picture-uri" type="s"> + <default>'file:///mingw64/share/backgrounds/gnome/adwaita-timed.xml'</default> + <summary>Picture URI</summary> + <description> + URI to use for the background image. Note that the backend only supports + local (file://) URIs. + </description> + </key> + <key name="picture-opacity" type="i"> + <range min="0" max="100"/> + <default>100</default> + <summary>Picture Opacity</summary> + <description> + Opacity with which to draw the background picture. + </description> + </key> + <key name="primary-color" type="s"> + <default>'#023c88'</default> + <summary>Primary Color</summary> + <description> + Left or Top color when drawing gradients, or the solid color. + </description> + </key> + <key name="secondary-color" type="s"> + <default>'#5789ca'</default> + <summary>Secondary Color</summary> + <description> + Right or Bottom color when drawing gradients, not used for solid color. + </description> + </key> + <key name="color-shading-type" enum="org.gnome.desktop.GDesktopBackgroundShading"> + <default>'solid'</default> + <summary>Color Shading Type</summary> + <description> + How to shade the background color. Possible values are "horizontal", + "vertical", and "solid". + </description> + </key> + <key name="show-desktop-icons" type="b"> + <default>false</default> + <summary>Have file manager handle the desktop</summary> + <description> + If set to true, then file manager will draw the icons on the desktop. + </description> + </key> + </schema> +</schemalist> diff --git a/Release/share/glib-2.0/schemas/org.gnome.desktop.calendar.gschema.xml b/Release/share/glib-2.0/schemas/org.gnome.desktop.calendar.gschema.xml new file mode 100644 index 0000000..9adaffc --- /dev/null +++ b/Release/share/glib-2.0/schemas/org.gnome.desktop.calendar.gschema.xml @@ -0,0 +1,10 @@ +<?xml version="1.0"?> +<schemalist> + <schema id="org.gnome.desktop.calendar" path="/org/gnome/desktop/calendar/"> + <key name="show-weekdate" type="b"> + <default>false</default> + <summary>Show the week date in the calendar</summary> + <description>If true, display the ISO week date in the calendar.</description> + </key> + </schema> +</schemalist> diff --git a/Release/share/glib-2.0/schemas/org.gnome.desktop.datetime.gschema.xml b/Release/share/glib-2.0/schemas/org.gnome.desktop.datetime.gschema.xml new file mode 100644 index 0000000..1c0fa4c --- /dev/null +++ b/Release/share/glib-2.0/schemas/org.gnome.desktop.datetime.gschema.xml @@ -0,0 +1,10 @@ +<?xml version="1.0"?> +<schemalist> + <schema id="org.gnome.desktop.datetime" path="/org/gnome/desktop/datetime/"> + <key name="automatic-timezone" type="b"> + <default>false</default> + <summary>Automatically update timezone</summary> + <description>Whether to automatically update the timezone using geolocation.</description> + </key> + </schema> +</schemalist> diff --git a/Release/share/glib-2.0/schemas/org.gnome.desktop.default-applications.gschema.xml b/Release/share/glib-2.0/schemas/org.gnome.desktop.default-applications.gschema.xml new file mode 100644 index 0000000..5f52a13 --- /dev/null +++ b/Release/share/glib-2.0/schemas/org.gnome.desktop.default-applications.gschema.xml @@ -0,0 +1,72 @@ +<schemalist gettext-domain="gsettings-desktop-schemas"> + <schema id="org.gnome.desktop.default-applications" path="/org/gnome/desktop/applications/"> + <child name="office" schema="org.gnome.desktop.default-applications.office"/> + <child name="terminal" schema="org.gnome.desktop.default-applications.terminal"/> + </schema> + <schema id="org.gnome.desktop.default-applications.office" path="/org/gnome/desktop/applications/office/"> + <child name="calendar" schema="org.gnome.desktop.default-applications.office.calendar"/> + <child name="tasks" schema="org.gnome.desktop.default-applications.office.tasks"/> + </schema> + <schema id="org.gnome.desktop.default-applications.office.calendar" path="/org/gnome/desktop/applications/office/calendar/"> + <key name="exec" type="s"> + <default>'evolution -c calendar'</default> + <summary>Default calendar</summary> + <description> + Default calendar application + + DEPRECATED: This key is deprecated and ignored. + The preferred calendar application is the application handling the text/calendar mime type. + </description> + </key> + <key name="needs-term" type="b"> + <default>false</default> + <summary>Calendar needs terminal</summary> + <description> + Whether the default calendar application needs a terminal to run. + + DEPRECATED: This key is deprecated and ignored. + The preferred calendar application is the application handling the text/calendar mime type, + whether it needs a terminal is taken from its desktop file. + </description> + </key> + </schema> + <schema id="org.gnome.desktop.default-applications.office.tasks" path="/org/gnome/desktop/applications/office/tasks/"> + <key name="exec" type="s"> + <default>'evolution -c tasks'</default> + <summary>Default tasks</summary> + <description> + Default tasks application. + </description> + </key> + <key name="needs-term" type="b"> + <default>false</default> + <summary>Tasks needs terminal</summary> + <description> + Whether the default tasks application needs a terminal to run. + </description> + </key> + </schema> + <schema id="org.gnome.desktop.default-applications.terminal" path="/org/gnome/desktop/applications/terminal/"> + <key name="exec" type="s"> + <default>'gnome-terminal'</default> + <summary>Terminal application</summary> + <description> + Terminal program to use when starting applications that require one. + + DEPRECATED: This key is deprecated and ignored. + The default terminal is handled in GIO. + </description> + </key> + <key name="exec-arg" type="s"> + <default>'-x'</default> + <summary>Exec Arguments</summary> + <description> + Argument used to execute programs in the terminal defined by the + 'exec' key. + + DEPRECATED: This key is deprecated and ignored. + The default terminal and how to invoke it is handled in GIO. + </description> + </key> + </schema> +</schemalist> diff --git a/Release/share/glib-2.0/schemas/org.gnome.desktop.enums.xml b/Release/share/glib-2.0/schemas/org.gnome.desktop.enums.xml new file mode 100644 index 0000000..eb8426b --- /dev/null +++ b/Release/share/glib-2.0/schemas/org.gnome.desktop.enums.xml @@ -0,0 +1,150 @@ + +<!-- Generated data (by glib-mkenums) --> + +<schemalist> + <enum id='org.gnome.desktop.GDesktopProxyMode'> + <value nick='none' value='0'/> + <value nick='manual' value='1'/> + <value nick='auto' value='2'/> + </enum> + <enum id='org.gnome.desktop.GDesktopToolbarStyle'> + <value nick='both' value='0'/> + <value nick='both-horiz' value='1'/> + <value nick='icons' value='2'/> + <value nick='text' value='3'/> + </enum> + <enum id='org.gnome.desktop.GDesktopToolbarIconSize'> + <value nick='small' value='0'/> + <value nick='large' value='1'/> + </enum> + <enum id='org.gnome.desktop.GDesktopBackgroundStyle'> + <value nick='none' value='0'/> + <value nick='wallpaper' value='1'/> + <value nick='centered' value='2'/> + <value nick='scaled' value='3'/> + <value nick='stretched' value='4'/> + <value nick='zoom' value='5'/> + <value nick='spanned' value='6'/> + </enum> + <enum id='org.gnome.desktop.GDesktopBackgroundShading'> + <value nick='solid' value='0'/> + <value nick='vertical' value='1'/> + <value nick='horizontal' value='2'/> + </enum> + <enum id='org.gnome.desktop.GDesktopMouseDwellMode'> + <value nick='window' value='0'/> + <value nick='gesture' value='1'/> + </enum> + <enum id='org.gnome.desktop.GDesktopMouseDwellDirection'> + <value nick='left' value='0'/> + <value nick='right' value='1'/> + <value nick='up' value='2'/> + <value nick='down' value='3'/> + </enum> + <enum id='org.gnome.desktop.GDesktopClockFormat'> + <value nick='24h' value='0'/> + <value nick='12h' value='1'/> + </enum> + <enum id='org.gnome.desktop.GDesktopScreensaverMode'> + <value nick='blank-only' value='0'/> + <value nick='random' value='1'/> + <value nick='single' value='2'/> + </enum> + <enum id='org.gnome.desktop.GDesktopMagnifierMouseTrackingMode'> + <value nick='none' value='0'/> + <value nick='centered' value='1'/> + <value nick='proportional' value='2'/> + <value nick='push' value='3'/> + </enum> + <enum id='org.gnome.desktop.GDesktopMagnifierFocusTrackingMode'> + <value nick='none' value='0'/> + <value nick='centered' value='1'/> + <value nick='proportional' value='2'/> + <value nick='push' value='3'/> + </enum> + <enum id='org.gnome.desktop.GDesktopMagnifierCaretTrackingMode'> + <value nick='none' value='0'/> + <value nick='centered' value='1'/> + <value nick='proportional' value='2'/> + <value nick='push' value='3'/> + </enum> + <enum id='org.gnome.desktop.GDesktopMagnifierScreenPosition'> + <value nick='none' value='0'/> + <value nick='full-screen' value='1'/> + <value nick='top-half' value='2'/> + <value nick='bottom-half' value='3'/> + <value nick='left-half' value='4'/> + <value nick='right-half' value='5'/> + </enum> + <enum id='org.gnome.desktop.GDesktopTitlebarAction'> + <value nick='toggle-shade' value='0'/> + <value nick='toggle-maximize' value='1'/> + <value nick='toggle-maximize-horizontally' value='2'/> + <value nick='toggle-maximize-vertically' value='3'/> + <value nick='minimize' value='4'/> + <value nick='none' value='5'/> + <value nick='lower' value='6'/> + <value nick='menu' value='7'/> + </enum> + <enum id='org.gnome.desktop.GDesktopFocusMode'> + <value nick='click' value='0'/> + <value nick='sloppy' value='1'/> + <value nick='mouse' value='2'/> + </enum> + <enum id='org.gnome.desktop.GDesktopFocusNewWindows'> + <value nick='smart' value='0'/> + <value nick='strict' value='1'/> + </enum> + <enum id='org.gnome.desktop.GDesktopVisualBellType'> + <value nick='fullscreen-flash' value='0'/> + <value nick='frame-flash' value='1'/> + </enum> + <enum id='org.gnome.desktop.GDesktopLocationAccuracyLevel'> + <value nick='country' value='0'/> + <value nick='city' value='1'/> + <value nick='neighborhood' value='2'/> + <value nick='street' value='3'/> + <value nick='exact' value='4'/> + </enum> + <enum id='org.gnome.desktop.GDesktopTouchpadHandedness'> + <value nick='right' value='0'/> + <value nick='left' value='1'/> + <value nick='mouse' value='2'/> + </enum> + <enum id='org.gnome.desktop.GDesktopTouchpadClickMethod'> + <value nick='default' value='0'/> + <value nick='none' value='1'/> + <value nick='areas' value='2'/> + <value nick='fingers' value='3'/> + </enum> + <enum id='org.gnome.desktop.GDesktopDeviceSendEvents'> + <value nick='enabled' value='0'/> + <value nick='disabled' value='1'/> + <value nick='disabled-on-external-mouse' value='2'/> + </enum> + <enum id='org.gnome.desktop.GDesktopTabletMapping'> + <value nick='absolute' value='0'/> + <value nick='relative' value='1'/> + </enum> + <enum id='org.gnome.desktop.GDesktopPadButtonAction'> + <value nick='none' value='0'/> + <value nick='help' value='1'/> + <value nick='switch-monitor' value='2'/> + <value nick='keybinding' value='3'/> + </enum> + <enum id='org.gnome.desktop.GDesktopStylusButtonAction'> + <value nick='default' value='0'/> + <value nick='middle' value='1'/> + <value nick='right' value='2'/> + <value nick='back' value='3'/> + <value nick='forward' value='4'/> + </enum> + <enum id='org.gnome.desktop.GDesktopPointerAccelProfile'> + <value nick='default' value='0'/> + <value nick='flat' value='1'/> + <value nick='adaptive' value='2'/> + </enum> +</schemalist> + +<!-- Generated data ends here --> + diff --git a/Release/share/glib-2.0/schemas/org.gnome.desktop.input-sources.gschema.xml b/Release/share/glib-2.0/schemas/org.gnome.desktop.input-sources.gschema.xml new file mode 100644 index 0000000..7b028eb --- /dev/null +++ b/Release/share/glib-2.0/schemas/org.gnome.desktop.input-sources.gschema.xml @@ -0,0 +1,63 @@ +<schemalist gettext-domain="gsettings-desktop-schemas"> + <schema id="org.gnome.desktop.input-sources" + path="/org/gnome/desktop/input-sources/"> + <key name="current" type="u"> + <default>0</default> + <summary>Current input source</summary> + <description> + The zero-based index into the input sources list specifying + the current one in effect. The value is automatically capped + to remain in the range [0, sources_length) as long as the + sources list isn't empty. + + DEPRECATED: This key is deprecated and ignored. + </description> + </key> + <key name="sources" type="a(ss)"> + <default>[]</default> + <summary>List of input sources</summary> + <description> + List of input source identifiers available. Each source is + specified as a tuple of 2 strings. The first string is the + type and can be one of 'xkb' or 'ibus'. For 'xkb' sources the + second string is 'xkb_layout+xkb_variant' or just 'xkb_layout' + if a XKB variant isn't needed. For 'ibus' sources the second + string is the IBus engine name. An empty list means that the X + server's current XKB layout and variant won't be touched and + IBus won't be used. + </description> + </key> + <key name="mru-sources" type="a(ss)"> + <default>[]</default> + <summary>List of most recently used input sources</summary> + <description> + List of most recently used input sources. The value is in the + same format as the available sources list. + </description> + </key> + <key name="xkb-options" type="as"> + <default>[]</default> + <summary>List of XKB options</summary> + <description> + List of XKB options. Each option is an XKB option string as + defined by xkeyboard-config's rules files. + </description> + </key> + <key name="show-all-sources" type="b"> + <default>false</default> + <summary>Show all installed input sources</summary> + <description> + Makes all installed input sources available for choosing in + System Settings. + </description> + </key> + <key name="per-window" type="b"> + <default>false</default> + <summary>Use different input sources for each window</summary> + <description> + When enabled, input sources get attached to the currently + focused window when activated. + </description> + </key> + </schema> +</schemalist> diff --git a/Release/share/glib-2.0/schemas/org.gnome.desktop.interface.gschema.xml b/Release/share/glib-2.0/schemas/org.gnome.desktop.interface.gschema.xml new file mode 100644 index 0000000..ed08f62 --- /dev/null +++ b/Release/share/glib-2.0/schemas/org.gnome.desktop.interface.gschema.xml @@ -0,0 +1,231 @@ +<schemalist gettext-domain="gsettings-desktop-schemas"> + <schema id="org.gnome.desktop.interface" path="/org/gnome/desktop/interface/"> + <key name="toolkit-accessibility" type="b"> + <default>false</default> + <summary>Enable Toolkit Accessibility</summary> + <description> + Whether toolkits should load accessibility related modules. + </description> + </key> + <key name="enable-animations" type="b"> + <default>true</default> + <summary>Enable Animations</summary> + <description> + Whether animations should be displayed. Note: This is a global key, + it changes the behaviour of the window manager, the panel etc. + </description> + </key> + <key name="menus-have-tearoff" type="b"> + <default>false</default> + <summary>Menus Have Tearoff</summary> + <description> + Whether menus should have a tearoff. + </description> + </key> + <key name="can-change-accels" type="b"> + <default>false</default> + <summary>Can Change Accels</summary> + <description> + Whether the user can dynamically type a new accelerator when + positioned over an active menuitem. + </description> + </key> + <key name="toolbar-style" enum="org.gnome.desktop.GDesktopToolbarStyle"> + <default>'both-horiz'</default> + <summary>Toolbar Style</summary> + <description> + Toolbar Style. Valid values are "both", "both-horiz", "icons", + and "text". + </description> + </key> + <key name="menubar-detachable" type="b"> + <default>false</default> + <summary>Menubar Detachable</summary> + <description> + Whether the user can detach menubars and move them around. + </description> + </key> + <key name="toolbar-detachable" type="b"> + <default>false</default> + <summary>Toolbar Detachable</summary> + <description> + Whether the user can detach toolbars and move them around. + </description> + </key> + <key name="toolbar-icons-size" enum="org.gnome.desktop.GDesktopToolbarIconSize"> + <default>'large'</default> + <summary>Toolbar Icon Size</summary> + <description> + Size of icons in toolbars, either "small" or "large". + </description> + </key> + <key name="cursor-blink" type="b"> + <default>true</default> + <summary>Cursor Blink</summary> + <description> + Whether the cursor should blink. + </description> + </key> + <key name="cursor-blink-time" type="i"> + <range min="100" max="2500"/> + <default>1200</default> + <summary>Cursor Blink Time</summary> + <description> + Length of the cursor blink cycle, in milliseconds. + </description> + </key> + <key name="cursor-blink-timeout" type="i"> + <range min="1" max="2147483647"/> + <default>10</default> + <summary>Cursor Blink Timeout</summary> + <description> + Time after which the cursor stops blinking, in seconds. + </description> + </key> + <key name="icon-theme" type="s"> + <default>'Adwaita'</default> + <summary>Icon Theme</summary> + <description> + Icon theme to use for the panel, nautilus etc. + </description> + </key> + <key name="gtk-theme" type="s"> + <default>'Adwaita'</default> + <summary>Gtk+ Theme</summary> + <description> + Basename of the default theme used by gtk+. + </description> + </key> + <key name="gtk-key-theme" type="s"> + <default>'Default'</default> + <summary>Gtk+ Keybinding Theme</summary> + <description> + Basename of the default keybinding theme used by gtk+. + </description> + </key> + <key name="font-name" type="s"> + <default>'Cantarell 11'</default> + <summary>Default font</summary> + <description> + Name of the default font used by gtk+. + </description> + </key> + <key name="text-scaling-factor" type="d"> + <range min="0.5" max="3.0"/> + <default>1.0</default> + <summary>Text scaling factor</summary> + <description> + Factor used to enlarge or reduce text display, without changing font size. + </description> + </key> + <key name="scaling-factor" type="u"> + <default>0</default> + <summary>Window scaling factor</summary> + <description> + Integer factor used to scale windows by. For use on high-dpi screens. + 0 means pick automatically based on monitor. + </description> + </key> + <key name="gtk-im-preedit-style" type="s"> + <default>'callback'</default> + <summary>GTK IM Preedit Style</summary> + <description> + Name of the GTK+ input method Preedit Style used by gtk+. + </description> + </key> + <key name="gtk-im-status-style" type="s"> + <default>'callback'</default> + <summary>GTK IM Status Style</summary> + <description> + Name of the GTK+ input method Status Style used by gtk+. + </description> + </key> + <key name="gtk-im-module" type="s"> + <default>''</default> + <summary>GTK IM Module</summary> + <description> + Name of the input method module used by GTK+. + </description> + </key> + <key name="document-font-name" type="s"> + <default>'Sans 11'</default> + <summary>Document font</summary> + <description> + Name of the default font used for reading documents. + </description> + </key> + <key name="monospace-font-name" type="s"> + <default>'Monospace 11'</default> + <summary>Monospace font</summary> + <description> + Name of a monospaced (fixed-width) font for use in locations like + terminals. + </description> + </key> + <key name="menubar-accel" type="s"> + <default>'F10'</default> + <summary>Menubar accelerator</summary> + <description> + Keyboard shortcut to open the menu bars. + </description> + </key> + <key name="cursor-theme" type="s"> + <default>'Adwaita'</default> + <summary>Cursor theme</summary> + <description>Cursor theme name. Used only by Xservers that support the Xcursor extension.</description> + </key> + <key name="cursor-size" type="i"> + <default>24</default> + <summary>Cursor size</summary> + <description>Size of the cursor used as cursor theme.</description> + </key> + <key name="gtk-timeout-initial" type="i"> + <default>200</default> + <summary>Timeout before click repeat</summary> + <description>Timeout in milliseconds before a click starts repeating (on spinner buttons for example).</description> + </key> + <key name="gtk-timeout-repeat" type="i"> + <default>20</default> + <summary>Timeout between click repeats</summary> + <description>Timeout in milliseconds between repeated clicks when a button is left pressed.</description> + </key> + <key name="gtk-color-palette" type="s"> + <default>'black:white:gray50:red:purple:blue:light blue:green:yellow:orange:lavender:brown:goldenrod4:dodger blue:pink:light green:gray10:gray30:gray75:gray90'</default> + <summary>Palette used in the color selector</summary> + <description>Palette used in the color selector as defined by the 'gtk-color-palette' setting</description> + </key> + <key name="gtk-color-scheme" type="s"> + <default>''</default> + <summary>List of symbolic names and color equivalents</summary> + <description>A '\n' separated list of "name:color" as defined by the 'gtk-color-scheme' setting</description> + </key> + <key name="clock-format" enum="org.gnome.desktop.GDesktopClockFormat"> + <default>'24h'</default> + <summary>Whether the clock displays in 24h or 12h format</summary> + <description> + Whether the clock displays in 24h or 12h format + </description> + </key> + <key name="clock-show-seconds" type="b"> + <default>false</default> + <summary>Whether the clock shows seconds</summary> + <description> + If true, display seconds in the clock. + </description> + </key> + <key name="clock-show-date" type="b"> + <default>false</default> + <summary>Show date in clock</summary> + <description> + If true, display date in the clock, in addition to time. + </description> + </key> + <key name="show-battery-percentage" type="b"> + <default>false</default> + <summary>Show battery percentage</summary> + <description> + If true, display battery percentage in the status menu, in addition to the icon. + </description> + </key> + </schema> +</schemalist> diff --git a/Release/share/glib-2.0/schemas/org.gnome.desktop.lockdown.gschema.xml b/Release/share/glib-2.0/schemas/org.gnome.desktop.lockdown.gschema.xml new file mode 100644 index 0000000..9e29dfd --- /dev/null +++ b/Release/share/glib-2.0/schemas/org.gnome.desktop.lockdown.gschema.xml @@ -0,0 +1,74 @@ +<schemalist gettext-domain="gsettings-desktop-schemas"> + <schema id="org.gnome.desktop.lockdown" path="/org/gnome/desktop/lockdown/"> + <key name="disable-command-line" type="b"> + <default>false</default> + <summary>Disable command line</summary> + <description> + Prevent the user from accessing the terminal or specifying a command + line to be executed. For example, this would disable access to the + panel's "Run Application" dialog. + </description> + </key> + <key name="disable-save-to-disk" type="b"> + <default>false</default> + <summary>Disable saving files to disk</summary> + <description> + Prevent the user from saving files to disk. For example, this would + disable access to all applications' "Save as" dialogs. + </description> + </key> + <key name="disable-printing" type="b"> + <default>false</default> + <summary>Disable printing</summary> + <description> + Prevent the user from printing. For example, this would disable access + to all applications' "Print" dialogs. + </description> + </key> + <key name="disable-print-setup" type="b"> + <default>false</default> + <summary>Disable print setup</summary> + <description> + Prevent the user from modifying print settings. For example, this would + disable access to all applications' "Print Setup" dialogs. + </description> + </key> + <key name="disable-user-switching" type="b"> + <default>false</default> + <summary>Disable user switching</summary> + <description> + Prevent the user from switching to another account while his session + is active. + </description> + </key> + <key name="disable-lock-screen" type="b"> + <default>false</default> + <summary>Disable lock screen</summary> + <description> + Prevent the user to lock his screen. + </description> + </key> + <key name="disable-application-handlers" type="b"> + <default>false</default> + <summary>Disable URL and MIME type handlers</summary> + <description> + Prevent running any URL or MIME type handler applications. + </description> + </key> + <key name="disable-log-out" type="b"> + <default>false</default> + <summary>Disable log out</summary> + <description> + Prevent the user from logging out. + </description> + </key> + <key name="user-administration-disabled" type="b"> + <default>false</default> + <summary>Disable user administration</summary> + <description> + Stop the user from modifying user accounts. By default, we allow adding + and removing users, as well as changing other users settings. + </description> + </key> + </schema> +</schemalist> diff --git a/Release/share/glib-2.0/schemas/org.gnome.desktop.media-handling.gschema.xml b/Release/share/glib-2.0/schemas/org.gnome.desktop.media-handling.gschema.xml new file mode 100644 index 0000000..8e6f77a --- /dev/null +++ b/Release/share/glib-2.0/schemas/org.gnome.desktop.media-handling.gschema.xml @@ -0,0 +1,34 @@ +<schemalist gettext-domain="gsettings-desktop-schemas"> + <schema id="org.gnome.desktop.media-handling" path="/org/gnome/desktop/media-handling/"> + <key name="automount" type="b"> + <default>true</default> + <summary>Whether to automatically mount media</summary> + <description>If set to true, then Nautilus will automatically mount media such as user-visible hard disks and removable media on start-up and media insertion.</description> + </key> + <key name="automount-open" type="b"> + <default>true</default> + <summary>Whether to automatically open a folder for automounted media</summary> + <description>If set to true, then Nautilus will automatically open a folder when media is automounted. This only applies to media where no known x-content/* type was detected; for media where a known x-content type is detected, the user configurable action will be taken instead.</description> + </key> + <key name="autorun-never" type="b"> + <default>false</default> + <summary>Never prompt or autorun/autostart programs when media are inserted</summary> + <description>If set to true, then Nautilus will never prompt nor autorun/autostart programs when a medium is inserted.</description> + </key> + <key name="autorun-x-content-start-app" type="as"> + <default>[ 'x-content/unix-software' ]</default> + <summary>List of x-content/* types where the preferred application will be launched</summary> + <description>List of x-content/* types for which the user have chosen to start an application in the preference capplet. The preferred application for the given type will be started on insertion on media matching these types.</description> + </key> + <key name="autorun-x-content-ignore" type="as"> + <default>[]</default> + <summary>List of x-content/* types set to "Do Nothing"</summary> + <description>List of x-content/* types for which the user have chosen "Do Nothing" in the preference capplet. No prompt will be shown nor will any matching application be started on insertion of media matching these types.</description> + </key> + <key name="autorun-x-content-open-folder" type="as"> + <default>[]</default> + <summary>List of x-content/* types set to "Open Folder"</summary> + <description>List of x-content/* types for which the user have chosen "Open Folder" in the preferences capplet. A folder window will be opened on insertion of media matching these types.</description> + </key> + </schema> +</schemalist> diff --git a/Release/share/glib-2.0/schemas/org.gnome.desktop.notifications.gschema.xml b/Release/share/glib-2.0/schemas/org.gnome.desktop.notifications.gschema.xml new file mode 100644 index 0000000..5057552 --- /dev/null +++ b/Release/share/glib-2.0/schemas/org.gnome.desktop.notifications.gschema.xml @@ -0,0 +1,88 @@ +<schemalist> + <schema id="org.gnome.desktop.notifications" path="/org/gnome/desktop/notifications/" + gettext-domain="gsettings-desktop-schemas"> + <key name="show-banners" type="b"> + <default>true</default> + <summary>Show notification banners</summary> + <description> + Whether notification banners are visible for application notifications. + </description> + </key> + + <key name="show-in-lock-screen" type="b"> + <default>true</default> + <summary>Show notifications in the lock screen</summary> + <description> + Whether notifications are shown in the lock screen or not. + </description> + </key> + + <!-- Temporary hack until GSettingsList lands --> + <key name="application-children" type="as"> + <default>[]</default> + <summary /> + <description /> + </key> + </schema> + + <schema id="org.gnome.desktop.notifications.application" gettext-domain="gsettings-desktop-schemas"> + <key name="application-id" type="s"> + <default>''</default> + <summary>Application ID</summary> + <description> + The application that this policy is for. + </description> + </key> + + <key name="enable" type="b"> + <default>true</default> + <summary>Enable notifications</summary> + <description> + Whether notifications are globally enabled for this application. + </description> + </key> + + <key name="enable-sound-alerts" type="b"> + <default>true</default> + <summary>Enable sound alerts</summary> + <description> + Whether notifications should be accompanied by sound alerts. + </description> + </key> + + <key name="show-banners" type="b"> + <default>true</default> + <summary>Show notification banners</summary> + <description> + Whether notification banners for this application are shown or not. Does not + affect clicking on message tray buttons. + </description> + </key> + + <key name="force-expanded" type="b"> + <default>false</default> + <summary>Force automatic expanding of banners</summary> + <description> + Whether notifications from this application are expanded automatically when in banner mode. + </description> + </key> + + <key name="show-in-lock-screen" type="b"> + <default>true</default> + <summary>Show in the lock screen</summary> + <description> + Whether notifications from this application are shown when the screen is locked. + </description> + </key> + + <key name="details-in-lock-screen" type="b"> + <default>false</default> + <summary>Show details in the lock screen</summary> + <description> + Whether the summary and body of notifications from this application will be + visible in the locked screen. + </description> + </key> + + </schema> +</schemalist> diff --git a/Release/share/glib-2.0/schemas/org.gnome.desktop.peripherals.gschema.xml b/Release/share/glib-2.0/schemas/org.gnome.desktop.peripherals.gschema.xml new file mode 100644 index 0000000..ca5b1b7 --- /dev/null +++ b/Release/share/glib-2.0/schemas/org.gnome.desktop.peripherals.gschema.xml @@ -0,0 +1,173 @@ +<schemalist> + <schema gettext-domain="gsettings-desktop-schemas" id="org.gnome.desktop.peripherals" path="/org/gnome/desktop/peripherals/"> + <child name="touchpad" schema="org.gnome.desktop.peripherals.touchpad"/> + <child name="keyboard" schema="org.gnome.desktop.peripherals.keyboard"/> + <child name="mouse" schema="org.gnome.desktop.peripherals.mouse"/> + <child name="trackball" schema="org.gnome.desktop.peripherals.trackball"/> + <child name="tablet" schema="org.gnome.desktop.peripherals.tablet"/> + <child name="touchscreen" schema="org.gnome.desktop.peripherals.touchscreen"/> + </schema> + <schema gettext-domain="gsettings-desktop-schemas" id="org.gnome.desktop.peripherals.touchpad" path="/org/gnome/desktop/peripherals/touchpad/"> + <key name="edge-scrolling-enabled" type="b"> + <default>false</default> + <summary>Whether edge scrolling is enabled</summary> + <description>When enabled, touchpads that support edge scrolling will have that feature enabled.</description> + </key> + <key name="two-finger-scrolling-enabled" type="b"> + <default>true</default> + <summary>Whether edge scrolling is enabled</summary> + <description>When enabled, touchpads that support two-finger scrolling will have that feature enabled.</description> + </key> + <key name="tap-to-click" type="b"> + <default>false</default> + <summary>Enable mouse clicks with touchpad</summary> + <description>Set this to TRUE to be able to send mouse clicks by tapping on the touchpad.</description> + </key> + <key name="send-events" enum="org.gnome.desktop.GDesktopDeviceSendEvents"> + <default>'enabled'</default> + <summary>Touchpad enabled</summary> + <description>Defines the situations in which the touchpad is enabled.</description> + </key> + <key name="left-handed" enum="org.gnome.desktop.GDesktopTouchpadHandedness"> + <default>'mouse'</default> + <summary>Touchpad button orientation</summary> + <description>Swap left and right mouse buttons for left-handed mice with 'left', 'right' for right-handed, 'mouse' to follow the mouse setting.</description> + </key> + <key name="speed" type="d"> + <default>0</default> + <summary>Pointer speed</summary> + <description>Pointer speed for the touchpad. Accepted values are in the [-1..1] range (from "unaccelerated" to "fast"). A value of 0 is the system default.</description> + <range min="-1" max="1"/> + </key> + <key name="natural-scroll" type="b"> + <default>true</default> + <summary>Natural scrolling</summary> + <description>Set this to TRUE to enable natural (reverse) scrolling for touchpads.</description> + </key> + <key name="click-method" enum="org.gnome.desktop.GDesktopTouchpadClickMethod"> + <default>'default'</default> + <summary>Click method</summary> + <description>How to generate software-emulated buttons, either disabled ('none'), through specific areas ('areas'), number of fingers ('fingers') or left as hardware default ('default').</description> + </key> + </schema> + <schema gettext-domain="gsettings-desktop-schemas" id="org.gnome.desktop.peripherals.keyboard" path="/org/gnome/desktop/peripherals/keyboard/"> + <key name="repeat" type="b"> + <default>true</default> + <summary>Keyboard repeat</summary> + <description>Set this to TRUE to enable keyboard repeat.</description> + </key> + <key name="repeat-interval" type="u"> + <default>30</default> + <summary>Key Repeat Interval</summary> + <description>Delay between repeats in milliseconds.</description> + </key> + <key name="delay" type="u"> + <default>500</default> + <summary>Initial Key Repeat Delay</summary> + <description>Initial key repeat delay in milliseconds.</description> + </key> + </schema> + <schema gettext-domain="gsettings-desktop-schemas" id="org.gnome.desktop.peripherals.mouse" path="/org/gnome/desktop/peripherals/mouse/"> + <key name="left-handed" type="b"> + <default>false</default> + <summary>Mouse button orientation</summary> + <description>Swap left and right mouse buttons for left-handed mice.</description> + </key> + <key name="speed" type="d"> + <default>0</default> + <summary>Pointer speed</summary> + <description>Pointer speed for mice. Accepted values are in the [-1..1] range (from "unaccelerated" to "fast"). A value of 0 is the system default.</description> + <range min="-1" max="1"/> + </key> + <key name="natural-scroll" type="b"> + <default>false</default> + <summary>Natural scrolling</summary> + <description>Set this to TRUE to enable natural (reverse) scrolling for mice.</description> + </key> + <key name="accel-profile" enum="org.gnome.desktop.GDesktopPointerAccelProfile"> + <default>'default'</default> + <summary>Acceleration profile</summary> + <description>Acceleration profile used for connected mice. The acceleration profile can be set to either default ('default') which uses the default acceleration profile for each device, flat ('flat'), which accelerates by a device specific constant factor derived from the configured pointer speed, or adaptive ('adaptive') which adapts the acceleration depending on the mouse movement. If a mouse doesn't support the configured profile, 'default' will be used.</description> + </key> + </schema> + <schema gettext-domain="gsettings-desktop-schemas" id="org.gnome.desktop.peripherals.tablet"> + <key name="display" type="as"> + <default>["", "", ""]</default> + <summary>Drawing tablet mapping</summary> + <description>EDID information of the monitor the tablet is mapped to. Must be in the format [vendor, product, serial]. ["","",""] disables mapping.</description> + </key> + <key name="mapping" enum="org.gnome.desktop.GDesktopTabletMapping"> + <default>'absolute'</default> + <summary>Tablet mapping</summary> + <description>How input affects the pointer on the screen</description> + </key> + <key name="area" type="ad"> + <default>[0, 0, 0, 0]</default> + <summary>Tablet area</summary> + <description>Dead area padding around the active area, in percentages. Respectively applied to left,right,top and bottom sides.</description> + </key> + <key name="keep-aspect" type="b"> + <default>false</default> + <summary>Tablet aspect ratio</summary> + <description>Enable this to restrict the tablet area to match the aspect ratio of the output.</description> + </key> + <key name="left-handed" type="b"> + <default>false</default> + <summary>Tablet left-handed mode</summary> + <description>Enable this to allow physically rotating the tablet for left-handed setups</description> + </key> + </schema> + <schema gettext-domain="gsettings-desktop-schemas" id="org.gnome.desktop.peripherals.tablet.stylus"> + <key name="pressure-curve" type="ai"> + <default>[0, 0, 100, 100]</default> + <summary>Stylus pressure curve</summary> + <description>Set this to x1, y1 and x2, y2 of the pressure curve applied to the stylus.</description> + </key> + <key name="eraser-pressure-curve" type="ai"> + <default>[0, 0, 100, 100]</default> + <summary>Eraser pressure curve</summary> + <description>Set this to x1, y1 and x2, y2 of the pressure curve applied to the eraser.</description> + </key> + <key name="button-action" enum="org.gnome.desktop.GDesktopStylusButtonAction"> + <default>'default'</default> + <summary>Button action</summary> + <description>Stylus button action, this button is located along the pen handle.</description> + </key> + <key name="secondary-button-action" enum="org.gnome.desktop.GDesktopStylusButtonAction"> + <default>'default'</default> + <summary>Secondary button action</summary> + <description>Secondary stylus button action, this button is located along the pen handle on some styli like the Grip Pen. Other styli like the Airbrush Pen or the Inking Pen only have one button, this setting is ineffective on those.</description> + </key> + </schema> + <schema gettext-domain="gsettings-desktop-schemas" id="org.gnome.desktop.peripherals.tablet.pad-button"> + <key name="action" enum="org.gnome.desktop.GDesktopPadButtonAction"> + <default>'none'</default> + <summary>Pad button action type</summary> + <description>The type of action triggered by the button being pressed.</description> + </key> + <key type="s" name="keybinding"> + <default>''</default> + <summary>Key combination for the custom action</summary> + <description>The keyboard shortcut generated when the button is pressed for custom actions.</description> + </key> + </schema> + <schema gettext-domain="gsettings-desktop-schemas" id="org.gnome.desktop.peripherals.touchscreen"> + <key name="display" type="as"> + <default>["", "", ""]</default> + <summary>Touchscreen display mapping</summary> + <description>EDID information of the monitor the touchscreen is mapped to. Must be in the format [vendor, product, serial]. ["","",""] disables mapping.</description> + </key> + </schema> + <schema gettext-domain="gsettings-desktop-schemas" id="org.gnome.desktop.peripherals.trackball" path="/org/gnome/desktop/peripherals/trackball/"> + <key name="scroll-wheel-emulation-button" type="i"> + <default>0</default> + <range min="0" max="24"/> + <summary>Mouse wheel emulation button. 0 to disable the feature.</summary> + </key> + <key name="accel-profile" enum="org.gnome.desktop.GDesktopPointerAccelProfile"> + <default>'default'</default> + <summary>Acceleration profile</summary> + <description>Acceleration profile used for the trackball. The acceleration profile can be set to either default ('default') which uses the default acceleration profile, flat ('flat'), which accelerates by a device specific constant factor derived from the configured speed, or adaptive ('adaptive') which adapts the acceleration depending on the movement. If the trackball doesn't support the configured profile, 'default' will be used.</description> + </key> + </schema> +</schemalist> diff --git a/Release/share/glib-2.0/schemas/org.gnome.desktop.privacy.gschema.xml b/Release/share/glib-2.0/schemas/org.gnome.desktop.privacy.gschema.xml new file mode 100644 index 0000000..677ab87 --- /dev/null +++ b/Release/share/glib-2.0/schemas/org.gnome.desktop.privacy.gschema.xml @@ -0,0 +1,63 @@ +<?xml version="1.0"?> +<schemalist> + <schema id="org.gnome.desktop.privacy" path="/org/gnome/desktop/privacy/"> + <key name="hide-identity" type="b"> + <default>false</default> + <summary>Controls visibility of personal information</summary> + <description>If set to true, the system will make an effort to + not divulge the user's identity on screen or on the network.</description> + </key> + <key name="show-full-name-in-top-bar" type="b"> + <default>true</default> + <summary>Show full name in the user menu</summary> + <description>Whether the users full name is shown in the user menu or not.</description> + </key> + <key name="remove-old-trash-files" type="b"> + <default>false</default> + <summary>Whether to remove old files from the trash automatically</summary> + <description>If TRUE, automatically remove files from the trash + when they are older than 'old-files-age' days.</description> + </key> + <key name="remove-old-temp-files" type="b"> + <default>false</default> + <summary>Whether to remove old temporary files automatically</summary> + <description>If TRUE, automatically remove temporary files + when they are older than 'old-files-age' days.</description> + </key> + <key name="old-files-age" type="u"> + <default>30</default> + <summary>Number of days to keep trash and temporary files</summary> + <description>Consider trash and temporary files old after + this many days.</description> + </key> + <key name="remember-recent-files" type="b"> + <default>true</default> + <summary>Whether to remember recently used files</summary> + <description>If FALSE, applications will not remember recently + used files.</description> + </key> + <key name="recent-files-max-age" type="i"> + <default>-1</default> + <summary>Number of days to remember recently used files for</summary> + <description>Recently used files will be remembered for this many days. + If set to 0, recent files will not be remembered; if set to -1, they + will be retained indefinitively.</description> + </key> + <key name="remember-app-usage" type="b"> + <default>true</default> + <summary>Whether to remember application usage</summary> + <description>If FALSE, application usage will not be monitored + and recorded.</description> + </key> + <key name="send-software-usage-stats" type="b"> + <default>false</default> + <summary>Send statistics when applications are removed or installed</summary> + <description>If FALSE, no anonymous installation or removal information will be sent to the vendor.</description> + </key> + <key name="report-technical-problems" type="b"> + <default>false</default> + <summary>Send reports of technical problems to the vendor</summary> + <description>If TRUE, anonymized reports will be sent automatically to the vendor.</description> + </key> + </schema> +</schemalist> diff --git a/Release/share/glib-2.0/schemas/org.gnome.desktop.screensaver.gschema.xml b/Release/share/glib-2.0/schemas/org.gnome.desktop.screensaver.gschema.xml new file mode 100644 index 0000000..dbcfd36 --- /dev/null +++ b/Release/share/glib-2.0/schemas/org.gnome.desktop.screensaver.gschema.xml @@ -0,0 +1,135 @@ +<schemalist> + <schema gettext-domain="gsettings-desktop-schemas" id="org.gnome.desktop.screensaver" path="/org/gnome/desktop/screensaver/"> + <key name="idle-activation-enabled" type="b"> + <default>true</default> + <summary>Activate when idle</summary> + <description> + Set this to TRUE to activate the screensaver when the session is idle. + + DEPRECATED: This key is deprecated and ignored. + Set org.gnome.desktop.session idle-delay to 0 if you do not want to activate the screensaver. + </description> + </key> + <key name="lock-enabled" type="b"> + <default>true</default> + <summary>Lock on activation</summary> + <description>Set this to TRUE to lock the screen when the screensaver goes active.</description> + </key> + <key name="lock-delay" type="u"> + <default>0</default> + <summary>Time before locking</summary> + <description>The number of seconds after screensaver activation before locking the screen.</description> + </key> + <key name="show-full-name-in-top-bar" type="b"> + <default>true</default> + <summary>Show full name in the lock screen</summary> + <description>Whether the user's full name is shown in the lock screen or not. This only affects the screen shield, the name is always shown in the unlock dialog.</description> + </key> + <key name="embedded-keyboard-enabled" type="b"> + <default>false</default> + <summary>Allow embedding a keyboard into the window</summary> + <description> + Set this to TRUE to allow embedding a keyboard into the window when trying to unlock. The "keyboard_command" key must be set with the appropriate command. + + DEPRECATED: This key is deprecated and ignored. +</description> + </key> + <key name="embedded-keyboard-command" type="s"> + <default>''</default> + <summary>Embedded keyboard command</summary> + <description> + The command that will be run, if the "embedded_keyboard_enabled" key is set to TRUE, to embed a keyboard widget into the window. This command should implement an XEMBED plug interface and output a window XID on the standard output. + + DEPRECATED: This key is deprecated and ignored. + </description> + </key> + <key name="logout-enabled" type="b"> + <default>false</default> + <summary>Allow logout</summary> + <description> + Set this to TRUE to offer an option in the unlock dialog to allow logging out after a delay. The delay is specified in the "logout_delay" key. + + DEPRECATED: This key is deprecated and ignored. + </description> + </key> + <key name="logout-delay" type="u"> + <default>7200</default> + <summary>Time before logout option</summary> + <description> + The number of seconds after the screensaver activation before a logout option will appear in the unlock dialog. This key has effect only if the "logout_enable" key is set to TRUE. + + DEPRECATED: This key is deprecated and ignored + </description> + </key> + <key name="logout-command" type="s"> + <default>''</default> + <summary>Logout command</summary> + <description> + The command to invoke when the logout button is clicked. This command should simply log the user out without any interaction. This key has effect only if the "logout_enable" key is set to TRUE. + + DEPRECATED: This key is deprecated and ignored. + </description> + </key> + <key name="user-switch-enabled" type="b"> + <default>true</default> + <summary>Allow user switching</summary> + <description>Set this to TRUE to offer an option in the unlock dialog to switch to a different user account.</description> + </key> + <key name="status-message-enabled" type="b"> + <default>true</default> + <summary>Allow the session status message to be displayed</summary> + <description> + Allow the session status message to be displayed when the screen is locked. + + DEPRECATED: This key is deprecated and ignored. + </description> + </key> + <key name="picture-options" enum="org.gnome.desktop.GDesktopBackgroundStyle"> + <default>'zoom'</default> + <summary>Picture Options</summary> + <description> + Determines how the image set by wallpaper_filename is rendered. + Possible values are "none", "wallpaper", "centered", "scaled", + "stretched", "zoom", "spanned". + </description> + </key> + <key name="picture-uri" type="s"> + <default>'file:///mingw64/share/backgrounds/gnome/adwaita-lock.jpg'</default> + <summary>Picture URI</summary> + <description> + URI to use for the background image. Note that the backend only supports + local (file://) URIs. + </description> + </key> + <key name="picture-opacity" type="i"> + <range min="0" max="100"/> + <default>100</default> + <summary>Picture Opacity</summary> + <description> + Opacity with which to draw the background picture. + </description> + </key> + <key name="primary-color" type="s"> + <default>'#023c88'</default> + <summary>Primary Color</summary> + <description> + Left or Top color when drawing gradients, or the solid color. + </description> + </key> + <key name="secondary-color" type="s"> + <default>'#5789ca'</default> + <summary>Secondary Color</summary> + <description> + Right or Bottom color when drawing gradients, not used for solid color. + </description> + </key> + <key name="color-shading-type" enum="org.gnome.desktop.GDesktopBackgroundShading"> + <default>'solid'</default> + <summary>Color Shading Type</summary> + <description> + How to shade the background color. Possible values are "horizontal", + "vertical", and "solid". + </description> + </key> + </schema> +</schemalist> diff --git a/Release/share/glib-2.0/schemas/org.gnome.desktop.search-providers.gschema.xml b/Release/share/glib-2.0/schemas/org.gnome.desktop.search-providers.gschema.xml new file mode 100644 index 0000000..13cb448 --- /dev/null +++ b/Release/share/glib-2.0/schemas/org.gnome.desktop.search-providers.gschema.xml @@ -0,0 +1,52 @@ +<?xml version="1.0"?> +<schemalist> + <schema id="org.gnome.desktop.search-providers" path="/org/gnome/desktop/search-providers/"> + + <key name="disable-external" type="b"> + <default>false</default> + <summary>Disable all external search providers</summary> + <description> + Set to true to disable all external search provider programs, + whether or not they are independently disabled or enabled. + External search providers are installed by applications in + $XDG_DATA_DIR/gnome-shell/search-providers. + </description> + </key> + + <key name="disabled" type="as"> + <default>[]</default> + <summary> + List of desktop file IDs for which the associated default-enabled search provider + should be disabled + </summary> + <description> + Results for applications contained in this list will not be displayed + when searching. + </description> + </key> + + <key name="enabled" type="as"> + <default>[]</default> + <summary> + List of desktop file IDs for which the associated default-disabled search provider + should be enabled + </summary> + <description> + Results for applications contained in this list will be displayed + when searching. + </description> + </key> + + <key name="sort-order" type="as"> + <default>['org.gnome.Contacts.desktop', 'org.gnome.Documents.desktop', 'org.gnome.Nautilus.desktop']</default> + <summary>List of desktop file IDs for search providers sort order</summary> + <description> + Results for applications contained in this list will be displayed in + the specified order. + Results for applications not specified in this list will be displayed + last, sorted alphabetically. + </description> + </key> + + </schema> +</schemalist> diff --git a/Release/share/glib-2.0/schemas/org.gnome.desktop.session.gschema.xml b/Release/share/glib-2.0/schemas/org.gnome.desktop.session.gschema.xml new file mode 100644 index 0000000..8021e6f --- /dev/null +++ b/Release/share/glib-2.0/schemas/org.gnome.desktop.session.gschema.xml @@ -0,0 +1,15 @@ +<schemalist> + <schema id="org.gnome.desktop.session" path="/org/gnome/desktop/session/"> + <key name="idle-delay" type="u"> + <default>300</default> + <summary>Time before session is considered idle</summary> + <description>The number of seconds of inactivity before the session is considered idle.</description> + </key> + <key name="session-name" type="s"> + <default>"gnome"</default> + <summary>Session type</summary> + <description>The name of the session to use. Known values are + "gnome" and "gnome-fallback".</description> + </key> + </schema> +</schemalist> diff --git a/Release/share/glib-2.0/schemas/org.gnome.desktop.sound.gschema.xml b/Release/share/glib-2.0/schemas/org.gnome.desktop.sound.gschema.xml new file mode 100644 index 0000000..fe1b715 --- /dev/null +++ b/Release/share/glib-2.0/schemas/org.gnome.desktop.sound.gschema.xml @@ -0,0 +1,20 @@ +<?xml version="1.0"?> +<schemalist> + <schema id="org.gnome.desktop.sound" path="/org/gnome/desktop/sound/"> + <key name="event-sounds" type="b"> + <default>true</default> + <summary>Sounds for events</summary> + <description>Whether to play sounds on user events.</description> + </key> + <key name="theme-name" type="s"> + <default>'freedesktop'</default> + <summary>Sound theme name</summary> + <description>The XDG sound theme to use for event sounds.</description> + </key> + <key name="input-feedback-sounds" type="b"> + <default>false</default> + <summary>Input feedback sounds</summary> + <description>Whether to play sounds on input events.</description> + </key> + </schema> +</schemalist> diff --git a/Release/share/glib-2.0/schemas/org.gnome.desktop.thumbnail-cache.gschema.xml b/Release/share/glib-2.0/schemas/org.gnome.desktop.thumbnail-cache.gschema.xml new file mode 100644 index 0000000..2812c36 --- /dev/null +++ b/Release/share/glib-2.0/schemas/org.gnome.desktop.thumbnail-cache.gschema.xml @@ -0,0 +1,13 @@ +<?xml version="1.0"?> +<schemalist> + <schema id="org.gnome.desktop.thumbnail-cache" path="/org/gnome/desktop/thumbnail-cache/"> + <key name="maximum-age" type="i"> + <default>180</default> + <description>Maximum age for thumbnails in the cache, in days. Set to -1 to disable cleaning.</description> + </key> + <key name="maximum-size" type="i"> + <default>512</default> + <description>Maximum size of the thumbnail cache, in megabytes. Set to -1 to disable cleaning.</description> + </key> + </schema> +</schemalist> diff --git a/Release/share/glib-2.0/schemas/org.gnome.desktop.thumbnailers.gschema.xml b/Release/share/glib-2.0/schemas/org.gnome.desktop.thumbnailers.gschema.xml new file mode 100644 index 0000000..355bb36 --- /dev/null +++ b/Release/share/glib-2.0/schemas/org.gnome.desktop.thumbnailers.gschema.xml @@ -0,0 +1,25 @@ +<?xml version="1.0"?> +<schemalist> + <schema id="org.gnome.desktop.thumbnailers" path="/org/gnome/desktop/thumbnailers/"> + <key name="disable-all" type="b"> + <default>false</default> + <summary>Disable all external thumbnailers</summary> + <description> + Set to true to disable all external thumbnailer programs, + independent on whether they are independently disabled/enabled. + </description> + </key> + + <key name="disable" type="as"> + <default>[]</default> + <summary> + List of mime-types for which external thumbnailer + programs will be disabled + </summary> + <description> + Thumbnails will not be created for files whose mime-type is + contained in the list. + </description> + </key> + </schema> +</schemalist> diff --git a/Release/share/glib-2.0/schemas/org.gnome.desktop.wm.keybindings.gschema.xml b/Release/share/glib-2.0/schemas/org.gnome.desktop.wm.keybindings.gschema.xml new file mode 100644 index 0000000..5448a29 --- /dev/null +++ b/Release/share/glib-2.0/schemas/org.gnome.desktop.wm.keybindings.gschema.xml @@ -0,0 +1,351 @@ +<schemalist> + + <schema id="org.gnome.desktop.wm.keybindings" + path="/org/gnome/desktop/wm/keybindings/" + gettext-domain="gsettings-desktop-schemas"> + <key name="switch-to-workspace-1" type="as"> + <default><![CDATA[['<Super>Home']]]></default> + <summary>Switch to workspace 1</summary> + </key> + <key name="switch-to-workspace-2" type="as"> + <default>[]</default> + <summary>Switch to workspace 2</summary> + </key> + <key name="switch-to-workspace-3" type="as"> + <default>[]</default> + <summary>Switch to workspace 3</summary> + </key> + <key name="switch-to-workspace-4" type="as"> + <default>[]</default> + <summary>Switch to workspace 4</summary> + </key> + <key name="switch-to-workspace-5" type="as"> + <default>[]</default> + <summary>Switch to workspace 5</summary> + </key> + <key name="switch-to-workspace-6" type="as"> + <default>[]</default> + <summary>Switch to workspace 6</summary> + </key> + <key name="switch-to-workspace-7" type="as"> + <default>[]</default> + <summary>Switch to workspace 7</summary> + </key> + <key name="switch-to-workspace-8" type="as"> + <default>[]</default> + <summary>Switch to workspace 8</summary> + </key> + <key name="switch-to-workspace-9" type="as"> + <default>[]</default> + <summary>Switch to workspace 9</summary> + </key> + <key name="switch-to-workspace-10" type="as"> + <default>[]</default> + <summary>Switch to workspace 10</summary> + </key> + <key name="switch-to-workspace-11" type="as"> + <default>[]</default> + <summary>Switch to workspace 11</summary> + </key> + <key name="switch-to-workspace-12" type="as"> + <default>[]</default> + <summary>Switch to workspace 12</summary> + </key> + <key name="switch-to-workspace-left" type="as"> + <default><![CDATA[['<Control><Alt>Left']]]></default> + <summary>Switch to workspace left</summary> + </key> + <key name="switch-to-workspace-right" type="as"> + <default><![CDATA[['<Control><Alt>Right']]]></default> + <summary>Switch to workspace right</summary> + </key> + <key name="switch-to-workspace-up" type="as"> + <default><![CDATA[['<Super>Page_Up','<Control><Alt>Up']]]></default> + <summary>Switch to workspace above</summary> + </key> + <key name="switch-to-workspace-down" type="as"> + <default><![CDATA[['<Super>Page_Down','<Control><Alt>Down']]]></default> + <summary>Switch to workspace below</summary> + </key> + <key name="switch-to-workspace-last" type="as"> + <default><![CDATA[['<Super>End']]]></default> + <summary>Switch to last workspace</summary> + </key> + <key name="switch-group" type="as"> + <default><![CDATA[['<Super>Above_Tab','<Alt>Above_Tab']]]></default> + <summary>Switch windows of an application</summary> + </key> + <key name="switch-group-backward" type="as"> + <default><![CDATA[['<Shift><Super>Above_Tab','<Shift><Alt>Above_Tab']]]></default> + <summary>Reverse switch windows of an application</summary> + </key> + <key name="switch-applications" type="as"> + <default><![CDATA[['<Super>Tab','<Alt>Tab']]]></default> + <summary>Switch applications</summary> + </key> + <key name="switch-applications-backward" type="as"> + <default><![CDATA[['<Shift><Super>Tab','<Shift><Alt>Tab']]]></default> + <summary>Reverse switch applications</summary> + </key> + <key name="switch-windows" type="as"> + <default>[]</default> + <summary>Switch windows</summary> + </key> + <key name="switch-windows-backward" type="as"> + <default>[]</default> + <summary>Reverse switch windows</summary> + </key> + <key name="switch-panels" type="as"> + <default><![CDATA[['<Control><Alt>Tab']]]></default> + <summary>Switch system controls</summary> + </key> + <key name="switch-panels-backward" type="as"> + <default><![CDATA[['<Shift><Control><Alt>Tab']]]></default> + <summary>Reverse switch system controls</summary> + </key> + <key name="cycle-group" type="as"> + <default><![CDATA[['<Alt>F6']]]></default> + <summary>Switch windows of an app directly</summary> + </key> + <key name="cycle-group-backward" type="as"> + <default><![CDATA[['<Shift><Alt>F6']]]></default> + <summary>Reverse switch windows of an app directly</summary> + </key> + <key name="cycle-windows" type="as"> + <default><![CDATA[['<Alt>Escape']]]></default> + <summary>Switch windows directly</summary> + </key> + <key name="cycle-windows-backward" type="as"> + <default><![CDATA[['<Shift><Alt>Escape']]]></default> + <summary>Reverse switch windows directly</summary> + </key> + <key name="cycle-panels" type="as"> + <default><![CDATA[['<Control><Alt>Escape']]]></default> + <summary>Switch system controls directly</summary> + </key> + <key name="cycle-panels-backward" type="as"> + <default><![CDATA[['<Shift><Control><Alt>Escape']]]></default> + <summary>Reverse switch system controls directly</summary> + </key> + <key name="show-desktop" type="as"> + <default>[]</default> + <summary>Hide all normal windows</summary> + </key> + <key name="panel-main-menu" type="as"> + <default><![CDATA[['<Super>s','<Alt>F1']]]></default> + <summary>Show the activities overview</summary> + </key> + <key name="panel-run-dialog" type="as"> + <default><![CDATA[['<Alt>F2']]]></default> + <summary>Show the run command prompt</summary> + </key> + <key name="set-spew-mark" type="as"> + <default>[]</default> + <summary>Don't use</summary> + </key> + <key name="activate-window-menu" type="as"> + <default><![CDATA[['<Alt>space']]]></default> + <summary>Activate the window menu</summary> + </key> + <key name="toggle-fullscreen" type="as"> + <default>[]</default> + <summary>Toggle fullscreen mode</summary> + </key> + <key name="toggle-maximized" type="as"> + <default><![CDATA[['<Alt>F10']]]></default> + <summary>Toggle maximization state</summary> + </key> + <key name="toggle-above" type="as"> + <default>[]</default> + <summary>Toggle window always appearing on top</summary> + </key> + <key name="maximize" type="as"> + <default><![CDATA[['<Super>Up']]]></default> + <summary>Maximize window</summary> + </key> + <key name="unmaximize" type="as"> + <default><![CDATA[['<Super>Down','<Alt>F5']]]></default> + <summary>Restore window</summary> + </key> + <key name="toggle-shaded" type="as"> + <default>[]</default> + <summary>Toggle shaded state</summary> + </key> + <key name="minimize" type="as"> + <default><![CDATA[['<Super>h']]]></default> + <summary>Minimize window</summary> + </key> + <key name="close" type="as"> + <default><![CDATA[['<Alt>F4']]]></default> + <summary>Close window</summary> + </key> + <key name="begin-move" type="as"> + <default><![CDATA[['<Alt>F7']]]></default> + <summary>Move window</summary> + </key> + <key name="begin-resize" type="as"> + <default><![CDATA[['<Alt>F8']]]></default> + <summary>Resize window</summary> + </key> + <key name="toggle-on-all-workspaces" type="as"> + <default>[]</default> + <summary>Toggle window on all workspaces or one</summary> + </key> + <key name="move-to-workspace-1" type="as"> + <default><![CDATA[['<Super><Shift>Home']]]></default> + <summary>Move window to workspace 1</summary> + </key> + <key name="move-to-workspace-2" type="as"> + <default>[]</default> + <summary>Move window to workspace 2</summary> + </key> + <key name="move-to-workspace-3" type="as"> + <default>[]</default> + <summary>Move window to workspace 3</summary> + </key> + <key name="move-to-workspace-4" type="as"> + <default>[]</default> + <summary>Move window to workspace 4</summary> + </key> + <key name="move-to-workspace-5" type="as"> + <default>[]</default> + <summary>Move window to workspace 5</summary> + </key> + <key name="move-to-workspace-6" type="as"> + <default>[]</default> + <summary>Move window to workspace 6</summary> + </key> + <key name="move-to-workspace-7" type="as"> + <default>[]</default> + <summary>Move window to workspace 7</summary> + </key> + <key name="move-to-workspace-8" type="as"> + <default>[]</default> + <summary>Move window to workspace 8</summary> + </key> + <key name="move-to-workspace-9" type="as"> + <default>[]</default> + <summary>Move window to workspace 9</summary> + </key> + <key name="move-to-workspace-10" type="as"> + <default>[]</default> + <summary>Move window to workspace 10</summary> + </key> + <key name="move-to-workspace-11" type="as"> + <default>[]</default> + <summary>Move window to workspace 11</summary> + </key> + <key name="move-to-workspace-12" type="as"> + <default>[]</default> + <summary>Move window to workspace 12</summary> + </key> + <key name="move-to-workspace-last" type="as"> + <default><![CDATA[['<Super><Shift>End']]]></default> + <summary>Move window to last workspace</summary> + </key> + <key name="move-to-workspace-left" type="as"> + <default><![CDATA[['<Control><Shift><Alt>Left']]]></default> + <summary>Move window one workspace to the left</summary> + </key> + <key name="move-to-workspace-right" type="as"> + <default><![CDATA[['<Control><Shift><Alt>Right']]]></default> + <summary>Move window one workspace to the right</summary> + </key> + <key name="move-to-workspace-up" type="as"> + <default><![CDATA[['<Super><Shift>Page_Up','<Control><Shift><Alt>Up']]]></default> + <summary>Move window one workspace up</summary> + </key> + <key name="move-to-workspace-down" type="as"> + <default><![CDATA[['<Super><Shift>Page_Down','<Control><Shift><Alt>Down']]]></default> + <summary>Move window one workspace down</summary> + </key> + <key name="move-to-monitor-left" type="as"> + <default><![CDATA[['<Super><Shift>Left']]]></default> + <summary>Move window to the next monitor on the left</summary> + </key> + <key name="move-to-monitor-right" type="as"> + <default><![CDATA[['<Super><Shift>Right']]]></default> + <summary>Move window to the next monitor on the right</summary> + </key> + <key name="move-to-monitor-up" type="as"> + <default><![CDATA[['<Super><Shift>Up']]]></default> + <summary>Move window to the next monitor above</summary> + </key> + <key name="move-to-monitor-down" type="as"> + <default><![CDATA[['<Super><Shift>Down']]]></default> + <summary>Move window to the next monitor below</summary> + </key> + <key name="raise-or-lower" type="as"> + <default>[]</default> + <summary>Raise window if covered, otherwise lower it</summary> + </key> + <key name="raise" type="as"> + <default>[]</default> + <summary>Raise window above other windows</summary> + </key> + <key name="lower" type="as"> + <default>[]</default> + <summary>Lower window below other windows</summary> + </key> + <key name="maximize-vertically" type="as"> + <default>[]</default> + <summary>Maximize window vertically</summary> + </key> + <key name="maximize-horizontally" type="as"> + <default>[]</default> + <summary>Maximize window horizontally</summary> + </key> + <key name="move-to-corner-nw" type="as"> + <default>[]</default> + <summary>Move window to top left corner</summary> + </key> + <key name="move-to-corner-ne" type="as"> + <default>[]</default> + <summary>Move window to top right corner</summary> + </key> + <key name="move-to-corner-sw" type="as"> + <default>[]</default> + <summary>Move window to bottom left corner</summary> + </key> + <key name="move-to-corner-se" type="as"> + <default>[]</default> + <summary>Move window to bottom right corner</summary> + </key> + <key name="move-to-side-n" type="as"> + <default>[]</default> + <summary>Move window to top edge of screen</summary> + </key> + <key name="move-to-side-s" type="as"> + <default>[]</default> + <summary>Move window to bottom edge of screen</summary> + </key> + <key name="move-to-side-e" type="as"> + <default>[]</default> + <summary>Move window to right side of screen</summary> + </key> + <key name="move-to-side-w" type="as"> + <default>[]</default> + <summary>Move window to left side of screen</summary> + </key> + <key name="move-to-center" type="as"> + <default>[]</default> + <summary>Move window to center of screen</summary> + </key> + <key name="switch-input-source" type="as"> + <default><![CDATA[['<Super>space']]]></default> + <summary>Switch input source</summary> + <description>Binding to select the next input source</description> + </key> + <key name="switch-input-source-backward" type="as"> + <default><![CDATA[['<Shift><Super>space']]]></default> + <summary>Switch input source backward</summary> + <description>Binding to select the previous input source</description> + </key> + <key name="always-on-top" type="as"> + <default>[]</default> + <summary>Toggle window to be always on top</summary> + <description>Set or unset window to appear always on top</description> + </key> + </schema> + +</schemalist> diff --git a/Release/share/glib-2.0/schemas/org.gnome.desktop.wm.preferences.gschema.xml b/Release/share/glib-2.0/schemas/org.gnome.desktop.wm.preferences.gschema.xml new file mode 100644 index 0000000..56a358a --- /dev/null +++ b/Release/share/glib-2.0/schemas/org.gnome.desktop.wm.preferences.gschema.xml @@ -0,0 +1,281 @@ +<schemalist> + + <schema id="org.gnome.desktop.wm.preferences" + path="/org/gnome/desktop/wm/preferences/" + gettext-domain="gsettings-desktop-schemas"> + <key name="mouse-button-modifier" type="s"> + <default><![CDATA['<Super>']]></default> + <summary>Modifier to use for modified window click actions</summary> + <description> + Clicking a window while holding down this modifier key will move the + window (left click), resize the window (middle click), or show the + window menu (right click). The middle and right click operations may + be swapped using the "resize-with-right-button" key. Modifier is + expressed as <![CDATA["<Alt>"]]> or <![CDATA["<Super>"]]> for example. + </description> + </key> + <key name="resize-with-right-button" type="b"> + <default>false</default> + <summary>Whether to resize with the right button</summary> + <description> + Set this to true to resize with the right button and show a menu with + the middle button while holding down the key given in + "mouse-button-modifier"; set it to false to make it work + the opposite way around. + </description> + </key> + <key name="button-layout" type="s"> + <default>'appmenu:close'</default> + <summary>Arrangement of buttons on the titlebar</summary> + <description> + Arrangement of buttons on the titlebar. The value should be a string, + such as "menu:minimize,maximize,spacer,close"; the colon separates + the left corner of the window from the right corner, and the button + names are comma-separated. Duplicate buttons are not allowed. Unknown + button names are silently ignored so that buttons can be added in + future metacity versions without breaking older versions. A special + spacer tag can be used to insert some space between + two adjacent buttons. + </description> + </key> + <key name="focus-mode" enum="org.gnome.desktop.GDesktopFocusMode"> + <default>'click'</default> + <summary>Window focus mode</summary> + <description> + The window focus mode indicates how windows are activated. It has + three possible values; "click" means windows must be clicked in order + to focus them, "sloppy" means windows are focused when the mouse enters + the window, and "mouse" means windows are focused when the mouse enters + the window and unfocused when the mouse leaves the window. + </description> + </key> + <key name="focus-new-windows" + enum="org.gnome.desktop.GDesktopFocusNewWindows"> + <default>'smart'</default> + <summary>Control how new windows get focus</summary> + <description> + This option provides additional control over how newly created windows + get focus. It has two possible values; "smart" applies the user's + normal focus mode, and "strict" results in windows started from a + terminal not being given focus. + </description> + </key> + <key name="raise-on-click" type="b"> + <default>true</default> + <summary> + Whether windows should be raised when their client area is clicked + </summary> + <description> + The default, true, indicates that a window will be raised + whenever its client area or its frame is clicked. + + Setting this to false means that a window will not be raised + if it is clicked on the client area. To raise it, one can + click anywhere in the window's frame, or Super-click on any + part of the window. This mode is useful if one uses many overlapping + windows. + </description> + </key> + <key name="action-double-click-titlebar" + enum="org.gnome.desktop.GDesktopTitlebarAction"> + <default>'toggle-maximize'</default> + <summary>Action on title bar double-click</summary> + <description> + This option determines the effects of double-clicking on the title bar. + + Current valid options are 'toggle-shade', which will shade/unshade the + window, 'toggle-maximize' which will maximize/unmaximize the window, + 'toggle-maximize-horizontally' and 'toggle-maximize-vertically' + which will maximize/unmaximize the window in that direction only, + 'minimize' which will minimize the window, 'shade' which will roll + the window up, 'menu' which will display the window menu, + 'lower' which will put the window behind all the others, + and 'none' which will not do anything. + </description> + <!-- For compatibility with GConf strings (Metacity 2.30) --> + <aliases> + <alias value="toggle_shade" target="toggle-shade"/> + <alias value="toggle_maximize" target="toggle-maximize"/> + <alias value="toggle_maximize_horizontally" + target="toggle-maximize-horizontally"/> + <alias value="toggle_maximize_vertically" + target="toggle-maximize-vertically"/> + </aliases> + </key> + <key name="action-middle-click-titlebar" + enum="org.gnome.desktop.GDesktopTitlebarAction"> + <default>'none'</default> + <summary>Action on title bar middle-click</summary> + <description> + This option determines the effects of middle-clicking on the title bar. + + Current valid options are 'toggle-shade', which will shade/unshade + the window, 'toggle-maximize' which will maximize/unmaximize the window, + 'toggle-maximize-horizontally' and 'toggle-maximize-vertically' + which will maximize/unmaximize the window in that direction only, + 'minimize' which will minimize the window, 'shade' which will roll + the window up, 'menu' which will display the window menu, + 'lower' which will put the window behind all the others, + and 'none' which will not do anything. + </description> + <!-- For compatibility with GConf strings (Metacity 2.30) --> + <aliases> + <alias value="toggle_shade" target="toggle-shade"/> + <alias value="toggle_maximize" target="toggle-maximize"/> + <alias value="toggle_maximize_horizontally" + target="toggle-maximize-horizontally"/> + <alias value="toggle_maximize_vertically" + target="toggle-maximize-vertically"/> + </aliases> + </key> + <key name="action-right-click-titlebar" + enum="org.gnome.desktop.GDesktopTitlebarAction"> + <default>'menu'</default> + <summary>Action on title bar right-click</summary> + <description> + This option determines the effects of right-clicking on the title bar. + + Current valid options are 'toggle-shade', which will shade/unshade + the window, 'toggle-maximize' which will maximize/unmaximize + the window, 'toggle-maximize-horizontally' and + 'toggle-maximize-vertically' which will maximize/unmaximize + the window in that direction only, 'minimize' which will minimize + the window, 'shade' which will roll the window up, + 'menu' which will display the window menu, 'lower' which will put + the window behind all the others, and 'none' which will not do anything. + </description> + <!-- For compatibility with GConf strings (Metacity 2.30) --> + <aliases> + <alias value="toggle_shade" target="toggle-shade"/> + <alias value="toggle_maximize" target="toggle-maximize"/> + <alias value="toggle_maximize_horizontally" + target="toggle-maximize-horizontally"/> + <alias value="toggle_maximize_vertically" + target="toggle-maximize-vertically"/> + </aliases> + </key> + <key name="auto-raise" type="b"> + <default>false</default> + <summary>Automatically raises the focused window</summary> + <description> + If set to true, and the focus mode is either "sloppy" or "mouse" + then the focused window will be automatically raised after a delay + specified by the auto-raise-delay key. This is not related to clicking + on a window to raise it, nor to entering a window during drag-and-drop. + </description> + </key> + <key name="auto-raise-delay" type="i"> + <range min="0" max="10000"/> + <default>500</default> + <summary>Delay in milliseconds for the auto raise option</summary> + <description> + The time delay before raising a window if auto-raise is set to true. + The delay is given in thousandths of a second. + </description> + </key> + <key name="theme" type="s"> + <default>'Adwaita'</default> + <summary>Current theme</summary> + <description> + The theme determines the appearance of window borders, titlebar, + and so forth. + + DEPRECATED: This key is deprecated and ignored. + </description> + </key> + <key name="titlebar-uses-system-font" type="b"> + <default>true</default> + <summary>Use standard system font in window titles</summary> + <description> + If true, ignore the titlebar-font option, and use the standard + application font for window titles. + </description> + </key> + <key name="titlebar-font" type="s"> + <default>'Cantarell Bold 11'</default> + <summary>Window title font</summary> + <description> + A font description string describing a font for window titlebars. + The size from the description will only be used if the + titlebar-font-size option is set to 0. Also, this option is disabled + if the titlebar-uses-desktop-font option is set to true. + </description> + </key> + <key name="num-workspaces" type="i"> + <default>4</default> + <range min="1" max="36"/> + <summary>Number of workspaces</summary> + <description> + Number of workspaces. Must be more than zero, and has a fixed maximum + to prevent making the desktop unusable by accidentally asking + for too many workspaces. + </description> + </key> + <key name="audible-bell" type="b"> + <default>true</default> + <summary>System Bell is Audible</summary> + <description> + Determines whether applications or the system can generate audible + 'beeps'; may be used in conjunction with 'visual bell' + to allow silent 'beeps'. + </description> + </key> + <key name="visual-bell" type="b"> + <default>false</default> + <summary>Enable Visual Bell</summary> + <description> + Turns on a visual indication when an application or the system issues + a 'bell' or 'beep'; useful for the hard-of-hearing and for use + in noisy environments. + </description> + </key> + <key name="visual-bell-type" + enum="org.gnome.desktop.GDesktopVisualBellType"> + <default>'fullscreen-flash'</default> + <summary>Visual Bell Type</summary> + <description> + Tells the WM how to implement the visual indication that the + system bell or another application 'bell' indicator has been rung. + + Currently there are two valid values, "fullscreen-flash", which + causes a fullscreen white-black flash, and "frame-flash" which + causes the titlebar of the application which sent the bell signal + to flash. + + If the application which sent the bell is unknown (as is usually + the case for the default "system beep"), the currently focused + window's titlebar is flashed. + </description> + <!-- For compatibility with GConf strings (Metacity 2.30) --> + <aliases> + <alias value="fullscreen" target="fullscreen-flash"/> + <alias value="frame_flash" target="frame-flash"/> + </aliases> + </key> + <key name="disable-workarounds" type="b"> + <default>false</default> + <summary> + Disable misfeatures that are required by old or broken applications + </summary> + <description> + Some applications disregard specifications in ways that result in + window manager misfeatures. This option puts the WM in a + rigorously correct mode, which gives a more consistent + user interface, provided one does not need to run any + misbehaving applications. + </description> + </key> + <key name="workspace-names" type="as"> + <default>[]</default> + <summary>The names of the workspaces</summary> + <description> + Defines the names that should be assigned to workspaces. + If the list is too long for the current number of workspaces, + names in excess will be ignored. If the list is too short, or + includes empty names, missing values will be replaced with the + default ("Workspace N"). + </description> + </key> + </schema> + +</schemalist> diff --git a/Release/share/glib-2.0/schemas/org.gnome.devhelp.gschema.xml b/Release/share/glib-2.0/schemas/org.gnome.devhelp.gschema.xml new file mode 100644 index 0000000..5c86b6f --- /dev/null +++ b/Release/share/glib-2.0/schemas/org.gnome.devhelp.gschema.xml @@ -0,0 +1,111 @@ +<schemalist gettext-domain="devhelp"> + <schema id="org.gnome.devhelp" path="/org/gnome/devhelp/"> + <child name="state" schema="org.gnome.devhelp.state"/> + <child name="fonts" schema="org.gnome.devhelp.fonts"/> + </schema> + <schema id="org.gnome.devhelp.state" path="/org/gnome/devhelp/state/"> + <child name="main" schema="org.gnome.devhelp.state.main"/> + <child name="assistant" schema="org.gnome.devhelp.state.assistant"/> + </schema> + <schema id="org.gnome.devhelp.state.main" path="/org/gnome/devhelp/state/main/"> + <child name="window" schema="org.gnome.devhelp.state.main.window"/> + <child name="paned" schema="org.gnome.devhelp.state.main.paned"/> + <child name="search-notebook" schema="org.gnome.devhelp.state.main.search-notebook"/> + <child name="contents" schema="org.gnome.devhelp.state.main.contents"/> + </schema> + <schema id="org.gnome.devhelp.state.main.window" path="/org/gnome/devhelp/state/main/window/"> + <key name="maximized" type="b"> + <default>false</default> + <summary>Main window maximized state</summary> + <description>Whether the main window should start maximized.</description> + </key> + <key name="width" type="i"> + <default>700</default> + <summary>Width of the main window</summary> + <description>The width of the main window.</description> + </key> + <key name="height" type="i"> + <default>500</default> + <summary>Height of main window</summary> + <description>The height of the main window.</description> + </key> + <key name="x-position" type="i"> + <default>100</default> + <summary>X position of main window</summary> + <description>The X position of the main window.</description> + </key> + <key name="y-position" type="i"> + <default>100</default> + <summary>Y position of main window</summary> + <description>The Y position of the main window.</description> + </key> + </schema> + <schema id="org.gnome.devhelp.state.main.paned" path="/org/gnome/devhelp/state/main/paned/"> + <key name="position" type="i"> + <default>250</default> + <summary>Width of the index and search pane</summary> + <description>The width of the index and search pane.</description> + </key> + </schema> + <schema id="org.gnome.devhelp.state.main.search-notebook" path="/org/gnome/devhelp/state/main/search-notebook/"> + <key name="selected-tab" type="s"> + <default>'content'</default> + <summary>Selected tab: "content" or "search"</summary> + <description>Which of the tabs is selected: "content" or "search".</description> + </key> + </schema> + <schema id="org.gnome.devhelp.state.main.contents" path="/org/gnome/devhelp/state/main/contents/"> + <key name="books-disabled" type="as"> + <default>[]</default> + <summary>Books disabled</summary> + <description>List of books disabled by the user.</description> + </key> + <key name="group-books-by-language" type="b"> + <default>false</default> + <summary>Group by language</summary> + <description>Whether books should be grouped by language in the UI</description> + </key> + </schema> + <schema id="org.gnome.devhelp.state.assistant" path="/org/gnome/devhelp/state/assistant/"> + <child name="window" schema="org.gnome.devhelp.state.assistant.window"/> + </schema> + <schema id="org.gnome.devhelp.state.assistant.window" path="/org/gnome/devhelp/state/assistant/window/"> + <key name="width" type="i"> + <default>350</default> + <summary>Width of the assistant window</summary> + <description>The width of the assistant window.</description> + </key> + <key name="height" type="i"> + <default>400</default> + <summary>Height of assistant window</summary> + <description>The height of the assistant window.</description> + </key> + <key name="x-position" type="i"> + <default>0</default> + <summary>X position of assistant window</summary> + <description>The X position of the assistant window.</description> + </key> + <key name="y-position" type="i"> + <default>0</default> + <summary>Y position of assistant window</summary> + <description>The Y position of the assistant window.</description> + </key> + </schema> + <schema id="org.gnome.devhelp.fonts" path="/org/gnome/devhelp/fonts/"> + <key name="use-system-fonts" type="b"> + <default>true</default> + <summary>Use system fonts</summary> + <description>Use the system default fonts.</description> + </key> + <key name="variable-font" type="s"> + <default>'Sans 12'</default> + <summary>Font for text</summary> + <description>Font for text with variable width.</description> + </key> + <key name="fixed-font" type="s"> + <default>'Monospace 12'</default> + <summary>Font for fixed width text</summary> + <description>Font for text with fixed width, such as code examples.</description> + </key> + </schema> +</schemalist> diff --git a/Release/share/glib-2.0/schemas/org.gnome.system.locale.gschema.xml b/Release/share/glib-2.0/schemas/org.gnome.system.locale.gschema.xml new file mode 100644 index 0000000..3630a7c --- /dev/null +++ b/Release/share/glib-2.0/schemas/org.gnome.system.locale.gschema.xml @@ -0,0 +1,11 @@ +<schemalist gettext-domain="gsettings-desktop-schemas"> + <schema id="org.gnome.system.locale" path="/system/locale/"> + <key name="region" type="s"> + <default>''</default> + <summary>The locale to use for dates / numbers formats</summary> + <description> + Specify the locale to be used for displaying dates, times and numbers formats. + </description> + </key> + </schema> +</schemalist> diff --git a/Release/share/glib-2.0/schemas/org.gnome.system.location.gschema.xml b/Release/share/glib-2.0/schemas/org.gnome.system.location.gschema.xml new file mode 100644 index 0000000..3207a4c --- /dev/null +++ b/Release/share/glib-2.0/schemas/org.gnome.system.location.gschema.xml @@ -0,0 +1,24 @@ +<schemalist gettext-domain="gsettings-desktop-schemas"> + <schema id="org.gnome.system.location" + path="/org/gnome/system/location/"> + <key type="b" name="enabled"> + <default>false</default> + <summary>Geolocation services are enabled.</summary> + <description> + If true, applications are allowed to access location information. + </description> + </key> + <key name="max-accuracy-level" enum="org.gnome.desktop.GDesktopLocationAccuracyLevel"> + <default>'exact'</default> + <summary>The maximum accuracy level of location.</summary> + <description> + Configures the maximum level of location accuracy applications are + allowed to see. Valid options are 'country', 'city', 'neighborhood', + 'street', and 'exact' (typically requires GPS receiver). Please keep in + mind that this only controls what GeoClue will allow applications to see + and they can find user's location on their own using network resources + (albeit with street-level accuracy at best). + </description> + </key> + </schema> +</schemalist> diff --git a/Release/share/glib-2.0/schemas/org.gnome.system.proxy.gschema.xml b/Release/share/glib-2.0/schemas/org.gnome.system.proxy.gschema.xml new file mode 100644 index 0000000..a72ef41 --- /dev/null +++ b/Release/share/glib-2.0/schemas/org.gnome.system.proxy.gschema.xml @@ -0,0 +1,169 @@ +<schemalist gettext-domain="gsettings-desktop-schemas"> + <schema id="org.gnome.system.proxy" path="/system/proxy/"> + <child name="http" schema="org.gnome.system.proxy.http"/> + <child name="https" schema="org.gnome.system.proxy.https"/> + <child name="ftp" schema="org.gnome.system.proxy.ftp"/> + <child name="socks" schema="org.gnome.system.proxy.socks"/> + <key name="mode" enum="org.gnome.desktop.GDesktopProxyMode"> + <default>'none'</default> + <summary>Proxy configuration mode</summary> + <description> + Select the proxy configuration mode. Supported values are "none", + "manual", "auto". + + If this is "none", then proxies are not used. + + If it is "auto", the autoconfiguration URL described by the + "autoconfig-url" key is used. + + If it is "manual", then the proxies described by + "/system/proxy/http", "/system/proxy/https", + "/system/proxy/ftp" and "/system/proxy/socks" will be used. + Each of the 4 proxy types is enabled if its "host" key is + non-empty and its "port" key is non-0. + + If an http proxy is configured, but an https proxy is not, + then the http proxy is also used for https. + + If a SOCKS proxy is configured, it is used for all protocols, + except that the http, https, and ftp proxy settings override + it for those protocols only. + </description> + </key> + <key name="autoconfig-url" type="s"> + <default>''</default> + <summary>Automatic proxy configuration URL</summary> + <description> + URL that provides proxy configuration values. When mode is + "auto", this URL is used to look up proxy information for all + protocols. + </description> + </key> + <key name="ignore-hosts" type="as"> + <default>[ 'localhost', '127.0.0.0/8', '::1' ]</default> + <summary>Non-proxy hosts</summary> + <description> + This key contains a list of hosts which are connected to directly, + rather than via the proxy (if it is active). The values can be + hostnames, domains (using an initial wildcard like *.foo.com), IP host + addresses (both IPv4 and IPv6) and network addresses with a netmask + (something like 192.168.0.0/24). + </description> + </key> + <key name="use-same-proxy" type="b"> + <default>true</default> + <summary>Unused; ignore</summary> + <description> + This key is not used, and should not be read or modified. + </description> + </key> + </schema> + <schema id="org.gnome.system.proxy.http" path="/system/proxy/http/"> + <key name="enabled" type="b"> + <default>false</default> + <summary>Unused; ignore</summary> + <description> + This key is not used; HTTP proxying is enabled when the host + key is non-empty and the port is non-0. + </description> + </key> + <key name="host" type="s"> + <default>''</default> + <summary>HTTP proxy host name</summary> + <description> + The machine name to proxy HTTP through. + </description> + </key> + <key name="port" type="i"> + <range min="0" max="65535"/> + <default>8080</default> + <summary>HTTP proxy port</summary> + <description> + The port on the machine defined by "/system/proxy/http/host" that you + proxy through. + </description> + </key> + <key name="use-authentication" type="b"> + <default>false</default> + <summary>Authenticate proxy server connections</summary> + <description> + If true, then connections to the proxy server require authentication. + The username/password combo is defined by + "/system/proxy/http/authentication-user" and + "/system/proxy/http/authentication-password". + + This applies only to the http proxy; when using a separate + https proxy, there is currently no way to specify that it + should use authentication. + </description> + </key> + <key name="authentication-user" type="s"> + <default>''</default> + <summary>HTTP proxy username</summary> + <description> + User name to pass as authentication when doing HTTP proxying. + </description> + </key> + <key name="authentication-password" type="s"> + <default>''</default> + <summary>HTTP proxy password</summary> + <description> + Password to pass as authentication when doing HTTP proxying. + </description> + </key> + </schema> + <schema id="org.gnome.system.proxy.https" path="/system/proxy/https/"> + <key name="host" type="s"> + <default>''</default> + <summary>Secure HTTP proxy host name</summary> + <description> + The machine name to proxy secure HTTP through. + </description> + </key> + <key name="port" type="i"> + <range min="0" max="65535"/> + <default>0</default> + <summary>Secure HTTP proxy port</summary> + <description> + The port on the machine defined by "/system/proxy/https/host" that you + proxy through. + </description> + </key> + </schema> + <schema id="org.gnome.system.proxy.ftp" path="/system/proxy/ftp/"> + <key name="host" type="s"> + <default>''</default> + <summary>FTP proxy host name</summary> + <description> + The machine name to proxy FTP through. + </description> + </key> + <key name="port" type="i"> + <range min="0" max="65535"/> + <default>0</default> + <summary>FTP proxy port</summary> + <description> + The port on the machine defined by "/system/proxy/ftp/host" that you + proxy through. + </description> + </key> + </schema> + <schema id="org.gnome.system.proxy.socks" path="/system/proxy/socks/"> + <key name="host" type="s"> + <default>''</default> + <summary>SOCKS proxy host name</summary> + <description> + The machine name to use as a SOCKS proxy. + </description> + </key> + <key name="port" type="i"> + <range min="0" max="65535"/> + <default>0</default> + <summary>SOCKS proxy port</summary> + <description> + The port on the machine defined by "/system/proxy/socks/host" that you + proxy through. + </description> + </key> + </schema> +</schemalist> diff --git a/Release/share/glib-2.0/schemas/org.gtk.Demo.gschema.xml b/Release/share/glib-2.0/schemas/org.gtk.Demo.gschema.xml new file mode 100644 index 0000000..93be088 --- /dev/null +++ b/Release/share/glib-2.0/schemas/org.gtk.Demo.gschema.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<schemalist> + + <enum id='org.gtk.Demo.Color'> + <value nick='red' value='0'/> + <value nick='green' value='1'/> + <value nick='blue' value='2'/> + </enum> + + <schema id='org.gtk.Demo' path='/org/gtk/Demo/'> + <key name='color' enum='org.gtk.Demo.Color'> + <default>'red'</default> + </key> + <key name='window-size' type='(ii)'> + <default>(-1, -1)</default> + </key> + <key name='maximized' type='b'> + <default>false</default> + </key> + <key name='fullscreen' type='b'> + <default>false</default> + </key> + </schema> + +</schemalist> diff --git a/Release/share/glib-2.0/schemas/org.gtk.Settings.ColorChooser.gschema.xml b/Release/share/glib-2.0/schemas/org.gtk.Settings.ColorChooser.gschema.xml new file mode 100644 index 0000000..6270d33 --- /dev/null +++ b/Release/share/glib-2.0/schemas/org.gtk.Settings.ColorChooser.gschema.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<schemalist> + + <schema id='org.gtk.Settings.ColorChooser' path='/org/gtk/settings/color-chooser/'> + <key name='custom-colors' type='a(dddd)'> + <default>[]</default> + <summary>Custom colors</summary> + <description> + An array of custom colors to show in the color chooser. Each color is + specified as a tuple of four doubles, specifying RGBA values between + 0 and 1. + </description> + </key> + <key name='selected-color' type='(bdddd)'> + <default>(false,1.0,1.0,1.0,1.0)</default> + <summary>The selected color</summary> + <description> + The selected color, described as a tuple whose first member is a + boolean that is true if a color was selected, and the remaining + four members are four doubles, specifying RGBA values between + 0 and 1. + </description> + </key> + </schema> + +</schemalist> diff --git a/Release/share/glib-2.0/schemas/org.gtk.Settings.Debug.gschema.xml b/Release/share/glib-2.0/schemas/org.gtk.Settings.Debug.gschema.xml new file mode 100644 index 0000000..abb985d --- /dev/null +++ b/Release/share/glib-2.0/schemas/org.gtk.Settings.Debug.gschema.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?> +<schemalist> + + <schema id='org.gtk.Settings.Debug' path='/org/gtk/settings/debug/'> + <key name='enable-inspector-keybinding' type='b'> + <default>false</default> + <summary>Enable inspector keybinding</summary> + <description> + If this setting is true, GTK+ lets the user open an interactive + debugging window with a keybinding. The default shortcuts for + the keybinding are Control-Shift-I and Control-Shift-D. + </description> + </key> + <key name='inspector-warning' type='b'> + <default>true</default> + <summary>Inspector warning</summary> + <description> + If this setting is true, GTK+ shows a warning before letting + the user use the interactive debugger. + </description> + </key> + </schema> + +</schemalist> + diff --git a/Release/share/glib-2.0/schemas/org.gtk.Settings.FileChooser.gschema.xml b/Release/share/glib-2.0/schemas/org.gtk.Settings.FileChooser.gschema.xml new file mode 100644 index 0000000..c3753f2 --- /dev/null +++ b/Release/share/glib-2.0/schemas/org.gtk.Settings.FileChooser.gschema.xml @@ -0,0 +1,153 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright © 2010 Christian Persch + + This library is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1, or (at your option) + any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library. If not, see <http://www.gnu.org/licenses/>. +--> +<schemalist> + + <enum id='org.gtk.Settings.FileChooser.LocationMode'> + <value nick='path-bar' value='0'/> + <value nick='filename-entry' value='1'/> + </enum> + + <enum id='org.gtk.Settings.FileChooser.SortColumn'> + <value nick='name' value='0'/> + <value nick='size' value='1'/> + <value nick='modified' value='2'/> + </enum> + + <enum id='org.gtk.Settings.FileChooser.SortOrder'> + <value nick='ascending' value='0'/> + <value nick='descending' value='1'/> + </enum> + + <enum id='org.gtk.Settings.FileChooser.StartupMode'> + <value nick='recent' value='0'/> + <value nick='cwd' value='1'/> + </enum> + + <enum id='org.gtk.Settings.FileChooser.ClockFormat'> + <value nick='24h' value='0'/> + <value nick='12h' value='1'/> + </enum> + + <enum id='org.gtk.Settings.FileChooser.DateFormat'> + <value nick='regular' value='0'/> + <value nick='with-time' value='1'/> + </enum> + + <schema id='org.gtk.Settings.FileChooser' path='/org/gtk/settings/file-chooser/'> + <key name='last-folder-uri' type='s'> + <default>""</default> + </key> + <key name='location-mode' enum='org.gtk.Settings.FileChooser.LocationMode'> + <default>'path-bar'</default> + <summary>Location mode</summary> + <description> + Controls whether the file chooser shows just a path bar, or a visible entry + for the filename as well, for the benefit of typing-oriented users. The + possible values for these modes are "path-bar" and "filename-entry". + </description> + </key> + <key name='show-hidden' type='b'> + <default>false</default> + <summary>Show hidden files</summary> + <description> + Controls whether the file chooser shows hidden files or not. + </description> + </key> + <key type="b" name="sort-directories-first"> + <default>false</default> + <summary>Show folders first</summary> + <description> + If set to true, then folders are shown before files in the list. + </description> + </key> + <key name='expand-folders' type='b'> + <default>false</default> + <summary>Expand folders</summary> + <description>This key is deprecated; do not use it.</description> + </key> + <key name='show-size-column' type='b'> + <default>true</default> + <summary>Show file sizes</summary> + <description> + Controls whether the file chooser shows a column with file sizes. + </description> + </key> + <key name='sort-column' enum='org.gtk.Settings.FileChooser.SortColumn'> + <default>'name'</default> + <summary>Sort column</summary> + <description> + Can be one of "name", "modified", or "size". It controls + which of the columns in the file chooser is used for sorting + the list of files. + </description> + </key> + <key name='sort-order' enum='org.gtk.Settings.FileChooser.SortOrder'> + <default>'ascending'</default> + <summary>Sort order</summary> + <description> + Can be one of the strings "ascending" or "descending". + </description> + </key> + <key name='window-position' type='(ii)'> + <default>(-1, -1)</default> + <summary>Window position</summary> + <description> + The (x, y) coordinates of the upper-left corner of the GtkFileChooserDialog's + window. + </description> + </key> + <key name='window-size' type='(ii)'> + <default>(-1, -1)</default> + <summary>Window size</summary> + <description> + The size (width, height) of the GtkFileChooserDialog's window, in pixels. + </description> + </key> + <key name='startup-mode' enum='org.gtk.Settings.FileChooser.StartupMode'> + <default>'recent'</default> + <summary>Startup mode</summary> + <description> + Either "recent" or "cwd"; controls whether the file chooser + starts up showing the list of recently-used files, or the + contents of the current working directory. + </description> + </key> + <key name='sidebar-width' type='i'> + <default>148</default> + <summary>Sidebar width</summary> + <description> + Width in pixels of the file chooser's places sidebar. + </description> + </key> + <key name="clock-format" enum="org.gtk.Settings.FileChooser.ClockFormat"> + <default>'24h'</default> + <summary>Time format</summary> + <description> + Whether the time is shown in 24h or 12h format. + </description> + </key> + <key name="date-format" enum="org.gtk.Settings.FileChooser.DateFormat"> + <default>'regular'</default> + <summary>Date format</summary> + <description> + The amount of detail to show in the Modified column. + </description> + </key> + </schema> + +</schemalist> diff --git a/Release/share/glib-2.0/schemas/org.gtk.exampleapp.gschema.xml b/Release/share/glib-2.0/schemas/org.gtk.exampleapp.gschema.xml new file mode 100644 index 0000000..a6929a8 --- /dev/null +++ b/Release/share/glib-2.0/schemas/org.gtk.exampleapp.gschema.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?> +<schemalist> + <schema path="/org/gtk/exampleapp/" id="org.gtk.exampleapp"> + <key name="font" type="s"> + <default>'Monospace 12'</default> + <summary>Font</summary> + <description>The font to be used for content.</description> + </key> + <key name="transition" type="s"> + <choices> + <choice value='none'/> + <choice value='crossfade'/> + <choice value='slide-left-right'/> + </choices> + <default>'none'</default> + <summary>Transition</summary> + <description>The transition to use when switching tabs.</description> + </key> + <key name="show-words" type="b"> + <default>false</default> + <summary>Show words</summary> + <description>Whether to show a word list in the sidebar</description> + </key> + </schema> +</schemalist> |