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 +4 -4
- data/ext/libx11_ruby/constants.c +126 -0
- data/ext/libx11_ruby/display.c +29 -62
- data/ext/libx11_ruby/window.c +3 -11
- data/ext/libx11_ruby/xevent.c +40 -10
- data/lib/libx11/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bf8a8125c38441de5799294b392a46643be5565f
|
4
|
+
data.tar.gz: 5b74462ab0bfd00512336b07b7f105512d76392b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c4df03edffcdeb0d4176d08ea55f18d2a8eb7ec5e8808c095394db07699a27e667483b420ca81e365d4c74b92645553cfcbc73562b0038964c8146786fc604fb
|
7
|
+
data.tar.gz: 298a98dc9ca4512601ae423be92db6a7001316edccfdcffb3cd19a601e949b5f308ef99f1c46eceb0519de07e4c17eeae44e088923fd0372cb42469d94517005
|
data/ext/libx11_ruby/constants.c
CHANGED
@@ -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
|
}
|
data/ext/libx11_ruby/display.c
CHANGED
@@ -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
|
-
|
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
|
-
|
71
|
+
return INT2NUM(DefaultScreen(get_display_struct(self)));
|
72
|
+
}
|
69
73
|
|
70
|
-
|
71
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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);
|
data/ext/libx11_ruby/window.c
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#include "libx11_ruby.h"
|
2
2
|
#include <X11/Xlib.h>
|
3
3
|
|
4
|
-
extern
|
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
|
-
|
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
|
-
|
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
|
|
data/ext/libx11_ruby/xevent.c
CHANGED
@@ -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
|
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
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
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));
|
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.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-
|
11
|
+
date: 2016-04-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|