2 * Copyright 1999-2001 Adrian E. Feiguin <feiguin@ifir.edu.ar>
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
14 * You should have received a copy of the GNU Library General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
22 #include "gtkextrafeatures.h"
23 #include <gobject/gvaluecollector.h>
25 const guint gtkextra_major_version = GTKEXTRA_MAJOR_VERSION;
26 const guint gtkextra_minor_version = GTKEXTRA_MINOR_VERSION;
27 const guint gtkextra_micro_version = GTKEXTRA_MICRO_VERSION;
28 const guint gtkextra_binary_age = GTKEXTRA_BINARY_AGE;
29 const guint gtkextra_interface_age = GTKEXTRA_INTERFACE_AGE;
32 gtkextra_check_version (guint required_major,
36 if (required_major > GTKEXTRA_MAJOR_VERSION)
37 return "GtkExtra version too old (major mismatch)";
38 if (required_major < GTKEXTRA_MAJOR_VERSION)
39 return "GtkExtra version too new (major mismatch)";
40 if (required_minor > GTKEXTRA_MINOR_VERSION)
41 return "GtkExtra version too old (minor mismatch)";
42 if (required_minor < GTKEXTRA_MINOR_VERSION)
43 return "GtkExtra version too new (minor mismatch)";
44 if (required_micro < GTKEXTRA_MICRO_VERSION - GTKEXTRA_BINARY_AGE)
45 return "GtkExtra version too new (micro mismatch)";
46 if (required_micro > GTKEXTRA_MICRO_VERSION)
47 return "GtkExtra version too old (micro mismatch)";
53 _gtkextra_signal_test(GtkObject *object, guint signal_id, gint arg1, gint arg2, gboolean *default_ret)
57 GValue instance_and_param[3] = { { 0, }, {0, }, {0, } };
59 g_value_init(instance_and_param + 0, GTK_OBJECT_TYPE(object));
60 g_value_set_instance(instance_and_param + 0, G_OBJECT(object));
62 g_value_init(instance_and_param + 1, G_TYPE_INT);
63 g_value_set_int(instance_and_param + 1, arg1);
65 g_value_init(instance_and_param + 2, G_TYPE_INT);
66 g_value_set_int(instance_and_param + 2, arg2);
68 g_value_init(&ret, G_TYPE_BOOLEAN);
69 g_value_set_boolean(&ret, *default_ret);
71 g_signal_emitv(instance_and_param, signal_id, 0, &ret);
72 *default_ret = g_value_get_boolean(&ret);
74 g_value_unset(instance_and_param + 0);
75 g_value_unset(instance_and_param + 1);
76 g_value_unset(instance_and_param + 2);
81 _gtkextra_signal_emit(GtkObject *object, guint signal_id, ...)
85 GValue instance_and_params [10] = { {0, }, };
91 va_start (var_args, signal_id);
93 g_value_init(instance_and_params + 0, GTK_OBJECT_TYPE(object));
94 g_value_set_instance (instance_and_params + 0, G_OBJECT(object));
96 g_signal_query(signal_id, &query);
98 for (i = 0; i < query.n_params; i++)
100 gboolean static_scope = query.param_types[i]&~G_SIGNAL_TYPE_STATIC_SCOPE;
101 g_value_init(instance_and_params + i + 1, query.param_types[i]);
104 G_VALUE_COLLECT (instance_and_params + i + 1,
106 static_scope ? G_VALUE_NOCOPY_CONTENTS : 0,
111 g_warning ("%s: %s", G_STRLOC, error);
114 g_value_unset (instance_and_params + i);
123 g_value_init(&ret, query.return_type);
124 result = va_arg(var_args,gboolean *);
125 g_value_set_boolean(&ret, *result);
126 g_signal_emitv(instance_and_params, signal_id, 0, &ret);
127 *result = g_value_get_boolean(&ret);
128 g_value_unset (&ret);
130 for (i = 0; i < query.n_params; i++)
131 g_value_unset (instance_and_params + 1 + i);
132 g_value_unset (instance_and_params + 0);