Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPootle daemon <pootle@pootle.sugarlabs.org>2012-10-09 04:33:04 (GMT)
committer Pootle daemon <pootle@pootle.sugarlabs.org>2012-10-09 04:33:04 (GMT)
commit740dcea9e32b575c975166d7e96c844b6bd6294d (patch)
tree77da7041081dd4bfcbb65c90826125609c8a1358
parent5b1c17d7ceaac2d520d4e5afa12c77ffee23c24b (diff)
parentf569e7ef981a9c8447ff304eb8d040676390ef7b (diff)
Merge branch 'master' of git.sugarlabs.org:sugar-toolkit-gtk3/sugar-toolkit-gtk3
-rw-r--r--src/sugar3/sugar-gesture-grabber.c54
-rw-r--r--src/sugar3/sugar-gesture-grabber.h2
2 files changed, 55 insertions, 1 deletions
diff --git a/src/sugar3/sugar-gesture-grabber.c b/src/sugar3/sugar-gesture-grabber.c
index b1d28db..186d8ac 100644
--- a/src/sugar3/sugar-gesture-grabber.c
+++ b/src/sugar3/sugar-gesture-grabber.c
@@ -258,7 +258,6 @@ filter_function (GdkXEvent *xevent,
SugarGestureGrabber *grabber;
SugarGestureGrabberPriv *priv;
gboolean handled = FALSE;
- Window event_window;
GdkDevice *device;
XIDeviceEvent *ev;
GdkDisplay *display;
@@ -366,6 +365,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 +402,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