digraph seats
{
  rankdir="BT";
  node [
    shape="box";
  ]

  kernel [label="Kernel"];

  event0 [URL="\ref libinput_event"];
  event1 [URL="\ref libinput_event"];
  event2 [URL="\ref libinput_event"];
  event3 [URL="\ref libinput_event"];

  pseat0 [label="phys seat0"; URL="\ref libinput_seat_get_physical_name"];
  pseat1 [label="phys seat1"; URL="\ref libinput_seat_get_physical_name"];

  lseatA [label="logical seat A"; URL="\ref libinput_seat_get_logical_name"];
  lseatB [label="logical seat B"; URL="\ref libinput_seat_get_logical_name"];
  lseatC [label="logical seat C"; URL="\ref libinput_seat_get_logical_name"];

  ctx1 [label="libinput context 1"; URL="\ref libinput"];
  ctx2 [label="libinput context 2"; URL="\ref libinput"];

  dev1 [label="device 'Foo'"];
  dev2 [label="device 'Bar'"];
  dev3 [label="device 'Spam'"];
  dev4 [label="device 'Egg'"];

  kernel -> event0
  kernel -> event1
  kernel -> event2
  kernel -> event3

  event0 -> pseat0
  event1 -> pseat0
  event2 -> pseat0
  event3 -> pseat1

  pseat0 -> ctx1
  pseat1 -> ctx2

  ctx1 -> lseatA
  ctx1 -> lseatB
  ctx2 -> lseatC

  lseatA -> dev1
  lseatA -> dev2
  lseatB -> dev3
  lseatC -> dev4
}
