|
Packit Service |
c6b9b0 |
#!/usr/bin/python
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
# glib-client-gen.py: "I Can't Believe It's Not dbus-binding-tool"
|
|
Packit Service |
c6b9b0 |
#
|
|
Packit Service |
c6b9b0 |
# Generate GLib client wrappers from the Telepathy specification.
|
|
Packit Service |
c6b9b0 |
# The master copy of this program is in the telepathy-glib repository -
|
|
Packit Service |
c6b9b0 |
# please make any changes there.
|
|
Packit Service |
c6b9b0 |
#
|
|
Packit Service |
c6b9b0 |
# Copyright (C) 2006-2008 Collabora Ltd. <http://www.collabora.co.uk/>
|
|
Packit Service |
c6b9b0 |
#
|
|
Packit Service |
c6b9b0 |
# This library is free software; you can redistribute it and/or
|
|
Packit Service |
c6b9b0 |
# modify it under the terms of the GNU Lesser General Public
|
|
Packit Service |
c6b9b0 |
# License as published by the Free Software Foundation; either
|
|
Packit Service |
c6b9b0 |
# version 2.1 of the License, or (at your option) any later version.
|
|
Packit Service |
c6b9b0 |
#
|
|
Packit Service |
c6b9b0 |
# This library is distributed in the hope that it will be useful,
|
|
Packit Service |
c6b9b0 |
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit Service |
c6b9b0 |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit Service |
c6b9b0 |
# Lesser General Public License for more details.
|
|
Packit Service |
c6b9b0 |
#
|
|
Packit Service |
c6b9b0 |
# You should have received a copy of the GNU Lesser General Public
|
|
Packit Service |
c6b9b0 |
# License along with this library; if not, write to the Free Software
|
|
Packit Service |
c6b9b0 |
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
import sys
|
|
Packit Service |
c6b9b0 |
import os.path
|
|
Packit Service |
c6b9b0 |
import xml.dom.minidom
|
|
Packit Service |
c6b9b0 |
from getopt import gnu_getopt
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
from libtpcodegen import file_set_contents, key_by_name, u
|
|
Packit Service |
c6b9b0 |
from libglibcodegen import Signature, type_to_gtype, \
|
|
Packit Service |
c6b9b0 |
get_docstring, xml_escape, get_deprecated
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
NS_TP = "http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0"
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
class Generator(object):
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
def __init__(self, dom, prefix, basename, opts):
|
|
Packit Service |
c6b9b0 |
self.dom = dom
|
|
Packit Service |
c6b9b0 |
self.__header = []
|
|
Packit Service |
c6b9b0 |
self.__body = []
|
|
Packit Service |
c6b9b0 |
self.__docs = []
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.prefix_lc = prefix.lower()
|
|
Packit Service |
c6b9b0 |
self.prefix_uc = prefix.upper()
|
|
Packit Service |
c6b9b0 |
self.prefix_mc = prefix.replace('_', '')
|
|
Packit Service |
c6b9b0 |
self.basename = basename
|
|
Packit Service |
c6b9b0 |
self.group = opts.get('--group', None)
|
|
Packit Service |
c6b9b0 |
self.iface_quark_prefix = opts.get('--iface-quark-prefix', None)
|
|
Packit Service |
c6b9b0 |
self.tp_proxy_api = tuple(map(int,
|
|
Packit Service |
c6b9b0 |
opts.get('--tp-proxy-api', '0').split('.')))
|
|
Packit Service |
c6b9b0 |
self.proxy_cls = opts.get('--subclass', 'TpProxy') + ' *'
|
|
Packit Service |
c6b9b0 |
self.proxy_arg = opts.get('--subclass', 'void') + ' *'
|
|
Packit Service |
c6b9b0 |
self.proxy_assert = opts.get('--subclass-assert', 'TP_IS_PROXY')
|
|
Packit Service |
c6b9b0 |
self.proxy_doc = ('A #%s or subclass'
|
|
Packit Service |
c6b9b0 |
% opts.get('--subclass', 'TpProxy'))
|
|
Packit Service |
c6b9b0 |
if self.proxy_arg == 'void *':
|
|
Packit Service |
c6b9b0 |
self.proxy_arg = 'gpointer '
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.reentrant_symbols = set()
|
|
Packit Service |
c6b9b0 |
try:
|
|
Packit Service |
c6b9b0 |
filename = opts['--generate-reentrant']
|
|
Packit Service |
c6b9b0 |
with open(filename, 'r') as f:
|
|
Packit Service |
c6b9b0 |
for line in f.readlines():
|
|
Packit Service |
c6b9b0 |
self.reentrant_symbols.add(line.strip())
|
|
Packit Service |
c6b9b0 |
except KeyError:
|
|
Packit Service |
c6b9b0 |
pass
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.deprecate_reentrant = opts.get('--deprecate-reentrant', None)
|
|
Packit Service |
c6b9b0 |
self.deprecation_attribute = opts.get('--deprecation-attribute',
|
|
Packit Service |
c6b9b0 |
'G_GNUC_DEPRECATED')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.guard = opts.get('--guard', None)
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
def h(self, s):
|
|
Packit Service |
c6b9b0 |
self.__header.append(s)
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
def b(self, s):
|
|
Packit Service |
c6b9b0 |
self.__body.append(s)
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
def d(self, s):
|
|
Packit Service |
c6b9b0 |
self.__docs.append(s)
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
def get_iface_quark(self):
|
|
Packit Service |
c6b9b0 |
assert self.iface_dbus is not None
|
|
Packit Service |
c6b9b0 |
assert self.iface_uc is not None
|
|
Packit Service |
c6b9b0 |
if self.iface_quark_prefix is None:
|
|
Packit Service |
c6b9b0 |
return 'g_quark_from_static_string (\"%s\")' % self.iface_dbus
|
|
Packit Service |
c6b9b0 |
else:
|
|
Packit Service |
c6b9b0 |
return '%s_%s' % (self.iface_quark_prefix, self.iface_uc)
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
def do_signal(self, iface, signal):
|
|
Packit Service |
c6b9b0 |
iface_lc = iface.lower()
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
member = signal.getAttribute('name')
|
|
Packit Service |
c6b9b0 |
member_lc = signal.getAttribute('tp:name-for-bindings')
|
|
Packit Service |
c6b9b0 |
if member != member_lc.replace('_', ''):
|
|
Packit Service |
c6b9b0 |
raise AssertionError('Signal %s tp:name-for-bindings (%s) does '
|
|
Packit Service |
c6b9b0 |
'not match' % (member, member_lc))
|
|
Packit Service |
c6b9b0 |
member_lc = member_lc.lower()
|
|
Packit Service |
c6b9b0 |
member_uc = member_lc.upper()
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
arg_count = 0
|
|
Packit Service |
c6b9b0 |
args = []
|
|
Packit Service |
c6b9b0 |
out_args = []
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
for arg in signal.getElementsByTagName('arg'):
|
|
Packit Service |
c6b9b0 |
name = arg.getAttribute('name')
|
|
Packit Service |
c6b9b0 |
type = arg.getAttribute('type')
|
|
Packit Service |
c6b9b0 |
tp_type = arg.getAttribute('tp:type')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if not name:
|
|
Packit Service |
c6b9b0 |
name = 'arg%u' % arg_count
|
|
Packit Service |
c6b9b0 |
arg_count += 1
|
|
Packit Service |
c6b9b0 |
else:
|
|
Packit Service |
c6b9b0 |
name = 'arg_%s' % name
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
info = type_to_gtype(type)
|
|
Packit Service |
c6b9b0 |
args.append((name, info, tp_type, arg))
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
callback_name = ('%s_%s_signal_callback_%s'
|
|
Packit Service |
c6b9b0 |
% (self.prefix_lc, iface_lc, member_lc))
|
|
Packit Service |
c6b9b0 |
collect_name = ('_%s_%s_collect_args_of_%s'
|
|
Packit Service |
c6b9b0 |
% (self.prefix_lc, iface_lc, member_lc))
|
|
Packit Service |
c6b9b0 |
invoke_name = ('_%s_%s_invoke_callback_for_%s'
|
|
Packit Service |
c6b9b0 |
% (self.prefix_lc, iface_lc, member_lc))
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
# Example:
|
|
Packit Service |
c6b9b0 |
#
|
|
Packit Service |
c6b9b0 |
# typedef void (*tp_cli_connection_signal_callback_new_channel)
|
|
Packit Service |
c6b9b0 |
# (TpConnection *proxy, const gchar *arg_object_path,
|
|
Packit Service |
c6b9b0 |
# const gchar *arg_channel_type, guint arg_handle_type,
|
|
Packit Service |
c6b9b0 |
# guint arg_handle, gboolean arg_suppress_handler,
|
|
Packit Service |
c6b9b0 |
# gpointer user_data, GObject *weak_object);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.d('/**')
|
|
Packit Service |
c6b9b0 |
self.d(' * %s:' % callback_name)
|
|
Packit Service |
c6b9b0 |
self.d(' * @proxy: The proxy on which %s_%s_connect_to_%s ()'
|
|
Packit Service |
c6b9b0 |
% (self.prefix_lc, iface_lc, member_lc))
|
|
Packit Service |
c6b9b0 |
self.d(' * was called')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
for arg in args:
|
|
Packit Service |
c6b9b0 |
name, info, tp_type, elt = arg
|
|
Packit Service |
c6b9b0 |
ctype, gtype, marshaller, pointer = info
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
docs = get_docstring(elt) or '(Undocumented)'
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if ctype == 'guint ' and tp_type != '':
|
|
Packit Service |
c6b9b0 |
docs += ' (#%s)' % ('Tp' + tp_type.replace('_', ''))
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.d(' * @%s: %s' % (name, xml_escape(docs)))
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.d(' * @user_data: User-supplied data')
|
|
Packit Service |
c6b9b0 |
self.d(' * @weak_object: User-supplied weakly referenced object')
|
|
Packit Service |
c6b9b0 |
self.d(' *')
|
|
Packit Service |
c6b9b0 |
self.d(' * Represents the signature of a callback for the signal %s.'
|
|
Packit Service |
c6b9b0 |
% member)
|
|
Packit Service |
c6b9b0 |
self.d(' */')
|
|
Packit Service |
c6b9b0 |
self.d('')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.h('typedef void (*%s) (%sproxy,'
|
|
Packit Service |
c6b9b0 |
% (callback_name, self.proxy_cls))
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
for arg in args:
|
|
Packit Service |
c6b9b0 |
name, info, tp_type, elt = arg
|
|
Packit Service |
c6b9b0 |
ctype, gtype, marshaller, pointer = info
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
const = pointer and 'const ' or ''
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.h(' %s%s%s,' % (const, ctype, name))
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.h(' gpointer user_data, GObject *weak_object);')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if args:
|
|
Packit Service |
c6b9b0 |
self.b('static void')
|
|
Packit Service |
c6b9b0 |
self.b('%s (DBusGProxy *proxy G_GNUC_UNUSED,' % collect_name)
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
for arg in args:
|
|
Packit Service |
c6b9b0 |
name, info, tp_type, elt = arg
|
|
Packit Service |
c6b9b0 |
ctype, gtype, marshaller, pointer = info
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
const = pointer and 'const ' or ''
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b(' %s%s%s,' % (const, ctype, name))
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b(' TpProxySignalConnection *sc)')
|
|
Packit Service |
c6b9b0 |
self.b('{')
|
|
Packit Service |
c6b9b0 |
self.b(' GValueArray *args = g_value_array_new (%d);' % len(args))
|
|
Packit Service |
c6b9b0 |
self.b(' GValue blank = { 0 };')
|
|
Packit Service |
c6b9b0 |
self.b(' guint i;')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_init (&blank, G_TYPE_INT);')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
self.b(' for (i = 0; i < %d; i++)' % len(args))
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_array_append (args, &blank);')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
for i, arg in enumerate(args):
|
|
Packit Service |
c6b9b0 |
name, info, tp_type, elt = arg
|
|
Packit Service |
c6b9b0 |
ctype, gtype, marshaller, pointer = info
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_unset (args->values + %d);' % i)
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_init (args->values + %d, %s);' % (i, gtype))
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if gtype == 'G_TYPE_STRING':
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_set_string (args->values + %d, %s);'
|
|
Packit Service |
c6b9b0 |
% (i, name))
|
|
Packit Service |
c6b9b0 |
elif marshaller == 'BOXED':
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_set_boxed (args->values + %d, %s);'
|
|
Packit Service |
c6b9b0 |
% (i, name))
|
|
Packit Service |
c6b9b0 |
elif gtype == 'G_TYPE_UCHAR':
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_set_uchar (args->values + %d, %s);'
|
|
Packit Service |
c6b9b0 |
% (i, name))
|
|
Packit Service |
c6b9b0 |
elif gtype == 'G_TYPE_BOOLEAN':
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_set_boolean (args->values + %d, %s);'
|
|
Packit Service |
c6b9b0 |
% (i, name))
|
|
Packit Service |
c6b9b0 |
elif gtype == 'G_TYPE_INT':
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_set_int (args->values + %d, %s);'
|
|
Packit Service |
c6b9b0 |
% (i, name))
|
|
Packit Service |
c6b9b0 |
elif gtype == 'G_TYPE_UINT':
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_set_uint (args->values + %d, %s);'
|
|
Packit Service |
c6b9b0 |
% (i, name))
|
|
Packit Service |
c6b9b0 |
elif gtype == 'G_TYPE_INT64':
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_set_int (args->values + %d, %s);'
|
|
Packit Service |
c6b9b0 |
% (i, name))
|
|
Packit Service |
c6b9b0 |
elif gtype == 'G_TYPE_UINT64':
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_set_uint64 (args->values + %d, %s);'
|
|
Packit Service |
c6b9b0 |
% (i, name))
|
|
Packit Service |
c6b9b0 |
elif gtype == 'G_TYPE_DOUBLE':
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_set_double (args->values + %d, %s);'
|
|
Packit Service |
c6b9b0 |
% (i, name))
|
|
Packit Service |
c6b9b0 |
else:
|
|
Packit Service |
c6b9b0 |
assert False, ("Don't know how to put %s in a GValue"
|
|
Packit Service |
c6b9b0 |
% gtype)
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b(' tp_proxy_signal_connection_v0_take_results (sc, args);')
|
|
Packit Service |
c6b9b0 |
self.b('}')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b('static void')
|
|
Packit Service |
c6b9b0 |
self.b('%s (TpProxy *tpproxy,' % invoke_name)
|
|
Packit Service |
c6b9b0 |
self.b(' GError *error G_GNUC_UNUSED,')
|
|
Packit Service |
c6b9b0 |
self.b(' GValueArray *args,')
|
|
Packit Service |
c6b9b0 |
self.b(' GCallback generic_callback,')
|
|
Packit Service |
c6b9b0 |
self.b(' gpointer user_data,')
|
|
Packit Service |
c6b9b0 |
self.b(' GObject *weak_object)')
|
|
Packit Service |
c6b9b0 |
self.b('{')
|
|
Packit Service |
c6b9b0 |
self.b(' %s callback =' % callback_name)
|
|
Packit Service |
c6b9b0 |
self.b(' (%s) generic_callback;' % callback_name)
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
self.b(' if (callback != NULL)')
|
|
Packit Service |
c6b9b0 |
self.b(' callback (g_object_ref (tpproxy),')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
# FIXME: factor out into a function
|
|
Packit Service |
c6b9b0 |
for i, arg in enumerate(args):
|
|
Packit Service |
c6b9b0 |
name, info, tp_type, elt = arg
|
|
Packit Service |
c6b9b0 |
ctype, gtype, marshaller, pointer = info
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if marshaller == 'BOXED':
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_get_boxed (args->values + %d),' % i)
|
|
Packit Service |
c6b9b0 |
elif gtype == 'G_TYPE_STRING':
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_get_string (args->values + %d),' % i)
|
|
Packit Service |
c6b9b0 |
elif gtype == 'G_TYPE_UCHAR':
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_get_uchar (args->values + %d),' % i)
|
|
Packit Service |
c6b9b0 |
elif gtype == 'G_TYPE_BOOLEAN':
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_get_boolean (args->values + %d),' % i)
|
|
Packit Service |
c6b9b0 |
elif gtype == 'G_TYPE_UINT':
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_get_uint (args->values + %d),' % i)
|
|
Packit Service |
c6b9b0 |
elif gtype == 'G_TYPE_INT':
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_get_int (args->values + %d),' % i)
|
|
Packit Service |
c6b9b0 |
elif gtype == 'G_TYPE_UINT64':
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_get_uint64 (args->values + %d),' % i)
|
|
Packit Service |
c6b9b0 |
elif gtype == 'G_TYPE_INT64':
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_get_int64 (args->values + %d),' % i)
|
|
Packit Service |
c6b9b0 |
elif gtype == 'G_TYPE_DOUBLE':
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_get_double (args->values + %d),' % i)
|
|
Packit Service |
c6b9b0 |
else:
|
|
Packit Service |
c6b9b0 |
assert False, "Don't know how to get %s from a GValue" % gtype
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b(' user_data,')
|
|
Packit Service |
c6b9b0 |
self.b(' weak_object);')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if len(args) > 0:
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_array_free (args);')
|
|
Packit Service |
c6b9b0 |
else:
|
|
Packit Service |
c6b9b0 |
self.b(' if (args != NULL)')
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_array_free (args);')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b(' g_object_unref (tpproxy);')
|
|
Packit Service |
c6b9b0 |
self.b('}')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
# Example:
|
|
Packit Service |
c6b9b0 |
#
|
|
Packit Service |
c6b9b0 |
# TpProxySignalConnection *
|
|
Packit Service |
c6b9b0 |
# tp_cli_connection_connect_to_new_channel
|
|
Packit Service |
c6b9b0 |
# (TpConnection *proxy,
|
|
Packit Service |
c6b9b0 |
# tp_cli_connection_signal_callback_new_channel callback,
|
|
Packit Service |
c6b9b0 |
# gpointer user_data,
|
|
Packit Service |
c6b9b0 |
# GDestroyNotify destroy);
|
|
Packit Service |
c6b9b0 |
#
|
|
Packit Service |
c6b9b0 |
# destroy is invoked when the signal becomes disconnected. This
|
|
Packit Service |
c6b9b0 |
# is either because the signal has been disconnected explicitly
|
|
Packit Service |
c6b9b0 |
# by the user, because the TpProxy has become invalid and
|
|
Packit Service |
c6b9b0 |
# emitted the 'invalidated' signal, or because the weakly referenced
|
|
Packit Service |
c6b9b0 |
# object has gone away.
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.d('/**')
|
|
Packit Service |
c6b9b0 |
self.d(' * %s_%s_connect_to_%s:'
|
|
Packit Service |
c6b9b0 |
% (self.prefix_lc, iface_lc, member_lc))
|
|
Packit Service |
c6b9b0 |
self.d(' * @proxy: %s' % self.proxy_doc)
|
|
Packit Service |
c6b9b0 |
self.d(' * @callback: Callback to be called when the signal is')
|
|
Packit Service |
c6b9b0 |
self.d(' * received')
|
|
Packit Service |
c6b9b0 |
self.d(' * @user_data: User-supplied data for the callback')
|
|
Packit Service |
c6b9b0 |
self.d(' * @destroy: Destructor for the user-supplied data, which')
|
|
Packit Service |
c6b9b0 |
self.d(' * will be called when this signal is disconnected, or')
|
|
Packit Service |
c6b9b0 |
self.d(' * before this function returns %NULL')
|
|
Packit Service |
c6b9b0 |
self.d(' * @weak_object: A #GObject which will be weakly referenced; ')
|
|
Packit Service |
c6b9b0 |
self.d(' * if it is destroyed, this callback will automatically be')
|
|
Packit Service |
c6b9b0 |
self.d(' * disconnected')
|
|
Packit Service |
c6b9b0 |
self.d(' * @error: If not %NULL, used to raise an error if %NULL is')
|
|
Packit Service |
c6b9b0 |
self.d(' * returned')
|
|
Packit Service |
c6b9b0 |
self.d(' *')
|
|
Packit Service |
c6b9b0 |
self.d(' * Connect a handler to the signal %s.' % member)
|
|
Packit Service |
c6b9b0 |
self.d(' *')
|
|
Packit Service |
c6b9b0 |
self.d(' * %s' % xml_escape(get_docstring(signal) or '(Undocumented)'))
|
|
Packit Service |
c6b9b0 |
self.d(' *')
|
|
Packit Service |
c6b9b0 |
self.d(' * Returns: a #TpProxySignalConnection containing all of the')
|
|
Packit Service |
c6b9b0 |
self.d(' * above, which can be used to disconnect the signal; or')
|
|
Packit Service |
c6b9b0 |
self.d(' * %NULL if the proxy does not have the desired interface')
|
|
Packit Service |
c6b9b0 |
self.d(' * or has become invalid.')
|
|
Packit Service |
c6b9b0 |
self.d(' */')
|
|
Packit Service |
c6b9b0 |
self.d('')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.h('TpProxySignalConnection *%s_%s_connect_to_%s (%sproxy,'
|
|
Packit Service |
c6b9b0 |
% (self.prefix_lc, iface_lc, member_lc, self.proxy_arg))
|
|
Packit Service |
c6b9b0 |
self.h(' %s callback,' % callback_name)
|
|
Packit Service |
c6b9b0 |
self.h(' gpointer user_data,')
|
|
Packit Service |
c6b9b0 |
self.h(' GDestroyNotify destroy,')
|
|
Packit Service |
c6b9b0 |
self.h(' GObject *weak_object,')
|
|
Packit Service |
c6b9b0 |
self.h(' GError **error);')
|
|
Packit Service |
c6b9b0 |
self.h('')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b('TpProxySignalConnection *')
|
|
Packit Service |
c6b9b0 |
self.b('%s_%s_connect_to_%s (%sproxy,'
|
|
Packit Service |
c6b9b0 |
% (self.prefix_lc, iface_lc, member_lc, self.proxy_arg))
|
|
Packit Service |
c6b9b0 |
self.b(' %s callback,' % callback_name)
|
|
Packit Service |
c6b9b0 |
self.b(' gpointer user_data,')
|
|
Packit Service |
c6b9b0 |
self.b(' GDestroyNotify destroy,')
|
|
Packit Service |
c6b9b0 |
self.b(' GObject *weak_object,')
|
|
Packit Service |
c6b9b0 |
self.b(' GError **error)')
|
|
Packit Service |
c6b9b0 |
self.b('{')
|
|
Packit Service |
c6b9b0 |
self.b(' GType expected_types[%d] = {' % (len(args) + 1))
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
for arg in args:
|
|
Packit Service |
c6b9b0 |
name, info, tp_type, elt = arg
|
|
Packit Service |
c6b9b0 |
ctype, gtype, marshaller, pointer = info
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b(' %s,' % gtype)
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b(' G_TYPE_INVALID };')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
self.b(' g_return_val_if_fail (%s (proxy), NULL);'
|
|
Packit Service |
c6b9b0 |
% self.proxy_assert)
|
|
Packit Service |
c6b9b0 |
self.b(' g_return_val_if_fail (callback != NULL, NULL);')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
self.b(' return tp_proxy_signal_connection_v0_new ((TpProxy *) proxy,')
|
|
Packit Service |
c6b9b0 |
self.b(' %s, \"%s\",' % (self.get_iface_quark(), member))
|
|
Packit Service |
c6b9b0 |
self.b(' expected_types,')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if args:
|
|
Packit Service |
c6b9b0 |
self.b(' G_CALLBACK (%s),' % collect_name)
|
|
Packit Service |
c6b9b0 |
else:
|
|
Packit Service |
c6b9b0 |
self.b(' NULL, /* no args => no collector function */')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b(' %s,' % invoke_name)
|
|
Packit Service |
c6b9b0 |
self.b(' G_CALLBACK (callback), user_data, destroy,')
|
|
Packit Service |
c6b9b0 |
self.b(' weak_object, error);')
|
|
Packit Service |
c6b9b0 |
self.b('}')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
def do_method(self, iface, method):
|
|
Packit Service |
c6b9b0 |
iface_lc = iface.lower()
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
member = method.getAttribute('name')
|
|
Packit Service |
c6b9b0 |
member_lc = method.getAttribute('tp:name-for-bindings')
|
|
Packit Service |
c6b9b0 |
if member != member_lc.replace('_', ''):
|
|
Packit Service |
c6b9b0 |
raise AssertionError('Method %s tp:name-for-bindings (%s) does '
|
|
Packit Service |
c6b9b0 |
'not match' % (member, member_lc))
|
|
Packit Service |
c6b9b0 |
member_lc = member_lc.lower()
|
|
Packit Service |
c6b9b0 |
member_uc = member_lc.upper()
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
in_count = 0
|
|
Packit Service |
c6b9b0 |
ret_count = 0
|
|
Packit Service |
c6b9b0 |
in_args = []
|
|
Packit Service |
c6b9b0 |
out_args = []
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
for arg in method.getElementsByTagName('arg'):
|
|
Packit Service |
c6b9b0 |
name = arg.getAttribute('name')
|
|
Packit Service |
c6b9b0 |
direction = arg.getAttribute('direction')
|
|
Packit Service |
c6b9b0 |
type = arg.getAttribute('type')
|
|
Packit Service |
c6b9b0 |
tp_type = arg.getAttribute('tp:type')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if direction != 'out':
|
|
Packit Service |
c6b9b0 |
if not name:
|
|
Packit Service |
c6b9b0 |
name = 'in%u' % in_count
|
|
Packit Service |
c6b9b0 |
in_count += 1
|
|
Packit Service |
c6b9b0 |
else:
|
|
Packit Service |
c6b9b0 |
name = 'in_%s' % name
|
|
Packit Service |
c6b9b0 |
else:
|
|
Packit Service |
c6b9b0 |
if not name:
|
|
Packit Service |
c6b9b0 |
name = 'out%u' % ret_count
|
|
Packit Service |
c6b9b0 |
ret_count += 1
|
|
Packit Service |
c6b9b0 |
else:
|
|
Packit Service |
c6b9b0 |
name = 'out_%s' % name
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
info = type_to_gtype(type)
|
|
Packit Service |
c6b9b0 |
if direction != 'out':
|
|
Packit Service |
c6b9b0 |
in_args.append((name, info, tp_type, arg))
|
|
Packit Service |
c6b9b0 |
else:
|
|
Packit Service |
c6b9b0 |
out_args.append((name, info, tp_type, arg))
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
# Async reply callback type
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
# Example:
|
|
Packit Service |
c6b9b0 |
# void (*tp_cli_properties_interface_callback_for_get_properties)
|
|
Packit Service |
c6b9b0 |
# (TpProxy *proxy,
|
|
Packit Service |
c6b9b0 |
# const GPtrArray *out0,
|
|
Packit Service |
c6b9b0 |
# const GError *error,
|
|
Packit Service |
c6b9b0 |
# gpointer user_data,
|
|
Packit Service |
c6b9b0 |
# GObject *weak_object);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.d('/**')
|
|
Packit Service |
c6b9b0 |
self.d(' * %s_%s_callback_for_%s:'
|
|
Packit Service |
c6b9b0 |
% (self.prefix_lc, iface_lc, member_lc))
|
|
Packit Service |
c6b9b0 |
self.d(' * @proxy: the proxy on which the call was made')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
for arg in out_args:
|
|
Packit Service |
c6b9b0 |
name, info, tp_type, elt = arg
|
|
Packit Service |
c6b9b0 |
ctype, gtype, marshaller, pointer = info
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
docs = xml_escape(get_docstring(elt) or '(Undocumented)')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if ctype == 'guint ' and tp_type != '':
|
|
Packit Service |
c6b9b0 |
docs += ' (#%s)' % ('Tp' + tp_type.replace('_', ''))
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.d(' * @%s: Used to return an \'out\' argument if @error is '
|
|
Packit Service |
c6b9b0 |
'%%NULL: %s'
|
|
Packit Service |
c6b9b0 |
% (name, docs))
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.d(' * @error: %NULL on success, or an error on failure')
|
|
Packit Service |
c6b9b0 |
self.d(' * @user_data: user-supplied data')
|
|
Packit Service |
c6b9b0 |
self.d(' * @weak_object: user-supplied object')
|
|
Packit Service |
c6b9b0 |
self.d(' *')
|
|
Packit Service |
c6b9b0 |
self.d(' * Signature of the callback called when a %s method call'
|
|
Packit Service |
c6b9b0 |
% member)
|
|
Packit Service |
c6b9b0 |
self.d(' * succeeds or fails.')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
deprecated = method.getElementsByTagName('tp:deprecated')
|
|
Packit Service |
c6b9b0 |
if deprecated:
|
|
Packit Service |
c6b9b0 |
d = deprecated[0]
|
|
Packit Service |
c6b9b0 |
self.d(' *')
|
|
Packit Service |
c6b9b0 |
self.d(' * Deprecated: %s' % xml_escape(get_deprecated(d)))
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.d(' */')
|
|
Packit Service |
c6b9b0 |
self.d('')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
callback_name = '%s_%s_callback_for_%s' % (self.prefix_lc, iface_lc,
|
|
Packit Service |
c6b9b0 |
member_lc)
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.h('typedef void (*%s) (%sproxy,'
|
|
Packit Service |
c6b9b0 |
% (callback_name, self.proxy_cls))
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
for arg in out_args:
|
|
Packit Service |
c6b9b0 |
name, info, tp_type, elt = arg
|
|
Packit Service |
c6b9b0 |
ctype, gtype, marshaller, pointer = info
|
|
Packit Service |
c6b9b0 |
const = pointer and 'const ' or ''
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.h(' %s%s%s,' % (const, ctype, name))
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.h(' const GError *error, gpointer user_data,')
|
|
Packit Service |
c6b9b0 |
self.h(' GObject *weak_object);')
|
|
Packit Service |
c6b9b0 |
self.h('')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
# Async callback implementation
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
invoke_callback = '_%s_%s_invoke_callback_%s' % (self.prefix_lc,
|
|
Packit Service |
c6b9b0 |
iface_lc,
|
|
Packit Service |
c6b9b0 |
member_lc)
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
collect_callback = '_%s_%s_collect_callback_%s' % (self.prefix_lc,
|
|
Packit Service |
c6b9b0 |
iface_lc,
|
|
Packit Service |
c6b9b0 |
member_lc)
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
# The callback called by dbus-glib; this ends the call and collects
|
|
Packit Service |
c6b9b0 |
# the results into a GValueArray.
|
|
Packit Service |
c6b9b0 |
self.b('static void')
|
|
Packit Service |
c6b9b0 |
self.b('%s (DBusGProxy *proxy,' % collect_callback)
|
|
Packit Service |
c6b9b0 |
self.b(' DBusGProxyCall *call,')
|
|
Packit Service |
c6b9b0 |
self.b(' gpointer user_data)')
|
|
Packit Service |
c6b9b0 |
self.b('{')
|
|
Packit Service |
c6b9b0 |
self.b(' GError *error = NULL;')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if len(out_args) > 0:
|
|
Packit Service |
c6b9b0 |
self.b(' GValueArray *args;')
|
|
Packit Service |
c6b9b0 |
self.b(' GValue blank = { 0 };')
|
|
Packit Service |
c6b9b0 |
self.b(' guint i;')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
for arg in out_args:
|
|
Packit Service |
c6b9b0 |
name, info, tp_type, elt = arg
|
|
Packit Service |
c6b9b0 |
ctype, gtype, marshaller, pointer = info
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
# "We handle variants specially; the caller is expected to
|
|
Packit Service |
c6b9b0 |
# have already allocated storage for them". Thanks,
|
|
Packit Service |
c6b9b0 |
# dbus-glib...
|
|
Packit Service |
c6b9b0 |
if gtype == 'G_TYPE_VALUE':
|
|
Packit Service |
c6b9b0 |
self.b(' GValue *%s = g_new0 (GValue, 1);' % name)
|
|
Packit Service |
c6b9b0 |
else:
|
|
Packit Service |
c6b9b0 |
self.b(' %s%s;' % (ctype, name))
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
self.b(' dbus_g_proxy_end_call (proxy, call, &error,')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
for arg in out_args:
|
|
Packit Service |
c6b9b0 |
name, info, tp_type, elt = arg
|
|
Packit Service |
c6b9b0 |
ctype, gtype, marshaller, pointer = info
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if gtype == 'G_TYPE_VALUE':
|
|
Packit Service |
c6b9b0 |
self.b(' %s, %s,' % (gtype, name))
|
|
Packit Service |
c6b9b0 |
else:
|
|
Packit Service |
c6b9b0 |
self.b(' %s, &%s,' % (gtype, name))
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b(' G_TYPE_INVALID);')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if len(out_args) == 0:
|
|
Packit Service |
c6b9b0 |
self.b(' tp_proxy_pending_call_v0_take_results (user_data, error,'
|
|
Packit Service |
c6b9b0 |
'NULL);')
|
|
Packit Service |
c6b9b0 |
else:
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
self.b(' if (error != NULL)')
|
|
Packit Service |
c6b9b0 |
self.b(' {')
|
|
Packit Service |
c6b9b0 |
self.b(' tp_proxy_pending_call_v0_take_results (user_data, error,')
|
|
Packit Service |
c6b9b0 |
self.b(' NULL);')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
for arg in out_args:
|
|
Packit Service |
c6b9b0 |
name, info, tp_type, elt = arg
|
|
Packit Service |
c6b9b0 |
ctype, gtype, marshaller, pointer = info
|
|
Packit Service |
c6b9b0 |
if gtype == 'G_TYPE_VALUE':
|
|
Packit Service |
c6b9b0 |
self.b(' g_free (%s);' % name)
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b(' return;')
|
|
Packit Service |
c6b9b0 |
self.b(' }')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
self.b(' args = g_value_array_new (%d);' % len(out_args))
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_init (&blank, G_TYPE_INT);')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
self.b(' for (i = 0; i < %d; i++)' % len(out_args))
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_array_append (args, &blank);')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
for i, arg in enumerate(out_args):
|
|
Packit Service |
c6b9b0 |
name, info, tp_type, elt = arg
|
|
Packit Service |
c6b9b0 |
ctype, gtype, marshaller, pointer = info
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_unset (args->values + %d);' % i)
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_init (args->values + %d, %s);' % (i, gtype))
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if gtype == 'G_TYPE_STRING':
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_take_string (args->values + %d, %s);'
|
|
Packit Service |
c6b9b0 |
% (i, name))
|
|
Packit Service |
c6b9b0 |
elif marshaller == 'BOXED':
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_take_boxed (args->values + %d, %s);'
|
|
Packit Service |
c6b9b0 |
% (i, name))
|
|
Packit Service |
c6b9b0 |
elif gtype == 'G_TYPE_UCHAR':
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_set_uchar (args->values + %d, %s);'
|
|
Packit Service |
c6b9b0 |
% (i, name))
|
|
Packit Service |
c6b9b0 |
elif gtype == 'G_TYPE_BOOLEAN':
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_set_boolean (args->values + %d, %s);'
|
|
Packit Service |
c6b9b0 |
% (i, name))
|
|
Packit Service |
c6b9b0 |
elif gtype == 'G_TYPE_INT':
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_set_int (args->values + %d, %s);'
|
|
Packit Service |
c6b9b0 |
% (i, name))
|
|
Packit Service |
c6b9b0 |
elif gtype == 'G_TYPE_UINT':
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_set_uint (args->values + %d, %s);'
|
|
Packit Service |
c6b9b0 |
% (i, name))
|
|
Packit Service |
c6b9b0 |
elif gtype == 'G_TYPE_INT64':
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_set_int (args->values + %d, %s);'
|
|
Packit Service |
c6b9b0 |
% (i, name))
|
|
Packit Service |
c6b9b0 |
elif gtype == 'G_TYPE_UINT64':
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_set_uint (args->values + %d, %s);'
|
|
Packit Service |
c6b9b0 |
% (i, name))
|
|
Packit Service |
c6b9b0 |
elif gtype == 'G_TYPE_DOUBLE':
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_set_double (args->values + %d, %s);'
|
|
Packit Service |
c6b9b0 |
% (i, name))
|
|
Packit Service |
c6b9b0 |
else:
|
|
Packit Service |
c6b9b0 |
assert False, ("Don't know how to put %s in a GValue"
|
|
Packit Service |
c6b9b0 |
% gtype)
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b(' tp_proxy_pending_call_v0_take_results (user_data, '
|
|
Packit Service |
c6b9b0 |
'NULL, args);')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b('}')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b('static void')
|
|
Packit Service |
c6b9b0 |
self.b('%s (TpProxy *self,' % invoke_callback)
|
|
Packit Service |
c6b9b0 |
self.b(' GError *error,')
|
|
Packit Service |
c6b9b0 |
self.b(' GValueArray *args,')
|
|
Packit Service |
c6b9b0 |
self.b(' GCallback generic_callback,')
|
|
Packit Service |
c6b9b0 |
self.b(' gpointer user_data,')
|
|
Packit Service |
c6b9b0 |
self.b(' GObject *weak_object)')
|
|
Packit Service |
c6b9b0 |
self.b('{')
|
|
Packit Service |
c6b9b0 |
self.b(' %s callback = (%s) generic_callback;'
|
|
Packit Service |
c6b9b0 |
% (callback_name, callback_name))
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
self.b(' if (error != NULL)')
|
|
Packit Service |
c6b9b0 |
self.b(' {')
|
|
Packit Service |
c6b9b0 |
self.b(' callback ((%s) self,' % self.proxy_cls)
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
for arg in out_args:
|
|
Packit Service |
c6b9b0 |
name, info, tp_type, elt = arg
|
|
Packit Service |
c6b9b0 |
ctype, gtype, marshaller, pointer = info
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if marshaller == 'BOXED' or pointer:
|
|
Packit Service |
c6b9b0 |
self.b(' NULL,')
|
|
Packit Service |
c6b9b0 |
elif gtype == 'G_TYPE_DOUBLE':
|
|
Packit Service |
c6b9b0 |
self.b(' 0.0,')
|
|
Packit Service |
c6b9b0 |
else:
|
|
Packit Service |
c6b9b0 |
self.b(' 0,')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b(' error, user_data, weak_object);')
|
|
Packit Service |
c6b9b0 |
self.b(' g_error_free (error);')
|
|
Packit Service |
c6b9b0 |
self.b(' return;')
|
|
Packit Service |
c6b9b0 |
self.b(' }')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b(' callback ((%s) self,' % self.proxy_cls)
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
# FIXME: factor out into a function
|
|
Packit Service |
c6b9b0 |
for i, arg in enumerate(out_args):
|
|
Packit Service |
c6b9b0 |
name, info, tp_type, elt = arg
|
|
Packit Service |
c6b9b0 |
ctype, gtype, marshaller, pointer = info
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if marshaller == 'BOXED':
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_get_boxed (args->values + %d),' % i)
|
|
Packit Service |
c6b9b0 |
elif gtype == 'G_TYPE_STRING':
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_get_string (args->values + %d),' % i)
|
|
Packit Service |
c6b9b0 |
elif gtype == 'G_TYPE_UCHAR':
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_get_uchar (args->values + %d),' % i)
|
|
Packit Service |
c6b9b0 |
elif gtype == 'G_TYPE_BOOLEAN':
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_get_boolean (args->values + %d),' % i)
|
|
Packit Service |
c6b9b0 |
elif gtype == 'G_TYPE_UINT':
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_get_uint (args->values + %d),' % i)
|
|
Packit Service |
c6b9b0 |
elif gtype == 'G_TYPE_INT':
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_get_int (args->values + %d),' % i)
|
|
Packit Service |
c6b9b0 |
elif gtype == 'G_TYPE_UINT64':
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_get_uint64 (args->values + %d),' % i)
|
|
Packit Service |
c6b9b0 |
elif gtype == 'G_TYPE_INT64':
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_get_int64 (args->values + %d),' % i)
|
|
Packit Service |
c6b9b0 |
elif gtype == 'G_TYPE_DOUBLE':
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_get_double (args->values + %d),' % i)
|
|
Packit Service |
c6b9b0 |
else:
|
|
Packit Service |
c6b9b0 |
assert False, "Don't know how to get %s from a GValue" % gtype
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b(' error, user_data, weak_object);')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if len(out_args) > 0:
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_array_free (args);')
|
|
Packit Service |
c6b9b0 |
else:
|
|
Packit Service |
c6b9b0 |
self.b(' if (args != NULL)')
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_array_free (args);')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b('}')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
# Async stub
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
# Example:
|
|
Packit Service |
c6b9b0 |
# TpProxyPendingCall *
|
|
Packit Service |
c6b9b0 |
# tp_cli_properties_interface_call_get_properties
|
|
Packit Service |
c6b9b0 |
# (gpointer proxy,
|
|
Packit Service |
c6b9b0 |
# gint timeout_ms,
|
|
Packit Service |
c6b9b0 |
# const GArray *in_properties,
|
|
Packit Service |
c6b9b0 |
# tp_cli_properties_interface_callback_for_get_properties callback,
|
|
Packit Service |
c6b9b0 |
# gpointer user_data,
|
|
Packit Service |
c6b9b0 |
# GDestroyNotify *destructor);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.h('TpProxyPendingCall *%s_%s_call_%s (%sproxy,'
|
|
Packit Service |
c6b9b0 |
% (self.prefix_lc, iface_lc, member_lc, self.proxy_arg))
|
|
Packit Service |
c6b9b0 |
self.h(' gint timeout_ms,')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.d('/**')
|
|
Packit Service |
c6b9b0 |
self.d(' * %s_%s_call_%s:'
|
|
Packit Service |
c6b9b0 |
% (self.prefix_lc, iface_lc, member_lc))
|
|
Packit Service |
c6b9b0 |
self.d(' * @proxy: the #TpProxy')
|
|
Packit Service |
c6b9b0 |
self.d(' * @timeout_ms: the timeout in milliseconds, or -1 to use the')
|
|
Packit Service |
c6b9b0 |
self.d(' * default')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
for arg in in_args:
|
|
Packit Service |
c6b9b0 |
name, info, tp_type, elt = arg
|
|
Packit Service |
c6b9b0 |
ctype, gtype, marshaller, pointer = info
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
docs = xml_escape(get_docstring(elt) or '(Undocumented)')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if ctype == 'guint ' and tp_type != '':
|
|
Packit Service |
c6b9b0 |
docs += ' (#%s)' % ('Tp' + tp_type.replace('_', ''))
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.d(' * @%s: Used to pass an \'in\' argument: %s'
|
|
Packit Service |
c6b9b0 |
% (name, docs))
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.d(' * @callback: called when the method call succeeds or fails;')
|
|
Packit Service |
c6b9b0 |
self.d(' * may be %NULL to make a "fire and forget" call with no ')
|
|
Packit Service |
c6b9b0 |
self.d(' * reply tracking')
|
|
Packit Service |
c6b9b0 |
self.d(' * @user_data: user-supplied data passed to the callback;')
|
|
Packit Service |
c6b9b0 |
self.d(' * must be %NULL if @callback is %NULL')
|
|
Packit Service |
c6b9b0 |
self.d(' * @destroy: called with the user_data as argument, after the')
|
|
Packit Service |
c6b9b0 |
self.d(' * call has succeeded, failed or been cancelled;')
|
|
Packit Service |
c6b9b0 |
self.d(' * must be %NULL if @callback is %NULL')
|
|
Packit Service |
c6b9b0 |
self.d(' * @weak_object: If not %NULL, a #GObject which will be ')
|
|
Packit Service |
c6b9b0 |
self.d(' * weakly referenced; if it is destroyed, this call ')
|
|
Packit Service |
c6b9b0 |
self.d(' * will automatically be cancelled. Must be %NULL if ')
|
|
Packit Service |
c6b9b0 |
self.d(' * @callback is %NULL')
|
|
Packit Service |
c6b9b0 |
self.d(' *')
|
|
Packit Service |
c6b9b0 |
self.d(' * Start a %s method call.' % member)
|
|
Packit Service |
c6b9b0 |
self.d(' *')
|
|
Packit Service |
c6b9b0 |
self.d(' * %s' % xml_escape(get_docstring(method) or '(Undocumented)'))
|
|
Packit Service |
c6b9b0 |
self.d(' *')
|
|
Packit Service |
c6b9b0 |
self.d(' * Returns: a #TpProxyPendingCall representing the call in')
|
|
Packit Service |
c6b9b0 |
self.d(' * progress. It is borrowed from the object, and will become')
|
|
Packit Service |
c6b9b0 |
self.d(' * invalid when the callback is called, the call is')
|
|
Packit Service |
c6b9b0 |
self.d(' * cancelled or the #TpProxy becomes invalid.')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
deprecated = method.getElementsByTagName('tp:deprecated')
|
|
Packit Service |
c6b9b0 |
if deprecated:
|
|
Packit Service |
c6b9b0 |
d = deprecated[0]
|
|
Packit Service |
c6b9b0 |
self.d(' *')
|
|
Packit Service |
c6b9b0 |
self.d(' * Deprecated: %s' % xml_escape(get_deprecated(d)))
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.d(' */')
|
|
Packit Service |
c6b9b0 |
self.d('')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b('TpProxyPendingCall *\n%s_%s_call_%s (%sproxy,'
|
|
Packit Service |
c6b9b0 |
% (self.prefix_lc, iface_lc, member_lc, self.proxy_arg))
|
|
Packit Service |
c6b9b0 |
self.b(' gint timeout_ms,')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
for arg in in_args:
|
|
Packit Service |
c6b9b0 |
name, info, tp_type, elt = arg
|
|
Packit Service |
c6b9b0 |
ctype, gtype, marshaller, pointer = info
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
const = pointer and 'const ' or ''
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.h(' %s%s%s,' % (const, ctype, name))
|
|
Packit Service |
c6b9b0 |
self.b(' %s%s%s,' % (const, ctype, name))
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.h(' %s callback,' % callback_name)
|
|
Packit Service |
c6b9b0 |
self.h(' gpointer user_data,')
|
|
Packit Service |
c6b9b0 |
self.h(' GDestroyNotify destroy,')
|
|
Packit Service |
c6b9b0 |
self.h(' GObject *weak_object);')
|
|
Packit Service |
c6b9b0 |
self.h('')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b(' %s callback,' % callback_name)
|
|
Packit Service |
c6b9b0 |
self.b(' gpointer user_data,')
|
|
Packit Service |
c6b9b0 |
self.b(' GDestroyNotify destroy,')
|
|
Packit Service |
c6b9b0 |
self.b(' GObject *weak_object)')
|
|
Packit Service |
c6b9b0 |
self.b('{')
|
|
Packit Service |
c6b9b0 |
self.b(' GError *error = NULL;')
|
|
Packit Service |
c6b9b0 |
self.b(' GQuark interface = %s;' % self.get_iface_quark())
|
|
Packit Service |
c6b9b0 |
self.b(' DBusGProxy *iface;')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
self.b(' g_return_val_if_fail (%s (proxy), NULL);'
|
|
Packit Service |
c6b9b0 |
% self.proxy_assert)
|
|
Packit Service |
c6b9b0 |
self.b(' g_return_val_if_fail (callback != NULL || '
|
|
Packit Service |
c6b9b0 |
'user_data == NULL, NULL);')
|
|
Packit Service |
c6b9b0 |
self.b(' g_return_val_if_fail (callback != NULL || '
|
|
Packit Service |
c6b9b0 |
'destroy == NULL, NULL);')
|
|
Packit Service |
c6b9b0 |
self.b(' g_return_val_if_fail (callback != NULL || '
|
|
Packit Service |
c6b9b0 |
'weak_object == NULL, NULL);')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
self.b(' G_GNUC_BEGIN_IGNORE_DEPRECATIONS')
|
|
Packit Service |
c6b9b0 |
self.b(' iface = tp_proxy_borrow_interface_by_id (')
|
|
Packit Service |
c6b9b0 |
self.b(' (TpProxy *) proxy,')
|
|
Packit Service |
c6b9b0 |
self.b(' interface, &error);')
|
|
Packit Service |
c6b9b0 |
self.b(' G_GNUC_END_IGNORE_DEPRECATIONS')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
self.b(' if (iface == NULL)')
|
|
Packit Service |
c6b9b0 |
self.b(' {')
|
|
Packit Service |
c6b9b0 |
self.b(' if (callback != NULL)')
|
|
Packit Service |
c6b9b0 |
self.b(' callback (proxy,')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
for arg in out_args:
|
|
Packit Service |
c6b9b0 |
name, info, tp_type, elt = arg
|
|
Packit Service |
c6b9b0 |
ctype, gtype, marshaller, pointer = info
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if pointer:
|
|
Packit Service |
c6b9b0 |
self.b(' NULL,')
|
|
Packit Service |
c6b9b0 |
else:
|
|
Packit Service |
c6b9b0 |
self.b(' 0,')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b(' error, user_data, weak_object);')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
self.b(' if (destroy != NULL)')
|
|
Packit Service |
c6b9b0 |
self.b(' destroy (user_data);')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
self.b(' g_error_free (error);')
|
|
Packit Service |
c6b9b0 |
self.b(' return NULL;')
|
|
Packit Service |
c6b9b0 |
self.b(' }')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
self.b(' if (callback == NULL)')
|
|
Packit Service |
c6b9b0 |
self.b(' {')
|
|
Packit Service |
c6b9b0 |
self.b(' dbus_g_proxy_call_no_reply (iface, "%s",' % member)
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
for arg in in_args:
|
|
Packit Service |
c6b9b0 |
name, info, tp_type, elt = arg
|
|
Packit Service |
c6b9b0 |
ctype, gtype, marshaller, pointer = info
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
const = pointer and 'const ' or ''
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b(' %s, %s,' % (gtype, name))
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b(' G_TYPE_INVALID);')
|
|
Packit Service |
c6b9b0 |
self.b(' return NULL;')
|
|
Packit Service |
c6b9b0 |
self.b(' }')
|
|
Packit Service |
c6b9b0 |
self.b(' else')
|
|
Packit Service |
c6b9b0 |
self.b(' {')
|
|
Packit Service |
c6b9b0 |
self.b(' TpProxyPendingCall *data;')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
self.b(' data = tp_proxy_pending_call_v0_new ((TpProxy *) proxy,')
|
|
Packit Service |
c6b9b0 |
self.b(' interface, "%s", iface,' % member)
|
|
Packit Service |
c6b9b0 |
self.b(' %s,' % invoke_callback)
|
|
Packit Service |
c6b9b0 |
self.b(' G_CALLBACK (callback), user_data, destroy,')
|
|
Packit Service |
c6b9b0 |
self.b(' weak_object, FALSE);')
|
|
Packit Service |
c6b9b0 |
self.b(' tp_proxy_pending_call_v0_take_pending_call (data,')
|
|
Packit Service |
c6b9b0 |
self.b(' dbus_g_proxy_begin_call_with_timeout (iface,')
|
|
Packit Service |
c6b9b0 |
self.b(' "%s",' % member)
|
|
Packit Service |
c6b9b0 |
self.b(' %s,' % collect_callback)
|
|
Packit Service |
c6b9b0 |
self.b(' data,')
|
|
Packit Service |
c6b9b0 |
self.b(' tp_proxy_pending_call_v0_completed,')
|
|
Packit Service |
c6b9b0 |
self.b(' timeout_ms,')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
for arg in in_args:
|
|
Packit Service |
c6b9b0 |
name, info, tp_type, elt = arg
|
|
Packit Service |
c6b9b0 |
ctype, gtype, marshaller, pointer = info
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
const = pointer and 'const ' or ''
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b(' %s, %s,' % (gtype, name))
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b(' G_TYPE_INVALID));')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
self.b(' return data;')
|
|
Packit Service |
c6b9b0 |
self.b(' }')
|
|
Packit Service |
c6b9b0 |
self.b('}')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.do_method_reentrant(method, iface_lc, member, member_lc,
|
|
Packit Service |
c6b9b0 |
in_args, out_args, collect_callback)
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
# leave a gap for the end of the method
|
|
Packit Service |
c6b9b0 |
self.d('')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
self.h('')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
def do_method_reentrant(self, method, iface_lc, member, member_lc, in_args,
|
|
Packit Service |
c6b9b0 |
out_args, collect_callback):
|
|
Packit Service |
c6b9b0 |
# Reentrant blocking calls
|
|
Packit Service |
c6b9b0 |
# Example:
|
|
Packit Service |
c6b9b0 |
# gboolean tp_cli_properties_interface_run_get_properties
|
|
Packit Service |
c6b9b0 |
# (gpointer proxy,
|
|
Packit Service |
c6b9b0 |
# gint timeout_ms,
|
|
Packit Service |
c6b9b0 |
# const GArray *in_properties,
|
|
Packit Service |
c6b9b0 |
# GPtrArray **out0,
|
|
Packit Service |
c6b9b0 |
# GError **error,
|
|
Packit Service |
c6b9b0 |
# GMainLoop **loop);
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
run_method_name = '%s_%s_run_%s' % (self.prefix_lc, iface_lc, member_lc)
|
|
Packit Service |
c6b9b0 |
if run_method_name not in self.reentrant_symbols:
|
|
Packit Service |
c6b9b0 |
return
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b('typedef struct {')
|
|
Packit Service |
c6b9b0 |
self.b(' GMainLoop *loop;')
|
|
Packit Service |
c6b9b0 |
self.b(' GError **error;')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
for arg in out_args:
|
|
Packit Service |
c6b9b0 |
name, info, tp_type, elt = arg
|
|
Packit Service |
c6b9b0 |
ctype, gtype, marshaller, pointer = info
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b(' %s*%s;' % (ctype, name))
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b(' unsigned success:1;')
|
|
Packit Service |
c6b9b0 |
self.b(' unsigned completed:1;')
|
|
Packit Service |
c6b9b0 |
self.b('} _%s_%s_run_state_%s;'
|
|
Packit Service |
c6b9b0 |
% (self.prefix_lc, iface_lc, member_lc))
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
reentrant_invoke = '_%s_%s_finish_running_%s' % (self.prefix_lc,
|
|
Packit Service |
c6b9b0 |
iface_lc,
|
|
Packit Service |
c6b9b0 |
member_lc)
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b('static void')
|
|
Packit Service |
c6b9b0 |
self.b('%s (TpProxy *self G_GNUC_UNUSED,' % reentrant_invoke)
|
|
Packit Service |
c6b9b0 |
self.b(' GError *error,')
|
|
Packit Service |
c6b9b0 |
self.b(' GValueArray *args,')
|
|
Packit Service |
c6b9b0 |
self.b(' GCallback unused G_GNUC_UNUSED,')
|
|
Packit Service |
c6b9b0 |
self.b(' gpointer user_data G_GNUC_UNUSED,')
|
|
Packit Service |
c6b9b0 |
self.b(' GObject *unused2 G_GNUC_UNUSED)')
|
|
Packit Service |
c6b9b0 |
self.b('{')
|
|
Packit Service |
c6b9b0 |
self.b(' _%s_%s_run_state_%s *state = user_data;'
|
|
Packit Service |
c6b9b0 |
% (self.prefix_lc, iface_lc, member_lc))
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
self.b(' state->success = (error == NULL);')
|
|
Packit Service |
c6b9b0 |
self.b(' state->completed = TRUE;')
|
|
Packit Service |
c6b9b0 |
self.b(' g_main_loop_quit (state->loop);')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
self.b(' if (error != NULL)')
|
|
Packit Service |
c6b9b0 |
self.b(' {')
|
|
Packit Service |
c6b9b0 |
self.b(' if (state->error != NULL)')
|
|
Packit Service |
c6b9b0 |
self.b(' *state->error = error;')
|
|
Packit Service |
c6b9b0 |
self.b(' else')
|
|
Packit Service |
c6b9b0 |
self.b(' g_error_free (error);')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
self.b(' return;')
|
|
Packit Service |
c6b9b0 |
self.b(' }')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
for i, arg in enumerate(out_args):
|
|
Packit Service |
c6b9b0 |
name, info, tp_type, elt = arg
|
|
Packit Service |
c6b9b0 |
ctype, gtype, marshaller, pointer = info
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b(' if (state->%s != NULL)' % name)
|
|
Packit Service |
c6b9b0 |
if marshaller == 'BOXED':
|
|
Packit Service |
c6b9b0 |
self.b(' *state->%s = g_value_dup_boxed ('
|
|
Packit Service |
c6b9b0 |
'args->values + %d);' % (name, i))
|
|
Packit Service |
c6b9b0 |
elif marshaller == 'STRING':
|
|
Packit Service |
c6b9b0 |
self.b(' *state->%s = g_value_dup_string '
|
|
Packit Service |
c6b9b0 |
'(args->values + %d);' % (name, i))
|
|
Packit Service |
c6b9b0 |
elif marshaller in ('UCHAR', 'BOOLEAN', 'INT', 'UINT',
|
|
Packit Service |
c6b9b0 |
'INT64', 'UINT64', 'DOUBLE'):
|
|
Packit Service |
c6b9b0 |
self.b(' *state->%s = g_value_get_%s (args->values + %d);'
|
|
Packit Service |
c6b9b0 |
% (name, marshaller.lower(), i))
|
|
Packit Service |
c6b9b0 |
else:
|
|
Packit Service |
c6b9b0 |
assert False, "Don't know how to copy %s" % gtype
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if len(out_args) > 0:
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_array_free (args);')
|
|
Packit Service |
c6b9b0 |
else:
|
|
Packit Service |
c6b9b0 |
self.b(' if (args != NULL)')
|
|
Packit Service |
c6b9b0 |
self.b(' g_value_array_free (args);')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b('}')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if self.deprecate_reentrant:
|
|
Packit Service |
c6b9b0 |
self.h('#ifndef %s' % self.deprecate_reentrant)
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.h('gboolean %s (%sproxy,'
|
|
Packit Service |
c6b9b0 |
% (run_method_name, self.proxy_arg))
|
|
Packit Service |
c6b9b0 |
self.h(' gint timeout_ms,')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.d('/**')
|
|
Packit Service |
c6b9b0 |
self.d(' * %s:' % run_method_name)
|
|
Packit Service |
c6b9b0 |
self.d(' * @proxy: %s' % self.proxy_doc)
|
|
Packit Service |
c6b9b0 |
self.d(' * @timeout_ms: Timeout in milliseconds, or -1 for default')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
for arg in in_args:
|
|
Packit Service |
c6b9b0 |
name, info, tp_type, elt = arg
|
|
Packit Service |
c6b9b0 |
ctype, gtype, marshaller, pointer = info
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
docs = xml_escape(get_docstring(elt) or '(Undocumented)')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if ctype == 'guint ' and tp_type != '':
|
|
Packit Service |
c6b9b0 |
docs += ' (#%s)' % ('Tp' + tp_type.replace('_', ''))
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.d(' * @%s: Used to pass an \'in\' argument: %s'
|
|
Packit Service |
c6b9b0 |
% (name, docs))
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
for arg in out_args:
|
|
Packit Service |
c6b9b0 |
name, info, tp_type, elt = arg
|
|
Packit Service |
c6b9b0 |
ctype, gtype, marshaller, pointer = info
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.d(' * @%s: Used to return an \'out\' argument if %%TRUE is '
|
|
Packit Service |
c6b9b0 |
'returned: %s'
|
|
Packit Service |
c6b9b0 |
% (name, xml_escape(get_docstring(elt) or '(Undocumented)')))
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.d(' * @error: If not %NULL, used to return errors if %FALSE ')
|
|
Packit Service |
c6b9b0 |
self.d(' * is returned')
|
|
Packit Service |
c6b9b0 |
self.d(' * @loop: If not %NULL, set before re-entering ')
|
|
Packit Service |
c6b9b0 |
self.d(' * the main loop, to point to a #GMainLoop ')
|
|
Packit Service |
c6b9b0 |
self.d(' * which can be used to cancel this call with ')
|
|
Packit Service |
c6b9b0 |
self.d(' * g_main_loop_quit(), causing a return of ')
|
|
Packit Service |
c6b9b0 |
self.d(' * %FALSE with @error set to %TP_DBUS_ERROR_CANCELLED')
|
|
Packit Service |
c6b9b0 |
self.d(' *')
|
|
Packit Service |
c6b9b0 |
self.d(' * Call the method %s and run the main loop' % member)
|
|
Packit Service |
c6b9b0 |
self.d(' * until it returns. Before calling this method, you must')
|
|
Packit Service |
c6b9b0 |
self.d(' * add a reference to any borrowed objects you need to keep,')
|
|
Packit Service |
c6b9b0 |
self.d(' * and generally ensure that everything is in a consistent')
|
|
Packit Service |
c6b9b0 |
self.d(' * state.')
|
|
Packit Service |
c6b9b0 |
self.d(' *')
|
|
Packit Service |
c6b9b0 |
self.d(' * %s' % xml_escape(get_docstring(method) or '(Undocumented)'))
|
|
Packit Service |
c6b9b0 |
self.d(' *')
|
|
Packit Service |
c6b9b0 |
self.d(' * Returns: TRUE on success, FALSE and sets @error on error')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
deprecated = method.getElementsByTagName('tp:deprecated')
|
|
Packit Service |
c6b9b0 |
if deprecated:
|
|
Packit Service |
c6b9b0 |
d = deprecated[0]
|
|
Packit Service |
c6b9b0 |
self.d(' *')
|
|
Packit Service |
c6b9b0 |
self.d(' * Deprecated: %s' % xml_escape(get_deprecated(d)))
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.d(' */')
|
|
Packit Service |
c6b9b0 |
self.d('')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b('gboolean\n%s (%sproxy,'
|
|
Packit Service |
c6b9b0 |
% (run_method_name, self.proxy_arg))
|
|
Packit Service |
c6b9b0 |
self.b(' gint timeout_ms,')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
for arg in in_args:
|
|
Packit Service |
c6b9b0 |
name, info, tp_type, elt = arg
|
|
Packit Service |
c6b9b0 |
ctype, gtype, marshaller, pointer = info
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
const = pointer and 'const ' or ''
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.h(' %s%s%s,' % (const, ctype, name))
|
|
Packit Service |
c6b9b0 |
self.b(' %s%s%s,' % (const, ctype, name))
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
for arg in out_args:
|
|
Packit Service |
c6b9b0 |
name, info, tp_type, elt = arg
|
|
Packit Service |
c6b9b0 |
ctype, gtype, marshaller, pointer = info
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.h(' %s*%s,' % (ctype, name))
|
|
Packit Service |
c6b9b0 |
self.b(' %s*%s,' % (ctype, name))
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.h(' GError **error,')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if self.deprecate_reentrant:
|
|
Packit Service |
c6b9b0 |
self.h(' GMainLoop **loop) %s;' % self.deprecation_attribute)
|
|
Packit Service |
c6b9b0 |
self.h('#endif /* not %s */' % self.deprecate_reentrant)
|
|
Packit Service |
c6b9b0 |
else:
|
|
Packit Service |
c6b9b0 |
self.h(' GMainLoop **loop);')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.h('')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b(' GError **error,')
|
|
Packit Service |
c6b9b0 |
self.b(' GMainLoop **loop)')
|
|
Packit Service |
c6b9b0 |
self.b('{')
|
|
Packit Service |
c6b9b0 |
self.b(' DBusGProxy *iface;')
|
|
Packit Service |
c6b9b0 |
self.b(' GQuark interface = %s;' % self.get_iface_quark())
|
|
Packit Service |
c6b9b0 |
self.b(' TpProxyPendingCall *pc;')
|
|
Packit Service |
c6b9b0 |
self.b(' _%s_%s_run_state_%s state = {'
|
|
Packit Service |
c6b9b0 |
% (self.prefix_lc, iface_lc, member_lc))
|
|
Packit Service |
c6b9b0 |
self.b(' NULL /* loop */, error,')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
for arg in out_args:
|
|
Packit Service |
c6b9b0 |
name, info, tp_type, elt = arg
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b(' %s,' % name)
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b(' FALSE /* completed */, FALSE /* success */ };')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
self.b(' g_return_val_if_fail (%s (proxy), FALSE);'
|
|
Packit Service |
c6b9b0 |
% self.proxy_assert)
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
self.b(' G_GNUC_BEGIN_IGNORE_DEPRECATIONS')
|
|
Packit Service |
c6b9b0 |
self.b(' iface = tp_proxy_borrow_interface_by_id')
|
|
Packit Service |
c6b9b0 |
self.b(' ((TpProxy *) proxy, interface, error);')
|
|
Packit Service |
c6b9b0 |
self.b(' G_GNUC_END_IGNORE_DEPRECATIONS')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
self.b(' if (iface == NULL)')
|
|
Packit Service |
c6b9b0 |
self.b(' return FALSE;')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
self.b(' state.loop = g_main_loop_new (NULL, FALSE);')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
self.b(' pc = tp_proxy_pending_call_v0_new ((TpProxy *) proxy,')
|
|
Packit Service |
c6b9b0 |
self.b(' interface, "%s", iface,' % member)
|
|
Packit Service |
c6b9b0 |
self.b(' %s,' % reentrant_invoke)
|
|
Packit Service |
c6b9b0 |
self.b(' NULL, &state, NULL, NULL, TRUE);')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
self.b(' if (loop != NULL)')
|
|
Packit Service |
c6b9b0 |
self.b(' *loop = state.loop;')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
self.b(' tp_proxy_pending_call_v0_take_pending_call (pc,')
|
|
Packit Service |
c6b9b0 |
self.b(' dbus_g_proxy_begin_call_with_timeout (iface,')
|
|
Packit Service |
c6b9b0 |
self.b(' "%s",' % member)
|
|
Packit Service |
c6b9b0 |
self.b(' %s,' % collect_callback)
|
|
Packit Service |
c6b9b0 |
self.b(' pc,')
|
|
Packit Service |
c6b9b0 |
self.b(' tp_proxy_pending_call_v0_completed,')
|
|
Packit Service |
c6b9b0 |
self.b(' timeout_ms,')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
for arg in in_args:
|
|
Packit Service |
c6b9b0 |
name, info, tp_type, elt = arg
|
|
Packit Service |
c6b9b0 |
ctype, gtype, marshaller, pointer = info
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
const = pointer and 'const ' or ''
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b(' %s, %s,' % (gtype, name))
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b(' G_TYPE_INVALID));')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
self.b(' if (!state.completed)')
|
|
Packit Service |
c6b9b0 |
self.b(' g_main_loop_run (state.loop);')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
self.b(' if (!state.completed)')
|
|
Packit Service |
c6b9b0 |
self.b(' tp_proxy_pending_call_cancel (pc);')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
self.b(' if (loop != NULL)')
|
|
Packit Service |
c6b9b0 |
self.b(' *loop = NULL;')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
self.b(' g_main_loop_unref (state.loop);')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
self.b(' return state.success;')
|
|
Packit Service |
c6b9b0 |
self.b('}')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
def do_signal_add(self, signal):
|
|
Packit Service |
c6b9b0 |
marshaller_items = []
|
|
Packit Service |
c6b9b0 |
gtypes = []
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
for i in signal.getElementsByTagName('arg'):
|
|
Packit Service |
c6b9b0 |
name = i.getAttribute('name')
|
|
Packit Service |
c6b9b0 |
type = i.getAttribute('type')
|
|
Packit Service |
c6b9b0 |
info = type_to_gtype(type)
|
|
Packit Service |
c6b9b0 |
# type, GType, STRING, is a pointer
|
|
Packit Service |
c6b9b0 |
gtypes.append(info[1])
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b(' dbus_g_proxy_add_signal (proxy, "%s",'
|
|
Packit Service |
c6b9b0 |
% signal.getAttribute('name'))
|
|
Packit Service |
c6b9b0 |
for gtype in gtypes:
|
|
Packit Service |
c6b9b0 |
self.b(' %s,' % gtype)
|
|
Packit Service |
c6b9b0 |
self.b(' G_TYPE_INVALID);')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
def do_interface(self, node):
|
|
Packit Service |
c6b9b0 |
ifaces = node.getElementsByTagName('interface')
|
|
Packit Service |
c6b9b0 |
assert len(ifaces) == 1
|
|
Packit Service |
c6b9b0 |
iface = ifaces[0]
|
|
Packit Service |
c6b9b0 |
name = node.getAttribute('name').replace('/', '')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.iface = name
|
|
Packit Service |
c6b9b0 |
self.iface_lc = name.lower()
|
|
Packit Service |
c6b9b0 |
self.iface_uc = name.upper()
|
|
Packit Service |
c6b9b0 |
self.iface_mc = name.replace('_', '')
|
|
Packit Service |
c6b9b0 |
self.iface_dbus = iface.getAttribute('name')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
signals = node.getElementsByTagName('signal')
|
|
Packit Service |
c6b9b0 |
methods = node.getElementsByTagName('method')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if signals:
|
|
Packit Service |
c6b9b0 |
self.b('static inline void')
|
|
Packit Service |
c6b9b0 |
self.b('%s_add_signals_for_%s (DBusGProxy *proxy)'
|
|
Packit Service |
c6b9b0 |
% (self.prefix_lc, name.lower()))
|
|
Packit Service |
c6b9b0 |
self.b('{')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if self.tp_proxy_api >= (0, 7, 6):
|
|
Packit Service |
c6b9b0 |
self.b(' if (!tp_proxy_dbus_g_proxy_claim_for_signal_adding '
|
|
Packit Service |
c6b9b0 |
'(proxy))')
|
|
Packit Service |
c6b9b0 |
self.b(' return;')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
for signal in signals:
|
|
Packit Service |
c6b9b0 |
self.do_signal_add(signal)
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b('}')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
for signal in signals:
|
|
Packit Service |
c6b9b0 |
self.do_signal(name, signal)
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
for method in methods:
|
|
Packit Service |
c6b9b0 |
self.do_method(name, method)
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.iface_dbus = None
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
def __call__(self):
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if self.guard is not None:
|
|
Packit Service |
c6b9b0 |
self.h('#ifndef %s' % self.guard)
|
|
Packit Service |
c6b9b0 |
self.h('#define %s' % self.guard)
|
|
Packit Service |
c6b9b0 |
self.h('')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.h('G_BEGIN_DECLS')
|
|
Packit Service |
c6b9b0 |
self.h('')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b('/* We don\'t want gtkdoc scanning this file, it\'ll get')
|
|
Packit Service |
c6b9b0 |
self.b(' * confused by seeing function definitions, so mark it as: */')
|
|
Packit Service |
c6b9b0 |
self.b('/*<private_header>*/')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
nodes = self.dom.getElementsByTagName('node')
|
|
Packit Service |
c6b9b0 |
nodes.sort(key=key_by_name)
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
for node in nodes:
|
|
Packit Service |
c6b9b0 |
self.do_interface(node)
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if self.group is not None:
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b('/*')
|
|
Packit Service |
c6b9b0 |
self.b(' * %s_%s_add_signals:' % (self.prefix_lc, self.group))
|
|
Packit Service |
c6b9b0 |
self.b(' * @self: the #TpProxy')
|
|
Packit Service |
c6b9b0 |
self.b(' * @quark: a quark whose string value is the interface')
|
|
Packit Service |
c6b9b0 |
self.b(' * name whose signals should be added')
|
|
Packit Service |
c6b9b0 |
self.b(' * @proxy: the D-Bus proxy to which to add the signals')
|
|
Packit Service |
c6b9b0 |
self.b(' * @unused: not used for anything')
|
|
Packit Service |
c6b9b0 |
self.b(' *')
|
|
Packit Service |
c6b9b0 |
self.b(' * Tell dbus-glib that @proxy has the signatures of all')
|
|
Packit Service |
c6b9b0 |
self.b(' * signals on the given interface, if it\'s one we')
|
|
Packit Service |
c6b9b0 |
self.b(' * support.')
|
|
Packit Service |
c6b9b0 |
self.b(' *')
|
|
Packit Service |
c6b9b0 |
self.b(' * This function should be used as a signal handler for')
|
|
Packit Service |
c6b9b0 |
self.b(' * #TpProxy::interface-added.')
|
|
Packit Service |
c6b9b0 |
self.b(' */')
|
|
Packit Service |
c6b9b0 |
self.b('static void')
|
|
Packit Service |
c6b9b0 |
self.b('%s_%s_add_signals (TpProxy *self G_GNUC_UNUSED,'
|
|
Packit Service |
c6b9b0 |
% (self.prefix_lc, self.group))
|
|
Packit Service |
c6b9b0 |
self.b(' guint quark,')
|
|
Packit Service |
c6b9b0 |
self.b(' DBusGProxy *proxy,')
|
|
Packit Service |
c6b9b0 |
self.b(' gpointer unused G_GNUC_UNUSED)')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b('{')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
for node in nodes:
|
|
Packit Service |
c6b9b0 |
iface = node.getElementsByTagName('interface')[0]
|
|
Packit Service |
c6b9b0 |
self.iface_dbus = iface.getAttribute('name')
|
|
Packit Service |
c6b9b0 |
signals = node.getElementsByTagName('signal')
|
|
Packit Service |
c6b9b0 |
if not signals:
|
|
Packit Service |
c6b9b0 |
continue
|
|
Packit Service |
c6b9b0 |
name = node.getAttribute('name').replace('/', '').lower()
|
|
Packit Service |
c6b9b0 |
self.iface_uc = name.upper()
|
|
Packit Service |
c6b9b0 |
self.b(' if (quark == %s)' % self.get_iface_quark())
|
|
Packit Service |
c6b9b0 |
self.b(' %s_add_signals_for_%s (proxy);'
|
|
Packit Service |
c6b9b0 |
% (self.prefix_lc, name))
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.b('}')
|
|
Packit Service |
c6b9b0 |
self.b('')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
self.h('G_END_DECLS')
|
|
Packit Service |
c6b9b0 |
self.h('')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if self.guard is not None:
|
|
Packit Service |
c6b9b0 |
self.h('#endif /* defined (%s) */' % self.guard)
|
|
Packit Service |
c6b9b0 |
self.h('')
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
file_set_contents(self.basename + '.h', u('\n').join(self.__header).encode('utf-8'))
|
|
Packit Service |
c6b9b0 |
file_set_contents(self.basename + '-body.h', u('\n').join(self.__body).encode('utf-8'))
|
|
Packit Service |
c6b9b0 |
file_set_contents(self.basename + '-gtk-doc.h', u('\n').join(self.__docs).encode('utf-8'))
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
def types_to_gtypes(types):
|
|
Packit Service |
c6b9b0 |
return [type_to_gtype(t)[1] for t in types]
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
if __name__ == '__main__':
|
|
Packit Service |
c6b9b0 |
options, argv = gnu_getopt(sys.argv[1:], '',
|
|
Packit Service |
c6b9b0 |
['group=', 'subclass=', 'subclass-assert=',
|
|
Packit Service |
c6b9b0 |
'iface-quark-prefix=', 'tp-proxy-api=',
|
|
Packit Service |
c6b9b0 |
'generate-reentrant=', 'deprecate-reentrant=',
|
|
Packit Service |
c6b9b0 |
'deprecation-attribute=', 'guard='])
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
opts = {}
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
for option, value in options:
|
|
Packit Service |
c6b9b0 |
opts[option] = value
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
dom = xml.dom.minidom.parse(argv[0])
|
|
Packit Service |
c6b9b0 |
|
|
Packit Service |
c6b9b0 |
Generator(dom, argv[1], argv[2], opts)()
|