This commit is contained in:
parent
1dda7934ce
commit
e81156708c
3 changed files with 7 additions and 10 deletions
|
|
@ -433,8 +433,6 @@ struct _MwLLWayland {
|
||||||
|
|
||||||
MwBool dispatching_resize;
|
MwBool dispatching_resize;
|
||||||
|
|
||||||
MwBool is_toplevel_menu;
|
|
||||||
|
|
||||||
struct _MwLLWaylandShmBuffer framebuffer;
|
struct _MwLLWaylandShmBuffer framebuffer;
|
||||||
struct _MwLLWaylandShmBuffer backbuffer;
|
struct _MwLLWaylandShmBuffer backbuffer;
|
||||||
struct _MwLLWaylandShmBuffer cursor;
|
struct _MwLLWaylandShmBuffer cursor;
|
||||||
|
|
@ -491,6 +489,9 @@ void MwLLWaylandClipboardRead(wl_clipboard_device_context_t* ctx, int clipboard_
|
||||||
/* Flush Wayland events */
|
/* Flush Wayland events */
|
||||||
void MwLLWaylandFlush(MwLL handle);
|
void MwLLWaylandFlush(MwLL handle);
|
||||||
|
|
||||||
|
/* recursively dispatch the key event to focused widgets. */
|
||||||
|
void MwLLRecursiveKeyDispatch(MwLL self, int* k, MwBool down);
|
||||||
|
|
||||||
/* Standard procedure before event callbacks in Wayland */
|
/* Standard procedure before event callbacks in Wayland */
|
||||||
#define WAYLAND_EVENT_OP_START(self)
|
#define WAYLAND_EVENT_OP_START(self)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1000,7 +1000,7 @@ static void keyboard_leave(void* data,
|
||||||
WAYLAND_EVENT_OP_END(self);
|
WAYLAND_EVENT_OP_END(self);
|
||||||
};
|
};
|
||||||
|
|
||||||
static void key_dispatch(MwLL self, int* k, MwBool down) {
|
void MwLLRecursiveKeyDispatch(MwLL self, int* k, MwBool down) {
|
||||||
if(self->common.user) {
|
if(self->common.user) {
|
||||||
MwWidget w = self->common.user;
|
MwWidget w = self->common.user;
|
||||||
int i, n;
|
int i, n;
|
||||||
|
|
@ -1019,7 +1019,7 @@ static void key_dispatch(MwLL self, int* k, MwBool down) {
|
||||||
MwLLDispatch(child, key_released, k);
|
MwLLDispatch(child, key_released, k);
|
||||||
}
|
}
|
||||||
|
|
||||||
key_dispatch(child, k, down);
|
MwLLRecursiveKeyDispatch(child, k, down);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1141,7 +1141,7 @@ static void keyboard_key(void* data,
|
||||||
} else {
|
} else {
|
||||||
self->wayland.holding_key = MwFALSE;
|
self->wayland.holding_key = MwFALSE;
|
||||||
}
|
}
|
||||||
key_dispatch(self, &key, state == WL_KEYBOARD_KEY_STATE_PRESSED);
|
MwLLRecursiveKeyDispatch(self, &key, state == WL_KEYBOARD_KEY_STATE_PRESSED);
|
||||||
self->wayland.start_time = MwTimeGetTick();
|
self->wayland.start_time = MwTimeGetTick();
|
||||||
self->wayland.next_elapsed = self->wayland.keyboard_delay;
|
self->wayland.next_elapsed = self->wayland.keyboard_delay;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1376,11 +1376,7 @@ static int MwLLPendingImpl(MwLL handle) {
|
||||||
if(handle->wayland.holding_key) {
|
if(handle->wayland.holding_key) {
|
||||||
float elapsed = ((float)(handle->wayland.end_time - (float)handle->wayland.start_time));
|
float elapsed = ((float)(handle->wayland.end_time - (float)handle->wayland.start_time));
|
||||||
if(elapsed >= handle->wayland.next_elapsed) {
|
if(elapsed >= handle->wayland.next_elapsed) {
|
||||||
MwLL topmost_parent = handle;
|
MwLLRecursiveKeyDispatch(handle, &handle->wayland.last_pressed_key, MwTRUE);
|
||||||
while(topmost_parent->wayland.parent) {
|
|
||||||
MwLLDispatch(topmost_parent, key, &handle->wayland.last_pressed_key);
|
|
||||||
topmost_parent = topmost_parent->wayland.parent;
|
|
||||||
}
|
|
||||||
handle->wayland.next_elapsed = elapsed + handle->wayland.keyboard_rate;
|
handle->wayland.next_elapsed = elapsed + handle->wayland.keyboard_rate;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue