The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

X11::Xlib::XEvent - Polymorphic class for XEvent structures

DESCRIPTION

This object wraps an XEvent. XEvent is a union of many different C structs, though they all share a few common fields. The storage space of an XEvent is constant regardless of type, and so this class is backed by a simple scalar ref.

The active struct of the union is determined by the "type" field. This object hierarchy attempts to help you make correct usage of the union with respect to the current type, so as you change the value of type the object will automatically re-bless itself into the appropriate subclass, giving you access to new struct fields.

Most of the "magic" occurs from Perl code, not XS, so it is possible to define new event types if this module lacks any in your local copy of Xlib. You can also access the "bytes" directly any time you want. And, you don't even have to use this object at all; any scalar or scalarref of the correct length can be passed to the X11::Xlib methods that expect an XEvent pointer.

METHODS

new

my $xevent= X11::Xlib::XEvent->new();
my $xevent= X11::Xlib::XEvent->new( %fields );
my $xevent= X11::Xlib::XEvent->new( \%fields );

You can construct XEvent as an empty buffer, or initialize it with a hash or hashref of fields. Initialization is performed via "pack". Unset fields are initialized to zero, and the "bytes" is always padded to the length of an XEvent.

bytes

Direct access to the bytes of the XEvent.

apply

$xevent->apply( %fields );

Alias for pack( \%fields, 1, 1 )

pack

$xevent->pack( \%fields, $consume, $warn );

Assign a set of fields to the packed struct, optionally removing them from the hashref ($consume) and warning about unknown names ($warn). If you supply a new value for "type", the XEvent will get re-blessed to the appropriate type and all union-specific fields will be zeroed before applying the rest of the supplied fields.

unpack

my $field_hashref= $xevent->unpack;

Unpack the fields of an XEvent into a hashref. The Display field gets inflated to an X11::Xlib object.

summarize

Return a human-readable string describing the Event. The format is intended to be readable by humans, and is subject to change.

COMMON ATTRIBUTES

All XEvent subclasses have the following attributes:

type

This is the key attribute that determines all the rest. Setting this value will re-bless the object to the relevant sub-class. If the type is unknown, it becomes X11::Xlib::XEvent.

display

The handle to the X11 connection that this message came from.

serial

The X11 serial number

send_event

Boolean indicating whether the event was sent with XSendEvent

SUBCLASS ATTRIBUTES

For detailed information about these structures, consult the official documentation

XButtonEvent

Used for event type: ButtonPress, ButtonRelease

button            - unsigned int
root              - Window
same_screen       - Bool
state             - unsigned int
subwindow         - Window
time              - Time
window            - Window
x                 - int
x_root            - int
y                 - int
y_root            - int

XCirculateEvent

Used for event type: CirculateNotify

event             - Window
place             - int
window            - Window

XCirculateRequestEvent

Used for event type: CirculateRequest

parent            - Window
place             - int
window            - Window

XClientMessageEvent

Used for event type: ClientMessage

b                 - char [ 20 ]
l                 - long [ 5 ]
s                 - short [ 10 ]
format            - int
message_type      - Atom
window            - Window

XColormapEvent

Used for event type: ColormapNotify

colormap          - Colormap
new               - Bool
state             - int
window            - Window

XConfigureEvent

Used for event type: ConfigureNotify

above             - Window
border_width      - int
event             - Window
height            - int
override_redirect - Bool
width             - int
window            - Window
x                 - int
y                 - int

XConfigureRequestEvent

Used for event type: ConfigureRequest

above             - Window
border_width      - int
detail            - int
height            - int
parent            - Window
value_mask        - unsigned long
width             - int
window            - Window
x                 - int
y                 - int

XCreateWindowEvent

Used for event type: CreateNotify

border_width      - int
height            - int
override_redirect - Bool
parent            - Window
width             - int
window            - Window
x                 - int
y                 - int

XCrossingEvent

Used for event type: EnterNotify, LeaveNotify

detail            - int
focus             - Bool
mode              - int
root              - Window
same_screen       - Bool
state             - unsigned int
subwindow         - Window
time              - Time
window            - Window
x                 - int
x_root            - int
y                 - int
y_root            - int

XDestroyWindowEvent

Used for event type: DestroyNotify

event             - Window
window            - Window

XErrorEvent

Used for event type: 0

error_code        - unsigned char
minor_code        - unsigned char
request_code      - unsigned char
resourceid        - XID

XExposeEvent

Used for event type: Expose

count             - int
height            - int
width             - int
window            - Window
x                 - int
y                 - int

XFocusChangeEvent

Used for event type: FocusIn, FocusOut

detail            - int
mode              - int
window            - Window

XGenericEvent

Used for event type: GenericEvent

evtype            - int
extension         - int

XGraphicsExposeEvent

Used for event type: GraphicsExpose

count             - int
drawable          - Drawable
height            - int
major_code        - int
minor_code        - int
width             - int
x                 - int
y                 - int

XGravityEvent

Used for event type: GravityNotify

event             - Window
window            - Window
x                 - int
y                 - int

XKeyEvent

Used for event type: KeyPress, KeyRelease

keycode           - unsigned int
root              - Window
same_screen       - Bool
state             - unsigned int
subwindow         - Window
time              - Time
window            - Window
x                 - int
x_root            - int
y                 - int
y_root            - int

XKeymapEvent

Used for event type: KeymapNotify

key_vector        - char [ 32 ]
window            - Window

XMapEvent

Used for event type: MapNotify

event             - Window
override_redirect - Bool
window            - Window

XMapRequestEvent

Used for event type: MapRequest

parent            - Window
window            - Window

XMappingEvent

Used for event type: MappingNotify

count             - int
first_keycode     - int
request           - int
window            - Window

XMotionEvent

Used for event type: MotionNotify

is_hint           - char
root              - Window
same_screen       - Bool
state             - unsigned int
subwindow         - Window
time              - Time
window            - Window
x                 - int
x_root            - int
y                 - int
y_root            - int

XNoExposeEvent

Used for event type: NoExpose

drawable          - Drawable
major_code        - int
minor_code        - int

XPropertyEvent

Used for event type: PropertyNotify

atom              - Atom
state             - int
time              - Time
window            - Window

XReparentEvent

Used for event type: ReparentNotify

event             - Window
override_redirect - Bool
parent            - Window
window            - Window
x                 - int
y                 - int

XResizeRequestEvent

Used for event type: ResizeRequest

height            - int
width             - int
window            - Window

XSelectionClearEvent

Used for event type: SelectionClear

selection         - Atom
time              - Time
window            - Window

XSelectionEvent

Used for event type: SelectionNotify

property          - Atom
requestor         - Window
selection         - Atom
target            - Atom
time              - Time

XSelectionRequestEvent

Used for event type: SelectionRequest

owner             - Window
property          - Atom
requestor         - Window
selection         - Atom
target            - Atom
time              - Time

XUnmapEvent

Used for event type: UnmapNotify

event             - Window
from_configure    - Bool
window            - Window

XVisibilityEvent

Used for event type: VisibilityNotify

state             - int
window            - Window

AUTHOR

Olivier Thauvin, <nanardon@nanardon.zarb.org>

Michael Conrad, <mike@nrdvana.net>

COPYRIGHT AND LICENSE

Copyright (C) 2009-2010 by Olivier Thauvin

Copyright (C) 2017-2023 by Michael Conrad

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.10.0 or, at your option, any later version of Perl 5 you may have available.