diff --git a/src/backend/gdi.c b/src/backend/gdi.c index a6c2027..65d193b 100644 --- a/src/backend/gdi.c +++ b/src/backend/gdi.c @@ -46,6 +46,7 @@ static LRESULT CALLBACK wndproc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { p.y = HIWORD(lp); SetCapture(hWnd); + SetFocus(hWnd); MwLLDispatch(u->ll, down, &p); } else if(msg == WM_LBUTTONUP) { MwPoint p; @@ -71,6 +72,10 @@ static LRESULT CALLBACK wndproc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { PostQuitMessage(0); } else if(msg == WM_CLOSE) { DestroyWindow(hWnd); + } else if(msg == WM_CHAR) { + int n = wp; + + MwLLDispatch(u->ll, key, &n); } else { return (u->old == NULL) ? DefWindowProc(hWnd, msg, wp, lp) : CallWindowProc(u->old, hWnd, msg, wp, lp); } @@ -389,3 +394,8 @@ void MwLLDetach(MwLL handle, MwPoint* point) { SetWindowLongPtr(handle->hWnd, GWL_STYLE, style); } + +void MwLLShow(MwLL handle, int show) { + ShowWindow(handle->hWnd, show ? SW_NORMAL : SW_HIDE); + if(show) SetFocus(handle->hWnd); +} diff --git a/src/backend/x11.c b/src/backend/x11.c index b9c3aea..f1bea80 100644 --- a/src/backend/x11.c +++ b/src/backend/x11.c @@ -185,15 +185,18 @@ void MwLLNextEvent(MwLL handle) { int n; KeySym sym = XLookupKeysym(&ev.xkey, 0); char* str = XKeysymToString(sym); - char s = str == NULL ? 0 : str[0]; + /* HACK: this is bad, you can guess why */ + if(strlen(str) == 1) { + char s = str == NULL ? 0 : str[0]; - if(ev.xkey.state & (ShiftMask | LockMask)) { - n = toupper((int)s); - } else { - n = s; + if(ev.xkey.state & (ShiftMask | LockMask)) { + n = toupper((int)s); + } else { + n = s; + } + + MwLLDispatch(handle, key, &n); } - - MwLLDispatch(handle, key, &n); } if(render) { int x, y; diff --git a/src/widget/text.c b/src/widget/text.c index bf8aecb..83c739e 100644 --- a/src/widget/text.c +++ b/src/widget/text.c @@ -24,6 +24,10 @@ static void draw(MwWidget handle) { MwLLFreeColor(base); } +static void key(MwWidget handle, int code) { + printf("%c\n", code); +} + MwClassRec MwTextClassRec = { create, /* create */ NULL, /* destroy */ @@ -34,7 +38,7 @@ MwClassRec MwTextClassRec = { NULL, /* mouse_move */ MwForceRender, /* mouse_up */ MwForceRender, /* mouse_down */ - NULL, /* key */ + key, /* key */ NULL, NULL, NULL,