1901 lines
48 KiB
Python
1901 lines
48 KiB
Python
# Xlib.protocol.request -- definitions of core requests
|
|
#
|
|
# Copyright (C) 2000-2002 Peter Liljenberg <petli@ctrl-c.liu.se>
|
|
#
|
|
# This library is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU Lesser General Public License
|
|
# as published by the Free Software Foundation; either version 2.1
|
|
# of the License, or (at your option) any later version.
|
|
#
|
|
# This library is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
# See the GNU Lesser General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU Lesser General Public
|
|
# License along with this library; if not, write to the
|
|
# Free Software Foundation, Inc.,
|
|
# 59 Temple Place,
|
|
# Suite 330,
|
|
# Boston, MA 02111-1307 USA
|
|
|
|
|
|
# Xlib modules
|
|
from .. import X
|
|
|
|
# Xlib.protocol modules
|
|
from . import rq
|
|
from . import structs
|
|
|
|
|
|
class CreateWindow(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(1),
|
|
rq.Card8('depth'),
|
|
rq.RequestLength(),
|
|
rq.Window('wid'),
|
|
rq.Window('parent'),
|
|
rq.Int16('x'),
|
|
rq.Int16('y'),
|
|
rq.Card16('width'),
|
|
rq.Card16('height'),
|
|
rq.Card16('border_width'),
|
|
rq.Set('window_class', 2, (X.CopyFromParent, X.InputOutput, X.InputOnly)),
|
|
rq.Card32('visual'),
|
|
structs.WindowValues('attrs'),
|
|
)
|
|
|
|
class ChangeWindowAttributes(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(2),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Window('window'),
|
|
structs.WindowValues('attrs'),
|
|
)
|
|
|
|
class GetWindowAttributes(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(3),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Window('window')
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.Card8('backing_store'),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.Card32('visual'),
|
|
rq.Card16('win_class'),
|
|
rq.Card8('bit_gravity'),
|
|
rq.Card8('win_gravity'),
|
|
rq.Card32('backing_bit_planes'),
|
|
rq.Card32('backing_pixel'),
|
|
rq.Card8('save_under'),
|
|
rq.Card8('map_is_installed'),
|
|
rq.Card8('map_state'),
|
|
rq.Card8('override_redirect'),
|
|
rq.Colormap('colormap', (X.NONE, )),
|
|
rq.Card32('all_event_masks'),
|
|
rq.Card32('your_event_mask'),
|
|
rq.Card16('do_not_propagate_mask'),
|
|
rq.Pad(2),
|
|
)
|
|
|
|
class DestroyWindow(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(4),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Window('window')
|
|
)
|
|
|
|
class DestroySubWindows(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(5),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Window('window')
|
|
)
|
|
|
|
class ChangeSaveSet(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(6),
|
|
rq.Set('mode', 1, (X.SetModeInsert, X.SetModeDelete)),
|
|
rq.RequestLength(),
|
|
rq.Window('window'),
|
|
)
|
|
|
|
class ReparentWindow(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(7),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Window('window'),
|
|
rq.Window('parent'),
|
|
rq.Int16('x'),
|
|
rq.Int16('y'),
|
|
)
|
|
|
|
class MapWindow(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(8),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Window('window')
|
|
)
|
|
|
|
class MapSubwindows(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(9),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Window('window')
|
|
)
|
|
|
|
class UnmapWindow(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(10),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Window('window')
|
|
)
|
|
|
|
class UnmapSubwindows(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(11),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Window('window')
|
|
)
|
|
|
|
class ConfigureWindow(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(12),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Window('window'),
|
|
rq.ValueList( 'attrs', 2, 2,
|
|
rq.Int16('x'),
|
|
rq.Int16('y'),
|
|
rq.Card16('width'),
|
|
rq.Card16('height'),
|
|
rq.Int16('border_width'),
|
|
rq.Window('sibling'),
|
|
rq.Set('stack_mode', 1,
|
|
(X.Above, X.Below, X.TopIf,
|
|
X.BottomIf, X.Opposite))
|
|
)
|
|
)
|
|
|
|
class CirculateWindow(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(13),
|
|
rq.Set('direction', 1, (X.RaiseLowest, X.LowerHighest)),
|
|
rq.RequestLength(),
|
|
rq.Window('window'),
|
|
)
|
|
|
|
class GetGeometry(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(14),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Drawable('drawable')
|
|
)
|
|
|
|
_reply = rq.Struct (
|
|
rq.ReplyCode(),
|
|
rq.Card8('depth'),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.Window('root'),
|
|
rq.Int16('x'),
|
|
rq.Int16('y'),
|
|
rq.Card16('width'),
|
|
rq.Card16('height'),
|
|
rq.Card16('border_width'),
|
|
rq.Pad(10)
|
|
)
|
|
|
|
class QueryTree(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(15),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Window('window')
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.Pad(1),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.Window('root'),
|
|
rq.Window('parent', (X.NONE, )),
|
|
rq.LengthOf('children', 2),
|
|
rq.Pad(14),
|
|
rq.List('children', rq.WindowObj),
|
|
)
|
|
|
|
class InternAtom(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(16),
|
|
rq.Bool('only_if_exists'),
|
|
rq.RequestLength(),
|
|
rq.LengthOf('name', 2),
|
|
rq.Pad(2),
|
|
rq.String8('name'),
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.Pad(1),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.Card32('atom'),
|
|
rq.Pad(20),
|
|
)
|
|
|
|
|
|
class GetAtomName(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(17),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Card32('atom')
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.Pad(1),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.LengthOf('name', 2),
|
|
rq.Pad(22),
|
|
rq.String8('name'),
|
|
)
|
|
|
|
class ChangeProperty(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(18),
|
|
rq.Set('mode', 1, (X.PropModeReplace, X.PropModePrepend, X.PropModeAppend)),
|
|
rq.RequestLength(),
|
|
rq.Window('window'),
|
|
rq.Card32('property'),
|
|
rq.Card32('type'),
|
|
rq.Format('data', 1),
|
|
rq.Pad(3),
|
|
rq.LengthOf('data', 4),
|
|
rq.PropertyData('data'),
|
|
)
|
|
|
|
class DeleteProperty(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(19),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Window('window'),
|
|
rq.Card32('property'),
|
|
)
|
|
|
|
class GetProperty(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(20),
|
|
rq.Bool('delete'),
|
|
rq.RequestLength(),
|
|
rq.Window('window'),
|
|
rq.Card32('property'),
|
|
rq.Card32('type'),
|
|
rq.Card32('long_offset'),
|
|
rq.Card32('long_length'),
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.Format('value', 1),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.Card32('property_type'),
|
|
rq.Card32('bytes_after'),
|
|
rq.LengthOf('value', 4),
|
|
rq.Pad(12),
|
|
rq.PropertyData('value'),
|
|
)
|
|
|
|
class ListProperties(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(21),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Window('window')
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.Pad(1),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.LengthOf('atoms', 2),
|
|
rq.Pad(22),
|
|
rq.List('atoms', rq.Card32Obj),
|
|
)
|
|
|
|
class SetSelectionOwner(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(22),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Window('window'),
|
|
rq.Card32('selection'),
|
|
rq.Card32('time'),
|
|
)
|
|
|
|
class GetSelectionOwner(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(23),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Card32('selection')
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.Pad(1),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.Window('owner', (X.NONE, )),
|
|
rq.Pad(20),
|
|
)
|
|
|
|
class ConvertSelection(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(24),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Window('requestor'),
|
|
rq.Card32('selection'),
|
|
rq.Card32('target'),
|
|
rq.Card32('property'),
|
|
rq.Card32('time'),
|
|
)
|
|
|
|
class SendEvent(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(25),
|
|
rq.Bool('propagate'),
|
|
rq.RequestLength(),
|
|
rq.Window('destination'),
|
|
rq.Card32('event_mask'),
|
|
rq.EventField('event'),
|
|
)
|
|
|
|
class GrabPointer(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(26),
|
|
rq.Bool('owner_events'),
|
|
rq.RequestLength(),
|
|
rq.Window('grab_window'),
|
|
rq.Card16('event_mask'),
|
|
rq.Set('pointer_mode', 1, (X.GrabModeSync, X.GrabModeAsync)),
|
|
rq.Set('keyboard_mode', 1, (X.GrabModeSync, X.GrabModeAsync)),
|
|
rq.Window('confine_to', (X.NONE, )),
|
|
rq.Cursor('cursor', (X.NONE, )),
|
|
rq.Card32('time'),
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.Card8('status'),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.Pad(24),
|
|
)
|
|
|
|
class UngrabPointer(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(27),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Card32('time')
|
|
)
|
|
|
|
class GrabButton(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(28),
|
|
rq.Bool('owner_events'),
|
|
rq.RequestLength(),
|
|
rq.Window('grab_window'),
|
|
rq.Card16('event_mask'),
|
|
rq.Set('pointer_mode', 1, (X.GrabModeSync, X.GrabModeAsync)),
|
|
rq.Set('keyboard_mode', 1, (X.GrabModeSync, X.GrabModeAsync)),
|
|
rq.Window('confine_to', (X.NONE, )),
|
|
rq.Cursor('cursor', (X.NONE, )),
|
|
rq.Card8('button'),
|
|
rq.Pad(1),
|
|
rq.Card16('modifiers'),
|
|
)
|
|
|
|
class UngrabButton(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(29),
|
|
rq.Card8('button'),
|
|
rq.RequestLength(),
|
|
rq.Window('grab_window'),
|
|
rq.Card16('modifiers'),
|
|
rq.Pad(2),
|
|
)
|
|
|
|
class ChangeActivePointerGrab(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(30),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Cursor('cursor'),
|
|
rq.Card32('time'),
|
|
rq.Card16('event_mask'),
|
|
rq.Pad(2),
|
|
)
|
|
|
|
class GrabKeyboard(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(31),
|
|
rq.Bool('owner_events'),
|
|
rq.RequestLength(),
|
|
rq.Window('grab_window'),
|
|
rq.Card32('time'),
|
|
rq.Set('pointer_mode', 1, (X.GrabModeSync, X.GrabModeAsync)),
|
|
rq.Set('keyboard_mode', 1, (X.GrabModeSync, X.GrabModeAsync)),
|
|
rq.Pad(2),
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.Card8('status'),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.Pad(24),
|
|
)
|
|
|
|
class UngrabKeyboard(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(32),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Card32('time')
|
|
)
|
|
|
|
class GrabKey(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(33),
|
|
rq.Bool('owner_events'),
|
|
rq.RequestLength(),
|
|
rq.Window('grab_window'),
|
|
rq.Card16('modifiers'),
|
|
rq.Card8('key'),
|
|
rq.Set('pointer_mode', 1, (X.GrabModeSync, X.GrabModeAsync)),
|
|
rq.Set('keyboard_mode', 1, (X.GrabModeSync, X.GrabModeAsync)),
|
|
rq.Pad(3),
|
|
)
|
|
|
|
class UngrabKey(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(34),
|
|
rq.Card8('key'),
|
|
rq.RequestLength(),
|
|
rq.Window('grab_window'),
|
|
rq.Card16('modifiers'),
|
|
rq.Pad(2),
|
|
)
|
|
|
|
class AllowEvents(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(35),
|
|
rq.Set('mode', 1, (X.AsyncPointer,
|
|
X.SyncPointer,
|
|
X.ReplayPointer,
|
|
X.AsyncKeyboard,
|
|
X.SyncKeyboard,
|
|
X.ReplayKeyboard,
|
|
X.AsyncBoth,
|
|
X.SyncBoth)),
|
|
rq.RequestLength(),
|
|
rq.Card32('time'),
|
|
)
|
|
|
|
class GrabServer(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(36),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
)
|
|
|
|
class UngrabServer(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(37),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
)
|
|
|
|
class QueryPointer(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(38),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Window('window')
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.Card8('same_screen'),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.Window('root'),
|
|
rq.Window('child', (X.NONE, )),
|
|
rq.Int16('root_x'),
|
|
rq.Int16('root_y'),
|
|
rq.Int16('win_x'),
|
|
rq.Int16('win_y'),
|
|
rq.Card16('mask'),
|
|
rq.Pad(6),
|
|
)
|
|
|
|
class GetMotionEvents(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(39),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Window('window'),
|
|
rq.Card32('start'),
|
|
rq.Card32('stop'),
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.Pad(1),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.LengthOf('events', 4),
|
|
rq.Pad(20),
|
|
rq.List('events', structs.TimeCoord),
|
|
)
|
|
|
|
class TranslateCoords(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(40),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Window('src_wid'),
|
|
rq.Window('dst_wid'),
|
|
rq.Int16('src_x'),
|
|
rq.Int16('src_y'),
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.Card8('same_screen'),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.Window('child', (X.NONE, )),
|
|
rq.Int16('x'),
|
|
rq.Int16('y'),
|
|
rq.Pad(16),
|
|
)
|
|
|
|
class WarpPointer(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(41),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Window('src_window'),
|
|
rq.Window('dst_window'),
|
|
rq.Int16('src_x'),
|
|
rq.Int16('src_y'),
|
|
rq.Card16('src_width'),
|
|
rq.Card16('src_height'),
|
|
rq.Int16('dst_x'),
|
|
rq.Int16('dst_y'),
|
|
)
|
|
|
|
class SetInputFocus(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(42),
|
|
rq.Set('revert_to', 1, (X.RevertToNone, X.RevertToPointerRoot,
|
|
X.RevertToParent)),
|
|
rq.RequestLength(),
|
|
rq.Window('focus'),
|
|
rq.Card32('time'),
|
|
)
|
|
|
|
class GetInputFocus(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(43),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.Card8('revert_to'),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.Window('focus', (X.NONE, X.PointerRoot)),
|
|
rq.Pad(20),
|
|
)
|
|
|
|
class QueryKeymap(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(44),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.Pad(1),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.FixedList('map', 32, rq.Card8Obj),
|
|
)
|
|
|
|
|
|
class OpenFont(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(45),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Font('fid'),
|
|
rq.LengthOf('name', 2),
|
|
rq.Pad(2),
|
|
rq.String8('name'),
|
|
)
|
|
|
|
class CloseFont(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(46),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Font('font')
|
|
)
|
|
|
|
class QueryFont(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(47),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Fontable('font')
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.Pad(1),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.Object('min_bounds', structs.CharInfo),
|
|
rq.Pad(4),
|
|
rq.Object('max_bounds', structs.CharInfo),
|
|
rq.Pad(4),
|
|
rq.Card16('min_char_or_byte2'),
|
|
rq.Card16('max_char_or_byte2'),
|
|
rq.Card16('default_char'),
|
|
rq.LengthOf('properties', 2),
|
|
rq.Card8('draw_direction'),
|
|
rq.Card8('min_byte1'),
|
|
rq.Card8('max_byte1'),
|
|
rq.Card8('all_chars_exist'),
|
|
rq.Int16('font_ascent'),
|
|
rq.Int16('font_descent'),
|
|
rq.LengthOf('char_infos', 4),
|
|
rq.List('properties', structs.FontProp),
|
|
rq.List('char_infos', structs.CharInfo),
|
|
)
|
|
|
|
class QueryTextExtents(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(48),
|
|
rq.OddLength('string'),
|
|
rq.RequestLength(),
|
|
rq.Fontable('font'),
|
|
rq.String16('string'),
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.Card8('draw_direction'),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.Int16('font_ascent'),
|
|
rq.Int16('font_descent'),
|
|
rq.Int16('overall_ascent'),
|
|
rq.Int16('overall_descent'),
|
|
rq.Int32('overall_width'),
|
|
rq.Int32('overall_left'),
|
|
rq.Int32('overall_right'),
|
|
rq.Pad(4),
|
|
)
|
|
|
|
class ListFonts(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(49),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Card16('max_names'),
|
|
rq.LengthOf('pattern', 2),
|
|
rq.String8('pattern'),
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.Pad(1),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.LengthOf('fonts', 2),
|
|
rq.Pad(22),
|
|
rq.List('fonts', rq.Str),
|
|
)
|
|
|
|
|
|
class ListFontsWithInfo(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(50),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Card16('max_names'),
|
|
rq.LengthOf('pattern', 2),
|
|
rq.String8('pattern'),
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.LengthOf('name', 1),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.Object('min_bounds', structs.CharInfo),
|
|
rq.Pad(4),
|
|
rq.Object('max_bounds', structs.CharInfo),
|
|
rq.Pad(4),
|
|
rq.Card16('min_char_or_byte2'),
|
|
rq.Card16('max_char_or_byte2'),
|
|
rq.Card16('default_char'),
|
|
rq.LengthOf('properties', 2),
|
|
rq.Card8('draw_direction'),
|
|
rq.Card8('min_byte1'),
|
|
rq.Card8('max_byte1'),
|
|
rq.Card8('all_chars_exist'),
|
|
rq.Int16('font_ascent'),
|
|
rq.Int16('font_descent'),
|
|
rq.Card32('replies_hint'),
|
|
rq.List('properties', structs.FontProp),
|
|
rq.String8('name'),
|
|
)
|
|
|
|
|
|
# Somebody must have smoked some really wicked weed when they
|
|
# defined the ListFontsWithInfo request:
|
|
# The server sends a reply for _each_ matching font...
|
|
# It then sends a special reply (name length == 0) to indicate
|
|
# that there are no more fonts in the reply.
|
|
|
|
# This means that we have to do some special parsing to see if
|
|
# we have got the end-of-reply reply. If we haven't, we
|
|
# have to reinsert the request in the front of the
|
|
# display.sent_request queue to catch the next response.
|
|
|
|
# Bastards.
|
|
|
|
def __init__(self, *args, **keys):
|
|
self._fonts = []
|
|
rq.ReplyRequest.__init__(self, *args, **keys)
|
|
|
|
def _parse_response(self, data):
|
|
|
|
if ord(data[1]) == 0:
|
|
self._response_lock.acquire()
|
|
self._data = self._fonts
|
|
del self._fonts
|
|
self._response_lock.release()
|
|
return
|
|
|
|
r, d = self._reply.parse_binary(data)
|
|
self._fonts.append(r)
|
|
|
|
self._display.sent_requests.insert(0, self)
|
|
|
|
|
|
# Override the default __getattr__, since it isn't usable for
|
|
# the list reply. Instead provide a __getitem__ and a __len__.
|
|
|
|
def __getattr__(self, attr):
|
|
raise AttributeError(attr)
|
|
|
|
def __getitem__(self, item):
|
|
return self._data[item]
|
|
|
|
def __len__(self):
|
|
return len(self._data)
|
|
|
|
|
|
class SetFontPath(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(51),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.LengthOf('path', 2),
|
|
rq.Pad(2),
|
|
rq.List('path', rq.Str),
|
|
)
|
|
|
|
class GetFontPath(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(52),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.Pad(1),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.LengthOf('paths', 2),
|
|
rq.Pad(22),
|
|
rq.List('paths', rq.Str),
|
|
)
|
|
|
|
class CreatePixmap(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(53),
|
|
rq.Card8('depth'),
|
|
rq.RequestLength(),
|
|
rq.Pixmap('pid'),
|
|
rq.Drawable('drawable'),
|
|
rq.Card16('width'),
|
|
rq.Card16('height'),
|
|
)
|
|
|
|
class FreePixmap(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(54),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Pixmap('pixmap')
|
|
)
|
|
|
|
class CreateGC(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(55),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.GC('cid'),
|
|
rq.Drawable('drawable'),
|
|
structs.GCValues('attrs'),
|
|
)
|
|
|
|
class ChangeGC(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(56),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.GC('gc'),
|
|
structs.GCValues('attrs'),
|
|
)
|
|
|
|
class CopyGC(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(57),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.GC('src_gc'),
|
|
rq.GC('dst_gc'),
|
|
rq.Card32('mask'),
|
|
)
|
|
|
|
class SetDashes(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(58),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.GC('gc'),
|
|
rq.Card16('dash_offset'),
|
|
rq.LengthOf('dashes', 2),
|
|
rq.List('dashes', rq.Card8Obj),
|
|
)
|
|
|
|
class SetClipRectangles(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(59),
|
|
rq.Set('ordering', 1, (X.Unsorted, X.YSorted, X.YXSorted, X.YXBanded)),
|
|
rq.RequestLength(),
|
|
rq.GC('gc'),
|
|
rq.Int16('x_origin'),
|
|
rq.Int16('y_origin'),
|
|
rq.List('rectangles', structs.Rectangle),
|
|
)
|
|
|
|
class FreeGC(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(60),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.GC('gc')
|
|
)
|
|
|
|
class ClearArea(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(61),
|
|
rq.Bool('exposures'),
|
|
rq.RequestLength(),
|
|
rq.Window('window'),
|
|
rq.Int16('x'),
|
|
rq.Int16('y'),
|
|
rq.Card16('width'),
|
|
rq.Card16('height'),
|
|
)
|
|
|
|
class CopyArea(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(62),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Drawable('src_drawable'),
|
|
rq.Drawable('dst_drawable'),
|
|
rq.GC('gc'),
|
|
rq.Int16('src_x'),
|
|
rq.Int16('src_y'),
|
|
rq.Int16('dst_x'),
|
|
rq.Int16('dst_y'),
|
|
rq.Card16('width'),
|
|
rq.Card16('height'),
|
|
)
|
|
|
|
class CopyPlane(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(63),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Drawable('src_drawable'),
|
|
rq.Drawable('dst_drawable'),
|
|
rq.GC('gc'),
|
|
rq.Int16('src_x'),
|
|
rq.Int16('src_y'),
|
|
rq.Int16('dst_x'),
|
|
rq.Int16('dst_y'),
|
|
rq.Card16('width'),
|
|
rq.Card16('height'),
|
|
rq.Card32('bit_plane'),
|
|
)
|
|
|
|
class PolyPoint(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(64),
|
|
rq.Set('coord_mode', 1, (X.CoordModeOrigin, X.CoordModePrevious)),
|
|
rq.RequestLength(),
|
|
rq.Drawable('drawable'),
|
|
rq.GC('gc'),
|
|
rq.List('points', structs.Point),
|
|
)
|
|
|
|
class PolyLine(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(65),
|
|
rq.Set('coord_mode', 1, (X.CoordModeOrigin, X.CoordModePrevious)),
|
|
rq.RequestLength(),
|
|
rq.Drawable('drawable'),
|
|
rq.GC('gc'),
|
|
rq.List('points', structs.Point),
|
|
)
|
|
|
|
|
|
class PolySegment(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(66),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Drawable('drawable'),
|
|
rq.GC('gc'),
|
|
rq.List('segments', structs.Segment),
|
|
)
|
|
|
|
|
|
class PolyRectangle(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(67),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Drawable('drawable'),
|
|
rq.GC('gc'),
|
|
rq.List('rectangles', structs.Rectangle),
|
|
)
|
|
|
|
class PolyArc(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(68),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Drawable('drawable'),
|
|
rq.GC('gc'),
|
|
rq.List('arcs', structs.Arc),
|
|
)
|
|
|
|
class FillPoly(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(69),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Drawable('drawable'),
|
|
rq.GC('gc'),
|
|
rq.Set('shape', 1, (X.Complex, X.Nonconvex, X.Convex)),
|
|
rq.Set('coord_mode', 1, (X.CoordModeOrigin, X.CoordModePrevious)),
|
|
rq.Pad(2),
|
|
rq.List('points', structs.Point),
|
|
)
|
|
|
|
class PolyFillRectangle(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(70),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Drawable('drawable'),
|
|
rq.GC('gc'),
|
|
rq.List('rectangles', structs.Rectangle),
|
|
)
|
|
|
|
class PolyFillArc(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(71),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Drawable('drawable'),
|
|
rq.GC('gc'),
|
|
rq.List('arcs', structs.Arc),
|
|
)
|
|
|
|
class PutImage(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(72),
|
|
rq.Set('format', 1, (X.XYBitmap, X.XYPixmap, X.ZPixmap)),
|
|
rq.RequestLength(),
|
|
rq.Drawable('drawable'),
|
|
rq.GC('gc'),
|
|
rq.Card16('width'),
|
|
rq.Card16('height'),
|
|
rq.Int16('dst_x'),
|
|
rq.Int16('dst_y'),
|
|
rq.Card8('left_pad'),
|
|
rq.Card8('depth'),
|
|
rq.Pad(2),
|
|
rq.Binary('data'),
|
|
)
|
|
|
|
class GetImage(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(73),
|
|
rq.Set('format', 1, (X.XYPixmap, X.ZPixmap)),
|
|
rq.RequestLength(),
|
|
rq.Drawable('drawable'),
|
|
rq.Int16('x'),
|
|
rq.Int16('y'),
|
|
rq.Card16('width'),
|
|
rq.Card16('height'),
|
|
rq.Card32('plane_mask'),
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.Card8('depth'),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.Card32('visual'),
|
|
rq.Pad(20),
|
|
rq.Binary('data'),
|
|
)
|
|
|
|
class PolyText8(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(74),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Drawable('drawable'),
|
|
rq.GC('gc'),
|
|
rq.Int16('x'),
|
|
rq.Int16('y'),
|
|
rq.TextElements8('items'),
|
|
)
|
|
|
|
class PolyText16(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(75),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Drawable('drawable'),
|
|
rq.GC('gc'),
|
|
rq.Int16('x'),
|
|
rq.Int16('y'),
|
|
rq.TextElements16('items'),
|
|
)
|
|
|
|
class ImageText8(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(76),
|
|
rq.LengthOf('string', 1),
|
|
rq.RequestLength(),
|
|
rq.Drawable('drawable'),
|
|
rq.GC('gc'),
|
|
rq.Int16('x'),
|
|
rq.Int16('y'),
|
|
rq.String8('string'),
|
|
)
|
|
|
|
class ImageText16(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(77),
|
|
rq.LengthOf('string', 1),
|
|
rq.RequestLength(),
|
|
rq.Drawable('drawable'),
|
|
rq.GC('gc'),
|
|
rq.Int16('x'),
|
|
rq.Int16('y'),
|
|
rq.String16('string'),
|
|
)
|
|
|
|
class CreateColormap(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(78),
|
|
rq.Set('alloc', 1, (X.AllocNone, X.AllocAll)),
|
|
rq.RequestLength(),
|
|
rq.Colormap('mid'),
|
|
rq.Window('window'),
|
|
rq.Card32('visual'),
|
|
)
|
|
|
|
class FreeColormap(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(79),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Colormap('cmap')
|
|
)
|
|
|
|
class CopyColormapAndFree(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(80),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Colormap('mid'),
|
|
rq.Colormap('src_cmap'),
|
|
)
|
|
|
|
class InstallColormap(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(81),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Colormap('cmap')
|
|
)
|
|
|
|
class UninstallColormap(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(82),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Colormap('cmap')
|
|
)
|
|
|
|
class ListInstalledColormaps(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(83),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Window('window')
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.Pad(1),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.LengthOf('cmaps', 2),
|
|
rq.Pad(22),
|
|
rq.List('cmaps', rq.ColormapObj),
|
|
)
|
|
|
|
class AllocColor(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(84),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Colormap('cmap'),
|
|
rq.Card16('red'),
|
|
rq.Card16('green'),
|
|
rq.Card16('blue'),
|
|
rq.Pad(2),
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.Pad(1),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.Card16('red'),
|
|
rq.Card16('green'),
|
|
rq.Card16('blue'),
|
|
rq.Pad(2),
|
|
rq.Card32('pixel'),
|
|
rq.Pad(12),
|
|
)
|
|
|
|
class AllocNamedColor(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(85),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Colormap('cmap'),
|
|
rq.LengthOf('name', 2),
|
|
rq.Pad(2),
|
|
rq.String8('name'),
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.Pad(1),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.Card32('pixel'),
|
|
rq.Card16('exact_red'),
|
|
rq.Card16('exact_green'),
|
|
rq.Card16('exact_blue'),
|
|
rq.Card16('screen_red'),
|
|
rq.Card16('screen_green'),
|
|
rq.Card16('screen_blue'),
|
|
rq.Pad(8),
|
|
)
|
|
|
|
class AllocColorCells(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(86),
|
|
rq.Bool('contiguous'),
|
|
rq.RequestLength(),
|
|
rq.Colormap('cmap'),
|
|
rq.Card16('colors'),
|
|
rq.Card16('planes'),
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.Pad(1),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.LengthOf('pixels', 2),
|
|
rq.LengthOf('masks', 2),
|
|
rq.Pad(20),
|
|
rq.List('pixels', rq.Card32Obj),
|
|
rq.List('masks', rq.Card32Obj),
|
|
)
|
|
|
|
class AllocColorPlanes(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(87),
|
|
rq.Bool('contiguous'),
|
|
rq.RequestLength(),
|
|
rq.Colormap('cmap'),
|
|
rq.Card16('colors'),
|
|
rq.Card16('red'),
|
|
rq.Card16('green'),
|
|
rq.Card16('blue'),
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.Pad(1),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.LengthOf('pixels', 2),
|
|
rq.Pad(2),
|
|
rq.Card32('red_mask'),
|
|
rq.Card32('green_mask'),
|
|
rq.Card32('blue_mask'),
|
|
rq.Pad(8),
|
|
rq.List('pixels', rq.Card32Obj),
|
|
)
|
|
|
|
class FreeColors(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(88),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Colormap('cmap'),
|
|
rq.Card32('plane_mask'),
|
|
rq.List('pixels', rq.Card32Obj),
|
|
)
|
|
|
|
class StoreColors(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(89),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Colormap('cmap'),
|
|
rq.List('items', structs.ColorItem),
|
|
)
|
|
|
|
class StoreNamedColor(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(90),
|
|
rq.Card8('flags'),
|
|
rq.RequestLength(),
|
|
rq.Colormap('cmap'),
|
|
rq.Card32('pixel'),
|
|
rq.LengthOf('name', 2),
|
|
rq.Pad(2),
|
|
rq.String8('name'),
|
|
)
|
|
|
|
class QueryColors(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(91),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Colormap('cmap'),
|
|
rq.List('pixels', rq.Card32Obj),
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.Pad(1),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.LengthOf('colors', 2),
|
|
rq.Pad(22),
|
|
rq.List('colors', structs.RGB),
|
|
)
|
|
|
|
class LookupColor(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(92),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Colormap('cmap'),
|
|
rq.LengthOf('name', 2),
|
|
rq.Pad(2),
|
|
rq.String8('name'),
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.Pad(1),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.Card16('exact_red'),
|
|
rq.Card16('exact_green'),
|
|
rq.Card16('exact_blue'),
|
|
rq.Card16('screen_red'),
|
|
rq.Card16('screen_green'),
|
|
rq.Card16('screen_blue'),
|
|
rq.Pad(12),
|
|
)
|
|
|
|
|
|
class CreateCursor(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(93),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Cursor('cid'),
|
|
rq.Pixmap('source'),
|
|
rq.Pixmap('mask'),
|
|
rq.Card16('fore_red'),
|
|
rq.Card16('fore_green'),
|
|
rq.Card16('fore_blue'),
|
|
rq.Card16('back_red'),
|
|
rq.Card16('back_green'),
|
|
rq.Card16('back_blue'),
|
|
rq.Card16('x'),
|
|
rq.Card16('y'),
|
|
)
|
|
|
|
class CreateGlyphCursor(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(94),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Cursor('cid'),
|
|
rq.Font('source'),
|
|
rq.Font('mask'),
|
|
rq.Card16('source_char'),
|
|
rq.Card16('mask_char'),
|
|
rq.Card16('fore_red'),
|
|
rq.Card16('fore_green'),
|
|
rq.Card16('fore_blue'),
|
|
rq.Card16('back_red'),
|
|
rq.Card16('back_green'),
|
|
rq.Card16('back_blue'),
|
|
)
|
|
|
|
class FreeCursor(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(95),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Cursor('cursor')
|
|
)
|
|
|
|
class RecolorCursor(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(96),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Cursor('cursor'),
|
|
rq.Card16('fore_red'),
|
|
rq.Card16('fore_green'),
|
|
rq.Card16('fore_blue'),
|
|
rq.Card16('back_red'),
|
|
rq.Card16('back_green'),
|
|
rq.Card16('back_blue'),
|
|
)
|
|
|
|
class QueryBestSize(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(97),
|
|
rq.Set('item_class', 1, (X.CursorShape, X.TileShape, X.StippleShape)),
|
|
rq.RequestLength(),
|
|
rq.Drawable('drawable'),
|
|
rq.Card16('width'),
|
|
rq.Card16('height'),
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.Pad(1),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.Card16('width'),
|
|
rq.Card16('height'),
|
|
rq.Pad(20),
|
|
)
|
|
|
|
class QueryExtension(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(98),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.LengthOf('name', 2),
|
|
rq.Pad(2),
|
|
rq.String8('name'),
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.Pad(1),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.Card8('present'),
|
|
rq.Card8('major_opcode'),
|
|
rq.Card8('first_event'),
|
|
rq.Card8('first_error'),
|
|
rq.Pad(20),
|
|
)
|
|
|
|
class ListExtensions(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(99),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.LengthOf('names', 1),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.Pad(24),
|
|
rq.List('names', rq.Str),
|
|
)
|
|
|
|
class ChangeKeyboardMapping(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(100),
|
|
rq.LengthOf('keysyms', 1),
|
|
rq.RequestLength(),
|
|
rq.Card8('first_keycode'),
|
|
rq.Format('keysyms', 1),
|
|
rq.Pad(2),
|
|
rq.KeyboardMapping('keysyms'),
|
|
)
|
|
|
|
class GetKeyboardMapping(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(101),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Card8('first_keycode'),
|
|
rq.Card8('count'),
|
|
rq.Pad(2),
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.Format('keysyms', 1),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.Pad(24),
|
|
rq.KeyboardMapping('keysyms'),
|
|
)
|
|
|
|
|
|
class ChangeKeyboardControl(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(102),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.ValueList( 'attrs', 4, 0,
|
|
rq.Int8('key_click_percent'),
|
|
rq.Int8('bell_percent'),
|
|
rq.Int16('bell_pitch'),
|
|
rq.Int16('bell_duration'),
|
|
rq.Card8('led'),
|
|
rq.Set('led_mode', 1, (X.LedModeOff, X.LedModeOn)),
|
|
rq.Card8('key'),
|
|
rq.Set('auto_repeat_mode', 1, (X.AutoRepeatModeOff,
|
|
X.AutoRepeatModeOn,
|
|
X.AutoRepeatModeDefault))
|
|
)
|
|
)
|
|
|
|
class GetKeyboardControl(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(103),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.Card8('global_auto_repeat'),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.Card32('led_mask'),
|
|
rq.Card8('key_click_percent'),
|
|
rq.Card8('bell_percent'),
|
|
rq.Card16('bell_pitch'),
|
|
rq.Card16('bell_duration'),
|
|
rq.Pad(2),
|
|
rq.FixedList('auto_repeats', 32, rq.Card8Obj),
|
|
)
|
|
|
|
class Bell(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(104),
|
|
rq.Int8('percent'),
|
|
rq.RequestLength(),
|
|
)
|
|
|
|
class ChangePointerControl(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(105),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Int16('accel_num'),
|
|
rq.Int16('accel_denum'),
|
|
rq.Int16('threshold'),
|
|
rq.Bool('do_accel'),
|
|
rq.Bool('do_thresh'),
|
|
)
|
|
|
|
class GetPointerControl(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(106),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.Pad(1),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.Card16('accel_num'),
|
|
rq.Card16('accel_denom'),
|
|
rq.Card16('threshold'),
|
|
rq.Pad(18),
|
|
)
|
|
|
|
class SetScreenSaver(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(107),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Int16('timeout'),
|
|
rq.Int16('interval'),
|
|
rq.Set('prefer_blank', 1, (X.DontPreferBlanking,
|
|
X.PreferBlanking,
|
|
X.DefaultBlanking)),
|
|
rq.Set('allow_exposures', 1, (X.DontAllowExposures,
|
|
X.AllowExposures,
|
|
X.DefaultExposures)),
|
|
rq.Pad(2),
|
|
)
|
|
|
|
class GetScreenSaver(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(108),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.Pad(1),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.Card16('timeout'),
|
|
rq.Card16('interval'),
|
|
rq.Card8('prefer_blanking'),
|
|
rq.Card8('allow_exposures'),
|
|
rq.Pad(18),
|
|
)
|
|
|
|
class ChangeHosts(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(109),
|
|
rq.Set('mode', 1, (X.HostInsert, X.HostDelete)),
|
|
rq.RequestLength(),
|
|
rq.Set('host_family', 1, (X.FamilyInternet, X.FamilyDECnet, X.FamilyChaos,
|
|
X.FamilyServerInterpreted, X.FamilyInternetV6)),
|
|
rq.Pad(1),
|
|
rq.LengthOf('host', 2),
|
|
rq.List('host', rq.Card8Obj)
|
|
)
|
|
|
|
class ListHosts(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(110),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.Card8('mode'),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.LengthOf('hosts', 2),
|
|
rq.Pad(22),
|
|
rq.List('hosts', structs.Host),
|
|
)
|
|
|
|
class SetAccessControl(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(111),
|
|
rq.Set('mode', 1, (X.DisableAccess, X.EnableAccess)),
|
|
rq.RequestLength(),
|
|
)
|
|
|
|
class SetCloseDownMode(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(112),
|
|
rq.Set('mode', 1, (X.DestroyAll, X.RetainPermanent, X.RetainTemporary)),
|
|
rq.RequestLength(),
|
|
)
|
|
|
|
class KillClient(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(113),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Resource('resource')
|
|
)
|
|
|
|
class RotateProperties(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(114),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
rq.Window('window'),
|
|
rq.LengthOf('properties', 2),
|
|
rq.Int16('delta'),
|
|
rq.List('properties', rq.Card32Obj),
|
|
)
|
|
|
|
class ForceScreenSaver(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(115),
|
|
rq.Set('mode', 1, (X.ScreenSaverReset, X.ScreenSaverActive)),
|
|
rq.RequestLength(),
|
|
)
|
|
|
|
class SetPointerMapping(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(116),
|
|
rq.LengthOf('map', 1),
|
|
rq.RequestLength(),
|
|
rq.List('map', rq.Card8Obj),
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.Card8('status'),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.Pad(24),
|
|
)
|
|
|
|
class GetPointerMapping(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(117),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.LengthOf('map', 1),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.Pad(24),
|
|
rq.List('map', rq.Card8Obj),
|
|
)
|
|
|
|
class SetModifierMapping(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(118),
|
|
rq.Format('keycodes', 1),
|
|
rq.RequestLength(),
|
|
rq.ModifierMapping('keycodes')
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.Card8('status'),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.Pad(24),
|
|
)
|
|
|
|
class GetModifierMapping(rq.ReplyRequest):
|
|
_request = rq.Struct(
|
|
rq.Opcode(119),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
)
|
|
|
|
_reply = rq.Struct(
|
|
rq.ReplyCode(),
|
|
rq.Format('keycodes', 1),
|
|
rq.Card16('sequence_number'),
|
|
rq.ReplyLength(),
|
|
rq.Pad(24),
|
|
rq.ModifierMapping('keycodes')
|
|
)
|
|
|
|
class NoOperation(rq.Request):
|
|
_request = rq.Struct(
|
|
rq.Opcode(127),
|
|
rq.Pad(1),
|
|
rq.RequestLength(),
|
|
)
|
|
|
|
|
|
major_codes = {
|
|
1: CreateWindow,
|
|
2: ChangeWindowAttributes,
|
|
3: GetWindowAttributes,
|
|
4: DestroyWindow,
|
|
5: DestroySubWindows,
|
|
6: ChangeSaveSet,
|
|
7: ReparentWindow,
|
|
8: MapWindow,
|
|
9: MapSubwindows,
|
|
10: UnmapWindow,
|
|
11: UnmapSubwindows,
|
|
12: ConfigureWindow,
|
|
13: CirculateWindow,
|
|
14: GetGeometry,
|
|
15: QueryTree,
|
|
16: InternAtom,
|
|
17: GetAtomName,
|
|
18: ChangeProperty,
|
|
19: DeleteProperty,
|
|
20: GetProperty,
|
|
21: ListProperties,
|
|
22: SetSelectionOwner,
|
|
23: GetSelectionOwner,
|
|
24: ConvertSelection,
|
|
25: SendEvent,
|
|
26: GrabPointer,
|
|
27: UngrabPointer,
|
|
28: GrabButton,
|
|
29: UngrabButton,
|
|
30: ChangeActivePointerGrab,
|
|
31: GrabKeyboard,
|
|
32: UngrabKeyboard,
|
|
33: GrabKey,
|
|
34: UngrabKey,
|
|
35: AllowEvents,
|
|
36: GrabServer,
|
|
37: UngrabServer,
|
|
38: QueryPointer,
|
|
39: GetMotionEvents,
|
|
40: TranslateCoords,
|
|
41: WarpPointer,
|
|
42: SetInputFocus,
|
|
43: GetInputFocus,
|
|
44: QueryKeymap,
|
|
45: OpenFont,
|
|
46: CloseFont,
|
|
47: QueryFont,
|
|
48: QueryTextExtents,
|
|
49: ListFonts,
|
|
50: ListFontsWithInfo,
|
|
51: SetFontPath,
|
|
52: GetFontPath,
|
|
53: CreatePixmap,
|
|
54: FreePixmap,
|
|
55: CreateGC,
|
|
56: ChangeGC,
|
|
57: CopyGC,
|
|
58: SetDashes,
|
|
59: SetClipRectangles,
|
|
60: FreeGC,
|
|
61: ClearArea,
|
|
62: CopyArea,
|
|
63: CopyPlane,
|
|
64: PolyPoint,
|
|
65: PolyLine,
|
|
66: PolySegment,
|
|
67: PolyRectangle,
|
|
68: PolyArc,
|
|
69: FillPoly,
|
|
70: PolyFillRectangle,
|
|
71: PolyFillArc,
|
|
72: PutImage,
|
|
73: GetImage,
|
|
74: PolyText8,
|
|
75: PolyText16,
|
|
76: ImageText8,
|
|
77: ImageText16,
|
|
78: CreateColormap,
|
|
79: FreeColormap,
|
|
80: CopyColormapAndFree,
|
|
81: InstallColormap,
|
|
82: UninstallColormap,
|
|
83: ListInstalledColormaps,
|
|
84: AllocColor,
|
|
85: AllocNamedColor,
|
|
86: AllocColorCells,
|
|
87: AllocColorPlanes,
|
|
88: FreeColors,
|
|
89: StoreColors,
|
|
90: StoreNamedColor,
|
|
91: QueryColors,
|
|
92: LookupColor,
|
|
93: CreateCursor,
|
|
94: CreateGlyphCursor,
|
|
95: FreeCursor,
|
|
96: RecolorCursor,
|
|
97: QueryBestSize,
|
|
98: QueryExtension,
|
|
99: ListExtensions,
|
|
100: ChangeKeyboardMapping,
|
|
101: GetKeyboardMapping,
|
|
102: ChangeKeyboardControl,
|
|
103: GetKeyboardControl,
|
|
104: Bell,
|
|
105: ChangePointerControl,
|
|
106: GetPointerControl,
|
|
107: SetScreenSaver,
|
|
108: GetScreenSaver,
|
|
109: ChangeHosts,
|
|
110: ListHosts,
|
|
111: SetAccessControl,
|
|
112: SetCloseDownMode,
|
|
113: KillClient,
|
|
114: RotateProperties,
|
|
115: ForceScreenSaver,
|
|
116: SetPointerMapping,
|
|
117: GetPointerMapping,
|
|
118: SetModifierMapping,
|
|
119: GetModifierMapping,
|
|
127: NoOperation,
|
|
}
|