x11 0.0.1a2 → 0.0.1a3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (245) hide show
  1. data/lib/X11/X.rb +14 -9
  2. data/lib/X11/X/c.rb +21 -20
  3. data/lib/X11/XKBlib.rb +29 -0
  4. data/lib/X11/Xatom.rb +152 -136
  5. data/lib/X11/Xatom/c.rb +15 -15
  6. data/lib/X11/Xdefs.rb +7 -7
  7. data/lib/X11/Xdefs/c.rb +20 -20
  8. data/lib/X11/Xlib.rb +19 -7
  9. data/lib/X11/Xlib/c.rb +21 -8
  10. data/lib/X11/Xlib/c/functions.rb +373 -27
  11. data/lib/X11/Xlib/c/type/any_event.rb +13 -13
  12. data/lib/X11/Xlib/c/type/button_event.rb +23 -23
  13. data/lib/X11/Xlib/c/type/circulate_event.rb +15 -15
  14. data/lib/X11/Xlib/c/type/circulate_request_event.rb +15 -15
  15. data/lib/X11/Xlib/c/type/client_message_event.rb +22 -22
  16. data/lib/X11/Xlib/c/type/colormap_event.rb +16 -16
  17. data/lib/X11/Xlib/c/type/configure_event.rb +21 -21
  18. data/lib/X11/Xlib/c/type/configure_request_event.rb +22 -22
  19. data/lib/X11/Xlib/c/type/create_window_event.rb +20 -20
  20. data/lib/X11/Xlib/c/type/crossing_event.rb +25 -25
  21. data/lib/X11/Xlib/c/type/destroy_window_event.rb +14 -14
  22. data/lib/X11/Xlib/c/type/display.rb +52 -52
  23. data/lib/X11/Xlib/c/type/error_event.rb +15 -15
  24. data/lib/X11/Xlib/c/type/event.rb +43 -43
  25. data/lib/X11/Xlib/c/type/expose_event.rb +18 -18
  26. data/lib/X11/Xlib/c/type/focus_change_event.rb +15 -15
  27. data/lib/X11/Xlib/c/type/gc.rb +10 -10
  28. data/lib/X11/Xlib/c/type/gc_values.rb +54 -0
  29. data/lib/X11/Xlib/c/type/generic_event.rb +14 -14
  30. data/lib/X11/Xlib/c/type/generic_event_cookie.rb +16 -16
  31. data/lib/X11/Xlib/c/type/graphics_expose_event.rb +21 -21
  32. data/lib/X11/Xlib/c/type/gravity_event.rb +16 -16
  33. data/lib/X11/Xlib/c/type/image.rb +56 -0
  34. data/lib/X11/Xlib/c/type/key_event.rb +23 -23
  35. data/lib/X11/Xlib/c/type/key_sym.rb +15 -15
  36. data/lib/X11/Xlib/c/type/keymap_event.rb +14 -14
  37. data/lib/X11/Xlib/c/type/map_event.rb +15 -15
  38. data/lib/X11/Xlib/c/type/map_request_event.rb +18 -18
  39. data/lib/X11/Xlib/c/type/mapping_event.rb +16 -16
  40. data/lib/X11/Xlib/c/type/motion_event.rb +23 -23
  41. data/lib/X11/Xlib/c/type/no_expose_event.rb +15 -15
  42. data/lib/X11/Xlib/c/type/point.rb +33 -0
  43. data/lib/X11/Xlib/c/type/property_event.rb +16 -16
  44. data/lib/X11/Xlib/c/type/reparent_event.rb +18 -18
  45. data/lib/X11/Xlib/c/type/resize_request_event.rb +15 -15
  46. data/lib/X11/Xlib/c/type/screen.rb +27 -27
  47. data/lib/X11/Xlib/c/type/selection_clear_event.rb +15 -15
  48. data/lib/X11/Xlib/c/type/selection_event.rb +17 -17
  49. data/lib/X11/Xlib/c/type/selection_request_event.rb +18 -18
  50. data/lib/X11/Xlib/c/type/status.rb +15 -15
  51. data/lib/X11/Xlib/c/type/unmap_event.rb +15 -15
  52. data/lib/X11/Xlib/c/type/visibility_event.rb +14 -14
  53. data/lib/X11/Xlib/c/type/visual.rb +16 -16
  54. data/lib/X11/Xlib/c/type/window_attributes.rb +31 -31
  55. data/lib/X11/Xlib/c/types.rb +9 -7
  56. data/lib/X11/Xlib/display.rb +257 -174
  57. data/lib/X11/Xlib/display/extensions.rb +56 -0
  58. data/lib/X11/Xlib/drawable.rb +48 -0
  59. data/lib/X11/Xlib/error.rb +100 -0
  60. data/lib/X11/Xlib/event.rb +66 -37
  61. data/lib/X11/Xlib/event/any.rb +8 -10
  62. data/lib/X11/Xlib/event/button_press.rb +9 -20
  63. data/lib/X11/Xlib/event/button_release.rb +9 -20
  64. data/lib/X11/Xlib/event/circulate_notify.rb +11 -12
  65. data/lib/X11/Xlib/event/circulate_request.rb +11 -12
  66. data/lib/X11/Xlib/event/client_message.rb +11 -13
  67. data/lib/X11/Xlib/event/colormap_notify.rb +12 -13
  68. data/lib/X11/Xlib/event/configure_notify.rb +17 -18
  69. data/lib/X11/Xlib/event/configure_request.rb +18 -19
  70. data/lib/X11/Xlib/event/create_notify.rb +16 -17
  71. data/lib/X11/Xlib/event/destroy_notify.rb +10 -11
  72. data/lib/X11/Xlib/event/enter_notify.rb +10 -8
  73. data/lib/X11/Xlib/event/expose.rb +15 -16
  74. data/lib/X11/Xlib/event/focus_in.rb +9 -12
  75. data/lib/X11/Xlib/event/focus_out.rb +9 -12
  76. data/lib/X11/Xlib/event/generic.rb +35 -0
  77. data/lib/X11/Xlib/event/generic/button.rb +46 -0
  78. data/lib/X11/Xlib/event/generic/crossing.rb +48 -0
  79. data/lib/X11/Xlib/{window/properties/property/class.rb → event/generic/focus_change.rb} +16 -14
  80. data/lib/X11/Xlib/event/generic/key.rb +46 -0
  81. data/lib/X11/Xlib/event/generic/motion.rb +46 -0
  82. data/lib/X11/Xlib/event/generic_event.rb +12 -14
  83. data/lib/X11/Xlib/event/graphics_expose.rb +15 -14
  84. data/lib/X11/Xlib/event/gravity_notify.rb +12 -13
  85. data/lib/X11/Xlib/event/helper.rb +123 -91
  86. data/lib/X11/Xlib/event/key_press.rb +9 -20
  87. data/lib/X11/Xlib/event/key_release.rb +9 -20
  88. data/lib/X11/Xlib/event/keymap_notify.rb +13 -14
  89. data/lib/X11/Xlib/event/leave_notify.rb +10 -20
  90. data/lib/X11/Xlib/event/map_notify.rb +11 -12
  91. data/lib/X11/Xlib/event/map_request.rb +10 -11
  92. data/lib/X11/Xlib/event/mapping_notify.rb +11 -13
  93. data/lib/X11/Xlib/event/motion_notify.rb +10 -20
  94. data/lib/X11/Xlib/event/no_expose.rb +8 -9
  95. data/lib/X11/Xlib/event/property_notify.rb +12 -13
  96. data/lib/X11/Xlib/event/reparent_notify.rb +14 -15
  97. data/lib/X11/Xlib/event/resize_request.rb +11 -12
  98. data/lib/X11/Xlib/event/selection_clear.rb +10 -12
  99. data/lib/X11/Xlib/event/selection_notify.rb +13 -15
  100. data/lib/X11/Xlib/event/selection_request.rb +14 -16
  101. data/lib/X11/Xlib/event/unmap_notify.rb +11 -12
  102. data/lib/X11/Xlib/event/visibility_notify.rb +10 -11
  103. data/lib/X11/Xlib/events.rb +11 -7
  104. data/lib/X11/Xlib/exceptions.rb +10 -10
  105. data/lib/X11/Xlib/graphic_context.rb +69 -0
  106. data/lib/X11/Xlib/graphic_context/functions.rb +50 -0
  107. data/lib/X11/Xlib/{window/properties/property/command.rb → graphic_context/values.rb} +17 -13
  108. data/lib/X11/Xlib/hints.rb +19 -18
  109. data/lib/X11/Xlib/hints/flags.rb +15 -15
  110. data/lib/X11/Xlib/hints/icon.rb +14 -16
  111. data/lib/X11/Xlib/id.rb +75 -0
  112. data/lib/X11/Xlib/image.rb +64 -0
  113. data/lib/X11/Xlib/keysym.rb +53 -26
  114. data/lib/X11/Xlib/mask.rb +81 -55
  115. data/lib/X11/Xlib/pixmap.rb +60 -0
  116. data/lib/X11/Xlib/planes.rb +50 -0
  117. data/lib/X11/Xlib/revert_to.rb +10 -10
  118. data/lib/X11/Xlib/screen.rb +48 -31
  119. data/lib/X11/Xlib/status.rb +56 -56
  120. data/lib/X11/Xlib/transform.rb +25 -25
  121. data/lib/X11/Xlib/visual.rb +19 -19
  122. data/lib/X11/Xlib/window.rb +399 -188
  123. data/lib/X11/Xlib/window/attributes.rb +74 -41
  124. data/lib/X11/Xlib/window/properties.rb +57 -38
  125. data/lib/X11/Xlib/window/properties/property.rb +135 -70
  126. data/lib/X11/Xlib/window/properties/property/net_virtual_root.rb +13 -13
  127. data/lib/X11/Xlib/window/properties/property/parser.rb +45 -35
  128. data/lib/X11/Xlib/window/properties/property/parser/arc.rb +18 -16
  129. data/lib/X11/Xlib/window/properties/property/parser/atom.rb +14 -10
  130. data/lib/X11/Xlib/window/properties/property/parser/cardinal.rb +14 -9
  131. data/lib/X11/Xlib/window/properties/property/parser/hints.rb +17 -16
  132. data/lib/X11/Xlib/window/properties/property/parser/integer.rb +39 -0
  133. data/lib/X11/Xlib/window/properties/property/parser/state.rb +39 -0
  134. data/lib/X11/Xlib/window/properties/property/parser/string.rb +59 -0
  135. data/lib/X11/Xlib/window/properties/property/parser/window.rb +39 -0
  136. data/lib/X11/Xmd.rb +7 -7
  137. data/lib/X11/Xmd/c.rb +19 -19
  138. data/lib/X11/Xregion.rb +32 -0
  139. data/lib/X11/Xregion/c.rb +29 -0
  140. data/lib/X11/Xregion/c/type/box.rb +35 -0
  141. data/lib/X11/Xregion/c/type/point_block.rb +33 -0
  142. data/lib/X11/Xregion/c/type/rectangle.rb +35 -0
  143. data/lib/X11/Xregion/c/type/region.rb +35 -0
  144. data/lib/X11/Xregion/c/types.rb +32 -0
  145. data/lib/X11/Xutil.rb +12 -17
  146. data/lib/X11/Xutil/c.rb +7 -10
  147. data/lib/X11/Xutil/c/functions.rb +7 -7
  148. data/lib/X11/Xutil/c/type/class_hint.rb +10 -10
  149. data/lib/X11/Xutil/c/type/region.rb +31 -0
  150. data/lib/X11/Xutil/c/type/text_property.rb +12 -12
  151. data/lib/X11/Xutil/c/types.rb +8 -7
  152. data/lib/X11/Xutil/state.rb +43 -0
  153. data/lib/X11/Xutil/window.rb +28 -28
  154. data/lib/X11/cursorfont.rb +7 -7
  155. data/lib/X11/cursorfont/c.rb +8 -8
  156. data/lib/X11/cursorfont/font.rb +113 -113
  157. data/lib/X11/extension.rb +65 -0
  158. data/lib/X11/extensions.rb +105 -126
  159. data/lib/X11/extensions/Xrandr.rb +49 -0
  160. data/lib/X11/extensions/Xrandr/c.rb +30 -0
  161. data/lib/X11/extensions/Xrandr/c/functions.rb +106 -0
  162. data/lib/X11/extensions/Xrandr/c/type/crtc_gamma.rb +35 -0
  163. data/lib/X11/extensions/Xrandr/c/type/crtc_info.rb +43 -0
  164. data/lib/X11/extensions/Xrandr/c/type/crtc_transform_attributes.rb +39 -0
  165. data/lib/X11/extensions/Xrandr/c/type/mode_info.rb +45 -0
  166. data/lib/X11/extensions/Xrandr/c/type/output_info.rb +46 -0
  167. data/lib/X11/extensions/Xrandr/c/type/panning.rb +44 -0
  168. data/lib/X11/extensions/Xrandr/c/type/property_info.rb +36 -0
  169. data/lib/X11/extensions/Xrandr/c/type/screen_resources.rb +39 -0
  170. data/lib/X11/extensions/Xrandr/c/type/screen_size.rb +35 -0
  171. data/lib/X11/extensions/Xrandr/c/types.rb +48 -0
  172. data/lib/X11/extensions/Xrandr/crtc.rb +70 -0
  173. data/lib/X11/extensions/Xrandr/crtc/gamma.rb +100 -0
  174. data/lib/X11/extensions/Xrandr/crtc/info.rb +62 -0
  175. data/lib/X11/extensions/Xrandr/crtc/panning.rb +74 -0
  176. data/lib/X11/extensions/Xrandr/event.rb +29 -0
  177. data/lib/X11/extensions/Xrandr/output.rb +59 -0
  178. data/lib/X11/extensions/Xrandr/output/info.rb +105 -0
  179. data/lib/X11/extensions/Xrandr/output/properties.rb +78 -0
  180. data/lib/X11/extensions/Xrandr/output/properties/property.rb +161 -0
  181. data/lib/X11/extensions/Xrandr/output/properties/property/info.rb +73 -0
  182. data/lib/X11/extensions/Xrandr/output/properties/property/parser.rb +73 -0
  183. data/lib/X11/extensions/Xrandr/output/properties/property/parser/atom.rb +39 -0
  184. data/lib/X11/extensions/Xrandr/output/properties/property/parser/integer.rb +43 -0
  185. data/lib/X11/extensions/Xrandr/screen.rb +49 -0
  186. data/lib/X11/extensions/Xrandr/screen/backlight.rb +76 -0
  187. data/lib/X11/extensions/Xrandr/screen_resources.rb +81 -0
  188. data/lib/X11/extensions/Xrandr/window.rb +41 -0
  189. data/lib/X11/extensions/Xrender.rb +34 -0
  190. data/lib/X11/extensions/Xrender/c.rb +30 -0
  191. data/lib/X11/extensions/Xrender/c/functions.rb +50 -0
  192. data/lib/X11/extensions/Xrender/c/type/anim_cursor.rb +33 -0
  193. data/lib/X11/extensions/Xrender/c/type/circle.rb +34 -0
  194. data/lib/X11/extensions/Xrender/c/type/conical_gradient.rb +33 -0
  195. data/lib/X11/extensions/Xrender/c/type/filters.rb +35 -0
  196. data/lib/X11/extensions/Xrender/c/type/glyph_elt16.rb +36 -0
  197. data/lib/X11/extensions/Xrender/c/type/glyph_elt32.rb +36 -0
  198. data/lib/X11/extensions/Xrender/c/type/glyph_elt8.rb +36 -0
  199. data/lib/X11/extensions/Xrender/c/type/glyph_info.rb +37 -0
  200. data/lib/X11/extensions/Xrender/c/type/index_value.rb +36 -0
  201. data/lib/X11/extensions/Xrender/c/type/line_fixed.rb +33 -0
  202. data/lib/X11/extensions/Xrender/c/type/linear_gradient.rb +33 -0
  203. data/lib/X11/extensions/Xrender/c/type/point_double.rb +33 -0
  204. data/lib/X11/extensions/Xrender/c/type/point_fixed.rb +33 -0
  205. data/lib/X11/extensions/Xrender/c/type/radial_gradient.rb +33 -0
  206. data/lib/X11/extensions/Xrender/c/type/render_color.rb +35 -0
  207. data/lib/X11/extensions/Xrender/c/type/render_direct_format.rb +39 -0
  208. data/lib/X11/extensions/Xrender/c/type/render_pict_format.rb +36 -0
  209. data/lib/X11/extensions/Xrender/c/type/render_picture_attributes.rb +44 -0
  210. data/lib/X11/extensions/Xrender/c/type/span_fix.rb +34 -0
  211. data/lib/X11/extensions/Xrender/c/type/transform.rb +32 -0
  212. data/lib/X11/extensions/Xrender/c/type/trap.rb +33 -0
  213. data/lib/X11/extensions/Xrender/c/type/trapezoid.rb +35 -0
  214. data/lib/X11/extensions/Xrender/c/type/triangle.rb +34 -0
  215. data/lib/X11/extensions/Xrender/c/types.rb +56 -0
  216. data/lib/X11/extensions/Xrender/mask.rb +48 -0
  217. data/lib/X11/extensions/randr.rb +29 -0
  218. data/lib/X11/extensions/randr/c.rb +38 -0
  219. data/lib/X11/extensions/render.rb +29 -0
  220. data/lib/X11/extensions/render/c.rb +34 -0
  221. data/lib/X11/extensions/xf86vmode.rb +42 -0
  222. data/lib/X11/extensions/xf86vmode/c.rb +30 -0
  223. data/lib/X11/extensions/xf86vmode/c/functions.rb +59 -0
  224. data/lib/X11/extensions/xf86vmode/c/type/gamma.rb +34 -0
  225. data/lib/X11/extensions/xf86vmode/c/type/mode_info.rb +44 -0
  226. data/lib/X11/extensions/xf86vmode/c/type/mode_line.rb +43 -0
  227. data/lib/X11/extensions/xf86vmode/c/type/monitor.rb +38 -0
  228. data/lib/X11/extensions/xf86vmode/c/type/sync_range.rb +33 -0
  229. data/lib/X11/extensions/xf86vmode/c/types.rb +36 -0
  230. data/lib/X11/extensions/xf86vmode/screen.rb +53 -0
  231. data/lib/X11/extensions/xf86vmode/screen/gamma.rb +79 -0
  232. data/lib/X11/extensions/xf86vmode/screen/gamma/ramp.rb +86 -0
  233. data/lib/X11/keysym.rb +7 -25
  234. data/lib/X11/misc/temperature.rb +458 -0
  235. data/lib/X11/simple.rb +8 -7
  236. data/lib/X11/simple/display.rb +35 -37
  237. data/lib/X11/simple/window.rb +39 -19
  238. data/lib/X11/window_manager.rb +32 -0
  239. data/lib/X11/window_manager/desktops.rb +82 -0
  240. data/lib/X11/window_manager/desktops/desktop.rb +78 -0
  241. data/lib/X11/window_manager/supports.rb +56 -0
  242. data/lib/X11/window_manager/supports/feature.rb +46 -0
  243. data/lib/X11/window_manager/window.rb +102 -0
  244. data/lib/X11/window_manager/window_manager.rb +73 -0
  245. metadata +216 -66
@@ -1,67 +1,100 @@
1
1
  #--
2
2
  # Copyleft meh. [http://meh.paranoid.pk | meh@paranoici.org]
3
- #
3
+ #
4
4
  # Redistribution and use in source and binary forms, with or without modification, are
5
5
  # permitted provided that the following conditions are met:
6
- #
6
+ #
7
7
  # 1. Redistributions of source code must retain the above copyright notice, this list of
8
8
  # conditions and the following disclaimer.
9
- #
9
+ #
10
10
  # 2. Redistributions in binary form must reproduce the above copyright notice, this list
11
11
  # of conditions and the following disclaimer in the documentation and/or other materials
12
12
  # provided with the distribution.
13
- #
14
- # THIS SOFTWARE IS PROVIDED BY <COPYRIGHT HOLDER> ''AS IS'' AND ANY EXPRESS OR IMPLIED
13
+ #
14
+ # THIS SOFTWARE IS PROVIDED BY meh ''AS IS'' AND ANY EXPRESS OR IMPLIED
15
15
  # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
16
- # FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> OR
16
+ # FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL meh OR
17
17
  # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18
18
  # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
19
19
  # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
20
20
  # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
21
21
  # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
22
22
  # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23
- #
23
+ #
24
24
  # The views and conclusions contained in the software and documentation are those of the
25
25
  # authors and should not be interpreted as representing official policies, either expressed
26
26
  # or implied.
27
27
  #++
28
28
 
29
- module X11; class Window
29
+ module X11; class Window < Drawable
30
30
 
31
31
  class Attributes
32
- def initialize (attributes)
33
- @attributes = attributes.is_a?(C::XWindowAttributes) ? attributes : attributes.typecast(C::XWindowAttributes)
34
- end
35
-
36
- C::XWindowAttributes.layout.members.each_with_index {|name, index|
37
- define_method name do
38
- @attributes[name]
39
- end
40
- }
41
-
42
- def override_redirect?
43
- @attributes[:override_redirect]
44
- end
45
-
46
- def save_under?
47
- @attributes[:save_under]
48
- end
49
-
50
- def map_installed?
51
- @attributes[:map_installed]
52
- end
53
-
54
- def root
55
- Window.new(@attributes[:root])
56
- end
57
-
58
- def visual
59
- Visual.new(@attributes[:visual])
60
- end
61
-
62
- def screen
63
- Screen.new(@attributes[:screen])
64
- end
32
+ attr_reader :window
33
+
34
+ def initialize (window, attributes=nil)
35
+ @window = window
36
+ @attributes = if attributes
37
+ attributes.is_a?(C::XWindowAttributes) ? attributes : attributes.typecast(C::XWindowAttributes)
38
+ else
39
+ C::XWindowAttributes.new
40
+ end
41
+ end
42
+
43
+ C::XWindowAttributes.layout.members.each {|name|
44
+ next if respond_to? name
45
+
46
+ define_method name do
47
+ @attributes[name]
48
+ end
49
+ }
50
+
51
+ def input_only?
52
+ @attributes[:class] == 2
53
+ end
54
+
55
+ def unmapped?
56
+ @attributes[:map_state] == 0
57
+ end
58
+
59
+ def unviewable?
60
+ @attributes[:map_state] == 1
61
+ end
62
+
63
+ def viewable?
64
+ @attributes[:map_state] == 2
65
+ end
66
+
67
+ def override_redirect?
68
+ @attributes[:override_redirect]
69
+ end
70
+
71
+ def save_under?
72
+ @attributes[:save_under]
73
+ end
74
+
75
+ def map_installed?
76
+ @attributes[:map_installed]
77
+ end
78
+
79
+ def root
80
+ Window.new(window.display, @attributes[:root])
81
+ end
82
+
83
+ def visual
84
+ Visual.new(window.display, @attributes[:visual])
85
+ end
86
+
87
+ def screen
88
+ Screen.new(window.display, @attributes[:screen])
89
+ end
90
+
91
+ def save
92
+
93
+ end
94
+
95
+ def to_ffi
96
+ @attributes
97
+ end
65
98
  end
66
99
 
67
100
  end; end
@@ -1,26 +1,26 @@
1
1
  #--
2
2
  # Copyleft meh. [http://meh.paranoid.pk | meh@paranoici.org]
3
- #
3
+ #
4
4
  # Redistribution and use in source and binary forms, with or without modification, are
5
5
  # permitted provided that the following conditions are met:
6
- #
6
+ #
7
7
  # 1. Redistributions of source code must retain the above copyright notice, this list of
8
8
  # conditions and the following disclaimer.
9
- #
9
+ #
10
10
  # 2. Redistributions in binary form must reproduce the above copyright notice, this list
11
11
  # of conditions and the following disclaimer in the documentation and/or other materials
12
12
  # provided with the distribution.
13
- #
14
- # THIS SOFTWARE IS PROVIDED BY <COPYRIGHT HOLDER> ''AS IS'' AND ANY EXPRESS OR IMPLIED
13
+ #
14
+ # THIS SOFTWARE IS PROVIDED BY meh ''AS IS'' AND ANY EXPRESS OR IMPLIED
15
15
  # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
16
- # FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> OR
16
+ # FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL meh OR
17
17
  # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18
18
  # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
19
19
  # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
20
20
  # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
21
21
  # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
22
22
  # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23
- #
23
+ #
24
24
  # The views and conclusions contained in the software and documentation are those of the
25
25
  # authors and should not be interpreted as representing official policies, either expressed
26
26
  # or implied.
@@ -28,39 +28,58 @@
28
28
 
29
29
  require 'X11/Xlib/window/properties/property'
30
30
 
31
- module X11; class Window
31
+ module X11; class Window < Drawable
32
32
 
33
33
  class Properties
34
- include Enumerable
35
- extend Forwardable
36
-
37
- attr_reader :window
38
- def_delegators :@window, :display
39
-
40
- def initialize (window)
41
- @window = window
42
- end
43
-
44
- def each (&block)
45
- number = FFI::MemoryPointer.new :int
46
- list = C::XListProperties(display.to_ffi, window.to_ffi, number)
47
-
48
- return if list.null?
49
-
50
- list.read_array_of(:Atom, number.typecast(:int)).each {|atom|
51
- block.call Property.new(window, Atom.new(atom.to_i, display))
52
- }
53
-
54
- C::XFree(list)
55
-
56
- self
57
- end
58
-
59
- def [] (name)
60
- find {|property|
61
- property.name == name.to_s
62
- }
63
- end
34
+ include Enumerable
35
+ extend Forwardable
36
+
37
+ attr_reader :window
38
+ def_delegators :@window, :display
39
+
40
+ def initialize (window)
41
+ @window = window
42
+ end
43
+
44
+ def [] (atom)
45
+ if !(property = Property.new(window, Atom[atom, display])).nil?
46
+ property
47
+ end
48
+ end
49
+
50
+ def []= (atom, value, type=nil)
51
+ Property.new(window, Atom[atom, display]).value = value, type
52
+ end
53
+
54
+ def has? (atom)
55
+ !!self[atom]
56
+ end
57
+
58
+ def delete (atom)
59
+ C::XDeleteProperty(display.to_ffi, window.to_ffi, Atom[atom, display].to_ffi)
60
+ end
61
+
62
+ def rotate (properties, positions=1)
63
+ array = FFI::MemoryPointer.new(:Atom, properties.length)
64
+ array.write_array_of(:Atom, properties.map { |name| name.to_ffi })
65
+
66
+ C::XRotateWindowProperties(display.to_ffi, window.to_ffi, array, properties.length, positions)
67
+ end
68
+
69
+ def each (&block)
70
+ number = FFI::MemoryPointer.new :int
71
+ list = C::XListProperties(display.to_ffi, window.to_ffi, number)
72
+
73
+ return self if list.null?
74
+
75
+ list.read_array_of(:Atom, number.typecast(:int)).each {|atom|
76
+ block.call Property.new(window, Atom.new(atom.to_i, display))
77
+ }
78
+
79
+ C::XFree(list)
80
+
81
+ self
82
+ end
64
83
  end
65
84
 
66
85
  end; end
@@ -1,26 +1,26 @@
1
1
  #--
2
2
  # Copyleft meh. [http://meh.paranoid.pk | meh@paranoici.org]
3
- #
3
+ #
4
4
  # Redistribution and use in source and binary forms, with or without modification, are
5
5
  # permitted provided that the following conditions are met:
6
- #
6
+ #
7
7
  # 1. Redistributions of source code must retain the above copyright notice, this list of
8
8
  # conditions and the following disclaimer.
9
- #
9
+ #
10
10
  # 2. Redistributions in binary form must reproduce the above copyright notice, this list
11
11
  # of conditions and the following disclaimer in the documentation and/or other materials
12
12
  # provided with the distribution.
13
- #
14
- # THIS SOFTWARE IS PROVIDED BY <COPYRIGHT HOLDER> ''AS IS'' AND ANY EXPRESS OR IMPLIED
13
+ #
14
+ # THIS SOFTWARE IS PROVIDED BY meh ''AS IS'' AND ANY EXPRESS OR IMPLIED
15
15
  # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
16
- # FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> OR
16
+ # FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL meh OR
17
17
  # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18
18
  # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
19
19
  # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
20
20
  # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
21
21
  # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
22
22
  # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23
- #
23
+ #
24
24
  # The views and conclusions contained in the software and documentation are those of the
25
25
  # authors and should not be interpreted as representing official policies, either expressed
26
26
  # or implied.
@@ -28,71 +28,136 @@
28
28
 
29
29
  require 'X11/Xlib/window/properties/property/parser'
30
30
 
31
- module X11; class Window; class Properties
31
+ module X11; class Window < Drawable; class Properties
32
32
 
33
33
  class Property
34
- @transforms = {
35
- :default => Transform.new(:default) {
36
- input do |property, data|
37
- data
38
- end
39
-
40
- output do |property, data|
41
- data
42
- end
43
- }
44
- }
45
-
46
- def self.register (name, &block)
47
- @transforms[name.to_s] = Transform.new(name, &block)
48
- end
49
-
50
- def self.transform (property)
51
- (@transforms[property.name] || @transforms[:default]).for(property)
52
- end
53
-
54
- MaxLength = 500000
55
-
56
- extend Forwardable
57
-
58
- attr_reader :window, :atom, :value
59
- def_delegators :@window, :display
60
- def_delegators :@atom, :to_s, :to_i, :to_ffi
61
- def_delegator :@atom, :to_s, :name
62
-
63
- def initialize (window, atom)
64
- @window = window
65
- @atom = atom
66
-
67
- @value = Retarded.new {
68
- type = FFI::MemoryPointer.new :Atom
69
- format = FFI::MemoryPointer.new :int
70
- length = FFI::MemoryPointer.new :ulong
71
- after = FFI::MemoryPointer.new :ulong
72
- property = FFI::MemoryPointer.new :pointer
73
-
74
- return unless C::XGetWindowProperty(display.to_ffi, window.to_ffi, atom.to_ffi,
75
- 0, (MaxLength + 3) / 4, false, AnyProperty, type, format, length, after, property).ok?
76
-
77
- size = format.typecast(:int)
78
- length = [length.typecast(:ulong) * FFI.type_size({ 8 => :char, 16 => :short, 32 => :long }[size]), MaxLength].min
79
-
80
- @type = Atom.new(type.typecast(:Atom).to_i, display)
81
-
82
- Property.transform(self).output(Property::Parser.parse(self, property.typecast(:pointer).read_string(length)))
83
- }
84
- end
85
-
86
- def type
87
- @type or (~@value; @type)
88
- end
89
-
90
- def inspect
91
- "#<X11::Window::Property(#{name}): #{type}#{" #{value.inspect}" unless value.nil?}>"
92
- end
34
+ module Mode
35
+ Replace = 0
36
+ Prepend = 1
37
+ Append = 2
38
+
39
+ def self.[] (what)
40
+ what.is_a?(Integer) ? what : const_get(what.to_s.downcase.capitalize)
41
+ end
42
+ end
43
+
44
+ Transforms = {
45
+ default: Transform.new(:default) {
46
+ output do |property, data|
47
+ data
48
+ end
49
+
50
+ input do |property, value, type|
51
+ [value, type]
52
+ end
53
+ }
54
+ }
55
+
56
+ def self.register (name, &block)
57
+ Transforms[name.to_s] = Transform.new(name, &block)
58
+ end
59
+
60
+ def self.transform (property)
61
+ (Transforms[property.name] || Transforms[:default]).for(property)
62
+ end
63
+
64
+ MaxLength = 500000
65
+
66
+ extend Forwardable
67
+
68
+ attr_reader :window, :value
69
+ def_delegators :@window, :display
70
+ def_delegators :@atom, :to_s, :to_i, :to_ffi
71
+ def_delegator :@atom, :to_s, :name
72
+
73
+ def initialize (window, name)
74
+ @window = window
75
+ @atom = name
76
+ end
77
+
78
+ def nil?
79
+ value.nil?
80
+ end
81
+
82
+ def value
83
+ type = FFI::MemoryPointer.new :Atom
84
+ format = FFI::MemoryPointer.new :int
85
+ length = FFI::MemoryPointer.new :ulong
86
+ after = FFI::MemoryPointer.new :ulong
87
+ property = FFI::MemoryPointer.new :pointer
88
+
89
+ return unless C::XGetWindowProperty(display.to_ffi, window.to_ffi, to_ffi,
90
+ 0, (MaxLength + 3) / 4, false, AnyProperty, type, format, length, after, property).ok?
91
+
92
+ return if property.typecast(:pointer).null?
93
+
94
+ Property.transform(self).output(Property::Parser.parse(self).output(
95
+ property.typecast(:pointer).read_string(
96
+ [length.typecast(:ulong) * FFI.type_size(
97
+ { 0 => :void, 8 => :char, 16 => :short, 32 => :long }[format.typecast(:int)]), MaxLength].min)))
98
+ end
99
+
100
+ def value= (value, type=nil, mode=:replace)
101
+ type ||= self.type
102
+
103
+ format, data, length = Property::Parser.parse(self).input(*Property.transform(self).input(
104
+ value.is_a?(Array) ? value : [value], type))
105
+
106
+ C::XChangeProperty(display.to_ffi, window.to_ffi, to_ffi, type.to_ffi, format, Mode[mode], data, length)
107
+
108
+ display.flush
109
+ end
110
+
111
+ def << (value, type=nil)
112
+ self.value = value, type, :append
113
+ end
114
+
115
+ def >> (value, type=nil)
116
+ self.value = value, type, :prepend
117
+ end
118
+
119
+ def type
120
+ @type ? @type : type?
121
+ end
122
+
123
+ def type?
124
+ type = FFI::MemoryPointer.new :Atom
125
+ format = FFI::MemoryPointer.new :int
126
+ length = FFI::MemoryPointer.new :ulong
127
+ after = FFI::MemoryPointer.new :ulong
128
+ property = FFI::MemoryPointer.new :pointer
129
+
130
+ return unless C::XGetWindowProperty(display.to_ffi, window.to_ffi, to_ffi,
131
+ 0, (MaxLength + 3) / 4, false, AnyProperty, type, format, length, after, property).ok?
132
+
133
+ return if property.typecast(:pointer).null?
134
+
135
+ Atom.new(type.typecast(:Atom).to_i, display)
136
+ end
137
+
138
+ def type!
139
+ @type = nil
140
+ type?
141
+ end
142
+
143
+ def type= (type)
144
+ @type = type
145
+ end
146
+
147
+ def rotate (positions=1)
148
+ array = FFI::MemoryPointer.new(:Atom)
149
+ array.write(to_ffi, :Atom)
150
+
151
+ C::XRotateWindowProperties(display.to_ffi, window.to_ffi, array, 1, positions)
152
+ end
153
+
154
+ def inspect
155
+ if nil?
156
+ "#<X11::Window::Property(#{name})>"
157
+ else
158
+ "#<X11::Window::Property(#{name}): #{type}#{" #{value.inspect}" unless value.nil?}>"
159
+ end
160
+ end
93
161
  end
94
162
 
95
163
  end; end; end
96
-
97
- require 'X11/Xlib/window/properties/property/class'
98
- require 'X11/Xlib/window/properties/property/command'