summaryrefslogtreecommitdiff
path: root/launcher
diff options
authorMarco Trevisan (Treviño) <mail@3v1n0.net>2012-07-24 23:09:24 +0200
committerMarco Trevisan (Treviño) <mail@3v1n0.net>2012-07-24 23:09:24 +0200
commitb5ff13de6f1c09b1bada88fbfa4b6fd3df98f415 (patch)
tree142e87f7d3197a92d9bbe2cc8f7f1e880d6ac579 /launcher
parent5375f554be6f6963d061f42dc7db6a20d4239dd2 (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.cpp14
-rw-r--r--launcher/EdgeBarrierController.h1
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: