Merge lp:~oif-team/geis/v2.0.1 into lp:geis

Proposed by Stephen M. Webb
Status: Merged
Merged at revision: 110
Proposed branch: lp:~oif-team/geis/v2.0.1
Merge into: lp:geis
Diff against target: 243 lines (+110/-24)
4 files modified
COPYING (+0/-2)
ChangeLog (+22/-0)
configure.ac (+1/-1)
libutouch-geis/geis_v1.c (+87/-21)
To merge this branch: bzr merge lp:~oif-team/geis/v2.0.1
Reviewer Review Type Date Requested Status
Mohamed IKBEL Boulabiar (community) Approve
Chase Douglas (community) Approve
Review via email: mp+50688@code.launchpad.net

Description of the change

Fixes two shipstoppers.

(1) Re-added GEIS v1 symbols that were accidentally left out in the rewrite on top of GEIS v2. Ubuntu packaging fails without these.

(2) Fixed a segfault when running libgrip test app 'grip-test'.

To post a comment you must log in.
lp:~oif-team/geis/v2.0.1 updated
111. By Stephen M. Webb

Used standardized LGPL-v3 license text.

112. By Stephen M. Webb

Released version 2.0.1.

Revision history for this message
Chase Douglas (chasedouglas) wrote :

Looks ok to me.

review: Approve
Revision history for this message
Mohamed IKBEL Boulabiar (boulabiar) wrote :

Looks fine.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'COPYING'
2--- COPYING 2010-08-16 21:16:38 +0000
3+++ COPYING 2011-02-22 03:31:37 +0000
4@@ -1,5 +1,3 @@
5-Copyright (C) 2010 Canonical, Ltd. All rights reserved.
6-
7 GNU LESSER GENERAL PUBLIC LICENSE
8 Version 3, 29 June 2007
9
10
11=== modified file 'ChangeLog'
12--- ChangeLog 2011-02-21 16:08:50 +0000
13+++ ChangeLog 2011-02-22 03:31:37 +0000
14@@ -1,5 +1,27 @@
15 2011-02-22 Stephen M. Webb <stephen.webb@canonical.com>
16
17+ Released version 2.0.1.
18+
19+ * configure.ac (AC_INIT): bumped package version to 2.0.1
20+
21+2011-02-22 Stephen M. Webb <stephen.webb@canonical.com>
22+
23+ Used standardized LGPL-v3 license text.
24+
25+ * COPYING: refreshed with standardized text.
26+
27+2011-02-22 Stephen M. Webb <stephen.webb@canonical.com>
28+
29+ Restored missing GEIS v1 symbols and fixed a segfault in libgrip.
30+
31+ * libutouch-geis/geis_v1.c (struct _GeisInstance): added window_filter field
32+ (geis_init): initialized window_filter field
33+ (_subscribe_device): used window_filter field from instance
34+ (geis_configuration_set_value): added missing GEIS v1 function
35+ (geis_unsubscribe): added missing GEIS v1 function
36+
37+2011-02-22 Stephen M. Webb <stephen.webb@canonical.com>
38+
39 Release version 2.0.0
40
41 * configure.ac (AC_INIT): bumped package version to 2.0.0
42
43=== modified file 'configure.ac'
44--- configure.ac 2011-02-21 16:08:50 +0000
45+++ configure.ac 2011-02-22 03:31:37 +0000
46@@ -20,7 +20,7 @@
47 #
48
49 AC_PREREQ(2.65)
50-AC_INIT([utouch-geis],[2.0.0],
51+AC_INIT([utouch-geis],[2.0.1],
52 [stephen.webb@canonical.com],,
53 [https://launchpad.net/utouch-geis])
54 AC_CONFIG_HEADERS([geis_config.h])
55
56=== modified file 'libutouch-geis/geis_v1.c'
57--- libutouch-geis/geis_v1.c 2011-02-21 14:23:43 +0000
58+++ libutouch-geis/geis_v1.c 2011-02-22 03:31:37 +0000
59@@ -36,6 +36,7 @@
60 struct _GeisInstance
61 {
62 GeisSubscription subscription;
63+ GeisFilter window_filter;
64 GeisGestureFuncs *gesture_funcs;
65 GeisPointer gesture_cookie;
66 };
67@@ -375,10 +376,10 @@
68 GeisStatus status = GEIS_STATUS_UNKNOWN_ERROR;
69 GeisXcbWinInfo *xcb_win_info = (GeisXcbWinInfo*)win_info->win_info;
70 GeisInteger window = (GeisInteger)(xcb_win_info->window_id);
71- GeisFilter filter;
72+ GeisInstance instance;
73
74- *geis_instance = calloc(1, sizeof(struct _GeisInstance));
75- if (!*geis_instance)
76+ instance = calloc(1, sizeof(struct _GeisInstance));
77+ if (!instance)
78 {
79 geis_error("error allocating GEIS API instance.");
80 goto final_exit;
81@@ -394,27 +395,30 @@
82 {
83 goto unwind_instance;
84 }
85- geis_register_event_callback(g_geis, _v1_event_callback, *geis_instance);
86+ geis_register_event_callback(g_geis, _v1_event_callback, instance);
87 }
88 ++g_geis_refcount;
89
90- (*geis_instance)->subscription = geis_subscription_new(g_geis,
91+ instance->subscription = geis_subscription_new(g_geis,
92 _generate_subscription_name(xcb_win_info),
93 GEIS_SUBSCRIPTION_CONT);
94- filter = geis_filter_new(g_geis, WINDOW_FILTER);
95- geis_filter_add_term(filter, GEIS_FILTER_REGION,
96+ instance->window_filter = geis_filter_new(g_geis, WINDOW_FILTER);
97+ geis_filter_add_term(instance->window_filter,
98+ GEIS_FILTER_REGION,
99 GEIS_REGION_ATTRIBUTE_WINDOWID, GEIS_FILTER_OP_EQ, window,
100 NULL);
101- status = geis_subscription_add_filter((*geis_instance)->subscription, filter);
102+ status = geis_subscription_add_filter(instance->subscription,
103+ instance->window_filter);
104
105 /* pump the geis event queue to force device and class events to be picked up */
106 while (GEIS_STATUS_CONTINUE == geis_dispatch_events(g_geis))
107 ;
108
109+ *geis_instance = instance;
110 goto final_exit;
111
112 unwind_instance:
113- free(*geis_instance);
114+ free(instance);
115 final_exit:
116 geis_debug("ends");
117 return status;
118@@ -480,6 +484,29 @@
119 }
120
121
122+/*
123+ * Sets a feature configuration value.
124+ */
125+GeisStatus
126+geis_configuration_set_value(GeisInstance geis_instance __attribute__((unused)),
127+ int configuration_item,
128+ void *value)
129+{
130+ GeisStatus status = GEIS_STATUS_NOT_SUPPORTED;
131+ if (!value)
132+ {
133+ return GEIS_BAD_ARGUMENT;
134+ }
135+
136+ switch (configuration_item)
137+ {
138+ default:
139+ break;
140+ }
141+ return status;
142+}
143+
144+
145 GeisStatus
146 geis_event_dispatch(GeisInstance geis_instance __attribute__((unused)))
147 {
148@@ -500,18 +527,9 @@
149 }
150 else
151 {
152- GeisFilter proto_filter;
153 const char **g;
154
155 geis_debug("subscribing device %d for the following gestures:", device_id);
156- proto_filter = geis_subscription_filter_by_name(instance->subscription,
157- WINDOW_FILTER);
158- if (!proto_filter)
159- {
160- geis_error("can not find V1 window filter");
161- return result;
162- }
163-
164 for (g = gesture_list; *g; ++g)
165 {
166 GeisV1AttrMap v1attr;
167@@ -528,7 +546,7 @@
168 {
169 if (0 == strcmp(*g, v1attr->v1_type))
170 {
171- GeisFilter filter = geis_filter_clone(proto_filter, *g);
172+ GeisFilter filter = geis_filter_clone(instance->window_filter, *g);
173 if (!filter)
174 {
175 geis_error("error creating new filter");
176@@ -551,10 +569,11 @@
177 }
178
179 /* remove the window-id-only filter since it allows ALL gesture classes */
180- result = geis_subscription_remove_filter(instance->subscription, proto_filter);
181+ result = geis_subscription_remove_filter(instance->subscription,
182+ instance->window_filter);
183 if (result != GEIS_STATUS_SUCCESS)
184 {
185- geis_error("error removing V1 window filter");
186+ geis_warning("error removing V1 window filter");
187 }
188 }
189 return result;
190@@ -594,6 +613,53 @@
191 }
192
193
194+/*
195+ * Unsubscribes from one or more gestures.
196+ *
197+ * Note the evil wicked dirty case from GeisGestureType* to const char**:
198+ * it turns out the API should have used const char** and apps using the API
199+ * seem to cast GeisGestureType* to const char**, but they would fail to build
200+ * from source if the API changed now and would crash and burn if the
201+ * functionality was changed, hence the brutish method here.
202+ *
203+ * My advice: move to GEIS v2.0 and avoid the whole problem.
204+ */
205+GeisStatus
206+geis_unsubscribe(GeisInstance instance,
207+ GeisGestureType *gesture_list)
208+{
209+ GeisStatus status = GEIS_STATUS_NOT_SUPPORTED;
210+ if (gesture_list == GEIS_ALL_GESTURES)
211+ {
212+ status = geis_subscription_deactivate(instance->subscription);
213+ }
214+ else
215+ {
216+ const char **gesture_name_list = (const char **)gesture_list;
217+ const char **g;
218+
219+ status = geis_subscription_deactivate(instance->subscription);
220+ for (g = gesture_name_list; *g; ++g)
221+ {
222+ GeisFilter filter;
223+
224+ filter = geis_subscription_filter_by_name(instance->subscription, *g);
225+ if (filter)
226+ {
227+ geis_subscription_remove_filter(instance->subscription, filter);
228+ }
229+ }
230+
231+ if (geis_subscription_filter_count(instance->subscription))
232+ {
233+ status = geis_subscription_activate(instance->subscription);
234+ }
235+ }
236+
237+ return status;
238+}
239+
240+
241 GeisStatus
242 geis_input_devices(GeisInstance geis_instance __attribute__((unused)),
243 GeisInputFuncs *func,

Subscribers

People subscribed via source and target branches

to all changes: