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.
- checksums.yaml +4 -4
- data/INSTALL.md +27 -2
- data/README.md +15 -15
- data/ext/wxruby3/include/wxRubyApp.h +145 -46
- data/ext/wxruby3/include/wxruby-ComboPopup.h +25 -8
- data/ext/wxruby3/include/wxruby-GCTracking.h +262 -0
- data/ext/wxruby3/include/wxruby-MBConv.h +190 -0
- data/ext/wxruby3/include/wxruby-SharedEventHandler.h +183 -0
- data/ext/wxruby3/include/wxruby-SharedPtr.h +104 -0
- data/ext/wxruby3/include/wxruby-runtime.h +29 -0
- data/ext/wxruby3/swig/custom/rubytracking.swg +8 -22
- data/ext/wxruby3/swig/custom/wx_ruby_shared_ptr.i +434 -0
- data/ext/wxruby3/swig/custom/wx_shared_ptr.i +431 -0
- data/ext/wxruby3/swig/mark_free_impl.i +7 -132
- data/ext/wxruby3/swig/memory_management.i +8 -44
- data/ext/wxruby3/swig/wx.i +46 -73
- data/lib/wx/core/const.rb +0 -1
- data/lib/wx/core/context_help.rb +17 -0
- data/lib/wx/core/cursor.rb +1 -0
- data/lib/wx/core/helpcontrollerhelpprovider.rb +10 -2
- data/lib/wx/core/mbconv.rb +11 -0
- data/lib/wx/core/media_ctrl.rb +31 -0
- data/lib/wx/core/top_level_window.rb +7 -0
- data/lib/wx/core.rb +6 -0
- data/lib/wx/doc/art_provider.rb +17 -0
- data/lib/wx/doc/context_help.rb +42 -0
- data/lib/wx/doc/core.rb +0 -5
- data/lib/wx/doc/functions.rb +10 -0
- data/lib/wx/doc/gen/affine_matrix2d.rb +2 -0
- data/lib/wx/doc/gen/art_provider.rb +12 -0
- data/lib/wx/doc/gen/aui/aui_notebook_event.rb +15 -15
- data/lib/wx/doc/gen/aui/aui_pane_info.rb +8 -8
- data/lib/wx/doc/gen/aui/aui_tool_bar_event.rb +5 -5
- data/lib/wx/doc/gen/book_ctrl_base.rb +2 -1
- data/lib/wx/doc/gen/calendar_event.rb +5 -5
- data/lib/wx/doc/gen/choicebook.rb +2 -2
- data/lib/wx/doc/gen/collapsible_pane.rb +1 -1
- data/lib/wx/doc/gen/colour_dialog.rb +1 -1
- data/lib/wx/doc/gen/colour_picker_event.rb +3 -3
- data/lib/wx/doc/gen/context_help_button.rb +0 -53
- data/lib/wx/doc/gen/core.rb +4 -4
- data/lib/wx/doc/gen/credential_entry_dialog.rb +2 -2
- data/lib/wx/doc/gen/date_event.rb +2 -2
- data/lib/wx/doc/gen/dial_up_event.rb +2 -2
- data/lib/wx/doc/gen/dir_filter_list_ctrl.rb +2 -2
- data/lib/wx/doc/gen/event.rb +58 -58
- data/lib/wx/doc/gen/ext_help_controller.rb +62 -16
- data/lib/wx/doc/gen/file_ctrl.rb +4 -4
- data/lib/wx/doc/gen/file_dir_picker_event.rb +2 -2
- data/lib/wx/doc/gen/file_system.rb +1 -1
- data/lib/wx/doc/gen/find_dialog_event.rb +5 -5
- data/lib/wx/doc/gen/font_picker_event.rb +1 -1
- data/lib/wx/doc/gen/grid/grid_ctrl.rb +67 -32
- data/lib/wx/doc/gen/header_ctrl_event.rb +13 -13
- data/lib/wx/doc/gen/help_controller.rb +45 -2
- data/lib/wx/doc/gen/html/html_help_controller.rb +74 -32
- data/lib/wx/doc/gen/html/html_help_window.rb +3 -3
- data/lib/wx/doc/gen/html/html_window.rb +4 -4
- data/lib/wx/doc/gen/hyperlink_ctrl.rb +1 -1
- data/lib/wx/doc/gen/list_ctrl.rb +22 -22
- data/lib/wx/doc/gen/listbook.rb +2 -2
- data/lib/wx/doc/gen/mb_conv.rb +10 -0
- data/lib/wx/doc/gen/media_event.rb +6 -6
- data/lib/wx/doc/gen/notebook.rb +2 -2
- data/lib/wx/doc/gen/pg/pg_validation_info.rb +14 -14
- data/lib/wx/doc/gen/pg/property_grid_interface.rb +2 -2
- data/lib/wx/doc/gen/rbn/ribbon_art_provider.rb +19 -9
- data/lib/wx/doc/gen/rbn/ribbon_button_bar.rb +2 -2
- data/lib/wx/doc/gen/rbn/ribbon_gallery.rb +3 -3
- data/lib/wx/doc/gen/rbn/ribbon_panel.rb +2 -2
- data/lib/wx/doc/gen/rbn/ribbon_tool_bar.rb +2 -2
- data/lib/wx/doc/gen/rt/event_list.rb +17 -0
- data/lib/wx/doc/gen/rt/shared_evt_handler.rb +14 -0
- data/lib/wx/doc/gen/rt/thread_event.rb +71 -0
- data/lib/wx/doc/gen/rtc/rich_text_ctrl.rb +19 -19
- data/lib/wx/doc/gen/sash_event.rb +2 -2
- data/lib/wx/doc/gen/sash_layout_window.rb +2 -2
- data/lib/wx/doc/gen/search_ctrl.rb +2 -2
- data/lib/wx/doc/gen/spin_ctrl.rb +2 -2
- data/lib/wx/doc/gen/splitter_window.rb +6 -6
- data/lib/wx/doc/gen/stc/styled_text_event.rb +34 -34
- data/lib/wx/doc/gen/task_bar_icon_event.rb +10 -10
- data/lib/wx/doc/gen/text_ctrl.rb +4 -4
- data/lib/wx/doc/gen/toggle_button.rb +1 -1
- data/lib/wx/doc/gen/toolbook.rb +2 -2
- data/lib/wx/doc/gen/top_level_window.rb +19 -0
- data/lib/wx/doc/gen/tree_ctrl.rb +21 -21
- data/lib/wx/doc/gen/treebook.rb +4 -4
- data/lib/wx/doc/gen/utils.rb +2 -2
- data/lib/wx/doc/gen/web/event_list.rb +95 -0
- data/lib/wx/doc/gen/web/web_view.rb +1136 -0
- data/lib/wx/doc/gen/web/web_view_event.rb +210 -0
- data/lib/wx/doc/gen/web/web_view_handler.rb +318 -0
- data/lib/wx/doc/gen/window.rb +1 -1
- data/lib/wx/doc/gen/wizard_event.rb +7 -7
- data/lib/wx/doc/html/html_help_controller.rb +23 -1
- data/lib/wx/doc/mbconv.rb +108 -0
- data/lib/wx/doc/rt/shared_event_handler.rb +49 -0
- data/lib/wx/doc/rt/thread_event.rb +28 -0
- data/lib/wx/doc/webview.rb +40 -0
- data/lib/wx/helpers.rb +1 -1
- data/lib/wx/html/htmlhelpcontroller.rb +10 -0
- data/lib/wx/keyword_defs.rb +11 -0
- data/lib/wx/rt/events/evt_list.rb +8 -0
- data/lib/wx/rt/require.rb +8 -0
- data/lib/wx/rt/thread_event.rb +14 -0
- data/lib/wx/rt.rb +16 -0
- data/lib/wx/version.rb +1 -1
- data/lib/wx/web/events/evt_list.rb +74 -0
- data/lib/wx/web/require.rb +8 -0
- data/lib/wx/web/webview.rb +106 -0
- data/lib/wx/web.rb +17 -0
- data/lib/wx/wxruby/cmd/setup.rb +15 -0
- data/lib/wx.rb +2 -0
- data/rakelib/configure.rb +24 -0
- data/rakelib/gem.rb +3 -2
- data/rakelib/install.rb +54 -27
- data/rakelib/lib/config/macosx.rb +7 -5
- data/rakelib/lib/config/mingw.rb +66 -5
- data/rakelib/lib/config/pkgman/mingw.rb +1 -1
- data/rakelib/lib/config/unixish.rb +4 -2
- data/rakelib/lib/config.rb +37 -3
- data/rakelib/lib/core/include/client_data.inc +38 -17
- data/rakelib/lib/core/include/funcall.inc +1 -1
- data/rakelib/lib/core/include/swigdirector.inc +3 -3
- data/rakelib/lib/core/include/swigrubyrun.inc +14 -26
- data/rakelib/lib/core/package.rb +0 -2
- data/rakelib/lib/director/app.rb +1 -8
- data/rakelib/lib/director/art_provider.rb +7 -3
- data/rakelib/lib/director/comboctrl.rb +0 -7
- data/rakelib/lib/director/context_help_button.rb +35 -2
- data/rakelib/lib/director/event_handler.rb +32 -28
- data/rakelib/lib/director/fs_file.rb +15 -10
- data/rakelib/lib/director/functions.rb +8 -0
- data/rakelib/lib/director/grid_cell_attr.rb +1 -3
- data/rakelib/lib/director/grid_cell_editor.rb +14 -12
- data/rakelib/lib/director/grid_cell_renderer.rb +11 -8
- data/rakelib/lib/director/grid_ctrl.rb +140 -121
- data/rakelib/lib/director/help_controller.rb +70 -2
- data/rakelib/lib/director/mb_conv.rb +30 -0
- data/rakelib/lib/director/menu.rb +92 -42
- data/rakelib/lib/director/menu_bar.rb +84 -45
- data/rakelib/lib/director/menu_item.rb +2 -2
- data/rakelib/lib/director/persistence_manager.rb +3 -2
- data/rakelib/lib/director/preview_frame.rb +2 -2
- data/rakelib/lib/director/richtext_buffer.rb +5 -2
- data/rakelib/lib/director/shared_evt_handler.rb +30 -0
- data/rakelib/lib/director/sizer.rb +8 -17
- data/rakelib/lib/director/sizer_item.rb +3 -4
- data/rakelib/lib/director/task_bar_icon.rb +7 -7
- data/rakelib/lib/director/thread_event.rb +33 -0
- data/rakelib/lib/director/validator.rb +3 -1
- data/rakelib/lib/director/variant.rb +16 -12
- data/rakelib/lib/director/webview.rb +166 -0
- data/rakelib/lib/director/webview_event.rb +37 -0
- data/rakelib/lib/director/webview_handler.rb +63 -0
- data/rakelib/lib/generate/doc/thread_event.yaml +20 -0
- data/rakelib/lib/generate/doc/web_view.yaml +135 -0
- data/rakelib/lib/generate/doc/web_view_event.yaml +38 -0
- data/rakelib/lib/generate/doc/web_view_handler.yaml +58 -0
- data/rakelib/lib/specs/interfaces.rb +12 -0
- data/rakelib/lib/typemap/common.rb +34 -1
- data/rakelib/lib/typemap/mb_conv.rb +58 -0
- data/rakelib/prepost.rake +23 -31
- data/rakelib/prepost.rb +20 -0
- data/samples/event/threaded.rb +295 -42
- data/samples/event/tn_threaded.png +0 -0
- data/samples/help/doc/back.gif +0 -0
- data/samples/help/doc/contents.gif +0 -0
- data/samples/help/doc/cshelp.txt +9 -0
- data/samples/help/doc/doc.chm +0 -0
- data/samples/help/doc/doc.cnt +8 -0
- data/samples/help/doc/doc.h +7 -0
- data/samples/help/doc/doc.hhc +40 -0
- data/samples/help/doc/doc.hhk +31 -0
- data/samples/help/doc/doc.hhp +33 -0
- data/samples/help/doc/doc.hpj +21 -0
- data/samples/help/doc/doc.htm +27 -0
- data/samples/help/doc/doc1.htm +24 -0
- data/samples/help/doc/doc2.htm +12 -0
- data/samples/help/doc/doc3.htm +12 -0
- data/samples/help/doc/doc4.htm +12 -0
- data/samples/help/doc/doc5.htm +14 -0
- data/samples/help/doc/forward.gif +0 -0
- data/samples/help/doc/up.gif +0 -0
- data/samples/help/doc.chm +0 -0
- data/samples/help/doc.chw +0 -0
- data/samples/help/doc.zip +0 -0
- data/samples/help/help.rb +352 -0
- data/samples/help/tn_help.png +0 -0
- data/samples/webview/handler_advanced.html +55 -0
- data/samples/webview/tn_webview.png +0 -0
- data/samples/webview/webview.rb +1264 -0
- data/tests/assets/handler_advanced.html +55 -0
- data/tests/assets/test.css +1 -0
- data/tests/assets/test.html +9 -0
- data/tests/assets/test.zip +0 -0
- data/tests/lib/text_entry_tests.rb +2 -2
- data/tests/lib/wxapp_runner.rb +40 -0
- data/tests/lib/wxframe_runner.rb +17 -2
- data/tests/test_art.rb +8 -8
- data/tests/test_clipboard.rb +4 -4
- data/tests/test_config.rb +6 -6
- data/tests/test_exceptions.rb +8 -6
- data/tests/test_ext_controls.rb +3 -3
- data/tests/test_file_dialog.rb +5 -5
- data/tests/test_font.rb +7 -7
- data/tests/test_grid_ctrl.rb +133 -0
- data/tests/test_help.rb +88 -0
- data/tests/test_intl.rb +1 -1
- data/tests/test_media_ctrl.rb +14 -6
- data/tests/test_menu.rb +94 -86
- data/tests/test_persistence.rb +1 -1
- data/tests/test_proof_check.rb +5 -5
- data/tests/test_propgrid.rb +1 -1
- data/tests/test_shared_event_handler.rb +141 -0
- data/tests/test_std_controls.rb +5 -5
- data/tests/test_webview.rb +492 -0
- data/tests/test_window.rb +3 -3
- 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, $<ype));
|
|
261
|
+
if (newmem.own & SWIG_CAST_NEW_MEMORY) delete %reinterpret_cast(argp, $<ype);
|
|
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, $<ype)) : wxSharedPtr< TYPE >();
|
|
276
|
+
if (newmem.own & SWIG_CAST_NEW_MEMORY) delete %reinterpret_cast(argp, $<ype);
|
|
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, $<ype));
|
|
295
|
+
if (newmem.own & SWIG_CAST_NEW_MEMORY) delete %reinterpret_cast(swig_argp, $<ype);
|
|
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
|
-
//
|
|
31
|
-
//
|
|
32
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
%}
|