summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl E. Thompson <devel-fltk@carlthompson.net>1999-05-06 01:17:49 +0000
committerCarl E. Thompson <devel-fltk@carlthompson.net>1999-05-06 01:17:49 +0000
commit72a313292c0b0783a7fc92544d4fa805d613d3a6 (patch)
tree159d57cfe18d38b18bb58d01bc731ad6eb9f7686 /src
parent2f942e1c4a049cc64aa1ddd49dd87f0f011c8b37 (diff)
Checking in Guillaume Nodet's fix for Fl_Menu_::copy() again. I checked it
in on April 8, but it seems to have disappeared from the CVS. -Carl git-svn-id: file:///fltk/svn/fltk/branches/branch-1.0@574 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src')
-rw-r--r--src/Fl_Menu_.cxx23
1 files changed, 21 insertions, 2 deletions
diff --git a/src/Fl_Menu_.cxx b/src/Fl_Menu_.cxx
index 0a608e07e..18ddebecf 100644
--- a/src/Fl_Menu_.cxx
+++ b/src/Fl_Menu_.cxx
@@ -1,5 +1,5 @@
//
-// "$Id: Fl_Menu_.cxx,v 1.7.2.3 1999/04/19 07:01:23 bill Exp $"
+// "$Id: Fl_Menu_.cxx,v 1.7.2.4 1999/05/06 01:17:49 carl Exp $"
//
// Common menu code for the Fast Light Tool Kit (FLTK).
//
@@ -112,6 +112,7 @@ void Fl_Menu_::menu(const Fl_Menu_Item* m) {
value_ = menu_ = (Fl_Menu_Item*)m;
}
+/* This version is broken
void Fl_Menu_::copy(const Fl_Menu_Item* m, void* user_data) {
int n = m->size();
Fl_Menu_Item* newMenu = new Fl_Menu_Item[n];
@@ -124,6 +125,24 @@ void Fl_Menu_::copy(const Fl_Menu_Item* m, void* user_data) {
newMenu++;
}
}
+*/
+
+// This is Guillaume Nodet's fixed version
+void Fl_Menu_::copy(const Fl_Menu_Item* m, void* user_data) {
+ int i, s = m->size(), n=s;
+ for (i=0; n; n>>=1, i++);
+ n = 1 << i;
+ Fl_Menu_Item* newMenu = new Fl_Menu_Item[n];
+ memcpy(newMenu, m, s*sizeof(Fl_Menu_Item));
+ memset(newMenu+s, 0, (n-s)*sizeof(Fl_Menu_Item));
+ menu(newMenu);
+ alloc = 1; // make destructor free it
+ // for convienence, provide way to change all the user data pointers:
+ if (user_data) for (; s--;) {
+ if (newMenu->callback_) newMenu->user_data_ = user_data;
+ newMenu++;
+ }
+}
Fl_Menu_::~Fl_Menu_() {
clear();
@@ -148,5 +167,5 @@ void Fl_Menu_::clear() {
}
//
-// End of "$Id: Fl_Menu_.cxx,v 1.7.2.3 1999/04/19 07:01:23 bill Exp $".
+// End of "$Id: Fl_Menu_.cxx,v 1.7.2.4 1999/05/06 01:17:49 carl Exp $".
//