diff --git a/src/motif_test.c b/src/motif_test.c index 4236433..c771ac0 100644 --- a/src/motif_test.c +++ b/src/motif_test.c @@ -19,15 +19,18 @@ #define PAD 8 -void button_callback(Widget widget, XtPointer client_data, XtPointer call_data) { +void button_callback(Widget widget, XtPointer client_data, XtPointer call_data) +{ puts("Button clicked!"); } -void quit_callback(Widget widget, XtPointer client_data, XtPointer call_data) { +void quit_callback(Widget widget, XtPointer client_data, XtPointer call_data) +{ exit(0); } -void dialog_callback(Widget widget, XtPointer client_data, XtPointer call_data) { +void dialog_callback(Widget widget, XtPointer client_data, XtPointer call_data) +{ Widget parent = (Widget)client_data; XmString msg = XmStringCreateLocalized("Hello from a secondary dialog!"); Widget dialog = XmCreateMessageDialog(parent, "dialog", NULL, 0); @@ -39,7 +42,8 @@ void dialog_callback(Widget widget, XtPointer client_data, XtPointer call_data) XtManageChild(dialog); } -int main(int argc, char *argv[]) { +int main(int argc, char *argv[]) +{ XtAppContext app; Widget toplevel, mainwin, menubar, form; @@ -47,9 +51,12 @@ int main(int argc, char *argv[]) { /* 获取 Display 指针并打印 */ Display *dpy = XtDisplay(toplevel); - if (dpy) { + if (dpy) + { printf("Connected to X server: %s\n", DisplayString(dpy)); - } else { + } + else + { fprintf(stderr, "Failed to get Display* from toplevel widget.\n"); } @@ -77,65 +84,65 @@ int main(int argc, char *argv[]) { /* 标签 */ Widget label = XtVaCreateManagedWidget("This is a label", - xmLabelWidgetClass, form, - XmNtopAttachment, XmATTACH_FORM, + xmLabelWidgetClass, form, + XmNtopAttachment, XmATTACH_FORM, + XmNtopOffset, PAD, + XmNleftAttachment, XmATTACH_FORM, + XmNleftOffset, PAD, + XmNrightAttachment, XmATTACH_FORM, + XmNrightOffset, PAD, + NULL); + + /* 按钮 */ + Widget button = XtVaCreateManagedWidget("Click Me", + xmPushButtonWidgetClass, form, + XmNtopAttachment, XmATTACH_WIDGET, + XmNtopWidget, label, + XmNtopOffset, PAD, + XmNleftAttachment, XmATTACH_FORM, + XmNleftOffset, PAD, + XmNrightAttachment, XmATTACH_FORM, + XmNrightOffset, PAD, + NULL); + XtAddCallback(button, XmNactivateCallback, button_callback, NULL); + + /* 打开二级对话框的按钮 */ + Widget dialogBtn = XtVaCreateManagedWidget("Show Dialog", + xmPushButtonWidgetClass, form, + XmNtopAttachment, XmATTACH_WIDGET, + XmNtopWidget, button, + XmNtopOffset, PAD, + XmNleftAttachment, XmATTACH_FORM, + XmNleftOffset, PAD, + XmNrightAttachment, XmATTACH_FORM, + XmNrightOffset, PAD, + NULL); + XtAddCallback(dialogBtn, XmNactivateCallback, dialog_callback, form); + + /* 文本框 */ + Widget text = XtVaCreateManagedWidget("text", + xmTextWidgetClass, form, + XmNtopAttachment, XmATTACH_WIDGET, + XmNtopWidget, dialogBtn, XmNtopOffset, PAD, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, PAD, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, PAD, + XmNcolumns, 20, NULL); - /* 按钮 */ - Widget button = XtVaCreateManagedWidget("Click Me", - xmPushButtonWidgetClass, form, - XmNtopAttachment, XmATTACH_WIDGET, - XmNtopWidget, label, - XmNtopOffset, PAD, - XmNleftAttachment, XmATTACH_FORM, - XmNleftOffset, PAD, - XmNrightAttachment, XmATTACH_FORM, - XmNrightOffset, PAD, - NULL); - XtAddCallback(button, XmNactivateCallback, button_callback, NULL); - - /* 打开二级对话框的按钮 */ - Widget dialogBtn = XtVaCreateManagedWidget("Show Dialog", - xmPushButtonWidgetClass, form, - XmNtopAttachment, XmATTACH_WIDGET, - XmNtopWidget, button, - XmNtopOffset, PAD, - XmNleftAttachment, XmATTACH_FORM, - XmNleftOffset, PAD, - XmNrightAttachment, XmATTACH_FORM, - XmNrightOffset, PAD, - NULL); - XtAddCallback(dialogBtn, XmNactivateCallback, dialog_callback, form); - - /* 文本框 */ - Widget text = XtVaCreateManagedWidget("text", - xmTextWidgetClass, form, - XmNtopAttachment, XmATTACH_WIDGET, - XmNtopWidget, dialogBtn, - XmNtopOffset, PAD, - XmNleftAttachment, XmATTACH_FORM, - XmNleftOffset, PAD, - XmNrightAttachment, XmATTACH_FORM, - XmNrightOffset, PAD, - XmNcolumns, 20, - NULL); - /* Toggle 按钮(复选框) */ Widget toggle = XtVaCreateManagedWidget("Check me", - xmToggleButtonWidgetClass, form, - XmNtopAttachment, XmATTACH_WIDGET, - XmNtopWidget, text, - XmNtopOffset, PAD, - XmNleftAttachment, XmATTACH_FORM, - XmNleftOffset, PAD, - XmNrightAttachment, XmATTACH_FORM, - XmNrightOffset, PAD, - NULL); + xmToggleButtonWidgetClass, form, + XmNtopAttachment, XmATTACH_WIDGET, + XmNtopWidget, text, + XmNtopOffset, PAD, + XmNleftAttachment, XmATTACH_FORM, + XmNleftOffset, PAD, + XmNrightAttachment, XmATTACH_FORM, + XmNrightOffset, PAD, + NULL); /* RadioBox(单选按钮组) */ Widget radioBox = XmCreateRadioBox(form, "radioBox", NULL, 0); @@ -175,25 +182,26 @@ int main(int argc, char *argv[]) { items[4] = XmStringCreateLocalized("Item E"); items[5] = XmStringCreateLocalized("Item F"); XmListAddItems(list, items, 6, 1); - for (int i = 0; i < 6; ++i) XmStringFree(items[i]); + for (int i = 0; i < 6; ++i) + XmStringFree(items[i]); XtManageChild(list); /* 滑块 (模拟进度条) */ Widget scale = XtVaCreateManagedWidget("scale", - xmScaleWidgetClass, form, - XmNorientation, XmHORIZONTAL, - XmNminimum, 0, - XmNmaximum, 100, - XmNvalue, 30, - XmNshowValue, True, - XmNtopAttachment, XmATTACH_WIDGET, - XmNtopWidget, swList, - XmNtopOffset, PAD, - XmNleftAttachment, XmATTACH_FORM, - XmNleftOffset, PAD, - XmNrightAttachment, XmATTACH_FORM, - XmNrightOffset, PAD, - NULL); + xmScaleWidgetClass, form, + XmNorientation, XmHORIZONTAL, + XmNminimum, 0, + XmNmaximum, 100, + XmNvalue, 30, + XmNshowValue, True, + XmNtopAttachment, XmATTACH_WIDGET, + XmNtopWidget, swList, + XmNtopOffset, PAD, + XmNleftAttachment, XmATTACH_FORM, + XmNleftOffset, PAD, + XmNrightAttachment, XmATTACH_FORM, + XmNrightOffset, PAD, + NULL); XtManageChild(form); XmMainWindowSetAreas(mainwin, menubar, NULL, NULL, NULL, form); @@ -202,11 +210,15 @@ int main(int argc, char *argv[]) { /* 自定义事件循环 */ XEvent event; - while (1) { - if (XtAppPending(app)) { + while (1) + { + if (XtAppPending(app)) + { XtAppNextEvent(app, &event); XtDispatchEvent(&event); - } else { + } + else + { /* 空闲时可以执行后台逻辑 */ printf("Idle...\n"); usleep(500000); /* 0.5秒 */