| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef UI_VIEWS_WIDGET_DESKTOP_AURA_DESKTOP_WINDOW_TREE_HOST_X11_H_ | 5 #ifndef UI_VIEWS_WIDGET_DESKTOP_AURA_DESKTOP_WINDOW_TREE_HOST_X11_H_ |
| 6 #define UI_VIEWS_WIDGET_DESKTOP_AURA_DESKTOP_WINDOW_TREE_HOST_X11_H_ | 6 #define UI_VIEWS_WIDGET_DESKTOP_AURA_DESKTOP_WINDOW_TREE_HOST_X11_H_ |
| 7 | 7 |
| 8 #include <X11/extensions/shape.h> | 8 #include <X11/extensions/shape.h> |
| 9 #include <X11/Xlib.h> | 9 #include <X11/Xlib.h> |
| 10 | 10 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 | 30 |
| 31 namespace ui { | 31 namespace ui { |
| 32 class EventHandler; | 32 class EventHandler; |
| 33 } | 33 } |
| 34 | 34 |
| 35 namespace views { | 35 namespace views { |
| 36 class DesktopDragDropClientAuraX11; | 36 class DesktopDragDropClientAuraX11; |
| 37 class DesktopDispatcherClient; | 37 class DesktopDispatcherClient; |
| 38 class DesktopWindowTreeHostObserverX11; | 38 class DesktopWindowTreeHostObserverX11; |
| 39 class X11DesktopWindowMoveClient; | 39 class X11DesktopWindowMoveClient; |
| 40 class X11ScopedCapture; | 40 class X11CaptureWindow; |
| 41 class X11WindowEventFilter; | 41 class X11WindowEventFilter; |
| 42 | 42 |
| 43 class VIEWS_EXPORT DesktopWindowTreeHostX11 | 43 class VIEWS_EXPORT DesktopWindowTreeHostX11 |
| 44 : public DesktopWindowTreeHost, | 44 : public DesktopWindowTreeHost, |
| 45 public aura::WindowTreeHost, | 45 public aura::WindowTreeHost, |
| 46 public ui::EventSource, | 46 public ui::EventSource, |
| 47 public ui::PlatformEventDispatcher { | 47 public ui::PlatformEventDispatcher { |
| 48 public: | 48 public: |
| 49 DesktopWindowTreeHostX11( | 49 DesktopWindowTreeHostX11( |
| 50 internal::NativeWidgetDelegate* native_widget_delegate, | 50 internal::NativeWidgetDelegate* native_widget_delegate, |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 160 virtual void ReleaseCapture() OVERRIDE; | 160 virtual void ReleaseCapture() OVERRIDE; |
| 161 virtual void PostNativeEvent(const base::NativeEvent& native_event) OVERRIDE; | 161 virtual void PostNativeEvent(const base::NativeEvent& native_event) OVERRIDE; |
| 162 virtual void SetCursorNative(gfx::NativeCursor cursor) OVERRIDE; | 162 virtual void SetCursorNative(gfx::NativeCursor cursor) OVERRIDE; |
| 163 virtual void MoveCursorToNative(const gfx::Point& location) OVERRIDE; | 163 virtual void MoveCursorToNative(const gfx::Point& location) OVERRIDE; |
| 164 virtual void OnCursorVisibilityChangedNative(bool show) OVERRIDE; | 164 virtual void OnCursorVisibilityChangedNative(bool show) OVERRIDE; |
| 165 | 165 |
| 166 // Overridden frm ui::EventSource | 166 // Overridden frm ui::EventSource |
| 167 virtual ui::EventProcessor* GetEventProcessor() OVERRIDE; | 167 virtual ui::EventProcessor* GetEventProcessor() OVERRIDE; |
| 168 | 168 |
| 169 private: | 169 private: |
| 170 FRIEND_TEST_ALL_PREFIXES(DesktopWindowTreeHostX11InteractiveUITest, |
| 171 SynchronousCapture); |
| 172 |
| 170 // Initializes our X11 surface to draw on. This method performs all | 173 // Initializes our X11 surface to draw on. This method performs all |
| 171 // initialization related to talking to the X11 server. | 174 // initialization related to talking to the X11 server. |
| 172 void InitX11Window(const Widget::InitParams& params); | 175 void InitX11Window(const Widget::InitParams& params); |
| 173 | 176 |
| 174 // Creates an aura::WindowEventDispatcher to contain the |content_window|, | 177 // Creates an aura::WindowEventDispatcher to contain the |content_window|, |
| 175 // along with all aura client objects that direct behavior. | 178 // along with all aura client objects that direct behavior. |
| 176 aura::WindowEventDispatcher* InitDispatcher(const Widget::InitParams& params); | 179 aura::WindowEventDispatcher* InitDispatcher(const Widget::InitParams& params); |
| 177 | 180 |
| 178 // Called when |xwindow_|'s _NET_WM_STATE property is updated. | 181 // Called when |xwindow_|'s _NET_WM_STATE property is updated. |
| 179 void OnWMStateUpdated(); | 182 void OnWMStateUpdated(); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 190 // Sends a message to the x11 window manager, enabling or disabling the | 193 // Sends a message to the x11 window manager, enabling or disabling the |
| 191 // states |state1| and |state2|. | 194 // states |state1| and |state2|. |
| 192 void SetWMSpecState(bool enabled, ::Atom state1, ::Atom state2); | 195 void SetWMSpecState(bool enabled, ::Atom state1, ::Atom state2); |
| 193 | 196 |
| 194 // Checks if the window manager has set a specific state. | 197 // Checks if the window manager has set a specific state. |
| 195 bool HasWMSpecProperty(const char* property) const; | 198 bool HasWMSpecProperty(const char* property) const; |
| 196 | 199 |
| 197 // Sets whether the window's borders are provided by the window manager. | 200 // Sets whether the window's borders are provided by the window manager. |
| 198 void SetUseNativeFrame(bool use_native_frame); | 201 void SetUseNativeFrame(bool use_native_frame); |
| 199 | 202 |
| 200 // Called when another DRWHL takes capture, or when capture is released | 203 // Releases |capture_window_| so that it can be used by another |
| 201 // entirely. | 204 // DesktopWindowTreeHostX11. |
| 202 void OnCaptureReleased(); | 205 scoped_ptr<X11CaptureWindow> ReleaseCaptureWindow(); |
| 203 | 206 |
| 204 // Dispatches a mouse event, taking mouse capture into account. If a | 207 // Dispatches a mouse event, taking mouse capture into account. If a |
| 205 // different host has capture, we translate the event to its coordinate space | 208 // different host has capture, we translate the event to its coordinate space |
| 206 // and dispatch it to that host instead. | 209 // and dispatch it to that host instead. |
| 207 void DispatchMouseEvent(ui::MouseEvent* event); | 210 void DispatchMouseEvent(ui::MouseEvent* event); |
| 208 | 211 |
| 209 // Dispatches a touch event, taking capture into account. If a different host | 212 // Dispatches a touch event, taking capture into account. If a different host |
| 210 // has capture, then touch-press events are translated to its coordinate space | 213 // has capture, then touch-press events are translated to its coordinate space |
| 211 // and dispatched to that host instead. | 214 // and dispatched to that host instead. |
| 212 void DispatchTouchEvent(ui::TouchEvent* event); | 215 void DispatchTouchEvent(ui::TouchEvent* event); |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 311 | 314 |
| 312 // The window shape if the window is non-rectangular. | 315 // The window shape if the window is non-rectangular. |
| 313 ::Region window_shape_; | 316 ::Region window_shape_; |
| 314 | 317 |
| 315 // Whether |window_shape_| was set via SetShape(). | 318 // Whether |window_shape_| was set via SetShape(). |
| 316 bool custom_window_shape_; | 319 bool custom_window_shape_; |
| 317 | 320 |
| 318 // The size of the window manager provided borders (if any). | 321 // The size of the window manager provided borders (if any). |
| 319 gfx::Insets native_window_frame_borders_; | 322 gfx::Insets native_window_frame_borders_; |
| 320 | 323 |
| 321 // The current root window host that has capture. While X11 has something | 324 // The current DesktopWindowTreeHostX11 which has capture. Set synchronously |
| 322 // like Windows SetCapture()/ReleaseCapture(), it is entirely implicit and | 325 // when capture is requested via SetCapture(). |
| 323 // there are no notifications when this changes. We need to track this so we | |
| 324 // can notify widgets when they have lost capture, which controls a bunch of | |
| 325 // things in views like hiding menus. | |
| 326 static DesktopWindowTreeHostX11* g_current_capture; | 326 static DesktopWindowTreeHostX11* g_current_capture; |
| 327 | 327 |
| 328 // A list of all (top-level) windows that have been created but not yet | 328 // A list of all (top-level) windows that have been created but not yet |
| 329 // destroyed. | 329 // destroyed. |
| 330 static std::list<XID>* open_windows_; | 330 static std::list<XID>* open_windows_; |
| 331 | 331 |
| 332 scoped_ptr<X11ScopedCapture> x11_capture_; | 332 scoped_ptr<X11CaptureWindow> capture_window_; |
| 333 | 333 |
| 334 base::string16 window_title_; | 334 base::string16 window_title_; |
| 335 | 335 |
| 336 // Whether we currently are flashing our frame. This feature is implemented | 336 // Whether we currently are flashing our frame. This feature is implemented |
| 337 // by setting the urgency hint with the window manager, which can draw | 337 // by setting the urgency hint with the window manager, which can draw |
| 338 // attention to the window or completely ignore the hint. We stop flashing | 338 // attention to the window or completely ignore the hint. We stop flashing |
| 339 // the frame when |xwindow_| gains focus or handles a mouse button event. | 339 // the frame when |xwindow_| gains focus or handles a mouse button event. |
| 340 bool urgency_hint_set_; | 340 bool urgency_hint_set_; |
| 341 | 341 |
| 342 base::CancelableCallback<void()> delayed_resize_task_; | 342 base::CancelableCallback<void()> delayed_resize_task_; |
| 343 | 343 |
| 344 DISALLOW_COPY_AND_ASSIGN(DesktopWindowTreeHostX11); | 344 DISALLOW_COPY_AND_ASSIGN(DesktopWindowTreeHostX11); |
| 345 }; | 345 }; |
| 346 | 346 |
| 347 } // namespace views | 347 } // namespace views |
| 348 | 348 |
| 349 #endif // UI_VIEWS_WIDGET_DESKTOP_AURA_DESKTOP_WINDOW_TREE_HOST_X11_H_ | 349 #endif // UI_VIEWS_WIDGET_DESKTOP_AURA_DESKTOP_WINDOW_TREE_HOST_X11_H_ |
| OLD | NEW |