Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(79)

Side by Side Diff: ui/aura/desktop_host_linux.cc

Issue 8566037: aura: Fix unit_tests on linux (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merge Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ui/aura/desktop.cc ('k') | ui/views/widget/widget_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 #include "ui/aura/desktop_host.h" 5 #include "ui/aura/desktop_host.h"
6 6
7 #include <X11/cursorfont.h> 7 #include <X11/cursorfont.h>
8 #include <X11/Xlib.h> 8 #include <X11/Xlib.h>
9 9
10 // Get rid of a macro from Xlib.h that conflicts with Aura's RootWindow class. 10 // Get rid of a macro from Xlib.h that conflicts with Aura's RootWindow class.
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 case ui::VKEY_OEM_PLUS: 215 case ui::VKEY_OEM_PLUS:
216 case ui::VKEY_OEM_COMMA: 216 case ui::VKEY_OEM_COMMA:
217 case ui::VKEY_OEM_MINUS: 217 case ui::VKEY_OEM_MINUS:
218 case ui::VKEY_OEM_PERIOD: 218 case ui::VKEY_OEM_PERIOD:
219 return true; 219 return true;
220 default: 220 default:
221 return false; 221 return false;
222 } 222 }
223 } 223 }
224 224
225 class DesktopHostLinux : public DesktopHost { 225 class DesktopHostLinux : public DesktopHost,
226 public MessageLoop::DestructionObserver {
226 public: 227 public:
227 explicit DesktopHostLinux(const gfx::Rect& bounds); 228 explicit DesktopHostLinux(const gfx::Rect& bounds);
228 virtual ~DesktopHostLinux(); 229 virtual ~DesktopHostLinux();
229 230
230 private: 231 private:
231 // base::MessageLoop::Dispatcher Override. 232 // MessageLoop::Dispatcher Override.
232 virtual DispatchStatus Dispatch(XEvent* xev) OVERRIDE; 233 virtual DispatchStatus Dispatch(XEvent* xev) OVERRIDE;
233 234
234 // DesktopHost Overrides. 235 // DesktopHost Overrides.
235 virtual void SetDesktop(Desktop* desktop) OVERRIDE; 236 virtual void SetDesktop(Desktop* desktop) OVERRIDE;
236 virtual gfx::AcceleratedWidget GetAcceleratedWidget() OVERRIDE; 237 virtual gfx::AcceleratedWidget GetAcceleratedWidget() OVERRIDE;
237 virtual void Show() OVERRIDE; 238 virtual void Show() OVERRIDE;
238 virtual void ToggleFullScreen() OVERRIDE; 239 virtual void ToggleFullScreen() OVERRIDE;
239 virtual gfx::Size GetSize() const OVERRIDE; 240 virtual gfx::Size GetSize() const OVERRIDE;
240 virtual void SetSize(const gfx::Size& size) OVERRIDE; 241 virtual void SetSize(const gfx::Size& size) OVERRIDE;
241 virtual gfx::Point GetLocationOnNativeScreen() const OVERRIDE; 242 virtual gfx::Point GetLocationOnNativeScreen() const OVERRIDE;
242 virtual void SetCursor(gfx::NativeCursor cursor_type) OVERRIDE; 243 virtual void SetCursor(gfx::NativeCursor cursor_type) OVERRIDE;
243 virtual gfx::Point QueryMouseLocation() OVERRIDE; 244 virtual gfx::Point QueryMouseLocation() OVERRIDE;
244 virtual void PostNativeEvent(const base::NativeEvent& event) OVERRIDE; 245 virtual void PostNativeEvent(const base::NativeEvent& event) OVERRIDE;
245 246
247 // MessageLoop::DestructionObserver Overrides.
248 virtual void WillDestroyCurrentMessageLoop() OVERRIDE;
249
246 // Returns true if there's an X window manager present... in most cases. Some 250 // Returns true if there's an X window manager present... in most cases. Some
247 // window managers (notably, ion3) don't implement enough of ICCCM for us to 251 // window managers (notably, ion3) don't implement enough of ICCCM for us to
248 // detect that they're there. 252 // detect that they're there.
249 bool IsWindowManagerPresent(); 253 bool IsWindowManagerPresent();
250 254
251 Desktop* desktop_; 255 Desktop* desktop_;
252 256
253 // The display and the native X window hosting the desktop. 257 // The display and the native X window hosting the desktop.
254 Display* xdisplay_; 258 Display* xdisplay_;
255 ::Window xwindow_; 259 ::Window xwindow_;
(...skipping 29 matching lines...) Expand all
285 PointerMotionMask; 289 PointerMotionMask;
286 XSelectInput(xdisplay_, xwindow_, event_mask); 290 XSelectInput(xdisplay_, xwindow_, event_mask);
287 XSelectInput(xdisplay_, root_window_, StructureNotifyMask); 291 XSelectInput(xdisplay_, root_window_, StructureNotifyMask);
288 XFlush(xdisplay_); 292 XFlush(xdisplay_);
289 293
290 // TODO(sadrul): reenable once 103981 is fixed. 294 // TODO(sadrul): reenable once 103981 is fixed.
291 #if defined(TOUCH_UI) 295 #if defined(TOUCH_UI)
292 if (base::MessagePumpForUI::HasXInput2()) 296 if (base::MessagePumpForUI::HasXInput2())
293 ui::TouchFactory::GetInstance()->SetupXI2ForXWindow(xwindow_); 297 ui::TouchFactory::GetInstance()->SetupXI2ForXWindow(xwindow_);
294 #endif 298 #endif
299
300 base::MessagePumpX::SetDefaultDispatcher(this);
301 MessageLoopForUI::current()->AddDestructionObserver(this);
295 } 302 }
296 303
297 DesktopHostLinux::~DesktopHostLinux() { 304 DesktopHostLinux::~DesktopHostLinux() {
298 XDestroyWindow(xdisplay_, xwindow_); 305 XDestroyWindow(xdisplay_, xwindow_);
299 306
300 // Clears XCursorCache. 307 // Clears XCursorCache.
301 ui::GetXCursor(ui::kCursorClearXCursorCache); 308 ui::GetXCursor(ui::kCursorClearXCursorCache);
309
310 MessageLoopForUI::current()->RemoveDestructionObserver(this);
311 base::MessagePumpX::SetDefaultDispatcher(NULL);
302 } 312 }
303 313
304 base::MessagePumpDispatcher::DispatchStatus DesktopHostLinux::Dispatch( 314 base::MessagePumpDispatcher::DispatchStatus DesktopHostLinux::Dispatch(
305 XEvent* xev) { 315 XEvent* xev) {
306 DLOG(WARNING) << "DispatchEvent:" << xev->type; 316 DLOG(WARNING) << "DispatchEvent:" << xev->type;
307 317
308 bool handled = false; 318 bool handled = false;
309 switch (xev->type) { 319 switch (xev->type) {
310 case Expose: 320 case Expose:
311 desktop_->Draw(); 321 desktop_->Draw();
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
527 xevent.xmotion.x_root = point.x(); 537 xevent.xmotion.x_root = point.x();
528 xevent.xmotion.y_root = point.y(); 538 xevent.xmotion.y_root = point.y();
529 } 539 }
530 default: 540 default:
531 break; 541 break;
532 } 542 }
533 Status status = XSendEvent(xdisplay_, xwindow_, False, 0, &xevent); 543 Status status = XSendEvent(xdisplay_, xwindow_, False, 0, &xevent);
534 DLOG(WARNING) << "PostEvent:" << xevent.type << ", status=" << status; 544 DLOG(WARNING) << "PostEvent:" << xevent.type << ", status=" << status;
535 } 545 }
536 546
547 void DesktopHostLinux::WillDestroyCurrentMessageLoop() {
548 desktop_->DeleteInstance();
549 }
550
537 bool DesktopHostLinux::IsWindowManagerPresent() { 551 bool DesktopHostLinux::IsWindowManagerPresent() {
538 // Per ICCCM 2.8, "Manager Selections", window managers should take ownership 552 // Per ICCCM 2.8, "Manager Selections", window managers should take ownership
539 // of WM_Sn selections (where n is a screen number). 553 // of WM_Sn selections (where n is a screen number).
540 ::Atom wm_s0_atom = XInternAtom(xdisplay_, "WM_S0", False); 554 ::Atom wm_s0_atom = XInternAtom(xdisplay_, "WM_S0", False);
541 return XGetSelectionOwner(xdisplay_, wm_s0_atom) != None; 555 return XGetSelectionOwner(xdisplay_, wm_s0_atom) != None;
542 } 556 }
543 557
544 } // namespace 558 } // namespace
545 559
546 // static 560 // static
547 DesktopHost* DesktopHost::Create(const gfx::Rect& bounds) { 561 DesktopHost* DesktopHost::Create(const gfx::Rect& bounds) {
548 return new DesktopHostLinux(bounds); 562 return new DesktopHostLinux(bounds);
549 } 563 }
550 564
551 // static 565 // static
552 gfx::Size DesktopHost::GetNativeScreenSize() { 566 gfx::Size DesktopHost::GetNativeScreenSize() {
553 ::Display* xdisplay = base::MessagePumpX::GetDefaultXDisplay(); 567 ::Display* xdisplay = base::MessagePumpX::GetDefaultXDisplay();
554 return gfx::Size(DisplayWidth(xdisplay, 0), DisplayHeight(xdisplay, 0)); 568 return gfx::Size(DisplayWidth(xdisplay, 0), DisplayHeight(xdisplay, 0));
555 } 569 }
556 570
557 } // namespace aura 571 } // namespace aura
OLDNEW
« no previous file with comments | « ui/aura/desktop.cc ('k') | ui/views/widget/widget_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698