modeless dialog
This commit is contained in:
@@ -19,6 +19,8 @@
|
|||||||
|
|
||||||
#define PAD 8
|
#define PAD 8
|
||||||
|
|
||||||
|
Widget active_dialog = NULL;
|
||||||
|
|
||||||
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!");
|
puts("Button clicked!");
|
||||||
@@ -29,19 +31,36 @@ void quit_callback(Widget widget, XtPointer client_data, XtPointer call_data)
|
|||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void dialog_callback(Widget widget, XtPointer client_data, XtPointer call_data)
|
void open_dialog(Widget parent, const char *message)
|
||||||
{
|
{
|
||||||
Widget parent = (Widget)client_data;
|
if (active_dialog && XtIsManaged(active_dialog))
|
||||||
XmString msg = XmStringCreateLocalized("Hello from a secondary dialog!");
|
{
|
||||||
Widget dialog = XmCreateMessageDialog(parent, "dialog", NULL, 0);
|
XtDestroyWidget(active_dialog);
|
||||||
XtVaSetValues(dialog,
|
active_dialog = NULL;
|
||||||
XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL,
|
}
|
||||||
|
|
||||||
|
XmString msg = XmStringCreateLocalized((char *)message);
|
||||||
|
active_dialog = XmCreateMessageDialog(parent, "dialog", NULL, 0);
|
||||||
|
XtVaSetValues(active_dialog,
|
||||||
|
XmNdialogStyle, XmDIALOG_MODELESS, /* 非模态 */
|
||||||
XmNmessageString, msg,
|
XmNmessageString, msg,
|
||||||
NULL);
|
NULL);
|
||||||
XmStringFree(msg);
|
XmStringFree(msg);
|
||||||
XtManageChild(dialog);
|
|
||||||
|
XtManageChild(active_dialog);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void btn1_cb(Widget w, XtPointer client_data, XtPointer call_data)
|
||||||
|
{
|
||||||
|
open_dialog((Widget)client_data, "This is Dialog 1");
|
||||||
|
}
|
||||||
|
|
||||||
|
void btn2_cb(Widget w, XtPointer client_data, XtPointer call_data)
|
||||||
|
{
|
||||||
|
open_dialog((Widget)client_data, "This is Dialog 2");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
XtAppContext app;
|
XtAppContext app;
|
||||||
@@ -107,7 +126,7 @@ int main(int argc, char *argv[])
|
|||||||
XtAddCallback(button, XmNactivateCallback, button_callback, NULL);
|
XtAddCallback(button, XmNactivateCallback, button_callback, NULL);
|
||||||
|
|
||||||
/* 打开二级对话框的按钮 */
|
/* 打开二级对话框的按钮 */
|
||||||
Widget dialogBtn = XtVaCreateManagedWidget("Show Dialog",
|
Widget dialogBtn1 = XtVaCreateManagedWidget("Show Dialog1",
|
||||||
xmPushButtonWidgetClass, form,
|
xmPushButtonWidgetClass, form,
|
||||||
XmNtopAttachment, XmATTACH_WIDGET,
|
XmNtopAttachment, XmATTACH_WIDGET,
|
||||||
XmNtopWidget, button,
|
XmNtopWidget, button,
|
||||||
@@ -117,13 +136,25 @@ int main(int argc, char *argv[])
|
|||||||
XmNrightAttachment, XmATTACH_FORM,
|
XmNrightAttachment, XmATTACH_FORM,
|
||||||
XmNrightOffset, PAD,
|
XmNrightOffset, PAD,
|
||||||
NULL);
|
NULL);
|
||||||
XtAddCallback(dialogBtn, XmNactivateCallback, dialog_callback, form);
|
XtAddCallback(dialogBtn1, XmNactivateCallback, btn1_cb, form);
|
||||||
|
|
||||||
|
Widget dialogBtn2 = XtVaCreateManagedWidget("Show Dialog2",
|
||||||
|
xmPushButtonWidgetClass, form,
|
||||||
|
XmNtopAttachment, XmATTACH_WIDGET,
|
||||||
|
XmNtopWidget, dialogBtn1,
|
||||||
|
XmNtopOffset, PAD,
|
||||||
|
XmNleftAttachment, XmATTACH_FORM,
|
||||||
|
XmNleftOffset, PAD,
|
||||||
|
XmNrightAttachment, XmATTACH_FORM,
|
||||||
|
XmNrightOffset, PAD,
|
||||||
|
NULL);
|
||||||
|
XtAddCallback(dialogBtn2, XmNactivateCallback, btn2_cb, form);
|
||||||
|
|
||||||
/* 文本框 */
|
/* 文本框 */
|
||||||
Widget text = XtVaCreateManagedWidget("text",
|
Widget text = XtVaCreateManagedWidget("text",
|
||||||
xmTextWidgetClass, form,
|
xmTextWidgetClass, form,
|
||||||
XmNtopAttachment, XmATTACH_WIDGET,
|
XmNtopAttachment, XmATTACH_WIDGET,
|
||||||
XmNtopWidget, dialogBtn,
|
XmNtopWidget, dialogBtn2,
|
||||||
XmNtopOffset, PAD,
|
XmNtopOffset, PAD,
|
||||||
XmNleftAttachment, XmATTACH_FORM,
|
XmNleftAttachment, XmATTACH_FORM,
|
||||||
XmNleftOffset, PAD,
|
XmNleftOffset, PAD,
|
||||||
@@ -221,7 +252,7 @@ int main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
/* 空闲时可以执行后台逻辑 */
|
/* 空闲时可以执行后台逻辑 */
|
||||||
printf("Idle...\n");
|
printf("Idle...\n");
|
||||||
usleep(500000); /* 0.5秒 */
|
usleep(50000); /* 0.05秒 */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user