libx11 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/HACKING.md +14 -0
- data/bin/window-manager +8 -0
- data/example/window_manager.rb +8 -4
- data/ext/libx11_ruby/constants.c +56 -0
- data/ext/libx11_ruby/display.c +48 -0
- data/ext/libx11_ruby/libx11_ruby.c +1 -0
- data/ext/libx11_ruby/libx11_ruby.h +1 -0
- data/ext/libx11_ruby/xevent.c +0 -28
- data/lib/libx11/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c9d16b4125d802e8312d5ef49bdcf08f435a3243
|
4
|
+
data.tar.gz: f0fa4853ef29d30a55e53bfe5d7517a9a29bf018
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f07f760b72743e155d5683be2dd1c57a7842d3ade1fddd13d9bdca4092931f557c3cde87099f9c09dd75f63157fd753996a69de435de414df79dc84e1a02395f
|
7
|
+
data.tar.gz: bb325552f120212bd0a423517087b2e4298e41ad15ada7e8a7e4fa271b9b6f2ac149ff96277b7232c65dd15a7e2652ab68318ad3834b62c85dc78f4cfa218abf
|
data/HACKING.md
ADDED
data/bin/window-manager
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# Write this to ~/.xinitrc and execute `startx`. (Don't execute this directly!)
|
4
|
+
# `exec /path/to/libx11-ruby/bin/window-manager`
|
5
|
+
|
6
|
+
Dir.chdir(File.expand_path('../', __dir__)) do
|
7
|
+
exec('bundle', 'exec', 'ruby', 'example/window_manager.rb')
|
8
|
+
end
|
data/example/window_manager.rb
CHANGED
@@ -5,7 +5,7 @@ class XServer
|
|
5
5
|
display = LibX11.xopen_display
|
6
6
|
yield(display)
|
7
7
|
ensure
|
8
|
-
LibX11.xclose_display(display)
|
8
|
+
LibX11.xclose_display(display) if display
|
9
9
|
end
|
10
10
|
|
11
11
|
def self.bind_events(display, window, event_mask)
|
@@ -26,11 +26,15 @@ class XServer
|
|
26
26
|
end
|
27
27
|
|
28
28
|
XServer.with_connection do |display|
|
29
|
+
if display.nil?
|
30
|
+
abort 'Failed to connect to X server.'
|
31
|
+
end
|
32
|
+
|
29
33
|
XServer.bind_events(
|
30
34
|
display, display.default_root_window,
|
31
|
-
LibX11::
|
32
|
-
LibX11::
|
33
|
-
LibX11::
|
35
|
+
LibX11::KEY_PRESS_MASK |
|
36
|
+
LibX11::SUBSTRUCTURE_REDIRECT_MASK |
|
37
|
+
LibX11::SUBSTRUCTURE_NOTIFY_MASK,
|
34
38
|
)
|
35
39
|
|
36
40
|
LibX11.xset_error_handler do |display, error|
|
@@ -0,0 +1,56 @@
|
|
1
|
+
#include "libx11_ruby.h"
|
2
|
+
#include <X11/Xlib.h>
|
3
|
+
|
4
|
+
void
|
5
|
+
Init_libx11_constants(void)
|
6
|
+
{
|
7
|
+
// reserved resource and constant definitions
|
8
|
+
rb_define_const(rb_mLibX11, "NONE", LONG2NUM(None));
|
9
|
+
rb_define_const(rb_mLibX11, "PARENT_RELATIVE", LONG2NUM(ParentRelative));
|
10
|
+
rb_define_const(rb_mLibX11, "COPY_FROM_PARENT", LONG2NUM(CopyFromParent));
|
11
|
+
rb_define_const(rb_mLibX11, "POINTER_WINDOW", LONG2NUM(PointerWindow));
|
12
|
+
rb_define_const(rb_mLibX11, "INPUT_FOCUS", LONG2NUM(InputFocus));
|
13
|
+
rb_define_const(rb_mLibX11, "POINTER_ROOT", LONG2NUM(PointerRoot));
|
14
|
+
rb_define_const(rb_mLibX11, "ANY_PROPERTY_TYPE", LONG2NUM(AnyPropertyType));
|
15
|
+
rb_define_const(rb_mLibX11, "ANY_KEY", LONG2NUM(AnyKey));
|
16
|
+
rb_define_const(rb_mLibX11, "ANY_BUTTON", LONG2NUM(AnyButton));
|
17
|
+
rb_define_const(rb_mLibX11, "ALL_TEMPORARY", LONG2NUM(AllTemporary));
|
18
|
+
rb_define_const(rb_mLibX11, "CURRENT_TIME", LONG2NUM(CurrentTime));
|
19
|
+
rb_define_const(rb_mLibX11, "NO_SYMBOL", LONG2NUM(NoSymbol));
|
20
|
+
|
21
|
+
// input event masks
|
22
|
+
rb_define_const(rb_mLibX11, "NO_EVENT_MASK", LONG2NUM(NoEventMask));
|
23
|
+
rb_define_const(rb_mLibX11, "KEY_PRESS_MASK", LONG2NUM(KeyPressMask));
|
24
|
+
rb_define_const(rb_mLibX11, "KEY_RELEASE_MASK", LONG2NUM(KeyReleaseMask));
|
25
|
+
rb_define_const(rb_mLibX11, "BUTTON_PRESS_MASK", LONG2NUM(ButtonPressMask));
|
26
|
+
rb_define_const(rb_mLibX11, "BUTTON_RELEASE_MASK", LONG2NUM(ButtonReleaseMask));
|
27
|
+
rb_define_const(rb_mLibX11, "ENTER_WINDOW_MASK", LONG2NUM(EnterWindowMask));
|
28
|
+
rb_define_const(rb_mLibX11, "LEAVE_WINDOW_MASK", LONG2NUM(LeaveWindowMask));
|
29
|
+
rb_define_const(rb_mLibX11, "POINTER_MOTION_MASK", LONG2NUM(PointerMotionMask));
|
30
|
+
rb_define_const(rb_mLibX11, "POINTER_MOTION_HINT_MASK", LONG2NUM(PointerMotionHintMask));
|
31
|
+
rb_define_const(rb_mLibX11, "BUTTON1_MOTION_MASK", LONG2NUM(Button1MotionMask));
|
32
|
+
rb_define_const(rb_mLibX11, "BUTTON2_MOTION_MASK", LONG2NUM(Button2MotionMask));
|
33
|
+
rb_define_const(rb_mLibX11, "BUTTON3_MOTION_MASK", LONG2NUM(Button3MotionMask));
|
34
|
+
rb_define_const(rb_mLibX11, "BUTTON4_MOTION_MASK", LONG2NUM(Button4MotionMask));
|
35
|
+
rb_define_const(rb_mLibX11, "BUTTON5_MOTION_MASK", LONG2NUM(Button5MotionMask));
|
36
|
+
rb_define_const(rb_mLibX11, "BUTTON_MOTION_MASK", LONG2NUM(ButtonMotionMask));
|
37
|
+
rb_define_const(rb_mLibX11, "KEYMAP_STATE_MASK", LONG2NUM(KeymapStateMask));
|
38
|
+
rb_define_const(rb_mLibX11, "EXPOSURE_MASK", LONG2NUM(ExposureMask));
|
39
|
+
rb_define_const(rb_mLibX11, "VISIBILITY_CHANGE_MASK", LONG2NUM(VisibilityChangeMask));
|
40
|
+
rb_define_const(rb_mLibX11, "STRUCTURE_NOTIFY_MASK", LONG2NUM(StructureNotifyMask));
|
41
|
+
rb_define_const(rb_mLibX11, "RESIZE_REDIRECT_MASK", LONG2NUM(ResizeRedirectMask));
|
42
|
+
rb_define_const(rb_mLibX11, "SUBSTRUCTURE_NOTIFY_MASK", LONG2NUM(SubstructureNotifyMask));
|
43
|
+
rb_define_const(rb_mLibX11, "SUBSTRUCTURE_REDIRECT_MASK", LONG2NUM(SubstructureRedirectMask));
|
44
|
+
rb_define_const(rb_mLibX11, "FOCUS_CHANGE_MASK", LONG2NUM(FocusChangeMask));
|
45
|
+
rb_define_const(rb_mLibX11, "PROPERTY_CHANGE_MASK", LONG2NUM(PropertyChangeMask));
|
46
|
+
rb_define_const(rb_mLibX11, "COLORMAP_CHANGE_MASK", LONG2NUM(ColormapChangeMask));
|
47
|
+
rb_define_const(rb_mLibX11, "OWNER_GRAB_BUTTON_MASK", LONG2NUM(OwnerGrabButtonMask));
|
48
|
+
|
49
|
+
// button masks
|
50
|
+
rb_define_const(rb_mLibX11, "BUTTON1_MASK", LONG2NUM(Button1Mask));
|
51
|
+
rb_define_const(rb_mLibX11, "BUTTON2_MASK", LONG2NUM(Button2Mask));
|
52
|
+
rb_define_const(rb_mLibX11, "BUTTON3_MASK", LONG2NUM(Button3Mask));
|
53
|
+
rb_define_const(rb_mLibX11, "BUTTON4_MASK", LONG2NUM(Button4Mask));
|
54
|
+
rb_define_const(rb_mLibX11, "BUTTON5_MASK", LONG2NUM(Button5Mask));
|
55
|
+
rb_define_const(rb_mLibX11, "ANY_MODIFIER", LONG2NUM(AnyModifier));
|
56
|
+
}
|
data/ext/libx11_ruby/display.c
CHANGED
@@ -41,6 +41,7 @@ rb_libx11_xopen_display(int argc, VALUE *argv, RB_UNUSED_VAR(VALUE self))
|
|
41
41
|
Check_Type(display_name, T_STRING);
|
42
42
|
display = XOpenDisplay(RSTRING_PTR(display_name));
|
43
43
|
}
|
44
|
+
if (display == NULL) return Qnil;
|
44
45
|
return TypedData_Wrap_Struct(rb_cDisplay, &display_type, display);
|
45
46
|
}
|
46
47
|
|
@@ -164,6 +165,50 @@ rb_display_xsync(VALUE self, VALUE discard)
|
|
164
165
|
return INT2NUM(ret);
|
165
166
|
}
|
166
167
|
|
168
|
+
/*
|
169
|
+
* Xlib XGrabKey
|
170
|
+
*/
|
171
|
+
static VALUE
|
172
|
+
rb_display_xgrab_key(VALUE self, VALUE keycode, VALUE modifiers, VALUE grab_window,
|
173
|
+
VALUE owner_events, VALUE pointer_mode, VALUE keyboard_mode)
|
174
|
+
{
|
175
|
+
Display *display;
|
176
|
+
int ret;
|
177
|
+
|
178
|
+
TypedData_Get_Struct(self, Display, &display_type, display);
|
179
|
+
ret = XGrabKey(display, NUM2INT(keycode), NUM2UINT(modifiers), NUM2ULONG(grab_window),
|
180
|
+
RTEST(owner_events), NUM2INT(pointer_mode), NUM2INT(keyboard_mode));
|
181
|
+
return INT2NUM(ret);
|
182
|
+
}
|
183
|
+
|
184
|
+
/*
|
185
|
+
* Xlib XUngrabKey
|
186
|
+
*/
|
187
|
+
static VALUE
|
188
|
+
rb_display_xungrab_key(VALUE self, VALUE keycode, VALUE modifiers, VALUE grab_window)
|
189
|
+
{
|
190
|
+
Display *display;
|
191
|
+
int ret;
|
192
|
+
|
193
|
+
TypedData_Get_Struct(self, Display, &display_type, display);
|
194
|
+
ret = XUngrabKey(display, NUM2INT(keycode), NUM2UINT(modifiers), NUM2ULONG(grab_window));
|
195
|
+
return INT2NUM(ret);
|
196
|
+
}
|
197
|
+
|
198
|
+
/*
|
199
|
+
* Xlib XKeysymToKeycode
|
200
|
+
*/
|
201
|
+
static VALUE
|
202
|
+
rb_display_xkeysym_to_keycode(VALUE self, VALUE keysym)
|
203
|
+
{
|
204
|
+
Display *display;
|
205
|
+
unsigned char keycode;
|
206
|
+
|
207
|
+
TypedData_Get_Struct(self, Display, &display_type, display);
|
208
|
+
keycode = XKeysymToKeycode(display, NUM2ULONG(keysym));
|
209
|
+
return INT2FIX((int)keycode);
|
210
|
+
}
|
211
|
+
|
167
212
|
void
|
168
213
|
Init_libx11_display(void)
|
169
214
|
{
|
@@ -179,4 +224,7 @@ Init_libx11_display(void)
|
|
179
224
|
rb_define_method(rb_cDisplay, "xmap_window", rb_display_xmap_window, 1);
|
180
225
|
rb_define_method(rb_cDisplay, "xselect_input", rb_display_xselect_input, 2);
|
181
226
|
rb_define_method(rb_cDisplay, "xsync", rb_display_xsync, 1);
|
227
|
+
rb_define_method(rb_cDisplay, "xgrab_key", rb_display_xgrab_key, 6);
|
228
|
+
rb_define_method(rb_cDisplay, "xungrab_key", rb_display_xungrab_key, 3);
|
229
|
+
rb_define_method(rb_cDisplay, "xkeysym_to_keycode", rb_display_xkeysym_to_keycode, 1);
|
182
230
|
}
|
data/ext/libx11_ruby/xevent.c
CHANGED
@@ -65,34 +65,6 @@ Init_libx11_xevent(void)
|
|
65
65
|
rb_cXEvent = rb_define_class_under(rb_mLibX11, "XEvent", rb_cData);
|
66
66
|
rb_define_method(rb_cXEvent, "type", rb_xevent_type, 0);
|
67
67
|
|
68
|
-
// event masks
|
69
|
-
rb_define_const(rb_cXEvent, "NO_EVENT_MASK", LONG2NUM(NoEventMask));
|
70
|
-
rb_define_const(rb_cXEvent, "KEY_PRESS_MASK", LONG2NUM(KeyPressMask));
|
71
|
-
rb_define_const(rb_cXEvent, "KEY_RELEASE_MASK", LONG2NUM(KeyReleaseMask));
|
72
|
-
rb_define_const(rb_cXEvent, "BUTTON_PRESS_MASK", LONG2NUM(ButtonPressMask));
|
73
|
-
rb_define_const(rb_cXEvent, "BUTTON_RELEASE_MASK", LONG2NUM(ButtonReleaseMask));
|
74
|
-
rb_define_const(rb_cXEvent, "ENTER_WINDOW_MASK", LONG2NUM(EnterWindowMask));
|
75
|
-
rb_define_const(rb_cXEvent, "LEAVE_WINDOW_MASK", LONG2NUM(LeaveWindowMask));
|
76
|
-
rb_define_const(rb_cXEvent, "POINTER_MOTION_MASK", LONG2NUM(PointerMotionMask));
|
77
|
-
rb_define_const(rb_cXEvent, "POINTER_MOTION_HINT_MASK", LONG2NUM(PointerMotionHintMask));
|
78
|
-
rb_define_const(rb_cXEvent, "BUTTON1_MOTION_MASK", LONG2NUM(Button1MotionMask));
|
79
|
-
rb_define_const(rb_cXEvent, "BUTTON2_MOTION_MASK", LONG2NUM(Button2MotionMask));
|
80
|
-
rb_define_const(rb_cXEvent, "BUTTON3_MOTION_MASK", LONG2NUM(Button3MotionMask));
|
81
|
-
rb_define_const(rb_cXEvent, "BUTTON4_MOTION_MASK", LONG2NUM(Button4MotionMask));
|
82
|
-
rb_define_const(rb_cXEvent, "BUTTON5_MOTION_MASK", LONG2NUM(Button5MotionMask));
|
83
|
-
rb_define_const(rb_cXEvent, "BUTTON_MOTION_MASK", LONG2NUM(ButtonMotionMask));
|
84
|
-
rb_define_const(rb_cXEvent, "KEYMAP_STATE_MASK", LONG2NUM(KeymapStateMask));
|
85
|
-
rb_define_const(rb_cXEvent, "EXPOSURE_MASK", LONG2NUM(ExposureMask));
|
86
|
-
rb_define_const(rb_cXEvent, "VISIBILITY_CHANGE_MASK", LONG2NUM(VisibilityChangeMask));
|
87
|
-
rb_define_const(rb_cXEvent, "STRUCTURE_NOTIFY_MASK", LONG2NUM(StructureNotifyMask));
|
88
|
-
rb_define_const(rb_cXEvent, "RESIZE_REDIRECT_MASK", LONG2NUM(ResizeRedirectMask));
|
89
|
-
rb_define_const(rb_cXEvent, "SUBSTRUCTURE_NOTIFY_MASK", LONG2NUM(SubstructureNotifyMask));
|
90
|
-
rb_define_const(rb_cXEvent, "SUBSTRUCTURE_REDIRECT_MASK", LONG2NUM(SubstructureRedirectMask));
|
91
|
-
rb_define_const(rb_cXEvent, "FOCUS_CHANGE_MASK", LONG2NUM(FocusChangeMask));
|
92
|
-
rb_define_const(rb_cXEvent, "PROPERTY_CHANGE_MASK", LONG2NUM(PropertyChangeMask));
|
93
|
-
rb_define_const(rb_cXEvent, "COLORMAP_CHANGE_MASK", LONG2NUM(ColormapChangeMask));
|
94
|
-
rb_define_const(rb_cXEvent, "OWNER_GRAB_BUTTON_MASK", LONG2NUM(OwnerGrabButtonMask));
|
95
|
-
|
96
68
|
// event
|
97
69
|
rb_define_const(rb_cXEvent, "KEY_PRESS", INT2FIX(KeyPress));
|
98
70
|
rb_define_const(rb_cXEvent, "KEY_RELEASE", INT2FIX(KeyRelease));
|
data/lib/libx11/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: libx11
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Takashi Kokubun
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-04-
|
11
|
+
date: 2016-04-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -92,13 +92,16 @@ files:
|
|
92
92
|
- ".rspec"
|
93
93
|
- ".travis.yml"
|
94
94
|
- Gemfile
|
95
|
+
- HACKING.md
|
95
96
|
- LICENSE.txt
|
96
97
|
- README.md
|
97
98
|
- Rakefile
|
98
99
|
- bin/console
|
99
100
|
- bin/setup
|
101
|
+
- bin/window-manager
|
100
102
|
- example/create_window.rb
|
101
103
|
- example/window_manager.rb
|
104
|
+
- ext/libx11_ruby/constants.c
|
102
105
|
- ext/libx11_ruby/display.c
|
103
106
|
- ext/libx11_ruby/extconf.rb
|
104
107
|
- ext/libx11_ruby/libx11_ruby.c
|