Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCarlos Garnacho <carlos@lanedo.com>2012-10-08 10:09:20 (GMT)
committer Simon Schampijer <simon@laptop.org>2012-10-08 11:03:15 (GMT)
commitc546aaaf7cab3a912c5245e024356a8d789feaa2 (patch)
tree4f548f570ef3d810c58b29a5e2f31ab569043d98
parent31d6e6dd1eed4732d277cc0e0514f4cff7d73e32 (diff)
gestures: Add remove() call to SugarGestureGrabber
Signed-off-by: Carlos Garnacho <carlos@lanedo.com> Acked-by: Simon Schampijer <simon@laptop.org>
-rw-r--r--src/sugar3/sugar-gesture-grabber.c53
-rw-r--r--src/sugar3/sugar-gesture-grabber.h2
2 files changed, 55 insertions, 0 deletions
diff --git a/src/sugar3/sugar-gesture-grabber.c b/src/sugar3/sugar-gesture-grabber.c
index b1d28db..211e637 100644
--- a/src/sugar3/sugar-gesture-grabber.c
+++ b/src/sugar3/sugar-gesture-grabber.c
@@ -366,6 +366,32 @@ sugar_gesture_grabber_new (void)
return g_object_new (SUGAR_TYPE_GESTURE_GRABBER, NULL);
}
+static ControllerData *
+_sugar_gesture_grabber_find_controller (SugarGestureGrabber *grabber,
+ SugarEventController *controller,
+ gint *pos)
+{
+ SugarGestureGrabberPriv *priv;
+ guint i;
+
+ priv = grabber->_priv;
+
+ for (i = 0; i < priv->controllers->len; i++) {
+ ControllerData *data;
+
+ data = &g_array_index (priv->controllers, ControllerData, i);
+
+ if (data->controller == controller) {
+ if (pos)
+ *pos = i;
+
+ return data;
+ }
+ }
+
+ return NULL;
+}
+
void
sugar_gesture_grabber_add (SugarGestureGrabber *grabber,
SugarEventController *controller,
@@ -377,9 +403,36 @@ sugar_gesture_grabber_add (SugarGestureGrabber *grabber,
g_return_if_fail (SUGAR_IS_GESTURE_GRABBER (grabber));
g_return_if_fail (SUGAR_IS_EVENT_CONTROLLER (controller));
+ if (_sugar_gesture_grabber_find_controller (grabber, controller, NULL)) {
+ g_warning ("Controller is already on the gesture grabber"
+ " list. Controllers can only be added once.");
+ return;
+ }
+
priv = grabber->_priv;
data.controller = g_object_ref (controller);
data.rect = *rect;
g_array_append_val (priv->controllers, data);
}
+
+void
+sugar_gesture_grabber_remove (SugarGestureGrabber *grabber,
+ SugarEventController *controller)
+{
+ SugarGestureGrabberPriv *priv;
+ ControllerData *data;
+ gint pos;
+
+ g_return_if_fail (SUGAR_IS_GESTURE_GRABBER (grabber));
+ g_return_if_fail (SUGAR_IS_EVENT_CONTROLLER (controller));
+
+ priv = grabber->_priv;
+ data = _sugar_gesture_grabber_find_controller (grabber, controller, &pos);
+
+ if (data) {
+ g_array_remove_index_fast (priv->controllers, pos);
+ sugar_event_controller_reset (data->controller);
+ g_object_unref (data->controller);
+ }
+}
diff --git a/src/sugar3/sugar-gesture-grabber.h b/src/sugar3/sugar-gesture-grabber.h
index 2d956a3..d6c8c4b 100644
--- a/src/sugar3/sugar-gesture-grabber.h
+++ b/src/sugar3/sugar-gesture-grabber.h
@@ -51,6 +51,8 @@ SugarGestureGrabber * sugar_gesture_grabber_new (void);
void sugar_gesture_grabber_add (SugarGestureGrabber *grabber,
SugarEventController *controller,
const GdkRectangle *rect);
+void sugar_gesture_grabber_remove (SugarGestureGrabber *grabber,
+ SugarEventController *controller);
G_END_DECLS