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 // This file defines utility functions for X11 (Linux only). This code has been | 5 // This file defines utility functions for X11 (Linux only). This code has been |
6 // ported from XCB since we can't use XCB on Ubuntu while its 32-bit support | 6 // ported from XCB since we can't use XCB on Ubuntu while its 32-bit support |
7 // remains woefully incomplete. | 7 // remains woefully incomplete. |
8 | 8 |
9 #include "ui/base/x/x11_util.h" | 9 #include "ui/base/x/x11_util.h" |
10 | 10 |
11 #include <ctype.h> | 11 #include <ctype.h> |
12 #include <sys/ipc.h> | 12 #include <sys/ipc.h> |
13 #include <sys/shm.h> | 13 #include <sys/shm.h> |
14 | 14 |
15 #include <list> | 15 #include <list> |
16 #include <map> | 16 #include <map> |
17 #include <utility> | 17 #include <utility> |
18 #include <vector> | 18 #include <vector> |
19 | 19 |
20 #include <X11/extensions/shape.h> | 20 #include <X11/extensions/shape.h> |
21 #include <X11/extensions/XInput2.h> | 21 #include <X11/extensions/XInput2.h> |
22 | 22 |
23 #include "base/bind.h" | 23 #include "base/bind.h" |
24 #include "base/command_line.h" | 24 #include "base/command_line.h" |
| 25 #include "base/debug/trace_event.h" |
25 #include "base/logging.h" | 26 #include "base/logging.h" |
26 #include "base/memory/scoped_ptr.h" | 27 #include "base/memory/scoped_ptr.h" |
27 #include "base/memory/singleton.h" | 28 #include "base/memory/singleton.h" |
28 #include "base/message_loop/message_loop.h" | 29 #include "base/message_loop/message_loop.h" |
29 #include "base/metrics/histogram.h" | 30 #include "base/metrics/histogram.h" |
30 #include "base/strings/string_number_conversions.h" | 31 #include "base/strings/string_number_conversions.h" |
31 #include "base/strings/string_util.h" | 32 #include "base/strings/string_util.h" |
32 #include "base/strings/stringprintf.h" | 33 #include "base/strings/stringprintf.h" |
33 #include "base/sys_byteorder.h" | 34 #include "base/sys_byteorder.h" |
34 #include "base/threading/thread.h" | 35 #include "base/threading/thread.h" |
(...skipping 544 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
579 GC gc = XCreateGC(display, root_window, GCForeground, &gc_values); | 580 GC gc = XCreateGC(display, root_window, GCForeground, &gc_values); |
580 XFillRectangle(display, root_window, gc, | 581 XFillRectangle(display, root_window, gc, |
581 root_bounds.x(), | 582 root_bounds.x(), |
582 root_bounds.y(), | 583 root_bounds.y(), |
583 root_bounds.width(), | 584 root_bounds.width(), |
584 root_bounds.height()); | 585 root_bounds.height()); |
585 XFreeGC(display, gc); | 586 XFreeGC(display, gc); |
586 } | 587 } |
587 | 588 |
588 bool IsWindowVisible(XID window) { | 589 bool IsWindowVisible(XID window) { |
| 590 TRACE_EVENT0("ui", "IsWindowVisible"); |
| 591 |
589 XWindowAttributes win_attributes; | 592 XWindowAttributes win_attributes; |
590 if (!XGetWindowAttributes(gfx::GetXDisplay(), window, &win_attributes)) | 593 if (!XGetWindowAttributes(gfx::GetXDisplay(), window, &win_attributes)) |
591 return false; | 594 return false; |
592 if (win_attributes.map_state != IsViewable) | 595 if (win_attributes.map_state != IsViewable) |
593 return false; | 596 return false; |
594 // Some compositing window managers (notably kwin) do not actually unmap | 597 // Some compositing window managers (notably kwin) do not actually unmap |
595 // windows on desktop switch, so we also must check the current desktop. | 598 // windows on desktop switch, so we also must check the current desktop. |
596 int window_desktop, current_desktop; | 599 int window_desktop, current_desktop; |
597 return (!GetWindowDesktop(window, &window_desktop) || | 600 return (!GetWindowDesktop(window, &window_desktop) || |
598 !GetCurrentDesktop(¤t_desktop) || | 601 !GetCurrentDesktop(¤t_desktop) || |
(...skipping 14 matching lines...) Expand all Loading... |
613 if (!XTranslateCoordinates(gfx::GetXDisplay(), window, root, | 616 if (!XTranslateCoordinates(gfx::GetXDisplay(), window, root, |
614 0, 0, &x, &y, &child)) | 617 0, 0, &x, &y, &child)) |
615 return false; | 618 return false; |
616 | 619 |
617 *rect = gfx::Rect(x, y, width, height); | 620 *rect = gfx::Rect(x, y, width, height); |
618 return true; | 621 return true; |
619 } | 622 } |
620 | 623 |
621 | 624 |
622 bool WindowContainsPoint(XID window, gfx::Point screen_loc) { | 625 bool WindowContainsPoint(XID window, gfx::Point screen_loc) { |
| 626 TRACE_EVENT0("ui", "WindowContainsPoint"); |
| 627 |
623 gfx::Rect window_rect; | 628 gfx::Rect window_rect; |
624 if (!GetWindowRect(window, &window_rect)) | 629 if (!GetWindowRect(window, &window_rect)) |
625 return false; | 630 return false; |
626 | 631 |
627 if (!window_rect.Contains(screen_loc)) | 632 if (!window_rect.Contains(screen_loc)) |
628 return false; | 633 return false; |
629 | 634 |
630 if (!IsShapeAvailable()) | 635 if (!IsShapeAvailable()) |
631 return true; | 636 return true; |
632 | 637 |
(...skipping 850 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1483 << "request_code " << static_cast<int>(error_event.request_code) << ", " | 1488 << "request_code " << static_cast<int>(error_event.request_code) << ", " |
1484 << "minor_code " << static_cast<int>(error_event.minor_code) | 1489 << "minor_code " << static_cast<int>(error_event.minor_code) |
1485 << " (" << request_str << ")"; | 1490 << " (" << request_str << ")"; |
1486 } | 1491 } |
1487 | 1492 |
1488 // ---------------------------------------------------------------------------- | 1493 // ---------------------------------------------------------------------------- |
1489 // End of x11_util_internal.h | 1494 // End of x11_util_internal.h |
1490 | 1495 |
1491 | 1496 |
1492 } // namespace ui | 1497 } // namespace ui |
OLD | NEW |