File: selection.pl

package info (click to toggle)
libx11-protocol-other-perl 28-1%2Bdeb8u1
  • links: PTS, VCS
  • area: main
  • in suites: jessie
  • size: 1,692 kB
  • ctags: 556
  • sloc: perl: 17,055; ansic: 624; sh: 238; lisp: 143; makefile: 39
file content (98 lines) | stat: -rw-r--r-- 2,995 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#!/usr/bin/perl -w

# Copyright 2013 Kevin Ryde

# This file is part of X11-Protocol-Other.
#
# X11-Protocol-Other is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
# by the Free Software Foundation; either version 3, or (at your option) any
# later version.
#
# X11-Protocol-Other 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 General
# Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with X11-Protocol-Other.  If not, see <http://www.gnu.org/licenses/>.

use 5.004;
use strict;
use X11::Protocol;
use X11::Protocol::WM;

# uncomment this to run the ### lines
use Smart::Comments;

{
  my $X = X11::Protocol->new;
  my %h;
  $X->{'event_handler'} = sub {
    %h = @_;
    ### event_handler: \%h
  };

  my $selection_atom = $X->atom('PRIMARY');

  my $window = $X->new_rsrc;
  $X->CreateWindow ($window,
                    $X->root,         # parent
                    'InputOutput',
                    0,                # depth, from parent
                    'CopyFromParent', # visual
                    0,0,              # x,y
                    100,100,          # width,height
                    0,                # border
                    background_pixel => $X->black_pixel,
                   );

  my ($owner) = $X->GetSelectionOwner($selection_atom);
  ### $owner

  # "TARGETS" atom list of supported conversions
  #
  my $prop = $X->atom('MY_PROPERTY');
  foreach my $target_name ('TARGETS',
                           'TK_APPLICATION',
                           'CLASS', 'LENGTH','LIST_LENGTH',
                           'TEXT', 'STRING',
                           'USER', 'INTEGER') {
    ### $target_name

    my $target_atom = $X->atom($target_name);
    $X->ConvertSelection($selection_atom,
                         $target_atom,
                         $prop,    # property
                         $window,  # requestor
                         0,        # time
                        );
    $X->QueryPointer($X->{'root'}); # sync

    sleep 1;
    $X->QueryPointer($X->{'root'}); # sync
    ### event property: $h{'property'} ne 'None' && $X->atom_name($h{'property'})

    if ($h{'property'} ne 'None') {
      my ($value, $type, $format, $bytes_after)
        = $X->GetProperty ($window,
                           $prop,
                           0,    # AnyPropertyType
                           0,    # offset
                           999,  # length
                           1);   # delete;
      ### $value
      ### $type
      ### type: $type && $X->atom_name($type)
      ### $format
      ### $bytes_after

      if ($type == $X->atom('ATOM')) {
        ### atoms list: map {$X->atom_name($_)} unpack 'L*', $value
      }
    }
  }

  exit 0;
}
Sequences Sequences