libx11 0.0.4 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +0 -5
- data/.travis.yml +1 -1
- data/Rakefile +1 -9
- data/example/aliases.rb +2 -0
- data/example/create_window.rb +15 -13
- data/example/window_manager.rb +30 -22
- data/lib/libx11.rb +4 -2
- data/lib/libx11/keysymdef.rb +2272 -0
- data/lib/libx11/version.rb +1 -1
- data/lib/libx11/x.rb +148 -0
- data/lib/libx11/xlib.rb +42 -0
- data/lib/libx11/xlib/display.rb +52 -0
- data/lib/libx11/xlib/xany_event.rb +13 -0
- data/lib/libx11/xlib/xbutton_event.rb +23 -0
- data/lib/libx11/xlib/xcirculate_event.rb +15 -0
- data/lib/libx11/xlib/xcirculate_request_event.rb +15 -0
- data/lib/libx11/xlib/xclient_message_event.rb +24 -0
- data/lib/libx11/xlib/xcolormap_event.rb +16 -0
- data/lib/libx11/xlib/xconfigure_event.rb +21 -0
- data/lib/libx11/xlib/xconfigure_request_event.rb +22 -0
- data/lib/libx11/xlib/xcreate_window_event.rb +20 -0
- data/lib/libx11/xlib/xcrossing_event.rb +25 -0
- data/lib/libx11/xlib/xdestroy_window_event.rb +14 -0
- data/lib/libx11/xlib/xerror_event.rb +15 -0
- data/lib/libx11/xlib/xevent.rb +77 -0
- data/lib/libx11/xlib/xexpose_event.rb +18 -0
- data/lib/libx11/xlib/xfocus_change_event.rb +15 -0
- data/lib/libx11/xlib/xgeneric_event.rb +14 -0
- data/lib/libx11/xlib/xgeneric_event_cookie.rb +16 -0
- data/lib/libx11/xlib/xgraphics_expose_event.rb +21 -0
- data/lib/libx11/xlib/xgravity_event.rb +16 -0
- data/lib/libx11/xlib/xkey_event.rb +23 -0
- data/lib/libx11/xlib/xkeymap_event.rb +14 -0
- data/lib/libx11/xlib/xmap_event.rb +15 -0
- data/lib/libx11/xlib/xmap_request_event.rb +18 -0
- data/lib/libx11/xlib/xmapping_event.rb +16 -0
- data/lib/libx11/xlib/xmotion_event.rb +23 -0
- data/lib/libx11/xlib/xno_expose_event.rb +15 -0
- data/lib/libx11/xlib/xproperty_event.rb +16 -0
- data/lib/libx11/xlib/xreparent_event.rb +18 -0
- data/lib/libx11/xlib/xresize_request_event.rb +15 -0
- data/lib/libx11/xlib/xselection_clear_event.rb +15 -0
- data/lib/libx11/xlib/xselection_event.rb +17 -0
- data/lib/libx11/xlib/xselection_request_event.rb +18 -0
- data/lib/libx11/xlib/xunmap_event.rb +15 -0
- data/lib/libx11/xlib/xvisibility_event.rb +14 -0
- data/libx11.gemspec +1 -1
- metadata +56 -13
- data/HACKING.md +0 -14
- data/ext/libx11_ruby/constants.c +0 -182
- data/ext/libx11_ruby/display.c +0 -197
- data/ext/libx11_ruby/extconf.rb +0 -6
- data/ext/libx11_ruby/libx11_ruby.c +0 -13
- data/ext/libx11_ruby/libx11_ruby.h +0 -14
- data/ext/libx11_ruby/window.c +0 -33
- data/ext/libx11_ruby/xerror_event.c +0 -104
- data/ext/libx11_ruby/xevent.c +0 -134
data/lib/libx11/version.rb
CHANGED
data/lib/libx11/x.rb
ADDED
@@ -0,0 +1,148 @@
|
|
1
|
+
module LibX11
|
2
|
+
module X
|
3
|
+
#****************************************************************
|
4
|
+
# RESERVED RESOURCE AND CONSTANT DEFINITIONS
|
5
|
+
#****************************************************************
|
6
|
+
|
7
|
+
None = 0 # universal null resource or null atom
|
8
|
+
ParentRelative = 1 # background pixmap in CreateWindow and ChangeWindowAttributes
|
9
|
+
CopyFromParent = 0 # border pixmap in CreateWindow and ChangeWindowAttributes special
|
10
|
+
# VisualID and special window class passed to CreateWindow
|
11
|
+
PointerWindow = 0 # destination window in SendEvent
|
12
|
+
InputFocus = 1 # destination window in SendEvent
|
13
|
+
PointerRoot = 1 # focus window in SetInputFocus
|
14
|
+
AnyPropertyType = 0 # special Atom, passed to GetProperty
|
15
|
+
AnyKey = 0 # special Key Code, passed to GrabKey
|
16
|
+
AnyButton = 0 # special Button Code, passed to GrabButton
|
17
|
+
AllTemporary = 0 # special Resource ID passed to KillClient
|
18
|
+
CurrentTime = 0 # special Time
|
19
|
+
NoSymbol = 0 # special KeySym
|
20
|
+
|
21
|
+
#***************************************************************
|
22
|
+
# EVENT DEFINITIONS
|
23
|
+
#***************************************************************
|
24
|
+
|
25
|
+
# Input Event Masks. Used as event-mask window attribute and as arguments
|
26
|
+
# to Grab requests. Not to be confused with event names.
|
27
|
+
|
28
|
+
NoEventMask = 0
|
29
|
+
KeyPressMask = (1<<0)
|
30
|
+
KeyReleaseMask = (1<<1)
|
31
|
+
ButtonPressMask = (1<<2)
|
32
|
+
ButtonReleaseMask = (1<<3)
|
33
|
+
EnterWindowMask = (1<<4)
|
34
|
+
LeaveWindowMask = (1<<5)
|
35
|
+
PointerMotionMask = (1<<6)
|
36
|
+
PointerMotionHintMask = (1<<7)
|
37
|
+
Button1MotionMask = (1<<8)
|
38
|
+
Button2MotionMask = (1<<9)
|
39
|
+
Button3MotionMask = (1<<10)
|
40
|
+
Button4MotionMask = (1<<11)
|
41
|
+
Button5MotionMask = (1<<12)
|
42
|
+
ButtonMotionMask = (1<<13)
|
43
|
+
KeymapStateMask = (1<<14)
|
44
|
+
ExposureMask = (1<<15)
|
45
|
+
VisibilityChangeMask = (1<<16)
|
46
|
+
StructureNotifyMask = (1<<17)
|
47
|
+
ResizeRedirectMask = (1<<18)
|
48
|
+
SubstructureNotifyMask = (1<<19)
|
49
|
+
SubstructureRedirectMask = (1<<20)
|
50
|
+
FocusChangeMask = (1<<21)
|
51
|
+
PropertyChangeMask = (1<<22)
|
52
|
+
ColormapChangeMask = (1<<23)
|
53
|
+
OwnerGrabButtonMask = (1<<24)
|
54
|
+
|
55
|
+
# Event names. Used in "type" field in XEvent structures. Not to be
|
56
|
+
# confused with event masks above. They start from 2 because 0 and 1
|
57
|
+
# are reserved in the protocol for errors and replies.
|
58
|
+
|
59
|
+
KeyPress = 2
|
60
|
+
KeyRelease = 3
|
61
|
+
ButtonPress = 4
|
62
|
+
ButtonRelease = 5
|
63
|
+
MotionNotify = 6
|
64
|
+
EnterNotify = 7
|
65
|
+
LeaveNotify = 8
|
66
|
+
FocusIn = 9
|
67
|
+
FocusOut = 10
|
68
|
+
KeymapNotify = 11
|
69
|
+
Expose = 12
|
70
|
+
GraphicsExpose = 13
|
71
|
+
NoExpose = 14
|
72
|
+
VisibilityNotify = 15
|
73
|
+
CreateNotify = 16
|
74
|
+
DestroyNotify = 17
|
75
|
+
UnmapNotify = 18
|
76
|
+
MapNotify = 19
|
77
|
+
MapRequest = 20
|
78
|
+
ReparentNotify = 21
|
79
|
+
ConfigureNotify = 22
|
80
|
+
ConfigureRequest = 23
|
81
|
+
GravityNotify = 24
|
82
|
+
ResizeRequest = 25
|
83
|
+
CirculateNotify = 26
|
84
|
+
CirculateRequest = 27
|
85
|
+
PropertyNotify = 28
|
86
|
+
SelectionClear = 29
|
87
|
+
SelectionRequest = 30
|
88
|
+
SelectionNotify = 31
|
89
|
+
ColormapNotify = 32
|
90
|
+
ClientMessage = 33
|
91
|
+
MappingNotify = 34
|
92
|
+
GenericEvent = 35
|
93
|
+
LASTEvent = 36
|
94
|
+
|
95
|
+
# Key masks. Used as modifiers to GrabButton and GrabKey, results of QueryPointer,
|
96
|
+
# state in various key-, mouse-, and button-related events.
|
97
|
+
|
98
|
+
ShiftMask = (1<<0)
|
99
|
+
LockMask = (1<<1)
|
100
|
+
ControlMask = (1<<2)
|
101
|
+
Mod1Mask = (1<<3)
|
102
|
+
Mod2Mask = (1<<4)
|
103
|
+
Mod3Mask = (1<<5)
|
104
|
+
Mod4Mask = (1<<6)
|
105
|
+
Mod5Mask = (1<<7)
|
106
|
+
|
107
|
+
# button masks. Used in same manner as Key masks above. Not to be confused
|
108
|
+
# with button names below.
|
109
|
+
|
110
|
+
Button1Mask = (1<<8)
|
111
|
+
Button2Mask = (1<<9)
|
112
|
+
Button3Mask = (1<<10)
|
113
|
+
Button4Mask = (1<<11)
|
114
|
+
Button5Mask = (1<<12)
|
115
|
+
AnyModifier = (1<<15)
|
116
|
+
|
117
|
+
# GrabPointer, GrabButton, GrabKeyboard, GrabKey Modes
|
118
|
+
|
119
|
+
GrabModeSync = 0
|
120
|
+
GrabModeAsync = 1
|
121
|
+
|
122
|
+
#****************************************************************
|
123
|
+
# ERROR CODES
|
124
|
+
#****************************************************************
|
125
|
+
|
126
|
+
Success = 0
|
127
|
+
BadRequest = 1
|
128
|
+
BadValue = 2
|
129
|
+
BadWindow = 3
|
130
|
+
BadPixmap = 4
|
131
|
+
BadAtom = 5
|
132
|
+
BadCursor = 6
|
133
|
+
BadFont = 7
|
134
|
+
BadMatch = 8
|
135
|
+
BadDrawable = 9
|
136
|
+
BadAccess = 10
|
137
|
+
BadAlloc = 11
|
138
|
+
BadColor = 12
|
139
|
+
BadGC = 13
|
140
|
+
BadIDChoice = 14
|
141
|
+
BadName = 15
|
142
|
+
BadLength = 16
|
143
|
+
BadImplementation = 17
|
144
|
+
|
145
|
+
FirstExtensionError = 128
|
146
|
+
LastExtensionError = 255
|
147
|
+
end
|
148
|
+
end
|
data/lib/libx11/xlib.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
module LibX11
|
2
|
+
module Xlib
|
3
|
+
extend FFI::Library
|
4
|
+
|
5
|
+
ffi_lib 'X11'
|
6
|
+
|
7
|
+
typedef :int, :Bool
|
8
|
+
typedef :uchar, :KeyCode
|
9
|
+
typedef :ulong, :Atom
|
10
|
+
typedef :ulong, :Time
|
11
|
+
typedef :ulong, :XID
|
12
|
+
typedef :XID, :Colormap
|
13
|
+
typedef :XID, :Drawable
|
14
|
+
typedef :XID, :KeySym
|
15
|
+
typedef :XID, :Window
|
16
|
+
|
17
|
+
require 'libx11/xlib/display'
|
18
|
+
require 'libx11/xlib/xevent'
|
19
|
+
|
20
|
+
callback :XErrorHandler, [Display.ptr, XErrorEvent.ptr], :int
|
21
|
+
|
22
|
+
attach_function :XOpenDisplay, [:string], Display.ptr
|
23
|
+
attach_function :XCreateSimpleWindow, [Display.ptr, :Window, :int, :int, :uint, :uint, :uint, :ulong, :ulong], :Window
|
24
|
+
attach_function :XLookupKeysym, [XKeyEvent.ptr, :int], :KeySym
|
25
|
+
attach_function :XDefaultRootWindow, [Display.ptr], :Window
|
26
|
+
attach_function :XBlackPixel, [Display.ptr, :int], :ulong
|
27
|
+
attach_function :XWhitePixel, [Display.ptr, :int], :ulong
|
28
|
+
attach_function :XDisplayString, [Display.ptr], :string
|
29
|
+
attach_function :XSetErrorHandler, [:XErrorHandler], :XErrorHandler
|
30
|
+
attach_function :XCloseDisplay, [Display.ptr], :int
|
31
|
+
attach_function :XConnectionNumber, [Display.ptr], :int
|
32
|
+
attach_function :XDefaultScreen, [Display.ptr], :int
|
33
|
+
attach_function :XDestroyWindow, [Display.ptr, :Window], :int
|
34
|
+
attach_function :XGrabKey, [Display.ptr, :int, :uint, :Window, :Bool, :int, :int], :int
|
35
|
+
attach_function :XKeysymToKeycode, [Display.ptr, :KeySym], :KeyCode
|
36
|
+
attach_function :XMapWindow, [Display.ptr, :Window], :int
|
37
|
+
attach_function :XNextEvent, [Display.ptr, XEvent.ptr], :int, blocking: true
|
38
|
+
attach_function :XSelectInput, [Display.ptr, :Window, :long], :int
|
39
|
+
attach_function :XSync, [Display.ptr, :Bool], :int, blocking: true
|
40
|
+
attach_function :XUngrabKey, [Display.ptr, :int, :uint, :Window], :int
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module LibX11
|
2
|
+
module Xlib
|
3
|
+
class Display < FFI::Struct
|
4
|
+
layout(
|
5
|
+
:ext_data, :pointer,
|
6
|
+
:private1, :pointer,
|
7
|
+
:fd, :int,
|
8
|
+
:private2, :int,
|
9
|
+
:proto_major_version, :int,
|
10
|
+
:proto_minor_version, :int,
|
11
|
+
:vendor, :string,
|
12
|
+
:private3, :XID,
|
13
|
+
:private4, :XID,
|
14
|
+
:private5, :XID,
|
15
|
+
:private6, :int,
|
16
|
+
:resource_alloc, :pointer,
|
17
|
+
:byte_order, :int,
|
18
|
+
:bitmap_unit, :int,
|
19
|
+
:bitmap_pad, :int,
|
20
|
+
:bitmap_bit_order, :int,
|
21
|
+
:nformats, :int,
|
22
|
+
:pixmap_format, :pointer,
|
23
|
+
:private8, :int,
|
24
|
+
:release, :int,
|
25
|
+
:private9, :pointer,
|
26
|
+
:private10, :pointer,
|
27
|
+
:qlen, :int,
|
28
|
+
:last_request_read, :ulong,
|
29
|
+
:request, :ulong,
|
30
|
+
:private11, :pointer,
|
31
|
+
:private12, :pointer,
|
32
|
+
:private13, :pointer,
|
33
|
+
:private14, :pointer,
|
34
|
+
:max_request_size, :uint,
|
35
|
+
:db, :pointer,
|
36
|
+
:private15, :pointer,
|
37
|
+
:display_name, :string,
|
38
|
+
:default_screen, :int,
|
39
|
+
:nscreens, :int,
|
40
|
+
:screens, :pointer,
|
41
|
+
:motion_buffer, :ulong,
|
42
|
+
:private16, :ulong,
|
43
|
+
:min_keycode, :int,
|
44
|
+
:max_keycode, :int,
|
45
|
+
:private17, :pointer,
|
46
|
+
:private18, :pointer,
|
47
|
+
:private19, :int,
|
48
|
+
:xdefaults, :string,
|
49
|
+
)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module LibX11
|
2
|
+
module Xlib
|
3
|
+
class XButtonEvent < FFI::Struct
|
4
|
+
layout(
|
5
|
+
:type, :int,
|
6
|
+
:serial, :ulong,
|
7
|
+
:send_event, :Bool,
|
8
|
+
:display, Display.ptr,
|
9
|
+
:window, :Window,
|
10
|
+
:root, :Window,
|
11
|
+
:subwindow, :Window,
|
12
|
+
:time, :Time,
|
13
|
+
:x, :int,
|
14
|
+
:y, :int,
|
15
|
+
:x_root, :int,
|
16
|
+
:y_root, :int,
|
17
|
+
:state, :uint,
|
18
|
+
:button, :uint,
|
19
|
+
:same_screen, :Bool,
|
20
|
+
)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module LibX11
|
2
|
+
module Xlib
|
3
|
+
class XClientMessageEvent < FFI::Struct
|
4
|
+
class Data < FFI::Union
|
5
|
+
layout(
|
6
|
+
:b, [:char, 20],
|
7
|
+
:s, [:short, 10],
|
8
|
+
:l, [:long, 5],
|
9
|
+
)
|
10
|
+
end
|
11
|
+
|
12
|
+
layout(
|
13
|
+
:type, :int,
|
14
|
+
:serial, :ulong,
|
15
|
+
:send_event, :Bool,
|
16
|
+
:display, :pointer,
|
17
|
+
:window, :Window,
|
18
|
+
:message_type, :Atom,
|
19
|
+
:format, :int,
|
20
|
+
:data, Data,
|
21
|
+
)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module LibX11
|
2
|
+
module Xlib
|
3
|
+
class XColormapEvent < FFI::Struct
|
4
|
+
layout(
|
5
|
+
:type, :int,
|
6
|
+
:serial, :ulong,
|
7
|
+
:send_event, :Bool,
|
8
|
+
:display, Display.ptr,
|
9
|
+
:window, :Window,
|
10
|
+
:colormap, :Colormap,
|
11
|
+
:new, :Bool,
|
12
|
+
:state, :int,
|
13
|
+
)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module LibX11
|
2
|
+
module Xlib
|
3
|
+
class XConfigureEvent < FFI::Struct
|
4
|
+
layout(
|
5
|
+
:type, :int,
|
6
|
+
:serial, :ulong,
|
7
|
+
:send_event, :Bool,
|
8
|
+
:display, Display.ptr,
|
9
|
+
:event, :Window,
|
10
|
+
:window, :Window,
|
11
|
+
:x, :int,
|
12
|
+
:y, :int,
|
13
|
+
:width, :int,
|
14
|
+
:height, :int,
|
15
|
+
:border_width, :int,
|
16
|
+
:above, :Window,
|
17
|
+
:override_redirect, :Bool,
|
18
|
+
)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module LibX11
|
2
|
+
module Xlib
|
3
|
+
class XConfigureRequestEvent < FFI::Struct
|
4
|
+
layout(
|
5
|
+
:type, :int,
|
6
|
+
:serial, :ulong,
|
7
|
+
:send_event, :Bool,
|
8
|
+
:display, Display.ptr,
|
9
|
+
:event, :Window,
|
10
|
+
:window, :Window,
|
11
|
+
:x, :int,
|
12
|
+
:y, :int,
|
13
|
+
:width, :int,
|
14
|
+
:height, :int,
|
15
|
+
:border_width, :int,
|
16
|
+
:above, :Window,
|
17
|
+
:detail, :int,
|
18
|
+
:value_mask, :ulong,
|
19
|
+
)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module LibX11
|
2
|
+
module Xlib
|
3
|
+
class XCreateWindowEvent < FFI::Struct
|
4
|
+
layout(
|
5
|
+
:type, :int,
|
6
|
+
:serial, :ulong,
|
7
|
+
:send_event, :Bool,
|
8
|
+
:display, Display.ptr,
|
9
|
+
:parent, :Window,
|
10
|
+
:window, :Window,
|
11
|
+
:x, :int,
|
12
|
+
:y, :int,
|
13
|
+
:width, :int,
|
14
|
+
:height, :int,
|
15
|
+
:border_width, :int,
|
16
|
+
:override_redirect, :Bool,
|
17
|
+
)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module LibX11
|
2
|
+
module Xlib
|
3
|
+
class XCrossingEvent < FFI::Struct
|
4
|
+
layout(
|
5
|
+
:type, :int,
|
6
|
+
:serial, :ulong,
|
7
|
+
:send_event, :Bool,
|
8
|
+
:display, Display.ptr,
|
9
|
+
:window, :Window,
|
10
|
+
:root, :Window,
|
11
|
+
:subwindow, :Window,
|
12
|
+
:time, :Time,
|
13
|
+
:x, :int,
|
14
|
+
:y, :int,
|
15
|
+
:x_root, :int,
|
16
|
+
:y_root, :int,
|
17
|
+
:mode, :int,
|
18
|
+
:detail, :int,
|
19
|
+
:same_screen, :Bool,
|
20
|
+
:focus, :Bool,
|
21
|
+
:state, :uint
|
22
|
+
)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|