Newer
Older
/***********************************************************************
* $Id: markfuncs.cpp 2928 2008-12-29 19:16:57Z lyle $
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
***********************************************************************/
#include "FXRbCommon.h"
#ifdef MARK
#undef MARK
#endif
#define MARK(p) rb_gc_mark(reinterpret_cast<VALUE>((p)))
template<class BASECLASS,class SUBCLASS>
static void delete_if_not_owned(BASECLASS* self,SUBCLASS*){
if(self!=0){
if(!FXRbIsBorrowed(self)){
if(self->isMemberOf(FXMETACLASS(SUBCLASS))){
if(!dynamic_cast<SUBCLASS*>(self)->owned){
delete self; // also unregisters it
}
}
}
FXRbUnregisterRubyObj(self);
}
}
template<class BASECLASS,class SUBCLASS>
static void delete_if_not_owned_by_app(BASECLASS* self,SUBCLASS*){
if(self!=0){
if(!FXRbIsBorrowed(self)){
if(self->isMemberOf(FXMETACLASS(SUBCLASS))){
if(!dynamic_cast<SUBCLASS*>(self)->ownedByApp){
delete self; // also unregisters it
}
}
}
FXRbUnregisterRubyObj(self);
}
}
// FIXME: How to get to the target objects stored in the accelerator
// table? This is currently private (not protected) data for the class.
void FXRbAccelTable::markfunc(FXAccelTable* accelTable){
FXRbObject::markfunc(accelTable);
}
// Mark dependencies for the GC
void FXRbObject::markfunc(FXObject* obj){
FXTRACE((100,"%s::markfunc(%p)\n",obj?obj->getClassName():"FXRbObject",obj));
}
void FXRbObject::freefunc(FXObject* self){
if(self!=0){
// Unregister, but don't destroy, borrowed references
if(FXRbIsBorrowed(self)){
FXRbUnregisterRubyObj(self);
return;
}
const FXchar* classname=self->getClassName();
FXASSERT(classname!=0);
FXASSERT(strlen(classname)>3);
if(classname[0]=='F' && classname[1]=='X' && classname[2]=='R' && classname[3]=='b'){
delete self;
}
else{
FXRbUnregisterRubyObj(self);
}
}
}
void FXRbIconSource::markfunc(FXIconSource* iconSource){
FXRbObject::markfunc(iconSource);
}
void FXRbTranslator::markfunc(FXTranslator* translator){
FXRbObject::markfunc(translator);
if(translator){
FXRbGcMark(translator->FXTranslator::getApp());
FXRbGcMark(translator->FXTranslator::getTextCodec());
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
}
}
void FXRbBMPIcon::markfunc(FXBMPIcon *icon){
FXRbIcon::markfunc(icon);
}
void FXRbIcon::markfunc(FXIcon* icon){
FXRbImage::markfunc(icon);
}
void FXRbImage::markfunc(FXImage* image){
FXRbDrawable::markfunc(image);
}
void FXRbBMPImage::markfunc(FXBMPImage* image){
FXRbImage::markfunc(image);
}
void FXRbBitmap::markfunc(FXBitmap* bitmap){
FXRbDrawable::markfunc(bitmap);
}
void FXRbButton::markfunc(FXButton* btn){
FXRbLabel::markfunc(btn);
}
void FXRbKnob::markfunc(FXKnob* self){
FXRbFrame::markfunc(self);
}
void FXRbLabel::markfunc(FXLabel* self){
FXRbFrame::markfunc(self);
if(self){
FXRbGcMark(self->FXLabel::getFont());
FXRbGcMark(self->FXLabel::getIcon());
}
}
void FXRbFrame::markfunc(FXFrame* frame){
FXRbWindow::markfunc(frame);
}
void FXRb7Segment::markfunc(FX7Segment* seg){
FXRbFrame::markfunc(seg);
}
void FXRbDockHandler::markfunc(FXDockHandler *dockhandler){
FXRbFrame::markfunc(dockhandler);
}
void FXRbDockTitle::markfunc(FXDockTitle *self){
FXRbDockHandler::markfunc(self);
if(self){
FXRbGcMark(self->FXDockTitle::getFont());
}
}
void FXRbDrawable::markfunc(FXDrawable* drawable){
FXRbId::markfunc(drawable);
if(drawable) FXRbGcMark(drawable->FXDrawable::getVisual());
}
void FXRbId::markfunc(FXId* self){
FXRbObject::markfunc(self);
if(self){
FXRbGcMark(self->FXId::getApp());
if(void *d=self->FXId::getUserData())
MARK(d);
}
}
void FXRbCanvas::markfunc(FXCanvas* canvas){
FXRbWindow::markfunc(canvas);
}
void FXRbCheckButton::markfunc(FXCheckButton* cb){
FXRbLabel::markfunc(cb);
}
void FXRbColorDialog::markfunc(FXColorDialog* dlg){
FXRbDialogBox::markfunc(dlg);
}
void FXRbChoiceBox::markfunc(FXChoiceBox* box){
FXRbDialogBox::markfunc(box);
}
void FXRbWindow::markfunc(FXWindow* self){
FXRbDrawable::markfunc(self);
if(self){
FXRbGcMark(self->FXWindow::getParent());
FXRbGcMark(self->FXWindow::getOwner());
FXRbGcMark(self->FXWindow::getShell());
FXRbGcMark(self->FXWindow::getRoot());
// FXRbGcMark(self->FXWindow::getNext());
// FXRbGcMark(self->FXWindow::getPrev());
FXRbGcMark(self->FXWindow::getFocus());
FXRbGcMark(self->FXWindow::getTarget());
FXRbGcMark(self->FXWindow::getAccelTable());
FXRbGcMark(self->FXWindow::getDefaultCursor());
FXRbGcMark(self->FXWindow::getDragCursor());
Loading
Loading full blame...