summaryrefslogtreecommitdiff
path: root/chromium/ui/views/widget/desktop_aura/x11_desktop_handler.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/ui/views/widget/desktop_aura/x11_desktop_handler.cc')
-rw-r--r--chromium/ui/views/widget/desktop_aura/x11_desktop_handler.cc141
1 files changed, 0 insertions, 141 deletions
diff --git a/chromium/ui/views/widget/desktop_aura/x11_desktop_handler.cc b/chromium/ui/views/widget/desktop_aura/x11_desktop_handler.cc
deleted file mode 100644
index cfe62d62144..00000000000
--- a/chromium/ui/views/widget/desktop_aura/x11_desktop_handler.cc
+++ /dev/null
@@ -1,141 +0,0 @@
-// Copyright (c) 2012 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/views/widget/desktop_aura/x11_desktop_handler.h"
-
-#include <memory>
-
-#include "base/strings/string_number_conversions.h"
-#include "ui/aura/env.h"
-#include "ui/aura/window_event_dispatcher.h"
-#include "ui/base/x/x11_menu_list.h"
-#include "ui/base/x/x11_util.h"
-#include "ui/events/platform/platform_event_source.h"
-#include "ui/events/x/x11_window_event_manager.h"
-#include "ui/gfx/x/x11.h"
-#include "ui/gfx/x/x11_atom_cache.h"
-#include "ui/gfx/x/x11_error_tracker.h"
-#include "ui/views/widget/desktop_aura/desktop_window_tree_host_x11.h"
-
-namespace {
-
-// Our global instance. Deleted when our Env() is deleted.
-views::X11DesktopHandler* g_handler = nullptr;
-
-} // namespace
-
-namespace views {
-
-// static
-X11DesktopHandler* X11DesktopHandler::get() {
- if (!g_handler)
- g_handler = new X11DesktopHandler;
-
- return g_handler;
-}
-
-// static
-X11DesktopHandler* X11DesktopHandler::get_dont_create() {
- return g_handler;
-}
-
-X11DesktopHandler::X11DesktopHandler()
- : xdisplay_(gfx::GetXDisplay()),
- x_root_window_(DefaultRootWindow(xdisplay_)) {
- if (ui::PlatformEventSource::GetInstance())
- ui::PlatformEventSource::GetInstance()->AddPlatformEventDispatcher(this);
- aura::Env::GetInstance()->AddObserver(this);
-
- x_root_window_events_ = std::make_unique<ui::XScopedEventSelector>(
- x_root_window_,
- PropertyChangeMask | StructureNotifyMask | SubstructureNotifyMask);
-}
-
-X11DesktopHandler::~X11DesktopHandler() {
- aura::Env::GetInstance()->RemoveObserver(this);
- if (ui::PlatformEventSource::GetInstance())
- ui::PlatformEventSource::GetInstance()->RemovePlatformEventDispatcher(this);
-}
-
-void X11DesktopHandler::AddObserver(X11DesktopHandlerObserver* observer) {
- observers_.AddObserver(observer);
-}
-
-void X11DesktopHandler::RemoveObserver(X11DesktopHandlerObserver* observer) {
- observers_.RemoveObserver(observer);
-}
-
-std::string X11DesktopHandler::GetWorkspace() {
- if (workspace_.empty())
- UpdateWorkspace();
- return workspace_;
-}
-
-bool X11DesktopHandler::UpdateWorkspace() {
- int desktop;
- if (ui::GetCurrentDesktop(&desktop)) {
- workspace_ = base::NumberToString(desktop);
- return true;
- }
- return false;
-}
-
-bool X11DesktopHandler::CanDispatchEvent(const ui::PlatformEvent& event) {
- return event->type == CreateNotify || event->type == DestroyNotify ||
- (event->type == PropertyNotify &&
- event->xproperty.window == x_root_window_);
-}
-
-uint32_t X11DesktopHandler::DispatchEvent(const ui::PlatformEvent& event) {
- switch (event->type) {
- case PropertyNotify: {
- if (event->xproperty.atom == gfx::GetAtom("_NET_CURRENT_DESKTOP")) {
- if (UpdateWorkspace()) {
- for (views::X11DesktopHandlerObserver& observer : observers_)
- observer.OnWorkspaceChanged(workspace_);
- }
- }
- break;
- }
- case CreateNotify:
- OnWindowCreatedOrDestroyed(event->type, event->xcreatewindow.window);
- break;
- case DestroyNotify:
- OnWindowCreatedOrDestroyed(event->type, event->xdestroywindow.window);
- break;
- default:
- NOTREACHED();
- }
-
- return ui::POST_DISPATCH_NONE;
-}
-
-void X11DesktopHandler::OnWindowInitialized(aura::Window* window) {
-}
-
-void X11DesktopHandler::OnWillDestroyEnv() {
- g_handler = nullptr;
- delete this;
-}
-
-void X11DesktopHandler::OnWindowCreatedOrDestroyed(int event_type,
- XID window) {
- // Menus created by Chrome can be drag and drop targets. Since they are
- // direct children of the screen root window and have override_redirect
- // we cannot use regular _NET_CLIENT_LIST_STACKING property to find them
- // and use a separate cache to keep track of them.
- // TODO(varkha): Implement caching of all top level X windows and their
- // coordinates and stacking order to eliminate repeated calls to the X server
- // during mouse movement, drag and shaping events.
- if (event_type == CreateNotify) {
- // The window might be destroyed if the message pump did not get a chance to
- // run but we can safely ignore the X error.
- gfx::X11ErrorTracker error_tracker;
- ui::XMenuList::GetInstance()->MaybeRegisterMenu(window);
- } else {
- ui::XMenuList::GetInstance()->MaybeUnregisterMenu(window);
- }
-}
-
-} // namespace views