blob: 3864f19ae42e080da87bde28e276b3b1b2d5ce03 [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/ozone_export.h"
#include "ui/ozone/platform/wayland/wayland_object.h"
namespace ui {
class WaylandWindow;
class OZONE_EXPORT WaylandDisplay : public PlatformEventSource,
public base::MessagePumpLibevent::Watcher {
public:
WaylandDisplay();
~WaylandDisplay() override;
bool Initialize();
// Flushes the Wayland connection.
void Flush();
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(WaylandWindow* window);
void RemoveWindow(WaylandWindow* window);
private:
// 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 watching_ = false;
base::MessagePumpLibevent::FileDescriptorWatcher controller_;
DISALLOW_COPY_AND_ASSIGN(WaylandDisplay);
};
} // namespace ui
#endif // UI_OZONE_PLATFORM_WAYLAND_WAYLAND_DISPLAY_H_