X11::Xlib::Window - XID wrapper for Window
use X11::Xlib; my $display = X11::Xlib->new(); my $window = $display->RootWindow(); ... = $display->get_cached_window(1234);
(see X11::Xlib::XID for inherited methods/attributes)
Calls "XGetWindowAttributes" in X11::Xlib, caches the result, and returns the instance of X11::Xlib::XWindowAttributes.
Clear any cached value of the window so that the next access loads it fresh from the server.
for ($window->get_property_list) { ... }
Returns a list of all properties available on the window. Each property is an atom dualvar that stringifies as the property name but can be passed to functions that expect the ID.
atom
$window->get_property($prop_atom); $window->get_property($prop_atom, $type_atom, $offset, $max_len); # { # type => $atom, # actual type of property # count => 1, # number of elements in multi-values property # format => $n, # 8/16/32 meaning 'char','short','long' # remaining => $n, # bytes unread # data => $bytes, # payload, needs unpack()ed except for strings # }
Return a hashref describing a property, or undef if the property does not exist.
my $prop= $window->get_decoded_property($prop_atom); ...->get_decoded_property($prop_atom, $type_atom);
This fetches a property and attempts to decode it into the best Perl representation. If the returned type is not known this throws an exception; you'll have to use get_property and decode it yourself.
get_property
For strings, this returns a single scalar. For decoded objects, this returns one object or an arrayref of objects. So, you always get one return value, or undef.
For conveniently unrolling this into list context, use get_decoded_property_items.
get_decoded_property_items
my @items= $window->get_decoded_property_items($prop_atom, $type_atom=Any); # Example: dump out all properties of the window for my $prop ($window->get_property_list) { eval { say join " ", $prop, "=", $window->get_decoded_property_items($prop); } or say "$prop: Cant decode ".$window->get_property($prop)->{type}; }
The return value is a list, since many properties are multi-value but many are single-value, and there's no good way to know which properties are intended as arrays with one element.
$window->set_property($prop_atom, $type_atom, $data, $format, $count); $window->set_property($prop_atom, $type_atom, \@value); # for known types $window->set_property($prop_atom, undef); # delete the property
In the first form, the parameters basically just go to "XChangeProperty" in X11::Xlib after supplying defaults for size and count. $item_size must be 8, 16, or 32 (which means 'long' regardless of whether long is 32 bits), and count can be given or derived from the length of $data.
$item_size
long
$data
In the second form, a known $type_atom may have special support for encoding an array of arguments. The arguments must be given in an array to indicate the user wants some support in packing them.
$type_atom
In the third form, undefined type results in the deletion of the property.
my ($w, $h)= $window->get_w_h
Return width and height of the window by calling XGetGeometry. This never uses a cache and always returns the current size of the window, since often it has been altered by window managers etc.
For a cached value, just use $window->attributes->width etc.
$window->attributes->width
$win->show; $win->show(1); $win->show(0); # equivalent to 'hide'
Calls XMapWindow to request that the X server display the window.
You can pass a boolean argument to conditionally call "hide" instead.
Calls XUnmapWindow to request the window be hidden.
my $current_mask= $window->event_mask; $window->event_mask( $current_mask | SubstructureRedirectMask );
Get or set the event mask. Reading this value may return cached data, or else cause a call to XGetWindowAttibutes. Setting the event mask uses XSelectInput, and updates the cache.
$window->event_mask_include( @event_masks );
Read the current event mask (unless cached already), then bitwise OR it with each parameter, then set the mask on the window if anything changed.
$window->event_mask_exclude( @event_masks );
Read the current event mask (unless cached already), then bitwise AND NOT with each parameter, then set the mask on the window if anything changed.
$window->set_bounding_region($region); $window->set_bounding_region($region, $x_ofs, $y_ofs);
Set the region for the boundary of the window, optionally offset by an (x,y) coordinate. $region may be undef or 0 to unset the region.
$region
$window->set_input_region($region); $window->set_input_region($region, $x_ofs, $y_ofs);
Set the input "hit" region of the window, optionally offset by an (x,y) coordinate. $region may be undef or 0 to unset the region.
X11::Xlib
Olivier Thauvin, <nanardon@nanardon.zarb.org>
Michael Conrad, <mike@nrdvana.net>
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.
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.