Index: ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc |
diff --git a/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc b/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc |
index b717445ddfe8b51a8a54ef66bf3fb62aec68a819..f84153df1c743438c95bdf93ae6f7b561f9c20f1 100644 |
--- a/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc |
+++ b/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc |
@@ -25,6 +25,7 @@ |
#include "ui/base/hit_test.h" |
#include "ui/base/ime/input_method.h" |
#include "ui/base/x/x11_util.h" |
+#include "ui/base/x/x11_util_internal.h" |
#include "ui/events/devices/x11/device_data_manager_x11.h" |
#include "ui/events/devices/x11/device_list_cache_x11.h" |
#include "ui/events/devices/x11/touch_factory_x11.h" |
@@ -1117,30 +1118,20 @@ void DesktopWindowTreeHostX11::InitX11Window( |
if (swa.override_redirect) |
attribute_mask |= CWOverrideRedirect; |
- // Detect whether we're running inside a compositing manager. If so, try to |
- // use the ARGB visual. Otherwise, just use our parent's visual. |
- Visual* visual = CopyFromParent; |
- int depth = CopyFromParent; |
- if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
- switches::kEnableTransparentVisuals) && |
- XGetSelectionOwner(xdisplay_, atom_cache_.GetAtom("_NET_WM_CM_S0")) != |
- None) { |
- Visual* rgba_visual = GetARGBVisual(); |
- if (rgba_visual) { |
- visual = rgba_visual; |
- depth = 32; |
- |
- attribute_mask |= CWColormap; |
- swa.colormap = XCreateColormap(xdisplay_, x_root_window_, visual, |
- AllocNone); |
- |
- // x.org will BadMatch if we don't set a border when the depth isn't the |
- // same as the parent depth. |
- attribute_mask |= CWBorderPixel; |
- swa.border_pixel = 0; |
- |
- use_argb_visual_ = true; |
- } |
+ Visual* visual; |
+ int depth; |
+ ui::ChooseVisualForWindow(&visual, &depth); |
+ if (depth == 32) { |
+ attribute_mask |= CWColormap; |
+ swa.colormap = |
+ XCreateColormap(xdisplay_, x_root_window_, visual, AllocNone); |
+ |
+ // x.org will BadMatch if we don't set a border when the depth isn't the |
+ // same as the parent depth. |
+ attribute_mask |= CWBorderPixel; |
+ swa.border_pixel = 0; |
+ |
+ use_argb_visual_ = true; |
} |
bounds_in_pixels_ = ToPixelRect(params.bounds); |
@@ -1619,33 +1610,6 @@ void DesktopWindowTreeHostX11::SerializeImageRepresentation( |
data->push_back(bitmap.getColor(x, y)); |
} |
-Visual* DesktopWindowTreeHostX11::GetARGBVisual() { |
- XVisualInfo visual_template; |
- visual_template.screen = 0; |
- |
- int visuals_len; |
- gfx::XScopedPtr<XVisualInfo[]> visual_list(XGetVisualInfo( |
- xdisplay_, VisualScreenMask, &visual_template, &visuals_len)); |
- for (int i = 0; i < visuals_len; ++i) { |
- // Why support only 8888 ARGB? Because it's all that GTK+ supports. In |
- // gdkvisual-x11.cc, they look for this specific visual and use it for all |
- // their alpha channel using needs. |
- // |
- // TODO(erg): While the following does find a valid visual, some GL drivers |
- // don't believe that this has an alpha channel. According to marcheu@, |
- // this should work on open source driver though. (It doesn't work with |
- // NVidia's binaries currently.) http://crbug.com/369209 |
- const XVisualInfo& info = visual_list[i]; |
- if (info.depth == 32 && info.visual->red_mask == 0xff0000 && |
- info.visual->green_mask == 0x00ff00 && |
- info.visual->blue_mask == 0x0000ff) { |
- return info.visual; |
- } |
- } |
- |
- return nullptr; |
-} |
- |
std::list<XID>& DesktopWindowTreeHostX11::open_windows() { |
if (!open_windows_) |
open_windows_ = new std::list<XID>(); |