У меня есть приложение, которое использует Motif
XmToggleButton
в меню.
Я замечаю странное поведение, которое:
- Когда я запускаю программу, пункты меню
XmToggleButton
выглядят просто отлично
- В главном окне приложения я открываю другую вкладку в подпредставлении
- Теперь, когда я проверю меню, я обнаружу, что левое поле изменилось само по себе
То, что я до сих пор пробовал, было:
- После создания
XmToggleButton
установите XmNmarginLeft
на 0
- После создания
XmToggleButton
установите XmNrecomputeSize
в False
- Я пытался прикрепить обратный вызов изменения размера
XmNresizeCallback
, но он никогда не достиг
Это все еще меняет поля. XtVaGetValues
из XmNmarginLeft
в обратном вызове выбора показывает, что ему присвоено некоторое положительное число.
Я использую эту версию Motif openmotif-2.3.3-8.el6.x86_64
.
Следует отметить, что я использую версию openmotif-devel-2.3.1-5.el5_5.1.i386
.
Создание кнопки переключения:
Widget *menuItem;
char* label = "menu item 1";
Arg args[5];
XtSetArg(args[0], XmNlabelString, XmStringCreateLocalized(label));
XtSetArg(args[1], XmNsensitive, True);
XtSetArg(args[2], XmNindicatorType, XmONE_OF_MANY);
XtSetArg(args[3], XmNvisibleWhenOff, False);
XtSetArg(args[4], XmNset, Boolean(bChecked));
*menuItem = XmCreateToggleButtonGadget(hPHnd, label, args, args);
XtVaSetValues(*menuItem, XmNmarginTop, 2, XmNmarginBottom, 2, (void*)0);
XtAddCallback(*hItem, XmNvalueChangedCallback, XtCallbackProc(menuItemSelect), XtPointer(this));
Определение проблемы:
void menuItemSelect(Widget widget, caddr_t client_data, caddr_t callback_data)
{
Dimension left;
XtVaGetValues(widget, XmNmarginLeft, &left, (void*)0);
// left != 0
}
Мои испытания:
// XtVaSetValues(*menuItem, XmNmarginLeft, 0, (void*)0); // Trial 1
// XtVaSetValues(*menuItem, XmNrecomputeSize, False, (void*)0); // Trial 2
// XtAddCallback(*hItem, XmNresizeCallback, XtCallbackProc(resizeCallback), XtPointer(this)); // Trial 3