This is another problem with mishandled strings. This time the
problem can arise any time you set a label string, whether or
not the strings have the same content. The changes on the end
are to fix compiler warnings about unreachable code.
- Steve
*** lesstif-0.91.3/lib/Xm/MessageB.c.orig Sat Aug 14 08:17:13 1999
--- lesstif-0.91.3/lib/Xm/MessageB.c Thu Jul 20 13:23:46 2000
***************
*** 531,536 ****
--- 531,548 ----
{
XmStringFree(MB_MessageString(w));
}
+ if (MB_HelpLabelString(w))
+ {
+ XmStringFree(MB_HelpLabelString(w));
+ }
+ if (MB_CancelLabelString(w))
+ {
+ XmStringFree(MB_CancelLabelString(w));
+ }
+ if (MB_OKLabelString(w))
+ {
+ XmStringFree(MB_OKLabelString(w));
+ }
}
static void
***************
*** 850,892 ****
}
if (MB_HelpButton(new_w) &&
! MB_HelpLabelString(new_w) != MB_HelpLabelString(old) && /* Fast */
! !XmStringCompare(MB_HelpLabelString(new_w), MB_HelpLabelString(old)))
{
! Arg al[2];
!
! XtSetArg(al[0], XmNlabelString, MB_HelpLabelString(new_w));
! XtSetArg(al[1], XmNlabelType, XmSTRING);
! XtSetValues(MB_HelpButton(new_w), al, 2);
!
! refresh_needed = True;
}
if (BB_CancelButton(new_w) &&
! MB_CancelLabelString(new_w) != MB_CancelLabelString(old) && /* Fast */
! !XmStringCompare(MB_CancelLabelString(new_w),
! MB_CancelLabelString(old)))
{
! Arg al[2];
!
! XtSetArg(al[0], XmNlabelString, MB_CancelLabelString(new_w));
! XtSetArg(al[1], XmNlabelType, XmSTRING);
! XtSetValues(BB_CancelButton(new_w), al, 2);
!
! refresh_needed = True;
}
if (MB_OKButton(new_w) &&
! MB_OKLabelString(new_w) != MB_OKLabelString(old) && /* Fast */
! !XmStringCompare(MB_OKLabelString(new_w), MB_OKLabelString(old)))
{
! Arg al[2];
!
! XtSetArg(al[0], XmNlabelString, MB_OKLabelString(new_w));
! XtSetArg(al[1], XmNlabelType, XmSTRING);
! XtSetValues(MB_OKButton(new_w), al, 2);
!
! refresh_needed = True;
}
return refresh_needed;
--- 862,916 ----
}
if (MB_HelpButton(new_w) &&
! MB_HelpLabelString(new_w) != MB_HelpLabelString(old))
{
! if (!XmStringCompare(MB_HelpLabelString(new_w), MB_HelpLabelString(old)))
! {
! Arg al[2];
!
! XtSetArg(al[0], XmNlabelString, MB_HelpLabelString(new_w));
! XtSetArg(al[1], XmNlabelType, XmSTRING);
! XtSetValues(MB_HelpButton(new_w), al, 2);
!
! refresh_needed = True;
! }
! MB_HelpLabelString(new_w) = XmStringCopy(MB_HelpLabelString(new_w));
! XmStringFree(MB_HelpLabelString(old));
}
if (BB_CancelButton(new_w) &&
! MB_CancelLabelString(new_w) != MB_CancelLabelString(old))
{
! if (!XmStringCompare(MB_CancelLabelString(new_w),
! MB_CancelLabelString(old)))
! {
! Arg al[2];
!
! XtSetArg(al[0], XmNlabelString, MB_CancelLabelString(new_w));
! XtSetArg(al[1], XmNlabelType, XmSTRING);
! XtSetValues(BB_CancelButton(new_w), al, 2);
!
! refresh_needed = True;
! }
! MB_CancelLabelString(new_w) = XmStringCopy(MB_CancelLabelString(new_w));
! XmStringFree(MB_CancelLabelString(old));
}
if (MB_OKButton(new_w) &&
! MB_OKLabelString(new_w) != MB_OKLabelString(old))
{
! if (!XmStringCompare(MB_OKLabelString(new_w), MB_OKLabelString(old)))
! {
! Arg al[2];
!
! XtSetArg(al[0], XmNlabelString, MB_OKLabelString(new_w));
! XtSetArg(al[1], XmNlabelType, XmSTRING);
! XtSetValues(MB_OKButton(new_w), al, 2);
!
! refresh_needed = True;
! }
! MB_OKLabelString(new_w) = XmStringCopy(MB_OKLabelString(new_w));
! XmStringFree(MB_OKLabelString(old));
}
return refresh_needed;
***************
*** 1633,1663 ****
{
case XmDIALOG_CANCEL_BUTTON:
return BB_CancelButton(mb);
- break;
case XmDIALOG_DEFAULT_BUTTON:
return BB_DefaultButton(mb);
- break;
case XmDIALOG_HELP_BUTTON:
return MB_HelpButton(mb);
- break;
case XmDIALOG_MESSAGE_LABEL:
return MB_Message(mb);
- break;
case XmDIALOG_OK_BUTTON:
return MB_OKButton(mb);
- break;
case XmDIALOG_SEPARATOR:
return MB_Separator(mb);
- break;
case XmDIALOG_SYMBOL_LABEL:
return MB_Symbol(mb);
- break;
default:
/* invalid child */
--- 1657,1680 ----
--== Sent via Deja.com http://www.deja.com/ ==--
Before you buy.