/***************************** * * Exececute the dialog box procedure * Returns when a button is pushed. * return value is the ID of the button * ****************************/ void ShowDlg(t_dlg *dlg) { int i; t_dlgitem *dlgitem; XMapWindow(dlg->x11->disp, dlg->win.self); XMapSubwindows(dlg->x11->disp, dlg->win.self); for (i = 0; (i < dlg->nitem); i++) { LightBorder(dlg->x11->disp, dlg->dlgitem[i]->win.self, dlg->bg); } XSetForeground(dlg->x11->disp, dlg->x11->gc, dlg->x11->fg); for (i = 0; (i < dlg->nitem); i++) { dlgitem = dlg->dlgitem[i]; if ((dlgitem->type == edlgBN) && (dlgitem->u.button.bDefault)) { PushMouse(dlg->x11->disp, dlgitem->win.self, dlgitem->win.width/2, dlgitem->win.height/2); dlg->bPop = true; break; } } dlg->bGrab = false; }
static bool DlgCB(t_x11 *x11,XEvent *event, Window w, void *data) { t_dlg *dlg=(t_dlg *)data; int i,nWndProc; t_dlgitem *dlgitem; if ((dlgitem=FindWin(dlg,w))!=NULL) { nWndProc=(dlgitem->WndProc)(x11,dlgitem,event); #ifdef DEBUG fprintf(x11->console, "window: %s, nWndProc: %d\n",dlgitem->win.text,nWndProc); x11->Flush(x11); #endif switch (nWndProc) { case ENTERPRESSED: if ((dlgitem->type==edlgBN) && (dlgitem->u.button.bDefault)) { if (dlg->cb) dlg->cb(x11,DLG_EXIT,dlgitem->ID,dlgitem->win.text,dlg->data); else ExitDlg(dlg); } else { for(i=0; (i<dlg->nitem); i++) if ((dlg->dlgitem[i]->type==edlgBN) && (dlg->dlgitem[i]->u.button.bDefault)) { PushMouse(x11->disp,dlg->dlgitem[i]->win.self, dlg->dlgitem[i]->win.width/2, dlg->dlgitem[i]->win.height/2); break; } } break; case BNPRESSED: if (dlg->cb) dlg->cb(x11,DLG_EXIT,dlgitem->ID,dlgitem->win.text,dlg->data); else ExitDlg(dlg); break; case RBPRESSED: { int gid=dlgitem->GroupID; t_id tid=RBSelected(dlg,gid); #ifdef DEBUG fprintf(stderr,"RBPRESSED\n"); #endif if (tid != -1) { t_dlgitem *dit=FindItem(dlg,tid); dit->u.radiobutton.bSelect=FALSE; ExposeWin(x11->disp,dit->win.self); } else gmx_fatal(FARGS,"No RB Selected initially!\n"); dlgitem->u.radiobutton.bSelect=TRUE; ExposeWin(x11->disp,dlgitem->win.self); if (dlg->cb) dlg->cb(x11,DLG_SET,dlgitem->ID,dlgitem->win.text,dlg->data); break; } case CBPRESSED: ExposeWin(x11->disp,dlgitem->win.self); if (dlg->cb) dlg->cb(x11,DLG_SET,dlgitem->ID,dlgitem->set,dlg->data); break; case ETCHANGED: ExposeWin(x11->disp,dlgitem->win.self); if (dlg->cb) dlg->cb(x11,DLG_SET,dlgitem->ID,dlgitem->u.edittext.buf,dlg->data); break; case HELPPRESSED: HelpNow(dlg,dlgitem); break; case ITEMOK: break; default: gmx_fatal(FARGS,"Invalid return code (%d) from wndproc\n",nWndProc); } } else if (w==dlg->win.self) { switch(event->type) { case Expose: EnterDlg(dlg); break; case ButtonPress: case KeyPress: if (HelpPressed(event)) HelpDlg(dlg); else XBell(x11->disp,50); break; default: break; } } return FALSE; }