Update of /cvsroot/libufo/ufo-0.5/src/ui
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29427/src/ui
Modified Files:
ustylemanager.cpp
Log Message:
Fixed memory leak of created style hints and styles.
Index: ustylemanager.cpp
===================================================================
RCS file: /cvsroot/libufo/ufo-0.5/src/ui/ustylemanager.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** ustylemanager.cpp 21 May 2005 15:32:12 -0000 1.1
--- ustylemanager.cpp 2 Sep 2005 14:28:38 -0000 1.2
***************
*** 84,96 ****
hints->opacity = 1.0f;
hints->background = NULL;
-
m_hints["default"] = hints;
- // FIXME: mem leak
UStyleHints * widget = new UStyleHints();
m_hints["widget"] = widget;
- // FIXME: mem leak
UStyleHints * buttons = new UStyleHints();
buttons->border->borderType = StyleBorder;
--- 84,93 ----
***************
*** 100,104 ****
m_hints["button"] = buttons;
- // FIXME: mem leak
UStyleHints * menuitem = new UStyleHints();
menuitem->margin = UInsets(2, 2, 2, 2);
--- 97,100 ----
***************
*** 107,123 ****
m_hints["menuitem"] = menuitem;
- // FIXME: mem leak
UStyleHints * separator = new UStyleHints();
m_hints["separator"] = separator;
- // FIXME: mem leak
UStyleHints * menubar = new UStyleHints();
menubar->border->borderType = BottomLineBorder;
menubar->border->color[0] = UColor(0.53f, 0.53f, 0.50f);
-
m_hints["menubar"] = menubar;
-
- // FIXME: mem leak
UStyleHints * popup = new UStyleHints();
popup->border->borderType = LineBorder;
--- 103,114 ----
***************
*** 126,136 ****
m_hints["popupmenu"] = popup;
- // FIXME: mem leak
-
UStyleHints * iframe = new UStyleHints();
iframe->border->borderType = StyleBorder;
m_hints["internalframe"] = iframe;
- // FIXME: mem leak
UStyleHints * textedit = new UStyleHints();
textedit->border->borderType = LineBorder;
--- 117,124 ----
***************
*** 138,142 ****
m_hints["textedit"] = textedit;
! m_hints["listbox"] = textedit;
}
--- 126,130 ----
m_hints["textedit"] = textedit;
! m_hints["listbox"] = textedit->clone();
}
***************
*** 148,151 ****
--- 136,153 ----
}
+ UStyleManager::~UStyleManager() {
+ for (std::map<std::string, UStyleHints*>::iterator iter = m_hints.begin();
+ iter != m_hints.end();
+ ++iter) {
+ if ((*iter).second) {
+ delete ((*iter).second);
+ }
+ }
+ m_hints.clear();
+ if (m_style) {
+ m_style->unreference();
+ }
+ }
+
UStyle *
***************
*** 270,275 ****
m_hints[(*iter).first]->transcribe((*iter).second);
} else {
! (*iter).second->update(getStyleHints((*iter).first));
! m_hints[(*iter).first] = (*iter).second;
}
}
--- 272,278 ----
m_hints[(*iter).first]->transcribe((*iter).second);
} else {
! UStyleHints * hints = ((*iter).second)->clone();
! hints->update(getStyleHints((*iter).first));
! m_hints[(*iter).first] = hints;
}
}
|