15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef UI_AURA_WINDOW_TREE_HOST_X11_H_ 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define UI_AURA_WINDOW_TREE_HOST_X11_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "ui/aura/aura_export.h" 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/aura/window_tree_host.h" 11a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "ui/events/event_source.h" 12c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "ui/events/platform/platform_event_dispatcher.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/insets.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/rect.h" 1568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ui/gfx/x/x11_atom_cache.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// X forward decls to avoid including Xlib.h in a header file. 18a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochtypedef struct _XDisplay XDisplay; 19a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochtypedef unsigned long XID; 20a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochtypedef XID Window; 21a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ui { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MouseEvent; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace aura { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace internal { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TouchEventCalibrate; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class AURA_EXPORT WindowTreeHostX11 : public WindowTreeHost, 33a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public ui::EventSource, 34a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch public ui::PlatformEventDispatcher { 35a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) explicit WindowTreeHostX11(const gfx::Rect& bounds); 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~WindowTreeHostX11(); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 40c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // ui::PlatformEventDispatcher: 41c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual bool CanDispatchEvent(const ui::PlatformEvent& event) OVERRIDE; 42c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual uint32_t DispatchEvent(const ui::PlatformEvent& event) OVERRIDE; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 44c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // WindowTreeHost: 455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual ui::EventSource* GetEventSource() OVERRIDE; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual gfx::AcceleratedWidget GetAcceleratedWidget() OVERRIDE; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Show() OVERRIDE; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Hide() OVERRIDE; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual gfx::Rect GetBounds() const OVERRIDE; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetBounds(const gfx::Rect& bounds) OVERRIDE; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual gfx::Point GetLocationOnNativeScreen() const OVERRIDE; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetCapture() OVERRIDE; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ReleaseCapture() OVERRIDE; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void PostNativeEvent(const base::NativeEvent& event) OVERRIDE; 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void SetCursorNative(gfx::NativeCursor cursor_type) OVERRIDE; 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void MoveCursorToNative(const gfx::Point& location) OVERRIDE; 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void OnCursorVisibilityChangedNative(bool show) OVERRIDE; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 59a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // ui::EventSource overrides. 60a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual ui::EventProcessor* GetEventProcessor() OVERRIDE; 61a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 62a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch protected: 63a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Called when X Configure Notify event is recevied. 64a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch virtual void OnConfigureNotify(); 65a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Translates the native mouse location into screen coordinates and 67a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // dispatches the event via WindowEventDispatcher. 68a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch virtual void TranslateAndDispatchLocatedEvent(ui::LocatedEvent* event); 69a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 70a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ::Window x_root_window() { return x_root_window_; } 71a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch XDisplay* xdisplay() { return xdisplay_; } 72a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const gfx::Rect bounds() const { return bounds_; } 73a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ui::X11AtomCache* atom_cache() { return &atom_cache_; } 74a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Dispatches XI2 events. Note that some events targetted for the X root 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // window are dispatched to the aura root window (e.g. touch events after 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // calibration). 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DispatchXI2Event(const base::NativeEvent& event); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the cursor on |xwindow_| to |cursor|. Does not check or update 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |current_cursor_|. 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetCursorInternal(gfx::NativeCursor cursor); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The display and the native X window hosting the root window. 8668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) XDisplay* xdisplay_; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ::Window xwindow_; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The native root window. 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ::Window x_root_window_; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Current Aura cursor. 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::NativeCursor current_cursor_; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Is the window mapped to the screen? 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool window_mapped_; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The bounds of |xwindow_|. 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect bounds_; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 101cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_ptr<internal::TouchEventCalibrate> touch_calibrate_; 102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::X11AtomCache atom_cache_; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WindowTreeHostX11); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace test { 10990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 11090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Set the default value of the override redirect flag used to 1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// create a X window for WindowTreeHostX11. 11290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)AURA_EXPORT void SetUseOverrideRedirectWindowByDefault(bool override_redirect); 11390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 11490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} // namespace test 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace aura 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif // UI_AURA_WINDOW_TREE_HOST_X11_H_ 118