gtk2 0.20.1 → 0.90.2

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.
Files changed (443) hide show
  1. data/ChangeLog +30 -0
  2. data/Rakefile +60 -54
  3. data/ext/gtk2/Makefile +163 -0
  4. data/ext/gtk2/depend +10 -0
  5. data/ext/gtk2/extconf.rb +202 -0
  6. data/{src → ext/gtk2}/global.h +0 -0
  7. data/ext/gtk2/gtk2.def +27 -0
  8. data/{src → ext/gtk2}/init.c +0 -0
  9. data/{src → ext/gtk2}/rbgdk.c +0 -0
  10. data/{src → ext/gtk2}/rbgdk.h +0 -0
  11. data/{src → ext/gtk2}/rbgdkatom.c +0 -0
  12. data/{src → ext/gtk2}/rbgdkcairo.c +0 -0
  13. data/{src → ext/gtk2}/rbgdkcolor.c +0 -0
  14. data/{src → ext/gtk2}/rbgdkcolormap.c +0 -0
  15. data/{src → ext/gtk2}/rbgdkconst.c +0 -0
  16. data/{src → ext/gtk2}/rbgdkconversions.h +0 -0
  17. data/{src → ext/gtk2}/rbgdkcursor.c +0 -0
  18. data/{src → ext/gtk2}/rbgdkdevice.c +0 -0
  19. data/{src → ext/gtk2}/rbgdkdisplay.c +0 -0
  20. data/{src → ext/gtk2}/rbgdkdisplaymanager.c +0 -0
  21. data/{src → ext/gtk2}/rbgdkdragcontext.c +0 -0
  22. data/{src → ext/gtk2}/rbgdkdraw.c +0 -0
  23. data/{src → ext/gtk2}/rbgdkevent.c +0 -0
  24. data/{src → ext/gtk2}/rbgdkgc.c +0 -0
  25. data/{src → ext/gtk2}/rbgdkgeometry.c +0 -0
  26. data/{src → ext/gtk2}/rbgdkimage.c +0 -0
  27. data/{src → ext/gtk2}/rbgdkinput.c +0 -0
  28. data/{src → ext/gtk2}/rbgdkkeymap.c +0 -0
  29. data/{src → ext/gtk2}/rbgdkkeysyms.h +0 -466
  30. data/{src → ext/gtk2}/rbgdkkeyval.c +0 -0
  31. data/{src → ext/gtk2}/rbgdkpango.c +0 -0
  32. data/{src → ext/gtk2}/rbgdkpangorenderer.c +0 -0
  33. data/{src → ext/gtk2}/rbgdkpixbuf.c +0 -0
  34. data/{src → ext/gtk2}/rbgdkpixmap.c +0 -0
  35. data/{src → ext/gtk2}/rbgdkproperty.c +0 -0
  36. data/{src → ext/gtk2}/rbgdkrectangle.c +0 -0
  37. data/{src → ext/gtk2}/rbgdkregion.c +0 -0
  38. data/{src → ext/gtk2}/rbgdkrgb.c +0 -0
  39. data/{src → ext/gtk2}/rbgdkscreen.c +0 -0
  40. data/{src → ext/gtk2}/rbgdkselection.c +0 -0
  41. data/{src → ext/gtk2}/rbgdkthreads.c +0 -0
  42. data/{src → ext/gtk2}/rbgdktimecoord.c +0 -0
  43. data/{src → ext/gtk2}/rbgdkvisual.c +0 -0
  44. data/{src → ext/gtk2}/rbgdkwindow.c +0 -0
  45. data/{src → ext/gtk2}/rbgdkwindowattr.c +0 -0
  46. data/{src → ext/gtk2}/rbgdkx11.c +0 -0
  47. data/{src → ext/gtk2}/rbgtk.c +0 -0
  48. data/{src → ext/gtk2}/rbgtk.h +0 -4
  49. data/{src → ext/gtk2}/rbgtkaboutdialog.c +0 -0
  50. data/{src → ext/gtk2}/rbgtkaccelerator.c +0 -0
  51. data/{src → ext/gtk2}/rbgtkaccelgroup.c +0 -0
  52. data/{src → ext/gtk2}/rbgtkaccelgroupentry.c +0 -0
  53. data/{src → ext/gtk2}/rbgtkaccelkey.c +0 -0
  54. data/{src → ext/gtk2}/rbgtkaccellabel.c +0 -0
  55. data/{src → ext/gtk2}/rbgtkaccelmap.c +0 -0
  56. data/{src → ext/gtk2}/rbgtkaccessible.c +0 -0
  57. data/{src → ext/gtk2}/rbgtkaction.c +0 -0
  58. data/{src → ext/gtk2}/rbgtkactiongroup.c +0 -0
  59. data/{src → ext/gtk2}/rbgtkadjustment.c +0 -0
  60. data/{src → ext/gtk2}/rbgtkalignment.c +0 -0
  61. data/{src → ext/gtk2}/rbgtkallocation.c +0 -0
  62. data/{src → ext/gtk2}/rbgtkarrow.c +0 -0
  63. data/{src → ext/gtk2}/rbgtkaspectframe.c +0 -0
  64. data/{src → ext/gtk2}/rbgtkassistant.c +0 -0
  65. data/{src → ext/gtk2}/rbgtkbbox.c +0 -0
  66. data/{src → ext/gtk2}/rbgtkbin.c +0 -0
  67. data/{src → ext/gtk2}/rbgtkbindingset.c +0 -0
  68. data/{src → ext/gtk2}/rbgtkborder.c +0 -0
  69. data/{src → ext/gtk2}/rbgtkbox.c +0 -0
  70. data/{src → ext/gtk2}/rbgtkbuildable.c +0 -0
  71. data/{src → ext/gtk2}/rbgtkbuilder.c +0 -0
  72. data/{src → ext/gtk2}/rbgtkbutton.c +0 -0
  73. data/{src → ext/gtk2}/rbgtkcalendar.c +0 -0
  74. data/{src → ext/gtk2}/rbgtkcelleditable.c +0 -0
  75. data/{src → ext/gtk2}/rbgtkcelllayout.c +0 -0
  76. data/{src → ext/gtk2}/rbgtkcellrenderer.c +0 -0
  77. data/{src → ext/gtk2}/rbgtkcellrendereraccel.c +0 -0
  78. data/{src → ext/gtk2}/rbgtkcellrenderercombo.c +0 -0
  79. data/{src → ext/gtk2}/rbgtkcellrendererpixbuf.c +0 -0
  80. data/{src → ext/gtk2}/rbgtkcellrendererprogress.c +0 -0
  81. data/{src → ext/gtk2}/rbgtkcellrendererspin.c +0 -0
  82. data/{src → ext/gtk2}/rbgtkcellrenderertext.c +0 -0
  83. data/{src → ext/gtk2}/rbgtkcellrenderertoggle.c +0 -0
  84. data/{src → ext/gtk2}/rbgtkcellview.c +0 -0
  85. data/{src → ext/gtk2}/rbgtkcheckbutton.c +0 -0
  86. data/{src → ext/gtk2}/rbgtkcheckmenuitem.c +0 -0
  87. data/{src → ext/gtk2}/rbgtkclipboard.c +0 -0
  88. data/{src → ext/gtk2}/rbgtkcolorbutton.c +0 -0
  89. data/{src → ext/gtk2}/rbgtkcolorsel.c +0 -0
  90. data/{src → ext/gtk2}/rbgtkcolorselectiondialog.c +0 -0
  91. data/{src → ext/gtk2}/rbgtkcombo.c +0 -0
  92. data/{src → ext/gtk2}/rbgtkcombobox.c +0 -0
  93. data/{src → ext/gtk2}/rbgtkcomboboxentry.c +0 -0
  94. data/{src → ext/gtk2}/rbgtkconst.c +0 -0
  95. data/{src → ext/gtk2}/rbgtkcontainer.c +0 -0
  96. data/{src → ext/gtk2}/rbgtkconversions.h +0 -0
  97. data/{src → ext/gtk2}/rbgtkcurve.c +0 -0
  98. data/{src → ext/gtk2}/rbgtkdialog.c +0 -0
  99. data/{src → ext/gtk2}/rbgtkdrag.c +0 -0
  100. data/{src → ext/gtk2}/rbgtkdrawingarea.c +0 -0
  101. data/{src → ext/gtk2}/rbgtkeditable.c +0 -0
  102. data/{src → ext/gtk2}/rbgtkentry.c +0 -0
  103. data/{src → ext/gtk2}/rbgtkentrycompletion.c +0 -0
  104. data/{src → ext/gtk2}/rbgtkeventbox.c +0 -0
  105. data/{src → ext/gtk2}/rbgtkexpander.c +0 -0
  106. data/{src → ext/gtk2}/rbgtkfilechooser.c +0 -0
  107. data/{src → ext/gtk2}/rbgtkfilechooserbutton.c +0 -0
  108. data/{src → ext/gtk2}/rbgtkfilechooserdialog.c +0 -0
  109. data/{src → ext/gtk2}/rbgtkfilechooserwidget.c +0 -0
  110. data/{src → ext/gtk2}/rbgtkfilefilter.c +0 -0
  111. data/{src → ext/gtk2}/rbgtkfilesel.c +0 -0
  112. data/{src → ext/gtk2}/rbgtkfixed.c +0 -0
  113. data/{src → ext/gtk2}/rbgtkfontbutton.c +0 -0
  114. data/{src → ext/gtk2}/rbgtkfontselection.c +0 -0
  115. data/{src → ext/gtk2}/rbgtkfontselectiondialog.c +0 -0
  116. data/{src → ext/gtk2}/rbgtkframe.c +0 -0
  117. data/{src → ext/gtk2}/rbgtkgamma.c +0 -0
  118. data/{src → ext/gtk2}/rbgtkhandlebox.c +0 -0
  119. data/{src → ext/gtk2}/rbgtkhbbox.c +0 -0
  120. data/{src → ext/gtk2}/rbgtkhbox.c +0 -0
  121. data/{src → ext/gtk2}/rbgtkhpaned.c +0 -0
  122. data/{src → ext/gtk2}/rbgtkhruler.c +0 -0
  123. data/{src → ext/gtk2}/rbgtkhscale.c +0 -0
  124. data/{src → ext/gtk2}/rbgtkhscrollbar.c +0 -0
  125. data/{src → ext/gtk2}/rbgtkhseparator.c +0 -0
  126. data/{src → ext/gtk2}/rbgtkiconfactory.c +0 -0
  127. data/{src → ext/gtk2}/rbgtkiconinfo.c +0 -0
  128. data/{src → ext/gtk2}/rbgtkiconset.c +0 -0
  129. data/{src → ext/gtk2}/rbgtkiconsize.c +0 -0
  130. data/{src → ext/gtk2}/rbgtkiconsource.c +0 -0
  131. data/{src → ext/gtk2}/rbgtkicontheme.c +0 -0
  132. data/{src → ext/gtk2}/rbgtkiconview.c +0 -0
  133. data/{src → ext/gtk2}/rbgtkimage.c +0 -0
  134. data/{src → ext/gtk2}/rbgtkimagemenuitem.c +0 -0
  135. data/{src → ext/gtk2}/rbgtkimcontext.c +0 -0
  136. data/{src → ext/gtk2}/rbgtkimcontextsimple.c +0 -0
  137. data/{src → ext/gtk2}/rbgtkimmulticontext.c +0 -0
  138. data/{src → ext/gtk2}/rbgtkinits.c +2 -6
  139. data/{src → ext/gtk2}/rbgtkinputdialog.c +0 -0
  140. data/{src → ext/gtk2}/rbgtkinvisible.c +0 -0
  141. data/{src → ext/gtk2}/rbgtkitem.c +0 -0
  142. data/{src → ext/gtk2}/rbgtkitemfactory.c +0 -0
  143. data/{src → ext/gtk2}/rbgtklabel.c +0 -0
  144. data/{src → ext/gtk2}/rbgtklayout.c +0 -0
  145. data/{src → ext/gtk2}/rbgtklinkbutton.c +0 -0
  146. data/{src → ext/gtk2}/rbgtkliststore.c +0 -0
  147. data/{src → ext/gtk2}/rbgtkmacros.h +0 -0
  148. data/{src → ext/gtk2}/rbgtkmain.c +0 -0
  149. data/{src → ext/gtk2}/rbgtkmenu.c +0 -0
  150. data/{src → ext/gtk2}/rbgtkmenubar.c +0 -0
  151. data/{src → ext/gtk2}/rbgtkmenuitem.c +0 -0
  152. data/{src → ext/gtk2}/rbgtkmenushell.c +0 -0
  153. data/{src → ext/gtk2}/rbgtkmenutoolbutton.c +0 -0
  154. data/{src → ext/gtk2}/rbgtkmessagedialog.c +0 -0
  155. data/{src → ext/gtk2}/rbgtkmisc.c +0 -0
  156. data/{src → ext/gtk2}/rbgtknotebook.c +0 -0
  157. data/{src → ext/gtk2}/rbgtkobject.c +0 -0
  158. data/{src → ext/gtk2}/rbgtkoptionmenu.c +0 -0
  159. data/{src → ext/gtk2}/rbgtkpagesetup.c +0 -0
  160. data/{src → ext/gtk2}/rbgtkpagesetupunixdialog.c +0 -0
  161. data/{src → ext/gtk2}/rbgtkpaned.c +0 -0
  162. data/{src → ext/gtk2}/rbgtkpapersize.c +0 -0
  163. data/{src → ext/gtk2}/rbgtkplug.c +0 -0
  164. data/{src → ext/gtk2}/rbgtkprintcontext.c +0 -0
  165. data/{src → ext/gtk2}/rbgtkprinter.c +0 -0
  166. data/{src → ext/gtk2}/rbgtkprintjob.c +0 -0
  167. data/{src → ext/gtk2}/rbgtkprintoperation.c +0 -0
  168. data/{src → ext/gtk2}/rbgtkprintoperationpreview.c +0 -0
  169. data/{src → ext/gtk2}/rbgtkprintsettings.c +0 -0
  170. data/{src → ext/gtk2}/rbgtkprintunixdialog.c +0 -0
  171. data/{src → ext/gtk2}/rbgtkprogress.c +0 -0
  172. data/{src → ext/gtk2}/rbgtkprogressbar.c +0 -0
  173. data/{src → ext/gtk2}/rbgtkradioaction.c +0 -0
  174. data/{src → ext/gtk2}/rbgtkradiobutton.c +0 -0
  175. data/{src → ext/gtk2}/rbgtkradiomenuitem.c +0 -0
  176. data/{src → ext/gtk2}/rbgtkradiotoolbutton.c +0 -0
  177. data/{src → ext/gtk2}/rbgtkrange.c +0 -0
  178. data/{src → ext/gtk2}/rbgtkrc.c +0 -0
  179. data/{src → ext/gtk2}/rbgtkrcstyle.c +0 -0
  180. data/{src → ext/gtk2}/rbgtkrecentaction.c +0 -0
  181. data/{src → ext/gtk2}/rbgtkrecentchooser.c +0 -0
  182. data/{src → ext/gtk2}/rbgtkrecentchooserdialog.c +0 -0
  183. data/{src → ext/gtk2}/rbgtkrecentchoosermenu.c +0 -0
  184. data/{src → ext/gtk2}/rbgtkrecentchooserwidget.c +0 -0
  185. data/{src → ext/gtk2}/rbgtkrecentdata.c +0 -0
  186. data/{src → ext/gtk2}/rbgtkrecentfilter.c +0 -0
  187. data/{src → ext/gtk2}/rbgtkrecentfilterinfo.c +0 -0
  188. data/{src → ext/gtk2}/rbgtkrecentinfo.c +0 -0
  189. data/{src → ext/gtk2}/rbgtkrecentmanager.c +0 -0
  190. data/{src → ext/gtk2}/rbgtkruler.c +0 -0
  191. data/{src → ext/gtk2}/rbgtkscale.c +0 -0
  192. data/{src → ext/gtk2}/rbgtkscalebutton.c +0 -0
  193. data/{src → ext/gtk2}/rbgtkscrollbar.c +0 -0
  194. data/{src → ext/gtk2}/rbgtkscrolledwindow.c +0 -0
  195. data/{src → ext/gtk2}/rbgtkselection.c +0 -0
  196. data/{src → ext/gtk2}/rbgtkselectiondata.c +0 -0
  197. data/{src → ext/gtk2}/rbgtkseparator.c +0 -0
  198. data/{src → ext/gtk2}/rbgtkseparatormenuitem.c +0 -0
  199. data/{src → ext/gtk2}/rbgtkseparatortoolitem.c +0 -0
  200. data/{src → ext/gtk2}/rbgtksettings.c +0 -0
  201. data/{src → ext/gtk2}/rbgtksizegroup.c +0 -0
  202. data/{src → ext/gtk2}/rbgtksocket.c +0 -0
  203. data/{src → ext/gtk2}/rbgtkspinbutton.c +0 -0
  204. data/{src → ext/gtk2}/rbgtkstatusbar.c +0 -0
  205. data/{src → ext/gtk2}/rbgtkstatusicon.c +0 -0
  206. data/{src → ext/gtk2}/rbgtkstock.c +0 -0
  207. data/{src → ext/gtk2}/rbgtkstyle.c +0 -0
  208. data/{src → ext/gtk2}/rbgtktable.c +0 -0
  209. data/{src → ext/gtk2}/rbgtktargetlist.c +0 -0
  210. data/{src → ext/gtk2}/rbgtktearoffmenuitem.c +0 -0
  211. data/{src → ext/gtk2}/rbgtktextappearance.c +0 -0
  212. data/{src → ext/gtk2}/rbgtktextattributes.c +0 -0
  213. data/{src → ext/gtk2}/rbgtktextbuffer.c +0 -0
  214. data/{src → ext/gtk2}/rbgtktextchild.c +0 -0
  215. data/{src → ext/gtk2}/rbgtktextiter.c +0 -0
  216. data/{src → ext/gtk2}/rbgtktextmark.c +0 -0
  217. data/{src → ext/gtk2}/rbgtktexttag.c +0 -0
  218. data/{src → ext/gtk2}/rbgtktexttagtable.c +0 -0
  219. data/{src → ext/gtk2}/rbgtktextview.c +0 -0
  220. data/{src → ext/gtk2}/rbgtktoggleaction.c +0 -0
  221. data/{src → ext/gtk2}/rbgtktogglebutton.c +0 -0
  222. data/{src → ext/gtk2}/rbgtktoggletoolbutton.c +0 -0
  223. data/{src → ext/gtk2}/rbgtktoolbar.c +0 -0
  224. data/{src → ext/gtk2}/rbgtktoolbutton.c +0 -0
  225. data/{src → ext/gtk2}/rbgtktoolitem.c +0 -0
  226. data/{src → ext/gtk2}/rbgtktooltip.c +0 -0
  227. data/{src → ext/gtk2}/rbgtktooltips.c +0 -0
  228. data/{src → ext/gtk2}/rbgtktreedragdest.c +0 -0
  229. data/{src → ext/gtk2}/rbgtktreedragsource.c +0 -0
  230. data/{src → ext/gtk2}/rbgtktreeiter.c +0 -0
  231. data/{src → ext/gtk2}/rbgtktreemodel.c +0 -0
  232. data/{src → ext/gtk2}/rbgtktreemodelfilter.c +0 -0
  233. data/{src → ext/gtk2}/rbgtktreemodelsort.c +0 -0
  234. data/{src → ext/gtk2}/rbgtktreepath.c +0 -0
  235. data/{src → ext/gtk2}/rbgtktreerowreference.c +0 -0
  236. data/{src → ext/gtk2}/rbgtktreeselection.c +0 -0
  237. data/{src → ext/gtk2}/rbgtktreesortable.c +0 -0
  238. data/{src → ext/gtk2}/rbgtktreestore.c +0 -0
  239. data/{src → ext/gtk2}/rbgtktreeview.c +0 -0
  240. data/{src → ext/gtk2}/rbgtktreeviewcolumn.c +0 -0
  241. data/{src → ext/gtk2}/rbgtkuimanager.c +0 -0
  242. data/{src → ext/gtk2}/rbgtkvbbox.c +0 -0
  243. data/{src → ext/gtk2}/rbgtkvbox.c +0 -0
  244. data/{src → ext/gtk2}/rbgtkviewport.c +0 -0
  245. data/{src → ext/gtk2}/rbgtkvolumebutton.c +0 -0
  246. data/{src → ext/gtk2}/rbgtkvpaned.c +0 -0
  247. data/{src → ext/gtk2}/rbgtkvruler.c +0 -0
  248. data/{src → ext/gtk2}/rbgtkvscale.c +0 -0
  249. data/{src → ext/gtk2}/rbgtkvscrollbar.c +0 -0
  250. data/{src → ext/gtk2}/rbgtkvseparator.c +0 -0
  251. data/{src → ext/gtk2}/rbgtkwidget.c +0 -0
  252. data/{src → ext/gtk2}/rbgtkwindow.c +0 -0
  253. data/{src → ext/gtk2}/rbgtkwindowgroup.c +0 -0
  254. data/extconf.rb +48 -113
  255. data/{src/lib → lib}/gtk2.rb +0 -0
  256. data/{src/lib → lib}/gtk2/base.rb +12 -1
  257. data/sample/gtk-demo/README +7 -0
  258. data/sample/gtk-demo/alphatest.png +0 -0
  259. data/sample/gtk-demo/apple-red.png +0 -0
  260. data/sample/gtk-demo/appwindow.rb +233 -0
  261. data/sample/gtk-demo/background.jpg +0 -0
  262. data/sample/gtk-demo/builder.rb +51 -0
  263. data/sample/gtk-demo/button_box.rb +84 -0
  264. data/sample/gtk-demo/cairo-arc-negative.rb +41 -0
  265. data/sample/gtk-demo/cairo-arc.rb +41 -0
  266. data/sample/gtk-demo/cairo-clip-image.rb +51 -0
  267. data/sample/gtk-demo/cairo-clip-rectangle.rb +35 -0
  268. data/sample/gtk-demo/cairo-clip.rb +35 -0
  269. data/sample/gtk-demo/cairo-curve-rectangle.rb +76 -0
  270. data/sample/gtk-demo/cairo-curve-to.rb +43 -0
  271. data/sample/gtk-demo/cairo-dash.rb +39 -0
  272. data/sample/gtk-demo/cairo-fill-and-stroke.rb +32 -0
  273. data/sample/gtk-demo/cairo-fill-and-stroke2.rb +38 -0
  274. data/sample/gtk-demo/cairo-gradient.rb +35 -0
  275. data/sample/gtk-demo/cairo-image-pattern.rb +39 -0
  276. data/sample/gtk-demo/cairo-image.rb +49 -0
  277. data/sample/gtk-demo/cairo-line-cap.rb +53 -0
  278. data/sample/gtk-demo/cairo-line-join.rb +41 -0
  279. data/sample/gtk-demo/cairo-long-lines.rb +41 -0
  280. data/sample/gtk-demo/cairo-operator.rb +83 -0
  281. data/sample/gtk-demo/cairo-path.rb +28 -0
  282. data/sample/gtk-demo/cairo-pattern-fill.rb +88 -0
  283. data/sample/gtk-demo/cairo-self-intersect.rb +32 -0
  284. data/sample/gtk-demo/cairo-text-align-center.rb +45 -0
  285. data/sample/gtk-demo/cairo-text-extents.rb +46 -0
  286. data/sample/gtk-demo/cairo-text.rb +43 -0
  287. data/sample/gtk-demo/changedisplay.rb +408 -0
  288. data/sample/gtk-demo/clipboard.rb +72 -0
  289. data/sample/gtk-demo/colorsel.rb +84 -0
  290. data/sample/gtk-demo/common.rb +88 -0
  291. data/sample/gtk-demo/demo.ui +258 -0
  292. data/sample/gtk-demo/dialog.rb +137 -0
  293. data/sample/gtk-demo/drawingarea.rb +226 -0
  294. data/sample/gtk-demo/editable_cells.rb +172 -0
  295. data/sample/gtk-demo/entry_completion.rb +63 -0
  296. data/sample/gtk-demo/expander.rb +40 -0
  297. data/sample/gtk-demo/floppybuddy.gif +0 -0
  298. data/sample/gtk-demo/gnome-applets.png +0 -0
  299. data/sample/gtk-demo/gnome-calendar.png +0 -0
  300. data/sample/gtk-demo/gnome-foot.png +0 -0
  301. data/sample/gtk-demo/gnome-fs-directory.png +0 -0
  302. data/sample/gtk-demo/gnome-fs-regular.png +0 -0
  303. data/sample/gtk-demo/gnome-gimp.png +0 -0
  304. data/sample/gtk-demo/gnome-gmush.png +0 -0
  305. data/sample/gtk-demo/gnome-gsame.png +0 -0
  306. data/sample/gtk-demo/gnu-keys.png +0 -0
  307. data/sample/gtk-demo/gtk-logo-rgb.gif +0 -0
  308. data/sample/gtk-demo/hypertext.rb +211 -0
  309. data/sample/gtk-demo/iconview.rb +109 -0
  310. data/sample/gtk-demo/images.rb +197 -0
  311. data/sample/gtk-demo/item_factory.rb +94 -0
  312. data/sample/gtk-demo/list_store.rb +138 -0
  313. data/sample/gtk-demo/main.rb +380 -0
  314. data/sample/gtk-demo/menus.rb +172 -0
  315. data/sample/gtk-demo/panes.rb +156 -0
  316. data/sample/gtk-demo/pixbufs.rb +176 -0
  317. data/sample/gtk-demo/printing.rb +128 -0
  318. data/sample/gtk-demo/rotated_text.rb +84 -0
  319. data/sample/gtk-demo/ruby-gnome2-logo.png +0 -0
  320. data/sample/gtk-demo/sizegroup.rb +118 -0
  321. data/sample/gtk-demo/stock_browser.rb +235 -0
  322. data/sample/gtk-demo/textview.rb +435 -0
  323. data/sample/gtk-demo/tree_store.rb +270 -0
  324. data/sample/misc/aboutdialog.rb +42 -0
  325. data/sample/misc/aboutdialog2.rb +42 -0
  326. data/sample/misc/alpha-demo.rb +70 -0
  327. data/sample/misc/assistant.rb +347 -0
  328. data/sample/misc/bindings.rb +107 -0
  329. data/sample/misc/button.rb +69 -0
  330. data/sample/misc/button2.rb +28 -0
  331. data/sample/misc/buttonbox.rb +93 -0
  332. data/sample/misc/cairo-pong.rb +215 -0
  333. data/sample/misc/calendar.rb +62 -0
  334. data/sample/misc/checkbutton.rb +46 -0
  335. data/sample/misc/colorselection.rb +25 -0
  336. data/sample/misc/combo_check.rb +71 -0
  337. data/sample/misc/combobox.rb +86 -0
  338. data/sample/misc/composited-windows.rb +113 -0
  339. data/sample/misc/cursor.rb +32 -0
  340. data/sample/misc/dialog.rb +44 -0
  341. data/sample/misc/dialog2.rb +39 -0
  342. data/sample/misc/dnd.rb +65 -0
  343. data/sample/misc/dndtreeview.rb +56 -0
  344. data/sample/misc/drag-move.rb +131 -0
  345. data/sample/misc/drawing.rb +90 -0
  346. data/sample/misc/entry.rb +34 -0
  347. data/sample/misc/entrycompletion.rb +39 -0
  348. data/sample/misc/expander.rb +27 -0
  349. data/sample/misc/filechooser.rb +49 -0
  350. data/sample/misc/fileselection.rb +26 -0
  351. data/sample/misc/frame.rb +69 -0
  352. data/sample/misc/gc.rb +59 -0
  353. data/sample/misc/gdkscreen.rb +32 -0
  354. data/sample/misc/gnome-logo-icon.png +0 -0
  355. data/sample/misc/helloworld.rb +35 -0
  356. data/sample/misc/iconview.rb +38 -0
  357. data/sample/misc/image.rb +42 -0
  358. data/sample/misc/itemfactory.rb +73 -0
  359. data/sample/misc/itemfactory2.rb +74 -0
  360. data/sample/misc/keyboard_grab.rb +29 -0
  361. data/sample/misc/label.rb +33 -0
  362. data/sample/misc/linkbutton.rb +42 -0
  363. data/sample/misc/listview.rb +92 -0
  364. data/sample/misc/menu.rb +81 -0
  365. data/sample/misc/misc_button.rb +59 -0
  366. data/sample/misc/mouse-gesture.rb +465 -0
  367. data/sample/misc/pangorenderer.rb +66 -0
  368. data/sample/misc/pointer_grab.rb +34 -0
  369. data/sample/misc/print.rb +247 -0
  370. data/sample/misc/properties.rb +85 -0
  371. data/sample/misc/radiobutton.rb +47 -0
  372. data/sample/misc/recentchooserdialog.rb +59 -0
  373. data/sample/misc/rgtk+cairo.rb +44 -0
  374. data/sample/misc/scalebutton.rb +25 -0
  375. data/sample/misc/settings.rb +41 -0
  376. data/sample/misc/statusicon.rb +123 -0
  377. data/sample/misc/stock.rb +36 -0
  378. data/sample/misc/style_property.rb +67 -0
  379. data/sample/misc/style_property.rc +19 -0
  380. data/sample/misc/t-gtkplug.rb +58 -0
  381. data/sample/misc/t-gtksocket.rb +65 -0
  382. data/sample/misc/test.xpm +92 -0
  383. data/sample/misc/textbuffer_serialize.rb +130 -0
  384. data/sample/misc/threads.rb +72 -0
  385. data/sample/misc/to_drawable.rb +42 -0
  386. data/sample/misc/togglebutton.rb +34 -0
  387. data/sample/misc/toolbar.rb +55 -0
  388. data/sample/misc/tooltips.rb +204 -0
  389. data/sample/misc/tree_combo.rb +85 -0
  390. data/sample/misc/tree_progress.rb +69 -0
  391. data/sample/misc/treemodelfilter.rb +55 -0
  392. data/sample/misc/treeview.rb +71 -0
  393. data/sample/misc/uimanager.rb +148 -0
  394. data/sample/misc/uimanager2.rb +91 -0
  395. data/sample/misc/uimanager2.xml +36 -0
  396. data/sample/misc/window.rb +24 -0
  397. data/sample/misc/xbm_cursor.rb +43 -0
  398. data/sample/testgtk/3DRings.xpm +116 -0
  399. data/sample/testgtk/FilesQueue.xpm +98 -0
  400. data/sample/testgtk/Modeller.xpm +117 -0
  401. data/sample/testgtk/README +14 -0
  402. data/sample/testgtk/button.rb +133 -0
  403. data/sample/testgtk/buttonbox.rb +108 -0
  404. data/sample/testgtk/check-n.xpm +21 -0
  405. data/sample/testgtk/check-y.xpm +21 -0
  406. data/sample/testgtk/checkbutton.rb +67 -0
  407. data/sample/testgtk/circles.xbm +46 -0
  408. data/sample/testgtk/colorselect.rb +33 -0
  409. data/sample/testgtk/dialog.rb +47 -0
  410. data/sample/testgtk/entry.rb +73 -0
  411. data/sample/testgtk/filesel.rb +67 -0
  412. data/sample/testgtk/fontselection.rb +56 -0
  413. data/sample/testgtk/gammacurve.rb +70 -0
  414. data/sample/testgtk/labels.rb +73 -0
  415. data/sample/testgtk/layout.rb +108 -0
  416. data/sample/testgtk/marble.xpm +408 -0
  417. data/sample/testgtk/menu.rb +79 -0
  418. data/sample/testgtk/notebook.rb +281 -0
  419. data/sample/testgtk/pixmap.rb +58 -0
  420. data/sample/testgtk/progressbar.rb +181 -0
  421. data/sample/testgtk/radiobutton.rb +61 -0
  422. data/sample/testgtk/range.rb +65 -0
  423. data/sample/testgtk/reparent.rb +91 -0
  424. data/sample/testgtk/rulers.rb +46 -0
  425. data/sample/testgtk/sample.rb +80 -0
  426. data/sample/testgtk/savedposition.rb +87 -0
  427. data/sample/testgtk/scrolledwindow.rb +67 -0
  428. data/sample/testgtk/shapedwindow.rb +99 -0
  429. data/sample/testgtk/spinbutton.rb +181 -0
  430. data/sample/testgtk/statusbar.rb +89 -0
  431. data/sample/testgtk/test.xpm +92 -0
  432. data/sample/testgtk/testgtk.rb +179 -0
  433. data/sample/testgtk/testgtkrc +146 -0
  434. data/sample/testgtk/testgtkrc2 +21 -0
  435. data/sample/testgtk/togglebutton.rb +53 -0
  436. data/sample/testgtk/toolbar.rb +82 -0
  437. data/sample/testgtk/tooltips.rb +41 -0
  438. data/sample/testgtk/wmhints.rb +40 -0
  439. data/test/run-test.rb +10 -8
  440. data/test/test_gtk_builder.rb +1 -1
  441. metadata +495 -334
  442. data/src/makeinits.rb +0 -57
  443. data/src/makekeysyms.rb +0 -5
@@ -0,0 +1,28 @@
1
+ # Copyright (c) 2005 Ruby-GNOME2 Project Team
2
+ # This program is licenced under the same licence as Ruby-GNOME2.
3
+ #
4
+ # $Id: cairo-path.rb,v 1.1 2005/10/12 05:38:30 ktou Exp $
5
+ =begin
6
+ = cairo/Path
7
+
8
+ This demo shows how to use GDK and cairo to draw path.
9
+ From http://cairographics.org/samples/path.html.
10
+ =end
11
+ require 'common'
12
+
13
+ module Demo
14
+ class CairoPath < CairoWindow
15
+ def initialize
16
+ super('cairo path')
17
+ end
18
+
19
+ def draw(cr)
20
+ cr.move_to(0.5, 0.1)
21
+ cr.line_to(0.9, 0.9)
22
+ cr.rel_line_to(-0.4, 0.0)
23
+ cr.curve_to(0.2, 0.9, 0.2, 0.5, 0.5, 0.5)
24
+
25
+ cr.stroke
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,88 @@
1
+ # Copyright (c) 2005 Ruby-GNOME2 Project Team
2
+ # This program is licenced under the same licence as Ruby-GNOME2.
3
+ #
4
+ # $Id: cairo-pattern-fill.rb,v 1.1 2005/10/12 05:38:30 ktou Exp $
5
+ =begin
6
+ = cairo/Pattern Fill
7
+
8
+ This demo shows how to use GDK and cairo to fill by pattern.
9
+ From http://cairographics.org/samples/pattern_fill.html.
10
+ =end
11
+ require 'common'
12
+
13
+ module Demo
14
+ class CairoPatternFill < CairoWindow
15
+ X_FUZZ = 0.08
16
+ Y_FUZZ = 0.08
17
+
18
+ X_INNER_RADIUS = 0.3
19
+ Y_INNER_RADIUS = 0.2
20
+
21
+ X_OUTER_RADIUS = 0.45
22
+ Y_OUTER_RADIUS = 0.35
23
+
24
+ SPIKES = 10
25
+
26
+ TEXT = "Ruby!"
27
+
28
+ def initialize
29
+ super('cairo pattern fill')
30
+ end
31
+
32
+ def draw(cr)
33
+ srand(45)
34
+
35
+ cr.set_line_width(0.01)
36
+
37
+ x = y = nil
38
+ 0.step(SPIKES * 2 - 1, 2) do |i|
39
+ x = x_position(i, X_INNER_RADIUS)
40
+ y = y_position(i, Y_INNER_RADIUS)
41
+
42
+ if (i == 0)
43
+ cr.move_to(x, y)
44
+ else
45
+ cr.line_to(x, y)
46
+ end
47
+
48
+ i += 1
49
+
50
+ x = x_position(i, X_OUTER_RADIUS)
51
+ y = y_position(i, Y_OUTER_RADIUS)
52
+
53
+ cr.line_to(x, y)
54
+ end
55
+
56
+ cr.close_path
57
+ cr.stroke
58
+
59
+ cr.select_font_face("Sans",
60
+ Cairo::FONT_SLANT_NORMAL,
61
+ Cairo::FONT_WEIGHT_BOLD)
62
+
63
+ cr.move_to(x - 0.5, y)
64
+ cr.set_font_size(0.1)
65
+ cr.text_path(TEXT)
66
+ cr.set_source_rgba(1, 0, 0.5)
67
+ cr.fill
68
+
69
+ cr.set_font_size(0.2)
70
+ extents = cr.text_extents(TEXT)
71
+ x = 0.5 - (extents.width / 2 + extents.x_bearing)
72
+ y = 0.5 - (extents.height / 2 + extents.y_bearing)
73
+
74
+ cr.move_to(x, y)
75
+ cr.text_path(TEXT)
76
+ cr.set_source_rgba(1, 0, 0)
77
+ cr.stroke
78
+ end
79
+
80
+ def x_position(i, radius)
81
+ 0.5 + Math.cos(Math::PI * i / SPIKES) * radius + rand * X_FUZZ
82
+ end
83
+
84
+ def y_position(i, radius)
85
+ 0.5 + Math.sin(Math::PI * i / SPIKES) * radius + rand * Y_FUZZ
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,32 @@
1
+ # Copyright (c) 2005 Ruby-GNOME2 Project Team
2
+ # This program is licenced under the same licence as Ruby-GNOME2.
3
+ #
4
+ # $Id: cairo-self-intersect.rb,v 1.1 2005/10/12 05:38:30 ktou Exp $
5
+ =begin
6
+ = cairo/Self Intersect
7
+
8
+ This demo shows how to use GDK and cairo to show cross.
9
+ From http://cairographics.org/samples/xxx_self_intersect.html.
10
+ =end
11
+ require 'common'
12
+
13
+ module Demo
14
+ class CairoSelfIntersect < CairoWindow
15
+ def initialize
16
+ super('cairo self intersect')
17
+ end
18
+
19
+ def draw(cr)
20
+ cr.move_to(0.3, 0.3)
21
+ cr.line_to(0.7, 0.3)
22
+
23
+ cr.line_to(0.5, 0.3)
24
+ cr.line_to(0.5, 0.7)
25
+
26
+ cr.set_line_width(0.22)
27
+ cr.set_line_cap(Cairo::LINE_CAP_ROUND)
28
+ cr.set_line_join(Cairo::LINE_JOIN_ROUND)
29
+ cr.stroke
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,45 @@
1
+ # Copyright (c) 2005 Ruby-GNOME2 Project Team
2
+ # This program is licenced under the same licence as Ruby-GNOME2.
3
+ #
4
+ # $Id: cairo-text-align-center.rb,v 1.1 2005/10/12 05:38:30 ktou Exp $
5
+ =begin
6
+ = cairo/Text Align Center
7
+
8
+ This demo shows how to use GDK and cairo to show text in center.
9
+ From http://cairographics.org/samples/text_align_center.html.
10
+ =end
11
+ require 'common'
12
+
13
+ module Demo
14
+ class CairoTextAlignCenter < CairoWindow
15
+ TEXT = "Ruby"
16
+
17
+ def initialize
18
+ super('cairo text align center')
19
+ end
20
+
21
+ def draw(cr)
22
+ cr.select_font_face("Sans",
23
+ Cairo::FONT_SLANT_NORMAL,
24
+ Cairo::FONT_WEIGHT_NORMAL)
25
+
26
+ cr.set_font_size(0.2)
27
+ extents = cr.text_extents(TEXT)
28
+ x = 0.5 - (extents.width / 2 + extents.x_bearing)
29
+ y = 0.5 - (extents.height / 2 + extents.y_bearing)
30
+
31
+ cr.move_to(x, y)
32
+ cr.show_text(TEXT)
33
+
34
+ # draw helping lines
35
+ cr.set_source_rgba(1, 0.2, 0.2, 0.6)
36
+ cr.arc(x, y, 0.05, 0, 2 * Math::PI)
37
+ cr.fill
38
+ cr.move_to(0.5, 0)
39
+ cr.rel_line_to(0, 1)
40
+ cr.move_to(0, 0.5)
41
+ cr.rel_line_to(1, 0)
42
+ cr.stroke
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,46 @@
1
+ # Copyright (c) 2005 Ruby-GNOME2 Project Team
2
+ # This program is licenced under the same licence as Ruby-GNOME2.
3
+ #
4
+ # $Id: cairo-text-extents.rb,v 1.1 2005/10/12 05:38:30 ktou Exp $
5
+ =begin
6
+ = cairo/Text Extents
7
+
8
+ This demo shows how to use GDK and cairo to show text extents.
9
+ From http://cairographics.org/samples/text.html.
10
+ =end
11
+ require 'common'
12
+
13
+ module Demo
14
+ class CairoTextExtents < CairoWindow
15
+ TEXT = "Ruby"
16
+
17
+ def initialize
18
+ super('cairo text')
19
+ end
20
+
21
+ def draw(cr)
22
+ cr.select_font_face("Sans",
23
+ Cairo::FONT_SLANT_NORMAL,
24
+ Cairo::FONT_WEIGHT_NORMAL)
25
+
26
+ cr.set_font_size(0.3)
27
+ extents = cr.text_extents(TEXT)
28
+
29
+ x = 0.1
30
+ y = 0.6
31
+
32
+ cr.move_to(x, y)
33
+ cr.show_text(TEXT)
34
+
35
+ # draw helping lines
36
+ cr.set_source_rgba(1, 0.2, 0.2, 0.6)
37
+ cr.arc(x, y, 0.05, 0, 2 * Math::PI)
38
+ cr.fill
39
+ cr.move_to(x, y)
40
+ cr.rel_line_to(0, -extents.height)
41
+ cr.rel_line_to(extents.width, 0)
42
+ cr.rel_line_to(extents.x_bearing, -extents.y_bearing)
43
+ cr.stroke
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,43 @@
1
+ # Copyright (c) 2005 Ruby-GNOME2 Project Team
2
+ # This program is licenced under the same licence as Ruby-GNOME2.
3
+ #
4
+ # $Id: cairo-text.rb,v 1.1 2005/10/12 05:38:30 ktou Exp $
5
+ =begin
6
+ = cairo/Text
7
+
8
+ This demo shows how to use GDK and cairo to show text.
9
+ From http://cairographics.org/samples/text.html.
10
+ =end
11
+ require 'common'
12
+
13
+ module Demo
14
+ class CairoText < CairoWindow
15
+ def initialize
16
+ super('cairo text')
17
+ end
18
+
19
+ def draw(cr)
20
+ cr.select_font_face("Sans",
21
+ Cairo::FONT_SLANT_NORMAL,
22
+ Cairo::FONT_WEIGHT_BOLD)
23
+ cr.set_font_size(0.35)
24
+
25
+ cr.move_to(0.04, 0.53)
26
+ cr.show_text("Hello")
27
+
28
+ cr.move_to(0.27, 0.65)
29
+ cr.text_path("void")
30
+ cr.set_source_rgba(0.5, 0.5, 1)
31
+ cr.fill_preserve
32
+ cr.set_source_rgba(0, 0, 0)
33
+ cr.set_line_width(0.01)
34
+ cr.stroke
35
+
36
+ # draw helping lines
37
+ cr.set_source_rgba(1,0.2,0.2, 0.6)
38
+ cr.arc(0.04, 0.53, 0.02, 0, 2 * Math::PI)
39
+ cr.arc(0.27, 0.65, 0.02, 0, 2 * Math::PI)
40
+ cr.fill
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,408 @@
1
+ # Copyright (c) 2003-2005 Ruby-GNOME2 Project Team
2
+ # This program is licenced under the same licence as Ruby-GNOME2.
3
+ #
4
+ # $Id: changedisplay.rb,v 1.6 2005/07/30 11:22:15 mutoh Exp $
5
+ =begin
6
+ = Change Display
7
+
8
+ Demonstrates migrating a window between different displays and
9
+ screens. A display is a mouse and keyboard with some number of
10
+ associated monitors. A screen is a set of monitors grouped
11
+ into a single physical work area. The neat thing about having
12
+ multiple displays is that they can be on a completely separate
13
+ computers, as long as there is a network connection to the
14
+ computer where the application is running.
15
+
16
+ Only some of the windowing systems where GTK+ runs have the
17
+ concept of multiple displays and screens. (The X Window System
18
+ is the main example.) Other windowing systems can only
19
+ handle one keyboard and mouse, and combine all monitors into
20
+ a single screen.
21
+
22
+ This is a moderately complex example, and demonstrates:
23
+
24
+ - Tracking the currently open displays and screens
25
+
26
+ - Changing the screen for a window
27
+
28
+ - Letting the user choose a window by clicking on it
29
+
30
+ - Using Gtk::ListStore and Gtk::TreeView
31
+
32
+ - Using Gtk::Dialog
33
+ =end
34
+
35
+ require 'common'
36
+
37
+ module Demo
38
+ class ChangeDisplay < Gtk::Dialog
39
+ # These enumerations provide symbolic names for the columns
40
+ # in the two GtkListStore models.
41
+ DISPLAY_COLUMN_NAME, DISPLAY_COLUMN_DISPLAY = 0, 1
42
+ SCREEN_COLUMN_NUMBER, SCREEN_COLUMN_SCREEN = 0, 1
43
+
44
+ # Main entry point. If the dialog for this demo doesn't yet exist, creates
45
+ # it. Otherwise, destroys it.
46
+ def initialize
47
+ @size_group = nil
48
+
49
+ @display_model = nil
50
+ @screen_model = nil
51
+
52
+ @screen_selection = nil
53
+
54
+ @current_display = nil
55
+ @current_screen = nil
56
+
57
+ super('Change Screen or display',
58
+ nil, # parent
59
+ Gtk::Dialog::NO_SEPARATOR,
60
+ [Gtk::Stock::CLOSE, Gtk::Dialog::RESPONSE_CLOSE],
61
+ ['Change', Gtk::Dialog::RESPONSE_OK])
62
+
63
+ set_default_size(300, 400)
64
+ signal_connect('response') do |dialog, response_id|
65
+ if response_id == Gtk::Dialog::RESPONSE_OK
66
+ if Gtk.check_version?(2, 2, 0)
67
+ query_change_display
68
+ else
69
+ puts "This sample requires GTK+ 2.2.0 or later"
70
+ end
71
+ else
72
+ destroy # Gtk.main_quit?
73
+ end
74
+ end
75
+ signal_connect('destroy') do
76
+
77
+ end
78
+
79
+ unless Gtk.check_version?(2, 2, 0)
80
+ vbox.add(Gtk::Label.new("This sample requires GTK+ 2.2.0 or later"))
81
+ return
82
+ end
83
+
84
+ vbox = Gtk::VBox.new(false, 5)
85
+ vbox.set_border_width(8)
86
+
87
+ self.vbox.pack_start(vbox, true, true)
88
+
89
+ @size_group = Gtk::SizeGroup.new(Gtk::SizeGroup::HORIZONTAL)
90
+
91
+ frame = create_display_frame
92
+ vbox.pack_start(frame, true, true)
93
+
94
+ frame = create_screen_frame
95
+ vbox.pack_start(frame, true, true)
96
+
97
+ initialize_displays
98
+ end
99
+
100
+ # Adds all currently open displays to our list of displays,
101
+ # and set up a signal connection so that we'll be notified
102
+ # when displays are opened in the future as well.
103
+ def initialize_displays
104
+ manager = Gdk::DisplayManager.get
105
+
106
+ manager.displays.each do |display|
107
+ add_display(display)
108
+ end
109
+
110
+ handler_id = manager.signal_connect('display_opened') do |display|
111
+ add_display(display)
112
+ end
113
+ signal_connect('destroy') do
114
+ manager.signal_handler_disconnect(handler_id)
115
+ end
116
+ end
117
+
118
+ # Fills in the screen list based on the current display
119
+ def fill_screens
120
+ @screen_model.clear
121
+
122
+ if @current_display
123
+ n_screens = @current_display.n_screens
124
+
125
+ n_screens.times do |i|
126
+ iter = @screen_model.append
127
+ iter.set_value(SCREEN_COLUMN_NUMBER, i)
128
+ iter.set_value(SCREEN_COLUMN_SCREEN, @current_display.get_screen(i))
129
+
130
+ if i == 0
131
+ @screen_selection.select_iter(iter)
132
+ end
133
+ end
134
+ end
135
+ end
136
+
137
+ # Creates the 'Display' frame in the main window.
138
+ def create_display_frame
139
+ frame, tree_view, button_vbox = create_frame('Display')
140
+
141
+ button = left_align_button_new('_Open...')
142
+ button.signal_connect('clicked') do
143
+ open_display_cb
144
+ end
145
+ button_vbox.pack_start(button, false, false, 0)
146
+
147
+ button = left_align_button_new('_Close')
148
+ button.signal_connect('clicked') do
149
+ if @current_display
150
+ @current_display.close
151
+ end
152
+ end
153
+ button_vbox.pack_start(button, false, false, 0)
154
+
155
+ @display_model = Gtk::ListStore.new(String, Gdk::Display)
156
+ tree_view.model = @display_model
157
+
158
+ column = Gtk::TreeViewColumn.new('Name',
159
+ Gtk::CellRendererText.new,
160
+ {'text' => DISPLAY_COLUMN_NAME})
161
+ tree_view.append_column(column)
162
+
163
+ selection = tree_view.selection
164
+ selection.signal_connect('changed') do
165
+ display_changed_cb(selection)
166
+ end
167
+
168
+ return frame
169
+ end
170
+
171
+ # Creates the 'Screen' frame in the main window.
172
+ def create_screen_frame
173
+ frame, tree_view, button_vbox = create_frame('Screen')
174
+
175
+ @screen_model = Gtk::ListStore.new(Integer, Gdk::Screen)
176
+ tree_view.model = @screen_model
177
+
178
+ column = Gtk::TreeViewColumn.new('Number',
179
+ Gtk::CellRendererText.new,
180
+ {'text' => SCREEN_COLUMN_NUMBER})
181
+ tree_view.append_column(column)
182
+
183
+ @screen_selection = tree_view.selection
184
+ @screen_selection.signal_connect('changed') do |selection|
185
+ @current_screen = if iter = selection.selected
186
+ iter.get_value(SCREEN_COLUMN_SCREEN)
187
+ else
188
+ nil
189
+ end
190
+ end
191
+
192
+ return frame
193
+ end
194
+
195
+ # This function is used both for creating the 'Display' and
196
+ # 'Screen' frames, since they have a similar structure. The
197
+ # caller hooks up the right context for the value returned
198
+ # in tree_view, and packs any relevant buttons into button_vbox.
199
+ def create_frame(title)
200
+ frame = Gtk::Frame.new(title)
201
+
202
+ hbox = Gtk::HBox.new(false, 8)
203
+ hbox.set_border_width(8)
204
+ frame.add(hbox)
205
+
206
+ scrollwin = Gtk::ScrolledWindow.new
207
+ scrollwin.set_policy(Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC)
208
+ scrollwin.shadow_type = Gtk::SHADOW_IN
209
+ hbox.pack_start(scrollwin, true, true)
210
+
211
+ tree_view = Gtk::TreeView.new
212
+ tree_view.headers_visible = false
213
+ scrollwin.add(tree_view)
214
+
215
+ selection = tree_view.selection
216
+ selection.mode = Gtk::SELECTION_BROWSE
217
+
218
+ button_vbox = Gtk::VBox.new(false, 5)
219
+ hbox.pack_start(button_vbox, false, false)
220
+
221
+ @size_group.add_widget(button_vbox)
222
+
223
+ return frame, tree_view, button_vbox
224
+ end
225
+
226
+ # If we have a stack of buttons, it often looks better if their contents
227
+ # are left-aligned, rather than centered. This function creates a button
228
+ # and left-aligns it contents.
229
+ def left_align_button_new(label)
230
+ button = Gtk::Button.new(label, true)
231
+ button.child.set_alignment(0.0, 0.5)
232
+
233
+ return button
234
+ end
235
+
236
+
237
+ # Prompts the user for a toplevel window to move, and then moves
238
+ # that window to the currently selected display
239
+ def query_change_display
240
+ screen = self.window.screen
241
+
242
+ toplevel = query_for_toplevel(screen,
243
+ "Please select the toplevel\n"+
244
+ "to move to the new screen")
245
+
246
+ if toplevel
247
+ toplevel.screen = @current_screen
248
+ else
249
+ screen.display.beep
250
+ end
251
+ end
252
+
253
+ # Asks the user to click on a window, then waits for them click
254
+ # the mouse. When the mouse is released, returns the toplevel
255
+ # window under the pointer, or nil, if there is none.
256
+ def query_for_toplevel(screen, prompt)
257
+ toplevel = nil
258
+
259
+ display = screen.display
260
+
261
+ popup = Gtk::Window.new(Gtk::Window::POPUP)
262
+ popup.screen = screen
263
+ popup.modal = true
264
+ popup.window_position = Gtk::Window::POS_CENTER
265
+
266
+ frame = Gtk::Frame.new
267
+ frame.set_shadow_type(Gtk::SHADOW_OUT)
268
+ popup.add(frame)
269
+
270
+ label = Gtk::Label.new(prompt)
271
+ label.set_padding(10, 10)
272
+ frame.add(label)
273
+
274
+ popup.show_all
275
+
276
+ # TODO: Gdk::Cursor.new(screen.display, Gdk::Cursor::CROSSHAIR)
277
+ cursor = Gdk::Cursor.new(Gdk::Cursor::CROSSHAIR)
278
+
279
+ if Gdk::pointer_grab(popup.window, false,
280
+ Gdk::Event::BUTTON_RELEASE_MASK,
281
+ nil,
282
+ cursor,
283
+ Gdk::Event::CURRENT_TIME) == Gdk::GRAB_SUCCESS
284
+ clicked = false
285
+
286
+ popup.signal_connect('button-release-event') do
287
+ clicked = true
288
+ end
289
+
290
+ # Process events until clicked is set by button_release_event_cb.
291
+ # We pass in may_block = true since we want to wait if there
292
+ # are no events currently.
293
+ until clicked
294
+ Gtk.main_iteration # TODO: GLib::main_context_iteration(nil, true)
295
+
296
+ toplevel = find_toplevel_at_pointer(screen.display)
297
+ if toplevel == popup
298
+ toplevel = nil
299
+ end
300
+ end
301
+
302
+ popup.destroy
303
+ Gdk.flush # Really release the grab
304
+
305
+ return toplevel
306
+ end
307
+ end
308
+
309
+ # Finds the toplevel window under the mouse pointer, if any.
310
+ def find_toplevel_at_pointer(display)
311
+ pointer_window, x, y = display.window_at_pointer
312
+
313
+ # The user data field of a GdkWindow is used to store a pointer
314
+ # to the widget that created it.
315
+ if pointer_window
316
+ widget = pointer_window.user_data
317
+ end
318
+
319
+ return (if widget
320
+ widget.toplevel
321
+ else
322
+ nil
323
+ end)
324
+ end
325
+
326
+ # Called when the user clicks on 'Open...' in the display
327
+ # frame. Prompts for a new display, and then opens a connection
328
+ # to that display.
329
+ def open_display_cb
330
+ dialog = Gtk::Dialog.new('Open Display',
331
+ self,
332
+ Gtk::Dialog::MODAL,
333
+ [Gtk::Stock::CANCEL, Gtk::Dialog::RESPONSE_CANCEL],
334
+ [Gtk::Stock::OK, Gtk::Dialog::RESPONSE_OK])
335
+
336
+ dialog.default_response = Gtk::Dialog::RESPONSE_OK
337
+ display_entry = Gtk::Entry.new
338
+ display_entry.activates_default = true
339
+ dialog_label =
340
+ Gtk::Label.new("Please enter the name of\nthe new display\n")
341
+
342
+ dialog.vbox.add(dialog_label)
343
+ dialog.vbox.add(display_entry)
344
+
345
+ display_entry.grab_focus
346
+ dialog.vbox.show_all
347
+
348
+ result = nil
349
+ until result
350
+ response_id = dialog.run
351
+ break if response_id != Gtk::Dialog::RESPONSE_OK
352
+
353
+ new_screen_name = display_entry.text
354
+
355
+ unless new_screen_name.empty?
356
+ begin
357
+ result = Gdk::Dispaly.open(new_screen_name)
358
+ rescue
359
+ dialog_label.text = "Can't open display :\n\t%s\nplease try another one\n" % [new_screen_name]
360
+ end
361
+ end
362
+ end
363
+ dialog.destroy
364
+ end
365
+
366
+ # Called when the selected row in the display list changes.
367
+ # Updates info.current_display, then refills the list of
368
+ # screens.
369
+ def display_changed_cb(selection)
370
+ @current_display =
371
+ if iter = selection.selected
372
+ iter.get_value(DISPLAY_COLUMN_DISPLAY)
373
+ else
374
+ nil
375
+ end
376
+ fill_screens
377
+ end
378
+
379
+ # Adds a new display to our list of displays, and connects
380
+ # to the 'closed' signal so that we can remove it from the
381
+ # list of displays again.
382
+ def add_display(display)
383
+ iter = @display_model.append
384
+ iter.set_value(DISPLAY_COLUMN_NAME, display.name)
385
+ iter.set_value(DISPLAY_COLUMN_DISPLAY, display)
386
+
387
+ handler_id = display.signal_connect('closed') do
388
+ display_closed_cb(display)
389
+ end
390
+
391
+ signal_connect('destroy') do
392
+ display.signal_handler_disconnect(handler_id)
393
+ end
394
+ end
395
+
396
+ # Called when one of the currently open displays is closed.
397
+ # Remove it from our list of displays.
398
+ def display_closed_cb(display)
399
+ @display_model.each do |model, path, iter|
400
+ tmp_display = iter.get_value( DISPLAY_COLUMN_DISPLAY)
401
+ if tmp_display == display
402
+ @display_model.remove(iter)
403
+ break
404
+ end
405
+ end
406
+ end
407
+ end
408
+ end