#include <memory>
#include <type_traits>
#include "base/auto_reset.h"
#include "base/logging.h"
#include "base/memory/free_deleter.h"
#include "base/memory/ref_counted_memory.h"
#include "base/metrics/histogram_macros.h"
#include "base/numerics/safe_conversions.h"
#include "base/ranges/algorithm.h"
#include "build/chromeos_buildflags.h"
#include "ui/events/devices/x11/device_data_manager_x11.h"
#include "ui/events/devices/x11/touch_factory_x11.h"
#include "ui/events/event_utils.h"
#include "ui/events/keycodes/keyboard_code_conversion_x.h"
#include "ui/events/platform/platform_event_dispatcher.h"
#include "ui/events/platform/x11/x11_hotplug_event_handler.h"
#include "ui/events/x/events_x_utils.h"
#include "ui/events/x/x11_event_translation.h"
#include "ui/gfx/x/atom_cache.h"
#include "ui/gfx/x/connection.h"
#include "ui/gfx/x/extension_manager.h"
#include "ui/gfx/x/future.h"
#include "ui/gfx/x/window_event_manager.h"
#include "ui/gfx/x/xkb.h"
#include "ui/gfx/x/xproto.h"
#if defined(USE_GLIB)
#include "ui/events/platform/x11/x11_event_watcher_glib.h"
#else
#include "ui/events/platform/x11/x11_event_watcher_fdwatch.h"
#endif
#if BUILDFLAG(IS_CHROMEOS_ASH)
#include "ui/events/ozone/chromeos/cursor_controller.h"
#endif
namespace ui {
namespace {
void InitializeXkb(x11::Connection* connection) { … }
x11::Time ExtractTimeFromXEvent(const x11::Event& xev) { … }
void UpdateDeviceList() { … }
std::optional<gfx::Point> GetRootCursorLocationFromEvent(
const x11::Event& event) { … }
}
#if defined(USE_GLIB)
X11EventWatcherImpl;
#else
using X11EventWatcherImpl = X11EventWatcherFdWatch;
#endif
X11EventSource::X11EventSource(x11::Connection* connection)
: … { … }
X11EventSource::~X11EventSource() { … }
bool X11EventSource::HasInstance() { … }
X11EventSource* X11EventSource::GetInstance() { … }
x11::Time X11EventSource::GetCurrentServerTime() { … }
x11::Time X11EventSource::GetTimestamp() { … }
void X11EventSource::ClearLastCursorLocation() { … }
void X11EventSource::OnEvent(const x11::Event& x11_event) { … }
void X11EventSource::OnDispatcherListChanged() { … }
}