wxruby3 1.7.0 → 1.8.1

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 (522) hide show
  1. checksums.yaml +4 -4
  2. data/INSTALL.md +27 -2
  3. data/README.md +15 -15
  4. data/ext/wxruby3/include/wxRubyApp.h +145 -46
  5. data/ext/wxruby3/include/wxruby-ComboPopup.h +25 -8
  6. data/ext/wxruby3/include/wxruby-GCTracking.h +262 -0
  7. data/ext/wxruby3/include/wxruby-MBConv.h +190 -0
  8. data/ext/wxruby3/include/wxruby-SharedEventHandler.h +183 -0
  9. data/ext/wxruby3/include/wxruby-SharedPtr.h +104 -0
  10. data/ext/wxruby3/include/wxruby-runtime.h +29 -0
  11. data/ext/wxruby3/swig/custom/rubytracking.swg +8 -22
  12. data/ext/wxruby3/swig/custom/wx_ruby_shared_ptr.i +434 -0
  13. data/ext/wxruby3/swig/custom/wx_shared_ptr.i +431 -0
  14. data/ext/wxruby3/swig/mark_free_impl.i +7 -132
  15. data/ext/wxruby3/swig/memory_management.i +8 -44
  16. data/ext/wxruby3/swig/wx.i +46 -73
  17. data/lib/wx/core/const.rb +0 -1
  18. data/lib/wx/core/context_help.rb +17 -0
  19. data/lib/wx/core/cursor.rb +1 -0
  20. data/lib/wx/core/helpcontrollerhelpprovider.rb +10 -2
  21. data/lib/wx/core/mbconv.rb +11 -0
  22. data/lib/wx/core/media_ctrl.rb +31 -0
  23. data/lib/wx/core/top_level_window.rb +7 -0
  24. data/lib/wx/core.rb +6 -0
  25. data/lib/wx/doc/art_provider.rb +17 -0
  26. data/lib/wx/doc/context_help.rb +42 -0
  27. data/lib/wx/doc/core.rb +0 -5
  28. data/lib/wx/doc/functions.rb +10 -0
  29. data/lib/wx/doc/html/html_help_controller.rb +23 -1
  30. data/lib/wx/doc/mbconv.rb +108 -0
  31. data/lib/wx/doc/rt/shared_event_handler.rb +49 -0
  32. data/lib/wx/doc/rt/thread_event.rb +28 -0
  33. data/lib/wx/doc/stream.rb +7 -3
  34. data/lib/wx/doc/webview.rb +40 -0
  35. data/lib/wx/helpers.rb +1 -1
  36. data/lib/wx/html/htmlhelpcontroller.rb +10 -0
  37. data/lib/wx/keyword_defs.rb +11 -0
  38. data/lib/wx/rt/require.rb +8 -0
  39. data/lib/wx/rt/thread_event.rb +14 -0
  40. data/lib/wx/rt.rb +16 -0
  41. data/lib/wx/version.rb +1 -1
  42. data/lib/wx/web/require.rb +8 -0
  43. data/lib/wx/web/webview.rb +106 -0
  44. data/lib/wx/web.rb +17 -0
  45. data/lib/wx/wxruby/cmd/setup.rb +15 -0
  46. data/lib/wx/wxruby/cmd/test.rb +8 -2
  47. data/lib/wx.rb +2 -0
  48. data/rakelib/configure.rb +24 -0
  49. data/rakelib/gem.rb +3 -2
  50. data/rakelib/install.rb +54 -27
  51. data/rakelib/lib/config/macosx.rb +7 -5
  52. data/rakelib/lib/config/mingw.rb +66 -5
  53. data/rakelib/lib/config/pkgman/linux.rb +4 -2
  54. data/rakelib/lib/config/pkgman/mingw.rb +1 -1
  55. data/rakelib/lib/config/unixish.rb +4 -2
  56. data/rakelib/lib/config.rb +37 -3
  57. data/rakelib/lib/core/include/client_data.inc +38 -17
  58. data/rakelib/lib/core/include/funcall.inc +1 -1
  59. data/rakelib/lib/core/include/swigdirector.inc +3 -3
  60. data/rakelib/lib/core/include/swigrubyrun.inc +14 -26
  61. data/rakelib/lib/core/package.rb +0 -2
  62. data/rakelib/lib/director/app.rb +1 -8
  63. data/rakelib/lib/director/art_provider.rb +7 -3
  64. data/rakelib/lib/director/comboctrl.rb +0 -7
  65. data/rakelib/lib/director/context_help_button.rb +35 -2
  66. data/rakelib/lib/director/derived_dc.rb +41 -32
  67. data/rakelib/lib/director/editable_listbox.rb +10 -8
  68. data/rakelib/lib/director/event_handler.rb +32 -28
  69. data/rakelib/lib/director/fs_file.rb +38 -10
  70. data/rakelib/lib/director/functions.rb +8 -0
  71. data/rakelib/lib/director/grid_cell_attr.rb +1 -3
  72. data/rakelib/lib/director/grid_cell_editor.rb +14 -12
  73. data/rakelib/lib/director/grid_cell_renderer.rb +11 -8
  74. data/rakelib/lib/director/grid_ctrl.rb +140 -121
  75. data/rakelib/lib/director/help_controller.rb +70 -2
  76. data/rakelib/lib/director/mb_conv.rb +30 -0
  77. data/rakelib/lib/director/menu.rb +92 -42
  78. data/rakelib/lib/director/menu_bar.rb +84 -45
  79. data/rakelib/lib/director/menu_item.rb +2 -2
  80. data/rakelib/lib/director/persistence_manager.rb +3 -2
  81. data/rakelib/lib/director/preview_frame.rb +2 -2
  82. data/rakelib/lib/director/ribbon_page.rb +11 -0
  83. data/rakelib/lib/director/richtext_buffer.rb +5 -2
  84. data/rakelib/lib/director/shared_evt_handler.rb +30 -0
  85. data/rakelib/lib/director/sizer.rb +8 -17
  86. data/rakelib/lib/director/sizer_item.rb +3 -4
  87. data/rakelib/lib/director/task_bar_icon.rb +7 -7
  88. data/rakelib/lib/director/thread_event.rb +33 -0
  89. data/rakelib/lib/director/top_level_window.rb +12 -4
  90. data/rakelib/lib/director/validator.rb +3 -1
  91. data/rakelib/lib/director/variant.rb +16 -12
  92. data/rakelib/lib/director/webview.rb +166 -0
  93. data/rakelib/lib/director/webview_event.rb +37 -0
  94. data/rakelib/lib/director/webview_handler.rb +63 -0
  95. data/rakelib/lib/generate/doc/thread_event.yaml +20 -0
  96. data/rakelib/lib/generate/doc/web_view.yaml +135 -0
  97. data/rakelib/lib/generate/doc/web_view_event.yaml +38 -0
  98. data/rakelib/lib/generate/doc/web_view_handler.yaml +58 -0
  99. data/rakelib/lib/specs/interfaces.rb +14 -2
  100. data/rakelib/lib/typemap/common.rb +34 -1
  101. data/rakelib/lib/typemap/mb_conv.rb +58 -0
  102. data/rakelib/prepost.rake +23 -31
  103. data/rakelib/prepost.rb +20 -0
  104. data/samples/event/threaded.rb +295 -42
  105. data/samples/event/tn_threaded.png +0 -0
  106. data/samples/help/doc/back.gif +0 -0
  107. data/samples/help/doc/contents.gif +0 -0
  108. data/samples/help/doc/cshelp.txt +9 -0
  109. data/samples/help/doc/doc.chm +0 -0
  110. data/samples/help/doc/doc.cnt +8 -0
  111. data/samples/help/doc/doc.h +7 -0
  112. data/samples/help/doc/doc.hhc +40 -0
  113. data/samples/help/doc/doc.hhk +31 -0
  114. data/samples/help/doc/doc.hhp +33 -0
  115. data/samples/help/doc/doc.hpj +21 -0
  116. data/samples/help/doc/doc.htm +27 -0
  117. data/samples/help/doc/doc1.htm +24 -0
  118. data/samples/help/doc/doc2.htm +12 -0
  119. data/samples/help/doc/doc3.htm +12 -0
  120. data/samples/help/doc/doc4.htm +12 -0
  121. data/samples/help/doc/doc5.htm +14 -0
  122. data/samples/help/doc/forward.gif +0 -0
  123. data/samples/help/doc/up.gif +0 -0
  124. data/samples/help/doc.chm +0 -0
  125. data/samples/help/doc.chw +0 -0
  126. data/samples/help/doc.zip +0 -0
  127. data/samples/help/help.rb +352 -0
  128. data/samples/help/tn_help.png +0 -0
  129. data/samples/webview/handler_advanced.html +55 -0
  130. data/samples/webview/tn_webview.png +0 -0
  131. data/samples/webview/webview.rb +1264 -0
  132. data/tests/assets/handler_advanced.html +55 -0
  133. data/tests/assets/test.zip +0 -0
  134. data/tests/lib/text_entry_tests.rb +2 -2
  135. data/tests/lib/wxapp_runner.rb +40 -0
  136. data/tests/lib/wxframe_runner.rb +17 -2
  137. data/tests/test_art.rb +8 -8
  138. data/tests/test_clipboard.rb +4 -4
  139. data/tests/test_config.rb +6 -6
  140. data/tests/test_exceptions.rb +8 -6
  141. data/tests/test_ext_controls.rb +3 -3
  142. data/tests/test_file_dialog.rb +5 -5
  143. data/tests/test_font.rb +7 -7
  144. data/tests/test_grid_ctrl.rb +133 -0
  145. data/tests/test_help.rb +88 -0
  146. data/tests/test_intl.rb +1 -1
  147. data/tests/test_media_ctrl.rb +14 -6
  148. data/tests/test_menu.rb +94 -86
  149. data/tests/test_persistence.rb +1 -1
  150. data/tests/test_proof_check.rb +5 -5
  151. data/tests/test_propgrid.rb +1 -1
  152. data/tests/test_shared_event_handler.rb +141 -0
  153. data/tests/test_std_controls.rb +5 -5
  154. data/tests/test_webview.rb +492 -0
  155. data/tests/test_window.rb +3 -3
  156. metadata +66 -368
  157. data/assets/repo-social-preview.odg +0 -0
  158. data/assets/repo-social-preview.xcf +0 -0
  159. data/lib/wx/aui/events/evt_list.rb +0 -148
  160. data/lib/wx/core/events/evt_list.rb +0 -1458
  161. data/lib/wx/core/font/encoding.rb +0 -113
  162. data/lib/wx/doc/gen/about_dialog_info.rb +0 -330
  163. data/lib/wx/doc/gen/accelerator.rb +0 -178
  164. data/lib/wx/doc/gen/activity_indicator.rb +0 -83
  165. data/lib/wx/doc/gen/affine_matrix2d.rb +0 -284
  166. data/lib/wx/doc/gen/animation.rb +0 -275
  167. data/lib/wx/doc/gen/animation_ctrl.rb +0 -300
  168. data/lib/wx/doc/gen/any_button.rb +0 -191
  169. data/lib/wx/doc/gen/app.rb +0 -463
  170. data/lib/wx/doc/gen/app_traits.rb +0 -396
  171. data/lib/wx/doc/gen/art_provider.rb +0 -605
  172. data/lib/wx/doc/gen/aui/aui_dock_art.rb +0 -455
  173. data/lib/wx/doc/gen/aui/aui_floating_frame.rb +0 -54
  174. data/lib/wx/doc/gen/aui/aui_manager.rb +0 -847
  175. data/lib/wx/doc/gen/aui/aui_manager_event.rb +0 -131
  176. data/lib/wx/doc/gen/aui/aui_mdi_child_frame.rb +0 -180
  177. data/lib/wx/doc/gen/aui/aui_mdi_client_window.rb +0 -59
  178. data/lib/wx/doc/gen/aui/aui_mdi_parent_frame.rb +0 -130
  179. data/lib/wx/doc/gen/aui/aui_notebook.rb +0 -631
  180. data/lib/wx/doc/gen/aui/aui_notebook_event.rb +0 -233
  181. data/lib/wx/doc/gen/aui/aui_pane_info.rb +0 -769
  182. data/lib/wx/doc/gen/aui/aui_tab_art.rb +0 -352
  183. data/lib/wx/doc/gen/aui/aui_tab_ctrl.rb +0 -14
  184. data/lib/wx/doc/gen/aui/aui_tool_bar.rb +0 -510
  185. data/lib/wx/doc/gen/aui/aui_tool_bar_art.rb +0 -340
  186. data/lib/wx/doc/gen/aui/aui_tool_bar_event.rb +0 -244
  187. data/lib/wx/doc/gen/aui/aui_tool_bar_item.rb +0 -257
  188. data/lib/wx/doc/gen/aui/event_list.rb +0 -179
  189. data/lib/wx/doc/gen/banner_window.rb +0 -124
  190. data/lib/wx/doc/gen/bitmap.rb +0 -731
  191. data/lib/wx/doc/gen/bitmap_button.rb +0 -123
  192. data/lib/wx/doc/gen/bitmap_combo_box.rb +0 -221
  193. data/lib/wx/doc/gen/book_ctrl_base.rb +0 -273
  194. data/lib/wx/doc/gen/book_ctrl_event.rb +0 -66
  195. data/lib/wx/doc/gen/box_sizer.rb +0 -85
  196. data/lib/wx/doc/gen/brush.rb +0 -251
  197. data/lib/wx/doc/gen/busy_info.rb +0 -157
  198. data/lib/wx/doc/gen/button.rb +0 -182
  199. data/lib/wx/doc/gen/calculate_layout_event.rb +0 -62
  200. data/lib/wx/doc/gen/calendar_ctrl.rb +0 -505
  201. data/lib/wx/doc/gen/calendar_date_attr.rb +0 -138
  202. data/lib/wx/doc/gen/calendar_event.rb +0 -147
  203. data/lib/wx/doc/gen/caret.rb +0 -97
  204. data/lib/wx/doc/gen/check_box.rb +0 -175
  205. data/lib/wx/doc/gen/check_list_box.rb +0 -121
  206. data/lib/wx/doc/gen/choice.rb +0 -175
  207. data/lib/wx/doc/gen/choicebook.rb +0 -116
  208. data/lib/wx/doc/gen/client_dc.rb +0 -43
  209. data/lib/wx/doc/gen/clipboard.rb +0 -144
  210. data/lib/wx/doc/gen/collapsible_pane.rb +0 -138
  211. data/lib/wx/doc/gen/collapsible_pane_event.rb +0 -46
  212. data/lib/wx/doc/gen/colour.rb +0 -333
  213. data/lib/wx/doc/gen/colour_dialog.rb +0 -190
  214. data/lib/wx/doc/gen/colour_picker_ctrl.rb +0 -110
  215. data/lib/wx/doc/gen/colour_picker_event.rb +0 -77
  216. data/lib/wx/doc/gen/combo_box.rb +0 -292
  217. data/lib/wx/doc/gen/combo_ctrl.rb +0 -662
  218. data/lib/wx/doc/gen/command_link_button.rb +0 -134
  219. data/lib/wx/doc/gen/config_base.rb +0 -10
  220. data/lib/wx/doc/gen/context_help_button.rb +0 -109
  221. data/lib/wx/doc/gen/control.rb +0 -277
  222. data/lib/wx/doc/gen/control_with_items.rb +0 -253
  223. data/lib/wx/doc/gen/core.rb +0 -45
  224. data/lib/wx/doc/gen/credential_entry_dialog.rb +0 -137
  225. data/lib/wx/doc/gen/cursor.rb +0 -193
  226. data/lib/wx/doc/gen/data_format.rb +0 -85
  227. data/lib/wx/doc/gen/data_object.rb +0 -436
  228. data/lib/wx/doc/gen/data_object_simple_base.rb +0 -10
  229. data/lib/wx/doc/gen/date_event.rb +0 -49
  230. data/lib/wx/doc/gen/date_picker_ctrl.rb +0 -161
  231. data/lib/wx/doc/gen/dc.rb +0 -1631
  232. data/lib/wx/doc/gen/dc_overlay.rb +0 -102
  233. data/lib/wx/doc/gen/defs.rb +0 -2802
  234. data/lib/wx/doc/gen/dial_up_event.rb +0 -45
  235. data/lib/wx/doc/gen/dial_up_manager.rb +0 -149
  236. data/lib/wx/doc/gen/dialog.rb +0 -541
  237. data/lib/wx/doc/gen/dir_dialog.rb +0 -164
  238. data/lib/wx/doc/gen/dir_filter_list_ctrl.rb +0 -90
  239. data/lib/wx/doc/gen/dir_picker_ctrl.rb +0 -125
  240. data/lib/wx/doc/gen/display.rb +0 -238
  241. data/lib/wx/doc/gen/drag_drop.rb +0 -299
  242. data/lib/wx/doc/gen/drag_image.rb +0 -116
  243. data/lib/wx/doc/gen/editable_list_box.rb +0 -109
  244. data/lib/wx/doc/gen/event.rb +0 -990
  245. data/lib/wx/doc/gen/event_blocker.rb +0 -50
  246. data/lib/wx/doc/gen/event_filter.rb +0 -92
  247. data/lib/wx/doc/gen/event_list.rb +0 -1644
  248. data/lib/wx/doc/gen/events.rb +0 -2809
  249. data/lib/wx/doc/gen/evt_handler.rb +0 -229
  250. data/lib/wx/doc/gen/ext_help_controller.rb +0 -109
  251. data/lib/wx/doc/gen/file_ctrl.rb +0 -231
  252. data/lib/wx/doc/gen/file_ctrl_event.rb +0 -83
  253. data/lib/wx/doc/gen/file_dialog.rb +0 -353
  254. data/lib/wx/doc/gen/file_dialog_custom_control.rb +0 -165
  255. data/lib/wx/doc/gen/file_dialog_customize_hook.rb +0 -158
  256. data/lib/wx/doc/gen/file_dir_picker_event.rb +0 -100
  257. data/lib/wx/doc/gen/file_picker_ctrl.rb +0 -132
  258. data/lib/wx/doc/gen/file_system.rb +0 -232
  259. data/lib/wx/doc/gen/find_dialog_event.rb +0 -126
  260. data/lib/wx/doc/gen/find_replace_data.rb +0 -60
  261. data/lib/wx/doc/gen/find_replace_dialog.rb +0 -58
  262. data/lib/wx/doc/gen/flex_grid_sizer.rb +0 -199
  263. data/lib/wx/doc/gen/font.rb +0 -1379
  264. data/lib/wx/doc/gen/font_data.rb +0 -151
  265. data/lib/wx/doc/gen/font_dialog.rb +0 -88
  266. data/lib/wx/doc/gen/font_picker_ctrl.rb +0 -143
  267. data/lib/wx/doc/gen/font_picker_event.rb +0 -65
  268. data/lib/wx/doc/gen/frame.rb +0 -352
  269. data/lib/wx/doc/gen/fs_file.rb +0 -337
  270. data/lib/wx/doc/gen/functions.rb +0 -10
  271. data/lib/wx/doc/gen/gauge.rb +0 -157
  272. data/lib/wx/doc/gen/gb_sizer_item.rb +0 -68
  273. data/lib/wx/doc/gen/gcdc.rb +0 -46
  274. data/lib/wx/doc/gen/gdi_common.rb +0 -1271
  275. data/lib/wx/doc/gen/gdi_object.rb +0 -31
  276. data/lib/wx/doc/gen/generic_about_dialog.rb +0 -140
  277. data/lib/wx/doc/gen/generic_dir_ctrl.rb +0 -223
  278. data/lib/wx/doc/gen/geometry.rb +0 -661
  279. data/lib/wx/doc/gen/graphics_context.rb +0 -1184
  280. data/lib/wx/doc/gen/graphics_object.rb +0 -750
  281. data/lib/wx/doc/gen/grid/event_list.rb +0 -191
  282. data/lib/wx/doc/gen/grid/grid_cell_activatable_editor.rb +0 -40
  283. data/lib/wx/doc/gen/grid/grid_cell_attr.rb +0 -280
  284. data/lib/wx/doc/gen/grid/grid_cell_auto_wrap_string_editor.rb +0 -35
  285. data/lib/wx/doc/gen/grid/grid_cell_auto_wrap_string_renderer.rb +0 -37
  286. data/lib/wx/doc/gen/grid/grid_cell_bool_editor.rb +0 -49
  287. data/lib/wx/doc/gen/grid/grid_cell_bool_renderer.rb +0 -35
  288. data/lib/wx/doc/gen/grid/grid_cell_choice_editor.rb +0 -46
  289. data/lib/wx/doc/gen/grid/grid_cell_date_editor.rb +0 -38
  290. data/lib/wx/doc/gen/grid/grid_cell_date_renderer.rb +0 -45
  291. data/lib/wx/doc/gen/grid/grid_cell_date_time_renderer.rb +0 -40
  292. data/lib/wx/doc/gen/grid/grid_cell_editor.rb +0 -197
  293. data/lib/wx/doc/gen/grid/grid_cell_enum_editor.rb +0 -39
  294. data/lib/wx/doc/gen/grid/grid_cell_enum_renderer.rb +0 -44
  295. data/lib/wx/doc/gen/grid/grid_cell_float_editor.rb +0 -45
  296. data/lib/wx/doc/gen/grid/grid_cell_float_renderer.rb +0 -79
  297. data/lib/wx/doc/gen/grid/grid_cell_number_editor.rb +0 -46
  298. data/lib/wx/doc/gen/grid/grid_cell_number_renderer.rb +0 -35
  299. data/lib/wx/doc/gen/grid/grid_cell_renderer.rb +0 -108
  300. data/lib/wx/doc/gen/grid/grid_cell_string_renderer.rb +0 -35
  301. data/lib/wx/doc/gen/grid/grid_cell_text_editor.rb +0 -49
  302. data/lib/wx/doc/gen/grid/grid_ctrl.rb +0 -3002
  303. data/lib/wx/doc/gen/grid/grid_editor_created_event.rb +0 -95
  304. data/lib/wx/doc/gen/grid/grid_event.rb +0 -129
  305. data/lib/wx/doc/gen/grid/grid_range_select_event.rb +0 -104
  306. data/lib/wx/doc/gen/grid/grid_size_event.rb +0 -85
  307. data/lib/wx/doc/gen/grid/grid_string_table.rb +0 -142
  308. data/lib/wx/doc/gen/grid/grid_table_base.rb +0 -317
  309. data/lib/wx/doc/gen/grid/grid_table_message.rb +0 -81
  310. data/lib/wx/doc/gen/grid_bag_sizer.rb +0 -323
  311. data/lib/wx/doc/gen/grid_sizer.rb +0 -195
  312. data/lib/wx/doc/gen/gui_event_loop.rb +0 -159
  313. data/lib/wx/doc/gen/h_scrolled_window.rb +0 -562
  314. data/lib/wx/doc/gen/header_ctrl.rb +0 -880
  315. data/lib/wx/doc/gen/header_ctrl_event.rb +0 -133
  316. data/lib/wx/doc/gen/help_controller.rb +0 -195
  317. data/lib/wx/doc/gen/help_provider.rb +0 -98
  318. data/lib/wx/doc/gen/html/event_list.rb +0 -38
  319. data/lib/wx/doc/gen/html/html_cell.rb +0 -536
  320. data/lib/wx/doc/gen/html/html_cell_event.rb +0 -69
  321. data/lib/wx/doc/gen/html/html_data_object.rb +0 -42
  322. data/lib/wx/doc/gen/html/html_easy_printing.rb +0 -203
  323. data/lib/wx/doc/gen/html/html_help_controller.rb +0 -340
  324. data/lib/wx/doc/gen/html/html_help_data.rb +0 -159
  325. data/lib/wx/doc/gen/html/html_help_window.rb +0 -258
  326. data/lib/wx/doc/gen/html/html_link_event.rb +0 -41
  327. data/lib/wx/doc/gen/html/html_list_box.rb +0 -346
  328. data/lib/wx/doc/gen/html/html_printout.rb +0 -109
  329. data/lib/wx/doc/gen/html/html_window.rb +0 -461
  330. data/lib/wx/doc/gen/hyperlink_ctrl.rb +0 -311
  331. data/lib/wx/doc/gen/hyperlink_event.rb +0 -44
  332. data/lib/wx/doc/gen/icon.rb +0 -267
  333. data/lib/wx/doc/gen/icon_location.rb +0 -40
  334. data/lib/wx/doc/gen/image.rb +0 -1371
  335. data/lib/wx/doc/gen/image_list.rb +0 -168
  336. data/lib/wx/doc/gen/info_bar.rb +0 -195
  337. data/lib/wx/doc/gen/keyboard_state.rb +0 -140
  338. data/lib/wx/doc/gen/list_box.rb +0 -304
  339. data/lib/wx/doc/gen/list_ctrl.rb +0 -1774
  340. data/lib/wx/doc/gen/list_event.rb +0 -208
  341. data/lib/wx/doc/gen/listbook.rb +0 -116
  342. data/lib/wx/doc/gen/locale.rb +0 -4293
  343. data/lib/wx/doc/gen/log.rb +0 -603
  344. data/lib/wx/doc/gen/mdi_client_window.rb +0 -47
  345. data/lib/wx/doc/gen/mdi_frame.rb +0 -324
  346. data/lib/wx/doc/gen/media_ctrl.rb +0 -269
  347. data/lib/wx/doc/gen/media_event.rb +0 -117
  348. data/lib/wx/doc/gen/memory_dc.rb +0 -174
  349. data/lib/wx/doc/gen/menu.rb +0 -509
  350. data/lib/wx/doc/gen/menu_bar.rb +0 -287
  351. data/lib/wx/doc/gen/menu_item.rb +0 -362
  352. data/lib/wx/doc/gen/message_dialog.rb +0 -238
  353. data/lib/wx/doc/gen/mini_frame.rb +0 -108
  354. data/lib/wx/doc/gen/mirror_dc.rb +0 -22
  355. data/lib/wx/doc/gen/mouse_state.rb +0 -150
  356. data/lib/wx/doc/gen/multi_choice_dialog.rb +0 -80
  357. data/lib/wx/doc/gen/non_owned_window.rb +0 -49
  358. data/lib/wx/doc/gen/notebook.rb +0 -278
  359. data/lib/wx/doc/gen/num_validator.rb +0 -37
  360. data/lib/wx/doc/gen/number_entry_dialog.rb +0 -93
  361. data/lib/wx/doc/gen/object.rb +0 -59
  362. data/lib/wx/doc/gen/owner_drawn_combo_box.rb +0 -395
  363. data/lib/wx/doc/gen/paint_dc.rb +0 -27
  364. data/lib/wx/doc/gen/palette.rb +0 -92
  365. data/lib/wx/doc/gen/panel.rb +0 -127
  366. data/lib/wx/doc/gen/pen.rb +0 -511
  367. data/lib/wx/doc/gen/persistence_manager.rb +0 -135
  368. data/lib/wx/doc/gen/persistent_object.rb +0 -52
  369. data/lib/wx/doc/gen/persistent_window.rb +0 -241
  370. data/lib/wx/doc/gen/pg/event_list.rb +0 -106
  371. data/lib/wx/doc/gen/pg/numeric_property_validator.rb +0 -54
  372. data/lib/wx/doc/gen/pg/pg_array_editor_dialog.rb +0 -292
  373. data/lib/wx/doc/gen/pg/pg_cell.rb +0 -177
  374. data/lib/wx/doc/gen/pg/pg_editor.rb +0 -721
  375. data/lib/wx/doc/gen/pg/pg_multi_button.rb +0 -152
  376. data/lib/wx/doc/gen/pg/pg_properties.rb +0 -2829
  377. data/lib/wx/doc/gen/pg/pg_property.rb +0 -2078
  378. data/lib/wx/doc/gen/pg/pg_validation_info.rb +0 -344
  379. data/lib/wx/doc/gen/pg/property_grid.rb +0 -740
  380. data/lib/wx/doc/gen/pg/property_grid_event.rb +0 -184
  381. data/lib/wx/doc/gen/pg/property_grid_interface.rb +0 -1098
  382. data/lib/wx/doc/gen/pg/property_grid_manager.rb +0 -415
  383. data/lib/wx/doc/gen/pg/property_grid_page.rb +0 -354
  384. data/lib/wx/doc/gen/pg/property_grid_page_state.rb +0 -165
  385. data/lib/wx/doc/gen/picker_base.rb +0 -152
  386. data/lib/wx/doc/gen/platform_info.rb +0 -622
  387. data/lib/wx/doc/gen/popup_window.rb +0 -107
  388. data/lib/wx/doc/gen/progress_dialog.rb +0 -100
  389. data/lib/wx/doc/gen/property_sheet_dialog.rb +0 -216
  390. data/lib/wx/doc/gen/prt/event_list.rb +0 -17
  391. data/lib/wx/doc/gen/prt/page_setup_dialog.rb +0 -44
  392. data/lib/wx/doc/gen/prt/post_script_dc.rb +0 -30
  393. data/lib/wx/doc/gen/prt/preview_frame.rb +0 -78
  394. data/lib/wx/doc/gen/prt/print_abort_dialog.rb +0 -151
  395. data/lib/wx/doc/gen/prt/print_data.rb +0 -804
  396. data/lib/wx/doc/gen/prt/print_dialog.rb +0 -55
  397. data/lib/wx/doc/gen/prt/printer.rb +0 -518
  398. data/lib/wx/doc/gen/prt/printer_dc.rb +0 -37
  399. data/lib/wx/doc/gen/query_layout_info_event.rb +0 -106
  400. data/lib/wx/doc/gen/radio_box.rb +0 -306
  401. data/lib/wx/doc/gen/radio_button.rb +0 -159
  402. data/lib/wx/doc/gen/rbn/event_list.rb +0 -136
  403. data/lib/wx/doc/gen/rbn/ribbon_art_provider.rb +0 -1132
  404. data/lib/wx/doc/gen/rbn/ribbon_bar.rb +0 -308
  405. data/lib/wx/doc/gen/rbn/ribbon_bar_event.rb +0 -45
  406. data/lib/wx/doc/gen/rbn/ribbon_button_bar.rb +0 -458
  407. data/lib/wx/doc/gen/rbn/ribbon_button_bar_event.rb +0 -63
  408. data/lib/wx/doc/gen/rbn/ribbon_control.rb +0 -143
  409. data/lib/wx/doc/gen/rbn/ribbon_gallery.rb +0 -229
  410. data/lib/wx/doc/gen/rbn/ribbon_gallery_event.rb +0 -55
  411. data/lib/wx/doc/gen/rbn/ribbon_page.rb +0 -174
  412. data/lib/wx/doc/gen/rbn/ribbon_panel.rb +0 -270
  413. data/lib/wx/doc/gen/rbn/ribbon_panel_event.rb +0 -45
  414. data/lib/wx/doc/gen/rbn/ribbon_tool_bar.rb +0 -360
  415. data/lib/wx/doc/gen/rbn/ribbon_tool_bar_event.rb +0 -42
  416. data/lib/wx/doc/gen/rearrange_ctrl.rb +0 -78
  417. data/lib/wx/doc/gen/rearrange_list.rb +0 -123
  418. data/lib/wx/doc/gen/region.rb +0 -380
  419. data/lib/wx/doc/gen/region_iterator.rb +0 -76
  420. data/lib/wx/doc/gen/rich_tool_tip.rb +0 -154
  421. data/lib/wx/doc/gen/rtc/event_list.rb +0 -125
  422. data/lib/wx/doc/gen/rtc/rich_text_box.rb +0 -445
  423. data/lib/wx/doc/gen/rtc/rich_text_buffer.rb +0 -1188
  424. data/lib/wx/doc/gen/rtc/rich_text_buffer_data_object.rb +0 -41
  425. data/lib/wx/doc/gen/rtc/rich_text_composite_object.rb +0 -538
  426. data/lib/wx/doc/gen/rtc/rich_text_ctrl.rb +0 -2103
  427. data/lib/wx/doc/gen/rtc/rich_text_event.rb +0 -173
  428. data/lib/wx/doc/gen/rtc/rich_text_file_handler.rb +0 -181
  429. data/lib/wx/doc/gen/rtc/rich_text_formatting_dialog.rb +0 -319
  430. data/lib/wx/doc/gen/rtc/rich_text_header_footer_data.rb +0 -193
  431. data/lib/wx/doc/gen/rtc/rich_text_html_handler.rb +0 -102
  432. data/lib/wx/doc/gen/rtc/rich_text_image.rb +0 -337
  433. data/lib/wx/doc/gen/rtc/rich_text_object.rb +0 -2922
  434. data/lib/wx/doc/gen/rtc/rich_text_paragraph_layout_box.rb +0 -1240
  435. data/lib/wx/doc/gen/rtc/rich_text_printing.rb +0 -258
  436. data/lib/wx/doc/gen/rtc/rich_text_style_list_box.rb +0 -344
  437. data/lib/wx/doc/gen/rtc/rich_text_style_organiser_dialog.rb +0 -227
  438. data/lib/wx/doc/gen/rtc/rich_text_xml_handler.rb +0 -59
  439. data/lib/wx/doc/gen/rtc/symbol_picker_dialog.rb +0 -169
  440. data/lib/wx/doc/gen/sash_event.rb +0 -147
  441. data/lib/wx/doc/gen/sash_layout_window.rb +0 -232
  442. data/lib/wx/doc/gen/sash_window.rb +0 -171
  443. data/lib/wx/doc/gen/scaled_dc.rb +0 -10
  444. data/lib/wx/doc/gen/screen_dc.rb +0 -30
  445. data/lib/wx/doc/gen/scroll_bar.rb +0 -204
  446. data/lib/wx/doc/gen/scrolled_canvas.rb +0 -410
  447. data/lib/wx/doc/gen/scrolled_control.rb +0 -410
  448. data/lib/wx/doc/gen/scrolled_window.rb +0 -430
  449. data/lib/wx/doc/gen/search_ctrl.rb +0 -159
  450. data/lib/wx/doc/gen/secret_store.rb +0 -116
  451. data/lib/wx/doc/gen/simplebook.rb +0 -110
  452. data/lib/wx/doc/gen/single_choice_dialog.rb +0 -89
  453. data/lib/wx/doc/gen/sizer.rb +0 -945
  454. data/lib/wx/doc/gen/sizer_item.rb +0 -244
  455. data/lib/wx/doc/gen/slider.rb +0 -342
  456. data/lib/wx/doc/gen/spin_button.rb +0 -157
  457. data/lib/wx/doc/gen/spin_ctrl.rb +0 -231
  458. data/lib/wx/doc/gen/spin_ctrl_double.rb +0 -192
  459. data/lib/wx/doc/gen/spin_double_event.rb +0 -55
  460. data/lib/wx/doc/gen/spin_event.rb +0 -51
  461. data/lib/wx/doc/gen/splash_screen.rb +0 -113
  462. data/lib/wx/doc/gen/splitter_event.rb +0 -99
  463. data/lib/wx/doc/gen/splitter_window.rb +0 -498
  464. data/lib/wx/doc/gen/static_bitmap.rb +0 -256
  465. data/lib/wx/doc/gen/static_box.rb +0 -180
  466. data/lib/wx/doc/gen/static_box_sizer.rb +0 -85
  467. data/lib/wx/doc/gen/static_line.rb +0 -83
  468. data/lib/wx/doc/gen/static_text.rb +0 -127
  469. data/lib/wx/doc/gen/status_bar.rb +0 -290
  470. data/lib/wx/doc/gen/stc/event_list.rb +0 -221
  471. data/lib/wx/doc/gen/stc/styled_text_ctrl.rb +0 -4474
  472. data/lib/wx/doc/gen/stc/styled_text_event.rb +0 -8762
  473. data/lib/wx/doc/gen/std_dialog_button_sizer.rb +0 -129
  474. data/lib/wx/doc/gen/svg_file_dc.rb +0 -164
  475. data/lib/wx/doc/gen/system_options.rb +0 -129
  476. data/lib/wx/doc/gen/system_settings.rb +0 -507
  477. data/lib/wx/doc/gen/task_bar_icon.rb +0 -127
  478. data/lib/wx/doc/gen/task_bar_icon_event.rb +0 -88
  479. data/lib/wx/doc/gen/text_attr.rb +0 -756
  480. data/lib/wx/doc/gen/text_ctrl.rb +0 -1033
  481. data/lib/wx/doc/gen/text_entry.rb +0 -441
  482. data/lib/wx/doc/gen/text_entry_dialog.rb +0 -220
  483. data/lib/wx/doc/gen/text_validator.rb +0 -245
  484. data/lib/wx/doc/gen/time_picker_ctrl.rb +0 -128
  485. data/lib/wx/doc/gen/timer.rb +0 -119
  486. data/lib/wx/doc/gen/timer_event.rb +0 -68
  487. data/lib/wx/doc/gen/tip_provider.rb +0 -63
  488. data/lib/wx/doc/gen/tip_window.rb +0 -51
  489. data/lib/wx/doc/gen/toggle_button.rb +0 -182
  490. data/lib/wx/doc/gen/tool_bar.rb +0 -890
  491. data/lib/wx/doc/gen/tool_tip.rb +0 -86
  492. data/lib/wx/doc/gen/toolbook.rb +0 -118
  493. data/lib/wx/doc/gen/top_level_window.rb +0 -497
  494. data/lib/wx/doc/gen/tree_ctrl.rb +0 -1052
  495. data/lib/wx/doc/gen/tree_event.rb +0 -127
  496. data/lib/wx/doc/gen/treebook.rb +0 -180
  497. data/lib/wx/doc/gen/ui_action_simulator.rb +0 -109
  498. data/lib/wx/doc/gen/utils.rb +0 -273
  499. data/lib/wx/doc/gen/v_list_box.rb +0 -272
  500. data/lib/wx/doc/gen/v_scrolled_canvas.rb +0 -195
  501. data/lib/wx/doc/gen/v_scrolled_window.rb +0 -191
  502. data/lib/wx/doc/gen/validator.rb +0 -68
  503. data/lib/wx/doc/gen/variant.rb +0 -294
  504. data/lib/wx/doc/gen/window.rb +0 -2917
  505. data/lib/wx/doc/gen/window_dc.rb +0 -38
  506. data/lib/wx/doc/gen/window_disabler.rb +0 -30
  507. data/lib/wx/doc/gen/with_images.rb +0 -84
  508. data/lib/wx/doc/gen/wizard.rb +0 -257
  509. data/lib/wx/doc/gen/wizard_event.rb +0 -113
  510. data/lib/wx/doc/gen/wizard_page.rb +0 -65
  511. data/lib/wx/doc/gen/wizard_page_simple.rb +0 -88
  512. data/lib/wx/doc/gen/wrap_sizer.rb +0 -79
  513. data/lib/wx/doc/gen/xml_node.rb +0 -316
  514. data/lib/wx/doc/gen/xml_resource.rb +0 -320
  515. data/lib/wx/grid/events/evt_list.rb +0 -166
  516. data/lib/wx/html/events/evt_list.rb +0 -27
  517. data/lib/wx/pg/events/evt_list.rb +0 -73
  518. data/lib/wx/rbn/events/evt_list.rb +0 -102
  519. data/lib/wx/rtc/events/evt_list.rb +0 -98
  520. data/lib/wx/rtc/ext/rich_text_ctrl.rb +0 -24
  521. data/lib/wx/stc/events/evt_list.rb +0 -178
  522. data/samples/art/wxruby-512x512.png +0 -0
@@ -13,23 +13,47 @@ module WXRuby3
13
13
  class Menu < Director
14
14
 
15
15
  def setup
16
- spec.gc_as_object
16
+ spec.gc_as_marked
17
17
  spec.ignore 'wxMenu::wxMenu(long)'
18
18
  spec.no_proxy 'wxMenu' # do not support derived wxMenu classes
19
19
  spec.add_header_code <<~__HEREDOC
20
+ static void GC_mark_wxMenu(const TGCTrackingValueMap& values);
21
+
20
22
  // Custom subclass implementation.
21
23
  // Provides proper support for Ruby GC in destructor.
22
24
  class wxRubyMenu : public wxMenu
23
25
  {
24
26
  public:
27
+ static const std::string TRACKING_CAT;
28
+
25
29
  wxRubyMenu() : wxMenu() {}
26
30
  wxRubyMenu(const wxString &title, long style=0) : wxMenu(title, style) {}
27
31
  virtual ~wxRubyMenu()
28
32
  {
29
- SWIG_RubyUnlinkObjects(this);
30
- SWIG_RubyRemoveTracking(this);
33
+ wxRuby_ReleaseEvtHandlerProcs(this);
34
+ wxruby_unregister();
35
+ }
36
+
37
+ void wxruby_register(VALUE rb_menu)
38
+ {
39
+ if (!is_registered_)
40
+ {
41
+ wxRuby_RegisterTrackingCategory(TRACKING_CAT, GC_mark_wxMenu, true);
42
+ is_registered_ = true;
43
+ }
44
+ if (RB_NIL_P(wxRuby_FindCategoryValue(TRACKING_CAT, this)))
45
+ wxRuby_RegisterCategoryValue(TRACKING_CAT, this, rb_menu);
46
+ }
47
+ private:
48
+ static bool is_registered_;
49
+ void wxruby_unregister()
50
+ {
51
+ wxRuby_UnregisterCategoryValue(TRACKING_CAT, this);
31
52
  }
32
53
  };
54
+
55
+ const std::string wxRubyMenu::TRACKING_CAT = { "WXRUBY_MENU" };
56
+ bool wxRubyMenu::is_registered_ {};
33
57
  __HEREDOC
34
58
  # make Ruby director and wrappers use custom implementation
35
59
  spec.use_class_implementation('wxMenu', 'wxRubyMenu')
@@ -63,8 +87,7 @@ module WXRuby3
63
87
  spec.map 'wxMenu **' => 'Wx::Menu' do
64
88
  map_in ignore: true, temp: 'wxMenu *tmp', code: '$1 = &tmp;'
65
89
  map_argout code: <<~__CODE
66
- void *ptr = tmp$argnum;
67
- $result = SWIG_Ruby_AppendOutput($result, SWIG_NewPointerObj(ptr, SWIGTYPE_p_wxMenu, 0));
90
+ $result = SWIG_Ruby_AppendOutput($result, wxRuby_WrapWxMenuInRuby(tmp$argnum));
68
91
  __CODE
69
92
  end
70
93
  # for FindChildItem
@@ -75,56 +98,83 @@ module WXRuby3
75
98
  // forward decl
76
99
  SWIGINTERN void free_wxMenu(void *self);
77
100
 
101
+ static void _gc_mark_single_wxMenu(wxMenu *wx_menu, VALUE rb_menu)
102
+ {
103
+ WXRUBY_TRACE_IF(WxRubyTraceMarkMenu, 2)
104
+ WXRUBY_TRACE("> GC_mark_attached_wxMenu : " << wx_menu)
105
+ WXRUBY_TRACE_END
106
+
107
+ rb_gc_mark(rb_menu);
108
+
109
+ wxMenuItemList wx_menu_items = wx_menu->GetMenuItems();
110
+ wxMenuItemList::iterator iter;
111
+ for (iter = wx_menu_items.begin(); iter != wx_menu_items.end(); ++iter)
112
+ {
113
+ wxMenuItem *wx_item = *iter;
114
+ rb_gc_mark(SWIG_RubyInstanceFor(wx_item) );
115
+ wxMenu* wx_sub_menu = wx_item->GetSubMenu();
116
+ if (wx_sub_menu)
117
+ {
118
+ VALUE rb_sub_menu = wxRuby_FindCategoryValue(wxRubyMenu::TRACKING_CAT, wx_sub_menu);
119
+ _gc_mark_single_wxMenu(wx_sub_menu, rb_sub_menu);
120
+ }
121
+ }
122
+
123
+ WXRUBY_TRACE_IF(WxRubyTraceMarkMenu, 2)
124
+ WXRUBY_TRACE("< GC_mark_attached_wxMenu : " << wx_menu)
125
+ WXRUBY_TRACE_END
126
+ }
127
+
78
128
  // Mark Function
79
129
  // Need to protect MenuItems which are included in the Menu, including
80
130
  // their associated sub-menus, recursively.
81
- static void GC_mark_wxMenu(void *ptr)
131
+ static void GC_mark_wxMenu(const TGCTrackingValueMap& values)
82
132
  {
83
133
  WXRUBY_TRACE_IF(WxRubyTraceMarkMenu, 2)
84
- WXRUBY_TRACE("> GC_mark_wxMenu : " << ptr)
134
+ WXRUBY_TRACE("> GC_mark_wxMenu")
85
135
  WXRUBY_TRACE_END
86
-
87
- VALUE rb_menu = SWIG_RubyInstanceFor(ptr);
88
- if (!RB_NIL_P(rb_menu))
136
+
137
+ for (const auto& ti : values)
89
138
  {
90
- // as long as the dfree function is still the managed free function the menu has not been attached to a menu bar
91
- // but it may hay have already had submenus and/or menuitems added which need to be marked
92
- if (RDATA(rb_menu)->dfree == free_wxMenu)
93
- {
94
- wxMenu* wx_menu = static_cast<wxMenu*> (ptr);
139
+ _gc_mark_single_wxMenu(static_cast<wxMenu*> (ti.first), ti.second);
140
+ }
95
141
 
96
- wxMenuItemList wx_menu_items = wx_menu->GetMenuItems();
97
- wxMenuItemList::iterator iter;
98
- for (iter = wx_menu_items.begin(); iter != wx_menu_items.end(); ++iter)
142
+ WXRUBY_TRACE_IF(WxRubyTraceMarkMenu, 2)
143
+ WXRUBY_TRACE("< GC_mark_wxMenu")
144
+ WXRUBY_TRACE_END
145
+ }
146
+
147
+ WXRUBY_EXPORT VALUE wxRuby_WrapWxMenuInRuby(wxMenu* wx_menu)
148
+ {
149
+ VALUE rb_menu = Qnil;
150
+ if (wx_menu)
151
+ {
152
+ rb_menu = wxRuby_FindCategoryValue(wxRubyMenu::TRACKING_CAT, wx_menu); // check for already registered instance
153
+ if (NIL_P(rb_menu))
154
+ {
155
+ // newly created
156
+ wxRubyMenu* wxrb_menu = dynamic_cast<wxRubyMenu*> (wx_menu);
157
+ if (wxrb_menu)
99
158
  {
100
- wxMenuItem *wx_item = *iter;
101
- rb_gc_mark( SWIG_RubyInstanceFor(wx_item) );
102
- wxMenu* wx_sub_menu = wx_item->GetSubMenu();
103
- if (wx_sub_menu)
104
- GC_mark_attached_wxMenu(wx_sub_menu);
159
+ // convert and own
160
+ rb_menu = SWIG_NewPointerObj(SWIG_as_voidptr(wxrb_menu), SWIGTYPE_p_wxMenu, SWIG_POINTER_OWN);
161
+ wxrb_menu->wxruby_register(rb_menu);
162
+ }
163
+ else
164
+ {
165
+ // created internally by wxWidgets; no tracking and no ownership
166
+ rb_menu = SWIG_NewPointerObj(SWIG_as_voidptr(wx_menu), SWIGTYPE_p_wxMenu, 0);
105
167
  }
106
- }
107
- else // otherwise the menu has been attached to a menu bar and may already have been deleted (or not)
108
- { // marking in this case will be left to the menu bar
109
- WXRUBY_TRACE_IF(WxRubyTraceMarkMenu, 3)
110
- WXRUBY_TRACE("< GC_mark_wxMenu : skipping attached menu")
111
- WXRUBY_TRACE_END
112
168
  }
113
169
  }
114
- else
115
- {
116
- WXRUBY_TRACE_IF(WxRubyTraceMarkMenu, 3)
117
- WXRUBY_TRACE("< GC_mark_wxMenu : skipping untracked menu (should not have happened)")
118
- WXRUBY_TRACE_END
119
- }
120
-
121
- WXRUBY_TRACE_IF(WxRubyTraceMarkMenu, 2)
122
- WXRUBY_TRACE("< GC_mark_wxMenu : " << ptr)
123
- WXRUBY_TRACE_END
170
+ return rb_menu;
171
+ }
172
+
173
+ WXRUBY_EXPORT void wxRuby_RegisterWxMenu(wxMenu* wx_menu, VALUE rb_menu)
174
+ {
175
+ wxRubyMenu* wxrb_menu = dynamic_cast<wxRubyMenu*> (wx_menu);
176
+ if (wxrb_menu) wxrb_menu->wxruby_register(rb_menu);
124
177
  }
125
- __HEREDOC
126
- spec.add_swig_code <<~__HEREDOC
127
- %markfunc wxMenu "GC_mark_wxMenu";
128
178
  __HEREDOC
129
179
  # ignore MSW specific method
130
180
  spec.ignore 'wxMenu::MSWCommand'
@@ -16,7 +16,7 @@ module WXRuby3
16
16
 
17
17
  def setup
18
18
  super
19
- spec.gc_as_object # not a typical window
19
+ spec.gc_as_marked # not a typical window
20
20
  spec.no_proxy('wxMenuBar::FindItem',
21
21
  'wxMenuBar::Remove',
22
22
  'wxMenuBar::Replace')
@@ -28,71 +28,110 @@ module WXRuby3
28
28
  spec.new_object 'wxMenuBar::Remove', 'wxMenuBar::Replace'
29
29
  # for FindItem
30
30
  spec.map 'wxMenu **' => 'Wx::Menu' do
31
+ add_header_code 'WXRUBY_EXPORT VALUE wxRuby_WrapWxMenuInRuby(wxMenu* wx_menu);'
31
32
  map_in ignore: true, temp: 'wxMenu *tmp', code: '$1 = &tmp;'
32
33
  map_argout code: <<~__CODE
33
- void *ptr = tmp$argnum;
34
- $result = SWIG_Ruby_AppendOutput($result, SWIG_NewPointerObj(ptr, SWIGTYPE_p_wxMenu, 0));
34
+ $result = SWIG_Ruby_AppendOutput($result, wxRuby_WrapWxMenuInRuby(tmp$argnum));
35
35
  __CODE
36
36
  end
37
37
  spec.add_header_code <<~__HEREDOC
38
- WXRUBY_TRACE_GUARD(WxRubyTraceMarkMenubar, "GC_MARK_MENUBAR")
38
+ static void GC_mark_wxMenuBar(const TGCTrackingValueMap& values);
39
+
40
+ // Custom subclass implementation.
41
+ // Provides support for monitored tracking and GC handling.
42
+ class wxRubyMenuBar : public wxMenuBar
43
+ {
44
+ public:
45
+ static const std::string TRACKING_CAT;
39
46
 
40
- // forward decl
41
- SWIGINTERN void free_wxMenuBar(void *self);
47
+ wxRubyMenuBar(long style=0) : wxMenuBar(style) {}
48
+ virtual ~wxRubyMenuBar()
49
+ {
50
+ wxRuby_ReleaseEvtHandlerProcs(this);
51
+ wxruby_unregister();
52
+ }
53
+
54
+ void wxruby_register(VALUE rb_menubar)
55
+ {
56
+ if (!is_registered_)
57
+ {
58
+ wxRuby_RegisterTrackingCategory(TRACKING_CAT, GC_mark_wxMenuBar, true);
59
+ is_registered_ = true;
60
+ }
61
+ if (RB_NIL_P(wxRuby_FindCategoryValue(TRACKING_CAT, this)))
62
+ wxRuby_RegisterCategoryValue(TRACKING_CAT, this, rb_menubar);
63
+ }
64
+ private:
65
+ static bool is_registered_;
66
+ void wxruby_unregister()
67
+ {
68
+ wxRuby_UnregisterCategoryValue(TRACKING_CAT, this);
69
+ }
70
+ };
71
+
72
+ const std::string wxRubyMenuBar::TRACKING_CAT = { "WXRUBY_MENU_BAR" };
73
+ bool wxRubyMenuBar::is_registered_ {};
74
+
75
+ WXRUBY_TRACE_GUARD(WxRubyTraceMarkMenubar, "GC_MARK_MENUBAR")
42
76
 
43
77
  // Mark Function for unattached menu bars
44
78
  // Need to protect Menu and MenuItems which are included in the MenuBar
45
- static void GC_mark_wxMenuBar(void *ptr)
79
+ static void GC_mark_wxMenuBar(const TGCTrackingValueMap& values)
46
80
  {
47
81
  WXRUBY_TRACE_IF(WxRubyTraceMarkMenubar, 2)
48
- WXRUBY_TRACE("> GC_mark_wxMenuBar : " << ptr)
82
+ WXRUBY_TRACE("> GC_mark_wxMenuBar")
49
83
  WXRUBY_TRACE_END
50
84
 
51
- VALUE rb_menu_bar = SWIG_RubyInstanceFor(ptr);
52
- if (!RB_NIL_P(rb_menu_bar))
85
+ for (const auto& ti : values)
53
86
  {
54
- // as long as the dfree function is still the managed free function the menubar has not been attached to a window
55
- // but it may hay have already had menus and/or menuitems added which need to be marked
56
- if (RDATA(rb_menu_bar)->dfree == free_wxMenuBar)
57
- {
58
- // Menu bars are also a subclass of wxWindow, so must do all the marking
59
- // of sizers and carets associated with that class
60
- GC_mark_wxWindow(ptr);
87
+ rb_gc_mark(ti.second);
88
+
89
+ // Menu bars are also a subclass of wxWindow, so must do all the marking
90
+ // of sizers and carets associated with that class
91
+ GC_mark_wxWindow(ti.first);
61
92
 
62
- wxMenuBar* wx_menu_bar = static_cast<wxMenuBar*> (ptr);
93
+ // no need to mark anything else as menus are tracked themselves separately
94
+ }
63
95
 
64
- WXRUBY_TRACE_IF(WxRubyTraceMarkMenubar, 3)
65
- WXRUBY_TRACE("< GC_mark_wxMenuBar : marking " << wx_menu_bar->GetMenuCount() << " menus")
66
- WXRUBY_TRACE_END
67
-
68
- // Mark each menu in the menubar in turn
69
- for ( size_t i = 0; i < wx_menu_bar->GetMenuCount(); i++ )
96
+ WXRUBY_TRACE_IF(WxRubyTraceMarkMenubar, 2)
97
+ WXRUBY_TRACE("< GC_mark_wxMenuBar")
98
+ WXRUBY_TRACE_END
99
+ }
100
+
101
+ WXRUBY_EXPORT VALUE wxRuby_WrapWxMenuBarInRuby(wxMenuBar* wx_menubar)
102
+ {
103
+ VALUE rb_menubar = Qnil;
104
+ if (wx_menubar)
105
+ {
106
+ rb_menubar = wxRuby_FindCategoryValue(wxRubyMenuBar::TRACKING_CAT, wx_menubar); // check for already registered instance
107
+ if (NIL_P(rb_menubar))
108
+ {
109
+ // newly created
110
+ wxRubyMenuBar* wxrb_mb = dynamic_cast<wxRubyMenuBar*> (wx_menubar);
111
+ if (wxrb_mb)
70
112
  {
71
- GC_mark_attached_wxMenu(wx_menu_bar->GetMenu(i));
113
+ // convert and own
114
+ rb_menubar = SWIG_NewPointerObj(SWIG_as_voidptr(wxrb_mb), SWIGTYPE_p_wxMenuBar, SWIG_POINTER_OWN);
115
+ wxrb_mb->wxruby_register(rb_menubar);
116
+ }
117
+ else
118
+ {
119
+ // created internally by wxWidgets; no tracking and no ownership
120
+ rb_menubar = SWIG_NewPointerObj(SWIG_as_voidptr(wx_menubar), SWIGTYPE_p_wxMenuBar, 0);
72
121
  }
73
- }
74
- else // otherwise the menu bar has been attached to a frame and may already have been deleted (or not)
75
- { // marking in this case will be left to the frame
76
- WXRUBY_TRACE_IF(WxRubyTraceMarkMenubar, 3)
77
- WXRUBY_TRACE("< GC_mark_wxMenuBar : skipping attached menu bar")
78
- WXRUBY_TRACE_END
79
122
  }
80
123
  }
81
- else
82
- {
83
- WXRUBY_TRACE_IF(WxRubyTraceMarkMenubar, 3)
84
- WXRUBY_TRACE("< GC_mark_wxMenuBar : skipping untracked menu bar (should not have happened)")
85
- WXRUBY_TRACE_END
86
- }
87
-
88
- WXRUBY_TRACE_IF(WxRubyTraceMarkMenubar, 2)
89
- WXRUBY_TRACE("< GC_mark_wxMenuBar : " << ptr)
90
- WXRUBY_TRACE_END
124
+ return rb_menubar;
125
+ }
126
+
127
+ WXRUBY_EXPORT void wxRuby_RegisterWxMenuBar(wxMenuBar* wx_menubar, VALUE rb_menubar)
128
+ {
129
+ wxRubyMenuBar* wxrb_mb = dynamic_cast<wxRubyMenuBar*> (wx_menubar);
130
+ if (wxrb_mb) wxrb_mb->wxruby_register(rb_menubar);
91
131
  }
92
- __HEREDOC
93
- spec.add_swig_code <<~__HEREDOC
94
- %markfunc wxMenu "GC_mark_wxMenuBar";
95
- __HEREDOC
132
+ __HEREDOC
133
+ # make Ruby director and wrappers use custom implementation
134
+ spec.use_class_implementation('wxMenuBar', 'wxRubyMenuBar')
96
135
  end
97
136
  end # class MenuBar
98
137
 
@@ -24,8 +24,8 @@ module WXRuby3
24
24
  spec.ignore(%w[wxMenuItem::GetLabel wxMenuItem::GetName wxMenuItem::GetText wxMenuItem::SetText wxMenuItem::GetLabelFromText])
25
25
  # Replace for more specific param naming
26
26
  spec.ignore 'wxMenuItem::SetSubMenu(wxMenu *)', ignore_doc: false
27
- spec.extend_interface 'wxMenuItem', 'void SetSubMenu(wxMenu *sub_menu)'
28
- spec.disown 'wxMenu *sub_menu'
27
+ spec.extend_interface 'wxMenuItem', 'void SetSubMenu(wxMenu *subMenu)'
28
+ spec.disown 'wxMenu *subMenu'
29
29
  # ignore this as there is no implementation anymore
30
30
  spec.ignore 'wxMenuItem::GetAccelFromString'
31
31
  spec.ignore_unless('USE_ACCEL', 'wxMenuItem::GetAccel')
@@ -200,7 +200,7 @@ module WXRuby3
200
200
  }
201
201
  }
202
202
 
203
- static void wxRuby_markPersistentObjects()
203
+ static void wxRuby_markPersistentObjects(const TGCTrackingValueMap& /*unused*/)
204
204
  {
205
205
  WxRubyPersistenceManager* wxrb_pm =
206
206
  dynamic_cast<WxRubyPersistenceManager*> (&wxPersistenceManager::Get());
@@ -399,7 +399,8 @@ module WXRuby3
399
399
  // install the default global wxRuby persistence manager
400
400
  wxPersistenceManager::Set(s_wxruby_persistence_manager);
401
401
  // and the persistent object marker
402
- wxRuby_AppendMarker(wxRuby_markPersistentObjects);
402
+ static const std::string WXRUBY_PERSISTENT_OBJECTS = {"WXRUBY_PERSISTENT_OBJECTS"};
403
+ wxRuby_RegisterTrackingCategory(WXRUBY_PERSISTENT_OBJECTS, wxRuby_markPersistentObjects);
403
404
  __HEREDOC
404
405
  end
405
406
 
@@ -53,8 +53,8 @@ module WXRuby3
53
53
  if ( GC_IsWindowDeleted(ptr) )
54
54
  return;
55
55
 
56
- // Do standard marking routines as for all wxFrames
57
- GC_mark_wxFrame(ptr);
56
+ // Do standard marking routines as for all windows
57
+ GC_mark_wxWindow(ptr);
58
58
 
59
59
  WxRubyPreviewFrame* preview_frame = dynamic_cast<WxRubyPreviewFrame*>((wxPreviewFrame*)ptr);
60
60
  if (preview_frame)
@@ -16,6 +16,17 @@ module WXRuby3
16
16
 
17
17
  def setup
18
18
  super
19
+ if Config.instance.wx_version_check('3.3.2') <= 0
20
+ # implement custom version of method because of unconventional
21
+ # (and problematic) return type
22
+ spec.ignore 'wxRibbonPage::GetIcon', ignore_doc: false
23
+ spec.add_extend_code 'wxRibbonPage', <<~__CODE
24
+ wxBitmap GetIcon()
25
+ {
26
+ return $self->GetIcon();
27
+ }
28
+ __CODE
29
+ end
19
30
  end
20
31
  end # class RibbonPage
21
32
 
@@ -102,7 +102,7 @@ module WXRuby3
102
102
  __HEREDOC
103
103
  spec.add_header_code <<~__HEREDOC
104
104
  // define the richtext buffer marker
105
- static void wxRuby_markRichTextBuffer()
105
+ static void wxRuby_markRichTextBuffer(const TGCTrackingValueMap& /*unused*/)
106
106
  {
107
107
  // mark any user installed drawing handlers
108
108
  wxList& handlers = wxRichTextBuffer::GetDrawingHandlers();
@@ -125,7 +125,10 @@ module WXRuby3
125
125
  }
126
126
  __HEREDOC
127
127
  # register the marker at module initialization
128
- spec.add_init_code 'wxRuby_AppendMarker(wxRuby_markRichTextBuffer);'
128
+ spec.add_init_code <<~__HEREDOC
129
+ const std::string WXRUBY_RICHTEXT_BUFFER = {"WXRUBY_RICHTEXT_BUFFER"};
130
+ wxRuby_RegisterTrackingCategory(WXRUBY_RICHTEXT_BUFFER, wxRuby_markRichTextBuffer);
131
+ __HEREDOC
129
132
  # for GetExtWildcard
130
133
  spec.map 'wxArrayInt* types' => 'Array,nil' do
131
134
 
@@ -0,0 +1,30 @@
1
+ # Copyright (c) 2023 M.J.N. Corino, The Netherlands
2
+ #
3
+ # This software is released under the MIT license.
4
+
5
+ ###
6
+ # wxRuby3 wxWidgets interface director
7
+ ###
8
+
9
+ module WXRuby3
10
+
11
+ class Director
12
+
13
+ class SharedEvtHandler < Director
14
+
15
+ def setup
16
+ super
17
+ spec.items.clear
18
+ spec.add_header_code <<~__HEREDOC
19
+ #include "wxruby-SharedEventHandler.h"
20
+ __HEREDOC
21
+ spec.add_init_code <<~__HEREDOC
22
+ wx_setup_WxRubySharedEvtHandler(mWxRT);
23
+ __HEREDOC
24
+ end
25
+
26
+ end
27
+
28
+ end
29
+
30
+ end
@@ -56,11 +56,10 @@ module WXRuby3
56
56
  {
57
57
  if ($self->Detach(szr))
58
58
  {
59
- VALUE rb_szr = SWIG_RubyInstanceFor(szr);
60
- if (rb_szr && !NIL_P(rb_szr))
59
+ if (!RB_NIL_P(SWIG_RubyInstanceFor(szr)))
61
60
  {
62
- // transfer ownership to Ruby
63
- RDATA(rb_szr)->dfree = GcSizerFreeFunc;
61
+ // have SWIG transfer ownership of Ruby value
62
+ SWIG_NewPointerObj(szr, SWIGTYPE_p_wxSizer, SWIG_POINTER_OWN);
64
63
  }
65
64
  return true;
66
65
  }
@@ -72,20 +71,12 @@ module WXRuby3
72
71
  wxSizerItem* itm = $self->GetItem(itm_nr);
73
72
  if (itm)
74
73
  {
75
- VALUE rb_szr = Qnil;
76
- if (itm->IsSizer())
77
- {
78
- rb_szr = SWIG_RubyInstanceFor(itm->GetSizer());
79
- }
80
- if ($self->Detach(itm_nr))
81
- {
82
- if (rb_szr && !NIL_P(rb_szr))
83
- {
84
- // transfer ownership to Ruby
85
- RDATA(rb_szr)->dfree = GcSizerFreeFunc;
86
- }
87
- return true;
74
+ if (itm->IsSizer() && !RB_NIL_P(SWIG_RubyInstanceFor(itm->GetSizer())))
75
+ {
76
+ // have SWIG transfer ownership of Ruby value
77
+ SWIG_NewPointerObj(itm->GetSizer(), SWIGTYPE_p_wxSizer, SWIG_POINTER_OWN);
88
78
  }
79
+ return $self->Detach(itm_nr);
89
80
  }
90
81
  return false;
91
82
  }
@@ -46,11 +46,10 @@ module WXRuby3
46
46
  {
47
47
  if ($self->IsSizer())
48
48
  {
49
- VALUE rb_szr = SWIG_RubyInstanceFor($self->GetSizer());
50
- if (rb_szr && !NIL_P(rb_szr))
49
+ if (!RB_NIL_P(SWIG_RubyInstanceFor($self->GetSizer())))
51
50
  {
52
- // transfer ownership to Ruby
53
- RDATA(rb_szr)->dfree = GcSizerFreeFunc;
51
+ // have SWIG transfer ownership of Ruby value
52
+ SWIG_NewPointerObj($self->GetSizer(), SWIGTYPE_p_wxSizer, SWIG_POINTER_OWN);
54
53
  }
55
54
  $self->DetachSizer();
56
55
  }
@@ -42,16 +42,16 @@ module WXRuby3
42
42
  # overridden in user subclasses of TaskBarIcon to provide the menu over the icon.
43
43
  # In the case of GetPopupMenu the menu will be used but not deleted so it can be stored in
44
44
  # a member variable and reused.
45
- # In the case of CreatePopupMenu the menu is disowned and deleted of use. The Wx::Menu Ruby
46
- # instance than needs to be protected from GC so the typemap stores the
47
- # object returned by the ruby method in an instance variable so it's
48
- # marked. It also handles the special case where +nil+ is returned, to
49
- # signal to Wx that no menu is to be shown.
45
+ # In the case of CreatePopupMenu the menu is disowned and deleted after use. The Wx::Menu Ruby
46
+ # instance than needs to be protected from GC so the typemap stores the object returned by the
47
+ # ruby method in an instance variable so it's marked as long as the TaskBarIcon exists.
48
+ # It also handles the special case where +nil+ is returned, to signal to Wx that no menu is to
49
+ # be shown.
50
50
  spec.map 'wxMenu *' do
51
51
  map_directorout code: <<~__CODE
52
52
  static const std::string create_popup_menu("CreatePopupMenu");
53
53
  bool disown = (std::string("$symname") == create_popup_menu);
54
- if (disown) rb_iv_set(swig_get_self(), "@__popmenu__", $1);
54
+ if (disown) rb_iv_set(swig_get_self(), "@__popupmenu__", $1);
55
55
  if (NIL_P($1))
56
56
  {
57
57
  $result = nullptr;
@@ -65,7 +65,7 @@ module WXRuby3
65
65
  Swig::DirectorTypeMismatchException::raise(swig_get_self(), "$symname", rb_eTypeError,
66
66
  "create_popup_menu must return a Wx::Menu, or nil");
67
67
  }
68
- $result = reinterpret_cast < wxMenu * > (ptr);
68
+ $result = static_cast <wxMenu *> (ptr);
69
69
  }
70
70
  __CODE
71
71
  end
@@ -0,0 +1,33 @@
1
+ # Copyright (c) 2023 M.J.N. Corino, The Netherlands
2
+ #
3
+ # This software is released under the MIT license.
4
+
5
+ ###
6
+ # wxRuby3 wxWidgets interface director
7
+ ###
8
+
9
+ require_relative './event'
10
+
11
+ module WXRuby3
12
+
13
+ class Director
14
+
15
+ class ThreadEvent < Event
16
+
17
+ def setup
18
+ super
19
+ spec.gc_as_marked # use marked so doc gen does not mark it as untracked (what it actually is)
20
+ spec.ignore 'wxThreadEvent::GetPayload',
21
+ 'wxThreadEvent::SetPayload',
22
+ 'wxThreadEvent::GetEventCategory'
23
+ spec.ignore 'wxThreadEvent::wxThreadEvent'
24
+ spec.regard 'wxThreadEvent::wxThreadEvent', regard_doc: false
25
+ spec.add_swig_code %Q{%constant wxEventType wxEVT_THREAD = wxEVT_THREAD;}
26
+ spec.do_not_generate(:variables, :defines, :enums, :functions)
27
+ end
28
+
29
+ end # class ThreadEvent
30
+
31
+ end # class Director
32
+
33
+ end # module WXRuby3
@@ -35,10 +35,18 @@ module WXRuby3
35
35
  }
36
36
  __HEREDOC
37
37
  spec.ignore %w{
38
- wxTopLevelWindow::SaveGeometry
39
- wxTopLevelWindow::RestoreToGeometry
40
- wxTopLevelWindow::GeometrySerializer
41
- }
38
+ wxTopLevelWindow::SaveGeometry
39
+ wxTopLevelWindow::RestoreToGeometry
40
+ }
41
+ if Config.instance.wx_version_check('3.3.3') < 0
42
+ spec.ignore %w{
43
+ wxTopLevelWindow::GeometrySerializer
44
+ }
45
+ else
46
+ spec.ignore %w{
47
+ wxTopLevelWindow::GeometryStore
48
+ }
49
+ end
42
50
  # #ignore_unless if wxRuby one day supports 'WXUNIVERSAL'
43
51
  spec.ignore %w{
44
52
  wxTopLevelWindow::IsUsingNativeDecorations
@@ -54,7 +54,9 @@ module WXRuby3
54
54
  VALUE self = const_cast<wxRubyValidator*> (this)->get_self();
55
55
  VALUE rc = wxRuby_Funcall(self, clone_id(), 0);
56
56
  void *ptr;
57
- int res = SWIG_ConvertPtr(rc, &ptr, SWIGTYPE_p_wxValidator, 0);
57
+ // disown the validator for this is a C++ return and when this is called by a window
58
+ // to set it's validator that window will manage the validator
59
+ int res = SWIG_ConvertPtr(rc, &ptr, SWIGTYPE_p_wxValidator, SWIG_POINTER_DISOWN);
58
60
  if (!SWIG_IsOK(res))
59
61
  {
60
62
  Swig::DirectorTypeMismatchException::raise(self, "clone", SWIG_ErrorType(SWIG_ArgError(res)), "in output value of type '""Wx::Validator *""'");