Commit 41a6b0a2 authored by Maksim Sisov's avatar Maksim Sisov Committed by Commit Bot

X11: fix crash in builds without gtk.

When use_gtk is set to false, nothings sets
LinuxInputMethodContextFactory. That results in a crash that produces
the following error -

FATAL:input_method_auralinux.cc(29)] Check failed: LinuxInputMethodContextFactory::instance().
Trying to initialize InputMethodAuraLinux, but LinuxInputMethodContextFactory is not initialized yet.

Thus, to fix the problem, create and set a fake input method context factory.

Bug: 1084870
Change-Id: Iccce8e3e3e3f09f89c1c3c40d44d86876e5918a1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2557079Reviewed-by: default avatarPeter Kasting <pkasting@chromium.org>
Commit-Queue: Maksim Sisov (GMT+2) <msisov@igalia.com>
Cr-Commit-Position: refs/heads/master@{#830894}
parent 46e4798d
......@@ -7,6 +7,7 @@
#include "chrome/browser/themes/theme_service_aura_linux.h"
#include "chrome/browser/ui/browser_list.h"
#include "chrome/browser/ui/views/theme_profile_key.h"
#include "ui/base/ime/linux/fake_input_method_context_factory.h"
#include "ui/display/screen.h"
#include "ui/views/linux_ui/linux_ui.h"
......@@ -17,6 +18,9 @@
#if defined(USE_OZONE)
#include "ui/base/cursor/cursor_factory.h"
#include "ui/base/ime/input_method.h"
#include "ui/base/ui_base_features.h"
#include "ui/ozone/public/ozone_platform.h"
#endif
#if defined(USE_X11)
......@@ -68,8 +72,25 @@ void ChromeBrowserMainExtraPartsViewsLinux::ToolkitInitialized() {
ChromeBrowserMainExtraPartsViews::ToolkitInitialized();
views::LinuxUI* linux_ui = BuildLinuxUI();
if (!linux_ui)
if (!linux_ui) {
// In case if GTK is not used, input method factory won't be set for X11 and
// Ozone/X11. Set a fake one instead to avoid crashing browser later.
DCHECK(!ui::LinuxInputMethodContextFactory::instance());
#if defined(USE_OZONE)
// Try to create input method through Ozone so that the backend has a chance
// to set factory by itself.
if (features::IsUsingOzonePlatform()) {
ui::OzonePlatform::GetInstance()->CreateInputMethod(
nullptr, gfx::kNullAcceleratedWidget);
}
#endif
// If factory is not set, set a fake instance.
if (!ui::LinuxInputMethodContextFactory::instance()) {
ui::LinuxInputMethodContextFactory::SetInstance(
new ui::FakeInputMethodContextFactory());
}
return;
}
linux_ui->SetUseSystemThemeCallback(
base::BindRepeating([](aura::Window* window) {
......
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