libx11 0.0.3 → 0.0.4

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