diff options
| author | Marco Trevisan (Treviño) <mail@3v1n0.net> | 2012-07-24 23:09:24 +0200 |
|---|---|---|
| committer | Marco Trevisan (Treviño) <mail@3v1n0.net> | 2012-07-24 23:09:24 +0200 |
| commit | b5ff13de6f1c09b1bada88fbfa4b6fd3df98f415 (patch) | |
| tree | 142e87f7d3197a92d9bbe2cc8f7f1e880d6ac579 /launcher | |
| parent | 5375f554be6f6963d061f42dc7db6a20d4239dd2 (diff) | |
EdgeBarrierController: fix the monitor/size comparisons
This fixes a crash, plus add GetSubscriber protected member (bzr r2509.2.10)
Diffstat (limited to 'launcher')
| -rw-r--r-- | launcher/EdgeBarrierController.cpp | 14 | ||||
| -rw-r--r-- | launcher/EdgeBarrierController.h | 1 |
2 files changed, 12 insertions, 3 deletions
diff --git a/launcher/EdgeBarrierController.cpp b/launcher/EdgeBarrierController.cpp index def374fdc..f0cca98ea 100644 --- a/launcher/EdgeBarrierController.cpp +++ b/launcher/EdgeBarrierController.cpp @@ -128,7 +128,7 @@ void EdgeBarrierController::Impl::OnPointerBarrierEvent(PointerBarrierWrapper* o unsigned int monitor = owner->index; bool process = true; - if (monitor <= subscribers_.size()) + if (monitor < subscribers_.size()) { auto subscriber = subscribers_[monitor]; @@ -178,7 +178,7 @@ EdgeBarrierController::~EdgeBarrierController() void EdgeBarrierController::Subscribe(EdgeBarrierSubscriber* subscriber, unsigned int monitor) { - if (pimpl->subscribers_.size() <= monitor) + if (monitor >= pimpl->subscribers_.size()) pimpl->subscribers_.resize(monitor + 1); auto monitors = UScreen::GetDefault()->GetMonitors(); @@ -189,7 +189,7 @@ void EdgeBarrierController::Subscribe(EdgeBarrierSubscriber* subscriber, unsigne void EdgeBarrierController::Unsubscribe(EdgeBarrierSubscriber* subscriber, unsigned int monitor) { - if (pimpl->subscribers_.size() < monitor || pimpl->subscribers_[monitor] != subscriber) + if (monitor >= pimpl->subscribers_.size() || pimpl->subscribers_[monitor] != subscriber) return; auto monitors = UScreen::GetDefault()->GetMonitors(); @@ -198,6 +198,14 @@ void EdgeBarrierController::Unsubscribe(EdgeBarrierSubscriber* subscriber, unsig pimpl->SetupBarriers(monitors); } +EdgeBarrierSubscriber* EdgeBarrierController::GetSubscriber(unsigned int monitor) +{ + if (monitor >= pimpl->subscribers_.size()) + return nullptr; + + return pimpl->subscribers_[monitor]; +} + void EdgeBarrierController::ProcessBarrierEvent(PointerBarrierWrapper* owner, BarrierEvent::Ptr event) { pimpl->OnPointerBarrierEvent(owner, event); diff --git a/launcher/EdgeBarrierController.h b/launcher/EdgeBarrierController.h index 5e63c9370..54ab54347 100644 --- a/launcher/EdgeBarrierController.h +++ b/launcher/EdgeBarrierController.h @@ -45,6 +45,7 @@ public: void Unsubscribe(EdgeBarrierSubscriber* subscriber, unsigned int monitor); protected: + EdgeBarrierSubscriber* GetSubscriber(unsigned int monitor); void ProcessBarrierEvent(PointerBarrierWrapper* owner, BarrierEvent::Ptr event); private: |
