Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(169)

Unified Diff: ui/base/x/x11_scoped_event_selector.cc

Issue 2319933002: X11: Remove calls to XSelectInput (Closed)
Patch Set: Remove XWindowEventManager Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/base/x/x11_scoped_event_selector.h ('k') | ui/base/x/x11_window_event_manager.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
« no previous file with comments | « ui/base/x/x11_scoped_event_selector.h ('k') | ui/base/x/x11_window_event_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698