blob: 35753fa8192937a6988bd1c776973b0366361425 [file] [log] [blame]
// 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/chrome_browser_main_extra_parts_views_linux_x11.h"
#include "chrome/browser/ui/browser_list.h"
#include "ui/gfx/x/x11_types.h"
#include "ui/gtk/gtk_ui_delegate.h"
#include "ui/gtk/gtk_ui_delegate_x11.h"
#include "ui/views/widget/desktop_aura/x11_desktop_handler.h"
ChromeBrowserMainExtraPartsViewsLinuxX11::
ChromeBrowserMainExtraPartsViewsLinuxX11() = default;
ChromeBrowserMainExtraPartsViewsLinuxX11::
~ChromeBrowserMainExtraPartsViewsLinuxX11() {
if (views::X11DesktopHandler::get_dont_create())
views::X11DesktopHandler::get_dont_create()->RemoveObserver(this);
}
void ChromeBrowserMainExtraPartsViewsLinuxX11::PreCreateThreads() {
ChromeBrowserMainExtraPartsViewsLinux::PreCreateThreads();
views::X11DesktopHandler::get()->AddObserver(this);
}
void ChromeBrowserMainExtraPartsViewsLinuxX11::ToolkitInitialized() {
// In Aura/X11, Gtk-based LinuxUI implementation is used, so we instantiate
// and inject the GtkUiDelegate before ChromeBrowserMainExtraPartsViewsLinux,
// so it can properly initialize GtkUi on its |ToolkitInitialized| override.
gtk_ui_delegate_ = std::make_unique<ui::GtkUiDelegateX11>(gfx::GetXDisplay());
ui::GtkUiDelegate::SetInstance(gtk_ui_delegate_.get());
ChromeBrowserMainExtraPartsViewsLinux::ToolkitInitialized();
}
void ChromeBrowserMainExtraPartsViewsLinuxX11::OnWorkspaceChanged(
const std::string& new_workspace) {
BrowserList::MoveBrowsersInWorkspaceToFront(new_workspace);
}