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 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