[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[libcvd-members] gvars3 gvars3/GUI_Motif.h src/GUI_Motif.cc
From: |
Edward Rosten |
Subject: |
[libcvd-members] gvars3 gvars3/GUI_Motif.h src/GUI_Motif.cc |
Date: |
Wed, 13 May 2009 09:45:41 +0000 |
CVSROOT: /cvsroot/libcvd
Module name: gvars3
Changes by: Edward Rosten <edrosten> 09/05/13 09:45:41
Modified files:
gvars3 : GUI_Motif.h
src : GUI_Motif.cc
Log message:
Fixed a segfault or two
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gvars3/gvars3/GUI_Motif.h?cvsroot=libcvd&r1=1.7&r2=1.8
http://cvs.savannah.gnu.org/viewcvs/gvars3/src/GUI_Motif.cc?cvsroot=libcvd&r1=1.5&r2=1.6
Patches:
Index: gvars3/GUI_Motif.h
===================================================================
RCS file: /cvsroot/libcvd/gvars3/gvars3/GUI_Motif.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
--- gvars3/GUI_Motif.h 12 May 2009 16:37:41 -0000 1.7
+++ gvars3/GUI_Motif.h 13 May 2009 09:45:41 -0000 1.8
@@ -92,15 +92,16 @@
Widget wRowCol;
int nWidth;
int nHeight;
+ bool die;
std::map<Widget, std::string> PushButtonMap;
std::map<Widget, monitorMapStruct> MonitorMap;
std::map<Widget, toggleMapStruct > ToggleButtonMap;
std::map<Widget, sliderMapStruct > SliderMap;
+ std::map<Widget, std::pair<std::string, std::string> > SpinMap;
} GUIWindowStruct;
std::map<std::string, GUIWindowStruct> mmWindows;
std::list<std::string> labels;
- std::map<Widget, std::pair<std::string, std::string> > SpinMap;
};
Index: src/GUI_Motif.cc
===================================================================
RCS file: /cvsroot/libcvd/gvars3/src/GUI_Motif.cc,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- src/GUI_Motif.cc 12 May 2009 16:37:41 -0000 1.5
+++ src/GUI_Motif.cc 13 May 2009 09:45:41 -0000 1.6
@@ -104,6 +104,7 @@
};
}
gws.nHeight = 30;
+ gws.die=0;
pthread_mutex_lock((pthread_mutex_t*)mpMutex);
@@ -239,7 +240,7 @@
mpGUI->UnRegisterCommand(sWindowName + ".AddLabel");
mpGUI->UnRegisterCommand(sWindowName + ".Destroy");
XtUnrealizeWidget(mmWindows[sWindowName].wTopLevel);
- mmWindows.erase(sWindowName);
+ mmWindows[sWindowName].die=1;
DoMotifEvents();
};
@@ -347,7 +348,7 @@
w = XmCreateTextField(mmWindows[sWindowName].wRowCol, szName,al,ac);
- SpinMap[w] = make_pair(vs[0], string(""));
+ mmWindows[sWindowName].SpinMap[w] = make_pair(vs[0], string(""));
XtManageChild(w);
XtAddCallback(w, XmNvalueChangedCallback, TextBoxCB, this);
@@ -377,8 +378,10 @@
// Handles the actual callback work
void GUI_Motif::TextBox(Widget w, XtPointer xtpCall)
{
+ for(map<string, GUIWindowStruct>::iterator i=mmWindows.begin(); i !=
mmWindows.end(); i++)
+ {
- if(SpinMap.count(w))
+ if(i->second.SpinMap.count(w))
{
char* c;
XmTextPosition p;
@@ -390,18 +393,19 @@
p=1;
- GV3::set_var(SpinMap[w].first, cs.c_str());
- string s = GV3::get_var(SpinMap[w].first);
+ GV3::set_var(i->second.SpinMap[w].first, cs.c_str());
+ string s = GV3::get_var(i->second.SpinMap[w].first);
if(s != c)
{
- SpinMap[w].second = s;
+ i->second.SpinMap[w].second = s;
XtRemoveCallback(w, XmNvalueChangedCallback, TextBoxCB, this);
p = min((int)p, (int)s.size());
XtVaSetValues(w, XmNvalue, s.c_str(), XmNcursorPosition, p, NULL);
XtAddCallback(w, XmNvalueChangedCallback, TextBoxCB, this);
}
}
+ }
}
////////////////////////////////////////////////////////////////////////////////
@@ -826,10 +830,8 @@
delete pdNewValue;
};
- };
- DoMotifEvents();
- for(map<Widget, pair<string, string> >::iterator i=SpinMap.begin(); i !=
SpinMap.end(); i++)
+ for(map<Widget, pair<string, string> >::iterator
i=w->second.SpinMap.begin(); i != w->second.SpinMap.end(); i++)
{
if(i->second.second != GV3::get_var(i->second.first))
{
@@ -846,6 +848,20 @@
}
}
+
+ };
+ DoMotifEvents();
+
+ //Now kill any windows in need of killing
+ for(map<string,GUIWindowStruct>::iterator tmp,
w=mmWindows.begin();w!=mmWindows.end();)
+ {
+ tmp = w;
+ w++;
+ if(tmp->second.die)
+ mmWindows.erase(tmp);
+ }
+
+ DoMotifEvents();
}
void* GUI_Motif::GUI_Motif_Thread_CB(void* ptr)
{
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [libcvd-members] gvars3 gvars3/GUI_Motif.h src/GUI_Motif.cc,
Edward Rosten <=