static bool BCallBack(struct t_x11 *x11,XEvent *event, Window w, void *data) { t_sc *sc; sc=(t_sc *)data; switch (event->type) { case Expose: XSetForeground(x11->disp,x11->gc,sc->col[sc->ncol-1].xc.pixel); TextInWin(x11,&sc->but,sc->but.text,eXCenter,eYCenter); break; case ConfigureNotify: sc->but.width=event->xconfigure.width; sc->but.height=event->xconfigure.height; break; case EnterNotify: LightBorder(x11->disp,sc->but.self,sc->col[sc->ncol-1].xc.pixel); break; case LeaveNotify: LightBorder(x11->disp,sc->but.self,sc->col[0].xc.pixel); break; case ButtonPress: x11->UnRegisterCallback(x11,sc->wd.self); x11->UnRegisterCallback(x11,sc->but.self); return TRUE; } return FALSE; }
/***************************** * * 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; }
gmx_bool ChildCallBack(t_x11 *x11, XEvent *event, Window w, void *data) { t_child *child; t_mentry *m; t_windata *wd; XEvent letter; child = (t_child *)data; m = child->m; wd = &(child->wd); switch (event->type) { case Expose: XSetForeground(x11->disp, x11->gc, x11->fg); TextInRect(x11, w, m->str, 16, 0, wd->width-16-2, wd->height-2, eXLeft, eYCenter); if (m->bChecked) { int y = x11->font->ascent; XDrawLine(x11->disp, w, x11->gc, 2, (y*2)/3, 6, y); XDrawLine(x11->disp, w, x11->gc, 3, (y*2)/3, 7, y); XDrawLine(x11->disp, w, x11->gc, 7, y, 12, 2); } break; case EnterNotify: LightBorder(x11->disp, w, x11->fg); break; case LeaveNotify: LightBorder(x11->disp, w, x11->bg); break; case ButtonRelease: letter.type = ClientMessage; letter.xclient.display = x11->disp; letter.xclient.window = m->send_to ? m->send_to : child->Parent; letter.xclient.message_type = 0; letter.xclient.format = 32; letter.xclient.data.l[0] = m->nreturn; XSendEvent(x11->disp, letter.xclient.window, True, 0, &letter); break; default: break; } return FALSE; }