// Copyright 2021 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef UI_LINUX_LINUX_UI_DELEGATE_H_ #define UI_LINUX_LINUX_UI_DELEGATE_H_ #include #include #include "base/callback_forward.h" #include "base/component_export.h" namespace gfx { using AcceleratedWidget = uint32_t; } namespace ui { enum class LinuxUiBackend { kStub, kX11, kWayland, }; class COMPONENT_EXPORT(LINUX_UI) LinuxUiDelegate { public: static LinuxUiDelegate* GetInstance(); LinuxUiDelegate(); virtual ~LinuxUiDelegate(); virtual LinuxUiBackend GetBackend() const = 0; // Only implemented on Wayland. virtual bool ExportWindowHandle( uint32_t parent_widget, base::OnceCallback callback); // Only implemented on X11. virtual void SetTransientWindowForParent(gfx::AcceleratedWidget parent, gfx::AcceleratedWidget transient); // Exports a prefixed, platform-dependent (X11 or Wayland) window handle for // an Aura window id, then calls the given callback with the handle. Returns // true on success. |callback| may be run synchronously or asynchronously. virtual bool ExportWindowHandle( gfx::AcceleratedWidget window_id, base::OnceCallback callback) = 0; private: static LinuxUiDelegate* instance_; }; } // namespace ui #endif // UI_LINUX_LINUX_UI_DELEGATE_H_