X11::Xlib::XEvent - Polymorphic class for XEvent structures
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 heirarchy 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.
type
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.
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". Un-set fields are initialized to zero, and the "bytes" is always padded to the length of an XEvent.
Direct access to the bytes of the XEvent.
$xevent->apply( %fields );
Alias for pack( \%fields, 1, 1 )
pack( \%fields, 1, 1 )
$xevent->pack( \%fields, $consume, $warn );
Assign a set of fields to the packed struct, optionally removing them from the hashref ($consume) and warning about un-known 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.
$consume
$warn
my $field_hashref= $xevent->unpack;
Unpack the fields of an XEvent into a hashref. The Display field gets inflated to an X11::Xlib object.
All XEvent subclasses have the following attributes:
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.
X11::Xlib::XEvent
The handle to the X11 connection that this message came from.
The X11 serial number
The Window XID the message is associated with, or 0.
Boolean indicating whether the event was sent with XSendEvent
XSendEvent
For detailed information about these structures, consult the official documentation
Used for event type: ButtonPress, ButtonRelease
button - unsigned int root - Window same_screen - Bool state - unsigned int subwindow - Window time - Time x - int x_root - int y - int y_root - int
Used for event type: CirculateNotify
event - Window place - int
Used for event type: CirculateRequest
parent - Window place - int
Used for event type: ClientMessage
b - char [ 20 ] l - long [ 5 ] s - short [ 10 ] format - int message_type - Atom
Used for event type: ColormapNotify
colormap - Colormap new - Bool state - int
Used for event type: ConfigureNotify
above - Window border_width - int event - Window height - int override_redirect - Bool width - int x - int y - int
Used for event type: ConfigureRequest
above - Window border_width - int detail - int height - int parent - Window value_mask - unsigned long width - int x - int y - int
Used for event type: CreateNotify
border_width - int height - int override_redirect - Bool parent - Window width - int x - int y - int
Used for event type: EnterNotify, LeaveNotify
detail - int focus - Bool mode - int root - Window same_screen - Bool state - unsigned int subwindow - Window time - Time x - int x_root - int y - int y_root - int
Used for event type: DestroyNotify
event - Window
Used for event type: Expose
count - int height - int width - int x - int y - int
Used for event type: FocusIn, FocusOut
detail - int mode - int
Used for event type: GenericEvent
evtype - int extension - int
Used for event type: GraphicsExpose
count - int drawable - Drawable height - int major_code - int minor_code - int width - int x - int y - int
Used for event type: GravityNotify
event - Window x - int y - int
Used for event type: KeyPress, KeyRelease
keycode - unsigned int root - Window same_screen - Bool state - unsigned int subwindow - Window time - Time x - int x_root - int y - int y_root - int
Used for event type: KeymapNotify
key_vector - char [ 32 ]
Used for event type: MapNotify
event - Window override_redirect - Bool
Used for event type: MapRequest
parent - Window
Used for event type: MappingNotify
count - int first_keycode - int request - int
Used for event type: MotionNotify
is_hint - char root - Window same_screen - Bool state - unsigned int subwindow - Window time - Time x - int x_root - int y - int y_root - int
Used for event type: NoExpose
drawable - Drawable major_code - int minor_code - int
Used for event type: PropertyNotify
atom - Atom state - int time - Time
Used for event type: ReparentNotify
event - Window override_redirect - Bool parent - Window x - int y - int
Used for event type: ResizeRequest
height - int width - int
Used for event type: SelectionClear
selection - Atom time - Time
Used for event type: SelectionNotify
property - Atom requestor - Window selection - Atom target - Atom time - Time
Used for event type: SelectionRequest
owner - Window property - Atom requestor - Window selection - Atom target - Atom time - Time
Used for event type: UnmapNotify
event - Window from_configure - Bool
Used for event type: VisibilityNotify
state - int
Olivier Thauvin, <nanardon@nanardon.zarb.org>
Michael Conrad, <mike@nrdvana.net>
Copyright (C) 2009-2010 by Olivier Thauvin
Copyright (C) 2017 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.
To install X11::Xlib, copy and paste the appropriate command in to your terminal.
cpanm
cpanm X11::Xlib
CPAN shell
perl -MCPAN -e shell install X11::Xlib
For more information on module installation, please visit the detailed CPAN module installation guide.