libx11 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 996d4981cc702796abf6b30fb2b661e5361ae55b
4
- data.tar.gz: 84f21999388262f0e1160a20edc1cd78e9aac4aa
3
+ metadata.gz: c9d16b4125d802e8312d5ef49bdcf08f435a3243
4
+ data.tar.gz: f0fa4853ef29d30a55e53bfe5d7517a9a29bf018
5
5
  SHA512:
6
- metadata.gz: b2f137d6b53df72a7b4253346eef3b438ebce9900ea88d9e0324d8390230253f138f726acc7721b0ea13991a1e9bad6130010f057c0c9bcb419b592e961a905a
7
- data.tar.gz: 6017df38ffec47e0d79bc41f1fdfad7c2a048f220799ba8bcfe5ae0fa249a9a504dad401d56e488f2eebaf7712d224eb363bd9caeab2205160f5eb61cf1c2d30
6
+ metadata.gz: f07f760b72743e155d5683be2dd1c57a7842d3ade1fddd13d9bdca4092931f557c3cde87099f9c09dd75f63157fd753996a69de435de414df79dc84e1a02395f
7
+ data.tar.gz: bb325552f120212bd0a423517087b2e4298e41ad15ada7e8a7e4fa271b9b6f2ac149ff96277b7232c65dd15a7e2652ab68318ad3834b62c85dc78f4cfa218abf
@@ -0,0 +1,14 @@
1
+ ## Type definitions
2
+
3
+ ```c
4
+ typedef unsigned char KeyCode;
5
+ typedef unsigned long XID;
6
+ typedef XID Window;
7
+ typedef XID KeySym;
8
+ ```
9
+
10
+ ## Macros
11
+
12
+ ```
13
+ RTEST : Boolean -> Bool
14
+ ```
@@ -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
@@ -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::XEvent::KEY_PRESS_MASK |
32
- LibX11::XEvent::SUBSTRUCTURE_REDIRECT_MASK |
33
- LibX11::XEvent::SUBSTRUCTURE_NOTIFY_MASK,
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
+ }
@@ -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
  }
@@ -5,6 +5,7 @@ Init_libx11_ruby(void)
5
5
  {
6
6
  rb_mLibX11 = rb_define_module("LibX11");
7
7
 
8
+ Init_libx11_constants();
8
9
  Init_libx11_display();
9
10
  Init_libx11_window();
10
11
  Init_libx11_xerror_event();
@@ -5,6 +5,7 @@
5
5
 
6
6
  VALUE rb_mLibX11;
7
7
 
8
+ void Init_libx11_constants(void);
8
9
  void Init_libx11_display(void);
9
10
  void Init_libx11_window(void);
10
11
  void Init_libx11_xerror_event(void);
@@ -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));
@@ -1,3 +1,3 @@
1
1
  module LibX11
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.3'
3
3
  end
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.2
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-07 00:00:00.000000000 Z
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