Commit 47d9caef authored by Maksim Sisov's avatar Maksim Sisov Committed by Commit Bot

X11 and ozone/linux: Share BrowserDesktopWindowTreeHost impl

To make ozone/linux really use the DesktopWindowTreeHostLinux,
it is also needed to share the BrowserDesktopWindowTreeHost*
impl between X11/linux and ozone/linux.

This CL renames the BrowserDesktopWindowTreeHostX11 to
BrowserDesktopWindowTreeHostLinux and adds some USE_X11 guards,
which will be removed in the future.

Bug: 990756
Change-Id: Id99d63a627257fbaca7e5de65ec4973d8396d4fc
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1796547
Commit-Queue: Maksim Sisov <msisov@igalia.com>
Reviewed-by: default avatarScott Violet <sky@chromium.org>
Cr-Commit-Position: refs/heads/master@{#696715}
parent 9d24f542
......@@ -2464,8 +2464,6 @@ jumbo_split_static_library("ui") {
if (use_x11) {
sources += [
"views/frame/browser_desktop_window_tree_host_x11.cc",
"views/frame/browser_desktop_window_tree_host_x11.h",
"views/frame/global_menu_bar_registrar_x11.cc",
"views/frame/global_menu_bar_registrar_x11.h",
"views/frame/global_menu_bar_x11.cc",
......@@ -2487,12 +2485,20 @@ jumbo_split_static_library("ui") {
]
}
if (use_ozone) {
if (!is_desktop_linux) {
sources += [
"views/frame/browser_desktop_window_tree_host_platform.cc",
"views/frame/browser_desktop_window_tree_host_platform.h",
]
}
sources += [ "views/frame/native_browser_frame_factory_ozone.cc" ]
deps += [ "//ui/platform_window" ]
}
if (is_desktop_linux) {
sources += [
"views/frame/browser_desktop_window_tree_host_platform.cc",
"views/frame/browser_desktop_window_tree_host_platform.h",
"views/frame/native_browser_frame_factory_ozone.cc",
"views/frame/browser_desktop_window_tree_host_linux.cc",
"views/frame/browser_desktop_window_tree_host_linux.h",
]
deps += [ "//ui/platform_window" ]
}
if (use_gtk) {
# This is the only component that can interact with gtk.
......
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/views/frame/browser_desktop_window_tree_host_x11.h"
#include "chrome/browser/ui/views/frame/browser_desktop_window_tree_host_linux.h"
#include <utility>
......@@ -13,58 +13,63 @@
#include "chrome/browser/ui/views/frame/browser_view.h"
////////////////////////////////////////////////////////////////////////////////
// BrowserDesktopWindowTreeHostX11, public:
// BrowserDesktopWindowTreeHostLinux, public:
BrowserDesktopWindowTreeHostX11::BrowserDesktopWindowTreeHostX11(
BrowserDesktopWindowTreeHostLinux::BrowserDesktopWindowTreeHostLinux(
views::internal::NativeWidgetDelegate* native_widget_delegate,
views::DesktopNativeWidgetAura* desktop_native_widget_aura,
BrowserView* browser_view,
BrowserFrame* browser_frame)
: DesktopWindowTreeHostX11(native_widget_delegate,
desktop_native_widget_aura),
browser_view_(browser_view) {
: DesktopWindowTreeHostLinuxImpl(native_widget_delegate,
desktop_native_widget_aura) {
#if defined(USE_X11)
browser_view_ = browser_view;
#endif
browser_frame->set_frame_type(browser_frame->UseCustomFrame()
? views::Widget::FrameType::kForceCustom
: views::Widget::FrameType::kForceNative);
}
BrowserDesktopWindowTreeHostX11::~BrowserDesktopWindowTreeHostX11() {
}
BrowserDesktopWindowTreeHostLinux::~BrowserDesktopWindowTreeHostLinux() {}
////////////////////////////////////////////////////////////////////////////////
// BrowserDesktopWindowTreeHostX11,
// BrowserDesktopWindowTreeHostLinux,
// BrowserDesktopWindowTreeHost implementation:
views::DesktopWindowTreeHost*
BrowserDesktopWindowTreeHostX11::AsDesktopWindowTreeHost() {
BrowserDesktopWindowTreeHostLinux::AsDesktopWindowTreeHost() {
return this;
}
int BrowserDesktopWindowTreeHostX11::GetMinimizeButtonOffset() const {
int BrowserDesktopWindowTreeHostLinux::GetMinimizeButtonOffset() const {
return 0;
}
bool BrowserDesktopWindowTreeHostX11::UsesNativeSystemMenu() const {
bool BrowserDesktopWindowTreeHostLinux::UsesNativeSystemMenu() const {
return false;
}
////////////////////////////////////////////////////////////////////////////////
// BrowserDesktopWindowTreeHostX11,
// views::DesktopWindowTreeHostX11 implementation:
// BrowserDesktopWindowTreeHostLinux,
// DesktopWindowTreeHostLinuxImpl implementation:
void BrowserDesktopWindowTreeHostX11::Init(
void BrowserDesktopWindowTreeHostLinux::Init(
const views::Widget::InitParams& params) {
views::DesktopWindowTreeHostX11::Init(std::move(params));
DesktopWindowTreeHostLinuxImpl::Init(std::move(params));
#if defined(USE_X11)
// We have now created our backing X11 window. We now need to (possibly)
// alert Unity that there's a menu bar attached to it.
global_menu_bar_x11_ =
std::make_unique<GlobalMenuBarX11>(browser_view_, this);
#endif
}
void BrowserDesktopWindowTreeHostX11::CloseNow() {
void BrowserDesktopWindowTreeHostLinux::CloseNow() {
#if defined(USE_X11)
global_menu_bar_x11_.reset();
DesktopWindowTreeHostX11::CloseNow();
#endif
DesktopWindowTreeHostLinuxImpl::CloseNow();
}
////////////////////////////////////////////////////////////////////////////////
......@@ -72,13 +77,12 @@ void BrowserDesktopWindowTreeHostX11::CloseNow() {
// static
BrowserDesktopWindowTreeHost*
BrowserDesktopWindowTreeHost::CreateBrowserDesktopWindowTreeHost(
views::internal::NativeWidgetDelegate* native_widget_delegate,
views::DesktopNativeWidgetAura* desktop_native_widget_aura,
BrowserView* browser_view,
BrowserFrame* browser_frame) {
return new BrowserDesktopWindowTreeHostX11(native_widget_delegate,
desktop_native_widget_aura,
browser_view,
browser_frame);
BrowserDesktopWindowTreeHost::CreateBrowserDesktopWindowTreeHost(
views::internal::NativeWidgetDelegate* native_widget_delegate,
views::DesktopNativeWidgetAura* desktop_native_widget_aura,
BrowserView* browser_view,
BrowserFrame* browser_frame) {
return new BrowserDesktopWindowTreeHostLinux(native_widget_delegate,
desktop_native_widget_aura,
browser_view, browser_frame);
}
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_DESKTOP_WINDOW_TREE_HOST_X11_H_
#define CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_DESKTOP_WINDOW_TREE_HOST_X11_H_
#ifndef CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_DESKTOP_WINDOW_TREE_HOST_LINUX_H_
#define CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_DESKTOP_WINDOW_TREE_HOST_LINUX_H_
#include "base/macros.h"
#include "chrome/browser/ui/views/frame/browser_desktop_window_tree_host.h"
#include "chrome/browser/ui/views/frame/global_menu_bar_x11.h"
#include "ui/views/widget/desktop_aura/desktop_window_tree_host_x11.h"
#if defined(USE_X11)
#include "chrome/browser/ui/views/frame/global_menu_bar_x11.h" // nogncheck
#include "ui/views/widget/desktop_aura/desktop_window_tree_host_x11.h" // nogncheck
#else
#include "ui/views/widget/desktop_aura/desktop_window_tree_host_linux.h" // nogncheck
#endif
// TODO(https://crbug.com/990756): Make sure correct
// DesktopWindowTreeHost is used while the DWTHX11 is being refactored and
// merged into the DWTHLinux and the DWTHPlatform. Non-Ozone X11 must use
// the DWTHX11 now, but Ozone must use DWTHLinux. Remove this guard once
// DWTHX11 is finally merged into DWTHPlatform and DWTHLinux.
#if defined(USE_X11)
using DesktopWindowTreeHostLinuxImpl = views::DesktopWindowTreeHostX11;
#else
using DesktopWindowTreeHostLinuxImpl = views::DesktopWindowTreeHostLinux;
#endif
class BrowserFrame;
class BrowserView;
......@@ -17,16 +33,16 @@ namespace views {
class DesktopNativeWidgetAura;
}
class BrowserDesktopWindowTreeHostX11
class BrowserDesktopWindowTreeHostLinux
: public BrowserDesktopWindowTreeHost,
public views::DesktopWindowTreeHostX11 {
public DesktopWindowTreeHostLinuxImpl {
public:
BrowserDesktopWindowTreeHostX11(
BrowserDesktopWindowTreeHostLinux(
views::internal::NativeWidgetDelegate* native_widget_delegate,
views::DesktopNativeWidgetAura* desktop_native_widget_aura,
BrowserView* browser_view,
BrowserFrame* browser_frame);
~BrowserDesktopWindowTreeHostX11() override;
~BrowserDesktopWindowTreeHostLinux() override;
private:
// Overridden from BrowserDesktopWindowTreeHost:
......@@ -34,18 +50,20 @@ class BrowserDesktopWindowTreeHostX11
int GetMinimizeButtonOffset() const override;
bool UsesNativeSystemMenu() const override;
// Overridden from views::DesktopWindowTreeHostX11:
// Overridden from views::DesktopWindowTreeHostLinuxImpl:
void Init(const views::Widget::InitParams& params) override;
void CloseNow() override;
BrowserView* browser_view_;
#if defined(USE_X11)
BrowserView* browser_view_ = nullptr;
// Each browser frame maintains its own menu bar object because the lower
// level dbus protocol associates a xid to a menu bar; we can't map multiple
// xids to the same menu bar.
std::unique_ptr<GlobalMenuBarX11> global_menu_bar_x11_;
#endif
DISALLOW_COPY_AND_ASSIGN(BrowserDesktopWindowTreeHostX11);
DISALLOW_COPY_AND_ASSIGN(BrowserDesktopWindowTreeHostLinux);
};
#endif // CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_DESKTOP_WINDOW_TREE_HOST_X11_H_
#endif // CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_DESKTOP_WINDOW_TREE_HOST_LINUX_H_
......@@ -72,4 +72,18 @@ void DesktopWindowTreeHostLinux::AddAdditionalInitProperties(
properties->wm_role_name = params.wm_role_name;
}
// As DWTHX11 subclasses DWTHPlatform through DWTHLinux now (during transition
// period. see https://crbug.com/990756), we need to guard this factory method.
// TODO(msisov): remove this guard once DWTHX11 is finally merged into
// DWTHPlatform and .
#if !defined(USE_X11)
// static
DesktopWindowTreeHost* DesktopWindowTreeHost::Create(
internal::NativeWidgetDelegate* native_widget_delegate,
DesktopNativeWidgetAura* desktop_native_widget_aura) {
return new DesktopWindowTreeHostLinux(native_widget_delegate,
desktop_native_widget_aura);
}
#endif
} // namespace views
......@@ -792,11 +792,8 @@ void DesktopWindowTreeHostPlatform::AddAdditionalInitProperties(
////////////////////////////////////////////////////////////////////////////////
// DesktopWindowTreeHost:
// As DWTHX11 subclasses DWTHPlatform now (during transition period. see
// https://crbug.com/990756), we need to guard this factory method.
// TODO(msisov): remove this guard once DWTHX11 is finally merged into
// DWTHPlatform.
#if !defined(USE_X11)
// Linux subclasses this host and adds some Linux specific bits.
#if !defined(OS_LINUX)
// static
DesktopWindowTreeHost* DesktopWindowTreeHost::Create(
internal::NativeWidgetDelegate* native_widget_delegate,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment