~chasedouglas/grail/tap-accept-v2

« back to all changes in this revision

Viewing changes to src/v3/handle.cpp

  • Committer: Daniel d'Andrada
  • Date: 2012-03-14 19:15:09 UTC
  • mfrom: (196.1.3 lp949916_v3)
  • Revision ID: daniel.dandrada@canonical.com-20120314191509-tcaxcjy9nxshghm5
Merge "Atomic rules: Don't send slices from premature gestures."

+ refactoring of v3/Recognizer
+ regression test

Show diffs side-by-side

added added

removed removed

Lines of Context:
32
32
 
33
33
#include <utouch/frame_x11.h>
34
34
 
 
35
#include "v3/atomic-recognizer.h"
35
36
#include "v3/event.h"
36
37
#include "v3/log.h"
37
 
#include "v3/recognizer.h"
 
38
#include "v3/regular-recognizer.h"
38
39
#include "v3/subscription.h"
39
40
 
40
41
namespace utouch {
49
50
  }
50
51
}
51
52
 
 
53
Recognizer *UGHandle::CreateRecognizerForSubscription(
 
54
    UGSubscription* subscription) {
 
55
  Recognizer* recognizer;
 
56
 
 
57
  if (subscription->atomic())
 
58
    recognizer = new AtomicRecognizer(this,
 
59
        subscription->device(),
 
60
        subscription->window_id());
 
61
  else
 
62
    recognizer = new RegularRecognizer(this,
 
63
        subscription->device(),
 
64
        subscription->window_id());
 
65
 
 
66
  recognizers_[subscription->device()][subscription->window_id()] =
 
67
    std::move(UniqueRecognizer(recognizer));
 
68
 
 
69
  return recognizer;
 
70
}
 
71
 
52
72
UGStatus UGHandle::ActivateSubscription(UGSubscription* subscription) {
53
73
  Recognizer* recognizer;
54
74
 
59
79
      recognizers_[subscription->device()].find(subscription->window_id());
60
80
  if (it != recognizers_[subscription->device()].end()) {
61
81
    recognizer = it->second.get();
 
82
 
 
83
    if (recognizer->atomic() != subscription->atomic()
 
84
        && recognizer->num_subscriptions() == 0) {
 
85
      // Fix the mismatch
 
86
      recognizer = CreateRecognizerForSubscription(subscription);
 
87
    }
 
88
 
62
89
  } else {
63
 
    recognizer = new Recognizer(this, subscription->device(),
64
 
                                subscription->window_id());
65
 
    recognizers_[subscription->device()][subscription->window_id()] =
66
 
        std::move(UniqueRecognizer(recognizer));
 
90
    recognizer = CreateRecognizerForSubscription(subscription);
67
91
  }
68
92
 
69
93
  return recognizer->ActivateSubscription(subscription);