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

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

Issue 8771015: Rename Desktop->RootWindow. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' 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/root_window_host.h ('k') | ui/aura/root_window_host_win.h » ('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/root_window_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.
11 #undef RootWindow 11 #undef RootWindow
12 12
13 #include <algorithm> 13 #include <algorithm>
14 14
15 #include "base/message_loop.h" 15 #include "base/message_loop.h"
16 #include "base/message_pump_x.h" 16 #include "base/message_pump_x.h"
17 #include "ui/aura/cursor.h" 17 #include "ui/aura/cursor.h"
18 #include "ui/aura/desktop.h"
19 #include "ui/aura/event.h" 18 #include "ui/aura/event.h"
19 #include "ui/aura/root_window.h"
20 #include "ui/base/keycodes/keyboard_codes.h" 20 #include "ui/base/keycodes/keyboard_codes.h"
21 #include "ui/base/touch/touch_factory.h" 21 #include "ui/base/touch/touch_factory.h"
22 #include "ui/base/x/x11_util.h" 22 #include "ui/base/x/x11_util.h"
23 #include "ui/gfx/compositor/layer.h" 23 #include "ui/gfx/compositor/layer.h"
24 24
25 #include <X11/cursorfont.h> 25 #include <X11/cursorfont.h>
26 #include <X11/extensions/XInput2.h> 26 #include <X11/extensions/XInput2.h>
27 #include <X11/Xlib.h> 27 #include <X11/Xlib.h>
28 28
29 using std::max; 29 using std::max;
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 case ui::VKEY_OEM_PLUS: 264 case ui::VKEY_OEM_PLUS:
265 case ui::VKEY_OEM_COMMA: 265 case ui::VKEY_OEM_COMMA:
266 case ui::VKEY_OEM_MINUS: 266 case ui::VKEY_OEM_MINUS:
267 case ui::VKEY_OEM_PERIOD: 267 case ui::VKEY_OEM_PERIOD:
268 return true; 268 return true;
269 default: 269 default:
270 return false; 270 return false;
271 } 271 }
272 } 272 }
273 273
274 class DesktopHostLinux : public DesktopHost, 274 class RootWindowHostLinux : public RootWindowHost,
275 public MessageLoop::DestructionObserver { 275 public MessageLoop::DestructionObserver {
276 public: 276 public:
277 explicit DesktopHostLinux(const gfx::Rect& bounds); 277 explicit RootWindowHostLinux(const gfx::Rect& bounds);
278 virtual ~DesktopHostLinux(); 278 virtual ~RootWindowHostLinux();
279 279
280 private: 280 private:
281 // MessageLoop::Dispatcher Override. 281 // MessageLoop::Dispatcher Override.
282 virtual DispatchStatus Dispatch(XEvent* xev) OVERRIDE; 282 virtual DispatchStatus Dispatch(XEvent* xev) OVERRIDE;
283 283
284 // DesktopHost Overrides. 284 // RootWindowHost Overrides.
285 virtual void SetDesktop(Desktop* desktop) OVERRIDE; 285 virtual void SetRootWindow(RootWindow* root_window) OVERRIDE;
286 virtual gfx::AcceleratedWidget GetAcceleratedWidget() OVERRIDE; 286 virtual gfx::AcceleratedWidget GetAcceleratedWidget() OVERRIDE;
287 virtual void Show() OVERRIDE; 287 virtual void Show() OVERRIDE;
288 virtual void ToggleFullScreen() OVERRIDE; 288 virtual void ToggleFullScreen() OVERRIDE;
289 virtual gfx::Size GetSize() const OVERRIDE; 289 virtual gfx::Size GetSize() const OVERRIDE;
290 virtual void SetSize(const gfx::Size& size) OVERRIDE; 290 virtual void SetSize(const gfx::Size& size) OVERRIDE;
291 virtual gfx::Point GetLocationOnNativeScreen() const OVERRIDE; 291 virtual gfx::Point GetLocationOnNativeScreen() const OVERRIDE;
292 virtual void SetCursor(gfx::NativeCursor cursor_type) OVERRIDE; 292 virtual void SetCursor(gfx::NativeCursor cursor_type) OVERRIDE;
293 virtual gfx::Point QueryMouseLocation() OVERRIDE; 293 virtual gfx::Point QueryMouseLocation() OVERRIDE;
294 virtual void PostNativeEvent(const base::NativeEvent& event) OVERRIDE; 294 virtual void PostNativeEvent(const base::NativeEvent& event) OVERRIDE;
295 295
296 // MessageLoop::DestructionObserver Overrides. 296 // MessageLoop::DestructionObserver Overrides.
297 virtual void WillDestroyCurrentMessageLoop() OVERRIDE; 297 virtual void WillDestroyCurrentMessageLoop() OVERRIDE;
298 298
299 // Returns true if there's an X window manager present... in most cases. Some 299 // Returns true if there's an X window manager present... in most cases. Some
300 // window managers (notably, ion3) don't implement enough of ICCCM for us to 300 // window managers (notably, ion3) don't implement enough of ICCCM for us to
301 // detect that they're there. 301 // detect that they're there.
302 bool IsWindowManagerPresent(); 302 bool IsWindowManagerPresent();
303 303
304 Desktop* desktop_; 304 RootWindow* root_window_;
305 305
306 // The display and the native X window hosting the desktop. 306 // The display and the native X window hosting the root window.
307 Display* xdisplay_; 307 Display* xdisplay_;
308 ::Window xwindow_; 308 ::Window xwindow_;
309 309
310 // The native root window. 310 // The native root window.
311 ::Window root_window_; 311 ::Window x_root_window_;
312 312
313 // Current Aura cursor. 313 // Current Aura cursor.
314 gfx::NativeCursor current_cursor_; 314 gfx::NativeCursor current_cursor_;
315 315
316 // The bounds of |xwindow_|. 316 // The bounds of |xwindow_|.
317 gfx::Rect bounds_; 317 gfx::Rect bounds_;
318 318
319 DISALLOW_COPY_AND_ASSIGN(DesktopHostLinux); 319 DISALLOW_COPY_AND_ASSIGN(RootWindowHostLinux);
320 }; 320 };
321 321
322 DesktopHostLinux::DesktopHostLinux(const gfx::Rect& bounds) 322 RootWindowHostLinux::RootWindowHostLinux(const gfx::Rect& bounds)
323 : desktop_(NULL), 323 : root_window_(NULL),
324 xdisplay_(base::MessagePumpX::GetDefaultXDisplay()), 324 xdisplay_(base::MessagePumpX::GetDefaultXDisplay()),
325 xwindow_(0), 325 xwindow_(0),
326 root_window_(DefaultRootWindow(xdisplay_)), 326 x_root_window_(DefaultRootWindow(xdisplay_)),
327 current_cursor_(aura::kCursorNull), 327 current_cursor_(aura::kCursorNull),
328 bounds_(bounds) { 328 bounds_(bounds) {
329 xwindow_ = XCreateSimpleWindow(xdisplay_, root_window_, 329 xwindow_ = XCreateSimpleWindow(xdisplay_, x_root_window_,
330 bounds.x(), bounds.y(), 330 bounds.x(), bounds.y(),
331 bounds.width(), bounds.height(), 331 bounds.width(), bounds.height(),
332 0, 0, 0); 332 0, 0, 0);
333 333
334 long event_mask = ButtonPressMask | ButtonReleaseMask | 334 long event_mask = ButtonPressMask | ButtonReleaseMask |
335 KeyPressMask | KeyReleaseMask | 335 KeyPressMask | KeyReleaseMask |
336 EnterWindowMask | LeaveWindowMask | 336 EnterWindowMask | LeaveWindowMask |
337 ExposureMask | VisibilityChangeMask | 337 ExposureMask | VisibilityChangeMask |
338 StructureNotifyMask | PropertyChangeMask | 338 StructureNotifyMask | PropertyChangeMask |
339 PointerMotionMask; 339 PointerMotionMask;
340 XSelectInput(xdisplay_, xwindow_, event_mask); 340 XSelectInput(xdisplay_, xwindow_, event_mask);
341 XSelectInput(xdisplay_, root_window_, StructureNotifyMask); 341 XSelectInput(xdisplay_, x_root_window_, StructureNotifyMask);
342 XFlush(xdisplay_); 342 XFlush(xdisplay_);
343 343
344 // TODO(sad): Re-enable once crbug.com/106516 is fixed. 344 // TODO(sad): Re-enable once crbug.com/106516 is fixed.
345 #if 0 345 #if 0
346 if (base::MessagePumpForUI::HasXInput2()) 346 if (base::MessagePumpForUI::HasXInput2())
347 ui::TouchFactory::GetInstance()->SetupXI2ForXWindow(xwindow_); 347 ui::TouchFactory::GetInstance()->SetupXI2ForXWindow(xwindow_);
348 #endif 348 #endif
349 349
350 base::MessagePumpX::SetDefaultDispatcher(this); 350 base::MessagePumpX::SetDefaultDispatcher(this);
351 MessageLoopForUI::current()->AddDestructionObserver(this); 351 MessageLoopForUI::current()->AddDestructionObserver(this);
352 } 352 }
353 353
354 DesktopHostLinux::~DesktopHostLinux() { 354 RootWindowHostLinux::~RootWindowHostLinux() {
355 XDestroyWindow(xdisplay_, xwindow_); 355 XDestroyWindow(xdisplay_, xwindow_);
356 356
357 // Clears XCursorCache. 357 // Clears XCursorCache.
358 ui::GetXCursor(ui::kCursorClearXCursorCache); 358 ui::GetXCursor(ui::kCursorClearXCursorCache);
359 359
360 MessageLoopForUI::current()->RemoveDestructionObserver(this); 360 MessageLoopForUI::current()->RemoveDestructionObserver(this);
361 base::MessagePumpX::SetDefaultDispatcher(NULL); 361 base::MessagePumpX::SetDefaultDispatcher(NULL);
362 } 362 }
363 363
364 base::MessagePumpDispatcher::DispatchStatus DesktopHostLinux::Dispatch( 364 base::MessagePumpDispatcher::DispatchStatus RootWindowHostLinux::Dispatch(
365 XEvent* xev) { 365 XEvent* xev) {
366 bool handled = false; 366 bool handled = false;
367 367
368 CheckXEventForConsistency(xev); 368 CheckXEventForConsistency(xev);
369 369
370 switch (xev->type) { 370 switch (xev->type) {
371 case Expose: 371 case Expose:
372 desktop_->ScheduleDraw(); 372 root_window_->ScheduleDraw();
373 handled = true; 373 handled = true;
374 break; 374 break;
375 case KeyPress: { 375 case KeyPress: {
376 KeyEvent keydown_event(xev, false); 376 KeyEvent keydown_event(xev, false);
377 handled = desktop_->DispatchKeyEvent(&keydown_event); 377 handled = root_window_->DispatchKeyEvent(&keydown_event);
378 if (ShouldSendCharEventForKeyboardCode(keydown_event.key_code())) { 378 if (ShouldSendCharEventForKeyboardCode(keydown_event.key_code())) {
379 KeyEvent char_event(xev, true); 379 KeyEvent char_event(xev, true);
380 handled |= desktop_->DispatchKeyEvent(&char_event); 380 handled |= root_window_->DispatchKeyEvent(&char_event);
381 } 381 }
382 break; 382 break;
383 } 383 }
384 case KeyRelease: { 384 case KeyRelease: {
385 KeyEvent keyup_event(xev, false); 385 KeyEvent keyup_event(xev, false);
386 handled = desktop_->DispatchKeyEvent(&keyup_event); 386 handled = root_window_->DispatchKeyEvent(&keyup_event);
387 break; 387 break;
388 } 388 }
389 case ButtonPress: 389 case ButtonPress:
390 case ButtonRelease: { 390 case ButtonRelease: {
391 MouseEvent mouseev(xev); 391 MouseEvent mouseev(xev);
392 handled = desktop_->DispatchMouseEvent(&mouseev); 392 handled = root_window_->DispatchMouseEvent(&mouseev);
393 break; 393 break;
394 } 394 }
395 case ConfigureNotify: { 395 case ConfigureNotify: {
396 if (xev->xconfigure.window == root_window_) { 396 if (xev->xconfigure.window == x_root_window_) {
397 desktop_->OnNativeScreenResized( 397 root_window_->OnNativeScreenResized(
398 gfx::Size(xev->xconfigure.width, xev->xconfigure.height)); 398 gfx::Size(xev->xconfigure.width, xev->xconfigure.height));
399 handled = true; 399 handled = true;
400 break; 400 break;
401 } 401 }
402 402
403 DCHECK_EQ(xwindow_, xev->xconfigure.window); 403 DCHECK_EQ(xwindow_, xev->xconfigure.window);
404 DCHECK_EQ(xwindow_, xev->xconfigure.event); 404 DCHECK_EQ(xwindow_, xev->xconfigure.event);
405 405
406 // It's possible that the X window may be resized by some other means than 406 // It's possible that the X window may be resized by some other means than
407 // from within aura (e.g. the X window manager can change the size). Make 407 // from within aura (e.g. the X window manager can change the size). Make
408 // sure the desktop size is maintained properly. 408 // sure the root window size is maintained properly.
409 gfx::Rect bounds(xev->xconfigure.x, xev->xconfigure.y, 409 gfx::Rect bounds(xev->xconfigure.x, xev->xconfigure.y,
410 xev->xconfigure.width, xev->xconfigure.height); 410 xev->xconfigure.width, xev->xconfigure.height);
411 bool size_changed = bounds_.size() != bounds.size(); 411 bool size_changed = bounds_.size() != bounds.size();
412 bounds_ = bounds; 412 bounds_ = bounds;
413 if (size_changed) 413 if (size_changed)
414 desktop_->OnHostResized(bounds.size()); 414 root_window_->OnHostResized(bounds.size());
415 handled = true; 415 handled = true;
416 break; 416 break;
417 } 417 }
418 case GenericEvent: { 418 case GenericEvent: {
419 ui::TouchFactory* factory = ui::TouchFactory::GetInstance(); 419 ui::TouchFactory* factory = ui::TouchFactory::GetInstance();
420 if (!factory->ShouldProcessXI2Event(xev)) 420 if (!factory->ShouldProcessXI2Event(xev))
421 break; 421 break;
422 422
423 // If this is a motion event we want to coalesce all pending motion 423 // If this is a motion event we want to coalesce all pending motion
424 // events that are at the top of the queue. 424 // events that are at the top of the queue.
425 XEvent last_event; 425 XEvent last_event;
426 int num_coalesced = 0; 426 int num_coalesced = 0;
427 if (xev->xgeneric.evtype == XI_Motion) { 427 if (xev->xgeneric.evtype == XI_Motion) {
428 num_coalesced = CoalescePendingXIMotionEvents(xev, &last_event); 428 num_coalesced = CoalescePendingXIMotionEvents(xev, &last_event);
429 if (num_coalesced > 0) 429 if (num_coalesced > 0)
430 xev = &last_event; 430 xev = &last_event;
431 } 431 }
432 432
433 ui::EventType type = ui::EventTypeFromNative(xev); 433 ui::EventType type = ui::EventTypeFromNative(xev);
434 switch (type) { 434 switch (type) {
435 case ui::ET_TOUCH_PRESSED: 435 case ui::ET_TOUCH_PRESSED:
436 case ui::ET_TOUCH_RELEASED: 436 case ui::ET_TOUCH_RELEASED:
437 case ui::ET_TOUCH_MOVED: { 437 case ui::ET_TOUCH_MOVED: {
438 TouchEvent touchev(xev); 438 TouchEvent touchev(xev);
439 handled = desktop_->DispatchTouchEvent(&touchev); 439 handled = root_window_->DispatchTouchEvent(&touchev);
440 break; 440 break;
441 } 441 }
442 case ui::ET_MOUSE_PRESSED: 442 case ui::ET_MOUSE_PRESSED:
443 case ui::ET_MOUSE_RELEASED: 443 case ui::ET_MOUSE_RELEASED:
444 case ui::ET_MOUSE_MOVED: 444 case ui::ET_MOUSE_MOVED:
445 case ui::ET_MOUSE_DRAGGED: 445 case ui::ET_MOUSE_DRAGGED:
446 case ui::ET_MOUSEWHEEL: 446 case ui::ET_MOUSEWHEEL:
447 case ui::ET_MOUSE_ENTERED: 447 case ui::ET_MOUSE_ENTERED:
448 case ui::ET_MOUSE_EXITED: { 448 case ui::ET_MOUSE_EXITED: {
449 MouseEvent mouseev(xev); 449 MouseEvent mouseev(xev);
450 handled = desktop_->DispatchMouseEvent(&mouseev); 450 handled = root_window_->DispatchMouseEvent(&mouseev);
451 break; 451 break;
452 } 452 }
453 case ui::ET_UNKNOWN: 453 case ui::ET_UNKNOWN:
454 handled = false; 454 handled = false;
455 break; 455 break;
456 default: 456 default:
457 NOTREACHED(); 457 NOTREACHED();
458 } 458 }
459 459
460 // If we coalesced an event we need to free its cookie. 460 // If we coalesced an event we need to free its cookie.
(...skipping 27 matching lines...) Expand all
488 next_event.xmotion.subwindow == xev->xmotion.subwindow && 488 next_event.xmotion.subwindow == xev->xmotion.subwindow &&
489 next_event.xmotion.state == xev->xmotion.state) { 489 next_event.xmotion.state == xev->xmotion.state) {
490 XNextEvent(xev->xany.display, &last_event); 490 XNextEvent(xev->xany.display, &last_event);
491 xev = &last_event; 491 xev = &last_event;
492 } else { 492 } else {
493 break; 493 break;
494 } 494 }
495 } 495 }
496 496
497 MouseEvent mouseev(xev); 497 MouseEvent mouseev(xev);
498 handled = desktop_->DispatchMouseEvent(&mouseev); 498 handled = root_window_->DispatchMouseEvent(&mouseev);
499 break; 499 break;
500 } 500 }
501 } 501 }
502 return handled ? EVENT_PROCESSED : EVENT_IGNORED; 502 return handled ? EVENT_PROCESSED : EVENT_IGNORED;
503 } 503 }
504 504
505 void DesktopHostLinux::SetDesktop(Desktop* desktop) { 505 void RootWindowHostLinux::SetRootWindow(RootWindow* root_window) {
506 desktop_ = desktop; 506 root_window_ = root_window;
507 } 507 }
508 508
509 gfx::AcceleratedWidget DesktopHostLinux::GetAcceleratedWidget() { 509 gfx::AcceleratedWidget RootWindowHostLinux::GetAcceleratedWidget() {
510 return xwindow_; 510 return xwindow_;
511 } 511 }
512 512
513 void DesktopHostLinux::Show() { 513 void RootWindowHostLinux::Show() {
514 XMapWindow(xdisplay_, xwindow_); 514 XMapWindow(xdisplay_, xwindow_);
515 } 515 }
516 516
517 void DesktopHostLinux::ToggleFullScreen() { 517 void RootWindowHostLinux::ToggleFullScreen() {
518 NOTIMPLEMENTED(); 518 NOTIMPLEMENTED();
519 } 519 }
520 520
521 gfx::Size DesktopHostLinux::GetSize() const { 521 gfx::Size RootWindowHostLinux::GetSize() const {
522 return bounds_.size(); 522 return bounds_.size();
523 } 523 }
524 524
525 void DesktopHostLinux::SetSize(const gfx::Size& size) { 525 void RootWindowHostLinux::SetSize(const gfx::Size& size) {
526 if (size == bounds_.size()) 526 if (size == bounds_.size())
527 return; 527 return;
528 528
529 XResizeWindow(xdisplay_, xwindow_, size.width(), size.height()); 529 XResizeWindow(xdisplay_, xwindow_, size.width(), size.height());
530 530
531 // Assume that the resize will go through as requested, which should be the 531 // Assume that the resize will go through as requested, which should be the
532 // case if we're running without a window manager. If there's a window 532 // case if we're running without a window manager. If there's a window
533 // manager, it can modify or ignore the request, but (per ICCCM) we'll get a 533 // manager, it can modify or ignore the request, but (per ICCCM) we'll get a
534 // (possibly synthetic) ConfigureNotify about the actual size and correct 534 // (possibly synthetic) ConfigureNotify about the actual size and correct
535 // |bounds_| later. 535 // |bounds_| later.
536 bounds_.set_size(size); 536 bounds_.set_size(size);
537 desktop_->OnHostResized(size); 537 root_window_->OnHostResized(size);
538 } 538 }
539 539
540 gfx::Point DesktopHostLinux::GetLocationOnNativeScreen() const { 540 gfx::Point RootWindowHostLinux::GetLocationOnNativeScreen() const {
541 return bounds_.origin(); 541 return bounds_.origin();
542 } 542 }
543 543
544 void DesktopHostLinux::SetCursor(gfx::NativeCursor cursor) { 544 void RootWindowHostLinux::SetCursor(gfx::NativeCursor cursor) {
545 if (current_cursor_ == cursor) 545 if (current_cursor_ == cursor)
546 return; 546 return;
547 current_cursor_ = cursor; 547 current_cursor_ = cursor;
548 // Custom web cursors are handled directly. 548 // Custom web cursors are handled directly.
549 if (cursor == kCursorCustom) 549 if (cursor == kCursorCustom)
550 return; 550 return;
551 int cursor_shape = CursorShapeFromNative(cursor); 551 int cursor_shape = CursorShapeFromNative(cursor);
552 ::Cursor xcursor = ui::GetXCursor(cursor_shape); 552 ::Cursor xcursor = ui::GetXCursor(cursor_shape);
553 XDefineCursor(xdisplay_, xwindow_, xcursor); 553 XDefineCursor(xdisplay_, xwindow_, xcursor);
554 } 554 }
555 555
556 gfx::Point DesktopHostLinux::QueryMouseLocation() { 556 gfx::Point RootWindowHostLinux::QueryMouseLocation() {
557 ::Window root_return, child_return; 557 ::Window root_return, child_return;
558 int root_x_return, root_y_return, win_x_return, win_y_return; 558 int root_x_return, root_y_return, win_x_return, win_y_return;
559 unsigned int mask_return; 559 unsigned int mask_return;
560 XQueryPointer(xdisplay_, 560 XQueryPointer(xdisplay_,
561 xwindow_, 561 xwindow_,
562 &root_return, 562 &root_return,
563 &child_return, 563 &child_return,
564 &root_x_return, &root_y_return, 564 &root_x_return, &root_y_return,
565 &win_x_return, &win_y_return, 565 &win_x_return, &win_y_return,
566 &mask_return); 566 &mask_return);
567 return gfx::Point(max(0, min(bounds_.width(), win_x_return)), 567 return gfx::Point(max(0, min(bounds_.width(), win_x_return)),
568 max(0, min(bounds_.height(), win_y_return))); 568 max(0, min(bounds_.height(), win_y_return)));
569 } 569 }
570 570
571 void DesktopHostLinux::PostNativeEvent(const base::NativeEvent& native_event) { 571 void RootWindowHostLinux::PostNativeEvent(
572 const base::NativeEvent& native_event) {
572 DCHECK(xwindow_); 573 DCHECK(xwindow_);
573 DCHECK(xdisplay_); 574 DCHECK(xdisplay_);
574 XEvent xevent = *native_event; 575 XEvent xevent = *native_event;
575 xevent.xany.display = xdisplay_; 576 xevent.xany.display = xdisplay_;
576 xevent.xany.window = xwindow_; 577 xevent.xany.window = xwindow_;
577 578
578 switch (xevent.type) { 579 switch (xevent.type) {
579 case EnterNotify: 580 case EnterNotify:
580 case LeaveNotify: 581 case LeaveNotify:
581 case MotionNotify: 582 case MotionNotify:
582 case KeyPress: 583 case KeyPress:
583 case KeyRelease: 584 case KeyRelease:
584 case ButtonPress: 585 case ButtonPress:
585 case ButtonRelease: { 586 case ButtonRelease: {
586 // The fields used below are in the same place for all of events 587 // The fields used below are in the same place for all of events
587 // above. Using xmotion from XEvent's unions to avoid repeating 588 // above. Using xmotion from XEvent's unions to avoid repeating
588 // the code. 589 // the code.
589 xevent.xmotion.root = root_window_; 590 xevent.xmotion.root = x_root_window_;
590 xevent.xmotion.time = CurrentTime; 591 xevent.xmotion.time = CurrentTime;
591 592
592 gfx::Point point(xevent.xmotion.x, xevent.xmotion.y); 593 gfx::Point point(xevent.xmotion.x, xevent.xmotion.y);
593 desktop_->ConvertPointToNativeScreen(&point); 594 root_window_->ConvertPointToNativeScreen(&point);
594 xevent.xmotion.x_root = point.x(); 595 xevent.xmotion.x_root = point.x();
595 xevent.xmotion.y_root = point.y(); 596 xevent.xmotion.y_root = point.y();
596 } 597 }
597 default: 598 default:
598 break; 599 break;
599 } 600 }
600 XSendEvent(xdisplay_, xwindow_, False, 0, &xevent); 601 XSendEvent(xdisplay_, xwindow_, False, 0, &xevent);
601 } 602 }
602 603
603 void DesktopHostLinux::WillDestroyCurrentMessageLoop() { 604 void RootWindowHostLinux::WillDestroyCurrentMessageLoop() {
604 aura::Desktop::DeleteInstance(); 605 aura::RootWindow::DeleteInstance();
605 } 606 }
606 607
607 bool DesktopHostLinux::IsWindowManagerPresent() { 608 bool RootWindowHostLinux::IsWindowManagerPresent() {
608 // Per ICCCM 2.8, "Manager Selections", window managers should take ownership 609 // Per ICCCM 2.8, "Manager Selections", window managers should take ownership
609 // of WM_Sn selections (where n is a screen number). 610 // of WM_Sn selections (where n is a screen number).
610 ::Atom wm_s0_atom = XInternAtom(xdisplay_, "WM_S0", False); 611 ::Atom wm_s0_atom = XInternAtom(xdisplay_, "WM_S0", False);
611 return XGetSelectionOwner(xdisplay_, wm_s0_atom) != None; 612 return XGetSelectionOwner(xdisplay_, wm_s0_atom) != None;
612 } 613 }
613 614
614 } // namespace 615 } // namespace
615 616
616 // static 617 // static
617 DesktopHost* DesktopHost::Create(const gfx::Rect& bounds) { 618 RootWindowHost* RootWindowHost::Create(const gfx::Rect& bounds) {
618 return new DesktopHostLinux(bounds); 619 return new RootWindowHostLinux(bounds);
619 } 620 }
620 621
621 // static 622 // static
622 gfx::Size DesktopHost::GetNativeScreenSize() { 623 gfx::Size RootWindowHost::GetNativeScreenSize() {
623 ::Display* xdisplay = base::MessagePumpX::GetDefaultXDisplay(); 624 ::Display* xdisplay = base::MessagePumpX::GetDefaultXDisplay();
624 return gfx::Size(DisplayWidth(xdisplay, 0), DisplayHeight(xdisplay, 0)); 625 return gfx::Size(DisplayWidth(xdisplay, 0), DisplayHeight(xdisplay, 0));
625 } 626 }
626 627
627 } // namespace aura 628 } // namespace aura
OLDNEW
« no previous file with comments | « ui/aura/root_window_host.h ('k') | ui/aura/root_window_host_win.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698