Изменения полей мотива при запуске приложения - PullRequest
0 голосов
/ 03 июля 2019

У меня есть приложение, которое использует Motif XmToggleButton в меню.

Я замечаю странное поведение, которое:

  • Когда я запускаю программу, пункты меню XmToggleButton выглядят просто отлично
  • В главном окне приложения я открываю другую вкладку в подпредставлении
  • Теперь, когда я проверю меню, я обнаружу, что левое поле изменилось само по себе

То, что я до сих пор пробовал, было:

  1. После создания XmToggleButton установите XmNmarginLeft на 0
  2. После создания XmToggleButton установите XmNrecomputeSize в False
  3. Я пытался прикрепить обратный вызов изменения размера 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
...