1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef UI_VIEWS_TEST_X11_PROPERTY_CHANGE_WAITER_H_ 6 #define UI_VIEWS_TEST_X11_PROPERTY_CHANGE_WAITER_H_ 7 8 #include "base/callback.h" 9 #include "base/memory/scoped_ptr.h" 10 #include "ui/events/platform/platform_event_dispatcher.h" 11 #include "ui/events/platform/platform_event_types.h" 12 #include "ui/gfx/x/x11_types.h" 13 14 namespace ui { 15 class ScopedEventDispatcher; 16 class X11AtomCache; 17 } 18 19 namespace views { 20 21 // Blocks till the value of |property| on |window| changes. 22 class X11PropertyChangeWaiter : public ui::PlatformEventDispatcher { 23 public: 24 X11PropertyChangeWaiter(XID window, const char* property); 25 virtual ~X11PropertyChangeWaiter(); 26 27 // Blocks till the value of |property_| changes. 28 virtual void Wait(); 29 30 protected: 31 // Returns whether the run loop can exit. 32 virtual bool ShouldKeepOnWaiting(const ui::PlatformEvent& event); 33 xwindow()34 XID xwindow() const { 35 return x_window_; 36 } 37 38 private: 39 // ui::PlatformEventDispatcher: 40 virtual bool CanDispatchEvent(const ui::PlatformEvent& event) OVERRIDE; 41 virtual uint32_t DispatchEvent(const ui::PlatformEvent& event) OVERRIDE; 42 43 XID x_window_; 44 const char* property_; 45 46 // Whether Wait() should block. 47 bool wait_; 48 49 // Ends the run loop. 50 base::Closure quit_closure_; 51 52 // The event mask to be restored upon X11PropertyChangeWaiter's destruction. 53 long old_event_mask_; 54 55 scoped_ptr<ui::ScopedEventDispatcher> dispatcher_; 56 57 scoped_ptr<ui::X11AtomCache> atom_cache_; 58 59 DISALLOW_COPY_AND_ASSIGN(X11PropertyChangeWaiter); 60 }; 61 62 } // namespace views 63 64 #endif // UI_VIEWS_TEST_X11_PROPERTY_CHANGE_WAITER_H_ 65