libx11 0.0.3 → 0.0.4

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: c9d16b4125d802e8312d5ef49bdcf08f435a3243
4
- data.tar.gz: f0fa4853ef29d30a55e53bfe5d7517a9a29bf018
3
+ metadata.gz: bf8a8125c38441de5799294b392a46643be5565f
4
+ data.tar.gz: 5b74462ab0bfd00512336b07b7f105512d76392b
5
5
  SHA512:
6
- metadata.gz: f07f760b72743e155d5683be2dd1c57a7842d3ade1fddd13d9bdca4092931f557c3cde87099f9c09dd75f63157fd753996a69de435de414df79dc84e1a02395f
7
- data.tar.gz: bb325552f120212bd0a423517087b2e4298e41ad15ada7e8a7e4fa271b9b6f2ac149ff96277b7232c65dd15a7e2652ab68318ad3834b62c85dc78f4cfa218abf
6
+ metadata.gz: c4df03edffcdeb0d4176d08ea55f18d2a8eb7ec5e8808c095394db07699a27e667483b420ca81e365d4c74b92645553cfcbc73562b0038964c8146786fc604fb
7
+ data.tar.gz: 298a98dc9ca4512601ae423be92db6a7001316edccfdcffb3cd19a601e949b5f308ef99f1c46eceb0519de07e4c17eeae44e088923fd0372cb42469d94517005
@@ -1,4 +1,5 @@
1
1
  #include "libx11_ruby.h"
2
+ #include <X11/keysym.h>
2
3
  #include <X11/Xlib.h>
3
4
 
4
5
  void
@@ -53,4 +54,129 @@ Init_libx11_constants(void)
53
54
  rb_define_const(rb_mLibX11, "BUTTON4_MASK", LONG2NUM(Button4Mask));
54
55
  rb_define_const(rb_mLibX11, "BUTTON5_MASK", LONG2NUM(Button5Mask));
55
56
  rb_define_const(rb_mLibX11, "ANY_MODIFIER", LONG2NUM(AnyModifier));
57
+
58
+ // tty functions keys
59
+ rb_define_const(rb_mLibX11, "XK_BackSpace", LONG2NUM(XK_BackSpace));
60
+ rb_define_const(rb_mLibX11, "XK_Tab", LONG2NUM(XK_Tab));
61
+ rb_define_const(rb_mLibX11, "XK_Linefeed", LONG2NUM(XK_Linefeed));
62
+ rb_define_const(rb_mLibX11, "XK_Clear", LONG2NUM(XK_Clear));
63
+ rb_define_const(rb_mLibX11, "XK_Return", LONG2NUM(XK_Return));
64
+ rb_define_const(rb_mLibX11, "XK_Pause", LONG2NUM(XK_Pause));
65
+ rb_define_const(rb_mLibX11, "XK_Scroll_Lock", LONG2NUM(XK_Scroll_Lock));
66
+ rb_define_const(rb_mLibX11, "XK_Sys_Req", LONG2NUM(XK_Sys_Req));
67
+ rb_define_const(rb_mLibX11, "XK_Escape", LONG2NUM(XK_Escape));
68
+ rb_define_const(rb_mLibX11, "XK_Delete", LONG2NUM(XK_Delete));
69
+
70
+ // latin 1
71
+ rb_define_const(rb_mLibX11, "XK_space", LONG2NUM(XK_space));
72
+ rb_define_const(rb_mLibX11, "XK_exclam", LONG2NUM(XK_exclam));
73
+ rb_define_const(rb_mLibX11, "XK_quotedbl", LONG2NUM(XK_quotedbl));
74
+ rb_define_const(rb_mLibX11, "XK_numbersign", LONG2NUM(XK_numbersign));
75
+ rb_define_const(rb_mLibX11, "XK_dollar", LONG2NUM(XK_dollar));
76
+ rb_define_const(rb_mLibX11, "XK_percent", LONG2NUM(XK_percent));
77
+ rb_define_const(rb_mLibX11, "XK_ampersand", LONG2NUM(XK_ampersand));
78
+ rb_define_const(rb_mLibX11, "XK_apostrophe", LONG2NUM(XK_apostrophe));
79
+ rb_define_const(rb_mLibX11, "XK_quoteright", LONG2NUM(XK_quoteright));
80
+ rb_define_const(rb_mLibX11, "XK_parenleft", LONG2NUM(XK_parenleft));
81
+ rb_define_const(rb_mLibX11, "XK_parenright", LONG2NUM(XK_parenright));
82
+ rb_define_const(rb_mLibX11, "XK_asterisk", LONG2NUM(XK_asterisk));
83
+ rb_define_const(rb_mLibX11, "XK_plus", LONG2NUM(XK_plus));
84
+ rb_define_const(rb_mLibX11, "XK_comma", LONG2NUM(XK_comma));
85
+ rb_define_const(rb_mLibX11, "XK_minus", LONG2NUM(XK_minus));
86
+ rb_define_const(rb_mLibX11, "XK_period", LONG2NUM(XK_period));
87
+ rb_define_const(rb_mLibX11, "XK_slash", LONG2NUM(XK_slash));
88
+ rb_define_const(rb_mLibX11, "XK_0", LONG2NUM(XK_0));
89
+ rb_define_const(rb_mLibX11, "XK_1", LONG2NUM(XK_1));
90
+ rb_define_const(rb_mLibX11, "XK_2", LONG2NUM(XK_2));
91
+ rb_define_const(rb_mLibX11, "XK_3", LONG2NUM(XK_3));
92
+ rb_define_const(rb_mLibX11, "XK_4", LONG2NUM(XK_4));
93
+ rb_define_const(rb_mLibX11, "XK_5", LONG2NUM(XK_5));
94
+ rb_define_const(rb_mLibX11, "XK_6", LONG2NUM(XK_6));
95
+ rb_define_const(rb_mLibX11, "XK_7", LONG2NUM(XK_7));
96
+ rb_define_const(rb_mLibX11, "XK_8", LONG2NUM(XK_8));
97
+ rb_define_const(rb_mLibX11, "XK_9", LONG2NUM(XK_9));
98
+ rb_define_const(rb_mLibX11, "XK_colon", LONG2NUM(XK_colon));
99
+ rb_define_const(rb_mLibX11, "XK_semicolon", LONG2NUM(XK_semicolon));
100
+ rb_define_const(rb_mLibX11, "XK_less", LONG2NUM(XK_less));
101
+ rb_define_const(rb_mLibX11, "XK_equal", LONG2NUM(XK_equal));
102
+ rb_define_const(rb_mLibX11, "XK_greater", LONG2NUM(XK_greater));
103
+ rb_define_const(rb_mLibX11, "XK_question", LONG2NUM(XK_question));
104
+ rb_define_const(rb_mLibX11, "XK_at", LONG2NUM(XK_at));
105
+ rb_define_const(rb_mLibX11, "XK_A", LONG2NUM(XK_A));
106
+ rb_define_const(rb_mLibX11, "XK_B", LONG2NUM(XK_B));
107
+ rb_define_const(rb_mLibX11, "XK_C", LONG2NUM(XK_C));
108
+ rb_define_const(rb_mLibX11, "XK_D", LONG2NUM(XK_D));
109
+ rb_define_const(rb_mLibX11, "XK_E", LONG2NUM(XK_E));
110
+ rb_define_const(rb_mLibX11, "XK_F", LONG2NUM(XK_F));
111
+ rb_define_const(rb_mLibX11, "XK_G", LONG2NUM(XK_G));
112
+ rb_define_const(rb_mLibX11, "XK_H", LONG2NUM(XK_H));
113
+ rb_define_const(rb_mLibX11, "XK_I", LONG2NUM(XK_I));
114
+ rb_define_const(rb_mLibX11, "XK_J", LONG2NUM(XK_J));
115
+ rb_define_const(rb_mLibX11, "XK_K", LONG2NUM(XK_K));
116
+ rb_define_const(rb_mLibX11, "XK_L", LONG2NUM(XK_L));
117
+ rb_define_const(rb_mLibX11, "XK_M", LONG2NUM(XK_M));
118
+ rb_define_const(rb_mLibX11, "XK_N", LONG2NUM(XK_N));
119
+ rb_define_const(rb_mLibX11, "XK_O", LONG2NUM(XK_O));
120
+ rb_define_const(rb_mLibX11, "XK_P", LONG2NUM(XK_P));
121
+ rb_define_const(rb_mLibX11, "XK_Q", LONG2NUM(XK_Q));
122
+ rb_define_const(rb_mLibX11, "XK_R", LONG2NUM(XK_R));
123
+ rb_define_const(rb_mLibX11, "XK_S", LONG2NUM(XK_S));
124
+ rb_define_const(rb_mLibX11, "XK_T", LONG2NUM(XK_T));
125
+ rb_define_const(rb_mLibX11, "XK_U", LONG2NUM(XK_U));
126
+ rb_define_const(rb_mLibX11, "XK_V", LONG2NUM(XK_V));
127
+ rb_define_const(rb_mLibX11, "XK_W", LONG2NUM(XK_W));
128
+ rb_define_const(rb_mLibX11, "XK_X", LONG2NUM(XK_X));
129
+ rb_define_const(rb_mLibX11, "XK_Y", LONG2NUM(XK_Y));
130
+ rb_define_const(rb_mLibX11, "XK_Z", LONG2NUM(XK_Z));
131
+ rb_define_const(rb_mLibX11, "XK_bracketleft", LONG2NUM(XK_bracketleft));
132
+ rb_define_const(rb_mLibX11, "XK_backslash", LONG2NUM(XK_backslash));
133
+ rb_define_const(rb_mLibX11, "XK_bracketright", LONG2NUM(XK_bracketright));
134
+ rb_define_const(rb_mLibX11, "XK_asciicircum", LONG2NUM(XK_asciicircum));
135
+ rb_define_const(rb_mLibX11, "XK_underscore", LONG2NUM(XK_underscore));
136
+ rb_define_const(rb_mLibX11, "XK_grave", LONG2NUM(XK_grave));
137
+ rb_define_const(rb_mLibX11, "XK_quoteleft", LONG2NUM(XK_quoteleft));
138
+ rb_define_const(rb_mLibX11, "XK_a", LONG2NUM(XK_a));
139
+ rb_define_const(rb_mLibX11, "XK_b", LONG2NUM(XK_b));
140
+ rb_define_const(rb_mLibX11, "XK_c", LONG2NUM(XK_c));
141
+ rb_define_const(rb_mLibX11, "XK_d", LONG2NUM(XK_d));
142
+ rb_define_const(rb_mLibX11, "XK_e", LONG2NUM(XK_e));
143
+ rb_define_const(rb_mLibX11, "XK_f", LONG2NUM(XK_f));
144
+ rb_define_const(rb_mLibX11, "XK_g", LONG2NUM(XK_g));
145
+ rb_define_const(rb_mLibX11, "XK_h", LONG2NUM(XK_h));
146
+ rb_define_const(rb_mLibX11, "XK_i", LONG2NUM(XK_i));
147
+ rb_define_const(rb_mLibX11, "XK_j", LONG2NUM(XK_j));
148
+ rb_define_const(rb_mLibX11, "XK_k", LONG2NUM(XK_k));
149
+ rb_define_const(rb_mLibX11, "XK_l", LONG2NUM(XK_l));
150
+ rb_define_const(rb_mLibX11, "XK_m", LONG2NUM(XK_m));
151
+ rb_define_const(rb_mLibX11, "XK_n", LONG2NUM(XK_n));
152
+ rb_define_const(rb_mLibX11, "XK_o", LONG2NUM(XK_o));
153
+ rb_define_const(rb_mLibX11, "XK_p", LONG2NUM(XK_p));
154
+ rb_define_const(rb_mLibX11, "XK_q", LONG2NUM(XK_q));
155
+ rb_define_const(rb_mLibX11, "XK_r", LONG2NUM(XK_r));
156
+ rb_define_const(rb_mLibX11, "XK_s", LONG2NUM(XK_s));
157
+ rb_define_const(rb_mLibX11, "XK_t", LONG2NUM(XK_t));
158
+ rb_define_const(rb_mLibX11, "XK_u", LONG2NUM(XK_u));
159
+ rb_define_const(rb_mLibX11, "XK_v", LONG2NUM(XK_v));
160
+ rb_define_const(rb_mLibX11, "XK_w", LONG2NUM(XK_w));
161
+ rb_define_const(rb_mLibX11, "XK_x", LONG2NUM(XK_x));
162
+ rb_define_const(rb_mLibX11, "XK_y", LONG2NUM(XK_y));
163
+ rb_define_const(rb_mLibX11, "XK_z", LONG2NUM(XK_z));
164
+ rb_define_const(rb_mLibX11, "XK_braceleft", LONG2NUM(XK_braceleft));
165
+ rb_define_const(rb_mLibX11, "XK_bar", LONG2NUM(XK_bar));
166
+ rb_define_const(rb_mLibX11, "XK_braceright", LONG2NUM(XK_braceright));
167
+ rb_define_const(rb_mLibX11, "XK_asciitilde", LONG2NUM(XK_asciitilde));
168
+
169
+ // GrabPointer, GrabButton, GrabKeyboard, GrabKey Modes
170
+ rb_define_const(rb_mLibX11, "GRAB_MODE_SYNC", INT2FIX(GrabModeSync));
171
+ rb_define_const(rb_mLibX11, "GRAB_MODE_ASYNC", INT2FIX(GrabModeAsync));
172
+
173
+ // Key masks
174
+ rb_define_const(rb_mLibX11, "SHIFT_MASK", LONG2NUM(ShiftMask));
175
+ rb_define_const(rb_mLibX11, "LOCK_MASK", LONG2NUM(LockMask));
176
+ rb_define_const(rb_mLibX11, "CONTROL_MASK", LONG2NUM(ControlMask));
177
+ rb_define_const(rb_mLibX11, "MOD1_MASK", LONG2NUM(Mod1Mask));
178
+ rb_define_const(rb_mLibX11, "MOD2_MASK", LONG2NUM(Mod2Mask));
179
+ rb_define_const(rb_mLibX11, "MOD3_MASK", LONG2NUM(Mod3Mask));
180
+ rb_define_const(rb_mLibX11, "MOD4_MASK", LONG2NUM(Mod4Mask));
181
+ rb_define_const(rb_mLibX11, "MOD5_MASK", LONG2NUM(Mod5Mask));
56
182
  }
@@ -23,6 +23,14 @@ const rb_data_type_t display_type = {
23
23
  .flags = RUBY_TYPED_FREE_IMMEDIATELY,
24
24
  };
25
25
 
26
+ Display*
27
+ get_display_struct(VALUE display_object)
28
+ {
29
+ Display *display;
30
+ TypedData_Get_Struct(display_object, Display, &display_type, display);
31
+ return display;
32
+ }
33
+
26
34
  /*
27
35
  * Xlib XOpenDisplay
28
36
  */
@@ -51,12 +59,7 @@ rb_libx11_xopen_display(int argc, VALUE *argv, RB_UNUSED_VAR(VALUE self))
51
59
  static VALUE
52
60
  rb_libx11_xclose_display(VALUE self, VALUE obj)
53
61
  {
54
- int ret;
55
- Display *display;
56
-
57
- TypedData_Get_Struct(obj, Display, &display_type, display);
58
- ret = XCloseDisplay(display);
59
- return INT2FIX(ret);
62
+ return INT2FIX(XCloseDisplay(get_display_struct(obj)));
60
63
  }
61
64
 
62
65
  /*
@@ -65,10 +68,16 @@ rb_libx11_xclose_display(VALUE self, VALUE obj)
65
68
  static VALUE
66
69
  rb_display_default_screen(VALUE self)
67
70
  {
68
- Display *display;
71
+ return INT2NUM(DefaultScreen(get_display_struct(self)));
72
+ }
69
73
 
70
- TypedData_Get_Struct(self, Display, &display_type, display);
71
- return INT2NUM(DefaultScreen(display));
74
+ /*
75
+ * #define ConnectionNumber(dpy) (((_XPrivDisplay)dpy)->fd)
76
+ */
77
+ static VALUE
78
+ rb_display_connection_number(VALUE self)
79
+ {
80
+ return INT2NUM(ConnectionNumber(get_display_struct(self)));
72
81
  }
73
82
 
74
83
  /*
@@ -77,10 +86,7 @@ rb_display_default_screen(VALUE self)
77
86
  static VALUE
78
87
  rb_display_xdisplay_string(VALUE self)
79
88
  {
80
- Display *display;
81
-
82
- TypedData_Get_Struct(self, Display, &display_type, display);
83
- return rb_str_new_cstr(XDisplayString(display));
89
+ return rb_str_new_cstr(XDisplayString(get_display_struct(self)));
84
90
  }
85
91
 
86
92
  /*
@@ -89,12 +95,7 @@ rb_display_xdisplay_string(VALUE self)
89
95
  static VALUE
90
96
  rb_display_default_root_window(VALUE self)
91
97
  {
92
- Display *display;
93
- Window window;
94
-
95
- TypedData_Get_Struct(self, Display, &display_type, display);
96
- window = DefaultRootWindow(display);
97
- return ULONG2NUM(window);
98
+ return ULONG2NUM(DefaultRootWindow(get_display_struct(self)));
98
99
  }
99
100
 
100
101
  /*
@@ -103,11 +104,7 @@ rb_display_default_root_window(VALUE self)
103
104
  static VALUE
104
105
  rb_display_black_pixel(VALUE self, VALUE screen_obj)
105
106
  {
106
- Display *display;
107
- int screen = FIX2INT(screen_obj);
108
-
109
- TypedData_Get_Struct(self, Display, &display_type, display);
110
- return ULONG2NUM(BlackPixel(display, screen));
107
+ return ULONG2NUM(BlackPixel(get_display_struct(self), FIX2INT(screen_obj)));
111
108
  }
112
109
 
113
110
  /*
@@ -116,11 +113,7 @@ rb_display_black_pixel(VALUE self, VALUE screen_obj)
116
113
  static VALUE
117
114
  rb_display_white_pixel(VALUE self, VALUE screen_obj)
118
115
  {
119
- Display *display;
120
- int screen = FIX2INT(screen_obj);
121
-
122
- TypedData_Get_Struct(self, Display, &display_type, display);
123
- return ULONG2NUM(WhitePixel(display, screen));
116
+ return ULONG2NUM(WhitePixel(get_display_struct(self), FIX2INT(screen_obj)));
124
117
  }
125
118
 
126
119
  /*
@@ -129,12 +122,7 @@ rb_display_white_pixel(VALUE self, VALUE screen_obj)
129
122
  static VALUE
130
123
  rb_display_xselect_input(VALUE self, VALUE window, VALUE event_mask)
131
124
  {
132
- Display *display;
133
- int ret;
134
-
135
- TypedData_Get_Struct(self, Display, &display_type, display);
136
- ret = XSelectInput(display, NUM2ULONG(window), NUM2LONG(event_mask));
137
- return INT2NUM(ret);
125
+ return INT2NUM(XSelectInput(get_display_struct(self), NUM2ULONG(window), NUM2LONG(event_mask)));
138
126
  }
139
127
 
140
128
  /*
@@ -143,12 +131,7 @@ rb_display_xselect_input(VALUE self, VALUE window, VALUE event_mask)
143
131
  static VALUE
144
132
  rb_display_xmap_window(VALUE self, VALUE window)
145
133
  {
146
- Display *display;
147
- int ret;
148
-
149
- TypedData_Get_Struct(self, Display, &display_type, display);
150
- ret = XMapWindow(display, NUM2ULONG(window));
151
- return INT2NUM(ret);
134
+ return INT2NUM(XMapWindow(get_display_struct(self), NUM2ULONG(window)));
152
135
  }
153
136
 
154
137
  /*
@@ -157,12 +140,7 @@ rb_display_xmap_window(VALUE self, VALUE window)
157
140
  static VALUE
158
141
  rb_display_xsync(VALUE self, VALUE discard)
159
142
  {
160
- Display *display;
161
- int ret;
162
-
163
- TypedData_Get_Struct(self, Display, &display_type, display);
164
- ret = XSync(display, RTEST(discard));
165
- return INT2NUM(ret);
143
+ return INT2NUM(XSync(get_display_struct(self), RTEST(discard)));
166
144
  }
167
145
 
168
146
  /*
@@ -172,11 +150,7 @@ static VALUE
172
150
  rb_display_xgrab_key(VALUE self, VALUE keycode, VALUE modifiers, VALUE grab_window,
173
151
  VALUE owner_events, VALUE pointer_mode, VALUE keyboard_mode)
174
152
  {
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),
153
+ int ret = XGrabKey(get_display_struct(self), NUM2INT(keycode), NUM2UINT(modifiers), NUM2ULONG(grab_window),
180
154
  RTEST(owner_events), NUM2INT(pointer_mode), NUM2INT(keyboard_mode));
181
155
  return INT2NUM(ret);
182
156
  }
@@ -187,11 +161,7 @@ rb_display_xgrab_key(VALUE self, VALUE keycode, VALUE modifiers, VALUE grab_wind
187
161
  static VALUE
188
162
  rb_display_xungrab_key(VALUE self, VALUE keycode, VALUE modifiers, VALUE grab_window)
189
163
  {
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));
164
+ int ret = XUngrabKey(get_display_struct(self), NUM2INT(keycode), NUM2UINT(modifiers), NUM2ULONG(grab_window));
195
165
  return INT2NUM(ret);
196
166
  }
197
167
 
@@ -201,11 +171,7 @@ rb_display_xungrab_key(VALUE self, VALUE keycode, VALUE modifiers, VALUE grab_wi
201
171
  static VALUE
202
172
  rb_display_xkeysym_to_keycode(VALUE self, VALUE keysym)
203
173
  {
204
- Display *display;
205
- unsigned char keycode;
206
-
207
- TypedData_Get_Struct(self, Display, &display_type, display);
208
- keycode = XKeysymToKeycode(display, NUM2ULONG(keysym));
174
+ unsigned char keycode = XKeysymToKeycode(get_display_struct(self), NUM2ULONG(keysym));
209
175
  return INT2FIX((int)keycode);
210
176
  }
211
177
 
@@ -218,6 +184,7 @@ Init_libx11_display(void)
218
184
  rb_cDisplay = rb_define_class_under(rb_mLibX11, "Display", rb_cData);
219
185
  rb_define_method(rb_cDisplay, "default_root_window", rb_display_default_root_window, 0);
220
186
  rb_define_method(rb_cDisplay, "default_screen", rb_display_default_screen, 0);
187
+ rb_define_method(rb_cDisplay, "connection_number", rb_display_connection_number, 0);
221
188
  rb_define_method(rb_cDisplay, "xdisplay_string", rb_display_xdisplay_string, 0);
222
189
  rb_define_method(rb_cDisplay, "black_pixel", rb_display_black_pixel, 1);
223
190
  rb_define_method(rb_cDisplay, "white_pixel", rb_display_white_pixel, 1);
@@ -1,7 +1,7 @@
1
1
  #include "libx11_ruby.h"
2
2
  #include <X11/Xlib.h>
3
3
 
4
- extern rb_data_type_t display_type;
4
+ extern Display* get_display_struct(VALUE);
5
5
 
6
6
  /*
7
7
  * Xlib XCreateSimpleWindow
@@ -10,11 +10,7 @@ static VALUE
10
10
  rb_libx11_xcreate_simple_window(VALUE self, VALUE display_obj, VALUE parent_window, VALUE x, VALUE y,
11
11
  VALUE width, VALUE height, VALUE border_width, VALUE border_color, VALUE background_color)
12
12
  {
13
- Display *display;
14
- Window ret;
15
-
16
- TypedData_Get_Struct(display_obj, Display, &display_type, display);
17
- ret = XCreateSimpleWindow(display, NUM2ULONG(parent_window), NUM2INT(x), NUM2INT(y),
13
+ Window ret = XCreateSimpleWindow(get_display_struct(display_obj), NUM2ULONG(parent_window), NUM2INT(x), NUM2INT(y),
18
14
  NUM2UINT(width), NUM2UINT(height), FIX2UINT(border_width), NUM2ULONG(border_color), NUM2ULONG(background_color));
19
15
  return ULONG2NUM(ret);
20
16
  }
@@ -25,11 +21,7 @@ rb_libx11_xcreate_simple_window(VALUE self, VALUE display_obj, VALUE parent_wind
25
21
  static VALUE
26
22
  rb_libx11_xdestroy_window(VALUE self, VALUE display_obj, VALUE window)
27
23
  {
28
- Display *display;
29
- int ret;
30
-
31
- TypedData_Get_Struct(display_obj, Display, &display_type, display);
32
- ret = XDestroyWindow(display, NUM2ULONG(window));
24
+ int ret = XDestroyWindow(get_display_struct(display_obj), NUM2ULONG(window));
33
25
  return INT2NUM(ret);
34
26
  }
35
27
 
@@ -1,9 +1,9 @@
1
1
  #include "libx11_ruby.h"
2
2
  #include <X11/Xlib.h>
3
3
 
4
- VALUE rb_cXEvent;
4
+ VALUE rb_cXEvent, rb_cXKeyEvent;
5
5
 
6
- extern rb_data_type_t display_type;
6
+ extern Display* get_display_struct(VALUE);
7
7
 
8
8
  static void
9
9
  xevent_dfree(void *arg)
@@ -38,14 +38,14 @@ const rb_data_type_t xevent_type = {
38
38
  static VALUE
39
39
  rb_libx11_xnext_event(VALUE self, VALUE obj)
40
40
  {
41
- Display *display;
42
- XEvent *event;
43
-
44
- TypedData_Get_Struct(obj, Display, &display_type, display);
45
-
46
- event = (XEvent *)malloc(sizeof(XEvent));
47
- XNextEvent(display, event);
48
- return TypedData_Wrap_Struct(rb_cXEvent, &xevent_type, event);
41
+ XEvent *event = (XEvent *)malloc(sizeof(XEvent));
42
+ XNextEvent(get_display_struct(obj), event);
43
+ switch (event->type) {
44
+ case KeyPress:
45
+ return TypedData_Wrap_Struct(rb_cXKeyEvent, &xevent_type, event);
46
+ default:
47
+ return TypedData_Wrap_Struct(rb_cXEvent, &xevent_type, event);
48
+ }
49
49
  }
50
50
 
51
51
  static VALUE
@@ -57,14 +57,44 @@ rb_xevent_type(VALUE self)
57
57
  return INT2NUM(event->type);
58
58
  }
59
59
 
60
+ static VALUE
61
+ rb_xkey_event_state(VALUE self)
62
+ {
63
+ XEvent *event;
64
+
65
+ TypedData_Get_Struct(self, XEvent, &xevent_type, event);
66
+ return UINT2NUM(event->xkey.state);
67
+ }
68
+
69
+ /*
70
+ * KeySym XLookupKeysym(
71
+ * XKeyEvent* key_event,
72
+ * int index
73
+ * );
74
+ */
75
+ static VALUE
76
+ rb_libx11_xlookup_keysym(VALUE self, VALUE event_obj, VALUE index)
77
+ {
78
+ XEvent *event;
79
+ unsigned long keysym;
80
+
81
+ TypedData_Get_Struct(event_obj, XEvent, &xevent_type, event);
82
+ keysym = XLookupKeysym(&event->xkey, NUM2INT(index));
83
+ return ULONG2NUM(keysym);
84
+ }
85
+
60
86
  void
61
87
  Init_libx11_xevent(void)
62
88
  {
63
89
  rb_define_singleton_method(rb_mLibX11, "xnext_event", rb_libx11_xnext_event, 1);
90
+ rb_define_singleton_method(rb_mLibX11, "xlookup_keysym", rb_libx11_xlookup_keysym, 2);
64
91
 
65
92
  rb_cXEvent = rb_define_class_under(rb_mLibX11, "XEvent", rb_cData);
66
93
  rb_define_method(rb_cXEvent, "type", rb_xevent_type, 0);
67
94
 
95
+ rb_cXKeyEvent = rb_define_class_under(rb_mLibX11, "XKeyEvent", rb_cXEvent);
96
+ rb_define_method(rb_cXKeyEvent, "state", rb_xkey_event_state, 0);
97
+
68
98
  // event
69
99
  rb_define_const(rb_cXEvent, "KEY_PRESS", INT2FIX(KeyPress));
70
100
  rb_define_const(rb_cXEvent, "KEY_RELEASE", INT2FIX(KeyRelease));
@@ -1,3 +1,3 @@
1
1
  module LibX11
2
- VERSION = '0.0.3'
2
+ VERSION = '0.0.4'
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.3
4
+ version: 0.0.4
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-10 00:00:00.000000000 Z
11
+ date: 2016-04-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler