// Copyright 2021 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.

// This file was automatically generated with:
// ../../ui/gfx/x/gen_xproto.py \
//    ../../third_party/xcbproto/src \
//    gen/ui/gfx/x \
//    bigreq \
//    composite \
//    damage \
//    dpms \
//    dri2 \
//    dri3 \
//    ge \
//    glx \
//    present \
//    randr \
//    record \
//    render \
//    res \
//    screensaver \
//    shape \
//    shm \
//    sync \
//    xc_misc \
//    xevie \
//    xf86dri \
//    xf86vidmode \
//    xfixes \
//    xinerama \
//    xinput \
//    xkb \
//    xprint \
//    xproto \
//    xselinux \
//    xtest \
//    xv \
//    xvmc

#ifndef UI_GFX_X_GENERATED_PROTOS_XPROTO_H_
#define UI_GFX_X_GENERATED_PROTOS_XPROTO_H_

#include <array>
#include <cstddef>
#include <cstdint>
#include <cstring>
#include <vector>

#include "base/component_export.h"
#include "base/files/scoped_file.h"
#include "base/memory/ref_counted_memory.h"
#include "base/memory/scoped_refptr.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "ui/gfx/x/error.h"
#include "ui/gfx/x/ref_counted_fd.h"

namespace x11 {

class Connection;

template <typename Reply>
struct Response;

template <typename Reply>
class Future;

enum class GraphicsContext : uint32_t {};

enum class ColorMap : uint32_t {};

enum class Bool32 : uint32_t {};

enum class VisualId : uint32_t {};

enum class KeySym : uint32_t {};

enum class KeyCode : uint8_t {};

enum class KeyCode32 : uint32_t {};

enum class Button : uint8_t {};

enum class VisualClass : int {
  StaticGray = 0,
  GrayScale = 1,
  StaticColor = 2,
  PseudoColor = 3,
  TrueColor = 4,
  DirectColor = 5,
};

enum class EventMask : int {
  NoEvent = 0,
  KeyPress = 1 << 0,
  KeyRelease = 1 << 1,
  ButtonPress = 1 << 2,
  ButtonRelease = 1 << 3,
  EnterWindow = 1 << 4,
  LeaveWindow = 1 << 5,
  PointerMotion = 1 << 6,
  PointerMotionHint = 1 << 7,
  Button1Motion = 1 << 8,
  Button2Motion = 1 << 9,
  Button3Motion = 1 << 10,
  Button4Motion = 1 << 11,
  Button5Motion = 1 << 12,
  ButtonMotion = 1 << 13,
  KeymapState = 1 << 14,
  Exposure = 1 << 15,
  VisibilityChange = 1 << 16,
  StructureNotify = 1 << 17,
  ResizeRedirect = 1 << 18,
  SubstructureNotify = 1 << 19,
  SubstructureRedirect = 1 << 20,
  FocusChange = 1 << 21,
  PropertyChange = 1 << 22,
  ColorMapChange = 1 << 23,
  OwnerGrabButton = 1 << 24,
};

enum class BackingStore : int {
  NotUseful = 0,
  WhenMapped = 1,
  Always = 2,
};

enum class ImageOrder : int {
  LSBFirst = 0,
  MSBFirst = 1,
};

enum class ModMask : int {
  Shift = 1 << 0,
  Lock = 1 << 1,
  Control = 1 << 2,
  c_1 = 1 << 3,
  c_2 = 1 << 4,
  c_3 = 1 << 5,
  c_4 = 1 << 6,
  c_5 = 1 << 7,
  Any = 1 << 15,
};

enum class KeyButMask : int {
  Shift = 1 << 0,
  Lock = 1 << 1,
  Control = 1 << 2,
  Mod1 = 1 << 3,
  Mod2 = 1 << 4,
  Mod3 = 1 << 5,
  Mod4 = 1 << 6,
  Mod5 = 1 << 7,
  Button1 = 1 << 8,
  Button2 = 1 << 9,
  Button3 = 1 << 10,
  Button4 = 1 << 11,
  Button5 = 1 << 12,
};

enum class Window : uint32_t {
  None = 0,
};

enum class ButtonMask : int {
  c_1 = 1 << 8,
  c_2 = 1 << 9,
  c_3 = 1 << 10,
  c_4 = 1 << 11,
  c_5 = 1 << 12,
  Any = 1 << 15,
};

enum class Motion : int {
  Normal = 0,
  Hint = 1,
};

enum class NotifyDetail : int {
  Ancestor = 0,
  Virtual = 1,
  Inferior = 2,
  Nonlinear = 3,
  NonlinearVirtual = 4,
  Pointer = 5,
  PointerRoot = 6,
  None = 7,
};

enum class NotifyMode : int {
  Normal = 0,
  Grab = 1,
  Ungrab = 2,
  WhileGrabbed = 3,
};

enum class Visibility : int {
  Unobscured = 0,
  PartiallyObscured = 1,
  FullyObscured = 2,
};

enum class Place : int {
  OnTop = 0,
  OnBottom = 1,
};

enum class Property : int {
  NewValue = 0,
  Delete = 1,
};

enum class Time : uint32_t {
  CurrentTime = 0,
};

enum class Atom : uint32_t {
  None = 0,
  Any = 0,
  PRIMARY = 1,
  SECONDARY = 2,
  ARC = 3,
  ATOM = 4,
  BITMAP = 5,
  CARDINAL = 6,
  COLORMAP = 7,
  CURSOR = 8,
  CUT_BUFFER0 = 9,
  CUT_BUFFER1 = 10,
  CUT_BUFFER2 = 11,
  CUT_BUFFER3 = 12,
  CUT_BUFFER4 = 13,
  CUT_BUFFER5 = 14,
  CUT_BUFFER6 = 15,
  CUT_BUFFER7 = 16,
  DRAWABLE = 17,
  FONT = 18,
  INTEGER = 19,
  PIXMAP = 20,
  POINT = 21,
  RECTANGLE = 22,
  RESOURCE_MANAGER = 23,
  RGB_COLOR_MAP = 24,
  RGB_BEST_MAP = 25,
  RGB_BLUE_MAP = 26,
  RGB_DEFAULT_MAP = 27,
  RGB_GRAY_MAP = 28,
  RGB_GREEN_MAP = 29,
  RGB_RED_MAP = 30,
  STRING = 31,
  VISUALID = 32,
  WINDOW = 33,
  WM_COMMAND = 34,
  WM_HINTS = 35,
  WM_CLIENT_MACHINE = 36,
  WM_ICON_NAME = 37,
  WM_ICON_SIZE = 38,
  WM_NAME = 39,
  WM_NORMAL_HINTS = 40,
  WM_SIZE_HINTS = 41,
  WM_ZOOM_HINTS = 42,
  MIN_SPACE = 43,
  NORM_SPACE = 44,
  MAX_SPACE = 45,
  END_SPACE = 46,
  SUPERSCRIPT_X = 47,
  SUPERSCRIPT_Y = 48,
  SUBSCRIPT_X = 49,
  SUBSCRIPT_Y = 50,
  UNDERLINE_POSITION = 51,
  UNDERLINE_THICKNESS = 52,
  STRIKEOUT_ASCENT = 53,
  STRIKEOUT_DESCENT = 54,
  ITALIC_ANGLE = 55,
  X_HEIGHT = 56,
  QUAD_WIDTH = 57,
  WEIGHT = 58,
  POINT_SIZE = 59,
  RESOLUTION = 60,
  COPYRIGHT = 61,
  NOTICE = 62,
  FONT_NAME = 63,
  FAMILY_NAME = 64,
  FULL_NAME = 65,
  CAP_HEIGHT = 66,
  WM_CLASS = 67,
  WM_TRANSIENT_FOR = 68,
  kLastPredefinedAtom = 68,
};

enum class ColormapState : int {
  Uninstalled = 0,
  Installed = 1,
};

enum class Colormap : int {
  None = 0,
};

enum class Mapping : int {
  Modifier = 0,
  Keyboard = 1,
  Pointer = 2,
};

enum class WindowClass : int {
  CopyFromParent = 0,
  InputOutput = 1,
  InputOnly = 2,
};

enum class CreateWindowAttribute : int {
  BackPixmap = 1 << 0,
  BackPixel = 1 << 1,
  BorderPixmap = 1 << 2,
  BorderPixel = 1 << 3,
  BitGravity = 1 << 4,
  WinGravity = 1 << 5,
  BackingStore = 1 << 6,
  BackingPlanes = 1 << 7,
  BackingPixel = 1 << 8,
  OverrideRedirect = 1 << 9,
  SaveUnder = 1 << 10,
  EventMask = 1 << 11,
  DontPropagate = 1 << 12,
  Colormap = 1 << 13,
  Cursor = 1 << 14,
};

enum class BackPixmap : int {
  None = 0,
  ParentRelative = 1,
};

enum class Gravity : int {
  BitForget = 0,
  WinUnmap = 0,
  NorthWest = 1,
  North = 2,
  NorthEast = 3,
  West = 4,
  Center = 5,
  East = 6,
  SouthWest = 7,
  South = 8,
  SouthEast = 9,
  Static = 10,
};

enum class MapState : int {
  Unmapped = 0,
  Unviewable = 1,
  Viewable = 2,
};

enum class SetMode : int {
  Insert = 0,
  Delete = 1,
};

enum class ConfigWindow : int {
  X = 1 << 0,
  Y = 1 << 1,
  Width = 1 << 2,
  Height = 1 << 3,
  BorderWidth = 1 << 4,
  Sibling = 1 << 5,
  StackMode = 1 << 6,
};

enum class StackMode : int {
  Above = 0,
  Below = 1,
  TopIf = 2,
  BottomIf = 3,
  Opposite = 4,
};

enum class Circulate : int {
  RaiseLowest = 0,
  LowerHighest = 1,
};

enum class PropMode : int {
  Replace = 0,
  Prepend = 1,
  Append = 2,
};

enum class GetPropertyType : int {
  Any = 0,
};

enum class SendEventDest : int {
  PointerWindow = 0,
  ItemFocus = 1,
};

enum class GrabMode : int {
  Sync = 0,
  Async = 1,
};

enum class GrabStatus : int {
  Success = 0,
  AlreadyGrabbed = 1,
  InvalidTime = 2,
  NotViewable = 3,
  Frozen = 4,
};

enum class Cursor : uint32_t {
  None = 0,
};

enum class ButtonIndex : int {
  Any = 0,
  c_1 = 1,
  c_2 = 2,
  c_3 = 3,
  c_4 = 4,
  c_5 = 5,
};

enum class Grab : int {
  Any = 0,
};

enum class Allow : int {
  AsyncPointer = 0,
  SyncPointer = 1,
  ReplayPointer = 2,
  AsyncKeyboard = 3,
  SyncKeyboard = 4,
  ReplayKeyboard = 5,
  AsyncBoth = 6,
  SyncBoth = 7,
};

enum class InputFocus : int {
  None = 0,
  PointerRoot = 1,
  Parent = 2,
  FollowKeyboard = 3,
};

enum class FontDraw : int {
  LeftToRight = 0,
  RightToLeft = 1,
};

enum class GraphicsContextAttribute : int {
  Function = 1 << 0,
  PlaneMask = 1 << 1,
  Foreground = 1 << 2,
  Background = 1 << 3,
  LineWidth = 1 << 4,
  LineStyle = 1 << 5,
  CapStyle = 1 << 6,
  JoinStyle = 1 << 7,
  FillStyle = 1 << 8,
  FillRule = 1 << 9,
  Tile = 1 << 10,
  Stipple = 1 << 11,
  TileStippleOriginX = 1 << 12,
  TileStippleOriginY = 1 << 13,
  Font = 1 << 14,
  SubwindowMode = 1 << 15,
  GraphicsExposures = 1 << 16,
  ClipOriginX = 1 << 17,
  ClipOriginY = 1 << 18,
  ClipMask = 1 << 19,
  DashOffset = 1 << 20,
  DashList = 1 << 21,
  ArcMode = 1 << 22,
};

enum class Gx : int {
  clear = 0,
  c_and = 1,
  andReverse = 2,
  copy = 3,
  andInverted = 4,
  noop = 5,
  c_xor = 6,
  c_or = 7,
  nor = 8,
  equiv = 9,
  invert = 10,
  orReverse = 11,
  copyInverted = 12,
  orInverted = 13,
  nand = 14,
  set = 15,
};

enum class LineStyle : int {
  Solid = 0,
  OnOffDash = 1,
  DoubleDash = 2,
};

enum class CapStyle : int {
  NotLast = 0,
  Butt = 1,
  Round = 2,
  Projecting = 3,
};

enum class JoinStyle : int {
  Miter = 0,
  Round = 1,
  Bevel = 2,
};

enum class FillStyle : int {
  Solid = 0,
  Tiled = 1,
  Stippled = 2,
  OpaqueStippled = 3,
};

enum class FillRule : int {
  EvenOdd = 0,
  Winding = 1,
};

enum class SubwindowMode : int {
  ClipByChildren = 0,
  IncludeInferiors = 1,
};

enum class ArcMode : int {
  Chord = 0,
  PieSlice = 1,
};

enum class ClipOrdering : int {
  Unsorted = 0,
  YSorted = 1,
  YXSorted = 2,
  YXBanded = 3,
};

enum class CoordMode : int {
  Origin = 0,
  Previous = 1,
};

enum class PolyShape : int {
  Complex = 0,
  Nonconvex = 1,
  Convex = 2,
};

enum class ImageFormat : int {
  XYBitmap = 0,
  XYPixmap = 1,
  ZPixmap = 2,
};

enum class ColormapAlloc : int {
  None = 0,
  All = 1,
};

enum class ColorFlag : int {
  Red = 1 << 0,
  Green = 1 << 1,
  Blue = 1 << 2,
};

enum class Pixmap : uint32_t {
  None = 0,
};

enum class Font : uint32_t {
  None = 0,
};

enum class QueryShapeOf : int {
  LargestCursor = 0,
  FastestTile = 1,
  FastestStipple = 2,
};

enum class Keyboard : int {
  KeyClickPercent = 1 << 0,
  BellPercent = 1 << 1,
  BellPitch = 1 << 2,
  BellDuration = 1 << 3,
  Led = 1 << 4,
  LedMode = 1 << 5,
  Key = 1 << 6,
  AutoRepeatMode = 1 << 7,
};

enum class LedMode : int {
  Off = 0,
  On = 1,
};

enum class AutoRepeatMode : int {
  Off = 0,
  On = 1,
  Default = 2,
};

enum class Blanking : int {
  NotPreferred = 0,
  Preferred = 1,
  Default = 2,
};

enum class Exposures : int {
  NotAllowed = 0,
  Allowed = 1,
  Default = 2,
};

enum class HostMode : int {
  Insert = 0,
  Delete = 1,
};

enum class Family : int {
  Internet = 0,
  DECnet = 1,
  Chaos = 2,
  ServerInterpreted = 5,
  Internet6 = 6,
};

enum class AccessControl : int {
  Disable = 0,
  Enable = 1,
};

enum class CloseDown : int {
  DestroyAll = 0,
  RetainPermanent = 1,
  RetainTemporary = 2,
};

enum class Kill : int {
  AllTemporary = 0,
};

enum class ScreenSaverMode : int {
  Reset = 0,
  Active = 1,
};

enum class MappingStatus : int {
  Success = 0,
  Busy = 1,
  Failure = 2,
};

enum class MapIndex : int {
  Shift = 0,
  Lock = 1,
  Control = 2,
  c_1 = 3,
  c_2 = 4,
  c_3 = 5,
  c_4 = 6,
  c_5 = 7,
};

struct Drawable {
  Drawable() : value{} {}

  Drawable(Window value) : value{static_cast<uint32_t>(value)} {}
  operator Window() const { return static_cast<Window>(value); }

  Drawable(Pixmap value) : value{static_cast<uint32_t>(value)} {}
  operator Pixmap() const { return static_cast<Pixmap>(value); }

  uint32_t value{};
};

struct Fontable {
  Fontable() : value{} {}

  Fontable(Font value) : value{static_cast<uint32_t>(value)} {}
  operator Font() const { return static_cast<Font>(value); }

  Fontable(GraphicsContext value) : value{static_cast<uint32_t>(value)} {}
  operator GraphicsContext() const {
    return static_cast<GraphicsContext>(value);
  }

  uint32_t value{};
};

struct Char16 {
  uint8_t byte1{};
  uint8_t byte2{};
};

struct Point {
  int16_t x{};
  int16_t y{};
};

struct Rectangle {
  int16_t x{};
  int16_t y{};
  uint16_t width{};
  uint16_t height{};
};

struct Arc {
  int16_t x{};
  int16_t y{};
  uint16_t width{};
  uint16_t height{};
  int16_t angle1{};
  int16_t angle2{};
};

struct Format {
  uint8_t depth{};
  uint8_t bits_per_pixel{};
  uint8_t scanline_pad{};
};

struct VisualType {
  VisualId visual_id{};
  VisualClass c_class{};
  uint8_t bits_per_rgb_value{};
  uint16_t colormap_entries{};
  uint32_t red_mask{};
  uint32_t green_mask{};
  uint32_t blue_mask{};
};

struct Depth {
  uint8_t depth{};
  std::vector<VisualType> visuals{};
};

struct Screen {
  Window root{};
  ColorMap default_colormap{};
  uint32_t white_pixel{};
  uint32_t black_pixel{};
  EventMask current_input_masks{};
  uint16_t width_in_pixels{};
  uint16_t height_in_pixels{};
  uint16_t width_in_millimeters{};
  uint16_t height_in_millimeters{};
  uint16_t min_installed_maps{};
  uint16_t max_installed_maps{};
  VisualId root_visual{};
  BackingStore backing_stores{};
  uint8_t save_unders{};
  uint8_t root_depth{};
  std::vector<Depth> allowed_depths{};
};

struct SetupRequest {
  uint8_t byte_order{};
  uint16_t protocol_major_version{};
  uint16_t protocol_minor_version{};
  std::string authorization_protocol_name{};
  std::string authorization_protocol_data{};
};

struct SetupFailed {
  uint8_t status{};
  uint16_t protocol_major_version{};
  uint16_t protocol_minor_version{};
  uint16_t length{};
  std::string reason{};
};

struct SetupAuthenticate {
  uint8_t status{};
  uint16_t length{};
  std::string reason{};
};

struct Setup {
  uint8_t status{};
  uint16_t protocol_major_version{};
  uint16_t protocol_minor_version{};
  uint16_t length{};
  uint32_t release_number{};
  uint32_t resource_id_base{};
  uint32_t resource_id_mask{};
  uint32_t motion_buffer_size{};
  uint16_t maximum_request_length{};
  ImageOrder image_byte_order{};
  ImageOrder bitmap_format_bit_order{};
  uint8_t bitmap_format_scanline_unit{};
  uint8_t bitmap_format_scanline_pad{};
  KeyCode min_keycode{};
  KeyCode max_keycode{};
  std::string vendor{};
  std::vector<Format> pixmap_formats{};
  std::vector<Screen> roots{};
};

struct KeyEvent {
  static constexpr int type_id = 52;
  enum Opcode {
    Press = 2,
    Release = 3,
  } opcode{};
  bool send_event{};
  KeyCode detail{};
  uint16_t sequence{};
  Time time{};
  Window root{};
  Window event{};
  Window child{};
  int16_t root_x{};
  int16_t root_y{};
  int16_t event_x{};
  int16_t event_y{};
  KeyButMask state{};
  uint8_t same_screen{};

  x11::Window* GetWindow() { return reinterpret_cast<x11::Window*>(&event); }
};

struct ButtonEvent {
  static constexpr int type_id = 53;
  enum Opcode {
    Press = 4,
    Release = 5,
  } opcode{};
  bool send_event{};
  Button detail{};
  uint16_t sequence{};
  Time time{};
  Window root{};
  Window event{};
  Window child{};
  int16_t root_x{};
  int16_t root_y{};
  int16_t event_x{};
  int16_t event_y{};
  KeyButMask state{};
  uint8_t same_screen{};

  x11::Window* GetWindow() { return reinterpret_cast<x11::Window*>(&event); }
};

struct MotionNotifyEvent {
  static constexpr int type_id = 54;
  static constexpr uint8_t opcode = 6;
  bool send_event{};
  Motion detail{};
  uint16_t sequence{};
  Time time{};
  Window root{};
  Window event{};
  Window child{};
  int16_t root_x{};
  int16_t root_y{};
  int16_t event_x{};
  int16_t event_y{};
  KeyButMask state{};
  uint8_t same_screen{};

  x11::Window* GetWindow() { return reinterpret_cast<x11::Window*>(&event); }
};

struct CrossingEvent {
  static constexpr int type_id = 55;
  enum Opcode {
    EnterNotify = 7,
    LeaveNotify = 8,
  } opcode{};
  bool send_event{};
  NotifyDetail detail{};
  uint16_t sequence{};
  Time time{};
  Window root{};
  Window event{};
  Window child{};
  int16_t root_x{};
  int16_t root_y{};
  int16_t event_x{};
  int16_t event_y{};
  KeyButMask state{};
  NotifyMode mode{};
  uint8_t same_screen_focus{};

  x11::Window* GetWindow() { return reinterpret_cast<x11::Window*>(&event); }
};

struct FocusEvent {
  static constexpr int type_id = 56;
  enum Opcode {
    In = 9,
    Out = 10,
  } opcode{};
  bool send_event{};
  NotifyDetail detail{};
  uint16_t sequence{};
  Window event{};
  NotifyMode mode{};

  x11::Window* GetWindow() { return reinterpret_cast<x11::Window*>(&event); }
};

struct KeymapNotifyEvent {
  static constexpr int type_id = 57;
  static constexpr uint8_t opcode = 11;
  bool send_event{};
  std::array<uint8_t, 31> keys{};

  x11::Window* GetWindow() { return nullptr; }
};

struct ExposeEvent {
  static constexpr int type_id = 58;
  static constexpr uint8_t opcode = 12;
  bool send_event{};
  uint16_t sequence{};
  Window window{};
  uint16_t x{};
  uint16_t y{};
  uint16_t width{};
  uint16_t height{};
  uint16_t count{};

  x11::Window* GetWindow() { return reinterpret_cast<x11::Window*>(&window); }
};

struct GraphicsExposureEvent {
  static constexpr int type_id = 59;
  static constexpr uint8_t opcode = 13;
  bool send_event{};
  uint16_t sequence{};
  Drawable drawable{};
  uint16_t x{};
  uint16_t y{};
  uint16_t width{};
  uint16_t height{};
  uint16_t minor_opcode{};
  uint16_t count{};
  uint8_t major_opcode{};

  x11::Window* GetWindow() { return reinterpret_cast<x11::Window*>(&drawable); }
};

struct NoExposureEvent {
  static constexpr int type_id = 60;
  static constexpr uint8_t opcode = 14;
  bool send_event{};
  uint16_t sequence{};
  Drawable drawable{};
  uint16_t minor_opcode{};
  uint8_t major_opcode{};

  x11::Window* GetWindow() { return reinterpret_cast<x11::Window*>(&drawable); }
};

struct VisibilityNotifyEvent {
  static constexpr int type_id = 61;
  static constexpr uint8_t opcode = 15;
  bool send_event{};
  uint16_t sequence{};
  Window window{};
  Visibility state{};

  x11::Window* GetWindow() { return reinterpret_cast<x11::Window*>(&window); }
};

struct CreateNotifyEvent {
  static constexpr int type_id = 62;
  static constexpr uint8_t opcode = 16;
  bool send_event{};
  uint16_t sequence{};
  Window parent{};
  Window window{};
  int16_t x{};
  int16_t y{};
  uint16_t width{};
  uint16_t height{};
  uint16_t border_width{};
  uint8_t override_redirect{};

  x11::Window* GetWindow() { return reinterpret_cast<x11::Window*>(&window); }
};

struct DestroyNotifyEvent {
  static constexpr int type_id = 63;
  static constexpr uint8_t opcode = 17;
  bool send_event{};
  uint16_t sequence{};
  Window event{};
  Window window{};

  x11::Window* GetWindow() { return reinterpret_cast<x11::Window*>(&event); }
};

struct UnmapNotifyEvent {
  static constexpr int type_id = 64;
  static constexpr uint8_t opcode = 18;
  bool send_event{};
  uint16_t sequence{};
  Window event{};
  Window window{};
  uint8_t from_configure{};

  x11::Window* GetWindow() { return reinterpret_cast<x11::Window*>(&event); }
};

struct MapNotifyEvent {
  static constexpr int type_id = 65;
  static constexpr uint8_t opcode = 19;
  bool send_event{};
  uint16_t sequence{};
  Window event{};
  Window window{};
  uint8_t override_redirect{};

  x11::Window* GetWindow() { return reinterpret_cast<x11::Window*>(&event); }
};

struct MapRequestEvent {
  static constexpr int type_id = 66;
  static constexpr uint8_t opcode = 20;
  bool send_event{};
  uint16_t sequence{};
  Window parent{};
  Window window{};

  x11::Window* GetWindow() { return reinterpret_cast<x11::Window*>(&window); }
};

struct ReparentNotifyEvent {
  static constexpr int type_id = 67;
  static constexpr uint8_t opcode = 21;
  bool send_event{};
  uint16_t sequence{};
  Window event{};
  Window window{};
  Window parent{};
  int16_t x{};
  int16_t y{};
  uint8_t override_redirect{};

  x11::Window* GetWindow() { return reinterpret_cast<x11::Window*>(&event); }
};

struct ConfigureNotifyEvent {
  static constexpr int type_id = 68;
  static constexpr uint8_t opcode = 22;
  bool send_event{};
  uint16_t sequence{};
  Window event{};
  Window window{};
  Window above_sibling{};
  int16_t x{};
  int16_t y{};
  uint16_t width{};
  uint16_t height{};
  uint16_t border_width{};
  uint8_t override_redirect{};

  x11::Window* GetWindow() { return reinterpret_cast<x11::Window*>(&event); }
};

struct ConfigureRequestEvent {
  static constexpr int type_id = 69;
  static constexpr uint8_t opcode = 23;
  bool send_event{};
  StackMode stack_mode{};
  uint16_t sequence{};
  Window parent{};
  Window window{};
  Window sibling{};
  int16_t x{};
  int16_t y{};
  uint16_t width{};
  uint16_t height{};
  uint16_t border_width{};
  ConfigWindow value_mask{};

  x11::Window* GetWindow() { return reinterpret_cast<x11::Window*>(&window); }
};

struct GravityNotifyEvent {
  static constexpr int type_id = 70;
  static constexpr uint8_t opcode = 24;
  bool send_event{};
  uint16_t sequence{};
  Window event{};
  Window window{};
  int16_t x{};
  int16_t y{};

  x11::Window* GetWindow() { return reinterpret_cast<x11::Window*>(&event); }
};

struct ResizeRequestEvent {
  static constexpr int type_id = 71;
  static constexpr uint8_t opcode = 25;
  bool send_event{};
  uint16_t sequence{};
  Window window{};
  uint16_t width{};
  uint16_t height{};

  x11::Window* GetWindow() { return reinterpret_cast<x11::Window*>(&window); }
};

struct CirculateEvent {
  static constexpr int type_id = 72;
  enum Opcode {
    Notify = 26,
    Request = 27,
  } opcode{};
  bool send_event{};
  uint16_t sequence{};
  Window event{};
  Window window{};
  Place place{};

  x11::Window* GetWindow() { return reinterpret_cast<x11::Window*>(&event); }
};

struct PropertyNotifyEvent {
  static constexpr int type_id = 73;
  static constexpr uint8_t opcode = 28;
  bool send_event{};
  uint16_t sequence{};
  Window window{};
  Atom atom{};
  Time time{};
  Property state{};

  x11::Window* GetWindow() { return reinterpret_cast<x11::Window*>(&window); }
};

struct SelectionClearEvent {
  static constexpr int type_id = 74;
  static constexpr uint8_t opcode = 29;
  bool send_event{};
  uint16_t sequence{};
  Time time{};
  Window owner{};
  Atom selection{};

  x11::Window* GetWindow() { return reinterpret_cast<x11::Window*>(&owner); }
};

struct SelectionRequestEvent {
  static constexpr int type_id = 75;
  static constexpr uint8_t opcode = 30;
  bool send_event{};
  uint16_t sequence{};
  Time time{};
  Window owner{};
  Window requestor{};
  Atom selection{};
  Atom target{};
  Atom property{};

  x11::Window* GetWindow() { return reinterpret_cast<x11::Window*>(&owner); }
};

struct SelectionNotifyEvent {
  static constexpr int type_id = 76;
  static constexpr uint8_t opcode = 31;
  bool send_event{};
  uint16_t sequence{};
  Time time{};
  Window requestor{};
  Atom selection{};
  Atom target{};
  Atom property{};

  x11::Window* GetWindow() {
    return reinterpret_cast<x11::Window*>(&requestor);
  }
};

struct ColormapNotifyEvent {
  static constexpr int type_id = 77;
  static constexpr uint8_t opcode = 32;
  bool send_event{};
  uint16_t sequence{};
  Window window{};
  ColorMap colormap{};
  uint8_t c_new{};
  ColormapState state{};

  x11::Window* GetWindow() { return reinterpret_cast<x11::Window*>(&window); }
};

union ClientMessageData {
  ClientMessageData() { memset(this, 0, sizeof(*this)); }

  std::array<uint8_t, 20> data8;
  std::array<uint16_t, 10> data16;
  std::array<uint32_t, 5> data32;
};
static_assert(std::is_trivially_copyable<ClientMessageData>::value, "");

struct ClientMessageEvent {
  static constexpr int type_id = 78;
  static constexpr uint8_t opcode = 33;
  bool send_event{};
  uint8_t format{};
  uint16_t sequence{};
  Window window{};
  Atom type{};
  ClientMessageData data{};

  x11::Window* GetWindow() { return reinterpret_cast<x11::Window*>(&window); }
};

struct MappingNotifyEvent {
  static constexpr int type_id = 79;
  static constexpr uint8_t opcode = 34;
  bool send_event{};
  uint16_t sequence{};
  Mapping request{};
  KeyCode first_keycode{};
  uint8_t count{};

  x11::Window* GetWindow() { return nullptr; }
};

struct GeGenericEvent {
  static constexpr int type_id = 80;
  static constexpr uint8_t opcode = 35;
  bool send_event{};
  uint16_t sequence{};

  x11::Window* GetWindow() { return nullptr; }
};

struct RequestError : public x11::Error {
  uint16_t sequence{};
  uint32_t bad_value{};
  uint16_t minor_opcode{};
  uint8_t major_opcode{};

  std::string ToString() const override;
};

struct ValueError : public x11::Error {
  uint16_t sequence{};
  uint32_t bad_value{};
  uint16_t minor_opcode{};
  uint8_t major_opcode{};

  std::string ToString() const override;
};

struct WindowError : public x11::Error {
  uint16_t sequence{};
  uint32_t bad_value{};
  uint16_t minor_opcode{};
  uint8_t major_opcode{};

  std::string ToString() const override;
};

struct PixmapError : public x11::Error {
  uint16_t sequence{};
  uint32_t bad_value{};
  uint16_t minor_opcode{};
  uint8_t major_opcode{};

  std::string ToString() const override;
};

struct AtomError : public x11::Error {
  uint16_t sequence{};
  uint32_t bad_value{};
  uint16_t minor_opcode{};
  uint8_t major_opcode{};

  std::string ToString() const override;
};

struct CursorError : public x11::Error {
  uint16_t sequence{};
  uint32_t bad_value{};
  uint16_t minor_opcode{};
  uint8_t major_opcode{};

  std::string ToString() const override;
};

struct FontError : public x11::Error {
  uint16_t sequence{};
  uint32_t bad_value{};
  uint16_t minor_opcode{};
  uint8_t major_opcode{};

  std::string ToString() const override;
};

struct MatchError : public x11::Error {
  uint16_t sequence{};
  uint32_t bad_value{};
  uint16_t minor_opcode{};
  uint8_t major_opcode{};

  std::string ToString() const override;
};

struct DrawableError : public x11::Error {
  uint16_t sequence{};
  uint32_t bad_value{};
  uint16_t minor_opcode{};
  uint8_t major_opcode{};

  std::string ToString() const override;
};

struct AccessError : public x11::Error {
  uint16_t sequence{};
  uint32_t bad_value{};
  uint16_t minor_opcode{};
  uint8_t major_opcode{};

  std::string ToString() const override;
};

struct AllocError : public x11::Error {
  uint16_t sequence{};
  uint32_t bad_value{};
  uint16_t minor_opcode{};
  uint8_t major_opcode{};

  std::string ToString() const override;
};

struct ColormapError : public x11::Error {
  uint16_t sequence{};
  uint32_t bad_value{};
  uint16_t minor_opcode{};
  uint8_t major_opcode{};

  std::string ToString() const override;
};

struct GContextError : public x11::Error {
  uint16_t sequence{};
  uint32_t bad_value{};
  uint16_t minor_opcode{};
  uint8_t major_opcode{};

  std::string ToString() const override;
};

struct IDChoiceError : public x11::Error {
  uint16_t sequence{};
  uint32_t bad_value{};
  uint16_t minor_opcode{};
  uint8_t major_opcode{};

  std::string ToString() const override;
};

struct NameError : public x11::Error {
  uint16_t sequence{};
  uint32_t bad_value{};
  uint16_t minor_opcode{};
  uint8_t major_opcode{};

  std::string ToString() const override;
};

struct LengthError : public x11::Error {
  uint16_t sequence{};
  uint32_t bad_value{};
  uint16_t minor_opcode{};
  uint8_t major_opcode{};

  std::string ToString() const override;
};

struct ImplementationError : public x11::Error {
  uint16_t sequence{};
  uint32_t bad_value{};
  uint16_t minor_opcode{};
  uint8_t major_opcode{};

  std::string ToString() const override;
};

struct TimeCoord {
  Time time{};
  int16_t x{};
  int16_t y{};
};

struct FontProperty {
  Atom name{};
  uint32_t value{};
};

struct CharInfo {
  int16_t left_side_bearing{};
  int16_t right_side_bearing{};
  int16_t character_width{};
  int16_t ascent{};
  int16_t descent{};
  uint16_t attributes{};
};

struct Str {
  std::string name{};
};

struct Segment {
  int16_t x1{};
  int16_t y1{};
  int16_t x2{};
  int16_t y2{};
};

struct ColorItem {
  uint32_t pixel{};
  uint16_t red{};
  uint16_t green{};
  uint16_t blue{};
  ColorFlag flags{};
};

struct Rgb {
  uint16_t red{};
  uint16_t green{};
  uint16_t blue{};
};

struct Host {
  Family family{};
  std::vector<uint8_t> address{};
};

struct CreateWindowRequest {
  uint8_t depth{};
  Window wid{};
  Window parent{};
  int16_t x{};
  int16_t y{};
  uint16_t width{};
  uint16_t height{};
  uint16_t border_width{};
  WindowClass c_class{};
  VisualId visual{};
  absl::optional<Pixmap> background_pixmap{};
  absl::optional<uint32_t> background_pixel{};
  absl::optional<Pixmap> border_pixmap{};
  absl::optional<uint32_t> border_pixel{};
  absl::optional<Gravity> bit_gravity{};
  absl::optional<Gravity> win_gravity{};
  absl::optional<BackingStore> backing_store{};
  absl::optional<uint32_t> backing_planes{};
  absl::optional<uint32_t> backing_pixel{};
  absl::optional<Bool32> override_redirect{};
  absl::optional<Bool32> save_under{};
  absl::optional<EventMask> event_mask{};
  absl::optional<EventMask> do_not_propogate_mask{};
  absl::optional<ColorMap> colormap{};
  absl::optional<Cursor> cursor{};
};

using CreateWindowResponse = Response<void>;

struct ChangeWindowAttributesRequest {
  Window window{};
  absl::optional<Pixmap> background_pixmap{};
  absl::optional<uint32_t> background_pixel{};
  absl::optional<Pixmap> border_pixmap{};
  absl::optional<uint32_t> border_pixel{};
  absl::optional<Gravity> bit_gravity{};
  absl::optional<Gravity> win_gravity{};
  absl::optional<BackingStore> backing_store{};
  absl::optional<uint32_t> backing_planes{};
  absl::optional<uint32_t> backing_pixel{};
  absl::optional<Bool32> override_redirect{};
  absl::optional<Bool32> save_under{};
  absl::optional<EventMask> event_mask{};
  absl::optional<EventMask> do_not_propogate_mask{};
  absl::optional<ColorMap> colormap{};
  absl::optional<Cursor> cursor{};
};

using ChangeWindowAttributesResponse = Response<void>;

struct GetWindowAttributesRequest {
  Window window{};
};

struct GetWindowAttributesReply {
  BackingStore backing_store{};
  uint16_t sequence{};
  VisualId visual{};
  WindowClass c_class{};
  Gravity bit_gravity{};
  Gravity win_gravity{};
  uint32_t backing_planes{};
  uint32_t backing_pixel{};
  uint8_t save_under{};
  uint8_t map_is_installed{};
  MapState map_state{};
  uint8_t override_redirect{};
  ColorMap colormap{};
  EventMask all_event_masks{};
  EventMask your_event_mask{};
  EventMask do_not_propagate_mask{};
};

using GetWindowAttributesResponse = Response<GetWindowAttributesReply>;

struct DestroyWindowRequest {
  Window window{};
};

using DestroyWindowResponse = Response<void>;

struct DestroySubwindowsRequest {
  Window window{};
};

using DestroySubwindowsResponse = Response<void>;

struct ChangeSaveSetRequest {
  SetMode mode{};
  Window window{};
};

using ChangeSaveSetResponse = Response<void>;

struct ReparentWindowRequest {
  Window window{};
  Window parent{};
  int16_t x{};
  int16_t y{};
};

using ReparentWindowResponse = Response<void>;

struct MapWindowRequest {
  Window window{};
};

using MapWindowResponse = Response<void>;

struct MapSubwindowsRequest {
  Window window{};
};

using MapSubwindowsResponse = Response<void>;

struct UnmapWindowRequest {
  Window window{};
};

using UnmapWindowResponse = Response<void>;

struct UnmapSubwindowsRequest {
  Window window{};
};

using UnmapSubwindowsResponse = Response<void>;

struct ConfigureWindowRequest {
  Window window{};
  absl::optional<int32_t> x{};
  absl::optional<int32_t> y{};
  absl::optional<uint32_t> width{};
  absl::optional<uint32_t> height{};
  absl::optional<uint32_t> border_width{};
  absl::optional<Window> sibling{};
  absl::optional<StackMode> stack_mode{};
};

using ConfigureWindowResponse = Response<void>;

struct CirculateWindowRequest {
  Circulate direction{};
  Window window{};
};

using CirculateWindowResponse = Response<void>;

struct GetGeometryRequest {
  Drawable drawable{};
};

struct GetGeometryReply {
  uint8_t depth{};
  uint16_t sequence{};
  Window root{};
  int16_t x{};
  int16_t y{};
  uint16_t width{};
  uint16_t height{};
  uint16_t border_width{};
};

using GetGeometryResponse = Response<GetGeometryReply>;

struct QueryTreeRequest {
  Window window{};
};

struct QueryTreeReply {
  uint16_t sequence{};
  Window root{};
  Window parent{};
  std::vector<Window> children{};
};

using QueryTreeResponse = Response<QueryTreeReply>;

struct InternAtomRequest {
  uint8_t only_if_exists{};
  std::string name{};
};

struct InternAtomReply {
  uint16_t sequence{};
  Atom atom{};
};

using InternAtomResponse = Response<InternAtomReply>;

struct GetAtomNameRequest {
  Atom atom{};
};

struct GetAtomNameReply {
  uint16_t sequence{};
  std::string name{};
};

using GetAtomNameResponse = Response<GetAtomNameReply>;

struct ChangePropertyRequest {
  PropMode mode{};
  Window window{};
  Atom property{};
  Atom type{};
  uint8_t format{};
  uint32_t data_len{};
  scoped_refptr<base::RefCountedMemory> data{};
};

using ChangePropertyResponse = Response<void>;

struct DeletePropertyRequest {
  Window window{};
  Atom property{};
};

using DeletePropertyResponse = Response<void>;

struct GetPropertyRequest {
  uint8_t c_delete{};
  Window window{};
  Atom property{};
  Atom type{};
  uint32_t long_offset{};
  uint32_t long_length{};
};

struct GetPropertyReply {
  uint8_t format{};
  uint16_t sequence{};
  Atom type{};
  uint32_t bytes_after{};
  uint32_t value_len{};
  scoped_refptr<base::RefCountedMemory> value{};
};

using GetPropertyResponse = Response<GetPropertyReply>;

struct ListPropertiesRequest {
  Window window{};
};

struct ListPropertiesReply {
  uint16_t sequence{};
  std::vector<Atom> atoms{};
};

using ListPropertiesResponse = Response<ListPropertiesReply>;

struct SetSelectionOwnerRequest {
  Window owner{};
  Atom selection{};
  Time time{};
};

using SetSelectionOwnerResponse = Response<void>;

struct GetSelectionOwnerRequest {
  Atom selection{};
};

struct GetSelectionOwnerReply {
  uint16_t sequence{};
  Window owner{};
};

using GetSelectionOwnerResponse = Response<GetSelectionOwnerReply>;

struct ConvertSelectionRequest {
  Window requestor{};
  Atom selection{};
  Atom target{};
  Atom property{};
  Time time{};
};

using ConvertSelectionResponse = Response<void>;

struct SendEventRequest {
  uint8_t propagate{};
  Window destination{};
  EventMask event_mask{};
  std::array<char, 32> event{};
};

using SendEventResponse = Response<void>;

struct GrabPointerRequest {
  uint8_t owner_events{};
  Window grab_window{};
  EventMask event_mask{};
  GrabMode pointer_mode{};
  GrabMode keyboard_mode{};
  Window confine_to{};
  Cursor cursor{};
  Time time{};
};

struct GrabPointerReply {
  GrabStatus status{};
  uint16_t sequence{};
};

using GrabPointerResponse = Response<GrabPointerReply>;

struct UngrabPointerRequest {
  Time time{};
};

using UngrabPointerResponse = Response<void>;

struct GrabButtonRequest {
  uint8_t owner_events{};
  Window grab_window{};
  EventMask event_mask{};
  GrabMode pointer_mode{};
  GrabMode keyboard_mode{};
  Window confine_to{};
  Cursor cursor{};
  ButtonIndex button{};
  ModMask modifiers{};
};

using GrabButtonResponse = Response<void>;

struct UngrabButtonRequest {
  ButtonIndex button{};
  Window grab_window{};
  ModMask modifiers{};
};

using UngrabButtonResponse = Response<void>;

struct ChangeActivePointerGrabRequest {
  Cursor cursor{};
  Time time{};
  EventMask event_mask{};
};

using ChangeActivePointerGrabResponse = Response<void>;

struct GrabKeyboardRequest {
  uint8_t owner_events{};
  Window grab_window{};
  Time time{};
  GrabMode pointer_mode{};
  GrabMode keyboard_mode{};
};

struct GrabKeyboardReply {
  GrabStatus status{};
  uint16_t sequence{};
};

using GrabKeyboardResponse = Response<GrabKeyboardReply>;

struct UngrabKeyboardRequest {
  Time time{};
};

using UngrabKeyboardResponse = Response<void>;

struct GrabKeyRequest {
  uint8_t owner_events{};
  Window grab_window{};
  ModMask modifiers{};
  KeyCode key{};
  GrabMode pointer_mode{};
  GrabMode keyboard_mode{};
};

using GrabKeyResponse = Response<void>;

struct UngrabKeyRequest {
  KeyCode key{};
  Window grab_window{};
  ModMask modifiers{};
};

using UngrabKeyResponse = Response<void>;

struct AllowEventsRequest {
  Allow mode{};
  Time time{};
};

using AllowEventsResponse = Response<void>;

struct GrabServerRequest {};

using GrabServerResponse = Response<void>;

struct UngrabServerRequest {};

using UngrabServerResponse = Response<void>;

struct QueryPointerRequest {
  Window window{};
};

struct QueryPointerReply {
  uint8_t same_screen{};
  uint16_t sequence{};
  Window root{};
  Window child{};
  int16_t root_x{};
  int16_t root_y{};
  int16_t win_x{};
  int16_t win_y{};
  KeyButMask mask{};
};

using QueryPointerResponse = Response<QueryPointerReply>;

struct GetMotionEventsRequest {
  Window window{};
  Time start{};
  Time stop{};
};

struct GetMotionEventsReply {
  uint16_t sequence{};
  std::vector<TimeCoord> events{};
};

using GetMotionEventsResponse = Response<GetMotionEventsReply>;

struct TranslateCoordinatesRequest {
  Window src_window{};
  Window dst_window{};
  int16_t src_x{};
  int16_t src_y{};
};

struct TranslateCoordinatesReply {
  uint8_t same_screen{};
  uint16_t sequence{};
  Window child{};
  int16_t dst_x{};
  int16_t dst_y{};
};

using TranslateCoordinatesResponse = Response<TranslateCoordinatesReply>;

struct WarpPointerRequest {
  Window src_window{};
  Window dst_window{};
  int16_t src_x{};
  int16_t src_y{};
  uint16_t src_width{};
  uint16_t src_height{};
  int16_t dst_x{};
  int16_t dst_y{};
};

using WarpPointerResponse = Response<void>;

struct SetInputFocusRequest {
  InputFocus revert_to{};
  Window focus{};
  Time time{};
};

using SetInputFocusResponse = Response<void>;

struct GetInputFocusRequest {};

struct GetInputFocusReply {
  InputFocus revert_to{};
  uint16_t sequence{};
  Window focus{};
};

using GetInputFocusResponse = Response<GetInputFocusReply>;

struct QueryKeymapRequest {};

struct QueryKeymapReply {
  uint16_t sequence{};
  std::array<uint8_t, 32> keys{};
};

using QueryKeymapResponse = Response<QueryKeymapReply>;

struct OpenFontRequest {
  Font fid{};
  std::string name{};
};

using OpenFontResponse = Response<void>;

struct CloseFontRequest {
  Font font{};
};

using CloseFontResponse = Response<void>;

struct QueryFontRequest {
  Fontable font{};
};

struct QueryFontReply {
  uint16_t sequence{};
  CharInfo min_bounds{};
  CharInfo max_bounds{};
  uint16_t min_char_or_byte2{};
  uint16_t max_char_or_byte2{};
  uint16_t default_char{};
  FontDraw draw_direction{};
  uint8_t min_byte1{};
  uint8_t max_byte1{};
  uint8_t all_chars_exist{};
  int16_t font_ascent{};
  int16_t font_descent{};
  std::vector<FontProperty> properties{};
  std::vector<CharInfo> char_infos{};
};

using QueryFontResponse = Response<QueryFontReply>;

struct QueryTextExtentsRequest {
  Fontable font{};
  std::vector<Char16> string{};
};

struct QueryTextExtentsReply {
  FontDraw draw_direction{};
  uint16_t sequence{};
  int16_t font_ascent{};
  int16_t font_descent{};
  int16_t overall_ascent{};
  int16_t overall_descent{};
  int32_t overall_width{};
  int32_t overall_left{};
  int32_t overall_right{};
};

using QueryTextExtentsResponse = Response<QueryTextExtentsReply>;

struct ListFontsRequest {
  uint16_t max_names{};
  std::string pattern{};
};

struct ListFontsReply {
  uint16_t sequence{};
  std::vector<Str> names{};
};

using ListFontsResponse = Response<ListFontsReply>;

struct ListFontsWithInfoRequest {
  uint16_t max_names{};
  std::string pattern{};
};

struct ListFontsWithInfoReply {
  uint16_t sequence{};
  CharInfo min_bounds{};
  CharInfo max_bounds{};
  uint16_t min_char_or_byte2{};
  uint16_t max_char_or_byte2{};
  uint16_t default_char{};
  FontDraw draw_direction{};
  uint8_t min_byte1{};
  uint8_t max_byte1{};
  uint8_t all_chars_exist{};
  int16_t font_ascent{};
  int16_t font_descent{};
  uint32_t replies_hint{};
  std::vector<FontProperty> properties{};
  std::string name{};
};

using ListFontsWithInfoResponse = Response<ListFontsWithInfoReply>;

struct SetFontPathRequest {
  std::vector<Str> font{};
};

using SetFontPathResponse = Response<void>;

struct GetFontPathRequest {};

struct GetFontPathReply {
  uint16_t sequence{};
  std::vector<Str> path{};
};

using GetFontPathResponse = Response<GetFontPathReply>;

struct CreatePixmapRequest {
  uint8_t depth{};
  Pixmap pid{};
  Drawable drawable{};
  uint16_t width{};
  uint16_t height{};
};

using CreatePixmapResponse = Response<void>;

struct FreePixmapRequest {
  Pixmap pixmap{};
};

using FreePixmapResponse = Response<void>;

struct CreateGCRequest {
  GraphicsContext cid{};
  Drawable drawable{};
  absl::optional<Gx> function{};
  absl::optional<uint32_t> plane_mask{};
  absl::optional<uint32_t> foreground{};
  absl::optional<uint32_t> background{};
  absl::optional<uint32_t> line_width{};
  absl::optional<LineStyle> line_style{};
  absl::optional<CapStyle> cap_style{};
  absl::optional<JoinStyle> join_style{};
  absl::optional<FillStyle> fill_style{};
  absl::optional<FillRule> fill_rule{};
  absl::optional<Pixmap> tile{};
  absl::optional<Pixmap> stipple{};
  absl::optional<int32_t> tile_stipple_x_origin{};
  absl::optional<int32_t> tile_stipple_y_origin{};
  absl::optional<Font> font{};
  absl::optional<SubwindowMode> subwindow_mode{};
  absl::optional<Bool32> graphics_exposures{};
  absl::optional<int32_t> clip_x_origin{};
  absl::optional<int32_t> clip_y_origin{};
  absl::optional<Pixmap> clip_mask{};
  absl::optional<uint32_t> dash_offset{};
  absl::optional<uint32_t> dashes{};
  absl::optional<ArcMode> arc_mode{};
};

using CreateGCResponse = Response<void>;

struct ChangeGCRequest {
  GraphicsContext gc{};
  absl::optional<Gx> function{};
  absl::optional<uint32_t> plane_mask{};
  absl::optional<uint32_t> foreground{};
  absl::optional<uint32_t> background{};
  absl::optional<uint32_t> line_width{};
  absl::optional<LineStyle> line_style{};
  absl::optional<CapStyle> cap_style{};
  absl::optional<JoinStyle> join_style{};
  absl::optional<FillStyle> fill_style{};
  absl::optional<FillRule> fill_rule{};
  absl::optional<Pixmap> tile{};
  absl::optional<Pixmap> stipple{};
  absl::optional<int32_t> tile_stipple_x_origin{};
  absl::optional<int32_t> tile_stipple_y_origin{};
  absl::optional<Font> font{};
  absl::optional<SubwindowMode> subwindow_mode{};
  absl::optional<Bool32> graphics_exposures{};
  absl::optional<int32_t> clip_x_origin{};
  absl::optional<int32_t> clip_y_origin{};
  absl::optional<Pixmap> clip_mask{};
  absl::optional<uint32_t> dash_offset{};
  absl::optional<uint32_t> dashes{};
  absl::optional<ArcMode> arc_mode{};
};

using ChangeGCResponse = Response<void>;

struct CopyGCRequest {
  GraphicsContext src_gc{};
  GraphicsContext dst_gc{};
  GraphicsContextAttribute value_mask{};
};

using CopyGCResponse = Response<void>;

struct SetDashesRequest {
  GraphicsContext gc{};
  uint16_t dash_offset{};
  std::vector<uint8_t> dashes{};
};

using SetDashesResponse = Response<void>;

struct SetClipRectanglesRequest {
  ClipOrdering ordering{};
  GraphicsContext gc{};
  int16_t clip_x_origin{};
  int16_t clip_y_origin{};
  std::vector<Rectangle> rectangles{};
};

using SetClipRectanglesResponse = Response<void>;

struct FreeGCRequest {
  GraphicsContext gc{};
};

using FreeGCResponse = Response<void>;

struct ClearAreaRequest {
  uint8_t exposures{};
  Window window{};
  int16_t x{};
  int16_t y{};
  uint16_t width{};
  uint16_t height{};
};

using ClearAreaResponse = Response<void>;

struct CopyAreaRequest {
  Drawable src_drawable{};
  Drawable dst_drawable{};
  GraphicsContext gc{};
  int16_t src_x{};
  int16_t src_y{};
  int16_t dst_x{};
  int16_t dst_y{};
  uint16_t width{};
  uint16_t height{};
};

using CopyAreaResponse = Response<void>;

struct CopyPlaneRequest {
  Drawable src_drawable{};
  Drawable dst_drawable{};
  GraphicsContext gc{};
  int16_t src_x{};
  int16_t src_y{};
  int16_t dst_x{};
  int16_t dst_y{};
  uint16_t width{};
  uint16_t height{};
  uint32_t bit_plane{};
};

using CopyPlaneResponse = Response<void>;

struct PolyPointRequest {
  CoordMode coordinate_mode{};
  Drawable drawable{};
  GraphicsContext gc{};
  std::vector<Point> points{};
};

using PolyPointResponse = Response<void>;

struct PolyLineRequest {
  CoordMode coordinate_mode{};
  Drawable drawable{};
  GraphicsContext gc{};
  std::vector<Point> points{};
};

using PolyLineResponse = Response<void>;

struct PolySegmentRequest {
  Drawable drawable{};
  GraphicsContext gc{};
  std::vector<Segment> segments{};
};

using PolySegmentResponse = Response<void>;

struct PolyRectangleRequest {
  Drawable drawable{};
  GraphicsContext gc{};
  std::vector<Rectangle> rectangles{};
};

using PolyRectangleResponse = Response<void>;

struct PolyArcRequest {
  Drawable drawable{};
  GraphicsContext gc{};
  std::vector<Arc> arcs{};
};

using PolyArcResponse = Response<void>;

struct FillPolyRequest {
  Drawable drawable{};
  GraphicsContext gc{};
  PolyShape shape{};
  CoordMode coordinate_mode{};
  std::vector<Point> points{};
};

using FillPolyResponse = Response<void>;

struct PolyFillRectangleRequest {
  Drawable drawable{};
  GraphicsContext gc{};
  std::vector<Rectangle> rectangles{};
};

using PolyFillRectangleResponse = Response<void>;

struct PolyFillArcRequest {
  Drawable drawable{};
  GraphicsContext gc{};
  std::vector<Arc> arcs{};
};

using PolyFillArcResponse = Response<void>;

struct PutImageRequest {
  ImageFormat format{};
  Drawable drawable{};
  GraphicsContext gc{};
  uint16_t width{};
  uint16_t height{};
  int16_t dst_x{};
  int16_t dst_y{};
  uint8_t left_pad{};
  uint8_t depth{};
  scoped_refptr<base::RefCountedMemory> data{};
};

using PutImageResponse = Response<void>;

struct GetImageRequest {
  ImageFormat format{};
  Drawable drawable{};
  int16_t x{};
  int16_t y{};
  uint16_t width{};
  uint16_t height{};
  uint32_t plane_mask{};
};

struct GetImageReply {
  uint8_t depth{};
  uint16_t sequence{};
  VisualId visual{};
  scoped_refptr<base::RefCountedMemory> data{};
};

using GetImageResponse = Response<GetImageReply>;

struct PolyText8Request {
  Drawable drawable{};
  GraphicsContext gc{};
  int16_t x{};
  int16_t y{};
  std::vector<uint8_t> items{};
};

using PolyText8Response = Response<void>;

struct PolyText16Request {
  Drawable drawable{};
  GraphicsContext gc{};
  int16_t x{};
  int16_t y{};
  std::vector<uint8_t> items{};
};

using PolyText16Response = Response<void>;

struct ImageText8Request {
  Drawable drawable{};
  GraphicsContext gc{};
  int16_t x{};
  int16_t y{};
  std::string string{};
};

using ImageText8Response = Response<void>;

struct ImageText16Request {
  Drawable drawable{};
  GraphicsContext gc{};
  int16_t x{};
  int16_t y{};
  std::vector<Char16> string{};
};

using ImageText16Response = Response<void>;

struct CreateColormapRequest {
  ColormapAlloc alloc{};
  ColorMap mid{};
  Window window{};
  VisualId visual{};
};

using CreateColormapResponse = Response<void>;

struct FreeColormapRequest {
  ColorMap cmap{};
};

using FreeColormapResponse = Response<void>;

struct CopyColormapAndFreeRequest {
  ColorMap mid{};
  ColorMap src_cmap{};
};

using CopyColormapAndFreeResponse = Response<void>;

struct InstallColormapRequest {
  ColorMap cmap{};
};

using InstallColormapResponse = Response<void>;

struct UninstallColormapRequest {
  ColorMap cmap{};
};

using UninstallColormapResponse = Response<void>;

struct ListInstalledColormapsRequest {
  Window window{};
};

struct ListInstalledColormapsReply {
  uint16_t sequence{};
  std::vector<ColorMap> cmaps{};
};

using ListInstalledColormapsResponse = Response<ListInstalledColormapsReply>;

struct AllocColorRequest {
  ColorMap cmap{};
  uint16_t red{};
  uint16_t green{};
  uint16_t blue{};
};

struct AllocColorReply {
  uint16_t sequence{};
  uint16_t red{};
  uint16_t green{};
  uint16_t blue{};
  uint32_t pixel{};
};

using AllocColorResponse = Response<AllocColorReply>;

struct AllocNamedColorRequest {
  ColorMap cmap{};
  std::string name{};
};

struct AllocNamedColorReply {
  uint16_t sequence{};
  uint32_t pixel{};
  uint16_t exact_red{};
  uint16_t exact_green{};
  uint16_t exact_blue{};
  uint16_t visual_red{};
  uint16_t visual_green{};
  uint16_t visual_blue{};
};

using AllocNamedColorResponse = Response<AllocNamedColorReply>;

struct AllocColorCellsRequest {
  uint8_t contiguous{};
  ColorMap cmap{};
  uint16_t colors{};
  uint16_t planes{};
};

struct AllocColorCellsReply {
  uint16_t sequence{};
  std::vector<uint32_t> pixels{};
  std::vector<uint32_t> masks{};
};

using AllocColorCellsResponse = Response<AllocColorCellsReply>;

struct AllocColorPlanesRequest {
  uint8_t contiguous{};
  ColorMap cmap{};
  uint16_t colors{};
  uint16_t reds{};
  uint16_t greens{};
  uint16_t blues{};
};

struct AllocColorPlanesReply {
  uint16_t sequence{};
  uint32_t red_mask{};
  uint32_t green_mask{};
  uint32_t blue_mask{};
  std::vector<uint32_t> pixels{};
};

using AllocColorPlanesResponse = Response<AllocColorPlanesReply>;

struct FreeColorsRequest {
  ColorMap cmap{};
  uint32_t plane_mask{};
  std::vector<uint32_t> pixels{};
};

using FreeColorsResponse = Response<void>;

struct StoreColorsRequest {
  ColorMap cmap{};
  std::vector<ColorItem> items{};
};

using StoreColorsResponse = Response<void>;

struct StoreNamedColorRequest {
  ColorFlag flags{};
  ColorMap cmap{};
  uint32_t pixel{};
  std::string name{};
};

using StoreNamedColorResponse = Response<void>;

struct QueryColorsRequest {
  ColorMap cmap{};
  std::vector<uint32_t> pixels{};
};

struct QueryColorsReply {
  uint16_t sequence{};
  std::vector<Rgb> colors{};
};

using QueryColorsResponse = Response<QueryColorsReply>;

struct LookupColorRequest {
  ColorMap cmap{};
  std::string name{};
};

struct LookupColorReply {
  uint16_t sequence{};
  uint16_t exact_red{};
  uint16_t exact_green{};
  uint16_t exact_blue{};
  uint16_t visual_red{};
  uint16_t visual_green{};
  uint16_t visual_blue{};
};

using LookupColorResponse = Response<LookupColorReply>;

struct CreateCursorRequest {
  Cursor cid{};
  Pixmap source{};
  Pixmap mask{};
  uint16_t fore_red{};
  uint16_t fore_green{};
  uint16_t fore_blue{};
  uint16_t back_red{};
  uint16_t back_green{};
  uint16_t back_blue{};
  uint16_t x{};
  uint16_t y{};
};

using CreateCursorResponse = Response<void>;

struct CreateGlyphCursorRequest {
  Cursor cid{};
  Font source_font{};
  Font mask_font{};
  uint16_t source_char{};
  uint16_t mask_char{};
  uint16_t fore_red{};
  uint16_t fore_green{};
  uint16_t fore_blue{};
  uint16_t back_red{};
  uint16_t back_green{};
  uint16_t back_blue{};
};

using CreateGlyphCursorResponse = Response<void>;

struct FreeCursorRequest {
  Cursor cursor{};
};

using FreeCursorResponse = Response<void>;

struct RecolorCursorRequest {
  Cursor cursor{};
  uint16_t fore_red{};
  uint16_t fore_green{};
  uint16_t fore_blue{};
  uint16_t back_red{};
  uint16_t back_green{};
  uint16_t back_blue{};
};

using RecolorCursorResponse = Response<void>;

struct QueryBestSizeRequest {
  QueryShapeOf c_class{};
  Drawable drawable{};
  uint16_t width{};
  uint16_t height{};
};

struct QueryBestSizeReply {
  uint16_t sequence{};
  uint16_t width{};
  uint16_t height{};
};

using QueryBestSizeResponse = Response<QueryBestSizeReply>;

struct QueryExtensionRequest {
  std::string name{};
};

struct QueryExtensionReply {
  uint16_t sequence{};
  uint8_t present{};
  uint8_t major_opcode{};
  uint8_t first_event{};
  uint8_t first_error{};
};

using QueryExtensionResponse = Response<QueryExtensionReply>;

struct ListExtensionsRequest {};

struct ListExtensionsReply {
  uint16_t sequence{};
  std::vector<Str> names{};
};

using ListExtensionsResponse = Response<ListExtensionsReply>;

struct ChangeKeyboardMappingRequest {
  uint8_t keycode_count{};
  KeyCode first_keycode{};
  uint8_t keysyms_per_keycode{};
  std::vector<KeySym> keysyms{};
};

using ChangeKeyboardMappingResponse = Response<void>;

struct GetKeyboardMappingRequest {
  KeyCode first_keycode{};
  uint8_t count{};
};

struct GetKeyboardMappingReply {
  uint8_t keysyms_per_keycode{};
  uint16_t sequence{};
  std::vector<KeySym> keysyms{};
};

using GetKeyboardMappingResponse = Response<GetKeyboardMappingReply>;

struct ChangeKeyboardControlRequest {
  absl::optional<int32_t> key_click_percent{};
  absl::optional<int32_t> bell_percent{};
  absl::optional<int32_t> bell_pitch{};
  absl::optional<int32_t> bell_duration{};
  absl::optional<uint32_t> led{};
  absl::optional<LedMode> led_mode{};
  absl::optional<KeyCode32> key{};
  absl::optional<AutoRepeatMode> auto_repeat_mode{};
};

using ChangeKeyboardControlResponse = Response<void>;

struct GetKeyboardControlRequest {};

struct GetKeyboardControlReply {
  AutoRepeatMode global_auto_repeat{};
  uint16_t sequence{};
  uint32_t led_mask{};
  uint8_t key_click_percent{};
  uint8_t bell_percent{};
  uint16_t bell_pitch{};
  uint16_t bell_duration{};
  std::array<uint8_t, 32> auto_repeats{};
};

using GetKeyboardControlResponse = Response<GetKeyboardControlReply>;

struct BellRequest {
  int8_t percent{};
};

using BellResponse = Response<void>;

struct ChangePointerControlRequest {
  int16_t acceleration_numerator{};
  int16_t acceleration_denominator{};
  int16_t threshold{};
  uint8_t do_acceleration{};
  uint8_t do_threshold{};
};

using ChangePointerControlResponse = Response<void>;

struct GetPointerControlRequest {};

struct GetPointerControlReply {
  uint16_t sequence{};
  uint16_t acceleration_numerator{};
  uint16_t acceleration_denominator{};
  uint16_t threshold{};
};

using GetPointerControlResponse = Response<GetPointerControlReply>;

struct SetScreenSaverRequest {
  int16_t timeout{};
  int16_t interval{};
  Blanking prefer_blanking{};
  Exposures allow_exposures{};
};

using SetScreenSaverResponse = Response<void>;

struct GetScreenSaverRequest {};

struct GetScreenSaverReply {
  uint16_t sequence{};
  uint16_t timeout{};
  uint16_t interval{};
  Blanking prefer_blanking{};
  Exposures allow_exposures{};
};

using GetScreenSaverResponse = Response<GetScreenSaverReply>;

struct ChangeHostsRequest {
  HostMode mode{};
  Family family{};
  std::vector<uint8_t> address{};
};

using ChangeHostsResponse = Response<void>;

struct ListHostsRequest {};

struct ListHostsReply {
  AccessControl mode{};
  uint16_t sequence{};
  std::vector<Host> hosts{};
};

using ListHostsResponse = Response<ListHostsReply>;

struct SetAccessControlRequest {
  AccessControl mode{};
};

using SetAccessControlResponse = Response<void>;

struct SetCloseDownModeRequest {
  CloseDown mode{};
};

using SetCloseDownModeResponse = Response<void>;

struct KillClientRequest {
  uint32_t resource{};
};

using KillClientResponse = Response<void>;

struct RotatePropertiesRequest {
  Window window{};
  int16_t delta{};
  std::vector<Atom> atoms{};
};

using RotatePropertiesResponse = Response<void>;

struct ForceScreenSaverRequest {
  ScreenSaverMode mode{};
};

using ForceScreenSaverResponse = Response<void>;

struct SetPointerMappingRequest {
  std::vector<uint8_t> map{};
};

struct SetPointerMappingReply {
  MappingStatus status{};
  uint16_t sequence{};
};

using SetPointerMappingResponse = Response<SetPointerMappingReply>;

struct GetPointerMappingRequest {};

struct GetPointerMappingReply {
  uint16_t sequence{};
  std::vector<uint8_t> map{};
};

using GetPointerMappingResponse = Response<GetPointerMappingReply>;

struct SetModifierMappingRequest {
  uint8_t keycodes_per_modifier{};
  std::vector<KeyCode> keycodes{};
};

struct SetModifierMappingReply {
  MappingStatus status{};
  uint16_t sequence{};
};

using SetModifierMappingResponse = Response<SetModifierMappingReply>;

struct GetModifierMappingRequest {};

struct GetModifierMappingReply {
  uint8_t keycodes_per_modifier{};
  uint16_t sequence{};
  std::vector<KeyCode> keycodes{};
};

using GetModifierMappingResponse = Response<GetModifierMappingReply>;

struct NoOperationRequest {};

using NoOperationResponse = Response<void>;

class COMPONENT_EXPORT(X11) XProto {
 public:
  explicit XProto(Connection* connection);

  Connection* connection() const { return connection_; }

  Future<void> CreateWindow(const CreateWindowRequest& request);

  Future<void> CreateWindow(
      const uint8_t& depth = {},
      const Window& wid = {},
      const Window& parent = {},
      const int16_t& x = {},
      const int16_t& y = {},
      const uint16_t& width = {},
      const uint16_t& height = {},
      const uint16_t& border_width = {},
      const WindowClass& c_class = {},
      const VisualId& visual = {},
      const absl::optional<Pixmap>& background_pixmap = absl::nullopt,
      const absl::optional<uint32_t>& background_pixel = absl::nullopt,
      const absl::optional<Pixmap>& border_pixmap = absl::nullopt,
      const absl::optional<uint32_t>& border_pixel = absl::nullopt,
      const absl::optional<Gravity>& bit_gravity = absl::nullopt,
      const absl::optional<Gravity>& win_gravity = absl::nullopt,
      const absl::optional<BackingStore>& backing_store = absl::nullopt,
      const absl::optional<uint32_t>& backing_planes = absl::nullopt,
      const absl::optional<uint32_t>& backing_pixel = absl::nullopt,
      const absl::optional<Bool32>& override_redirect = absl::nullopt,
      const absl::optional<Bool32>& save_under = absl::nullopt,
      const absl::optional<EventMask>& event_mask = absl::nullopt,
      const absl::optional<EventMask>& do_not_propogate_mask = absl::nullopt,
      const absl::optional<ColorMap>& colormap = absl::nullopt,
      const absl::optional<Cursor>& cursor = absl::nullopt);

  Future<void> ChangeWindowAttributes(
      const ChangeWindowAttributesRequest& request);

  Future<void> ChangeWindowAttributes(
      const Window& window = {},
      const absl::optional<Pixmap>& background_pixmap = absl::nullopt,
      const absl::optional<uint32_t>& background_pixel = absl::nullopt,
      const absl::optional<Pixmap>& border_pixmap = absl::nullopt,
      const absl::optional<uint32_t>& border_pixel = absl::nullopt,
      const absl::optional<Gravity>& bit_gravity = absl::nullopt,
      const absl::optional<Gravity>& win_gravity = absl::nullopt,
      const absl::optional<BackingStore>& backing_store = absl::nullopt,
      const absl::optional<uint32_t>& backing_planes = absl::nullopt,
      const absl::optional<uint32_t>& backing_pixel = absl::nullopt,
      const absl::optional<Bool32>& override_redirect = absl::nullopt,
      const absl::optional<Bool32>& save_under = absl::nullopt,
      const absl::optional<EventMask>& event_mask = absl::nullopt,
      const absl::optional<EventMask>& do_not_propogate_mask = absl::nullopt,
      const absl::optional<ColorMap>& colormap = absl::nullopt,
      const absl::optional<Cursor>& cursor = absl::nullopt);

  Future<GetWindowAttributesReply> GetWindowAttributes(
      const GetWindowAttributesRequest& request);

  Future<GetWindowAttributesReply> GetWindowAttributes(
      const Window& window = {});

  Future<void> DestroyWindow(const DestroyWindowRequest& request);

  Future<void> DestroyWindow(const Window& window = {});

  Future<void> DestroySubwindows(const DestroySubwindowsRequest& request);

  Future<void> DestroySubwindows(const Window& window = {});

  Future<void> ChangeSaveSet(const ChangeSaveSetRequest& request);

  Future<void> ChangeSaveSet(const SetMode& mode = {},
                             const Window& window = {});

  Future<void> ReparentWindow(const ReparentWindowRequest& request);

  Future<void> ReparentWindow(const Window& window = {},
                              const Window& parent = {},
                              const int16_t& x = {},
                              const int16_t& y = {});

  Future<void> MapWindow(const MapWindowRequest& request);

  Future<void> MapWindow(const Window& window = {});

  Future<void> MapSubwindows(const MapSubwindowsRequest& request);

  Future<void> MapSubwindows(const Window& window = {});

  Future<void> UnmapWindow(const UnmapWindowRequest& request);

  Future<void> UnmapWindow(const Window& window = {});

  Future<void> UnmapSubwindows(const UnmapSubwindowsRequest& request);

  Future<void> UnmapSubwindows(const Window& window = {});

  Future<void> ConfigureWindow(const ConfigureWindowRequest& request);

  Future<void> ConfigureWindow(
      const Window& window = {},
      const absl::optional<int32_t>& x = absl::nullopt,
      const absl::optional<int32_t>& y = absl::nullopt,
      const absl::optional<uint32_t>& width = absl::nullopt,
      const absl::optional<uint32_t>& height = absl::nullopt,
      const absl::optional<uint32_t>& border_width = absl::nullopt,
      const absl::optional<Window>& sibling = absl::nullopt,
      const absl::optional<StackMode>& stack_mode = absl::nullopt);

  Future<void> CirculateWindow(const CirculateWindowRequest& request);

  Future<void> CirculateWindow(const Circulate& direction = {},
                               const Window& window = {});

  Future<GetGeometryReply> GetGeometry(const GetGeometryRequest& request);

  Future<GetGeometryReply> GetGeometry(const Drawable& drawable = {});

  Future<QueryTreeReply> QueryTree(const QueryTreeRequest& request);

  Future<QueryTreeReply> QueryTree(const Window& window = {});

  Future<InternAtomReply> InternAtom(const InternAtomRequest& request);

  Future<InternAtomReply> InternAtom(const uint8_t& only_if_exists = {},
                                     const std::string& name = {});

  Future<GetAtomNameReply> GetAtomName(const GetAtomNameRequest& request);

  Future<GetAtomNameReply> GetAtomName(const Atom& atom = {});

  Future<void> ChangeProperty(const ChangePropertyRequest& request);

  Future<void> ChangeProperty(
      const PropMode& mode = {},
      const Window& window = {},
      const Atom& property = {},
      const Atom& type = {},
      const uint8_t& format = {},
      const uint32_t& data_len = {},
      const scoped_refptr<base::RefCountedMemory>& data = {});

  Future<void> DeleteProperty(const DeletePropertyRequest& request);

  Future<void> DeleteProperty(const Window& window = {},
                              const Atom& property = {});

  Future<GetPropertyReply> GetProperty(const GetPropertyRequest& request);

  Future<GetPropertyReply> GetProperty(const uint8_t& c_delete = {},
                                       const Window& window = {},
                                       const Atom& property = {},
                                       const Atom& type = {},
                                       const uint32_t& long_offset = {},
                                       const uint32_t& long_length = {});

  Future<ListPropertiesReply> ListProperties(
      const ListPropertiesRequest& request);

  Future<ListPropertiesReply> ListProperties(const Window& window = {});

  Future<void> SetSelectionOwner(const SetSelectionOwnerRequest& request);

  Future<void> SetSelectionOwner(const Window& owner = {},
                                 const Atom& selection = {},
                                 const Time& time = {});

  Future<GetSelectionOwnerReply> GetSelectionOwner(
      const GetSelectionOwnerRequest& request);

  Future<GetSelectionOwnerReply> GetSelectionOwner(const Atom& selection = {});

  Future<void> ConvertSelection(const ConvertSelectionRequest& request);

  Future<void> ConvertSelection(const Window& requestor = {},
                                const Atom& selection = {},
                                const Atom& target = {},
                                const Atom& property = {},
                                const Time& time = {});

  Future<void> SendEvent(const SendEventRequest& request);

  Future<void> SendEvent(const uint8_t& propagate = {},
                         const Window& destination = {},
                         const EventMask& event_mask = {},
                         const std::array<char, 32>& event = {});

  Future<GrabPointerReply> GrabPointer(const GrabPointerRequest& request);

  Future<GrabPointerReply> GrabPointer(const uint8_t& owner_events = {},
                                       const Window& grab_window = {},
                                       const EventMask& event_mask = {},
                                       const GrabMode& pointer_mode = {},
                                       const GrabMode& keyboard_mode = {},
                                       const Window& confine_to = {},
                                       const Cursor& cursor = {},
                                       const Time& time = {});

  Future<void> UngrabPointer(const UngrabPointerRequest& request);

  Future<void> UngrabPointer(const Time& time = {});

  Future<void> GrabButton(const GrabButtonRequest& request);

  Future<void> GrabButton(const uint8_t& owner_events = {},
                          const Window& grab_window = {},
                          const EventMask& event_mask = {},
                          const GrabMode& pointer_mode = {},
                          const GrabMode& keyboard_mode = {},
                          const Window& confine_to = {},
                          const Cursor& cursor = {},
                          const ButtonIndex& button = {},
                          const ModMask& modifiers = {});

  Future<void> UngrabButton(const UngrabButtonRequest& request);

  Future<void> UngrabButton(const ButtonIndex& button = {},
                            const Window& grab_window = {},
                            const ModMask& modifiers = {});

  Future<void> ChangeActivePointerGrab(
      const ChangeActivePointerGrabRequest& request);

  Future<void> ChangeActivePointerGrab(const Cursor& cursor = {},
                                       const Time& time = {},
                                       const EventMask& event_mask = {});

  Future<GrabKeyboardReply> GrabKeyboard(const GrabKeyboardRequest& request);

  Future<GrabKeyboardReply> GrabKeyboard(const uint8_t& owner_events = {},
                                         const Window& grab_window = {},
                                         const Time& time = {},
                                         const GrabMode& pointer_mode = {},
                                         const GrabMode& keyboard_mode = {});

  Future<void> UngrabKeyboard(const UngrabKeyboardRequest& request);

  Future<void> UngrabKeyboard(const Time& time = {});

  Future<void> GrabKey(const GrabKeyRequest& request);

  Future<void> GrabKey(const uint8_t& owner_events = {},
                       const Window& grab_window = {},
                       const ModMask& modifiers = {},
                       const KeyCode& key = {},
                       const GrabMode& pointer_mode = {},
                       const GrabMode& keyboard_mode = {});

  Future<void> UngrabKey(const UngrabKeyRequest& request);

  Future<void> UngrabKey(const KeyCode& key = {},
                         const Window& grab_window = {},
                         const ModMask& modifiers = {});

  Future<void> AllowEvents(const AllowEventsRequest& request);

  Future<void> AllowEvents(const Allow& mode = {}, const Time& time = {});

  Future<void> GrabServer(const GrabServerRequest& request);

  Future<void> GrabServer();

  Future<void> UngrabServer(const UngrabServerRequest& request);

  Future<void> UngrabServer();

  Future<QueryPointerReply> QueryPointer(const QueryPointerRequest& request);

  Future<QueryPointerReply> QueryPointer(const Window& window = {});

  Future<GetMotionEventsReply> GetMotionEvents(
      const GetMotionEventsRequest& request);

  Future<GetMotionEventsReply> GetMotionEvents(const Window& window = {},
                                               const Time& start = {},
                                               const Time& stop = {});

  Future<TranslateCoordinatesReply> TranslateCoordinates(
      const TranslateCoordinatesRequest& request);

  Future<TranslateCoordinatesReply> TranslateCoordinates(
      const Window& src_window = {},
      const Window& dst_window = {},
      const int16_t& src_x = {},
      const int16_t& src_y = {});

  Future<void> WarpPointer(const WarpPointerRequest& request);

  Future<void> WarpPointer(const Window& src_window = {},
                           const Window& dst_window = {},
                           const int16_t& src_x = {},
                           const int16_t& src_y = {},
                           const uint16_t& src_width = {},
                           const uint16_t& src_height = {},
                           const int16_t& dst_x = {},
                           const int16_t& dst_y = {});

  Future<void> SetInputFocus(const SetInputFocusRequest& request);

  Future<void> SetInputFocus(const InputFocus& revert_to = {},
                             const Window& focus = {},
                             const Time& time = {});

  Future<GetInputFocusReply> GetInputFocus(const GetInputFocusRequest& request);

  Future<GetInputFocusReply> GetInputFocus();

  Future<QueryKeymapReply> QueryKeymap(const QueryKeymapRequest& request);

  Future<QueryKeymapReply> QueryKeymap();

  Future<void> OpenFont(const OpenFontRequest& request);

  Future<void> OpenFont(const Font& fid = {}, const std::string& name = {});

  Future<void> CloseFont(const CloseFontRequest& request);

  Future<void> CloseFont(const Font& font = {});

  Future<QueryFontReply> QueryFont(const QueryFontRequest& request);

  Future<QueryFontReply> QueryFont(const Fontable& font = {});

  Future<QueryTextExtentsReply> QueryTextExtents(
      const QueryTextExtentsRequest& request);

  Future<QueryTextExtentsReply> QueryTextExtents(
      const Fontable& font = {},
      const std::vector<Char16>& string = {});

  Future<ListFontsReply> ListFonts(const ListFontsRequest& request);

  Future<ListFontsReply> ListFonts(const uint16_t& max_names = {},
                                   const std::string& pattern = {});

  Future<ListFontsWithInfoReply> ListFontsWithInfo(
      const ListFontsWithInfoRequest& request);

  Future<ListFontsWithInfoReply> ListFontsWithInfo(
      const uint16_t& max_names = {},
      const std::string& pattern = {});

  Future<void> SetFontPath(const SetFontPathRequest& request);

  Future<void> SetFontPath(const std::vector<Str>& font = {});

  Future<GetFontPathReply> GetFontPath(const GetFontPathRequest& request);

  Future<GetFontPathReply> GetFontPath();

  Future<void> CreatePixmap(const CreatePixmapRequest& request);

  Future<void> CreatePixmap(const uint8_t& depth = {},
                            const Pixmap& pid = {},
                            const Drawable& drawable = {},
                            const uint16_t& width = {},
                            const uint16_t& height = {});

  Future<void> FreePixmap(const FreePixmapRequest& request);

  Future<void> FreePixmap(const Pixmap& pixmap = {});

  Future<void> CreateGC(const CreateGCRequest& request);

  Future<void> CreateGC(
      const GraphicsContext& cid = {},
      const Drawable& drawable = {},
      const absl::optional<Gx>& function = absl::nullopt,
      const absl::optional<uint32_t>& plane_mask = absl::nullopt,
      const absl::optional<uint32_t>& foreground = absl::nullopt,
      const absl::optional<uint32_t>& background = absl::nullopt,
      const absl::optional<uint32_t>& line_width = absl::nullopt,
      const absl::optional<LineStyle>& line_style = absl::nullopt,
      const absl::optional<CapStyle>& cap_style = absl::nullopt,
      const absl::optional<JoinStyle>& join_style = absl::nullopt,
      const absl::optional<FillStyle>& fill_style = absl::nullopt,
      const absl::optional<FillRule>& fill_rule = absl::nullopt,
      const absl::optional<Pixmap>& tile = absl::nullopt,
      const absl::optional<Pixmap>& stipple = absl::nullopt,
      const absl::optional<int32_t>& tile_stipple_x_origin = absl::nullopt,
      const absl::optional<int32_t>& tile_stipple_y_origin = absl::nullopt,
      const absl::optional<Font>& font = absl::nullopt,
      const absl::optional<SubwindowMode>& subwindow_mode = absl::nullopt,
      const absl::optional<Bool32>& graphics_exposures = absl::nullopt,
      const absl::optional<int32_t>& clip_x_origin = absl::nullopt,
      const absl::optional<int32_t>& clip_y_origin = absl::nullopt,
      const absl::optional<Pixmap>& clip_mask = absl::nullopt,
      const absl::optional<uint32_t>& dash_offset = absl::nullopt,
      const absl::optional<uint32_t>& dashes = absl::nullopt,
      const absl::optional<ArcMode>& arc_mode = absl::nullopt);

  Future<void> ChangeGC(const ChangeGCRequest& request);

  Future<void> ChangeGC(
      const GraphicsContext& gc = {},
      const absl::optional<Gx>& function = absl::nullopt,
      const absl::optional<uint32_t>& plane_mask = absl::nullopt,
      const absl::optional<uint32_t>& foreground = absl::nullopt,
      const absl::optional<uint32_t>& background = absl::nullopt,
      const absl::optional<uint32_t>& line_width = absl::nullopt,
      const absl::optional<LineStyle>& line_style = absl::nullopt,
      const absl::optional<CapStyle>& cap_style = absl::nullopt,
      const absl::optional<JoinStyle>& join_style = absl::nullopt,
      const absl::optional<FillStyle>& fill_style = absl::nullopt,
      const absl::optional<FillRule>& fill_rule = absl::nullopt,
      const absl::optional<Pixmap>& tile = absl::nullopt,
      const absl::optional<Pixmap>& stipple = absl::nullopt,
      const absl::optional<int32_t>& tile_stipple_x_origin = absl::nullopt,
      const absl::optional<int32_t>& tile_stipple_y_origin = absl::nullopt,
      const absl::optional<Font>& font = absl::nullopt,
      const absl::optional<SubwindowMode>& subwindow_mode = absl::nullopt,
      const absl::optional<Bool32>& graphics_exposures = absl::nullopt,
      const absl::optional<int32_t>& clip_x_origin = absl::nullopt,
      const absl::optional<int32_t>& clip_y_origin = absl::nullopt,
      const absl::optional<Pixmap>& clip_mask = absl::nullopt,
      const absl::optional<uint32_t>& dash_offset = absl::nullopt,
      const absl::optional<uint32_t>& dashes = absl::nullopt,
      const absl::optional<ArcMode>& arc_mode = absl::nullopt);

  Future<void> CopyGC(const CopyGCRequest& request);

  Future<void> CopyGC(const GraphicsContext& src_gc = {},
                      const GraphicsContext& dst_gc = {},
                      const GraphicsContextAttribute& value_mask = {});

  Future<void> SetDashes(const SetDashesRequest& request);

  Future<void> SetDashes(const GraphicsContext& gc = {},
                         const uint16_t& dash_offset = {},
                         const std::vector<uint8_t>& dashes = {});

  Future<void> SetClipRectangles(const SetClipRectanglesRequest& request);

  Future<void> SetClipRectangles(const ClipOrdering& ordering = {},
                                 const GraphicsContext& gc = {},
                                 const int16_t& clip_x_origin = {},
                                 const int16_t& clip_y_origin = {},
                                 const std::vector<Rectangle>& rectangles = {});

  Future<void> FreeGC(const FreeGCRequest& request);

  Future<void> FreeGC(const GraphicsContext& gc = {});

  Future<void> ClearArea(const ClearAreaRequest& request);

  Future<void> ClearArea(const uint8_t& exposures = {},
                         const Window& window = {},
                         const int16_t& x = {},
                         const int16_t& y = {},
                         const uint16_t& width = {},
                         const uint16_t& height = {});

  Future<void> CopyArea(const CopyAreaRequest& request);

  Future<void> CopyArea(const Drawable& src_drawable = {},
                        const Drawable& dst_drawable = {},
                        const GraphicsContext& gc = {},
                        const int16_t& src_x = {},
                        const int16_t& src_y = {},
                        const int16_t& dst_x = {},
                        const int16_t& dst_y = {},
                        const uint16_t& width = {},
                        const uint16_t& height = {});

  Future<void> CopyPlane(const CopyPlaneRequest& request);

  Future<void> CopyPlane(const Drawable& src_drawable = {},
                         const Drawable& dst_drawable = {},
                         const GraphicsContext& gc = {},
                         const int16_t& src_x = {},
                         const int16_t& src_y = {},
                         const int16_t& dst_x = {},
                         const int16_t& dst_y = {},
                         const uint16_t& width = {},
                         const uint16_t& height = {},
                         const uint32_t& bit_plane = {});

  Future<void> PolyPoint(const PolyPointRequest& request);

  Future<void> PolyPoint(const CoordMode& coordinate_mode = {},
                         const Drawable& drawable = {},
                         const GraphicsContext& gc = {},
                         const std::vector<Point>& points = {});

  Future<void> PolyLine(const PolyLineRequest& request);

  Future<void> PolyLine(const CoordMode& coordinate_mode = {},
                        const Drawable& drawable = {},
                        const GraphicsContext& gc = {},
                        const std::vector<Point>& points = {});

  Future<void> PolySegment(const PolySegmentRequest& request);

  Future<void> PolySegment(const Drawable& drawable = {},
                           const GraphicsContext& gc = {},
                           const std::vector<Segment>& segments = {});

  Future<void> PolyRectangle(const PolyRectangleRequest& request);

  Future<void> PolyRectangle(const Drawable& drawable = {},
                             const GraphicsContext& gc = {},
                             const std::vector<Rectangle>& rectangles = {});

  Future<void> PolyArc(const PolyArcRequest& request);

  Future<void> PolyArc(const Drawable& drawable = {},
                       const GraphicsContext& gc = {},
                       const std::vector<Arc>& arcs = {});

  Future<void> FillPoly(const FillPolyRequest& request);

  Future<void> FillPoly(const Drawable& drawable = {},
                        const GraphicsContext& gc = {},
                        const PolyShape& shape = {},
                        const CoordMode& coordinate_mode = {},
                        const std::vector<Point>& points = {});

  Future<void> PolyFillRectangle(const PolyFillRectangleRequest& request);

  Future<void> PolyFillRectangle(const Drawable& drawable = {},
                                 const GraphicsContext& gc = {},
                                 const std::vector<Rectangle>& rectangles = {});

  Future<void> PolyFillArc(const PolyFillArcRequest& request);

  Future<void> PolyFillArc(const Drawable& drawable = {},
                           const GraphicsContext& gc = {},
                           const std::vector<Arc>& arcs = {});

  Future<void> PutImage(const PutImageRequest& request);

  Future<void> PutImage(const ImageFormat& format = {},
                        const Drawable& drawable = {},
                        const GraphicsContext& gc = {},
                        const uint16_t& width = {},
                        const uint16_t& height = {},
                        const int16_t& dst_x = {},
                        const int16_t& dst_y = {},
                        const uint8_t& left_pad = {},
                        const uint8_t& depth = {},
                        const scoped_refptr<base::RefCountedMemory>& data = {});

  Future<GetImageReply> GetImage(const GetImageRequest& request);

  Future<GetImageReply> GetImage(const ImageFormat& format = {},
                                 const Drawable& drawable = {},
                                 const int16_t& x = {},
                                 const int16_t& y = {},
                                 const uint16_t& width = {},
                                 const uint16_t& height = {},
                                 const uint32_t& plane_mask = {});

  Future<void> PolyText8(const PolyText8Request& request);

  Future<void> PolyText8(const Drawable& drawable = {},
                         const GraphicsContext& gc = {},
                         const int16_t& x = {},
                         const int16_t& y = {},
                         const std::vector<uint8_t>& items = {});

  Future<void> PolyText16(const PolyText16Request& request);

  Future<void> PolyText16(const Drawable& drawable = {},
                          const GraphicsContext& gc = {},
                          const int16_t& x = {},
                          const int16_t& y = {},
                          const std::vector<uint8_t>& items = {});

  Future<void> ImageText8(const ImageText8Request& request);

  Future<void> ImageText8(const Drawable& drawable = {},
                          const GraphicsContext& gc = {},
                          const int16_t& x = {},
                          const int16_t& y = {},
                          const std::string& string = {});

  Future<void> ImageText16(const ImageText16Request& request);

  Future<void> ImageText16(const Drawable& drawable = {},
                           const GraphicsContext& gc = {},
                           const int16_t& x = {},
                           const int16_t& y = {},
                           const std::vector<Char16>& string = {});

  Future<void> CreateColormap(const CreateColormapRequest& request);

  Future<void> CreateColormap(const ColormapAlloc& alloc = {},
                              const ColorMap& mid = {},
                              const Window& window = {},
                              const VisualId& visual = {});

  Future<void> FreeColormap(const FreeColormapRequest& request);

  Future<void> FreeColormap(const ColorMap& cmap = {});

  Future<void> CopyColormapAndFree(const CopyColormapAndFreeRequest& request);

  Future<void> CopyColormapAndFree(const ColorMap& mid = {},
                                   const ColorMap& src_cmap = {});

  Future<void> InstallColormap(const InstallColormapRequest& request);

  Future<void> InstallColormap(const ColorMap& cmap = {});

  Future<void> UninstallColormap(const UninstallColormapRequest& request);

  Future<void> UninstallColormap(const ColorMap& cmap = {});

  Future<ListInstalledColormapsReply> ListInstalledColormaps(
      const ListInstalledColormapsRequest& request);

  Future<ListInstalledColormapsReply> ListInstalledColormaps(
      const Window& window = {});

  Future<AllocColorReply> AllocColor(const AllocColorRequest& request);

  Future<AllocColorReply> AllocColor(const ColorMap& cmap = {},
                                     const uint16_t& red = {},
                                     const uint16_t& green = {},
                                     const uint16_t& blue = {});

  Future<AllocNamedColorReply> AllocNamedColor(
      const AllocNamedColorRequest& request);

  Future<AllocNamedColorReply> AllocNamedColor(const ColorMap& cmap = {},
                                               const std::string& name = {});

  Future<AllocColorCellsReply> AllocColorCells(
      const AllocColorCellsRequest& request);

  Future<AllocColorCellsReply> AllocColorCells(const uint8_t& contiguous = {},
                                               const ColorMap& cmap = {},
                                               const uint16_t& colors = {},
                                               const uint16_t& planes = {});

  Future<AllocColorPlanesReply> AllocColorPlanes(
      const AllocColorPlanesRequest& request);

  Future<AllocColorPlanesReply> AllocColorPlanes(const uint8_t& contiguous = {},
                                                 const ColorMap& cmap = {},
                                                 const uint16_t& colors = {},
                                                 const uint16_t& reds = {},
                                                 const uint16_t& greens = {},
                                                 const uint16_t& blues = {});

  Future<void> FreeColors(const FreeColorsRequest& request);

  Future<void> FreeColors(const ColorMap& cmap = {},
                          const uint32_t& plane_mask = {},
                          const std::vector<uint32_t>& pixels = {});

  Future<void> StoreColors(const StoreColorsRequest& request);

  Future<void> StoreColors(const ColorMap& cmap = {},
                           const std::vector<ColorItem>& items = {});

  Future<void> StoreNamedColor(const StoreNamedColorRequest& request);

  Future<void> StoreNamedColor(const ColorFlag& flags = {},
                               const ColorMap& cmap = {},
                               const uint32_t& pixel = {},
                               const std::string& name = {});

  Future<QueryColorsReply> QueryColors(const QueryColorsRequest& request);

  Future<QueryColorsReply> QueryColors(
      const ColorMap& cmap = {},
      const std::vector<uint32_t>& pixels = {});

  Future<LookupColorReply> LookupColor(const LookupColorRequest& request);

  Future<LookupColorReply> LookupColor(const ColorMap& cmap = {},
                                       const std::string& name = {});

  Future<void> CreateCursor(const CreateCursorRequest& request);

  Future<void> CreateCursor(const Cursor& cid = {},
                            const Pixmap& source = {},
                            const Pixmap& mask = {},
                            const uint16_t& fore_red = {},
                            const uint16_t& fore_green = {},
                            const uint16_t& fore_blue = {},
                            const uint16_t& back_red = {},
                            const uint16_t& back_green = {},
                            const uint16_t& back_blue = {},
                            const uint16_t& x = {},
                            const uint16_t& y = {});

  Future<void> CreateGlyphCursor(const CreateGlyphCursorRequest& request);

  Future<void> CreateGlyphCursor(const Cursor& cid = {},
                                 const Font& source_font = {},
                                 const Font& mask_font = {},
                                 const uint16_t& source_char = {},
                                 const uint16_t& mask_char = {},
                                 const uint16_t& fore_red = {},
                                 const uint16_t& fore_green = {},
                                 const uint16_t& fore_blue = {},
                                 const uint16_t& back_red = {},
                                 const uint16_t& back_green = {},
                                 const uint16_t& back_blue = {});

  Future<void> FreeCursor(const FreeCursorRequest& request);

  Future<void> FreeCursor(const Cursor& cursor = {});

  Future<void> RecolorCursor(const RecolorCursorRequest& request);

  Future<void> RecolorCursor(const Cursor& cursor = {},
                             const uint16_t& fore_red = {},
                             const uint16_t& fore_green = {},
                             const uint16_t& fore_blue = {},
                             const uint16_t& back_red = {},
                             const uint16_t& back_green = {},
                             const uint16_t& back_blue = {});

  Future<QueryBestSizeReply> QueryBestSize(const QueryBestSizeRequest& request);

  Future<QueryBestSizeReply> QueryBestSize(const QueryShapeOf& c_class = {},
                                           const Drawable& drawable = {},
                                           const uint16_t& width = {},
                                           const uint16_t& height = {});

  Future<QueryExtensionReply> QueryExtension(
      const QueryExtensionRequest& request);

  Future<QueryExtensionReply> QueryExtension(const std::string& name = {});

  Future<ListExtensionsReply> ListExtensions(
      const ListExtensionsRequest& request);

  Future<ListExtensionsReply> ListExtensions();

  Future<void> ChangeKeyboardMapping(
      const ChangeKeyboardMappingRequest& request);

  Future<void> ChangeKeyboardMapping(const uint8_t& keycode_count = {},
                                     const KeyCode& first_keycode = {},
                                     const uint8_t& keysyms_per_keycode = {},
                                     const std::vector<KeySym>& keysyms = {});

  Future<GetKeyboardMappingReply> GetKeyboardMapping(
      const GetKeyboardMappingRequest& request);

  Future<GetKeyboardMappingReply> GetKeyboardMapping(
      const KeyCode& first_keycode = {},
      const uint8_t& count = {});

  Future<void> ChangeKeyboardControl(
      const ChangeKeyboardControlRequest& request);

  Future<void> ChangeKeyboardControl(
      const absl::optional<int32_t>& key_click_percent = absl::nullopt,
      const absl::optional<int32_t>& bell_percent = absl::nullopt,
      const absl::optional<int32_t>& bell_pitch = absl::nullopt,
      const absl::optional<int32_t>& bell_duration = absl::nullopt,
      const absl::optional<uint32_t>& led = absl::nullopt,
      const absl::optional<LedMode>& led_mode = absl::nullopt,
      const absl::optional<KeyCode32>& key = absl::nullopt,
      const absl::optional<AutoRepeatMode>& auto_repeat_mode = absl::nullopt);

  Future<GetKeyboardControlReply> GetKeyboardControl(
      const GetKeyboardControlRequest& request);

  Future<GetKeyboardControlReply> GetKeyboardControl();

  Future<void> Bell(const BellRequest& request);

  Future<void> Bell(const int8_t& percent = {});

  Future<void> ChangePointerControl(const ChangePointerControlRequest& request);

  Future<void> ChangePointerControl(
      const int16_t& acceleration_numerator = {},
      const int16_t& acceleration_denominator = {},
      const int16_t& threshold = {},
      const uint8_t& do_acceleration = {},
      const uint8_t& do_threshold = {});

  Future<GetPointerControlReply> GetPointerControl(
      const GetPointerControlRequest& request);

  Future<GetPointerControlReply> GetPointerControl();

  Future<void> SetScreenSaver(const SetScreenSaverRequest& request);

  Future<void> SetScreenSaver(const int16_t& timeout = {},
                              const int16_t& interval = {},
                              const Blanking& prefer_blanking = {},
                              const Exposures& allow_exposures = {});

  Future<GetScreenSaverReply> GetScreenSaver(
      const GetScreenSaverRequest& request);

  Future<GetScreenSaverReply> GetScreenSaver();

  Future<void> ChangeHosts(const ChangeHostsRequest& request);

  Future<void> ChangeHosts(const HostMode& mode = {},
                           const Family& family = {},
                           const std::vector<uint8_t>& address = {});

  Future<ListHostsReply> ListHosts(const ListHostsRequest& request);

  Future<ListHostsReply> ListHosts();

  Future<void> SetAccessControl(const SetAccessControlRequest& request);

  Future<void> SetAccessControl(const AccessControl& mode = {});

  Future<void> SetCloseDownMode(const SetCloseDownModeRequest& request);

  Future<void> SetCloseDownMode(const CloseDown& mode = {});

  Future<void> KillClient(const KillClientRequest& request);

  Future<void> KillClient(const uint32_t& resource = {});

  Future<void> RotateProperties(const RotatePropertiesRequest& request);

  Future<void> RotateProperties(const Window& window = {},
                                const int16_t& delta = {},
                                const std::vector<Atom>& atoms = {});

  Future<void> ForceScreenSaver(const ForceScreenSaverRequest& request);

  Future<void> ForceScreenSaver(const ScreenSaverMode& mode = {});

  Future<SetPointerMappingReply> SetPointerMapping(
      const SetPointerMappingRequest& request);

  Future<SetPointerMappingReply> SetPointerMapping(
      const std::vector<uint8_t>& map = {});

  Future<GetPointerMappingReply> GetPointerMapping(
      const GetPointerMappingRequest& request);

  Future<GetPointerMappingReply> GetPointerMapping();

  Future<SetModifierMappingReply> SetModifierMapping(
      const SetModifierMappingRequest& request);

  Future<SetModifierMappingReply> SetModifierMapping(
      const uint8_t& keycodes_per_modifier = {},
      const std::vector<KeyCode>& keycodes = {});

  Future<GetModifierMappingReply> GetModifierMapping(
      const GetModifierMappingRequest& request);

  Future<GetModifierMappingReply> GetModifierMapping();

  Future<void> NoOperation(const NoOperationRequest& request);

  Future<void> NoOperation();

 private:
  Connection* const connection_;
};

}  // namespace x11

inline constexpr x11::VisualClass operator|(x11::VisualClass l,
                                            x11::VisualClass r) {
  using T = std::underlying_type_t<x11::VisualClass>;
  return static_cast<x11::VisualClass>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::VisualClass operator&(x11::VisualClass l,
                                            x11::VisualClass r) {
  using T = std::underlying_type_t<x11::VisualClass>;
  return static_cast<x11::VisualClass>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::EventMask operator|(x11::EventMask l, x11::EventMask r) {
  using T = std::underlying_type_t<x11::EventMask>;
  return static_cast<x11::EventMask>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::EventMask operator&(x11::EventMask l, x11::EventMask r) {
  using T = std::underlying_type_t<x11::EventMask>;
  return static_cast<x11::EventMask>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::BackingStore operator|(x11::BackingStore l,
                                             x11::BackingStore r) {
  using T = std::underlying_type_t<x11::BackingStore>;
  return static_cast<x11::BackingStore>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::BackingStore operator&(x11::BackingStore l,
                                             x11::BackingStore r) {
  using T = std::underlying_type_t<x11::BackingStore>;
  return static_cast<x11::BackingStore>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::ImageOrder operator|(x11::ImageOrder l,
                                           x11::ImageOrder r) {
  using T = std::underlying_type_t<x11::ImageOrder>;
  return static_cast<x11::ImageOrder>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::ImageOrder operator&(x11::ImageOrder l,
                                           x11::ImageOrder r) {
  using T = std::underlying_type_t<x11::ImageOrder>;
  return static_cast<x11::ImageOrder>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::ModMask operator|(x11::ModMask l, x11::ModMask r) {
  using T = std::underlying_type_t<x11::ModMask>;
  return static_cast<x11::ModMask>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::ModMask operator&(x11::ModMask l, x11::ModMask r) {
  using T = std::underlying_type_t<x11::ModMask>;
  return static_cast<x11::ModMask>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::KeyButMask operator|(x11::KeyButMask l,
                                           x11::KeyButMask r) {
  using T = std::underlying_type_t<x11::KeyButMask>;
  return static_cast<x11::KeyButMask>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::KeyButMask operator&(x11::KeyButMask l,
                                           x11::KeyButMask r) {
  using T = std::underlying_type_t<x11::KeyButMask>;
  return static_cast<x11::KeyButMask>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::Window operator|(x11::Window l, x11::Window r) {
  using T = std::underlying_type_t<x11::Window>;
  return static_cast<x11::Window>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::Window operator&(x11::Window l, x11::Window r) {
  using T = std::underlying_type_t<x11::Window>;
  return static_cast<x11::Window>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::ButtonMask operator|(x11::ButtonMask l,
                                           x11::ButtonMask r) {
  using T = std::underlying_type_t<x11::ButtonMask>;
  return static_cast<x11::ButtonMask>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::ButtonMask operator&(x11::ButtonMask l,
                                           x11::ButtonMask r) {
  using T = std::underlying_type_t<x11::ButtonMask>;
  return static_cast<x11::ButtonMask>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::Motion operator|(x11::Motion l, x11::Motion r) {
  using T = std::underlying_type_t<x11::Motion>;
  return static_cast<x11::Motion>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::Motion operator&(x11::Motion l, x11::Motion r) {
  using T = std::underlying_type_t<x11::Motion>;
  return static_cast<x11::Motion>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::NotifyDetail operator|(x11::NotifyDetail l,
                                             x11::NotifyDetail r) {
  using T = std::underlying_type_t<x11::NotifyDetail>;
  return static_cast<x11::NotifyDetail>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::NotifyDetail operator&(x11::NotifyDetail l,
                                             x11::NotifyDetail r) {
  using T = std::underlying_type_t<x11::NotifyDetail>;
  return static_cast<x11::NotifyDetail>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::NotifyMode operator|(x11::NotifyMode l,
                                           x11::NotifyMode r) {
  using T = std::underlying_type_t<x11::NotifyMode>;
  return static_cast<x11::NotifyMode>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::NotifyMode operator&(x11::NotifyMode l,
                                           x11::NotifyMode r) {
  using T = std::underlying_type_t<x11::NotifyMode>;
  return static_cast<x11::NotifyMode>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::Visibility operator|(x11::Visibility l,
                                           x11::Visibility r) {
  using T = std::underlying_type_t<x11::Visibility>;
  return static_cast<x11::Visibility>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::Visibility operator&(x11::Visibility l,
                                           x11::Visibility r) {
  using T = std::underlying_type_t<x11::Visibility>;
  return static_cast<x11::Visibility>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::Place operator|(x11::Place l, x11::Place r) {
  using T = std::underlying_type_t<x11::Place>;
  return static_cast<x11::Place>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::Place operator&(x11::Place l, x11::Place r) {
  using T = std::underlying_type_t<x11::Place>;
  return static_cast<x11::Place>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::Property operator|(x11::Property l, x11::Property r) {
  using T = std::underlying_type_t<x11::Property>;
  return static_cast<x11::Property>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::Property operator&(x11::Property l, x11::Property r) {
  using T = std::underlying_type_t<x11::Property>;
  return static_cast<x11::Property>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::Time operator|(x11::Time l, x11::Time r) {
  using T = std::underlying_type_t<x11::Time>;
  return static_cast<x11::Time>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::Time operator&(x11::Time l, x11::Time r) {
  using T = std::underlying_type_t<x11::Time>;
  return static_cast<x11::Time>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::Atom operator|(x11::Atom l, x11::Atom r) {
  using T = std::underlying_type_t<x11::Atom>;
  return static_cast<x11::Atom>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::Atom operator&(x11::Atom l, x11::Atom r) {
  using T = std::underlying_type_t<x11::Atom>;
  return static_cast<x11::Atom>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::ColormapState operator|(x11::ColormapState l,
                                              x11::ColormapState r) {
  using T = std::underlying_type_t<x11::ColormapState>;
  return static_cast<x11::ColormapState>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::ColormapState operator&(x11::ColormapState l,
                                              x11::ColormapState r) {
  using T = std::underlying_type_t<x11::ColormapState>;
  return static_cast<x11::ColormapState>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::Colormap operator|(x11::Colormap l, x11::Colormap r) {
  using T = std::underlying_type_t<x11::Colormap>;
  return static_cast<x11::Colormap>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::Colormap operator&(x11::Colormap l, x11::Colormap r) {
  using T = std::underlying_type_t<x11::Colormap>;
  return static_cast<x11::Colormap>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::Mapping operator|(x11::Mapping l, x11::Mapping r) {
  using T = std::underlying_type_t<x11::Mapping>;
  return static_cast<x11::Mapping>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::Mapping operator&(x11::Mapping l, x11::Mapping r) {
  using T = std::underlying_type_t<x11::Mapping>;
  return static_cast<x11::Mapping>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::WindowClass operator|(x11::WindowClass l,
                                            x11::WindowClass r) {
  using T = std::underlying_type_t<x11::WindowClass>;
  return static_cast<x11::WindowClass>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::WindowClass operator&(x11::WindowClass l,
                                            x11::WindowClass r) {
  using T = std::underlying_type_t<x11::WindowClass>;
  return static_cast<x11::WindowClass>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::CreateWindowAttribute operator|(
    x11::CreateWindowAttribute l,
    x11::CreateWindowAttribute r) {
  using T = std::underlying_type_t<x11::CreateWindowAttribute>;
  return static_cast<x11::CreateWindowAttribute>(static_cast<T>(l) |
                                                 static_cast<T>(r));
}

inline constexpr x11::CreateWindowAttribute operator&(
    x11::CreateWindowAttribute l,
    x11::CreateWindowAttribute r) {
  using T = std::underlying_type_t<x11::CreateWindowAttribute>;
  return static_cast<x11::CreateWindowAttribute>(static_cast<T>(l) &
                                                 static_cast<T>(r));
}

inline constexpr x11::BackPixmap operator|(x11::BackPixmap l,
                                           x11::BackPixmap r) {
  using T = std::underlying_type_t<x11::BackPixmap>;
  return static_cast<x11::BackPixmap>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::BackPixmap operator&(x11::BackPixmap l,
                                           x11::BackPixmap r) {
  using T = std::underlying_type_t<x11::BackPixmap>;
  return static_cast<x11::BackPixmap>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::Gravity operator|(x11::Gravity l, x11::Gravity r) {
  using T = std::underlying_type_t<x11::Gravity>;
  return static_cast<x11::Gravity>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::Gravity operator&(x11::Gravity l, x11::Gravity r) {
  using T = std::underlying_type_t<x11::Gravity>;
  return static_cast<x11::Gravity>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::MapState operator|(x11::MapState l, x11::MapState r) {
  using T = std::underlying_type_t<x11::MapState>;
  return static_cast<x11::MapState>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::MapState operator&(x11::MapState l, x11::MapState r) {
  using T = std::underlying_type_t<x11::MapState>;
  return static_cast<x11::MapState>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::SetMode operator|(x11::SetMode l, x11::SetMode r) {
  using T = std::underlying_type_t<x11::SetMode>;
  return static_cast<x11::SetMode>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::SetMode operator&(x11::SetMode l, x11::SetMode r) {
  using T = std::underlying_type_t<x11::SetMode>;
  return static_cast<x11::SetMode>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::ConfigWindow operator|(x11::ConfigWindow l,
                                             x11::ConfigWindow r) {
  using T = std::underlying_type_t<x11::ConfigWindow>;
  return static_cast<x11::ConfigWindow>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::ConfigWindow operator&(x11::ConfigWindow l,
                                             x11::ConfigWindow r) {
  using T = std::underlying_type_t<x11::ConfigWindow>;
  return static_cast<x11::ConfigWindow>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::StackMode operator|(x11::StackMode l, x11::StackMode r) {
  using T = std::underlying_type_t<x11::StackMode>;
  return static_cast<x11::StackMode>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::StackMode operator&(x11::StackMode l, x11::StackMode r) {
  using T = std::underlying_type_t<x11::StackMode>;
  return static_cast<x11::StackMode>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::Circulate operator|(x11::Circulate l, x11::Circulate r) {
  using T = std::underlying_type_t<x11::Circulate>;
  return static_cast<x11::Circulate>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::Circulate operator&(x11::Circulate l, x11::Circulate r) {
  using T = std::underlying_type_t<x11::Circulate>;
  return static_cast<x11::Circulate>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::PropMode operator|(x11::PropMode l, x11::PropMode r) {
  using T = std::underlying_type_t<x11::PropMode>;
  return static_cast<x11::PropMode>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::PropMode operator&(x11::PropMode l, x11::PropMode r) {
  using T = std::underlying_type_t<x11::PropMode>;
  return static_cast<x11::PropMode>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::GetPropertyType operator|(x11::GetPropertyType l,
                                                x11::GetPropertyType r) {
  using T = std::underlying_type_t<x11::GetPropertyType>;
  return static_cast<x11::GetPropertyType>(static_cast<T>(l) |
                                           static_cast<T>(r));
}

inline constexpr x11::GetPropertyType operator&(x11::GetPropertyType l,
                                                x11::GetPropertyType r) {
  using T = std::underlying_type_t<x11::GetPropertyType>;
  return static_cast<x11::GetPropertyType>(static_cast<T>(l) &
                                           static_cast<T>(r));
}

inline constexpr x11::SendEventDest operator|(x11::SendEventDest l,
                                              x11::SendEventDest r) {
  using T = std::underlying_type_t<x11::SendEventDest>;
  return static_cast<x11::SendEventDest>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::SendEventDest operator&(x11::SendEventDest l,
                                              x11::SendEventDest r) {
  using T = std::underlying_type_t<x11::SendEventDest>;
  return static_cast<x11::SendEventDest>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::GrabMode operator|(x11::GrabMode l, x11::GrabMode r) {
  using T = std::underlying_type_t<x11::GrabMode>;
  return static_cast<x11::GrabMode>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::GrabMode operator&(x11::GrabMode l, x11::GrabMode r) {
  using T = std::underlying_type_t<x11::GrabMode>;
  return static_cast<x11::GrabMode>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::GrabStatus operator|(x11::GrabStatus l,
                                           x11::GrabStatus r) {
  using T = std::underlying_type_t<x11::GrabStatus>;
  return static_cast<x11::GrabStatus>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::GrabStatus operator&(x11::GrabStatus l,
                                           x11::GrabStatus r) {
  using T = std::underlying_type_t<x11::GrabStatus>;
  return static_cast<x11::GrabStatus>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::Cursor operator|(x11::Cursor l, x11::Cursor r) {
  using T = std::underlying_type_t<x11::Cursor>;
  return static_cast<x11::Cursor>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::Cursor operator&(x11::Cursor l, x11::Cursor r) {
  using T = std::underlying_type_t<x11::Cursor>;
  return static_cast<x11::Cursor>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::ButtonIndex operator|(x11::ButtonIndex l,
                                            x11::ButtonIndex r) {
  using T = std::underlying_type_t<x11::ButtonIndex>;
  return static_cast<x11::ButtonIndex>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::ButtonIndex operator&(x11::ButtonIndex l,
                                            x11::ButtonIndex r) {
  using T = std::underlying_type_t<x11::ButtonIndex>;
  return static_cast<x11::ButtonIndex>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::Grab operator|(x11::Grab l, x11::Grab r) {
  using T = std::underlying_type_t<x11::Grab>;
  return static_cast<x11::Grab>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::Grab operator&(x11::Grab l, x11::Grab r) {
  using T = std::underlying_type_t<x11::Grab>;
  return static_cast<x11::Grab>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::Allow operator|(x11::Allow l, x11::Allow r) {
  using T = std::underlying_type_t<x11::Allow>;
  return static_cast<x11::Allow>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::Allow operator&(x11::Allow l, x11::Allow r) {
  using T = std::underlying_type_t<x11::Allow>;
  return static_cast<x11::Allow>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::InputFocus operator|(x11::InputFocus l,
                                           x11::InputFocus r) {
  using T = std::underlying_type_t<x11::InputFocus>;
  return static_cast<x11::InputFocus>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::InputFocus operator&(x11::InputFocus l,
                                           x11::InputFocus r) {
  using T = std::underlying_type_t<x11::InputFocus>;
  return static_cast<x11::InputFocus>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::FontDraw operator|(x11::FontDraw l, x11::FontDraw r) {
  using T = std::underlying_type_t<x11::FontDraw>;
  return static_cast<x11::FontDraw>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::FontDraw operator&(x11::FontDraw l, x11::FontDraw r) {
  using T = std::underlying_type_t<x11::FontDraw>;
  return static_cast<x11::FontDraw>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::GraphicsContextAttribute operator|(
    x11::GraphicsContextAttribute l,
    x11::GraphicsContextAttribute r) {
  using T = std::underlying_type_t<x11::GraphicsContextAttribute>;
  return static_cast<x11::GraphicsContextAttribute>(static_cast<T>(l) |
                                                    static_cast<T>(r));
}

inline constexpr x11::GraphicsContextAttribute operator&(
    x11::GraphicsContextAttribute l,
    x11::GraphicsContextAttribute r) {
  using T = std::underlying_type_t<x11::GraphicsContextAttribute>;
  return static_cast<x11::GraphicsContextAttribute>(static_cast<T>(l) &
                                                    static_cast<T>(r));
}

inline constexpr x11::Gx operator|(x11::Gx l, x11::Gx r) {
  using T = std::underlying_type_t<x11::Gx>;
  return static_cast<x11::Gx>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::Gx operator&(x11::Gx l, x11::Gx r) {
  using T = std::underlying_type_t<x11::Gx>;
  return static_cast<x11::Gx>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::LineStyle operator|(x11::LineStyle l, x11::LineStyle r) {
  using T = std::underlying_type_t<x11::LineStyle>;
  return static_cast<x11::LineStyle>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::LineStyle operator&(x11::LineStyle l, x11::LineStyle r) {
  using T = std::underlying_type_t<x11::LineStyle>;
  return static_cast<x11::LineStyle>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::CapStyle operator|(x11::CapStyle l, x11::CapStyle r) {
  using T = std::underlying_type_t<x11::CapStyle>;
  return static_cast<x11::CapStyle>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::CapStyle operator&(x11::CapStyle l, x11::CapStyle r) {
  using T = std::underlying_type_t<x11::CapStyle>;
  return static_cast<x11::CapStyle>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::JoinStyle operator|(x11::JoinStyle l, x11::JoinStyle r) {
  using T = std::underlying_type_t<x11::JoinStyle>;
  return static_cast<x11::JoinStyle>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::JoinStyle operator&(x11::JoinStyle l, x11::JoinStyle r) {
  using T = std::underlying_type_t<x11::JoinStyle>;
  return static_cast<x11::JoinStyle>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::FillStyle operator|(x11::FillStyle l, x11::FillStyle r) {
  using T = std::underlying_type_t<x11::FillStyle>;
  return static_cast<x11::FillStyle>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::FillStyle operator&(x11::FillStyle l, x11::FillStyle r) {
  using T = std::underlying_type_t<x11::FillStyle>;
  return static_cast<x11::FillStyle>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::FillRule operator|(x11::FillRule l, x11::FillRule r) {
  using T = std::underlying_type_t<x11::FillRule>;
  return static_cast<x11::FillRule>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::FillRule operator&(x11::FillRule l, x11::FillRule r) {
  using T = std::underlying_type_t<x11::FillRule>;
  return static_cast<x11::FillRule>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::SubwindowMode operator|(x11::SubwindowMode l,
                                              x11::SubwindowMode r) {
  using T = std::underlying_type_t<x11::SubwindowMode>;
  return static_cast<x11::SubwindowMode>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::SubwindowMode operator&(x11::SubwindowMode l,
                                              x11::SubwindowMode r) {
  using T = std::underlying_type_t<x11::SubwindowMode>;
  return static_cast<x11::SubwindowMode>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::ArcMode operator|(x11::ArcMode l, x11::ArcMode r) {
  using T = std::underlying_type_t<x11::ArcMode>;
  return static_cast<x11::ArcMode>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::ArcMode operator&(x11::ArcMode l, x11::ArcMode r) {
  using T = std::underlying_type_t<x11::ArcMode>;
  return static_cast<x11::ArcMode>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::ClipOrdering operator|(x11::ClipOrdering l,
                                             x11::ClipOrdering r) {
  using T = std::underlying_type_t<x11::ClipOrdering>;
  return static_cast<x11::ClipOrdering>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::ClipOrdering operator&(x11::ClipOrdering l,
                                             x11::ClipOrdering r) {
  using T = std::underlying_type_t<x11::ClipOrdering>;
  return static_cast<x11::ClipOrdering>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::CoordMode operator|(x11::CoordMode l, x11::CoordMode r) {
  using T = std::underlying_type_t<x11::CoordMode>;
  return static_cast<x11::CoordMode>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::CoordMode operator&(x11::CoordMode l, x11::CoordMode r) {
  using T = std::underlying_type_t<x11::CoordMode>;
  return static_cast<x11::CoordMode>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::PolyShape operator|(x11::PolyShape l, x11::PolyShape r) {
  using T = std::underlying_type_t<x11::PolyShape>;
  return static_cast<x11::PolyShape>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::PolyShape operator&(x11::PolyShape l, x11::PolyShape r) {
  using T = std::underlying_type_t<x11::PolyShape>;
  return static_cast<x11::PolyShape>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::ImageFormat operator|(x11::ImageFormat l,
                                            x11::ImageFormat r) {
  using T = std::underlying_type_t<x11::ImageFormat>;
  return static_cast<x11::ImageFormat>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::ImageFormat operator&(x11::ImageFormat l,
                                            x11::ImageFormat r) {
  using T = std::underlying_type_t<x11::ImageFormat>;
  return static_cast<x11::ImageFormat>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::ColormapAlloc operator|(x11::ColormapAlloc l,
                                              x11::ColormapAlloc r) {
  using T = std::underlying_type_t<x11::ColormapAlloc>;
  return static_cast<x11::ColormapAlloc>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::ColormapAlloc operator&(x11::ColormapAlloc l,
                                              x11::ColormapAlloc r) {
  using T = std::underlying_type_t<x11::ColormapAlloc>;
  return static_cast<x11::ColormapAlloc>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::ColorFlag operator|(x11::ColorFlag l, x11::ColorFlag r) {
  using T = std::underlying_type_t<x11::ColorFlag>;
  return static_cast<x11::ColorFlag>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::ColorFlag operator&(x11::ColorFlag l, x11::ColorFlag r) {
  using T = std::underlying_type_t<x11::ColorFlag>;
  return static_cast<x11::ColorFlag>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::Pixmap operator|(x11::Pixmap l, x11::Pixmap r) {
  using T = std::underlying_type_t<x11::Pixmap>;
  return static_cast<x11::Pixmap>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::Pixmap operator&(x11::Pixmap l, x11::Pixmap r) {
  using T = std::underlying_type_t<x11::Pixmap>;
  return static_cast<x11::Pixmap>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::Font operator|(x11::Font l, x11::Font r) {
  using T = std::underlying_type_t<x11::Font>;
  return static_cast<x11::Font>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::Font operator&(x11::Font l, x11::Font r) {
  using T = std::underlying_type_t<x11::Font>;
  return static_cast<x11::Font>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::QueryShapeOf operator|(x11::QueryShapeOf l,
                                             x11::QueryShapeOf r) {
  using T = std::underlying_type_t<x11::QueryShapeOf>;
  return static_cast<x11::QueryShapeOf>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::QueryShapeOf operator&(x11::QueryShapeOf l,
                                             x11::QueryShapeOf r) {
  using T = std::underlying_type_t<x11::QueryShapeOf>;
  return static_cast<x11::QueryShapeOf>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::Keyboard operator|(x11::Keyboard l, x11::Keyboard r) {
  using T = std::underlying_type_t<x11::Keyboard>;
  return static_cast<x11::Keyboard>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::Keyboard operator&(x11::Keyboard l, x11::Keyboard r) {
  using T = std::underlying_type_t<x11::Keyboard>;
  return static_cast<x11::Keyboard>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::LedMode operator|(x11::LedMode l, x11::LedMode r) {
  using T = std::underlying_type_t<x11::LedMode>;
  return static_cast<x11::LedMode>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::LedMode operator&(x11::LedMode l, x11::LedMode r) {
  using T = std::underlying_type_t<x11::LedMode>;
  return static_cast<x11::LedMode>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::AutoRepeatMode operator|(x11::AutoRepeatMode l,
                                               x11::AutoRepeatMode r) {
  using T = std::underlying_type_t<x11::AutoRepeatMode>;
  return static_cast<x11::AutoRepeatMode>(static_cast<T>(l) |
                                          static_cast<T>(r));
}

inline constexpr x11::AutoRepeatMode operator&(x11::AutoRepeatMode l,
                                               x11::AutoRepeatMode r) {
  using T = std::underlying_type_t<x11::AutoRepeatMode>;
  return static_cast<x11::AutoRepeatMode>(static_cast<T>(l) &
                                          static_cast<T>(r));
}

inline constexpr x11::Blanking operator|(x11::Blanking l, x11::Blanking r) {
  using T = std::underlying_type_t<x11::Blanking>;
  return static_cast<x11::Blanking>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::Blanking operator&(x11::Blanking l, x11::Blanking r) {
  using T = std::underlying_type_t<x11::Blanking>;
  return static_cast<x11::Blanking>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::Exposures operator|(x11::Exposures l, x11::Exposures r) {
  using T = std::underlying_type_t<x11::Exposures>;
  return static_cast<x11::Exposures>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::Exposures operator&(x11::Exposures l, x11::Exposures r) {
  using T = std::underlying_type_t<x11::Exposures>;
  return static_cast<x11::Exposures>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::HostMode operator|(x11::HostMode l, x11::HostMode r) {
  using T = std::underlying_type_t<x11::HostMode>;
  return static_cast<x11::HostMode>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::HostMode operator&(x11::HostMode l, x11::HostMode r) {
  using T = std::underlying_type_t<x11::HostMode>;
  return static_cast<x11::HostMode>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::Family operator|(x11::Family l, x11::Family r) {
  using T = std::underlying_type_t<x11::Family>;
  return static_cast<x11::Family>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::Family operator&(x11::Family l, x11::Family r) {
  using T = std::underlying_type_t<x11::Family>;
  return static_cast<x11::Family>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::AccessControl operator|(x11::AccessControl l,
                                              x11::AccessControl r) {
  using T = std::underlying_type_t<x11::AccessControl>;
  return static_cast<x11::AccessControl>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::AccessControl operator&(x11::AccessControl l,
                                              x11::AccessControl r) {
  using T = std::underlying_type_t<x11::AccessControl>;
  return static_cast<x11::AccessControl>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::CloseDown operator|(x11::CloseDown l, x11::CloseDown r) {
  using T = std::underlying_type_t<x11::CloseDown>;
  return static_cast<x11::CloseDown>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::CloseDown operator&(x11::CloseDown l, x11::CloseDown r) {
  using T = std::underlying_type_t<x11::CloseDown>;
  return static_cast<x11::CloseDown>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::Kill operator|(x11::Kill l, x11::Kill r) {
  using T = std::underlying_type_t<x11::Kill>;
  return static_cast<x11::Kill>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::Kill operator&(x11::Kill l, x11::Kill r) {
  using T = std::underlying_type_t<x11::Kill>;
  return static_cast<x11::Kill>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::ScreenSaverMode operator|(x11::ScreenSaverMode l,
                                                x11::ScreenSaverMode r) {
  using T = std::underlying_type_t<x11::ScreenSaverMode>;
  return static_cast<x11::ScreenSaverMode>(static_cast<T>(l) |
                                           static_cast<T>(r));
}

inline constexpr x11::ScreenSaverMode operator&(x11::ScreenSaverMode l,
                                                x11::ScreenSaverMode r) {
  using T = std::underlying_type_t<x11::ScreenSaverMode>;
  return static_cast<x11::ScreenSaverMode>(static_cast<T>(l) &
                                           static_cast<T>(r));
}

inline constexpr x11::MappingStatus operator|(x11::MappingStatus l,
                                              x11::MappingStatus r) {
  using T = std::underlying_type_t<x11::MappingStatus>;
  return static_cast<x11::MappingStatus>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::MappingStatus operator&(x11::MappingStatus l,
                                              x11::MappingStatus r) {
  using T = std::underlying_type_t<x11::MappingStatus>;
  return static_cast<x11::MappingStatus>(static_cast<T>(l) & static_cast<T>(r));
}

inline constexpr x11::MapIndex operator|(x11::MapIndex l, x11::MapIndex r) {
  using T = std::underlying_type_t<x11::MapIndex>;
  return static_cast<x11::MapIndex>(static_cast<T>(l) | static_cast<T>(r));
}

inline constexpr x11::MapIndex operator&(x11::MapIndex l, x11::MapIndex r) {
  using T = std::underlying_type_t<x11::MapIndex>;
  return static_cast<x11::MapIndex>(static_cast<T>(l) & static_cast<T>(r));
}

#endif  // UI_GFX_X_GENERATED_PROTOS_XPROTO_H_
