blob: bfdf5d12e3484b2f16676d9b7eda7c3bbbdac5d7 [file] [log] [blame]
// Copyright 2016 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 UI_OZONE_PLATFORM_WAYLAND_WAYLAND_DISPLAY_H_
#define UI_OZONE_PLATFORM_WAYLAND_WAYLAND_DISPLAY_H_
#include <map>
#include "base/message_loop/message_pump_libevent.h"
#include "ui/events/platform/platform_event_source.h"
#include "ui/gfx/native_widget_types.h"
#include "ui/ozone/platform/wayland/wayland_object.h"
namespace ui {
class WaylandWindow;
class WaylandDisplay : public PlatformEventSource,
public base::MessagePumpLibevent::Watcher {
public:
WaylandDisplay();
~WaylandDisplay() override;
bool Initialize();
bool StartProcessingEvents();
// Schedules a flush of the Wayland connection.
void ScheduleFlush();
wl_display* display() { return display_.get(); }
wl_compositor* compositor() { return compositor_.get(); }
wl_shm* shm() { return shm_.get(); }
xdg_shell* shell() { return shell_.get(); }
WaylandWindow* GetWindow(gfx::AcceleratedWidget widget);
void AddWindow(gfx::AcceleratedWidget widget, WaylandWindow* window);
void RemoveWindow(gfx::AcceleratedWidget widget);
private:
void Flush();
// PlatformEventSource
void OnDispatcherListChanged() override;
// base::MessagePumpLibevent::Watcher
void OnFileCanReadWithoutBlocking(int fd) override;
void OnFileCanWriteWithoutBlocking(int fd) override;
// wl_registry_listener
static void Global(void* data,
wl_registry* registry,
uint32_t name,
const char* interface,
uint32_t version);
static void GlobalRemove(void* data, wl_registry* registry, uint32_t name);
// xdg_shell_listener
static void Ping(void* data, xdg_shell* shell, uint32_t serial);
std::map<gfx::AcceleratedWidget, WaylandWindow*> window_map_;
wl::Object<wl_display> display_;
wl::Object<wl_registry> registry_;
wl::Object<wl_compositor> compositor_;
wl::Object<wl_shm> shm_;
wl::Object<xdg_shell> shell_;
bool scheduled_flush_ = false;
bool watching_ = false;
base::MessagePumpLibevent::FileDescriptorWatcher controller_;
DISALLOW_COPY_AND_ASSIGN(WaylandDisplay);
};
} // namespace ui
#endif // UI_OZONE_PLATFORM_WAYLAND_WAYLAND_DISPLAY_H_