| Index: ui/views/widget/x11_desktop_handler.cc
|
| ===================================================================
|
| --- ui/views/widget/x11_desktop_handler.cc (revision 167419)
|
| +++ ui/views/widget/x11_desktop_handler.cc (working copy)
|
| @@ -1,126 +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/x11_desktop_handler.h"
|
| -
|
| -#include "base/message_loop.h"
|
| -#include "ui/aura/env.h"
|
| -#include "ui/aura/focus_manager.h"
|
| -#include "ui/aura/root_window.h"
|
| -#include "ui/base/x/x11_util.h"
|
| -#include "ui/views/widget/desktop_aura/desktop_activation_client.h"
|
| -
|
| -#if !defined(OS_CHROMEOS)
|
| -#include "ui/views/ime/input_method.h"
|
| -#include "ui/views/widget/desktop_root_window_host_linux.h"
|
| -#endif
|
| -
|
| -namespace {
|
| -
|
| -const char* kAtomsToCache[] = {
|
| - "_NET_ACTIVE_WINDOW",
|
| - NULL
|
| -};
|
| -
|
| -// Our global instance. Deleted when our Env() is deleted.
|
| -views::X11DesktopHandler* g_handler = NULL;
|
| -
|
| -} // namespace
|
| -
|
| -namespace views {
|
| -
|
| -// static
|
| -X11DesktopHandler* X11DesktopHandler::get() {
|
| - if (!g_handler)
|
| - g_handler = new X11DesktopHandler;
|
| -
|
| - return g_handler;
|
| -}
|
| -
|
| -X11DesktopHandler::X11DesktopHandler()
|
| - : xdisplay_(base::MessagePumpAuraX11::GetDefaultXDisplay()),
|
| - x_root_window_(DefaultRootWindow(xdisplay_)),
|
| - current_window_(None),
|
| - atom_cache_(xdisplay_, kAtomsToCache) {
|
| - base::MessagePumpAuraX11::Current()->AddDispatcherForRootWindow(this);
|
| - aura::Env::GetInstance()->AddObserver(this);
|
| -
|
| - XWindowAttributes attr;
|
| - XGetWindowAttributes(xdisplay_, x_root_window_, &attr);
|
| - XSelectInput(xdisplay_, x_root_window_,
|
| - attr.your_event_mask | PropertyChangeMask |
|
| - StructureNotifyMask | SubstructureNotifyMask);
|
| -}
|
| -
|
| -X11DesktopHandler::~X11DesktopHandler() {
|
| - aura::Env::GetInstance()->RemoveObserver(this);
|
| - base::MessagePumpAuraX11::Current()->RemoveDispatcherForRootWindow(this);
|
| -}
|
| -
|
| -void X11DesktopHandler::ActivateWindow(::Window window) {
|
| - XEvent xclient;
|
| - memset(&xclient, 0, sizeof(xclient));
|
| - xclient.type = ClientMessage;
|
| - xclient.xclient.window = window;
|
| - xclient.xclient.message_type = atom_cache_.GetAtom("_NET_ACTIVE_WINDOW");
|
| - xclient.xclient.format = 32;
|
| - xclient.xclient.data.l[0] = 1; // Specified we are an app.
|
| - xclient.xclient.data.l[1] = CurrentTime;
|
| - xclient.xclient.data.l[2] = None;
|
| - xclient.xclient.data.l[3] = 0;
|
| - xclient.xclient.data.l[4] = 0;
|
| -
|
| - XSendEvent(xdisplay_, x_root_window_, False,
|
| - SubstructureRedirectMask | SubstructureNotifyMask,
|
| - &xclient);
|
| -}
|
| -
|
| -bool X11DesktopHandler::IsActiveWindow(::Window window) const {
|
| - return window == current_window_;
|
| -}
|
| -
|
| -bool X11DesktopHandler::Dispatch(const base::NativeEvent& event) {
|
| - // Check for a change to the active window.
|
| - switch (event->type) {
|
| - case PropertyNotify: {
|
| - ::Atom active_window = atom_cache_.GetAtom("_NET_ACTIVE_WINDOW");
|
| -
|
| - if (event->xproperty.window == x_root_window_ &&
|
| - event->xproperty.atom == active_window) {
|
| - int window;
|
| - if (ui::GetIntProperty(x_root_window_, "_NET_ACTIVE_WINDOW", &window) &&
|
| - window) {
|
| - OnActiveWindowChanged(static_cast< ::Window>(window));
|
| - }
|
| - }
|
| - break;
|
| - }
|
| - }
|
| -
|
| - return true;
|
| -}
|
| -
|
| -void X11DesktopHandler::OnWindowInitialized(aura::Window* window) {
|
| -}
|
| -
|
| -void X11DesktopHandler::OnWillDestroyEnv() {
|
| - g_handler = NULL;
|
| - delete this;
|
| -}
|
| -
|
| -void X11DesktopHandler::OnActiveWindowChanged(::Window xid) {
|
| - DesktopRootWindowHostLinux* old_host =
|
| - views::DesktopRootWindowHostLinux::GetHostForXID(current_window_);
|
| - if (old_host)
|
| - old_host->HandleNativeWidgetActivationChanged(false);
|
| -
|
| - DesktopRootWindowHostLinux* new_host =
|
| - views::DesktopRootWindowHostLinux::GetHostForXID(xid);
|
| - if (new_host)
|
| - new_host->HandleNativeWidgetActivationChanged(true);
|
| -
|
| - current_window_ = xid;
|
| -}
|
| -
|
| -} // namespace views
|
|
|