blob: 06abc36a2c06d376f61cfafe4c5dc518a12855aa [file] [log] [blame]
// Copyright 2020 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_GFX_X_XLIB_SUPPORT_H_
#define UI_GFX_X_XLIB_SUPPORT_H_
#include <memory>
#include <string>
#include "base/component_export.h"
#include "base/memory/raw_ptr.h"
struct _XDisplay;
struct xcb_connection_t;
namespace x11 {
// Loads Xlib, initializes threads, and sets a default error handler.
COMPONENT_EXPORT(X11) void InitXlib();
// Sets an async error handler which only logs an error message.
COMPONENT_EXPORT(X11) void SetXlibErrorHandler();
// Wraps XFree().
COMPONENT_EXPORT(X11) void XlibFree(void* data);
// A scoped Xlib display.
class COMPONENT_EXPORT(X11) XlibDisplay {
public:
~XlibDisplay();
struct _XDisplay* display() { return display_; }
operator struct _XDisplay *() { return display_; }
struct xcb_connection_t* GetXcbConnection();
private:
friend class Connection;
explicit XlibDisplay(const std::string& address);
raw_ptr<struct _XDisplay> display_ = nullptr;
};
} // namespace x11
#endif // UI_GFX_X_XLIB_SUPPORT_H_