Chromium Code Reviews| Index: ui/aura/desktop_host_linux.cc |
| diff --git a/ui/aura/desktop_host_linux.cc b/ui/aura/desktop_host_linux.cc |
| index 7e9a5b110b073e12983307923cc62f8c27c31b27..08deabded4bb5c762272759b03147a9102c3a3ac 100644 |
| --- a/ui/aura/desktop_host_linux.cc |
| +++ b/ui/aura/desktop_host_linux.cc |
| @@ -13,6 +13,7 @@ |
| #include <algorithm> |
| #include "base/message_loop.h" |
| +#include "base/message_pump_observer.h" |
| #include "base/message_pump_x.h" |
| #include "ui/aura/cursor.h" |
| #include "ui/aura/desktop.h" |
| @@ -222,7 +223,8 @@ bool ShouldSendCharEventForKeyboardCode(ui::KeyboardCode keycode) { |
| } |
| } |
| -class DesktopHostLinux : public DesktopHost { |
| +class DesktopHostLinux : public DesktopHost, |
| + public base::MessagePumpObserver { |
| public: |
| explicit DesktopHostLinux(const gfx::Rect& bounds); |
| virtual ~DesktopHostLinux(); |
| @@ -243,6 +245,12 @@ class DesktopHostLinux : public DesktopHost { |
| virtual gfx::Point QueryMouseLocation() OVERRIDE; |
| virtual void PostNativeEvent(const base::NativeEvent& event) OVERRIDE; |
| + // base::MessagePumpObserver Overrides. |
| + virtual base::EventStatus WillProcessEvent( |
| + const base::NativeEvent& event) OVERRIDE; |
| + virtual void DidProcessEvent(const base::NativeEvent& event) OVERRIDE; |
| + virtual void DestroyMessagePump() OVERRIDE; |
| + |
| // Returns true if there's an X window manager present... in most cases. Some |
| // window managers (notably, ion3) don't implement enough of ICCCM for us to |
| // detect that they're there. |
| @@ -287,6 +295,9 @@ DesktopHostLinux::DesktopHostLinux(const gfx::Rect& bounds) |
| if (base::MessagePumpForUI::HasXInput2()) |
| ui::TouchFactory::GetInstance()->SetupXI2ForXWindow(xwindow_); |
| #endif |
| + |
| + base::MessagePumpX::SetDefaultDispatcher(this); |
| + MessageLoopForUI::current()->AddObserver(this); |
| } |
| DesktopHostLinux::~DesktopHostLinux() { |
| @@ -294,6 +305,10 @@ DesktopHostLinux::~DesktopHostLinux() { |
| // Clears XCursorCache. |
| ui::GetXCursor(ui::kCursorClearXCursorCache); |
| + |
| + base::MessagePumpX::SetDefaultDispatcher(NULL); |
| + if (MessageLoop::current()) |
| + MessageLoopForUI::current()->RemoveObserver(this); |
|
oshima
2011/11/30 00:04:16
nit: it may be better to put them in reverse order
sadrul
2011/11/30 13:54:58
Done.
|
| } |
| base::MessagePumpDispatcher::DispatchStatus DesktopHostLinux::Dispatch( |
| @@ -520,6 +535,18 @@ void DesktopHostLinux::PostNativeEvent(const base::NativeEvent& native_event) { |
| XSendEvent(xdisplay_, xwindow_, False, 0, &xevent); |
| } |
| +base::EventStatus DesktopHostLinux::WillProcessEvent( |
| + const base::NativeEvent& event) { |
| + return base::EVENT_CONTINUE; |
| +} |
| + |
| +void DesktopHostLinux::DidProcessEvent(const base::NativeEvent& event) { |
| +} |
| + |
| +void DesktopHostLinux::DestroyMessagePump() { |
| + desktop_->DeleteInstance(); |
| +} |
| + |
| bool DesktopHostLinux::IsWindowManagerPresent() { |
| // Per ICCCM 2.8, "Manager Selections", window managers should take ownership |
| // of WM_Sn selections (where n is a screen number). |