Chromium Code Reviews| Index: ui/base/x/x11_scoped_event_selector.cc |
| diff --git a/ui/base/x/x11_window_event_manager.cc b/ui/base/x/x11_scoped_event_selector.cc |
| similarity index 67% |
| rename from ui/base/x/x11_window_event_manager.cc |
| rename to ui/base/x/x11_scoped_event_selector.cc |
| index 4fc0c559772acd478825f3890bb65ffefa05f3c1..9af45d9d7e29906d7c58578c66b3b134993b25c1 100644 |
| --- a/ui/base/x/x11_window_event_manager.cc |
| +++ b/ui/base/x/x11_scoped_event_selector.cc |
| @@ -1,34 +1,23 @@ |
| -// Copyright 2014 The Chromium Authors. All rights reserved. |
| +// Copyright 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| -#include "ui/base/x/x11_window_event_manager.h" |
| +#include "ui/base/x/x11_scoped_event_selector.h" |
| #include <stddef.h> |
| #include <X11/Xlib.h> |
| #include <X11/Xlib-xcb.h> |
| #include <xcb/xcb.h> |
| -#include "base/compiler_specific.h" |
| -#include "base/memory/singleton.h" |
| +#include "base/logging.h" |
| namespace ui { |
| -XScopedEventSelector::XScopedEventSelector(XID xid, uint32_t event_mask) |
| - : xid_(xid), event_mask_(event_mask) { |
| - XWindowEventManager::GetInstance()->SelectEvents(xid_, event_mask_); |
| -} |
| - |
| -XScopedEventSelector::~XScopedEventSelector() { |
| - XWindowEventManager::GetInstance()->DeselectEvents(xid_, event_mask_); |
| -} |
| - |
| // static |
| -XWindowEventManager* XWindowEventManager::GetInstance() { |
| - return base::Singleton<XWindowEventManager>::get(); |
| -} |
| +std::map<XID, std::unique_ptr<XScopedEventSelector::MultiMask>> |
|
Daniel Erat
2016/09/13 22:15:36
this isn't allowed, unfortunately: static variable
|
| + XScopedEventSelector::mask_map_; |
| -class XWindowEventManager::MultiMask { |
| +class XScopedEventSelector::MultiMask { |
| public: |
| MultiMask() { |
| for (int i = 0; i < kMaskSize; i++) |
| @@ -70,10 +59,10 @@ class XWindowEventManager::MultiMask { |
| DISALLOW_COPY_AND_ASSIGN(MultiMask); |
| }; |
| -XWindowEventManager::XWindowEventManager() {} |
| -XWindowEventManager::~XWindowEventManager() {} |
| - |
| -void XWindowEventManager::SelectEvents(XID xid, uint32_t event_mask) { |
| +XScopedEventSelector::XScopedEventSelector(XID xid, uint32_t event_mask) |
| + : xid_(xid), event_mask_(event_mask) { |
| + if (event_mask == NoEventMask) |
| + return; |
| std::unique_ptr<MultiMask>& mask = mask_map_[xid]; |
| if (!mask) |
| mask.reset(new MultiMask()); |
| @@ -82,15 +71,17 @@ void XWindowEventManager::SelectEvents(XID xid, uint32_t event_mask) { |
| AfterMaskChanged(xid, old_mask); |
| } |
| -void XWindowEventManager::DeselectEvents(XID xid, uint32_t event_mask) { |
| - DCHECK(mask_map_.find(xid) != mask_map_.end()); |
| - std::unique_ptr<MultiMask>& mask = mask_map_[xid]; |
| +XScopedEventSelector::~XScopedEventSelector() { |
| + if (event_mask_ == NoEventMask) |
| + return; |
| + DCHECK(mask_map_.find(xid_) != mask_map_.end()); |
| + std::unique_ptr<MultiMask>& mask = mask_map_[xid_]; |
| uint32_t old_mask = mask->ToMask(); |
| - mask->RemoveMask(event_mask); |
| - AfterMaskChanged(xid, old_mask); |
| + mask->RemoveMask(event_mask_); |
| + AfterMaskChanged(xid_, old_mask); |
| } |
| -void XWindowEventManager::AfterMaskChanged(XID xid, uint32_t old_mask) { |
| +void XScopedEventSelector::AfterMaskChanged(XID xid, uint32_t old_mask) { |
| uint32_t new_mask = mask_map_[xid]->ToMask(); |
| if (new_mask == old_mask) |
| return; |