gtk3 2.2.5 → 3.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (586) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +1 -0
  3. data/ext/gtk3/depend +0 -5
  4. data/ext/gtk3/extconf.rb +43 -53
  5. data/ext/gtk3/rb-gtk3-container.c +159 -0
  6. data/ext/gtk3/{rbgtk3util.h → rb-gtk3-private.h} +9 -9
  7. data/ext/gtk3/rb-gtk3-widget.c +71 -0
  8. data/ext/gtk3/rb-gtk3.c +407 -0
  9. data/ext/gtk3/{rbgtk-orientable.c → rb-gtk3.h} +10 -7
  10. data/extconf.rb +25 -9
  11. data/lib/gtk3.rb +70 -9
  12. data/lib/gtk3/about-dialog.rb +34 -0
  13. data/lib/gtk3/action-group.rb +131 -0
  14. data/lib/gtk3/action.rb +27 -0
  15. data/lib/gtk3/binding-set.rb +31 -0
  16. data/lib/gtk3/border.rb +28 -0
  17. data/lib/gtk3/box.rb +40 -0
  18. data/lib/gtk3/builder.rb +91 -0
  19. data/lib/gtk3/button.rb +53 -0
  20. data/lib/gtk3/calendar.rb +24 -0
  21. data/lib/gtk3/cell-layout.rb +31 -0
  22. data/{test/test_gtk_accel_group_entry.rb → lib/gtk3/clipboard.rb} +8 -7
  23. data/lib/gtk3/color-chooser-dialog.rb +27 -0
  24. data/lib/gtk3/combo-box-text.rb +30 -0
  25. data/lib/gtk3/combo-box.rb +55 -0
  26. data/lib/gtk3/container.rb +51 -0
  27. data/lib/gtk3/css-provider.rb +38 -0
  28. data/lib/gtk3/deprecated.rb +193 -99
  29. data/lib/gtk3/dialog.rb +65 -0
  30. data/lib/gtk3/file-chooser-dialog.rb +36 -0
  31. data/lib/gtk3/font-chooser-dialog.rb +27 -0
  32. data/lib/gtk3/gdk-drag-context.rb +29 -0
  33. data/lib/gtk3/gesture-multi-press.rb +31 -0
  34. data/lib/gtk3/icon-theme.rb +28 -0
  35. data/lib/gtk3/icon-view.rb +45 -0
  36. data/lib/gtk3/image.rb +113 -0
  37. data/lib/gtk3/label.rb +54 -0
  38. data/{test/test_gtk_tree_selection.rb → lib/gtk3/level-bar.rb} +13 -12
  39. data/lib/gtk3/list-store.rb +81 -0
  40. data/lib/gtk3/loader.rb +403 -0
  41. data/lib/gtk3/menu-item.rb +33 -0
  42. data/lib/gtk3/message-dialog.rb +49 -0
  43. data/lib/gtk3/paned.rb +37 -0
  44. data/lib/gtk3/radio-action.rb +28 -0
  45. data/lib/gtk3/radio-button.rb +49 -0
  46. data/lib/gtk3/recent-chooser-dialog.rb +38 -0
  47. data/lib/gtk3/scale-button.rb +35 -0
  48. data/{test/test_gtk_allocation.rb → lib/gtk3/scrolled-window.rb} +7 -7
  49. data/lib/gtk3/search-bar.rb +27 -0
  50. data/lib/gtk3/selection-data.rb +42 -0
  51. data/lib/gtk3/spin-button.rb +34 -0
  52. data/lib/gtk3/stack.rb +54 -0
  53. data/lib/gtk3/stock.rb +70 -0
  54. data/lib/gtk3/style-context.rb +26 -0
  55. data/lib/gtk3/style-properties.rb +29 -0
  56. data/lib/gtk3/target-entry.rb +27 -0
  57. data/lib/gtk3/target-list.rb +31 -0
  58. data/lib/gtk3/text-buffer.rb +165 -0
  59. data/lib/gtk3/text-iter.rb +39 -0
  60. data/lib/gtk3/text-tag-table.rb +31 -0
  61. data/lib/gtk3/toggle-action.rb +27 -0
  62. data/lib/gtk3/toggle-button.rb +35 -0
  63. data/lib/gtk3/tool-button.rb +36 -0
  64. data/lib/gtk3/tree-iter.rb +52 -0
  65. data/lib/gtk3/tree-model-filter.rb +45 -0
  66. data/lib/gtk3/tree-model.rb +51 -0
  67. data/lib/gtk3/tree-path.rb +29 -0
  68. data/lib/gtk3/tree-selection.rb +30 -0
  69. data/lib/gtk3/tree-store.rb +59 -0
  70. data/lib/gtk3/tree-view-column.rb +35 -0
  71. data/lib/gtk3/tree-view.rb +41 -0
  72. data/lib/gtk3/ui-manager.rb +35 -0
  73. data/lib/gtk3/version.rb +28 -0
  74. data/lib/gtk3/widget.rb +127 -0
  75. data/lib/gtk3/window.rb +29 -0
  76. data/sample/gtk-demo/TODO +69 -0
  77. data/sample/gtk-demo/application.ui +107 -0
  78. data/sample/gtk-demo/builder.rb +2 -2
  79. data/sample/gtk-demo/{button_box.rb → button-box.rb} +16 -17
  80. data/sample/gtk-demo/common.rb +1 -1
  81. data/sample/gtk-demo/css_accordion.rb +5 -5
  82. data/sample/gtk-demo/css_basics.css +22 -0
  83. data/sample/gtk-demo/css_basics.rb +103 -0
  84. data/sample/gtk-demo/dialog.rb +3 -3
  85. data/sample/gtk-demo/entry_completion.rb +1 -1
  86. data/sample/gtk-demo/hypertext.rb +1 -1
  87. data/sample/gtk-demo/main.rb +65 -91
  88. data/sample/gtk-demo/menus.rb +4 -4
  89. data/sample/gtk-demo/menus.ui +107 -0
  90. data/sample/gtk-demo/sizegroup.rb +1 -1
  91. data/sample/misc/aboutdialog.rb +10 -18
  92. data/sample/misc/aboutdialog2.rb +4 -16
  93. data/sample/misc/alpha-demo.rb +17 -16
  94. data/sample/misc/application.rb +31 -0
  95. data/sample/misc/assistant.rb +3 -5
  96. data/sample/misc/bindings.rb +64 -50
  97. data/sample/misc/builder-from-resource.rb +53 -0
  98. data/sample/misc/builder.rb +29 -0
  99. data/sample/misc/builder.ui +46 -0
  100. data/sample/misc/button.rb +18 -19
  101. data/sample/misc/button2.rb +5 -5
  102. data/sample/misc/buttonbox.rb +2 -4
  103. data/sample/misc/cairo-cursor.rb +37 -0
  104. data/sample/misc/cairo-pong.rb +17 -17
  105. data/sample/misc/calendar.rb +18 -18
  106. data/sample/misc/checkbutton.rb +3 -4
  107. data/sample/misc/colorselection.rb +10 -9
  108. data/sample/misc/{combo_check.rb → combo-check.rb} +1 -3
  109. data/sample/misc/combobox-from-cellrender.rb +48 -0
  110. data/sample/misc/combobox.rb +10 -10
  111. data/sample/misc/cursor.rb +5 -5
  112. data/sample/misc/dialog.rb +3 -4
  113. data/sample/misc/dialog2.rb +5 -6
  114. data/sample/misc/dnd.rb +27 -23
  115. data/sample/misc/dndtreeview.rb +16 -18
  116. data/sample/misc/drag-move.rb +3 -6
  117. data/sample/misc/drawing.rb +74 -86
  118. data/sample/misc/entry.rb +2 -4
  119. data/sample/misc/entrycompletion.rb +5 -5
  120. data/sample/misc/eventbox.rb +58 -0
  121. data/sample/misc/expander.rb +6 -5
  122. data/sample/misc/filechooser.rb +5 -7
  123. data/sample/misc/flowbox.rb +86 -0
  124. data/sample/misc/frame.rb +10 -12
  125. data/sample/misc/gdkscreen.rb +3 -3
  126. data/sample/misc/gtkglarea1.rb +114 -0
  127. data/sample/misc/gtkglarea2.rb +194 -0
  128. data/sample/misc/helloworld.rb +2 -5
  129. data/sample/misc/iconview.rb +9 -9
  130. data/sample/misc/image.rb +7 -6
  131. data/sample/misc/keyboard-grab.rb +34 -0
  132. data/sample/misc/label.rb +10 -11
  133. data/sample/misc/linkbutton.rb +3 -10
  134. data/sample/misc/list-store-usage.rb +96 -0
  135. data/sample/misc/listview.rb +9 -11
  136. data/sample/misc/menu.rb +45 -25
  137. data/sample/misc/{misc_button.rb → misc-button.rb} +15 -14
  138. data/sample/misc/mouse-gesture.rb +35 -42
  139. data/sample/misc/pango-layout.rb +100 -0
  140. data/sample/misc/pointer-grab.rb +36 -0
  141. data/sample/misc/print.rb +202 -201
  142. data/sample/misc/properties.rb +16 -14
  143. data/sample/misc/radiobutton.rb +18 -20
  144. data/sample/misc/recentchooserdialog.rb +8 -10
  145. data/sample/misc/rgtk+cairo.rb +26 -27
  146. data/sample/misc/scalebutton.rb +19 -7
  147. data/sample/misc/simple_window.gresource.xml +6 -0
  148. data/sample/misc/simple_window.ui +16 -0
  149. data/sample/misc/statusicon.rb +11 -14
  150. data/sample/misc/stock.rb +14 -11
  151. data/sample/misc/style-property.rb +76 -0
  152. data/sample/misc/t-gtkplug.rb +11 -14
  153. data/sample/misc/t-gtksocket.rb +19 -18
  154. data/sample/misc/template-from-resource.rb +59 -0
  155. data/sample/misc/template.gresource.xml +6 -0
  156. data/sample/misc/template.ui +16 -0
  157. data/sample/misc/textbuffer-serialize.rb +133 -0
  158. data/sample/misc/threads.rb +54 -13
  159. data/sample/misc/to-drawable.rb +34 -0
  160. data/sample/misc/togglebutton.rb +6 -8
  161. data/sample/misc/toolbar.rb +39 -30
  162. data/sample/misc/tooltips.rb +95 -104
  163. data/sample/misc/{tree_combo.rb → tree-combo.rb} +21 -27
  164. data/sample/misc/{tree_progress.rb → tree-progress.rb} +12 -17
  165. data/sample/misc/treemodelfilter.rb +13 -10
  166. data/sample/misc/treeview.rb +18 -20
  167. data/sample/misc/window.rb +2 -4
  168. data/sample/misc/xbm-cursor.rb +86 -0
  169. data/sample/tutorial/README.md +441 -0
  170. data/sample/tutorial/builder.ui +66 -0
  171. data/sample/tutorial/example-0.rb +32 -0
  172. data/sample/tutorial/example-1.rb +47 -0
  173. data/sample/tutorial/example-2.rb +68 -0
  174. data/sample/tutorial/example-4.rb +41 -0
  175. data/sample/tutorial/exampleapp.desktop +6 -0
  176. data/sample/tutorial/exampleapp.png +0 -0
  177. data/sample/tutorial/exampleapp1/exampleapp.rb +57 -0
  178. data/sample/tutorial/exampleapp2/exampleapp.gresource.xml +6 -0
  179. data/sample/tutorial/exampleapp2/exampleapp.rb +87 -0
  180. data/sample/tutorial/exampleapp2/window.ui +32 -0
  181. data/sample/tutorial/exampleapp3/exampleapp.gresource.xml +6 -0
  182. data/sample/tutorial/exampleapp3/exampleapp.rb +106 -0
  183. data/sample/tutorial/exampleapp3/window.ui +32 -0
  184. data/sample/tutorial/exampleapp4/app-menu.ui +18 -0
  185. data/sample/tutorial/exampleapp4/exampleapp.gresource.xml +7 -0
  186. data/sample/tutorial/exampleapp4/exampleapp.rb +124 -0
  187. data/sample/tutorial/exampleapp4/window.ui +32 -0
  188. data/sample/tutorial/exampleapp5/app-menu.ui +18 -0
  189. data/sample/tutorial/exampleapp5/exampleapp.gresource.xml +7 -0
  190. data/sample/tutorial/exampleapp5/exampleapp.rb +135 -0
  191. data/sample/tutorial/exampleapp5/org.gtk.exampleapp.gschema.xml +20 -0
  192. data/sample/tutorial/exampleapp5/window.ui +32 -0
  193. data/sample/tutorial/exampleapp6/app-menu.ui +18 -0
  194. data/sample/tutorial/exampleapp6/exampleapp.gresource.xml +8 -0
  195. data/sample/tutorial/exampleapp6/exampleapp.rb +168 -0
  196. data/sample/tutorial/exampleapp6/org.gtk.exampleapp.gschema.xml +20 -0
  197. data/sample/tutorial/exampleapp6/prefs.ui +70 -0
  198. data/sample/tutorial/exampleapp6/window.ui +32 -0
  199. data/sample/tutorial/exampleapp7/app-menu.ui +18 -0
  200. data/sample/tutorial/exampleapp7/exampleapp.gresource.xml +8 -0
  201. data/sample/tutorial/exampleapp7/exampleapp.rb +200 -0
  202. data/sample/tutorial/exampleapp7/org.gtk.exampleapp.gschema.xml +20 -0
  203. data/sample/tutorial/exampleapp7/prefs.ui +70 -0
  204. data/sample/tutorial/exampleapp7/window.ui +63 -0
  205. data/sample/tutorial/exampleapp8/app-menu.ui +18 -0
  206. data/sample/tutorial/exampleapp8/exampleapp.gresource.xml +9 -0
  207. data/sample/tutorial/exampleapp8/exampleapp.rb +247 -0
  208. data/sample/tutorial/exampleapp8/gears-menu.ui +12 -0
  209. data/sample/tutorial/exampleapp8/org.gtk.exampleapp.gschema.xml +25 -0
  210. data/sample/tutorial/exampleapp8/prefs.ui +70 -0
  211. data/sample/tutorial/exampleapp8/window.ui +100 -0
  212. data/sample/tutorial/exampleapp9/app-menu.ui +18 -0
  213. data/sample/tutorial/exampleapp9/exampleapp.gresource.xml +9 -0
  214. data/sample/tutorial/exampleapp9/exampleapp.rb +268 -0
  215. data/sample/tutorial/exampleapp9/gears-menu.ui +16 -0
  216. data/sample/tutorial/exampleapp9/org.gtk.exampleapp.gschema.xml +25 -0
  217. data/sample/tutorial/exampleapp9/prefs.ui +70 -0
  218. data/sample/tutorial/exampleapp9/window.ui +117 -0
  219. data/test/fixture/Rakefile +32 -0
  220. data/test/fixture/gnome-logo-icon.png +0 -0
  221. data/test/fixture/image.gresource +0 -0
  222. data/test/fixture/image.gresource.xml +6 -0
  223. data/test/fixture/simple_window.gresource.xml +6 -0
  224. data/test/fixture/simple_window.ui +16 -0
  225. data/test/gtk-test-utils.rb +46 -4
  226. data/test/run-test.rb +9 -1
  227. data/test/{test_gc.rb → test-gc.rb} +0 -0
  228. data/test/{test_gtk_css_provider.rb → test-gdk-display.rb} +6 -8
  229. data/test/test-gdk-event.rb +24 -0
  230. data/test/test-gdk-screen.rb +42 -0
  231. data/test/{test_gtk_about_dialog.rb → test-gtk-about-dialog.rb} +0 -0
  232. data/test/test-gtk-accel-group.rb +23 -0
  233. data/test/{test_gtk_accel_key.rb → test-gtk-accel-key.rb} +0 -0
  234. data/test/{test_gtk_accessible.rb → test-gtk-accessible.rb} +0 -0
  235. data/test/{test_gtk_action_group.rb → test-gtk-action-bar.rb} +20 -23
  236. data/test/test-gtk-action-group.rb +48 -0
  237. data/test/test-gtk-action.rb +41 -0
  238. data/test/test-gtk-assistant.rb +44 -0
  239. data/test/{test_gtk_border.rb → test-gtk-border.rb} +0 -0
  240. data/test/test-gtk-box.rb +28 -0
  241. data/test/{test_gtk_buildable.rb → test-gtk-buildable.rb} +6 -6
  242. data/test/{test_gtk_builder.rb → test-gtk-builder.rb} +45 -11
  243. data/test/test-gtk-button.rb +54 -0
  244. data/test/test-gtk-cell-layout.rb +35 -0
  245. data/test/test-gtk-color-chooser-dialog.rb +41 -0
  246. data/test/test-gtk-combo-box-text.rb +34 -0
  247. data/test/test-gtk-combo-box.rb +97 -0
  248. data/test/test-gtk-container.rb +171 -0
  249. data/test/test-gtk-css-provider.rb +101 -0
  250. data/test/test-gtk-dialog.rb +74 -0
  251. data/test/{test_gtk_entry.rb → test-gtk-entry.rb} +0 -0
  252. data/test/test-gtk-event-controller.rb +35 -0
  253. data/test/test-gtk-file-chooser-dialog.rb +52 -0
  254. data/test/test-gtk-flow-box.rb +64 -0
  255. data/test/test-gtk-font-chooser-dialog.rb +41 -0
  256. data/test/test-gtk-gesture-multi-press.rb +31 -0
  257. data/test/test-gtk-gesture-pan.rb +32 -0
  258. data/test/test-gtk-gesture-single.rb +40 -0
  259. data/test/test-gtk-gesture.rb +29 -0
  260. data/test/{test_gtk_header_bar.rb → test-gtk-header-bar.rb} +15 -1
  261. data/test/{test_gtk_icon_theme.rb → test-gtk-icon-theme.rb} +0 -0
  262. data/test/{test_gtk_icon_view.rb → test-gtk-icon-view.rb} +24 -3
  263. data/test/test-gtk-image.rb +52 -0
  264. data/test/test-gtk-label.rb +39 -0
  265. data/test/{test_gtk_level_bar.rb → test-gtk-level-bar.rb} +12 -0
  266. data/test/test-gtk-list-store.rb +204 -0
  267. data/test/{test_gtk_menu_button.rb → test-gtk-menu-button.rb} +0 -0
  268. data/test/{test_gtk_menu_item.rb → test-gtk-menu-item.rb} +0 -0
  269. data/test/test-gtk-message-dialog.rb +62 -0
  270. data/test/test-gtk-paned.rb +109 -0
  271. data/test/test-gtk-places-sidebar.rb +68 -0
  272. data/test/test-gtk-radio-action.rb +45 -0
  273. data/test/test-gtk-radio-button.rb +82 -0
  274. data/test/test-gtk-recent-chooser-dialog.rb +53 -0
  275. data/test/{test_gtk_recent_data.rb → test-gtk-recent-data.rb} +0 -0
  276. data/test/{test_gtk_recent_filter_info.rb → test-gtk-recent-filter-info.rb} +1 -1
  277. data/test/test-gtk-recent-info.rb +37 -0
  278. data/test/{test_gtk_revealer.rb → test-gtk-revealer.rb} +0 -0
  279. data/test/test-gtk-scale-button.rb +56 -0
  280. data/test/{test_gtk_search_bar.rb → test-gtk-search-bar.rb} +1 -1
  281. data/test/{test_gtk_search_entry.rb → test-gtk-search-entry.rb} +0 -0
  282. data/test/test-gtk-spin-button.rb +45 -0
  283. data/test/{test_gtk_stack_switcher.rb → test-gtk-stack-switcher.rb} +0 -0
  284. data/test/{test_gtk_stack.rb → test-gtk-stack.rb} +8 -1
  285. data/test/test-gtk-stock.rb +26 -0
  286. data/test/{test_gtk_style_context.rb → test-gtk-style-context.rb} +0 -0
  287. data/test/{test_gtk_style_properties.rb → test-gtk-style-properties.rb} +0 -0
  288. data/test/test-gtk-style-provider.rb +25 -0
  289. data/test/test-gtk-switch.rb +34 -0
  290. data/test/test-gtk-target-entry.rb +37 -0
  291. data/test/test-gtk-text-buffer.rb +151 -0
  292. data/test/{test_gtk_container.rb → test-gtk-text-tag-table.rb} +13 -11
  293. data/test/test-gtk-toggle-action.rb +41 -0
  294. data/test/test-gtk-toggle-button.rb +39 -0
  295. data/test/test-gtk-tool-button.rb +53 -0
  296. data/test/test-gtk-tree-iter.rb +53 -0
  297. data/test/test-gtk-tree-model-filter.rb +55 -0
  298. data/test/test-gtk-tree-path.rb +42 -0
  299. data/test/test-gtk-tree-selection.rb +61 -0
  300. data/test/test-gtk-tree-view-column.rb +71 -0
  301. data/test/test-gtk-tree-view.rb +105 -0
  302. data/test/test-gtk-version.rb +47 -0
  303. data/test/test-gtk-widget.rb +148 -0
  304. data/test/{test_gtk.rb → test-gtk.rb} +0 -0
  305. metadata +263 -332
  306. data/ext/gtk3/conversions.c +0 -34
  307. data/ext/gtk3/gtk3.def +0 -10
  308. data/ext/gtk3/init.c +0 -34
  309. data/ext/gtk3/rbgtk-about-dialog.c +0 -113
  310. data/ext/gtk3/rbgtk-accel-group-entry.c +0 -94
  311. data/ext/gtk3/rbgtk-accel-group.c +0 -199
  312. data/ext/gtk3/rbgtk-accel-key.c +0 -120
  313. data/ext/gtk3/rbgtk-accel-label.c +0 -55
  314. data/ext/gtk3/rbgtk-accel-map.c +0 -135
  315. data/ext/gtk3/rbgtk-accelerator.c +0 -78
  316. data/ext/gtk3/rbgtk-accessible.c +0 -40
  317. data/ext/gtk3/rbgtk-action-bar.c +0 -73
  318. data/ext/gtk3/rbgtk-action-group.c +0 -467
  319. data/ext/gtk3/rbgtk-action.c +0 -205
  320. data/ext/gtk3/rbgtk-activatable.c +0 -30
  321. data/ext/gtk3/rbgtk-adjustment.c +0 -98
  322. data/ext/gtk3/rbgtk-alignment.c +0 -75
  323. data/ext/gtk3/rbgtk-allocation.c +0 -166
  324. data/ext/gtk3/rbgtk-app-chooser-button.c +0 -70
  325. data/ext/gtk3/rbgtk-app-chooser-dialog.c +0 -68
  326. data/ext/gtk3/rbgtk-app-chooser-widget.c +0 -40
  327. data/ext/gtk3/rbgtk-app-chooser.c +0 -47
  328. data/ext/gtk3/rbgtk-application.c +0 -69
  329. data/ext/gtk3/rbgtk-arrow.c +0 -56
  330. data/ext/gtk3/rbgtk-aspect-frame.c +0 -56
  331. data/ext/gtk3/rbgtk-assistant.c +0 -218
  332. data/ext/gtk3/rbgtk-bin.c +0 -42
  333. data/ext/gtk3/rbgtk-binding-set.c +0 -154
  334. data/ext/gtk3/rbgtk-border.c +0 -119
  335. data/ext/gtk3/rbgtk-box.c +0 -146
  336. data/ext/gtk3/rbgtk-buildable.c +0 -96
  337. data/ext/gtk3/rbgtk-builder.c +0 -166
  338. data/ext/gtk3/rbgtk-button-box.c +0 -87
  339. data/ext/gtk3/rbgtk-button.c +0 -93
  340. data/ext/gtk3/rbgtk-calendar.c +0 -118
  341. data/ext/gtk3/rbgtk-cell-editable.c +0 -57
  342. data/ext/gtk3/rbgtk-cell-layout.c +0 -144
  343. data/ext/gtk3/rbgtk-cell-renderer-accel.c +0 -41
  344. data/ext/gtk3/rbgtk-cell-renderer-combo.c +0 -38
  345. data/ext/gtk3/rbgtk-cell-renderer-pixbuf.c +0 -41
  346. data/ext/gtk3/rbgtk-cell-renderer-progress.c +0 -38
  347. data/ext/gtk3/rbgtk-cell-renderer-spin.c +0 -39
  348. data/ext/gtk3/rbgtk-cell-renderer-spinner.c +0 -38
  349. data/ext/gtk3/rbgtk-cell-renderer-text.c +0 -48
  350. data/ext/gtk3/rbgtk-cell-renderer-toggle.c +0 -39
  351. data/ext/gtk3/rbgtk-cell-renderer.c +0 -119
  352. data/ext/gtk3/rbgtk-cell-view.c +0 -95
  353. data/ext/gtk3/rbgtk-check-button.c +0 -64
  354. data/ext/gtk3/rbgtk-check-menu-item.c +0 -64
  355. data/ext/gtk3/rbgtk-clip-board.c +0 -389
  356. data/ext/gtk3/rbgtk-color-button.c +0 -55
  357. data/ext/gtk3/rbgtk-color-selection-dialog.c +0 -56
  358. data/ext/gtk3/rbgtk-color-selection.c +0 -219
  359. data/ext/gtk3/rbgtk-combo-box-text.c +0 -138
  360. data/ext/gtk3/rbgtk-combo-box.c +0 -147
  361. data/ext/gtk3/rbgtk-const.c +0 -79
  362. data/ext/gtk3/rbgtk-container.c +0 -788
  363. data/ext/gtk3/rbgtk-css-provider.c +0 -110
  364. data/ext/gtk3/rbgtk-dialog.c +0 -206
  365. data/ext/gtk3/rbgtk-drag-gdk-drag-context.c +0 -108
  366. data/ext/gtk3/rbgtk-drag.c +0 -93
  367. data/ext/gtk3/rbgtk-drawing-area.c +0 -42
  368. data/ext/gtk3/rbgtk-editable.c +0 -149
  369. data/ext/gtk3/rbgtk-entry-buffer.c +0 -87
  370. data/ext/gtk3/rbgtk-entry-completion.c +0 -122
  371. data/ext/gtk3/rbgtk-entry.c +0 -184
  372. data/ext/gtk3/rbgtk-event-box.c +0 -42
  373. data/ext/gtk3/rbgtk-expander.c +0 -49
  374. data/ext/gtk3/rbgtk-file-chooser-button.c +0 -50
  375. data/ext/gtk3/rbgtk-file-chooser-dialog.c +0 -62
  376. data/ext/gtk3/rbgtk-file-chooser-widget.c +0 -40
  377. data/ext/gtk3/rbgtk-file-chooser.c +0 -381
  378. data/ext/gtk3/rbgtk-file-filter.c +0 -128
  379. data/ext/gtk3/rbgtk-file-system-error.c +0 -48
  380. data/ext/gtk3/rbgtk-fixed.c +0 -61
  381. data/ext/gtk3/rbgtk-font-button.c +0 -49
  382. data/ext/gtk3/rbgtk-font-chooser-dialog.c +0 -56
  383. data/ext/gtk3/rbgtk-font-chooser-widget.c +0 -45
  384. data/ext/gtk3/rbgtk-font-chooser.c +0 -78
  385. data/ext/gtk3/rbgtk-frame.c +0 -69
  386. data/ext/gtk3/rbgtk-gdk-event.c +0 -38
  387. data/ext/gtk3/rbgtk-grid.c +0 -105
  388. data/ext/gtk3/rbgtk-handle-box.c +0 -45
  389. data/ext/gtk3/rbgtk-header-bar.c +0 -58
  390. data/ext/gtk3/rbgtk-hsv.c +0 -102
  391. data/ext/gtk3/rbgtk-icon-factory.c +0 -85
  392. data/ext/gtk3/rbgtk-icon-info.c +0 -115
  393. data/ext/gtk3/rbgtk-icon-set.c +0 -84
  394. data/ext/gtk3/rbgtk-icon-size.c +0 -91
  395. data/ext/gtk3/rbgtk-icon-source.c +0 -184
  396. data/ext/gtk3/rbgtk-icon-theme.c +0 -268
  397. data/ext/gtk3/rbgtk-icon-view.c +0 -295
  398. data/ext/gtk3/rbgtk-im-multicontext.c +0 -48
  399. data/ext/gtk3/rbgtk-image-menu-item.c +0 -67
  400. data/ext/gtk3/rbgtk-image.c +0 -162
  401. data/ext/gtk3/rbgtk-imcon-text-simple.c +0 -69
  402. data/ext/gtk3/rbgtk-imcon-text.c +0 -133
  403. data/ext/gtk3/rbgtk-infobar.c +0 -121
  404. data/ext/gtk3/rbgtk-invisible.c +0 -49
  405. data/ext/gtk3/rbgtk-label.c +0 -139
  406. data/ext/gtk3/rbgtk-layout.c +0 -93
  407. data/ext/gtk3/rbgtk-level-bar.c +0 -88
  408. data/ext/gtk3/rbgtk-link-button.c +0 -49
  409. data/ext/gtk3/rbgtk-list-store.c +0 -399
  410. data/ext/gtk3/rbgtk-lock-button.c +0 -50
  411. data/ext/gtk3/rbgtk-menu-button.c +0 -41
  412. data/ext/gtk3/rbgtk-menu-item.c +0 -95
  413. data/ext/gtk3/rbgtk-menu-shell.c +0 -106
  414. data/ext/gtk3/rbgtk-menu-tool-button.c +0 -81
  415. data/ext/gtk3/rbgtk-menu.c +0 -168
  416. data/ext/gtk3/rbgtk-menubar.c +0 -43
  417. data/ext/gtk3/rbgtk-message-dialog.c +0 -74
  418. data/ext/gtk3/rbgtk-misc.c +0 -70
  419. data/ext/gtk3/rbgtk-notebook.c +0 -383
  420. data/ext/gtk3/rbgtk-numerable-icon.c +0 -50
  421. data/ext/gtk3/rbgtk-overlay.c +0 -53
  422. data/ext/gtk3/rbgtk-page-setup-unix-dialog.c +0 -94
  423. data/ext/gtk3/rbgtk-page-setup.c +0 -195
  424. data/ext/gtk3/rbgtk-paned.c +0 -114
  425. data/ext/gtk3/rbgtk-paper-size.c +0 -179
  426. data/ext/gtk3/rbgtk-plug.c +0 -85
  427. data/ext/gtk3/rbgtk-print-context.c +0 -125
  428. data/ext/gtk3/rbgtk-print-job.c +0 -148
  429. data/ext/gtk3/rbgtk-print-operation-preview.c +0 -59
  430. data/ext/gtk3/rbgtk-print-operation.c +0 -149
  431. data/ext/gtk3/rbgtk-print-settings.c +0 -807
  432. data/ext/gtk3/rbgtk-print-unix-dialog.c +0 -90
  433. data/ext/gtk3/rbgtk-printer.c +0 -155
  434. data/ext/gtk3/rbgtk-progress-bar.c +0 -72
  435. data/ext/gtk3/rbgtk-radio-action.c +0 -122
  436. data/ext/gtk3/rbgtk-radio-button.c +0 -89
  437. data/ext/gtk3/rbgtk-radio-menu-item.c +0 -147
  438. data/ext/gtk3/rbgtk-radio-tool-button.c +0 -131
  439. data/ext/gtk3/rbgtk-range.c +0 -68
  440. data/ext/gtk3/rbgtk-recent-action.c +0 -64
  441. data/ext/gtk3/rbgtk-recent-chooser-dialog.c +0 -66
  442. data/ext/gtk3/rbgtk-recent-chooser-menu.c +0 -50
  443. data/ext/gtk3/rbgtk-recent-chooser-widget.c +0 -48
  444. data/ext/gtk3/rbgtk-recent-chooser.c +0 -198
  445. data/ext/gtk3/rbgtk-recent-data.c +0 -188
  446. data/ext/gtk3/rbgtk-recent-filter-info.c +0 -201
  447. data/ext/gtk3/rbgtk-recent-filter.c +0 -169
  448. data/ext/gtk3/rbgtk-recent-info.c +0 -213
  449. data/ext/gtk3/rbgtk-recent-manager.c +0 -134
  450. data/ext/gtk3/rbgtk-revealer.c +0 -42
  451. data/ext/gtk3/rbgtk-scale-button.c +0 -84
  452. data/ext/gtk3/rbgtk-scale.c +0 -97
  453. data/ext/gtk3/rbgtk-scrollable.c +0 -31
  454. data/ext/gtk3/rbgtk-scrollbar.c +0 -52
  455. data/ext/gtk3/rbgtk-scrolled-window.c +0 -122
  456. data/ext/gtk3/rbgtk-search-bar.c +0 -59
  457. data/ext/gtk3/rbgtk-search-entry.c +0 -42
  458. data/ext/gtk3/rbgtk-selection-data.c +0 -281
  459. data/ext/gtk3/rbgtk-selection.c +0 -168
  460. data/ext/gtk3/rbgtk-separator-menu-item.c +0 -39
  461. data/ext/gtk3/rbgtk-separator-tool-item.c +0 -38
  462. data/ext/gtk3/rbgtk-separator.c +0 -44
  463. data/ext/gtk3/rbgtk-settings.c +0 -229
  464. data/ext/gtk3/rbgtk-size-group.c +0 -66
  465. data/ext/gtk3/rbgtk-socket.c +0 -82
  466. data/ext/gtk3/rbgtk-spin-button.c +0 -132
  467. data/ext/gtk3/rbgtk-spinner.c +0 -55
  468. data/ext/gtk3/rbgtk-stack-switcher.c +0 -41
  469. data/ext/gtk3/rbgtk-stack.c +0 -106
  470. data/ext/gtk3/rbgtk-status-bar.c +0 -77
  471. data/ext/gtk3/rbgtk-status-icon.c +0 -122
  472. data/ext/gtk3/rbgtk-stock.c +0 -213
  473. data/ext/gtk3/rbgtk-style-context-gdk-screen.c +0 -61
  474. data/ext/gtk3/rbgtk-style-context.c +0 -411
  475. data/ext/gtk3/rbgtk-style-properties.c +0 -118
  476. data/ext/gtk3/rbgtk-style-provider.c +0 -67
  477. data/ext/gtk3/rbgtk-switch.c +0 -40
  478. data/ext/gtk3/rbgtk-table.c +0 -190
  479. data/ext/gtk3/rbgtk-target-list.c +0 -125
  480. data/ext/gtk3/rbgtk-tearoff-menu-item.c +0 -41
  481. data/ext/gtk3/rbgtk-text-appearance.c +0 -236
  482. data/ext/gtk3/rbgtk-text-attributes.c +0 -326
  483. data/ext/gtk3/rbgtk-text-buffer.c +0 -899
  484. data/ext/gtk3/rbgtk-text-child-anchor.c +0 -56
  485. data/ext/gtk3/rbgtk-text-iter.c +0 -732
  486. data/ext/gtk3/rbgtk-text-mark.c +0 -71
  487. data/ext/gtk3/rbgtk-text-tag-table.c +0 -96
  488. data/ext/gtk3/rbgtk-text-tag.c +0 -68
  489. data/ext/gtk3/rbgtk-text-view.c +0 -336
  490. data/ext/gtk3/rbgtk-theming-engine.c +0 -257
  491. data/ext/gtk3/rbgtk-toggle-action.c +0 -61
  492. data/ext/gtk3/rbgtk-toggle-button.c +0 -87
  493. data/ext/gtk3/rbgtk-toggle-tool-button.c +0 -61
  494. data/ext/gtk3/rbgtk-tool-button.c +0 -66
  495. data/ext/gtk3/rbgtk-tool-item.c +0 -200
  496. data/ext/gtk3/rbgtk-tool-itemgroup.c +0 -70
  497. data/ext/gtk3/rbgtk-tool-shell.c +0 -96
  498. data/ext/gtk3/rbgtk-toolbar.c +0 -118
  499. data/ext/gtk3/rbgtk-tooltip-gdk-display.c +0 -39
  500. data/ext/gtk3/rbgtk-tooltip.c +0 -100
  501. data/ext/gtk3/rbgtk-tree-dragdest.c +0 -28
  502. data/ext/gtk3/rbgtk-tree-dragsource.c +0 -28
  503. data/ext/gtk3/rbgtk-tree-iter.c +0 -258
  504. data/ext/gtk3/rbgtk-tree-model.c +0 -246
  505. data/ext/gtk3/rbgtk-tree-modelfilter.c +0 -197
  506. data/ext/gtk3/rbgtk-tree-modelsort.c +0 -111
  507. data/ext/gtk3/rbgtk-tree-path.c +0 -191
  508. data/ext/gtk3/rbgtk-tree-rowreference.c +0 -140
  509. data/ext/gtk3/rbgtk-tree-selection.c +0 -190
  510. data/ext/gtk3/rbgtk-tree-sortable.c +0 -122
  511. data/ext/gtk3/rbgtk-tree-store.c +0 -330
  512. data/ext/gtk3/rbgtk-tree-view-column.c +0 -256
  513. data/ext/gtk3/rbgtk-tree-view.c +0 -716
  514. data/ext/gtk3/rbgtk-ui-manager.c +0 -189
  515. data/ext/gtk3/rbgtk-viewport.c +0 -44
  516. data/ext/gtk3/rbgtk-volume-button.c +0 -41
  517. data/ext/gtk3/rbgtk-widget-path.c +0 -229
  518. data/ext/gtk3/rbgtk-widget.c +0 -1554
  519. data/ext/gtk3/rbgtk-window-group.c +0 -80
  520. data/ext/gtk3/rbgtk-window.c +0 -565
  521. data/ext/gtk3/rbgtk.c +0 -783
  522. data/ext/gtk3/rbgtk3.h +0 -90
  523. data/ext/gtk3/rbgtk3conversions.h +0 -439
  524. data/ext/gtk3/rbgtk3private.h +0 -300
  525. data/ext/gtk3/rbgtk3util.c +0 -67
  526. data/lib/gtk3/base.rb +0 -67
  527. data/sample/gtk-demo/appwindow.rb +0 -233
  528. data/sample/misc/composited-windows.rb +0 -113
  529. data/sample/misc/itemfactory.rb +0 -73
  530. data/sample/misc/itemfactory2.rb +0 -74
  531. data/sample/misc/keyboard_grab.rb +0 -29
  532. data/sample/misc/pangorenderer.rb +0 -66
  533. data/sample/misc/pointer_grab.rb +0 -34
  534. data/sample/misc/settings.rb +0 -41
  535. data/sample/misc/style_property.rb +0 -67
  536. data/sample/misc/style_property.rc +0 -19
  537. data/sample/misc/textbuffer_serialize.rb +0 -130
  538. data/sample/misc/to_drawable.rb +0 -42
  539. data/sample/misc/uimanager.rb +0 -148
  540. data/sample/misc/uimanager2.rb +0 -91
  541. data/sample/misc/uimanager2.xml +0 -36
  542. data/sample/misc/xbm_cursor.rb +0 -43
  543. data/sample/testgtk/3DRings.xpm +0 -116
  544. data/sample/testgtk/FilesQueue.xpm +0 -98
  545. data/sample/testgtk/Modeller.xpm +0 -117
  546. data/sample/testgtk/README +0 -14
  547. data/sample/testgtk/button.rb +0 -124
  548. data/sample/testgtk/buttonbox.rb +0 -100
  549. data/sample/testgtk/check-n.xpm +0 -21
  550. data/sample/testgtk/check-y.xpm +0 -21
  551. data/sample/testgtk/checkbutton.rb +0 -67
  552. data/sample/testgtk/circles.xbm +0 -46
  553. data/sample/testgtk/colorselect.rb +0 -33
  554. data/sample/testgtk/dialog.rb +0 -48
  555. data/sample/testgtk/entry.rb +0 -73
  556. data/sample/testgtk/filesel.rb +0 -65
  557. data/sample/testgtk/fontselection.rb +0 -56
  558. data/sample/testgtk/labels.rb +0 -74
  559. data/sample/testgtk/layout.rb +0 -108
  560. data/sample/testgtk/marble.xpm +0 -408
  561. data/sample/testgtk/menu.rb +0 -79
  562. data/sample/testgtk/notebook.rb +0 -280
  563. data/sample/testgtk/pixmap.rb +0 -58
  564. data/sample/testgtk/progressbar.rb +0 -173
  565. data/sample/testgtk/radiobutton.rb +0 -61
  566. data/sample/testgtk/range.rb +0 -65
  567. data/sample/testgtk/reparent.rb +0 -91
  568. data/sample/testgtk/sample.rb +0 -80
  569. data/sample/testgtk/savedposition.rb +0 -87
  570. data/sample/testgtk/scrolledwindow.rb +0 -67
  571. data/sample/testgtk/shapedwindow.rb +0 -99
  572. data/sample/testgtk/spinbutton.rb +0 -181
  573. data/sample/testgtk/statusbar.rb +0 -89
  574. data/sample/testgtk/test.xpm +0 -92
  575. data/sample/testgtk/testgtk.rb +0 -176
  576. data/sample/testgtk/testgtkrc +0 -146
  577. data/sample/testgtk/testgtkrc2 +0 -21
  578. data/sample/testgtk/togglebutton.rb +0 -53
  579. data/sample/testgtk/toolbar.rb +0 -82
  580. data/sample/testgtk/tooltips.rb +0 -41
  581. data/sample/testgtk/wmhints.rb +0 -40
  582. data/test/test_gtk_image.rb +0 -8
  583. data/test/test_gtk_list_store.rb +0 -105
  584. data/test/test_gtk_tree_path.rb +0 -20
  585. data/test/test_gtk_unix_print.rb +0 -14
  586. data/test/test_gtk_widget.rb +0 -24
@@ -1,15 +1,13 @@
1
1
  =begin
2
- tree_combo.rb - Gtk::TreeView and Gtk::CellRendererCombo
2
+ tree_combo.rb - Gtk::TreeView and Gtk::CellRendererCombo
3
3
  sample script.
4
4
 
5
- Copyright (C) 2006 Masao Mutoh
5
+ Copyright (C) 2006-2015 Masao Mutoh
6
+ Copyright (c) 2006-2015 Ruby-GNOME2 Project Team
6
7
  This program is licenced under the same licence as Ruby-GNOME2.
7
-
8
- $Id: tree_combo.rb,v 1.3 2006/06/17 13:18:12 mutoh Exp $
9
8
  =end
10
9
 
11
-
12
- require 'gtk3'
10
+ require "gtk3"
13
11
 
14
12
  T_APPLICATION = 0
15
13
  T_COMBO_TEXT_COLUMN = 1
@@ -20,44 +18,42 @@ T_COMBO_TEXT = 5
20
18
 
21
19
  # The COMPUTER combo model
22
20
  combo_model = Gtk::ListStore.new(String)
23
-
24
- ["Ruby", "Perl", "Python", "Java"].each do |v|
21
+
22
+ %w(Ruby Perl Python Java).each do |v|
25
23
  iter = combo_model.append
26
24
  iter[0] = v
27
25
  end
28
26
 
29
-
30
27
  # The table model.
31
28
  model = Gtk::ListStore.new(String, # T_APPLICATION
32
- Integer, # T_COMBO_TEXT_COLUMN
33
- Gtk::ListStore, # T_COMBO_MODEL
34
- TrueClass, # T_COMBO_HAS_ENTRY
35
- TrueClass, # T_COMBO_EDITABLE
36
- String) # T_COMBO_TEXT
29
+ Integer, # T_COMBO_TEXT_COLUMN
30
+ Gtk::ListStore, # T_COMBO_MODEL
31
+ TrueClass, # T_COMBO_HAS_ENTRY
32
+ TrueClass, # T_COMBO_EDITABLE
33
+ String) # T_COMBO_TEXT
37
34
 
38
35
  view = Gtk::TreeView.new(model)
39
36
 
40
37
  # 1st column(Text)
41
38
  trenderer = Gtk::CellRendererText.new
42
39
  tcol = Gtk::TreeViewColumn.new("Application", trenderer,
43
- :text => T_APPLICATION)
40
+ :text => T_APPLICATION)
44
41
  view.append_column(tcol)
45
42
 
46
43
  # 2nd column(Combo)
47
44
  crenderer = Gtk::CellRendererCombo.new
48
- crenderer.signal_connect("edited") do |renderer, path, text|
45
+ crenderer.signal_connect("edited") do |_renderer, path, text|
49
46
  model.get_iter(path)[T_COMBO_TEXT] = text
50
47
  end
51
48
 
52
49
  ccol = Gtk::TreeViewColumn.new("Language", crenderer,
53
- :text_column => T_COMBO_TEXT_COLUMN,
54
- :model => T_COMBO_MODEL,
55
- :has_entry => T_COMBO_HAS_ENTRY,
56
- :editable => T_COMBO_EDITABLE,
57
- :text => T_COMBO_TEXT)
50
+ :text_column => T_COMBO_TEXT_COLUMN,
51
+ :model => T_COMBO_MODEL,
52
+ :has_entry => T_COMBO_HAS_ENTRY,
53
+ :editable => T_COMBO_EDITABLE,
54
+ :text => T_COMBO_TEXT)
58
55
  view.append_column(ccol)
59
56
 
60
-
61
57
  # Create rows.
62
58
  (1..2).each do |v|
63
59
  iter = model.append
@@ -69,11 +65,9 @@ view.append_column(ccol)
69
65
  end
70
66
 
71
67
  win = Gtk::Window.new
72
- win.signal_connect("delete_event"){
73
- Gtk.main_quit
74
- }
68
+ win.signal_connect("delete_event") { Gtk.main_quit }
75
69
 
76
- win.add(view).show_all
70
+ win.add(view)
71
+ win.show_all
77
72
 
78
73
  Gtk.main
79
-
@@ -1,14 +1,12 @@
1
1
  =begin
2
- tree_progress.rb - Gtk::TreeView and Gtk::CellRendererProgress
2
+ tree_progress.rb - Gtk::TreeView and Gtk::CellRendererProgress
3
3
  sample script.
4
4
 
5
- Copyright (C) 2004-2006 Darren Willis, Masao Mutoh
5
+ Copyright (C) 2004-2015 Darren Willis, Masao Mutoh
6
+ Copyright (c) 2004-2015 Ruby-GNOME2 Project Team
6
7
  This program is licenced under the same licence as Ruby-GNOME2.
7
-
8
- $Id: tree_progress.rb,v 1.3 2006/06/17 13:18:12 mutoh Exp $
9
8
  =end
10
9
 
11
-
12
10
  require "gtk3"
13
11
 
14
12
  win = Gtk::Window.new("Gtk::CellRendererProgress sample")
@@ -44,18 +42,15 @@ win.add(view)
44
42
  win.show_all
45
43
 
46
44
  dir = 1
47
- thr = Thread.new do
48
- loop do
49
- value = prog2[1] + dir
50
- if value > 100
51
- dir = - dir
52
- end
53
- if value < 0
54
- dir = - dir
55
- end
56
- prog2[1] += dir
57
- sleep 0.1
58
- end
45
+ GLib::Timeout.add(100) do
46
+ value = prog2[1] + dir
47
+
48
+ dir = - dir if value > 100
49
+ dir = - dir if value < 0
50
+
51
+ prog2[1] += dir
52
+
53
+ GLib::Source::CONTINUE
59
54
  end
60
55
 
61
56
  Gtk.main
@@ -2,22 +2,24 @@
2
2
  =begin
3
3
  treemodelfilter.rb - Gtk::TreeModelFilter sample
4
4
 
5
- Copyright (c) 2004,2006 Ruby-GNOME2 Project Team
5
+ Copyright (c) 2004-2015 Ruby-GNOME2 Project Team
6
6
  This program is licenced under the same licence as Ruby-GNOME2.
7
-
8
- $Id: treemodelfilter.rb,v 1.3 2006/06/17 13:18:12 mutoh Exp $
9
7
  =end
10
- require 'gtk3'
8
+
9
+ require "gtk3"
11
10
 
12
11
  ls = Gtk::ListStore.new(String, Integer)
13
12
 
14
13
  column1 = Gtk::TreeViewColumn.new("data1",
15
- Gtk::CellRendererText.new, {:text => 0})
14
+ Gtk::CellRendererText.new,
15
+ :text => 0)
16
16
  column2 = Gtk::TreeViewColumn.new("data2",
17
- Gtk::CellRendererText.new, {:text => 1})
17
+ Gtk::CellRendererText.new,
18
+ :text => 1)
19
+
20
+ mf = Gtk::TreeModelFilter.new(:child_model => ls)
18
21
 
19
- mf = Gtk::TreeModelFilter.new(ls)
20
- mf.set_visible_func do |model, iter|
22
+ mf.set_visible_func do |_model, iter|
21
23
  /a/ =~ iter[0]
22
24
  end
23
25
 
@@ -44,6 +46,7 @@ treeview.append_column(column2)
44
46
  end
45
47
 
46
48
  win = Gtk::Window.new("Gtk::TreeModelFilter sample")
47
- win.signal_connect("destroy"){Gtk.main_quit}
48
- win.add(treeview).show_all.signal_connect("destroy"){Gtk.main_quit}
49
+ win.signal_connect("destroy") { Gtk.main_quit }
50
+ win.add(treeview)
51
+ win.show_all
49
52
  Gtk.main
@@ -2,47 +2,43 @@
2
2
  =begin
3
3
  treeview.rb - Gtk::TreeView sample
4
4
 
5
- Copyright (c) 2002-2006 Ruby-GNOME2 Project Team
5
+ Copyright (c) 2002-2015 Ruby-GNOME2 Project Team
6
6
  This program is licenced under the same licence as Ruby-GNOME2.
7
-
8
- $Id: treeview.rb,v 1.8 2006/06/17 13:18:12 mutoh Exp $
9
7
  =end
10
8
 
11
- require 'gtk3'
12
-
9
+ require "gtk3"
13
10
  window = Gtk::Window.new("Gtk::TreeView sample")
14
11
 
15
12
  # Create data
16
- model = Gtk::TreeStore.new(String, String, Gdk::Color, Float, Gdk::Pixbuf)
13
+ model = Gtk::TreeStore.new(String, String, Gdk::RGBA, Float, Gdk::Pixbuf)
17
14
 
18
15
  # column 1
19
16
  root_iter = model.append(nil)
20
17
  root_iter[0] = "Root"
21
18
  root_iter[1] = "red"
22
- root_iter[2] = Gdk::Color.new(0, 65535, 0)
19
+ root_iter[2] = Gdk::RGBA.new(0, 1, 0, 1)
23
20
  root_iter[3] = 5.0
24
-
21
+
25
22
  # column 2
26
- root_iter[4] = window.render_icon_pixbuf(Gtk::Stock::NEW, Gtk::IconSize::IconSize::DIALOG)
23
+ root_iter[4] = window.render_icon_pixbuf(Gtk::Stock::NEW, Gtk::IconSize::DIALOG)
27
24
 
28
25
  child_iter1 = model.append(root_iter)
29
26
  child_iter1[0] = "Child_Iter1"
30
27
  child_iter1[1] = "green"
31
- child_iter1[2] = Gdk::Color.new(65535, 0, 0)
28
+ child_iter1[2] = Gdk::RGBA.new(1, 0, 0, 1)
32
29
  child_iter1[3] = 3.0
33
30
 
34
31
  # column 2
35
- child_iter1[4] = window.render_icon_pixbuf(Gtk::Stock::OPEN, Gtk::IconSize::IconSize::MENU)
32
+ child_iter1[4] = window.render_icon_pixbuf(Gtk::Stock::OPEN, Gtk::IconSize::MENU)
36
33
 
37
34
  child_iter2 = model.append(root_iter)
38
35
  child_iter2[0] = "Child_Iter2"
39
36
  child_iter2[1] = "yellow"
40
- child_iter2[2] = Gdk::Color.new(0, 0, 65535)
37
+ child_iter2[2] = Gdk::RGBA.new(0, 0, 1, 1)
41
38
  child_iter2[3] = 0.9
42
39
 
43
40
  # column 2
44
- child_iter2[4] = window.render_icon_pixbuf(Gtk::Stock::QUIT, Gtk::IconSize::IconSize::BUTTON)
45
-
41
+ child_iter2[4] = window.render_icon_pixbuf(Gtk::Stock::QUIT, Gtk::IconSize::BUTTON)
46
42
 
47
43
  # Create view
48
44
  tv = Gtk::TreeView.new(model)
@@ -50,22 +46,24 @@ tv = Gtk::TreeView.new(model)
50
46
  # column 1
51
47
  renderer = Gtk::CellRendererText.new
52
48
  column = Gtk::TreeViewColumn.new("Gtk::CellRenderText", renderer, {
53
- :text => 0,
49
+ :text => 0,
54
50
  :background => 1,
55
- :foreground_gdk => 2,
56
- :scale => 3,
51
+ :foreground_rgba => 2,
52
+ :scale => 3
57
53
  })
58
54
  tv.append_column(column)
59
55
 
60
56
  # column 2
61
57
  renderer = Gtk::CellRendererPixbuf.new
62
58
  column = Gtk::TreeViewColumn.new("Gtk::CellRenderPixbuf", renderer, {
63
- :pixbuf => 4
59
+ :pixbuf => 4
64
60
  })
65
61
 
66
62
  tv.append_column(column)
67
63
 
68
- window.add(tv).set_default_size(300, 300).show_all
69
- window.signal_connect("destroy"){Gtk.main_quit}
64
+ window.add(tv)
65
+ window.set_default_size(300, 300)
66
+ window.show_all
67
+ window.signal_connect("destroy") { Gtk.main_quit }
70
68
 
71
69
  Gtk.main
@@ -2,13 +2,11 @@
2
2
  =begin
3
3
  window.rb - Gtk::Window sample.
4
4
 
5
- Copyright (c) 2002-2006 Ruby-GNOME2 Project Team
5
+ Copyright (c) 2002-2015 Ruby-GNOME2 Project Team
6
6
  This program is licenced under the same licence as Ruby-GNOME2.
7
-
8
- $Id: window.rb,v 1.9 2006/10/21 16:58:00 mutoh Exp $
9
7
  =end
10
8
 
11
- require 'gtk3'
9
+ require "gtk3"
12
10
 
13
11
  window = Gtk::Window.new("Gtk::Window sample")
14
12
  window.signal_connect("destroy"){Gtk.main_quit}
@@ -0,0 +1,86 @@
1
+ =begin
2
+ xbm_cursor.rb - Gdk::Cursor sample script.
3
+
4
+ Copyright (C) 2001-2006 Masao Mutoh
5
+ Copyright (c) 2001-2015 Ruby-GNOME2 Project Team
6
+ This program is licenced under the same licence as Ruby-GNOME2.
7
+ =end
8
+
9
+ require "gtk3"
10
+
11
+ window = Gtk::Window.new("xbm Cursor example")
12
+ window.signal_connect("destroy") { Gtk.main_quit }
13
+
14
+ width = 19
15
+ height = 19
16
+ format = Cairo::FORMAT_A1
17
+ stride = Cairo::Format.stride_for_width(format, width)
18
+
19
+ cursor_xbm_data = [
20
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
21
+ 0xf0, 0x3f, 0x00, 0xe0, 0x78, 0x00, 0xe0, 0x70, 0x00, 0xe0, 0x70, 0x00,
22
+ 0xe0, 0x38, 0x00, 0xe0, 0x1f, 0x00, 0xe0, 0x1d, 0x00, 0xe0, 0x38, 0x00,
23
+ 0xe0, 0x78, 0x00, 0xe0, 0xf0, 0x00, 0xf0, 0xf3, 0x01, 0xf0, 0xe3, 0x01,
24
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
25
+ ].pack("C*")
26
+
27
+ cursor_mask_xbm_data = [
28
+ 0x63, 0x8e, 0x0f, 0x67, 0x8e, 0x0f, 0x06, 0xc6, 0x07, 0x04, 0x00, 0x00,
29
+ 0xf0, 0x3f, 0x08, 0xe7, 0x78, 0x0e, 0xe7, 0x70, 0x0f, 0xe4, 0x70, 0x03,
30
+ 0xe0, 0x38, 0x00, 0xe7, 0x1f, 0x0c, 0xe7, 0x1d, 0x0f, 0xe0, 0x38, 0x0e,
31
+ 0xe0, 0x78, 0x08, 0xe7, 0xf0, 0x00, 0xf7, 0xf3, 0x01, 0xf0, 0xe3, 0x01,
32
+ 0x04, 0x00, 0x00, 0x46, 0x24, 0x06, 0x67, 0x66, 0x0e, 0x67, 0x66, 0x0e
33
+ ].pack("C*")
34
+
35
+ background_color = [0, 1, 0, 1]
36
+ foreground_color = [1, 0, 0, 1]
37
+
38
+ def xbm_data_to_cairo_data(data, width, stride)
39
+ n_bytes_per_row = (width / 8.0).ceil
40
+
41
+ cairo_data_bytes = []
42
+ data.unpack("C*").each_slice(n_bytes_per_row) do |row|
43
+ row.each do |byte|
44
+ cairo_data_bytes << byte
45
+ end
46
+ (stride - n_bytes_per_row).times do
47
+ cairo_data_bytes << 0b0
48
+ end
49
+ end
50
+ cairo_data_bytes.pack("C*")
51
+ end
52
+
53
+ cursor_data = xbm_data_to_cairo_data(cursor_xbm_data,
54
+ width, stride)
55
+
56
+ cursor_mask_data = xbm_data_to_cairo_data(cursor_mask_xbm_data,
57
+ width, stride)
58
+
59
+ source = Cairo::ImageSurface.new(cursor_data, format, width, height, stride)
60
+ mask = Cairo::ImageSurface.new(cursor_mask_data, format, width, height, stride)
61
+
62
+ # Append mask on the source
63
+ Cairo::Context.new(source) do |context|
64
+ context.mask(mask, 0, 0)
65
+ end
66
+
67
+ # Convert the xbm FORMAT_A1 to FORMAT_ARGB32
68
+ cursor_surface = Cairo::ImageSurface.new(Cairo::FORMAT_ARGB32, width, height)
69
+ Cairo::Context.new(cursor_surface) do |context|
70
+ context.set_source(*background_color)
71
+ context.paint
72
+ context.set_source(*foreground_color)
73
+ context.mask(source, 0, 0)
74
+ end
75
+
76
+ offset_x = 10
77
+ offset_y = 10
78
+
79
+ cursor = Gdk::Cursor.new(cursor_surface, offset_x, offset_y)
80
+ window.realize
81
+ window.window.set_cursor(cursor)
82
+ window.add(Gtk::Label.new("Put your cursor on this window."))
83
+ window.set_default_size(200, 100)
84
+ window.show_all
85
+
86
+ Gtk.main
@@ -0,0 +1,441 @@
1
+ # Getting started with GTK+ with the ruby-gnome2 Gtk3 module.
2
+
3
+ This is a ruby adaptation of the official tutorial for the C language that you can find at https://developer.gnome.org/gtk3/stable/gtk-getting-started.html.
4
+
5
+ GTK+ is a widget toolkit. Each user interface created by GTK+ consists of widgets. The Gtk3 module of the ruby-gnome2 project is an implementation of the ruby bindings for GTK+.
6
+
7
+ With Gtk3, Widgets are organized in a hierachy. The Gtk::Window widget is the main container. The user interface is then built by adding buttons, drop-down menus, input fields, and other widgets to the window.
8
+
9
+ If you are creating complex user interfaces it is recommended to use Gtk::Builder and its GTK-specific markup description language, instead of assembling the interface manually. You can also use a visual user interface editor, like Glade.
10
+
11
+ GTK+ is event-driven. The toolkit listens for events such as a click on a button, and passes the event to your application.
12
+
13
+ Here is the most basic example that illustrate the principles of widget hierarchy and events management:
14
+
15
+ ```ruby
16
+ require "gtk3"
17
+
18
+ window = Gtk::Window.new("First example")
19
+ window.set_request_size(400, 400)
20
+ window.set_border_width(10)
21
+
22
+ button = Gtk::Button.new(:label => "Say hello")
23
+ button.signal_connect "clicked" do |_widget|
24
+ puts "Hello World!!"
25
+ end
26
+
27
+ window.add(button)
28
+ window.signal_connect("delete-event") { |_widget| Gtk.main_quit }
29
+ window.show_all
30
+
31
+ Gtk.main
32
+ ```
33
+ This tutorial will mainly be focused on the use of Gtk::Application, which is the best way to create an application.
34
+
35
+ ## Basics
36
+ https://developer.gnome.org/gtk3/stable/gtk-getting-started.html#id-1.2.3.5
37
+
38
+ To begin our introduction to GTK, we'll start with a simple signal-based Gtk application. This program will create an empty 200 × 200 pixel window.
39
+
40
+ * example-0.rb
41
+ ```ruby
42
+ require "gtk3"
43
+
44
+ app = Gtk::Application.new("org.gtk.example", :flags_none)
45
+
46
+ app.signal_connect "activate" do |application|
47
+ window = Gtk::ApplicationWindow.new(application)
48
+ window.set_title("Window")
49
+ window.set_default_size(200, 200)
50
+ window.show_all
51
+ end
52
+
53
+ puts app.run
54
+
55
+ ```
56
+ When creating a Gtk::Application you need to pick an application identifier (a name) and input to `Gtk::Application#new` as parameter. For this example *org.gtk.example* is used but for choosing an identifier for your application see this [guide](https://wiki.gnome.org/HowDoI/ChooseApplicationID).
57
+ Lastly `Gtk::Application#new` takes a `Gio::ApplicationFlags` constants as input for your application, if your application would have special needs (those constants can be replaced by theirs respective symbol ie. `Gio::ApplicationFlags::NONE` == `:flags_none`).
58
+
59
+ Next we add instructions for the "activate" event of the `Gtk::Application` instance we created. The activate signal will be sent when your application is launched with the method `Gtk::Application#run` on the line below. This method also takes as arguments a ruby array of string. This allows GTK+ to parse specific command line arguments that control the behavior of GTK+ itself. The parsed arguments will be removed from the array, leaving the unrecognized ones for your application to parse.
60
+
61
+ Inside the "activate" event block, we want to construct our GTK window, so that a window is shown when the application is launched. The call to `Gtk::ApplicationWindow#new` will create a new `Gtk::Window`. The window will have a frame, a title bar, and window controls depending on the platform.
62
+
63
+ A window title is set using `Gtk::Window#set_title`. This function takes a string as input. Finally the window size is set using `Gtk::Window#set_default_size` and the window is then shown by GTK via `Gtk::Widget#show_all`.
64
+
65
+ When you exit the window, by for example pressing the X, the `Gtk::Application#run` in the main loop returns with a number which is the exit status.
66
+
67
+ While the program is running, GTK+ is receiving *events*. These are typically input events caused by the user interacting with your program, but also things like messages from the window manager or other applications. GTK+ processes these and as a result, signals may be emitted on your widgets. Connecting handlers for these signals is how you normally make your program do something in response to user input.
68
+ The following example is slightly more complex, and tries to showcase some of the capabilities of GTK+.
69
+
70
+ In the long tradition of programming languages and libraries, it is called *Hello, World*.
71
+ * example-1.rb
72
+ ```ruby
73
+ require "gtk3"
74
+ app = Gtk::Application.new("org.gtk.example", :flags_none)
75
+
76
+ app.signal_connect "activate" do |application|
77
+ window = Gtk::ApplicationWindow.new(application)
78
+ window.set_title("Window")
79
+ window.set_default_size(200, 200)
80
+
81
+ button_box = Gtk::ButtonBox.new(:horizontal)
82
+ window.add(button_box)
83
+
84
+ button = Gtk::Button.new(label: "Hello World")
85
+ button.signal_connect "clicked" do |widget|
86
+ puts "Hello World"
87
+ window.destroy
88
+ end
89
+
90
+ button_box.add(button)
91
+
92
+ window.show_all
93
+ end
94
+
95
+ # Gtk::Application#run need C style argv ([prog, arg1, arg2, ...,argn]).
96
+ # The ARGV ruby variable only contains the arguments ([arg1, arg2, ...,argb])
97
+ # and not the program name. We have to add it explicitly.
98
+
99
+ puts app.run([$0] + ARGV)
100
+ ```
101
+ As seen above, example-1.rb builds further upon example-0.rb by adding a button to our window, with the label "Hello World". Two new variables are created to accomplish this, button and button_box.
102
+
103
+ The button_box variable stores a `Gtk::ButtonBox` object, which is GTK+'s way of controlling the size and layout of buttons. The `Gtk::ButtonBox` is created with the method `Gtk::ButtonBox#new` which takes a `Gtk::Orientation `constant as parameter or the related symbols (`:vertical` or `:horizontal`).
104
+
105
+ The buttons which this box will contain can either be stored horizontally or vertically but this does not matter in this particular case as we are dealing with only one button. After initializing button_box with horizontal orientation, the code adds the button_box widget to the window widget using `Gtk::ButtonBox#add`.
106
+
107
+ Next the button variable is initialized in similar manner. The method `Gtk::Button#new` is called which returns a GtkButton to be stored inside button. A label is set using a ruby hash as argument :`:label => "Hello World"`.
108
+
109
+ Afterwards button is added to our button_box. Using the method "Gtk::Button#signal_connect" we add instructions, so that when the button is clicked, a message will be displayed in the terminal if the GTK application was started from one.
110
+
111
+ After that, `Gtk::Window#destroy` is called. This method is herited from `Gtk::Widget`. This has the effect that when the button is clicked, the whole GTK window is destroyed. More information about creating buttons can be found [here](https://wiki.gnome.org/HowDoI/Buttons).
112
+ The rest of the code in example-1.rb is identical to example-0.rb. Next section will elaborate further on how to add several GtkWidgets to your GTK application.
113
+
114
+ ## Packing
115
+ https://developer.gnome.org/gtk3/stable/ch01s02.html
116
+
117
+ When creating an application, you'll want to put more than one widget inside a window. When you want to put more than one widget into a window, it it becomes important to control how each widget is positioned and sized. This is where packing comes in.
118
+
119
+ GTK+ comes with a large variety of layout containers whose purpose it is to control the layout of the child widgets that are added to them. See [Layout Containers](https://developer.gnome.org/gtk3/stable/LayoutContainers.html) for an overview.
120
+
121
+ The following example shows how the `Gtk::Grid` container lets you arrange several buttons:
122
+ * example-2.rb
123
+
124
+ ```ruby
125
+ require "gtk3"
126
+
127
+ app = Gtk::Application.new("org.gtk.example", :flags_none)
128
+
129
+ app.signal_connect "activate" do |application|
130
+ # create a new window, and set its title
131
+ window = Gtk::ApplicationWindow.new(application)
132
+ window.set_title("Window")
133
+ window.set_border_width(10)
134
+
135
+ # Here we construct the container that is going pack our buttons
136
+ grid = Gtk::Grid.new
137
+
138
+ # Pack the container in the window
139
+ window.add(grid)
140
+
141
+ button = Gtk::Button.new(:label => "Button 1")
142
+ button.signal_connect("clicked") { puts "Hello World" }
143
+ # Place the first button in the grid cell (0, 0), and make it fill
144
+ # just 1 cell horizontally and vertically (ie no spanning)
145
+ grid.attach(button, 0, 0, 1, 1)
146
+
147
+ button = Gtk::Button.new(:label => "Button 2")
148
+ button.signal_connect("clicked") { puts "Hello World" }
149
+ # Place the second button in the grid cell (1, 0), and make it fill
150
+ # just 1 cell horizontally and vertically (ie no spanning)
151
+ grid.attach(button, 1, 0, 1, 1)
152
+
153
+ button = Gtk::Button.new(:label => "Quit")
154
+ button.signal_connect("clicked") { window.destroy }
155
+ # Place the Quit button in the grid cell (0, 1), and make it
156
+ # span 2 columns.
157
+ grid.attach(button, 0, 1, 2, 1)
158
+
159
+ # Now that we are done packing our widgets, we show them all
160
+ # in one go, by calling Gtk::Widget#show_all on the window.
161
+ # This call recursively calls Gtk::Widget#show on all widgets
162
+ # that are contained in the window, directly or indirectly
163
+ window.show_all
164
+ end
165
+
166
+ # Gtk::Application#run need C style argv ([prog, arg1, arg2, ...,argn]).
167
+ # The ARGV ruby variable only contains the arguments ([arg1, arg2, ...,argb])
168
+ # and not the program name. We have to add it explicitly.
169
+
170
+ status = app.run([$0] + ARGV)
171
+
172
+ puts status
173
+ ```
174
+ ## Building user interfaces
175
+ https://developer.gnome.org/gtk3/stable/ch01s03.html
176
+
177
+ When construcing a more complicated user interface, with dozens or hundreds of widgets, doing all the setup work in code is cumbersome, and making changes becomes next to impossible.
178
+ Thankfully, GTK+ supports the separation of user interface layout from your business logic, by using UI descriptions in an XML format that can be parsed by the `Gtk::Builder` class.
179
+
180
+ * example-4.rb : Packing buttons with GtkBuilder
181
+
182
+ ```ruby
183
+ require "gtk3"
184
+
185
+ builder_file = "#{File.expand_path(File.dirname(__FILE__))}/builder.ui"
186
+
187
+ # Construct a Gtk::Builder instance and load our UI description
188
+ builder = Gtk::Builder.new(:file => builder_file)
189
+
190
+ # Connect signal handlers to the constructed widgets
191
+ window = builder.get_object("window")
192
+ window.signal_connect("destroy") { Gtk.main_quit }
193
+
194
+ button = builder.get_object("button1")
195
+ button.signal_connect("clicked") { puts "Hello World" }
196
+
197
+ button = builder.get_object("button2")
198
+ button.signal_connect("clicked") { puts "Hello World" }
199
+
200
+ button = builder.get_object("quit")
201
+ button.signal_connect("clicked") { Gtk.main_quit }
202
+
203
+ Gtk.main
204
+ ```
205
+
206
+ Here is the "builder.ui" file that describes the interface:
207
+
208
+ ```xml
209
+ <interface>
210
+ <object id="window" class="GtkWindow">
211
+ <property name="visible">True</property>
212
+ <property name="title">Grid</property>
213
+ <property name="border-width">10</property>
214
+ <child>
215
+ <object id="grid" class="GtkGrid">
216
+ <property name="visible">True</property>
217
+ <child>
218
+ <object id="button1" class="GtkButton">
219
+ <property name="visible">True</property>
220
+ <property name="label">Button 1</property>
221
+ </object>
222
+ <packing>
223
+ <property name="left-attach">0</property>
224
+ <property name="top-attach">0</property>
225
+ </packing>
226
+ </child>
227
+ <child>
228
+ <object id="button2" class="GtkButton">
229
+ <property name="visible">True</property>
230
+ <property name="label">Button 2</property>
231
+ </object>
232
+ <packing>
233
+ <property name="left-attach">1</property>
234
+ <property name="top-attach">0</property>
235
+ </packing>
236
+ </child>
237
+ <child>
238
+ <object id="quit" class="GtkButton">
239
+ <property name="visible">True</property>
240
+ <property name="label">Quit</property>
241
+ </object>
242
+ <packing>
243
+ <property name="left-attach">0</property>
244
+ <property name="top-attach">1</property>
245
+ <property name="width">2</property>
246
+ </packing>
247
+ </child>
248
+ </object>
249
+ <packing>
250
+ </packing>
251
+ </child>
252
+ </object>
253
+ </interface>
254
+ ```
255
+
256
+ The usage of the `Gtk::Builder` is really easy, we just create an instance from the
257
+ file "builder.ui" with `Gtk::Builder.new(:file => builder_file)`. Then you can access every widget or part of the interface thanks to its name: `window = builder.get_object("window")`. Note that `Gtk::Builder` can also be used to construct objects that are not widgets, such as tree models, adjustments, etc.
258
+
259
+ The XML definition of the interface can be loaded from a file, a string or a path in a gresource binary. More informations related to this XML definition can be found [here](https://developer.gnome.org/gtk3/stable/GtkBuilder.html#BUILDER-UI). Those files are generally built with [glade](https://glade.gnome.org/).
260
+
261
+
262
+ ## Building applications
263
+
264
+ ### A trivial application
265
+ https://developer.gnome.org/gtk3/stable/ch01s04.html#id-1.2.3.12.5
266
+
267
+ * exampleapp1/exampleapp.rb
268
+ ```ruby
269
+ require "gtk3"
270
+
271
+ class ExampleAppWindow < Gtk::ApplicationWindow
272
+
273
+ def open(file)
274
+
275
+ end
276
+ end
277
+
278
+ class ExampleApp < Gtk::Application
279
+ def initialize
280
+ super("org.gtk.exampleapp", :handles_open)
281
+
282
+ signal_connect "activate" do |application|
283
+ window = ExampleAppWindow.new(application)
284
+ window.present
285
+ end
286
+ signal_connect "open" do |application, files, hin|
287
+ windows = application.windows
288
+ win = nil
289
+ unless windows.empty?
290
+ win = windows.first
291
+ else
292
+ win = ExampleAppWindow.new(application)
293
+ end
294
+
295
+ files.each { |file| win.open(file) }
296
+
297
+ win.present
298
+ end
299
+ end
300
+ end
301
+
302
+ app = ExampleApp.new
303
+
304
+ puts app.run([$0]+ARGV)
305
+ ```
306
+
307
+ In this example we create a subclass of `Gtk::Application` called ExampleApp. In the `ExampleApp#initialize` method, we add instructions for two signals *activate* and *open*. Every `Gtk::Application` object or its subclass object can react to 4 signals:
308
+
309
+ * startup : sets up the application when it first start
310
+ * shutdown : preforms shutdown tasks
311
+ * activate : shows the default first window of the application
312
+ * open : opens files and shows them in a new window
313
+
314
+ For more informations, see [here](https://wiki.gnome.org/HowDoI/GtkApplication).
315
+ In this case, the signal "*activate*" will be triggered if no arguments are given to the `ExampleApp#run` method. And a default window will be created and will be presented to the user ( [`Gtk::Widget#present`](https://developer.gnome.org/gtk3/stable/GtkWindow.html#gtk-window-present)).
316
+
317
+ If file names are given to the `ExampleApp#run` method, then it is the "*open*" signal that is called.
318
+ Trought this event, you can manage the files that are stored in an array of `Gio::File` objects.
319
+
320
+ In this example, each files are used by an `ExampleAppWindow#open` method. The `ExampleAppWindow` class is derived from the `Gtk::ApplicationWindow`.
321
+
322
+ This does not look very impressive yet, but our application is already presenting itself on the session bus, and it accepts files as commandline arguments.
323
+
324
+
325
+ ### Populating the window
326
+ https://developer.gnome.org/gtk3/stable/ch01s04.html#id-1.2.3.12.6
327
+
328
+ * exampleapp2/exampleapp.rb
329
+
330
+ In this step, we use a [`Gtk::Builder`](https://developer.gnome.org/gtk3/stable/GtkBuilder.html) template to associate a [`Gtk::Builder`](https://developer.gnome.org/gtk3/stable/GtkBuilder.html) ui file with our application window class.
331
+ Our simple ui file puts a [`Gtk::HeaderBar`](https://developer.gnome.org/gtk3/stable/GtkHeaderBar.html) on top of a [`Gtk::Stack`](https://developer.gnome.org/gtk3/stable/GtkStack.html) widget. The header bar contains a [`Gtk::StackSwitcher`](https://developer.gnome.org/gtk3/stable/GtkStackSwitcher.html), which is a standalone widget to show a row of 'tabs' for the pages of a [`Gtk::Stack`](https://developer.gnome.org/gtk3/stable/GtkStack.html) .
332
+
333
+ Here is the "window.ui" file that contains the template of the window:
334
+
335
+ ```xml
336
+ <?xml version="1.0" encoding="UTF-8"?>
337
+ <interface>
338
+ <!-- interface-requires gtk+ 3.8 -->
339
+ <template class="ExampleAppWindow" parent="GtkApplicationWindow">
340
+ <property name="title" translatable="yes">Example Application</property>
341
+ <property name="default-width">600</property>
342
+ <property name="default-height">400</property>
343
+ <child>
344
+ <object class="GtkBox" id="content_box">
345
+ <property name="visible">True</property>
346
+ <property name="orientation">vertical</property>
347
+ <child>
348
+ <object class="GtkHeaderBar" id="header">
349
+ <property name="visible">True</property>
350
+ <child type="title">
351
+ <object class="GtkStackSwitcher" id="tabs">
352
+ <property name="visible">True</property>
353
+ <property name="margin">6</property>
354
+ <property name="stack">stack</property>
355
+ </object>
356
+ </child>
357
+ </object>
358
+ </child>
359
+ <child>
360
+ <object class="GtkStack" id="stack">
361
+ <property name="visible">True</property>
362
+ </object>
363
+ </child>
364
+ </object>
365
+ </child>
366
+ </template>
367
+ </interface>
368
+ ```
369
+ Unlike regular interface descriptions, in template XML descriptions, a`<template>` tag is expected as a direct child of the toplevel `<interface>` tag. Yhe `<template>` tag must specify the "*class*" attribute which must be the class name of the widget. Optionally, the "*parent*" attribute may be specified to indicate the direct parent class (superclass).
370
+
371
+ More informations can be found in the part [building composite widgets from template XML](https://developer.gnome.org/gtk3/stable/GtkWidget.html#GtkWidget.description) of the `Gtk::Widget` documentation.
372
+
373
+ #### Link a template to a custom class widget.
374
+
375
+ ```ruby
376
+ class ExampleAppWindow < Gtk::ApplicationWindow
377
+ type_register
378
+ class << self
379
+ def init
380
+ set_template(:resource => "/org/gtk/exampleapp/window.ui")
381
+ end
382
+ end
383
+
384
+ def initialize(application)
385
+ super(:application => application)
386
+ end
387
+
388
+ def open(file)
389
+
390
+ end
391
+ end
392
+ ```
393
+
394
+ We create a subclass of Gtk::ApplicationWindow. Then we call the method `type_register` inherited from `GLib::Object` in order to register this class as a new [GType](https://developer.gnome.org/gobject/stable/chapter-gtype.html). See the file *ruby-gnome2/glib2/ext/glib2/rbgobj_object.c* for the C implementation. More informations on the gobject manipulation can be found [here](https://blogs.gnome.org/desrt/2012/02/26/a-gentle-introduction-to-gobject-construction/)
395
+
396
+ The template of the interface is bound to the class using the `init` singleton method. We just open the *eigenclass* with `class << self` and define the method `init` in which we call the `Gtk::Widget#set_template` method.
397
+
398
+ After that, the `ExampleAppWindow#initialize` method must be overwritten. When `type_register` is used, *super* is equivalent to `GLib::Object#initialize` so you need to use properties style constructor (hash argument, see [here](https://github.com/ruby-gnome2/ruby-gnome2/issues/503))
399
+
400
+ #### Load a resource file.
401
+
402
+ You may have noticed that we used the `:resource => ` key as the argument of the method that sets a template. Now we need to use GLib's resource functionality to include the ui file in the binary. This is commonly done by listing all resources in a .gresource.xml file, such as this:
403
+
404
+ ```xml
405
+ <?xml version="1.0" encoding="UTF-8"?>
406
+ <gresources>
407
+ <gresource prefix="/org/gtk/exampleapp">
408
+ <file preprocess="xml-stripblanks">window.ui</file>
409
+ </gresource>
410
+ </gresources>
411
+ ```
412
+ In our script, we built the resource binary file with
413
+ ```ruby
414
+ system("glib-compile-resources",
415
+ "--target", gresource_bin,
416
+ "--sourcedir", File.dirname(gresource_xml),
417
+ gresource_xml)
418
+ ```
419
+ Then we make sure that this file is deleted when the script is done :
420
+
421
+ ```ruby
422
+ at_exit do
423
+ FileUtils.rm_f(gresource_bin)
424
+ end
425
+ ```
426
+ The resource binary file is loaded so that each resources in it can be accessed via theirs respective paths.
427
+
428
+ ```ruby
429
+ resource = Gio::Resource.load(gresource_bin)
430
+ Gio::Resources.register(resource)
431
+ ```
432
+
433
+ ### Opening files
434
+ https://developer.gnome.org/gtk3/stable/ch01s04.html#id-1.2.3.12.7
435
+
436
+ * exampleapp3/exampleapp.rb
437
+
438
+ ### An application menu
439
+ https://developer.gnome.org/gtk3/stable/ch01s04.html#id-1.2.3.12.8
440
+
441
+ * exampleapp4/exampleapp.rb