1
/* LIBGIMP - The GIMP Library
2
* Copyright (C) 1995-1997 Peter Mattis and Spencer Kimball
5
* Copyright (C) 2004 Michael Natterer <mitch@gimp.org>
7
* This library is free software; you can redistribute it and/or
8
* modify it under the terms of the GNU Lesser General Public
9
* License as published by the Free Software Foundation; either
10
* version 2 of the License, or (at your option) any later version.
12
* This library is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
* Lesser General Public License for more details.
17
* You should have received a copy of the GNU Lesser General Public
18
* License along with this library; if not, write to the
19
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20
* Boston, MA 02111-1307, USA.
27
#include "libgimpcolor/gimpcolor.h"
29
#include "gimpwidgetstypes.h"
31
#include "gimpwidgetsmarshal.h"
33
#define GIMP_ENABLE_CONTROLLER_UNDER_CONSTRUCTION
34
#include "gimpcontroller.h"
50
static void gimp_controller_class_init (GimpControllerClass *klass);
51
static void gimp_controller_set_property (GObject *object,
55
static void gimp_controller_get_property (GObject *object,
61
static GObjectClass *parent_class = NULL;
63
static guint controller_signals[LAST_SIGNAL] = { 0 };
67
gimp_controller_get_type (void)
69
static GType controller_type = 0;
71
if (! controller_type)
73
static const GTypeInfo controller_info =
75
sizeof (GimpControllerClass),
77
(GBaseFinalizeFunc) NULL,
78
(GClassInitFunc) gimp_controller_class_init,
79
NULL, /* class_finalize */
80
NULL, /* class_data */
81
sizeof (GimpController),
83
NULL /* instance_init */
86
controller_type = g_type_register_static (G_TYPE_OBJECT,
91
return controller_type;
95
gimp_controller_boolean_handled_accumulator (GSignalInvocationHint *ihint,
97
const GValue *handler_return,
100
gboolean continue_emission;
101
gboolean signal_handled;
103
signal_handled = g_value_get_boolean (handler_return);
104
g_value_set_boolean (return_accu, signal_handled);
105
continue_emission = ! signal_handled;
107
return continue_emission;
111
gimp_controller_class_init (GimpControllerClass *klass)
113
GObjectClass *object_class = G_OBJECT_CLASS (klass);
115
parent_class = g_type_class_peek_parent (klass);
117
object_class->set_property = gimp_controller_set_property;
118
object_class->get_property = gimp_controller_get_property;
120
g_object_class_install_property (object_class, PROP_NAME,
121
g_param_spec_string ("name", NULL, NULL,
122
"Unnamed Controller",
126
g_object_class_install_property (object_class, PROP_STATE,
127
g_param_spec_string ("state", NULL, NULL,
132
controller_signals[EVENT] =
133
g_signal_new ("event",
134
G_TYPE_FROM_CLASS (klass),
136
G_STRUCT_OFFSET (GimpControllerClass, event),
137
gimp_controller_boolean_handled_accumulator, NULL,
138
_gimp_widgets_marshal_BOOLEAN__POINTER,
142
klass->name = "Unnamed";
143
klass->help_domain = NULL;
144
klass->help_id = NULL;
146
klass->get_n_events = NULL;
147
klass->get_event_name = NULL;
152
gimp_controller_set_property (GObject *object,
157
GimpController *controller = GIMP_CONTROLLER (object);
162
if (controller->name)
163
g_free (controller->name);
164
controller->name = g_value_dup_string (value);
167
if (controller->state)
168
g_free (controller->state);
169
controller->state = g_value_dup_string (value);
172
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
178
gimp_controller_get_property (GObject *object,
183
GimpController *controller = GIMP_CONTROLLER (object);
188
g_value_set_string (value, controller->name);
191
g_value_set_string (value, controller->state);
194
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
200
gimp_controller_new (GType controller_type)
202
GimpController *controller;
204
g_return_val_if_fail (g_type_is_a (controller_type, GIMP_TYPE_CONTROLLER),
207
controller = g_object_new (controller_type, NULL);
213
gimp_controller_get_n_events (GimpController *controller)
215
g_return_val_if_fail (GIMP_IS_CONTROLLER (controller), 0);
217
if (GIMP_CONTROLLER_GET_CLASS (controller)->get_n_events)
218
return GIMP_CONTROLLER_GET_CLASS (controller)->get_n_events (controller);
224
gimp_controller_get_event_name (GimpController *controller,
227
const gchar *name = NULL;
229
g_return_val_if_fail (GIMP_IS_CONTROLLER (controller), NULL);
231
if (GIMP_CONTROLLER_GET_CLASS (controller)->get_event_name)
232
name = GIMP_CONTROLLER_GET_CLASS (controller)->get_event_name (controller,
236
name = "<invalid event id>";
242
gimp_controller_get_event_blurb (GimpController *controller,
245
const gchar *blurb = NULL;
247
g_return_val_if_fail (GIMP_IS_CONTROLLER (controller), NULL);
249
if (GIMP_CONTROLLER_GET_CLASS (controller)->get_event_blurb)
250
blurb = GIMP_CONTROLLER_GET_CLASS (controller)->get_event_blurb (controller,
254
blurb = "<invalid event id>";
260
gimp_controller_event (GimpController *controller,
261
const GimpControllerEvent *event)
263
gboolean retval = FALSE;
265
g_return_val_if_fail (GIMP_IS_CONTROLLER (controller), FALSE);
266
g_return_val_if_fail (event != NULL, FALSE);
268
g_signal_emit (controller, controller_signals[EVENT], 0,