mirror of
https://gitea.nishi.boats/pyrite-dev/milsko
synced 2026-01-08 02:13:29 +00:00
fix sloppy focus
git-svn-id: http://svn2.nishi.boats/svn/milsko/trunk@231 b9cfdab3-6d41-4d17-bbe4-086880011989
This commit is contained in:
@@ -43,6 +43,7 @@ struct _MwLLHandler {
|
||||
void (*resize)(MwLL handle, void* data);
|
||||
void (*close)(MwLL handle, void* data);
|
||||
void (*move)(MwLL handle, void* data);
|
||||
void (*key)(MwLL handle, void* data);
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
#include <sys/types.h>
|
||||
#include <assert.h>
|
||||
#include <math.h>
|
||||
#include <ctype.h>
|
||||
#ifndef _WIN32
|
||||
#include <unistd.h>
|
||||
#include <sys/ipc.h>
|
||||
|
||||
@@ -26,6 +26,7 @@ typedef void* MwWidget;
|
||||
typedef void (*MwHandler)(MwWidget handle);
|
||||
typedef int (*MwHandler2)(MwWidget handle);
|
||||
typedef void (*MwHandler3)(MwWidget handle, const char* key);
|
||||
typedef void (*MwHandler4)(MwWidget handle, int key);
|
||||
typedef void (*MwUserHandler)(MwWidget handle, void* user_data, void* call_data);
|
||||
typedef void (*MwErrorHandler)(int code, const char* message, void* user_data);
|
||||
|
||||
@@ -118,6 +119,12 @@ struct _MwClass {
|
||||
MwHandler mouse_move;
|
||||
MwHandler mouse_up;
|
||||
MwHandler mouse_down;
|
||||
MwHandler4 key;
|
||||
void* reserved1;
|
||||
void* reserved2;
|
||||
void* reserved3;
|
||||
void* reserved4;
|
||||
void* reserved5;
|
||||
};
|
||||
|
||||
struct _MwFont {
|
||||
|
||||
@@ -389,8 +389,3 @@ 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);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* $Id$ */
|
||||
#include <Mw/Milsko.h>
|
||||
|
||||
static unsigned long mask = ExposureMask | StructureNotifyMask | ButtonPressMask | ButtonReleaseMask | PointerMotionMask | EnterWindowMask;
|
||||
static unsigned long mask = ExposureMask | StructureNotifyMask | ButtonPressMask | ButtonReleaseMask | PointerMotionMask | EnterWindowMask | KeymapNotify;
|
||||
|
||||
static void create_pixmap(MwLL handle) {
|
||||
XWindowAttributes attr;
|
||||
@@ -150,6 +150,8 @@ void MwLLNextEvent(MwLL handle) {
|
||||
p.y = ev.xbutton.y;
|
||||
|
||||
MwLLDispatch(handle, down, &p);
|
||||
|
||||
XSetInputFocus(handle->display, handle->window, RevertToNone, CurrentTime);
|
||||
}
|
||||
} else if(ev.type == ButtonRelease) {
|
||||
if(ev.xbutton.button == Button1) {
|
||||
@@ -179,6 +181,19 @@ void MwLLNextEvent(MwLL handle) {
|
||||
p.y = ev.xmotion.y;
|
||||
|
||||
MwLLDispatch(handle, move, &p);
|
||||
} else if(ev.type == KeyPress) {
|
||||
int n;
|
||||
KeySym sym = XLookupKeysym(&ev.xkey, 0);
|
||||
char* str = XKeysymToString(sym);
|
||||
char s = str == NULL ? 0 : str[0];
|
||||
|
||||
if(ev.xkey.state & (ShiftMask | LockMask)) {
|
||||
n = toupper((int)s);
|
||||
} else {
|
||||
n = s;
|
||||
}
|
||||
|
||||
MwLLDispatch(handle, key, &n);
|
||||
}
|
||||
if(render) {
|
||||
int x, y;
|
||||
|
||||
@@ -66,6 +66,13 @@ static void llmovehandler(MwLL handle, void* data) {
|
||||
MwDispatch(h, mouse_move);
|
||||
}
|
||||
|
||||
static void llkeyhandler(MwLL handle, void* data) {
|
||||
MwWidget h = (MwWidget)handle->user;
|
||||
int key = *(int*)data;
|
||||
|
||||
MwDispatch3(h, key, key);
|
||||
}
|
||||
|
||||
MwWidget MwCreateWidget(MwClass widget_class, const char* name, MwWidget parent, int x, int y, unsigned int width, unsigned int height) {
|
||||
MwWidget h = malloc(sizeof(*h));
|
||||
|
||||
@@ -92,6 +99,7 @@ MwWidget MwCreateWidget(MwClass widget_class, const char* name, MwWidget parent,
|
||||
h->lowlevel->handler->resize = llresizehandler;
|
||||
h->lowlevel->handler->close = llclosehandler;
|
||||
h->lowlevel->handler->move = llmovehandler;
|
||||
h->lowlevel->handler->key = llkeyhandler;
|
||||
|
||||
if(parent != NULL) arrput(parent->children, h);
|
||||
|
||||
|
||||
@@ -74,6 +74,11 @@ MwClassRec MwButtonClassRec = {
|
||||
prop_change, /* prop_change */
|
||||
NULL, /* mouse_move */
|
||||
MwForceRender, /* mouse_up */
|
||||
MwForceRender /* mouse_down */
|
||||
};
|
||||
MwForceRender, /* mouse_down */
|
||||
NULL, /* key */
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL};
|
||||
MwClass MwButtonClass = &MwButtonClassRec;
|
||||
|
||||
@@ -46,6 +46,11 @@ MwClassRec MwCheckBoxClassRec = {
|
||||
prop_change, /* prop_change */
|
||||
NULL, /* mouse_move */
|
||||
MwForceRender, /* mouse_up */
|
||||
MwForceRender /* mouse_down */
|
||||
};
|
||||
MwForceRender, /* mouse_down */
|
||||
NULL, /* key */
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL};
|
||||
MwClass MwCheckBoxClass = &MwCheckBoxClassRec;
|
||||
|
||||
@@ -32,6 +32,11 @@ MwClassRec MwFrameClassRec = {
|
||||
NULL, /* prop_change */
|
||||
NULL, /* mouse_move */
|
||||
NULL, /* mouse_up */
|
||||
NULL /* mouse_down */
|
||||
};
|
||||
NULL, /* mouse_down */
|
||||
NULL, /* key */
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL};
|
||||
MwClass MwFrameClass = &MwFrameClassRec;
|
||||
|
||||
@@ -33,6 +33,11 @@ MwClassRec MwImageClassRec = {
|
||||
prop_change, /* prop_change */
|
||||
NULL, /* mouse_move */
|
||||
NULL, /* mouse_up */
|
||||
NULL /* mouse_down */
|
||||
};
|
||||
NULL, /* mouse_down */
|
||||
NULL, /* key */
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL};
|
||||
MwClass MwImageClass = &MwImageClassRec;
|
||||
|
||||
@@ -53,6 +53,11 @@ MwClassRec MwLabelClassRec = {
|
||||
prop_change, /* prop_change */
|
||||
NULL, /* mouse_move */
|
||||
NULL, /* mouse_up */
|
||||
NULL /* mouse_down */
|
||||
};
|
||||
NULL, /* mouse_down */
|
||||
NULL, /* key */
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL};
|
||||
MwClass MwLabelClass = &MwLabelClassRec;
|
||||
|
||||
@@ -175,8 +175,13 @@ MwClassRec MwMenuClassRec = {
|
||||
NULL, /* prop_change */
|
||||
NULL, /* mouse_move */
|
||||
mouse_up, /* mouse_up */
|
||||
mouse_down /* mouse_down */
|
||||
};
|
||||
mouse_down, /* mouse_down */
|
||||
NULL, /* key */
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL};
|
||||
MwClass MwMenuClass = &MwMenuClassRec;
|
||||
|
||||
MwMenu MwMenuAdd(MwWidget handle, MwMenu menu, const char* name) {
|
||||
|
||||
@@ -137,8 +137,13 @@ MwClassRec MwOpenGLClassRec = {
|
||||
NULL, /* prop_change */
|
||||
NULL, /* mouse_move */
|
||||
NULL, /* mouse_up */
|
||||
NULL /* mouse_down */
|
||||
};
|
||||
NULL, /* mouse_down */
|
||||
NULL, /* key */
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL};
|
||||
MwClass MwOpenGLClass = &MwOpenGLClassRec;
|
||||
|
||||
void MwOpenGLMakeCurrent(MwWidget handle) {
|
||||
|
||||
@@ -194,8 +194,13 @@ MwClassRec MwScrollBarClassRec = {
|
||||
prop_change, /* prop_change */
|
||||
mouse_move, /* mouse_move */
|
||||
MwForceRender, /* mouse_up */
|
||||
mouse_down /* mouse_down */
|
||||
};
|
||||
mouse_down, /* mouse_down */
|
||||
NULL, /* key */
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL};
|
||||
MwClass MwScrollBarClass = &MwScrollBarClassRec;
|
||||
|
||||
int MwScrollBarGetVisibleLength(MwWidget handle) {
|
||||
|
||||
@@ -155,8 +155,13 @@ MwClassRec MwSubMenuClassRec = {
|
||||
NULL, /* prop_change */
|
||||
NULL, /* mouse_move */
|
||||
MwForceRender, /* mouse_up */
|
||||
MwForceRender /* mouse_down */
|
||||
};
|
||||
MwForceRender, /* mouse_down */
|
||||
NULL, /* key */
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL};
|
||||
MwClass MwSubMenuClass = &MwSubMenuClassRec;
|
||||
|
||||
void MwSubMenuAppear(MwWidget handle, MwMenu menu, MwPoint* point) {
|
||||
|
||||
@@ -25,14 +25,19 @@ static void draw(MwWidget handle) {
|
||||
}
|
||||
|
||||
MwClassRec MwTextClassRec = {
|
||||
create, /* create */
|
||||
NULL, /* destroy */
|
||||
draw, /* draw */
|
||||
NULL, /* click */
|
||||
NULL, /* parent_resize */
|
||||
NULL, /* prop_change */
|
||||
NULL, /* mouse_move */
|
||||
NULL, /* mouse_up */
|
||||
NULL /* mouse_down */
|
||||
};
|
||||
create, /* create */
|
||||
NULL, /* destroy */
|
||||
draw, /* draw */
|
||||
NULL, /* click */
|
||||
NULL, /* parent_resize */
|
||||
NULL, /* prop_change */
|
||||
NULL, /* mouse_move */
|
||||
MwForceRender, /* mouse_up */
|
||||
MwForceRender, /* mouse_down */
|
||||
NULL, /* key */
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL};
|
||||
MwClass MwTextClass = &MwTextClassRec;
|
||||
|
||||
@@ -512,6 +512,11 @@ MwClassRec MwVulkanClassRec = {
|
||||
NULL, /* prop_change */
|
||||
NULL, /* mouse_move */
|
||||
NULL, /* mouse_up */
|
||||
NULL /* mouse_down */
|
||||
};
|
||||
NULL, /* mouse_down */
|
||||
NULL, /* key */
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL};
|
||||
MwClass MwVulkanClass = &MwVulkanClassRec;
|
||||
|
||||
@@ -30,8 +30,13 @@ MwClassRec MwWindowClassRec = {
|
||||
NULL, /* prop_change */
|
||||
NULL, /* mouse_move */
|
||||
NULL, /* mouse_up */
|
||||
NULL /* mouse_down */
|
||||
};
|
||||
NULL, /* mouse_down */
|
||||
NULL, /* key */
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL};
|
||||
MwClass MwWindowClass = &MwWindowClassRec;
|
||||
|
||||
void MwWindowSetIcon(MwWidget handle, MwLLPixmap pixmap) {
|
||||
|
||||
Reference in New Issue
Block a user