| Index: ui/views/widget/desktop_aura/x11_desktop_handler.cc
|
| diff --git a/ui/views/widget/desktop_aura/x11_desktop_handler.cc b/ui/views/widget/desktop_aura/x11_desktop_handler.cc
|
| index aa3c234553df05cf3bd820eee1eb0bc0b273c5a7..0e2855d4dbd8683aa0ad7d90dd65be96a8266bb4 100644
|
| --- a/ui/views/widget/desktop_aura/x11_desktop_handler.cc
|
| +++ b/ui/views/widget/desktop_aura/x11_desktop_handler.cc
|
| @@ -21,7 +21,6 @@
|
| namespace {
|
|
|
| const char* const kAtomsToCache[] = {
|
| - "_NET_ACTIVE_WINDOW",
|
| "_NET_CURRENT_DESKTOP",
|
| nullptr
|
| };
|
| @@ -44,12 +43,7 @@ X11DesktopHandler* X11DesktopHandler::get() {
|
| X11DesktopHandler::X11DesktopHandler()
|
| : xdisplay_(gfx::GetXDisplay()),
|
| x_root_window_(DefaultRootWindow(xdisplay_)),
|
| - x_active_window_(None),
|
| - wm_user_time_ms_(CurrentTime),
|
| - current_window_(None),
|
| - current_window_active_state_(NOT_ACTIVE),
|
| - atom_cache_(xdisplay_, kAtomsToCache),
|
| - wm_supports_active_window_(false) {
|
| + atom_cache_(xdisplay_, kAtomsToCache) {
|
| if (ui::PlatformEventSource::GetInstance())
|
| ui::PlatformEventSource::GetInstance()->AddPlatformEventDispatcher(this);
|
| aura::Env::GetInstance()->AddObserver(this);
|
| @@ -59,15 +53,6 @@ X11DesktopHandler::X11DesktopHandler()
|
| XSelectInput(xdisplay_, x_root_window_,
|
| attr.your_event_mask | PropertyChangeMask |
|
| StructureNotifyMask | SubstructureNotifyMask);
|
| -
|
| - if (ui::GuessWindowManager() == ui::WM_WMII) {
|
| - // wmii says that it supports _NET_ACTIVE_WINDOW but does not.
|
| - // https://code.google.com/p/wmii/issues/detail?id=266
|
| - wm_supports_active_window_ = false;
|
| - } else {
|
| - wm_supports_active_window_ =
|
| - ui::WmSupportsHint(atom_cache_.GetAtom("_NET_ACTIVE_WINDOW"));
|
| - }
|
| }
|
|
|
| X11DesktopHandler::~X11DesktopHandler() {
|
| @@ -76,56 +61,6 @@ X11DesktopHandler::~X11DesktopHandler() {
|
| ui::PlatformEventSource::GetInstance()->RemovePlatformEventDispatcher(this);
|
| }
|
|
|
| -void X11DesktopHandler::ActivateWindow(::Window window) {
|
| - if ((current_window_ == None || current_window_ == window) &&
|
| - current_window_active_state_ == NOT_ACTIVE) {
|
| - // |window| is most likely still active wrt to the X server. Undo the
|
| - // changes made in DeactivateWindow().
|
| - OnActiveWindowChanged(window, ACTIVE);
|
| -
|
| - // Go through the regular activation path such that calling
|
| - // DeactivateWindow() and ActivateWindow() immediately afterwards results
|
| - // in an active X window.
|
| - }
|
| -
|
| - if (wm_supports_active_window_) {
|
| - DCHECK_EQ(gfx::GetXDisplay(), xdisplay_);
|
| -
|
| - // If the window is not already active, send a hint to activate it
|
| - if (x_active_window_ != window) {
|
| - if (wm_user_time_ms_ == CurrentTime) {
|
| - set_wm_user_time_ms(
|
| - ui::X11EventSource::GetInstance()->UpdateLastSeenServerTime());
|
| - }
|
| - 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] = wm_user_time_ms_;
|
| - 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);
|
| - } else {
|
| - OnActiveWindowChanged(window, ACTIVE);
|
| - }
|
| - } else {
|
| - XRaiseWindow(xdisplay_, window);
|
| - // Directly ask the X server to give focus to the window. Note
|
| - // that the call will raise an X error if the window is not
|
| - // mapped.
|
| - XSetInputFocus(xdisplay_, window, RevertToParent, CurrentTime);
|
| -
|
| - OnActiveWindowChanged(window, ACTIVE);
|
| - }
|
| -}
|
| -
|
| void X11DesktopHandler::AddObserver(X11DesktopHandlerObserver* observer) {
|
| observers_.AddObserver(observer);
|
| }
|
| @@ -149,57 +84,6 @@ bool X11DesktopHandler::UpdateWorkspace() {
|
| return false;
|
| }
|
|
|
| -void X11DesktopHandler::set_wm_user_time_ms(Time time_ms) {
|
| - if (time_ms != CurrentTime) {
|
| - int64_t event_time_64 = time_ms;
|
| - int64_t time_difference = wm_user_time_ms_ - event_time_64;
|
| - // Ignore timestamps that go backwards. However, X server time is a 32-bit
|
| - // millisecond counter, so if the time goes backwards by more than half the
|
| - // range of the 32-bit counter, treat it as a rollover.
|
| - if (time_difference < 0 || time_difference > (UINT32_MAX >> 1))
|
| - wm_user_time_ms_ = time_ms;
|
| - }
|
| -}
|
| -
|
| -void X11DesktopHandler::DeactivateWindow(::Window window) {
|
| - if (!IsActiveWindow(window))
|
| - return;
|
| -
|
| - XLowerWindow(xdisplay_, window);
|
| -
|
| - // Per ICCCM: http://tronche.com/gui/x/icccm/sec-4.html#s-4.1.7
|
| - // "Clients should not give up the input focus of their own volition.
|
| - // They should ignore input that they receive instead."
|
| - //
|
| - // There is nothing else that we can do. Pretend that we have been
|
| - // deactivated and ignore keyboard input in DesktopWindowTreeHostX11.
|
| - OnActiveWindowChanged(window, NOT_ACTIVE);
|
| -}
|
| -
|
| -bool X11DesktopHandler::IsActiveWindow(::Window window) const {
|
| - return window == current_window_ && current_window_active_state_ == ACTIVE;
|
| -}
|
| -
|
| -void X11DesktopHandler::ProcessXEvent(XEvent* event) {
|
| - // Ignore focus events that are being sent only because the pointer is over
|
| - // our window, even if the input focus is in a different window.
|
| - if (event->xfocus.detail == NotifyPointer)
|
| - return;
|
| -
|
| - switch (event->type) {
|
| - case FocusIn:
|
| - if (current_window_ != event->xfocus.window)
|
| - OnActiveWindowChanged(event->xfocus.window, ACTIVE);
|
| - break;
|
| - case FocusOut:
|
| - if (current_window_ == event->xfocus.window)
|
| - OnActiveWindowChanged(None, NOT_ACTIVE);
|
| - break;
|
| - default:
|
| - NOTREACHED();
|
| - }
|
| -}
|
| -
|
| bool X11DesktopHandler::CanDispatchEvent(const ui::PlatformEvent& event) {
|
| return event->type == CreateNotify || event->type == DestroyNotify ||
|
| (event->type == PropertyNotify &&
|
| @@ -209,17 +93,8 @@ bool X11DesktopHandler::CanDispatchEvent(const ui::PlatformEvent& event) {
|
| uint32_t X11DesktopHandler::DispatchEvent(const ui::PlatformEvent& event) {
|
| switch (event->type) {
|
| case PropertyNotify: {
|
| - if (event->xproperty.atom == atom_cache_.GetAtom("_NET_ACTIVE_WINDOW")) {
|
| - ::Window window;
|
| - if (ui::GetXIDProperty(x_root_window_, "_NET_ACTIVE_WINDOW", &window) &&
|
| - window) {
|
| - x_active_window_ = window;
|
| - OnActiveWindowChanged(window, ACTIVE);
|
| - } else {
|
| - x_active_window_ = None;
|
| - }
|
| - } else if (event->xproperty.atom ==
|
| - atom_cache_.GetAtom("_NET_CURRENT_DESKTOP")) {
|
| + if (event->xproperty.atom ==
|
| + atom_cache_.GetAtom("_NET_CURRENT_DESKTOP")) {
|
| if (UpdateWorkspace()) {
|
| FOR_EACH_OBSERVER(views::X11DesktopHandlerObserver, observers_,
|
| OnWorkspaceChanged(workspace_));
|
| @@ -232,10 +107,6 @@ uint32_t X11DesktopHandler::DispatchEvent(const ui::PlatformEvent& event) {
|
| break;
|
| case DestroyNotify:
|
| OnWindowCreatedOrDestroyed(event->type, event->xdestroywindow.window);
|
| - // If the current active window is being destroyed, reset our tracker.
|
| - if (x_active_window_ == event->xdestroywindow.window) {
|
| - x_active_window_ = None;
|
| - }
|
| break;
|
| default:
|
| NOTREACHED();
|
| @@ -252,30 +123,6 @@ void X11DesktopHandler::OnWillDestroyEnv() {
|
| delete this;
|
| }
|
|
|
| -void X11DesktopHandler::OnActiveWindowChanged(::Window xid,
|
| - ActiveState active_state) {
|
| - if (current_window_ == xid && current_window_active_state_ == active_state)
|
| - return;
|
| -
|
| - if (current_window_active_state_ == ACTIVE) {
|
| - DesktopWindowTreeHostX11* old_host =
|
| - views::DesktopWindowTreeHostX11::GetHostForXID(current_window_);
|
| - if (old_host)
|
| - old_host->HandleNativeWidgetActivationChanged(false);
|
| - }
|
| -
|
| - // Update the current window ID to effectively change the active widget.
|
| - current_window_ = xid;
|
| - current_window_active_state_ = active_state;
|
| -
|
| - if (active_state == ACTIVE) {
|
| - DesktopWindowTreeHostX11* new_host =
|
| - views::DesktopWindowTreeHostX11::GetHostForXID(xid);
|
| - if (new_host)
|
| - new_host->HandleNativeWidgetActivationChanged(true);
|
| - }
|
| -}
|
| -
|
| void X11DesktopHandler::OnWindowCreatedOrDestroyed(int event_type,
|
| XID window) {
|
| // Menus created by Chrome can be drag and drop targets. Since they are
|
|
|