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; |