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
=== modified file 'COPYING'
--- COPYING 2010-08-16 21:16:38 +0000
+++ COPYING 2011-02-22 03:31:37 +0000
@@ -1,5 +1,3 @@
1Copyright (C) 2010 Canonical, Ltd. All rights reserved.
2
3 GNU LESSER GENERAL PUBLIC LICENSE1 GNU LESSER GENERAL PUBLIC LICENSE
4 Version 3, 29 June 20072 Version 3, 29 June 2007
53
64
=== modified file 'ChangeLog'
--- ChangeLog 2011-02-21 16:08:50 +0000
+++ ChangeLog 2011-02-22 03:31:37 +0000
@@ -1,5 +1,27 @@
12011-02-22 Stephen M. Webb <stephen.webb@canonical.com>12011-02-22 Stephen M. Webb <stephen.webb@canonical.com>
22
3 Released version 2.0.1.
4
5 * configure.ac (AC_INIT): bumped package version to 2.0.1
6
72011-02-22 Stephen M. Webb <stephen.webb@canonical.com>
8
9 Used standardized LGPL-v3 license text.
10
11 * COPYING: refreshed with standardized text.
12
132011-02-22 Stephen M. Webb <stephen.webb@canonical.com>
14
15 Restored missing GEIS v1 symbols and fixed a segfault in libgrip.
16
17 * libutouch-geis/geis_v1.c (struct _GeisInstance): added window_filter field
18 (geis_init): initialized window_filter field
19 (_subscribe_device): used window_filter field from instance
20 (geis_configuration_set_value): added missing GEIS v1 function
21 (geis_unsubscribe): added missing GEIS v1 function
22
232011-02-22 Stephen M. Webb <stephen.webb@canonical.com>
24
3 Release version 2.0.025 Release version 2.0.0
426
5 * configure.ac (AC_INIT): bumped package version to 2.0.027 * configure.ac (AC_INIT): bumped package version to 2.0.0
628
=== modified file 'configure.ac'
--- configure.ac 2011-02-21 16:08:50 +0000
+++ configure.ac 2011-02-22 03:31:37 +0000
@@ -20,7 +20,7 @@
20#20#
2121
22AC_PREREQ(2.65)22AC_PREREQ(2.65)
23AC_INIT([utouch-geis],[2.0.0],23AC_INIT([utouch-geis],[2.0.1],
24 [stephen.webb@canonical.com],,24 [stephen.webb@canonical.com],,
25 [https://launchpad.net/utouch-geis])25 [https://launchpad.net/utouch-geis])
26AC_CONFIG_HEADERS([geis_config.h])26AC_CONFIG_HEADERS([geis_config.h])
2727
=== modified file 'libutouch-geis/geis_v1.c'
--- libutouch-geis/geis_v1.c 2011-02-21 14:23:43 +0000
+++ libutouch-geis/geis_v1.c 2011-02-22 03:31:37 +0000
@@ -36,6 +36,7 @@
36struct _GeisInstance36struct _GeisInstance
37{37{
38 GeisSubscription subscription;38 GeisSubscription subscription;
39 GeisFilter window_filter;
39 GeisGestureFuncs *gesture_funcs;40 GeisGestureFuncs *gesture_funcs;
40 GeisPointer gesture_cookie;41 GeisPointer gesture_cookie;
41};42};
@@ -375,10 +376,10 @@
375 GeisStatus status = GEIS_STATUS_UNKNOWN_ERROR;376 GeisStatus status = GEIS_STATUS_UNKNOWN_ERROR;
376 GeisXcbWinInfo *xcb_win_info = (GeisXcbWinInfo*)win_info->win_info;377 GeisXcbWinInfo *xcb_win_info = (GeisXcbWinInfo*)win_info->win_info;
377 GeisInteger window = (GeisInteger)(xcb_win_info->window_id);378 GeisInteger window = (GeisInteger)(xcb_win_info->window_id);
378 GeisFilter filter;379 GeisInstance instance;
379380
380 *geis_instance = calloc(1, sizeof(struct _GeisInstance));381 instance = calloc(1, sizeof(struct _GeisInstance));
381 if (!*geis_instance)382 if (!instance)
382 {383 {
383 geis_error("error allocating GEIS API instance.");384 geis_error("error allocating GEIS API instance.");
384 goto final_exit;385 goto final_exit;
@@ -394,27 +395,30 @@
394 {395 {
395 goto unwind_instance;396 goto unwind_instance;
396 }397 }
397 geis_register_event_callback(g_geis, _v1_event_callback, *geis_instance);398 geis_register_event_callback(g_geis, _v1_event_callback, instance);
398 }399 }
399 ++g_geis_refcount;400 ++g_geis_refcount;
400401
401 (*geis_instance)->subscription = geis_subscription_new(g_geis,402 instance->subscription = geis_subscription_new(g_geis,
402 _generate_subscription_name(xcb_win_info),403 _generate_subscription_name(xcb_win_info),
403 GEIS_SUBSCRIPTION_CONT);404 GEIS_SUBSCRIPTION_CONT);
404 filter = geis_filter_new(g_geis, WINDOW_FILTER);405 instance->window_filter = geis_filter_new(g_geis, WINDOW_FILTER);
405 geis_filter_add_term(filter, GEIS_FILTER_REGION,406 geis_filter_add_term(instance->window_filter,
407 GEIS_FILTER_REGION,
406 GEIS_REGION_ATTRIBUTE_WINDOWID, GEIS_FILTER_OP_EQ, window,408 GEIS_REGION_ATTRIBUTE_WINDOWID, GEIS_FILTER_OP_EQ, window,
407 NULL);409 NULL);
408 status = geis_subscription_add_filter((*geis_instance)->subscription, filter);410 status = geis_subscription_add_filter(instance->subscription,
411 instance->window_filter);
409412
410 /* pump the geis event queue to force device and class events to be picked up */413 /* pump the geis event queue to force device and class events to be picked up */
411 while (GEIS_STATUS_CONTINUE == geis_dispatch_events(g_geis))414 while (GEIS_STATUS_CONTINUE == geis_dispatch_events(g_geis))
412 ;415 ;
413416
417 *geis_instance = instance;
414 goto final_exit;418 goto final_exit;
415419
416unwind_instance:420unwind_instance:
417 free(*geis_instance);421 free(instance);
418final_exit:422final_exit:
419 geis_debug("ends");423 geis_debug("ends");
420 return status;424 return status;
@@ -480,6 +484,29 @@
480}484}
481485
482486
487/*
488 * Sets a feature configuration value.
489 */
490GeisStatus
491geis_configuration_set_value(GeisInstance geis_instance __attribute__((unused)),
492 int configuration_item,
493 void *value)
494{
495 GeisStatus status = GEIS_STATUS_NOT_SUPPORTED;
496 if (!value)
497 {
498 return GEIS_BAD_ARGUMENT;
499 }
500
501 switch (configuration_item)
502 {
503 default:
504 break;
505 }
506 return status;
507}
508
509
483GeisStatus510GeisStatus
484geis_event_dispatch(GeisInstance geis_instance __attribute__((unused)))511geis_event_dispatch(GeisInstance geis_instance __attribute__((unused)))
485{512{
@@ -500,18 +527,9 @@
500 }527 }
501 else528 else
502 {529 {
503 GeisFilter proto_filter;
504 const char **g;530 const char **g;
505531
506 geis_debug("subscribing device %d for the following gestures:", device_id);532 geis_debug("subscribing device %d for the following gestures:", device_id);
507 proto_filter = geis_subscription_filter_by_name(instance->subscription,
508 WINDOW_FILTER);
509 if (!proto_filter)
510 {
511 geis_error("can not find V1 window filter");
512 return result;
513 }
514
515 for (g = gesture_list; *g; ++g)533 for (g = gesture_list; *g; ++g)
516 {534 {
517 GeisV1AttrMap v1attr;535 GeisV1AttrMap v1attr;
@@ -528,7 +546,7 @@
528 {546 {
529 if (0 == strcmp(*g, v1attr->v1_type))547 if (0 == strcmp(*g, v1attr->v1_type))
530 {548 {
531 GeisFilter filter = geis_filter_clone(proto_filter, *g);549 GeisFilter filter = geis_filter_clone(instance->window_filter, *g);
532 if (!filter)550 if (!filter)
533 {551 {
534 geis_error("error creating new filter");552 geis_error("error creating new filter");
@@ -551,10 +569,11 @@
551 }569 }
552570
553 /* remove the window-id-only filter since it allows ALL gesture classes */571 /* remove the window-id-only filter since it allows ALL gesture classes */
554 result = geis_subscription_remove_filter(instance->subscription, proto_filter);572 result = geis_subscription_remove_filter(instance->subscription,
573 instance->window_filter);
555 if (result != GEIS_STATUS_SUCCESS)574 if (result != GEIS_STATUS_SUCCESS)
556 {575 {
557 geis_error("error removing V1 window filter");576 geis_warning("error removing V1 window filter");
558 }577 }
559 }578 }
560 return result;579 return result;
@@ -594,6 +613,53 @@
594}613}
595614
596615
616/*
617 * Unsubscribes from one or more gestures.
618 *
619 * Note the evil wicked dirty case from GeisGestureType* to const char**:
620 * it turns out the API should have used const char** and apps using the API
621 * seem to cast GeisGestureType* to const char**, but they would fail to build
622 * from source if the API changed now and would crash and burn if the
623 * functionality was changed, hence the brutish method here.
624 *
625 * My advice: move to GEIS v2.0 and avoid the whole problem.
626 */
627GeisStatus
628geis_unsubscribe(GeisInstance instance,
629 GeisGestureType *gesture_list)
630{
631 GeisStatus status = GEIS_STATUS_NOT_SUPPORTED;
632 if (gesture_list == GEIS_ALL_GESTURES)
633 {
634 status = geis_subscription_deactivate(instance->subscription);
635 }
636 else
637 {
638 const char **gesture_name_list = (const char **)gesture_list;
639 const char **g;
640
641 status = geis_subscription_deactivate(instance->subscription);
642 for (g = gesture_name_list; *g; ++g)
643 {
644 GeisFilter filter;
645
646 filter = geis_subscription_filter_by_name(instance->subscription, *g);
647 if (filter)
648 {
649 geis_subscription_remove_filter(instance->subscription, filter);
650 }
651 }
652
653 if (geis_subscription_filter_count(instance->subscription))
654 {
655 status = geis_subscription_activate(instance->subscription);
656 }
657 }
658
659 return status;
660}
661
662
597GeisStatus663GeisStatus
598geis_input_devices(GeisInstance geis_instance __attribute__((unused)),664geis_input_devices(GeisInstance geis_instance __attribute__((unused)),
599 GeisInputFuncs *func,665 GeisInputFuncs *func,

Subscribers

People subscribed via source and target branches

to all changes: