wxruby3 1.7.0 → 1.8.0

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 (220) 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/gen/affine_matrix2d.rb +2 -0
  30. data/lib/wx/doc/gen/art_provider.rb +12 -0
  31. data/lib/wx/doc/gen/aui/aui_notebook_event.rb +15 -15
  32. data/lib/wx/doc/gen/aui/aui_pane_info.rb +8 -8
  33. data/lib/wx/doc/gen/aui/aui_tool_bar_event.rb +5 -5
  34. data/lib/wx/doc/gen/book_ctrl_base.rb +2 -1
  35. data/lib/wx/doc/gen/calendar_event.rb +5 -5
  36. data/lib/wx/doc/gen/choicebook.rb +2 -2
  37. data/lib/wx/doc/gen/collapsible_pane.rb +1 -1
  38. data/lib/wx/doc/gen/colour_dialog.rb +1 -1
  39. data/lib/wx/doc/gen/colour_picker_event.rb +3 -3
  40. data/lib/wx/doc/gen/context_help_button.rb +0 -53
  41. data/lib/wx/doc/gen/core.rb +4 -4
  42. data/lib/wx/doc/gen/credential_entry_dialog.rb +2 -2
  43. data/lib/wx/doc/gen/date_event.rb +2 -2
  44. data/lib/wx/doc/gen/dial_up_event.rb +2 -2
  45. data/lib/wx/doc/gen/dir_filter_list_ctrl.rb +2 -2
  46. data/lib/wx/doc/gen/event.rb +58 -58
  47. data/lib/wx/doc/gen/ext_help_controller.rb +62 -16
  48. data/lib/wx/doc/gen/file_ctrl.rb +4 -4
  49. data/lib/wx/doc/gen/file_dir_picker_event.rb +2 -2
  50. data/lib/wx/doc/gen/file_system.rb +1 -1
  51. data/lib/wx/doc/gen/find_dialog_event.rb +5 -5
  52. data/lib/wx/doc/gen/font_picker_event.rb +1 -1
  53. data/lib/wx/doc/gen/grid/grid_ctrl.rb +67 -32
  54. data/lib/wx/doc/gen/header_ctrl_event.rb +13 -13
  55. data/lib/wx/doc/gen/help_controller.rb +45 -2
  56. data/lib/wx/doc/gen/html/html_help_controller.rb +74 -32
  57. data/lib/wx/doc/gen/html/html_help_window.rb +3 -3
  58. data/lib/wx/doc/gen/html/html_window.rb +4 -4
  59. data/lib/wx/doc/gen/hyperlink_ctrl.rb +1 -1
  60. data/lib/wx/doc/gen/list_ctrl.rb +22 -22
  61. data/lib/wx/doc/gen/listbook.rb +2 -2
  62. data/lib/wx/doc/gen/mb_conv.rb +10 -0
  63. data/lib/wx/doc/gen/media_event.rb +6 -6
  64. data/lib/wx/doc/gen/notebook.rb +2 -2
  65. data/lib/wx/doc/gen/pg/pg_validation_info.rb +14 -14
  66. data/lib/wx/doc/gen/pg/property_grid_interface.rb +2 -2
  67. data/lib/wx/doc/gen/rbn/ribbon_art_provider.rb +19 -9
  68. data/lib/wx/doc/gen/rbn/ribbon_button_bar.rb +2 -2
  69. data/lib/wx/doc/gen/rbn/ribbon_gallery.rb +3 -3
  70. data/lib/wx/doc/gen/rbn/ribbon_panel.rb +2 -2
  71. data/lib/wx/doc/gen/rbn/ribbon_tool_bar.rb +2 -2
  72. data/lib/wx/doc/gen/rt/event_list.rb +17 -0
  73. data/lib/wx/doc/gen/rt/shared_evt_handler.rb +14 -0
  74. data/lib/wx/doc/gen/rt/thread_event.rb +71 -0
  75. data/lib/wx/doc/gen/rtc/rich_text_ctrl.rb +19 -19
  76. data/lib/wx/doc/gen/sash_event.rb +2 -2
  77. data/lib/wx/doc/gen/sash_layout_window.rb +2 -2
  78. data/lib/wx/doc/gen/search_ctrl.rb +2 -2
  79. data/lib/wx/doc/gen/spin_ctrl.rb +2 -2
  80. data/lib/wx/doc/gen/splitter_window.rb +6 -6
  81. data/lib/wx/doc/gen/stc/styled_text_event.rb +34 -34
  82. data/lib/wx/doc/gen/task_bar_icon_event.rb +10 -10
  83. data/lib/wx/doc/gen/text_ctrl.rb +4 -4
  84. data/lib/wx/doc/gen/toggle_button.rb +1 -1
  85. data/lib/wx/doc/gen/toolbook.rb +2 -2
  86. data/lib/wx/doc/gen/top_level_window.rb +19 -0
  87. data/lib/wx/doc/gen/tree_ctrl.rb +21 -21
  88. data/lib/wx/doc/gen/treebook.rb +4 -4
  89. data/lib/wx/doc/gen/utils.rb +2 -2
  90. data/lib/wx/doc/gen/web/event_list.rb +95 -0
  91. data/lib/wx/doc/gen/web/web_view.rb +1136 -0
  92. data/lib/wx/doc/gen/web/web_view_event.rb +210 -0
  93. data/lib/wx/doc/gen/web/web_view_handler.rb +318 -0
  94. data/lib/wx/doc/gen/window.rb +1 -1
  95. data/lib/wx/doc/gen/wizard_event.rb +7 -7
  96. data/lib/wx/doc/html/html_help_controller.rb +23 -1
  97. data/lib/wx/doc/mbconv.rb +108 -0
  98. data/lib/wx/doc/rt/shared_event_handler.rb +49 -0
  99. data/lib/wx/doc/rt/thread_event.rb +28 -0
  100. data/lib/wx/doc/webview.rb +40 -0
  101. data/lib/wx/helpers.rb +1 -1
  102. data/lib/wx/html/htmlhelpcontroller.rb +10 -0
  103. data/lib/wx/keyword_defs.rb +11 -0
  104. data/lib/wx/rt/events/evt_list.rb +8 -0
  105. data/lib/wx/rt/require.rb +8 -0
  106. data/lib/wx/rt/thread_event.rb +14 -0
  107. data/lib/wx/rt.rb +16 -0
  108. data/lib/wx/version.rb +1 -1
  109. data/lib/wx/web/events/evt_list.rb +74 -0
  110. data/lib/wx/web/require.rb +8 -0
  111. data/lib/wx/web/webview.rb +106 -0
  112. data/lib/wx/web.rb +17 -0
  113. data/lib/wx/wxruby/cmd/setup.rb +15 -0
  114. data/lib/wx.rb +2 -0
  115. data/rakelib/configure.rb +24 -0
  116. data/rakelib/gem.rb +3 -2
  117. data/rakelib/install.rb +54 -27
  118. data/rakelib/lib/config/macosx.rb +7 -5
  119. data/rakelib/lib/config/mingw.rb +66 -5
  120. data/rakelib/lib/config/pkgman/mingw.rb +1 -1
  121. data/rakelib/lib/config/unixish.rb +4 -2
  122. data/rakelib/lib/config.rb +37 -3
  123. data/rakelib/lib/core/include/client_data.inc +38 -17
  124. data/rakelib/lib/core/include/funcall.inc +1 -1
  125. data/rakelib/lib/core/include/swigdirector.inc +3 -3
  126. data/rakelib/lib/core/include/swigrubyrun.inc +14 -26
  127. data/rakelib/lib/core/package.rb +0 -2
  128. data/rakelib/lib/director/app.rb +1 -8
  129. data/rakelib/lib/director/art_provider.rb +7 -3
  130. data/rakelib/lib/director/comboctrl.rb +0 -7
  131. data/rakelib/lib/director/context_help_button.rb +35 -2
  132. data/rakelib/lib/director/event_handler.rb +32 -28
  133. data/rakelib/lib/director/fs_file.rb +15 -10
  134. data/rakelib/lib/director/functions.rb +8 -0
  135. data/rakelib/lib/director/grid_cell_attr.rb +1 -3
  136. data/rakelib/lib/director/grid_cell_editor.rb +14 -12
  137. data/rakelib/lib/director/grid_cell_renderer.rb +11 -8
  138. data/rakelib/lib/director/grid_ctrl.rb +140 -121
  139. data/rakelib/lib/director/help_controller.rb +70 -2
  140. data/rakelib/lib/director/mb_conv.rb +30 -0
  141. data/rakelib/lib/director/menu.rb +92 -42
  142. data/rakelib/lib/director/menu_bar.rb +84 -45
  143. data/rakelib/lib/director/menu_item.rb +2 -2
  144. data/rakelib/lib/director/persistence_manager.rb +3 -2
  145. data/rakelib/lib/director/preview_frame.rb +2 -2
  146. data/rakelib/lib/director/richtext_buffer.rb +5 -2
  147. data/rakelib/lib/director/shared_evt_handler.rb +30 -0
  148. data/rakelib/lib/director/sizer.rb +8 -17
  149. data/rakelib/lib/director/sizer_item.rb +3 -4
  150. data/rakelib/lib/director/task_bar_icon.rb +7 -7
  151. data/rakelib/lib/director/thread_event.rb +33 -0
  152. data/rakelib/lib/director/validator.rb +3 -1
  153. data/rakelib/lib/director/variant.rb +16 -12
  154. data/rakelib/lib/director/webview.rb +166 -0
  155. data/rakelib/lib/director/webview_event.rb +37 -0
  156. data/rakelib/lib/director/webview_handler.rb +63 -0
  157. data/rakelib/lib/generate/doc/thread_event.yaml +20 -0
  158. data/rakelib/lib/generate/doc/web_view.yaml +135 -0
  159. data/rakelib/lib/generate/doc/web_view_event.yaml +38 -0
  160. data/rakelib/lib/generate/doc/web_view_handler.yaml +58 -0
  161. data/rakelib/lib/specs/interfaces.rb +12 -0
  162. data/rakelib/lib/typemap/common.rb +34 -1
  163. data/rakelib/lib/typemap/mb_conv.rb +58 -0
  164. data/rakelib/prepost.rake +23 -31
  165. data/rakelib/prepost.rb +20 -0
  166. data/samples/event/threaded.rb +295 -42
  167. data/samples/event/tn_threaded.png +0 -0
  168. data/samples/help/doc/back.gif +0 -0
  169. data/samples/help/doc/contents.gif +0 -0
  170. data/samples/help/doc/cshelp.txt +9 -0
  171. data/samples/help/doc/doc.chm +0 -0
  172. data/samples/help/doc/doc.cnt +8 -0
  173. data/samples/help/doc/doc.h +7 -0
  174. data/samples/help/doc/doc.hhc +40 -0
  175. data/samples/help/doc/doc.hhk +31 -0
  176. data/samples/help/doc/doc.hhp +33 -0
  177. data/samples/help/doc/doc.hpj +21 -0
  178. data/samples/help/doc/doc.htm +27 -0
  179. data/samples/help/doc/doc1.htm +24 -0
  180. data/samples/help/doc/doc2.htm +12 -0
  181. data/samples/help/doc/doc3.htm +12 -0
  182. data/samples/help/doc/doc4.htm +12 -0
  183. data/samples/help/doc/doc5.htm +14 -0
  184. data/samples/help/doc/forward.gif +0 -0
  185. data/samples/help/doc/up.gif +0 -0
  186. data/samples/help/doc.chm +0 -0
  187. data/samples/help/doc.chw +0 -0
  188. data/samples/help/doc.zip +0 -0
  189. data/samples/help/help.rb +352 -0
  190. data/samples/help/tn_help.png +0 -0
  191. data/samples/webview/handler_advanced.html +55 -0
  192. data/samples/webview/tn_webview.png +0 -0
  193. data/samples/webview/webview.rb +1264 -0
  194. data/tests/assets/handler_advanced.html +55 -0
  195. data/tests/assets/test.css +1 -0
  196. data/tests/assets/test.html +9 -0
  197. data/tests/assets/test.zip +0 -0
  198. data/tests/lib/text_entry_tests.rb +2 -2
  199. data/tests/lib/wxapp_runner.rb +40 -0
  200. data/tests/lib/wxframe_runner.rb +17 -2
  201. data/tests/test_art.rb +8 -8
  202. data/tests/test_clipboard.rb +4 -4
  203. data/tests/test_config.rb +6 -6
  204. data/tests/test_exceptions.rb +8 -6
  205. data/tests/test_ext_controls.rb +3 -3
  206. data/tests/test_file_dialog.rb +5 -5
  207. data/tests/test_font.rb +7 -7
  208. data/tests/test_grid_ctrl.rb +133 -0
  209. data/tests/test_help.rb +88 -0
  210. data/tests/test_intl.rb +1 -1
  211. data/tests/test_media_ctrl.rb +14 -6
  212. data/tests/test_menu.rb +94 -86
  213. data/tests/test_persistence.rb +1 -1
  214. data/tests/test_proof_check.rb +5 -5
  215. data/tests/test_propgrid.rb +1 -1
  216. data/tests/test_shared_event_handler.rb +141 -0
  217. data/tests/test_std_controls.rb +5 -5
  218. data/tests/test_webview.rb +492 -0
  219. data/tests/test_window.rb +3 -3
  220. metadata +78 -2
@@ -0,0 +1,431 @@
1
+ //Copyright (c) 2023 M.J.N. Corino, The Netherlands
2
+ //
3
+ // This software is released under the MIT license.
4
+
5
+ #ifndef _WX_SHAREDPTR_H_
6
+ #define _WX_SHAREDPTR_H_
7
+ // wxSharedPtr stub definition to appease older versions of SWIG
8
+ template <class T>
9
+ class wxSharedPtr;
10
+ #endif
11
+
12
+ // Main user macro for defining shared_ptr typemaps for both const and non-const pointer types
13
+ %define %wx_shared_ptr(TYPE...)
14
+ %feature("smartptr", noblock=1) TYPE { wxSharedPtr< TYPE > }
15
+ SWIG_WXSHARED_PTR_TYPEMAPS(, TYPE)
16
+ SWIG_WXSHARED_PTR_TYPEMAPS(const, TYPE)
17
+ %enddef
18
+
19
+ %{
20
+ #ifdef __cplusplus
21
+ #ifndef SWIG_STD_MOVE
22
+ #if __cplusplus >=201103L
23
+ # define SWIG_STD_MOVE(OBJ) std::move(OBJ)
24
+ #else
25
+ # define SWIG_STD_MOVE(OBJ) OBJ
26
+ #endif
27
+ #endif
28
+ #endif
29
+ %}
30
+
31
+ %{
32
+ // Set WXSHARED_PTR_DISOWN to $disown if required, for example
33
+ // #define WXSHARED_PTR_DISOWN $disown
34
+ #if !defined(WXSHARED_PTR_DISOWN)
35
+ #define WXSHARED_PTR_DISOWN 0
36
+ #endif
37
+ %}
38
+
39
+ // Macro implementing all the customisations for handling the smart pointer
40
+ %define SWIG_WXSHARED_PTR_TYPEMAPS(CONST, TYPE...)
41
+
42
+ // %naturalvar is as documented for member variables
43
+ %naturalvar TYPE;
44
+ %naturalvar wxSharedPtr< CONST TYPE >;
45
+
46
+ // destructor wrapper customisation
47
+ %feature("unref") TYPE
48
+ %{(void)arg1;
49
+ delete reinterpret_cast< wxSharedPtr< TYPE > * >(self);%}
50
+
51
+ // Typemap customisations...
52
+
53
+ // plain value
54
+ %typemap(in) CONST TYPE (void *argp, int res = 0) {
55
+ swig_ruby_owntype newmem = {0, 0};
56
+ res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(wxSharedPtr< TYPE > *), %convertptr_flags, &newmem);
57
+ if (!SWIG_IsOK(res)) {
58
+ %argument_fail(res, "$type", $symname, $argnum);
59
+ }
60
+ if (!argp) {
61
+ %argument_nullref("$type", $symname, $argnum);
62
+ } else {
63
+ $1 = *(%reinterpret_cast(argp, wxSharedPtr< CONST TYPE > *)->get());
64
+ if (newmem.own & SWIG_CAST_NEW_MEMORY) delete %reinterpret_cast(argp, wxSharedPtr< CONST TYPE > *);
65
+ }
66
+ }
67
+ %typemap(out) CONST TYPE {
68
+ wxSharedPtr< CONST TYPE > *smartresult = new wxSharedPtr< CONST TYPE >(new $1_ltype($1));
69
+ %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(wxSharedPtr< TYPE > *), SWIG_POINTER_OWN));
70
+ }
71
+
72
+ %typemap(varin) CONST TYPE {
73
+ void *argp = 0;
74
+ swig_ruby_owntype newmem = {0, 0};
75
+ int res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(wxSharedPtr< TYPE > *), %convertptr_flags, &newmem);
76
+ if (!SWIG_IsOK(res)) {
77
+ %variable_fail(res, "$type", "$name");
78
+ }
79
+ if (!argp) {
80
+ %variable_nullref("$type", "$name");
81
+ } else {
82
+ $1 = *(%reinterpret_cast(argp, wxSharedPtr< CONST TYPE > *)->get());
83
+ if (newmem.own & SWIG_CAST_NEW_MEMORY) delete %reinterpret_cast(argp, wxSharedPtr< CONST TYPE > *);
84
+ }
85
+ }
86
+ %typemap(varout) CONST TYPE {
87
+ wxSharedPtr< CONST TYPE > *smartresult = new wxSharedPtr< CONST TYPE >(new $1_ltype($1));
88
+ %set_varoutput(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(wxSharedPtr< TYPE > *), SWIG_POINTER_OWN));
89
+ }
90
+
91
+ %typemap(directorin,noblock=1) CONST TYPE (wxSharedPtr< CONST TYPE > *smartarg = 0) %{
92
+ smartarg = new wxSharedPtr< CONST TYPE >(new $1_ltype(SWIG_STD_MOVE($1)));
93
+ $input = SWIG_NewPointerObj(%as_voidptr(smartarg), $descriptor(wxSharedPtr< TYPE > *), SWIG_POINTER_OWN | %newpointer_flags);
94
+ %}
95
+ %typemap(directorout,noblock=1) CONST TYPE (void *swig_argp, int swig_res = 0) {
96
+ swig_ruby_owntype newmem = {0, 0};
97
+ swig_res = SWIG_ConvertPtrAndOwn($input, &swig_argp, $descriptor(wxSharedPtr< TYPE > *), %convertptr_flags, &newmem);
98
+ if (!SWIG_IsOK(swig_res)) {
99
+ %dirout_fail(swig_res, "$type");
100
+ }
101
+ if (!swig_argp) {
102
+ %dirout_nullref("$type");
103
+ } else {
104
+ $result = *(%reinterpret_cast(swig_argp, wxSharedPtr< CONST TYPE > *)->get());
105
+ if (newmem.own & SWIG_CAST_NEW_MEMORY) delete %reinterpret_cast(swig_argp, wxSharedPtr< CONST TYPE > *);
106
+ }
107
+ }
108
+
109
+ // plain pointer
110
+ // Note: $disown not implemented by default as it will lead to a memory leak of the shared_ptr instance
111
+ %typemap(in) CONST TYPE * (void *argp = 0, int res = 0, wxSharedPtr< CONST TYPE > tempshared, wxSharedPtr< CONST TYPE > *smartarg = 0) {
112
+ swig_ruby_owntype newmem = {0, 0};
113
+ res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(wxSharedPtr< TYPE > *), WXSHARED_PTR_DISOWN | %convertptr_flags, &newmem);
114
+ if (!SWIG_IsOK(res)) {
115
+ %argument_fail(res, "$type", $symname, $argnum);
116
+ }
117
+ if (newmem.own & SWIG_CAST_NEW_MEMORY) {
118
+ tempshared = *%reinterpret_cast(argp, wxSharedPtr< CONST TYPE > *);
119
+ delete %reinterpret_cast(argp, wxSharedPtr< CONST TYPE > *);
120
+ $1 = %const_cast(tempshared.get(), $1_ltype);
121
+ } else {
122
+ smartarg = %reinterpret_cast(argp, wxSharedPtr< CONST TYPE > *);
123
+ $1 = %const_cast((smartarg ? smartarg->get() : 0), $1_ltype);
124
+ }
125
+ }
126
+
127
+ %typemap(out, fragment="SWIG_null_deleter") CONST TYPE * {
128
+ wxSharedPtr< CONST TYPE > *smartresult = $1 ? new wxSharedPtr< CONST TYPE >($1 SWIG_NO_NULL_DELETER_$owner) : 0;
129
+ %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(wxSharedPtr< TYPE > *), $owner | SWIG_POINTER_OWN));
130
+ }
131
+
132
+ %typemap(varin) CONST TYPE * {
133
+ void *argp = 0;
134
+ swig_ruby_owntype newmem = {0, 0};
135
+ int res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(wxSharedPtr< TYPE > *), %convertptr_flags, &newmem);
136
+ if (!SWIG_IsOK(res)) {
137
+ %variable_fail(res, "$type", "$name");
138
+ }
139
+ wxSharedPtr< CONST TYPE > tempshared;
140
+ wxSharedPtr< CONST TYPE > *smartarg = 0;
141
+ if (newmem.own & SWIG_CAST_NEW_MEMORY) {
142
+ tempshared = *%reinterpret_cast(argp, wxSharedPtr< CONST TYPE > *);
143
+ delete %reinterpret_cast(argp, wxSharedPtr< CONST TYPE > *);
144
+ $1 = %const_cast(tempshared.get(), $1_ltype);
145
+ } else {
146
+ smartarg = %reinterpret_cast(argp, wxSharedPtr< CONST TYPE > *);
147
+ $1 = %const_cast((smartarg ? smartarg->get() : 0), $1_ltype);
148
+ }
149
+ }
150
+ %typemap(varout, fragment="SWIG_null_deleter") CONST TYPE * {
151
+ wxSharedPtr< CONST TYPE > *smartresult = $1 ? new wxSharedPtr< CONST TYPE >($1 SWIG_NO_NULL_DELETER_0) : 0;
152
+ %set_varoutput(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(wxSharedPtr< TYPE > *), SWIG_POINTER_OWN));
153
+ }
154
+
155
+ %typemap(directorin,noblock=1, fragment="SWIG_null_deleter") CONST TYPE * (wxSharedPtr< CONST TYPE > *smartarg = 0) %{
156
+ smartarg = $1 ? new wxSharedPtr< CONST TYPE >($1 SWIG_NO_NULL_DELETER_0) : 0;
157
+ $input = SWIG_NewPointerObj(%as_voidptr(smartarg), $descriptor(wxSharedPtr< TYPE > *), SWIG_POINTER_OWN | %newpointer_flags);
158
+ %}
159
+ %typemap(directorout,noblock=1) CONST TYPE * %{
160
+ #error "directorout typemap for plain pointer not implemented"
161
+ %}
162
+
163
+ // plain reference
164
+ %typemap(in) CONST TYPE & (void *argp = 0, int res = 0, wxSharedPtr< CONST TYPE > tempshared) {
165
+ swig_ruby_owntype newmem = {0, 0};
166
+ res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(wxSharedPtr< TYPE > *), %convertptr_flags, &newmem);
167
+ if (!SWIG_IsOK(res)) {
168
+ %argument_fail(res, "$type", $symname, $argnum);
169
+ }
170
+ if (!argp) { %argument_nullref("$type", $symname, $argnum); }
171
+ if (newmem.own & SWIG_CAST_NEW_MEMORY) {
172
+ tempshared = *%reinterpret_cast(argp, wxSharedPtr< CONST TYPE > *);
173
+ delete %reinterpret_cast(argp, wxSharedPtr< CONST TYPE > *);
174
+ $1 = %const_cast(tempshared.get(), $1_ltype);
175
+ } else {
176
+ $1 = %const_cast(%reinterpret_cast(argp, wxSharedPtr< CONST TYPE > *)->get(), $1_ltype);
177
+ }
178
+ }
179
+ %typemap(out, fragment="SWIG_null_deleter") CONST TYPE & {
180
+ wxSharedPtr< CONST TYPE > *smartresult = new wxSharedPtr< CONST TYPE >($1 SWIG_NO_NULL_DELETER_$owner);
181
+ %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(wxSharedPtr< TYPE > *), SWIG_POINTER_OWN));
182
+ }
183
+
184
+ %typemap(varin) CONST TYPE & {
185
+ void *argp = 0;
186
+ swig_ruby_owntype newmem = {0, 0};
187
+ int res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(wxSharedPtr< TYPE > *), %convertptr_flags, &newmem);
188
+ if (!SWIG_IsOK(res)) {
189
+ %variable_fail(res, "$type", "$name");
190
+ }
191
+ wxSharedPtr< CONST TYPE > tempshared;
192
+ if (!argp) {
193
+ %variable_nullref("$type", "$name");
194
+ }
195
+ if (newmem.own & SWIG_CAST_NEW_MEMORY) {
196
+ tempshared = *%reinterpret_cast(argp, wxSharedPtr< CONST TYPE > *);
197
+ delete %reinterpret_cast(argp, wxSharedPtr< CONST TYPE > *);
198
+ $1 = *%const_cast(tempshared.get(), $1_ltype);
199
+ } else {
200
+ $1 = *%const_cast(%reinterpret_cast(argp, wxSharedPtr< CONST TYPE > *)->get(), $1_ltype);
201
+ }
202
+ }
203
+ %typemap(varout, fragment="SWIG_null_deleter") CONST TYPE & {
204
+ wxSharedPtr< CONST TYPE > *smartresult = new wxSharedPtr< CONST TYPE >(&$1 SWIG_NO_NULL_DELETER_0);
205
+ %set_varoutput(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(wxSharedPtr< TYPE > *), SWIG_POINTER_OWN));
206
+ }
207
+
208
+ %typemap(directorin,noblock=1, fragment="SWIG_null_deleter") CONST TYPE & (wxSharedPtr< CONST TYPE > *smartarg = 0) %{
209
+ smartarg = new wxSharedPtr< CONST TYPE >(&$1 SWIG_NO_NULL_DELETER_0);
210
+ $input = SWIG_NewPointerObj(%as_voidptr(smartarg), $descriptor(wxSharedPtr< TYPE > *), SWIG_POINTER_OWN | %newpointer_flags);
211
+ %}
212
+ %typemap(directorout,noblock=1) CONST TYPE & %{
213
+ #error "directorout typemap for plain reference not implemented"
214
+ %}
215
+
216
+ // plain pointer by reference
217
+ // Note: $disown not implemented by default as it will lead to a memory leak of the shared_ptr instance
218
+ %typemap(in) TYPE *CONST& (void *argp = 0, int res = 0, $*1_ltype temp = 0, wxSharedPtr< CONST TYPE > tempshared) {
219
+ swig_ruby_owntype newmem = {0, 0};
220
+ res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(wxSharedPtr< TYPE > *), WXSHARED_PTR_DISOWN | %convertptr_flags, &newmem);
221
+ if (!SWIG_IsOK(res)) {
222
+ %argument_fail(res, "$type", $symname, $argnum);
223
+ }
224
+ if (newmem.own & SWIG_CAST_NEW_MEMORY) {
225
+ tempshared = *%reinterpret_cast(argp, wxSharedPtr< CONST TYPE > *);
226
+ delete %reinterpret_cast(argp, wxSharedPtr< CONST TYPE > *);
227
+ temp = %const_cast(tempshared.get(), $*1_ltype);
228
+ } else {
229
+ temp = %const_cast(%reinterpret_cast(argp, wxSharedPtr< CONST TYPE > *)->get(), $*1_ltype);
230
+ }
231
+ $1 = &temp;
232
+ }
233
+ %typemap(out, fragment="SWIG_null_deleter") TYPE *CONST& {
234
+ wxSharedPtr< CONST TYPE > *smartresult = *$1 ? new wxSharedPtr< CONST TYPE >(*$1 SWIG_NO_NULL_DELETER_$owner) : 0;
235
+ %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(wxSharedPtr< TYPE > *), SWIG_POINTER_OWN));
236
+ }
237
+
238
+ %typemap(varin) TYPE *CONST& %{
239
+ #error "varin typemap not implemented"
240
+ %}
241
+ %typemap(varout) TYPE *CONST& %{
242
+ #error "varout typemap not implemented"
243
+ %}
244
+
245
+ %typemap(directorin,noblock=1, fragment="SWIG_null_deleter") TYPE *CONST& (wxSharedPtr< CONST TYPE > *smartarg = 0) %{
246
+ smartarg = $1 ? new wxSharedPtr< CONST TYPE >($1 SWIG_NO_NULL_DELETER_0) : 0;
247
+ $input = SWIG_NewPointerObj(%as_voidptr(smartarg), $descriptor(wxSharedPtr< TYPE > *), SWIG_POINTER_OWN | %newpointer_flags);
248
+ %}
249
+ %typemap(directorout,noblock=1) TYPE *CONST& %{
250
+ #error "directorout typemap for plain pointer by reference not implemented"
251
+ %}
252
+
253
+ // shared_ptr by value
254
+ %typemap(in) wxSharedPtr< CONST TYPE > (void *argp, int res = 0) {
255
+ swig_ruby_owntype newmem = {0, 0};
256
+ res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(wxSharedPtr< TYPE > *), %convertptr_flags, &newmem);
257
+ if (!SWIG_IsOK(res)) {
258
+ %argument_fail(res, "$type", $symname, $argnum);
259
+ }
260
+ if (argp) $1 = *(%reinterpret_cast(argp, $&ltype));
261
+ if (newmem.own & SWIG_CAST_NEW_MEMORY) delete %reinterpret_cast(argp, $&ltype);
262
+ }
263
+ %typemap(out) wxSharedPtr< CONST TYPE > {
264
+ wxSharedPtr< CONST TYPE > *smartresult = $1 ? new wxSharedPtr< CONST TYPE >($1) : 0;
265
+ %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(wxSharedPtr< TYPE > *), SWIG_POINTER_OWN));
266
+ }
267
+
268
+ %typemap(varin) wxSharedPtr< CONST TYPE > {
269
+ swig_ruby_owntype newmem = {0, 0};
270
+ void *argp = 0;
271
+ int res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(wxSharedPtr< TYPE > *), %convertptr_flags, &newmem);
272
+ if (!SWIG_IsOK(res)) {
273
+ %variable_fail(res, "$type", "$name");
274
+ }
275
+ $1 = argp ? *(%reinterpret_cast(argp, $&ltype)) : wxSharedPtr< TYPE >();
276
+ if (newmem.own & SWIG_CAST_NEW_MEMORY) delete %reinterpret_cast(argp, $&ltype);
277
+ }
278
+ %typemap(varout) wxSharedPtr< CONST TYPE > {
279
+ wxSharedPtr< CONST TYPE > *smartresult = $1 ? new wxSharedPtr< CONST TYPE >($1) : 0;
280
+ %set_varoutput(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(wxSharedPtr< TYPE > *), SWIG_POINTER_OWN));
281
+ }
282
+
283
+ %typemap(directorin,noblock=1) wxSharedPtr< CONST TYPE > (wxSharedPtr< CONST TYPE > *smartarg = 0) %{
284
+ smartarg = $1 ? new wxSharedPtr< CONST TYPE >($1) : 0;
285
+ $input = SWIG_NewPointerObj(%as_voidptr(smartarg), $descriptor(wxSharedPtr< TYPE > *), SWIG_POINTER_OWN | %newpointer_flags);
286
+ %}
287
+ %typemap(directorout,noblock=1) wxSharedPtr< CONST TYPE > (void *swig_argp, int swig_res = 0) {
288
+ swig_ruby_owntype newmem = {0, 0};
289
+ swig_res = SWIG_ConvertPtrAndOwn($input, &swig_argp, $descriptor(wxSharedPtr< TYPE > *), %convertptr_flags, &newmem);
290
+ if (!SWIG_IsOK(swig_res)) {
291
+ %dirout_fail(swig_res, "$type");
292
+ }
293
+ if (swig_argp) {
294
+ $result = *(%reinterpret_cast(swig_argp, $&ltype));
295
+ if (newmem.own & SWIG_CAST_NEW_MEMORY) delete %reinterpret_cast(swig_argp, $&ltype);
296
+ }
297
+ }
298
+
299
+ // shared_ptr by reference
300
+ %typemap(in) wxSharedPtr< CONST TYPE > & (void *argp, int res = 0, $*1_ltype tempshared) {
301
+ swig_ruby_owntype newmem = {0, 0};
302
+ res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(wxSharedPtr< TYPE > *), %convertptr_flags, &newmem);
303
+ if (!SWIG_IsOK(res)) {
304
+ %argument_fail(res, "$type", $symname, $argnum);
305
+ }
306
+ if (newmem.own & SWIG_CAST_NEW_MEMORY) {
307
+ if (argp) tempshared = *%reinterpret_cast(argp, $ltype);
308
+ delete %reinterpret_cast(argp, $ltype);
309
+ $1 = &tempshared;
310
+ } else {
311
+ $1 = (argp) ? %reinterpret_cast(argp, $ltype) : &tempshared;
312
+ }
313
+ }
314
+ %typemap(out) wxSharedPtr< CONST TYPE > & {
315
+ wxSharedPtr< CONST TYPE > *smartresult = *$1 ? new wxSharedPtr< CONST TYPE >(*$1) : 0;
316
+ %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(wxSharedPtr< TYPE > *), SWIG_POINTER_OWN));
317
+ }
318
+
319
+ %typemap(varin) wxSharedPtr< CONST TYPE > & %{
320
+ #error "varin typemap not implemented"
321
+ %}
322
+ %typemap(varout) wxSharedPtr< CONST TYPE > & %{
323
+ #error "varout typemap not implemented"
324
+ %}
325
+
326
+ %typemap(directorin,noblock=1) wxSharedPtr< CONST TYPE > & (wxSharedPtr< CONST TYPE > *smartarg = 0) %{
327
+ smartarg = $1 ? new wxSharedPtr< CONST TYPE >($1) : 0;
328
+ $input = SWIG_NewPointerObj(%as_voidptr(smartarg), $descriptor(wxSharedPtr< TYPE > *), SWIG_POINTER_OWN | %newpointer_flags);
329
+ %}
330
+ %typemap(directorout,noblock=1) wxSharedPtr< CONST TYPE > & %{
331
+ #error "directorout typemap for shared_ptr ref not implemented"
332
+ %}
333
+
334
+ // shared_ptr by pointer
335
+ %typemap(in) wxSharedPtr< CONST TYPE > * (void *argp, int res = 0, $*1_ltype tempshared) {
336
+ swig_ruby_owntype newmem = {0, 0};
337
+ res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(wxSharedPtr< TYPE > *), %convertptr_flags, &newmem);
338
+ if (!SWIG_IsOK(res)) {
339
+ %argument_fail(res, "$type", $symname, $argnum);
340
+ }
341
+ if (newmem.own & SWIG_CAST_NEW_MEMORY) {
342
+ if (argp) tempshared = *%reinterpret_cast(argp, $ltype);
343
+ delete %reinterpret_cast(argp, $ltype);
344
+ $1 = &tempshared;
345
+ } else {
346
+ $1 = (argp) ? %reinterpret_cast(argp, $ltype) : &tempshared;
347
+ }
348
+ }
349
+ %typemap(out) wxSharedPtr< CONST TYPE > * {
350
+ wxSharedPtr< CONST TYPE > *smartresult = ($1 && *$1) ? new wxSharedPtr< CONST TYPE >(*$1) : 0;
351
+ %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(wxSharedPtr< TYPE > *), SWIG_POINTER_OWN));
352
+ if ($owner) delete $1;
353
+ }
354
+
355
+ %typemap(varin) wxSharedPtr< CONST TYPE > * %{
356
+ #error "varin typemap not implemented"
357
+ %}
358
+ %typemap(varout) wxSharedPtr< CONST TYPE > * %{
359
+ #error "varout typemap not implemented"
360
+ %}
361
+
362
+ %typemap(directorin,noblock=1) wxSharedPtr< CONST TYPE > * (wxSharedPtr< CONST TYPE > *smartarg = 0) %{
363
+ smartarg = ($1 && *$1) ? new wxSharedPtr< CONST TYPE >(*$1) : 0;
364
+ $input = SWIG_NewPointerObj(%as_voidptr(smartarg), $descriptor(wxSharedPtr< TYPE > *), SWIG_POINTER_OWN | %newpointer_flags);
365
+ %}
366
+ %typemap(directorout,noblock=1) wxSharedPtr< CONST TYPE > * %{
367
+ #error "directorout typemap for pointer to shared_ptr not implemented"
368
+ %}
369
+
370
+ // shared_ptr by pointer reference
371
+ %typemap(in) wxSharedPtr< CONST TYPE > *& (void *argp, int res = 0, wxSharedPtr< CONST TYPE > tempshared, $*1_ltype temp = 0) {
372
+ swig_ruby_owntype newmem = {0, 0};
373
+ res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(wxSharedPtr< TYPE > *), %convertptr_flags, &newmem);
374
+ if (!SWIG_IsOK(res)) {
375
+ %argument_fail(res, "$type", $symname, $argnum);
376
+ }
377
+ if (argp) tempshared = *%reinterpret_cast(argp, $*ltype);
378
+ if (newmem.own & SWIG_CAST_NEW_MEMORY) delete %reinterpret_cast(argp, $*ltype);
379
+ temp = &tempshared;
380
+ $1 = &temp;
381
+ }
382
+ %typemap(out) wxSharedPtr< CONST TYPE > *& {
383
+ wxSharedPtr< CONST TYPE > *smartresult = (*$1 && **$1) ? new wxSharedPtr< CONST TYPE >(**$1) : 0;
384
+ %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(wxSharedPtr< TYPE > *), SWIG_POINTER_OWN));
385
+ }
386
+
387
+ %typemap(varin) wxSharedPtr< CONST TYPE > *& %{
388
+ #error "varin typemap not implemented"
389
+ %}
390
+ %typemap(varout) wxSharedPtr< CONST TYPE > *& %{
391
+ #error "varout typemap not implemented"
392
+ %}
393
+
394
+ %typemap(directorin,noblock=1) wxSharedPtr< CONST TYPE > *& (wxSharedPtr< CONST TYPE > *smartarg = 0) %{
395
+ smartarg = ($1 && *$1) ? new wxSharedPtr< CONST TYPE >(*$1) : 0;
396
+ $input = SWIG_NewPointerObj(%as_voidptr(smartarg), $descriptor(wxSharedPtr< TYPE > *), SWIG_POINTER_OWN | %newpointer_flags);
397
+ %}
398
+ %typemap(directorout,noblock=1) wxSharedPtr< CONST TYPE > *& %{
399
+ #error "directorout typemap for pointer ref to shared_ptr not implemented"
400
+ %}
401
+
402
+ // Typecheck typemaps
403
+ // Note: SWIG_ConvertPtr with void ** parameter set to 0 instead of using SWIG_ConvertPtrAndOwn, so that the casting
404
+ // function is not called thereby avoiding a possible smart pointer copy constructor call when casting up the inheritance chain.
405
+ %typemap(typecheck, precedence=SWIG_TYPECHECK_POINTER, equivalent="TYPE *", noblock=1)
406
+ TYPE CONST,
407
+ TYPE CONST &,
408
+ TYPE CONST *,
409
+ TYPE *CONST&,
410
+ wxSharedPtr< CONST TYPE >,
411
+ wxSharedPtr< CONST TYPE > &,
412
+ wxSharedPtr< CONST TYPE > *,
413
+ wxSharedPtr< CONST TYPE > *& {
414
+ int res = SWIG_ConvertPtr($input, 0, $descriptor(wxSharedPtr< TYPE > *), 0);
415
+ $1 = SWIG_CheckState(res);
416
+ }
417
+
418
+
419
+ // various missing typemaps - If ever used (unlikely) ensure compilation error rather than runtime bug
420
+ %typemap(in) CONST TYPE[], CONST TYPE[ANY], CONST TYPE (CLASS::*) %{
421
+ #error "typemaps for $1_type not available"
422
+ %}
423
+ %typemap(out) CONST TYPE[], CONST TYPE[ANY], CONST TYPE (CLASS::*) %{
424
+ #error "typemaps for $1_type not available"
425
+ %}
426
+
427
+
428
+ %template() wxSharedPtr< CONST TYPE >;
429
+
430
+
431
+ %enddef
@@ -17,30 +17,16 @@
17
17
 
18
18
  %{
19
19
  WXRUBY_TRACE_GUARD(WxRubyTraceMarkSizer, "GC_MARK_SIZER")
20
- WXRUBY_TRACE_GUARD(WxRubyTraceFreeSizer, "GC_FREE_SIZER")
21
- WXRUBY_TRACE_GUARD(WxRubyTraceMarkMenubar, "GC_MARK_MENUBAR")
22
- WXRUBY_TRACE_GUARD(WxRubyTraceMarkMenu, "GC_MARK_MENU")
23
20
  WXRUBY_TRACE_GUARD(WxRubyTraceMarkWindow, "GC_MARK_WINDOW")
24
21
  WXRUBY_TRACE_GUARD(WxRubyTraceFreeWindow, "GC_FREE_WINDOW")
25
- WXRUBY_TRACE_GUARD(WxRubyTraceMarkFrame, "GC_MARK_FRAME")
26
- WXRUBY_TRACE_GUARD(WxRubyTraceFreeNull, "GC_FREE_NULL")
27
22
  WXRUBY_TRACE_GUARD(WxRubyTraceFreeRefcounted, "GC_FREE_REFCOUNT")
28
23
 
29
-
30
- // Code to be run when the ruby object is swept by GC - this only
31
- // unlinks the C++ object from the ruby VALUE but doesn't delete
32
- // it because it is still needed and will be managed by WxWidgets.
33
- WXRUBY_EXPORT void GcNullFreeFunc(void *ptr)
24
+ // Check if a Ruby object is (still) Ruby GC managed in which case it's
25
+ // 'dfree' function pointer should reference a specific free function
26
+ // and not be either 0 or a reference to the SWIG tracking removal function.
27
+ WXRUBY_EXPORT bool GC_IsObjectOwned(VALUE object)
34
28
  {
35
- WXRUBY_TRACE_IF(WxRubyTraceFreeNull, 2)
36
- WXRUBY_TRACE("> GcNullFreeFunc : " << ptr)
37
- WXRUBY_TRACE_END
38
-
39
- SWIG_RubyRemoveTracking(ptr);
40
-
41
- WXRUBY_TRACE_IF(WxRubyTraceFreeNull, 2)
42
- WXRUBY_TRACE("< GcNullFreeFunc")
43
- WXRUBY_TRACE_END
29
+ return RDATA(object)->dfree != SWIG_RubyRemoveTracking && RDATA(object)->dfree != 0;
44
30
  }
45
31
 
46
32
  // Tests if the window has been signalled as destroyed by a
@@ -124,25 +110,6 @@ WXRUBY_EXPORT void GcRefCountedFreeFunc(void *ptr)
124
110
  WXRUBY_TRACE_END
125
111
  }
126
112
 
127
- // Code to be run when the ruby object is swept by GC - this checks
128
- // for unattached sizers and deletes those, only unlinking others
129
- // as these will be managed by WxWidgets.
130
- WXRUBY_EXPORT void GcSizerFreeFunc(void *ptr)
131
- {
132
- WXRUBY_TRACE_IF(WxRubyTraceFreeSizer, 2)
133
- WXRUBY_TRACE("> GcSizerFreeFunc : " << ptr)
134
- WXRUBY_TRACE_END
135
-
136
- wxSizer* wx_szr = (wxSizer*)ptr;
137
- // unlink in all cases
138
- SWIG_RubyRemoveTracking(ptr);
139
- delete wx_szr; // delete unattached sizers
140
-
141
- WXRUBY_TRACE_IF(WxRubyTraceFreeSizer, 2)
142
- WXRUBY_TRACE("< GcSizerFreeFunc")
143
- WXRUBY_TRACE_END
144
- }
145
-
146
113
  void GC_mark_SizerBelongingToWindow(wxSizer *wx_sizer, VALUE rb_sizer);
147
114
 
148
115
  WXRUBY_EXPORT void GC_mark_wxSizer(void* ptr)
@@ -154,10 +121,10 @@ WXRUBY_EXPORT void GC_mark_wxSizer(void* ptr)
154
121
  VALUE rb_szr = SWIG_RubyInstanceFor(ptr);
155
122
  if (!RB_NIL_P(rb_szr))
156
123
  {
157
- // as long as the dfree function is still the GCSizeFreeFunc the sizer has not been attached to a window
124
+ // as long as the dfree function is still the sizer's free function the sizer has not been attached to a window
158
125
  // or added to a parent sizer (as that would 'disown' and replace the free function by the tracking removal function)
159
126
  // but it may hay have already had child sizers added which need to be marked
160
- if (RDATA(rb_szr)->dfree == (void (*)(void *))GcSizerFreeFunc)
127
+ if (RDATA(rb_szr)->dfree != (void (*)(void *))SWIG_RubyRemoveTracking)
161
128
  {
162
129
  wxSizer* wx_szr = (wxSizer*)ptr;
163
130
 
@@ -225,63 +192,6 @@ void GC_mark_SizerBelongingToWindow(wxSizer *wx_sizer, VALUE rb_sizer)
225
192
  WXRUBY_TRACE_END
226
193
  }
227
194
 
228
- WXRUBY_EXPORT void GC_mark_attached_wxMenu(void *ptr)
229
- {
230
- WXRUBY_TRACE_IF(WxRubyTraceMarkMenu, 2)
231
- WXRUBY_TRACE("> GC_mark_attached_wxMenu : " << ptr)
232
- WXRUBY_TRACE_END
233
-
234
- rb_gc_mark(SWIG_RubyInstanceFor(ptr));
235
-
236
- wxMenu *wx_menu = static_cast<wxMenu*> (ptr);
237
-
238
- wxMenuItemList wx_menu_items = wx_menu->GetMenuItems();
239
- wxMenuItemList::iterator iter;
240
- for (iter = wx_menu_items.begin(); iter != wx_menu_items.end(); ++iter)
241
- {
242
- wxMenuItem *wx_item = *iter;
243
- rb_gc_mark(SWIG_RubyInstanceFor(wx_item) );
244
- wxMenu* wx_sub_menu = wx_item->GetSubMenu();
245
- if (wx_sub_menu)
246
- GC_mark_attached_wxMenu(wx_sub_menu);
247
- }
248
-
249
- WXRUBY_TRACE_IF(WxRubyTraceMarkMenu, 2)
250
- WXRUBY_TRACE("< GC_mark_attached_wxMenu : " << ptr)
251
- WXRUBY_TRACE_END
252
- }
253
-
254
- // Similar to Sizers, MenuBar requires a special mark routine. This is
255
- // because Wx::Menu is not a subclass of Window so isn't automatically
256
- // protected in the mark phase by Wx::App. However, the ruby object
257
- // still must not be destroyed while it is still accessible on screen,
258
- // because it may still handle events. Rather than a SWIG %markfunc,
259
- // which can catch destroyed MenuBars linked to an in-scope ruby
260
- // variable and cause segfaults, MenuBars are always marked via the
261
- // containing Frame.
262
- void GC_mark_MenuBarBelongingToFrame(wxMenuBar *wx_menu_bar)
263
- {
264
- WXRUBY_TRACE_IF(WxRubyTraceMarkMenubar, 2)
265
- WXRUBY_TRACE("> GC_mark_MenuBarBelongingToFrame : " << wx_menu_bar)
266
- WXRUBY_TRACE_END
267
-
268
- rb_gc_mark( SWIG_RubyInstanceFor(wx_menu_bar) );
269
-
270
- WXRUBY_TRACE_IF(WxRubyTraceMarkMenubar, 3)
271
- WXRUBY_TRACE("< GC_mark_MenuBarBelongingToFrame : marking " << wx_menu_bar->GetMenuCount() << " menus")
272
- WXRUBY_TRACE_END
273
-
274
- // Mark each menu in the menubar in turn
275
- for ( size_t i = 0; i < wx_menu_bar->GetMenuCount(); i++ )
276
- {
277
- GC_mark_attached_wxMenu(wx_menu_bar->GetMenu(i));
278
- }
279
-
280
- WXRUBY_TRACE_IF(WxRubyTraceMarkMenubar, 2)
281
- WXRUBY_TRACE("< GC_mark_MenuBarBelongingToFrame : " << wx_menu_bar)
282
- WXRUBY_TRACE_END
283
- }
284
-
285
195
  // Default mark routine for Windows - preserve the main sizer and caret
286
196
  // belong to this window
287
197
  WXRUBY_EXPORT void GC_mark_wxWindow(void *ptr)
@@ -376,39 +286,4 @@ WXRUBY_EXPORT void GC_mark_wxWindow(void *ptr)
376
286
  WXRUBY_TRACE_END
377
287
  }
378
288
 
379
-
380
- WXRUBY_EXPORT void GC_mark_wxFrame(void *ptr)
381
- {
382
- WXRUBY_TRACE_IF(WxRubyTraceMarkFrame, 2)
383
- WXRUBY_TRACE("> GC_mark_wxFrame : " << ptr)
384
- WXRUBY_TRACE_END
385
-
386
- if ( GC_IsWindowDeleted(ptr) )
387
- {
388
- WXRUBY_TRACE_IF(WxRubyTraceMarkFrame, 2)
389
- WXRUBY_TRACE("< GC_mark_wxFrame : deleted")
390
- WXRUBY_TRACE_END
391
- return;
392
- }
393
-
394
- // Frames are also a subclass of wxWindow, so must do all the marking
395
- // of sizers and carets associated with that class
396
- GC_mark_wxWindow(ptr);
397
-
398
- wxFrame* wx_frame = (wxFrame*)ptr;
399
- // Then mark the MenuBar, if one is associated with this Frame
400
-
401
- wxMenuBar* menu_bar = wx_frame->GetMenuBar();
402
- if ( menu_bar )
403
- {
404
- // as this is an attached menu bar the regular marker will not mark
405
- // any menu content as it can't tell if the c++ object has been deleted or not
406
- // so we do that here now we know it is still alive
407
- GC_mark_MenuBarBelongingToFrame(menu_bar);
408
- }
409
-
410
- WXRUBY_TRACE_IF(WxRubyTraceMarkFrame, 2)
411
- WXRUBY_TRACE("< GC_mark_wxFrame : " << ptr)
412
- WXRUBY_TRACE_END
413
- }
414
289
  %}