From adc543fe6a7b3bae9522257e651205140615fecb Mon Sep 17 00:00:00 2001 From: Peng Huang Date: Fri, 3 May 2019 20:40:41 +0000 Subject: [PATCH] Fix the flash for any new created window. The flash is because the child window created by GLSurfaceGLX doesn't match the visual of parent window. Fix the problem by always creating parent window with the same visual. Bug: 956061 Change-Id: I88cb65b4a0313be6fdea1bd8d6770d351500ccbb Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1591946 Reviewed-by: Thomas Anderson Reviewed-by: Antoine Labour Commit-Queue: Peng Huang Cr-Commit-Position: refs/heads/master@{#656497} --- .../desktop_window_tree_host_x11.cc | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) 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 4dda760a4d..8bdb7b026d 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 @@ -1426,24 +1426,15 @@ void DesktopWindowTreeHostX11::InitX11Window( if (override_redirect_) attribute_mask |= CWOverrideRedirect; - bool enable_transparent_visuals; - switch (params.opacity) { - case Widget::InitParams::OPAQUE_WINDOW: - enable_transparent_visuals = false; - break; - case Widget::InitParams::TRANSLUCENT_WINDOW: - enable_transparent_visuals = true; - break; - case Widget::InitParams::INFER_OPACITY: - default: - enable_transparent_visuals = params.type == Widget::InitParams::TYPE_DRAG; - } - Visual* visual = CopyFromParent; int depth = CopyFromParent; Colormap colormap = CopyFromParent; + + // GLSurfaceGLX always create child window with alpha channel. If the parent + // window doesn't have alpha channel, it causes flash, so always request argb + // visual. ui::XVisualManager::GetInstance()->ChooseVisualForWindow( - enable_transparent_visuals, &visual, &depth, &colormap, + true /* want_argb_visual */, &visual, &depth, &colormap, &use_argb_visual_); if (colormap != CopyFromParent) {