static void bwcallback (Widget w, XtPointer clientdata, XtPointer calldata) { Gwidget_t *widget; widget = findwidget ((unsigned long) w, G_BUTTONWIDGET); if (WBU->func) (*WBU->func) (widget - &Gwidgets[0], clientdata); }
void Glwbutaction (Widget w, XEvent *evp, char **app, unsigned int *anp) { Gwidget_t *widget; Gevent_t gev; int wi, xtype; widget = findwidget ((unsigned long) w, G_LABELWIDGET); switch ((xtype = evp->type)) { case ButtonPress: case ButtonRelease: gev.type = G_MOUSE; gev.code = (xtype == ButtonPress) ? G_DOWN : G_UP; if ((gev.data = evp->xbutton.button - Button1) > 4) return; break; default: return; } wi = gev.wi = widget - &Gwidgets[0]; if (WLU->func) (*WLU->func) (&gev); if (Gpopdownflag) { Gpopdownflag = FALSE; if (gev.code == G_DOWN) { gev.code = G_UP; widget = &Gwidgets[wi]; if (widget->inuse && WLU->func) (*WLU->func) (&gev); } } }
void Glwkeyaction (Widget w, XEvent *evp, char **app, unsigned int *anp) { Gwidget_t *widget; Gevent_t gev; int xtype; char c; widget = findwidget ((unsigned long) w, G_LABELWIDGET); switch ((xtype = evp->type)) { case KeyPress: case KeyRelease: if (!XLookupString ((XKeyEvent *) evp, &c, 1, NULL, NULL)) return; gev.type = G_KEYBD; gev.code = (xtype == KeyPress) ? G_DOWN : G_UP; gev.data = c; break; default: return; } gev.wi = widget - &Gwidgets[0]; if (WLU->func) (*WLU->func) (&gev); if (Gpopdownflag) Gpopdownflag = FALSE; }
/* used for one line text input widgets */ void Gtweolaction (Widget w, XEvent *evp, char **app, unsigned int *anp) { Gwidget_t *widget; Widget ww; XawTextBlock tb; int ret, fi, li, n, i; widget = findwidget ((unsigned long) w, G_TEXTWIDGET); li = XawTextGetInsertionPoint (w) - 1; ww = XawTextGetSource (w); tb.firstPos = 0, tb.ptr = "\n", tb.format = FMT8BIT, tb.length = 1; fi = XawTextSourceSearch (ww, li, XawsdLeft, &tb); if (fi == XawTextSearchError) fi = 0; else fi++; n = li - fi; Gbufp[(Gbufi = 0)] = '\000'; while (Gbufi != n) { ret = XawTextSourceRead (ww, fi, &tb, n - Gbufi) - fi; for (i = 0; i < ret; i++) Gbufp[Gbufi++] = tb.ptr[i]; } Gbufp[Gbufi] = '\000'; if (n >= 0 && WTU->func) (*WTU->func) (widget - &Gwidgets[0], Gbufp); }
void Gcwkeyaction(GtkWidget * w, GdkEventKey * event, gpointer data) { Gwidget_t *widget; Gevent_t gev; int xtype, bn, wi, state; PIXpoint_t pp; unsigned int mask; char c; widget = findwidget((unsigned long) canvas->w, G_CANVASWIDGET); switch ((xtype = event->type)) { case GDK_KEY_PRESS: case GDK_KEY_RELEASE: gdk_window_get_pointer(event->window, &pp.x, &pp.y, &state); gev.type = G_KEYBD; gev.code = (xtype == GDK_KEY_PRESS) ? G_DOWN : G_UP; gev.data = event->keyval; gev.p = Gppixtodraw(widget, pp); break; default: return; } gev.wi = widget - &Gwidgets[0]; Gpopdownflag = FALSE; if (WCU->func) (*WCU->func) (&gev); if (Gpopdownflag) Gpopdownflag = FALSE; }
void file_ok_sel(GtkWidget * w2, GtkFileSelection * fs) { Gwidget_t *widget; widget = findwidget((unsigned long) w, G_QUERYWIDGET); WQU->state = 1; WQU->button = 1; }
gint exposeeventhandler(GtkWidget * w, GdkEvent * event, gpointer data) { Gwidget_t *widget; widget = findwidget((unsigned long) w, G_CANVASWIDGET); gdk_draw_rectangle(widget->w->window, widget->w->style->white_gc, TRUE, 0, 0, widget->w->allocation.width, widget->w->allocation.height); }
void butcallback(gpointer * l) { Gwidget_t *widget; widget = findwidget((unsigned long) w, G_QUERYWIDGET); if (GPOINTER_TO_INT(l) > -1) { WQU->button = GPOINTER_TO_INT(l); } WQU->state = 1; }
gint bwcallback(GtkWidget * w, GdkEvent * event, gpointer * data) { Gwidget_t *widget; unsigned long l; widget = findwidget((unsigned long) w, G_BUTTONWIDGET); /* calls TXTtoggle in the case of txtview */ if (WBU->func) (*WBU->func) (widget - &Gwidgets[0], widget->udata); return 1; }
gint cweventhandler(GtkWidget * w, GdkEvent * event, gpointer data) { Gwidget_t *widget; widget = findwidget((unsigned long) w, G_CANVASWIDGET); Gneedredraw = WCU->needredraw = TRUE; adjustclip(widget); gtk_signal_connect(G_OBJECT(w), "visibility_notify_event", GTK_SIGNAL_FUNC(cweventhandler), NULL); gtk_signal_connect(G_OBJECT(w), "motion_notify_event", GTK_SIGNAL_FUNC(cweventhandler), NULL); }
gint Gcwbutaction(GtkWidget * w, GdkEvent * event, gpointer data) { Gwidget_t *widget; Gevent_t gev; int xtype, bn, wi; PIXpoint_t pp; widget = findwidget((unsigned long) w, G_CANVASWIDGET); switch ((xtype = event->type)) { case GDK_BUTTON_PRESS: case GDK_2BUTTON_PRESS: case GDK_3BUTTON_PRESS: case GDK_BUTTON_RELEASE: gev.type = G_MOUSE; gev.code = (xtype == GDK_BUTTON_PRESS) ? G_DOWN : G_UP; gev.data = event->button.button - 1; pp.x = event->button.x, pp.y = event->button.y; gev.p = Gppixtodraw(widget, pp); bn = WCU->bstate[gev.data]; WCU->bstate[gev.data] = (xtype == GDK_BUTTON_PRESS) ? 1 : 0; bn = WCU->bstate[gev.data] - bn; WCU->buttonsdown += bn; Gbuttonsdown += bn; break; default: break; } wi = gev.wi = widget - &Gwidgets[0]; Gpopdownflag = FALSE; if (WCU->func) { (*WCU->func) (&gev); } if (Gpopdownflag) { Gpopdownflag = FALSE; if (gev.code == G_DOWN) { gev.code = G_UP; widget = &Gwidgets[wi]; WCU->bstate[gev.data] = 0; WCU->buttonsdown--; Gbuttonsdown--; if (widget->inuse && WCU->func) (*WCU->func) (&gev); } } return TRUE; }
gint keyevent(GtkWidget * w, GdkEventKey * event, gpointer data) { Gwidget_t *widget; widget = findwidget((unsigned long) w, G_TEXTWIDGET); if (event->keyval == 65293) { Gbufp = gtk_editable_get_chars(w, pos, -1); pos = gtk_text_get_point(w); if (WTU->func) { /* calls TXTprocess in the case of txtview */ (*WTU->func) (widget - &Gwidgets[0], Gbufp); } } return FALSE; }
LRESULT CALLBACK LeftyWndProc ( HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam ) { Gwidget_t *widget; WINDOWPOS *wpos; Gevent_t gev; widget = findwidget (hwnd, G_VIEWWIDGET); switch (message) { case WM_WINDOWPOSCHANGED: if (Gnocallbacks || !widget) return (DefWindowProc(hwnd, message, wparam, lparam)); wpos = (WINDOWPOS *) lparam; if (!(wpos->flags & SWP_NOSIZE)) handleresize (widget); break; case WM_COMMAND: if (Gnocallbacks || !widget) return (DefWindowProc(hwnd, message, wparam, lparam)); processcommand (widget, wparam, lparam); break; case WM_CLOSE: if (!widget) exit (0); if (WVU->closing) DestroyWindow (hwnd); if (Gnocallbacks) exit (0); gev.type = 0, gev.code = 0, gev.data = 0; gev.wi = widget - &Gwidgets[0]; if (WVU->func) (*WVU->func) (&gev); else exit (0); break; case WM_PALETTECHANGED: palettechanged = (HWND) wparam; break; default: return (DefWindowProc(hwnd, message, wparam, lparam)); } return 0; }
LRESULT CALLBACK ArrayWndProc ( HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam ) { Gwidget_t *widget; WINDOWPOS *wpos; if (Gnocallbacks || !(widget = findwidget (hwnd, G_ARRAYWIDGET))) return (DefWindowProc(hwnd, message, wparam, lparam)); switch (message) { case WM_WINDOWPOSCHANGED: wpos = (WINDOWPOS *) lparam; if (!(wpos->flags & SWP_NOSIZE)) handleresize (widget); break; case WM_COMMAND: processcommand (widget, wparam, lparam); break; default: return (DefWindowProc (hwnd, message, wparam, lparam)); } return 0; }
LRESULT CALLBACK CanvasWndProc ( HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam ) { Gwidget_t *widget; WINDOWPOS *wpos; PIXpoint_t pp; Gevent_t gev; POINT p; int wi, bn; static int cntlflag; if (Gnocallbacks || !(widget = findwidget (hwnd, G_CANVASWIDGET))) return (DefWindowProc(hwnd, message, wparam, lparam)); Gpopdownflag = FALSE; switch (message) { case WM_PAINT: if (palettechanged != hwnd) RealizePalette (widget->u.c->gc); Gneedredraw = widget->u.c->needredraw = TRUE; Gadjustclip (widget); return (DefWindowProc(hwnd, message, wparam, lparam)); case WM_WINDOWPOSCHANGED: wpos = (WINDOWPOS *) lparam; if (!(wpos->flags & SWP_NOSIZE)) handleresize (widget); return 0; case WM_MOUSEACTIVATE: SetFocus (widget->w); return (DefWindowProc(hwnd, message, wparam, lparam)); case WM_COMMAND: processcommand (widget, wparam, lparam); return 0; case WM_CHAR: gev.type = G_KEYBD; gev.code = G_DOWN; /* I don't know how to get up events so I make */ Gpopdownflag = TRUE; /* the code after this switch send the up event */ gev.data = wparam; GetCursorPos (&p); ScreenToClient (widget->w, &p); pp.x = p.x, pp.y = p.y; gev.p = ppixtodraw (widget, pp); /* continues after the end of this switch */ break; case WM_LBUTTONDOWN: case WM_LBUTTONUP: case WM_MBUTTONDOWN: case WM_MBUTTONUP: case WM_RBUTTONDOWN: case WM_RBUTTONUP: gev.type = G_MOUSE; if (twobmouse) { if (message == WM_LBUTTONDOWN && (wparam & MK_CONTROL)) message = WM_MBUTTONDOWN, cntlflag = TRUE; if (message == WM_LBUTTONUP && cntlflag) message = WM_MBUTTONUP, cntlflag = FALSE; } switch (message) { case WM_LBUTTONDOWN: gev.code = G_DOWN, gev.data = G_LEFT; break; case WM_LBUTTONUP: gev.code = G_UP, gev.data = G_LEFT; break; case WM_MBUTTONDOWN: gev.code = G_DOWN, gev.data = G_MIDDLE; break; case WM_MBUTTONUP: gev.code = G_UP, gev.data = G_MIDDLE; break; case WM_RBUTTONDOWN: gev.code = G_DOWN, gev.data = G_RIGHT; break; case WM_RBUTTONUP: gev.code = G_UP, gev.data = G_RIGHT; break; } pp.x = LOWORD (lparam), pp.y = HIWORD (lparam); gev.p = ppixtodraw (widget, pp); bn = WCU->bstate[gev.data]; WCU->bstate[gev.data] = (gev.code == G_DOWN) ? 1 : 0; bn = WCU->bstate[gev.data] - bn; widget->u.c->buttonsdown += bn; Gbuttonsdown += bn; /* continues after the end of this switch */ break; default: return (DefWindowProc(hwnd, message, wparam, lparam)); } wi = gev.wi = widget - &Gwidgets[0]; if (widget->u.c->func) (*widget->u.c->func) (&gev); if (Gpopdownflag) { Gpopdownflag = FALSE; if (gev.code == G_DOWN) { gev.code = G_UP; widget = &Gwidgets[wi]; WCU->bstate[gev.data] = 0; widget->u.c->buttonsdown--; Gbuttonsdown--; if (widget->inuse && widget->u.c->func) (*widget->u.c->func) (&gev); } } return 0; }
LRESULT CALLBACK LabelWndProc ( HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam ) { Gwidget_t *widget; PAINTSTRUCT paintstruct; WINDOWPOS *wpos; Gevent_t gev; RECT r; HDC hdc; int wi; if (Gnocallbacks || !(widget = findwidget (hwnd, G_LABELWIDGET))) return (DefWindowProc(hwnd, message, wparam, lparam)); switch (message) { case WM_PAINT: hdc = BeginPaint (widget->w, &paintstruct); GetWindowText (widget->w, &Gbufp[0], Gbufn); GetClientRect (widget->w, &r); DrawText (hdc, (LPCSTR) &Gbufp[0], strlen (Gbufp), &r, DT_LEFT); EndPaint (widget->w, &paintstruct); return (DefWindowProc(hwnd, message, wparam, lparam)); case WM_WINDOWPOSCHANGED: wpos = (WINDOWPOS *) lparam; if (!(wpos->flags & SWP_NOSIZE)) handleresize (widget); return 0; case WM_COMMAND: processcommand (widget, wparam, lparam); return 0; case WM_KEYDOWN: case WM_KEYUP: gev.type = G_KEYBD; gev.code = (message == WM_KEYDOWN) ? G_DOWN : G_UP; gev.data = wparam; /* continues after the end of this switch */ break; case WM_LBUTTONDOWN: case WM_LBUTTONUP: case WM_MBUTTONDOWN: case WM_MBUTTONUP: case WM_RBUTTONDOWN: case WM_RBUTTONUP: gev.type = G_MOUSE; if (wparam & MK_CONTROL) { if (message == WM_LBUTTONDOWN) message = WM_MBUTTONDOWN; else if (message == WM_LBUTTONUP) message = WM_MBUTTONUP; } switch (message) { case WM_LBUTTONDOWN: gev.code = G_DOWN, gev.data = G_LEFT; break; case WM_LBUTTONUP: gev.code = G_UP, gev.data = G_LEFT; break; case WM_MBUTTONDOWN: gev.code = G_DOWN, gev.data = G_MIDDLE; break; case WM_MBUTTONUP: gev.code = G_UP, gev.data = G_MIDDLE; break; case WM_RBUTTONDOWN: gev.code = G_DOWN, gev.data = G_RIGHT; break; case WM_RBUTTONUP: gev.code = G_UP, gev.data = G_RIGHT; break; } /* continues after the end of this switch */ break; default: return (DefWindowProc(hwnd, message, wparam, lparam)); } wi = gev.wi = widget - &Gwidgets[0]; if (widget->u.l->func) (*widget->u.l->func) (&gev); if (Gpopdownflag) { Gpopdownflag = FALSE; if (gev.type == G_MOUSE && gev.code == G_DOWN) { gev.code = G_UP; widget = &Gwidgets[wi]; if (widget->inuse && widget->u.l->func) (*widget->u.l->func) (&gev); } } return 0; }
LRESULT CALLBACK ScrollWndProc ( HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam ) { Gwidget_t *widget, *child; WINDOWPOS *wpos; PIXpoint_t po; RECT r; int dummy, dx, dy, wi; if (Gnocallbacks || !(widget = findwidget (hwnd, G_SCROLLWIDGET))) return (DefWindowProc(hwnd, message, wparam, lparam)); switch (message) { case WM_WINDOWPOSCHANGED: wpos = (WINDOWPOS *) lparam; if (!(wpos->flags & SWP_NOSIZE)) handleresize (widget); break; case WM_HSCROLL: case WM_VSCROLL: for (wi = 0; wi < Gwidgetn; wi++) { child = &Gwidgets[wi]; if (child->inuse && child->pwi == widget - &Gwidgets[0]) break; } if (wi == Gwidgetn) return (DefWindowProc(hwnd, message, wparam, lparam)); GetClientRect (widget->w, &r); GetScrollRange (widget->w, SB_HORZ, &dummy, &dx); GetScrollRange (widget->w, SB_VERT, &dummy, &dy); po.x = GetScrollPos (widget->w, SB_HORZ); po.y = GetScrollPos (widget->w, SB_VERT); switch (message) { case WM_HSCROLL: switch (LOWORD (wparam)) { case SB_BOTTOM: po.x = dx; break; case SB_LINEDOWN: po.x += 10; break; case SB_LINEUP: po.x -= 10; break; case SB_PAGEDOWN: po.x += (r.right - r.left); break; case SB_PAGEUP: po.x -= (r.right - r.left); break; case SB_THUMBPOSITION: po.x = HIWORD (wparam); break; case SB_THUMBTRACK: po.x = HIWORD (wparam); break; case SB_TOP: po.x = 0; break; } po.x = min (po.x, dx); po.x = max (po.x, 0); SetScrollPos (widget->w, SB_HORZ, po.x, TRUE); SetWindowPos ( child->w, (HWND) NULL, -po.x, -po.y, 0, 0, SWP_NOSIZE | SWP_NOZORDER ); break; case WM_VSCROLL: switch (LOWORD (wparam)) { case SB_BOTTOM: po.y = dy; break; case SB_LINEDOWN: po.y += 10; break; case SB_LINEUP: po.y -= 10; break; case SB_PAGEDOWN: po.y += (r.bottom - r.top); break; case SB_PAGEUP: po.y -= (r.bottom - r.top); break; case SB_THUMBPOSITION: po.y = HIWORD (wparam); break; case SB_THUMBTRACK: po.y = HIWORD (wparam); break; case SB_TOP: po.y = 0; break; } po.y = min (po.y, dy); po.y = max (po.y, 0); SetScrollPos (widget->w, SB_VERT, po.y, TRUE); SetWindowPos ( child->w, (HWND) NULL, -po.x, -po.y, 0, 0, SWP_NOSIZE | SWP_NOZORDER ); break; } break; default: return (DefWindowProc (hwnd, message, wparam, lparam)); } return 0; }