wayland: misc fixes
All checks were successful
pyrite-dev/milsko/pipeline/head This commit looks good
All checks were successful
pyrite-dev/milsko/pipeline/head This commit looks good
This commit is contained in:
parent
0b7f8d3f67
commit
8eacf36c6a
2 changed files with 29 additions and 17 deletions
|
|
@ -527,6 +527,7 @@ struct _MwLLWayland {
|
||||||
MwI32 ox, oy;
|
MwI32 ox, oy;
|
||||||
MwU32 ww, wh; /* Window position */
|
MwU32 ww, wh; /* Window position */
|
||||||
MwPoint cur_mouse_pos; /* Currently known mouse position */
|
MwPoint cur_mouse_pos; /* Currently known mouse position */
|
||||||
|
MwLL currentlyHeldWidget;
|
||||||
|
|
||||||
int resizing;
|
int resizing;
|
||||||
int setting_wh;
|
int setting_wh;
|
||||||
|
|
|
||||||
|
|
@ -556,8 +556,6 @@ static void xdg_borderless_step(MwLL self, MwMouse p, MwU32 serial) {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
static MwLL currentlyHeldWidget = NULL;
|
|
||||||
|
|
||||||
static void relative_pointer_motion(void* data,
|
static void relative_pointer_motion(void* data,
|
||||||
struct zwp_relative_pointer_v1* pointer,
|
struct zwp_relative_pointer_v1* pointer,
|
||||||
uint32_t timeHi,
|
uint32_t timeHi,
|
||||||
|
|
@ -607,7 +605,8 @@ static void pointer_motion(void* data, struct wl_pointer* wl_pointer, MwU32 time
|
||||||
MwLL self = data;
|
MwLL self = data;
|
||||||
MwLL topmost_parent = self;
|
MwLL topmost_parent = self;
|
||||||
MwMouse p;
|
MwMouse p;
|
||||||
MwBool inArea = MwFALSE;
|
MwBool inArea = MwFALSE;
|
||||||
|
MwLL currentlyHeldWidget = NULL;
|
||||||
|
|
||||||
(void)time;
|
(void)time;
|
||||||
(void)wl_pointer;
|
(void)wl_pointer;
|
||||||
|
|
@ -615,13 +614,15 @@ static void pointer_motion(void* data, struct wl_pointer* wl_pointer, MwU32 time
|
||||||
WAYLAND_EVENT_OP_START(self);
|
WAYLAND_EVENT_OP_START(self);
|
||||||
while(topmost_parent->wayland.parent) topmost_parent = topmost_parent->wayland.parent;
|
while(topmost_parent->wayland.parent) topmost_parent = topmost_parent->wayland.parent;
|
||||||
|
|
||||||
if(currentlyHeldWidget == self || !currentlyHeldWidget) {
|
currentlyHeldWidget = topmost_parent->wayland.currentlyHeldWidget;
|
||||||
|
|
||||||
|
if(currentlyHeldWidget == self) {
|
||||||
self->wayland.cur_mouse_pos.x = wl_fixed_to_int(surface_x);
|
self->wayland.cur_mouse_pos.x = wl_fixed_to_int(surface_x);
|
||||||
self->wayland.cur_mouse_pos.y = wl_fixed_to_int(surface_y);
|
self->wayland.cur_mouse_pos.y = wl_fixed_to_int(surface_y);
|
||||||
p.point = self->wayland.cur_mouse_pos;
|
p.point = self->wayland.cur_mouse_pos;
|
||||||
MwLLDispatch(self, move, &p);
|
MwLLDispatch(self, move, &p);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(self->wayland.framebuffer.surface) {
|
if(self->wayland.framebuffer.surface) {
|
||||||
inArea |= self->wayland.framebuffer.surface == curSurface;
|
inArea |= self->wayland.framebuffer.surface == curSurface;
|
||||||
}
|
}
|
||||||
|
|
@ -630,6 +631,10 @@ static void pointer_motion(void* data, struct wl_pointer* wl_pointer, MwU32 time
|
||||||
inArea |= self->wayland.backbuffer.surface == curSurface;
|
inArea |= self->wayland.backbuffer.surface == curSurface;
|
||||||
}
|
}
|
||||||
if(inArea) {
|
if(inArea) {
|
||||||
|
self->wayland.cur_mouse_pos.x = wl_fixed_to_int(surface_x);
|
||||||
|
self->wayland.cur_mouse_pos.y = wl_fixed_to_int(surface_y);
|
||||||
|
p.point = self->wayland.cur_mouse_pos;
|
||||||
|
MwLLDispatch(self, move, &p);
|
||||||
wl_pointer_set_cursor(self->wayland.pointer, self->wayland.pointer_serial, self->wayland.cursor.surface, 0, 0);
|
wl_pointer_set_cursor(self->wayland.pointer, self->wayland.pointer_serial, self->wayland.cursor.surface, 0, 0);
|
||||||
}
|
}
|
||||||
WAYLAND_EVENT_OP_END(self);
|
WAYLAND_EVENT_OP_END(self);
|
||||||
|
|
@ -639,7 +644,8 @@ static void pointer_motion(void* data, struct wl_pointer* wl_pointer, MwU32 time
|
||||||
static void pointer_button(void* data, struct wl_pointer* wl_pointer, MwU32 serial, MwU32 time, MwU32 button, MwU32 state) {
|
static void pointer_button(void* data, struct wl_pointer* wl_pointer, MwU32 serial, MwU32 time, MwU32 button, MwU32 state) {
|
||||||
MwLL self = data;
|
MwLL self = data;
|
||||||
MwMouse p;
|
MwMouse p;
|
||||||
MwBool inArea = MwFALSE;
|
MwBool inArea = MwFALSE;
|
||||||
|
MwLL topmost_parent = self;
|
||||||
|
|
||||||
(void)wl_pointer;
|
(void)wl_pointer;
|
||||||
(void)serial;
|
(void)serial;
|
||||||
|
|
@ -648,6 +654,7 @@ static void pointer_button(void* data, struct wl_pointer* wl_pointer, MwU32 seri
|
||||||
WAYLAND_EVENT_OP_START(self);
|
WAYLAND_EVENT_OP_START(self);
|
||||||
|
|
||||||
p.point = self->wayland.cur_mouse_pos;
|
p.point = self->wayland.cur_mouse_pos;
|
||||||
|
while(topmost_parent->wayland.parent) topmost_parent = topmost_parent->wayland.parent;
|
||||||
|
|
||||||
if(self->wayland.framebuffer.surface) {
|
if(self->wayland.framebuffer.surface) {
|
||||||
inArea |= self->wayland.framebuffer.surface == curSurface;
|
inArea |= self->wayland.framebuffer.surface == curSurface;
|
||||||
|
|
@ -672,13 +679,13 @@ static void pointer_button(void* data, struct wl_pointer* wl_pointer, MwU32 seri
|
||||||
switch(state) {
|
switch(state) {
|
||||||
case WL_POINTER_BUTTON_STATE_PRESSED:
|
case WL_POINTER_BUTTON_STATE_PRESSED:
|
||||||
MwLLDispatch(self, down, &p);
|
MwLLDispatch(self, down, &p);
|
||||||
currentlyHeldWidget = self;
|
topmost_parent->wayland.currentlyHeldWidget = self;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case WL_POINTER_BUTTON_STATE_RELEASED:
|
case WL_POINTER_BUTTON_STATE_RELEASED:
|
||||||
if(currentlyHeldWidget != NULL) {
|
if(topmost_parent->wayland.currentlyHeldWidget != NULL) {
|
||||||
MwLLDispatch(currentlyHeldWidget, up, &p);
|
MwLLDispatch(topmost_parent->wayland.currentlyHeldWidget, up, &p);
|
||||||
currentlyHeldWidget = NULL;
|
topmost_parent->wayland.currentlyHeldWidget = NULL;
|
||||||
} else {
|
} else {
|
||||||
MwLLDispatch(self, up, &p);
|
MwLLDispatch(self, up, &p);
|
||||||
}
|
}
|
||||||
|
|
@ -1433,14 +1440,16 @@ static void region_setup(MwLL handle) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// wl_region_add(handle->wayland.o_region, 0, 0, width, height);
|
if(!handle->wayland.parent)
|
||||||
|
wl_region_add(handle->wayland.o_region, 0, 0, width, height);
|
||||||
|
|
||||||
if(handle->wayland.type == MwLL_WAYLAND_POPUP) {
|
if(handle->wayland.type == MwLL_WAYLAND_POPUP) {
|
||||||
wl_region_add(handle->wayland.region, 0, 0, width + abs(handle->wayland.x), height + abs(handle->wayland.y));
|
wl_region_add(handle->wayland.region, 0, 0, width + abs(handle->wayland.x), height + abs(handle->wayland.y));
|
||||||
} else {
|
} else {
|
||||||
wl_region_subtract(handle->wayland.region, 0, 0, width + abs(handle->wayland.x), height + abs(handle->wayland.y));
|
wl_region_subtract(handle->wayland.region, 0, 0, width + abs(handle->wayland.x), height + abs(handle->wayland.y));
|
||||||
wl_region_add(handle->wayland.region, handle->wayland.clipping_rect.x, handle->wayland.clipping_rect.y, handle->wayland.clipping_rect.width, handle->wayland.clipping_rect.height);
|
wl_region_add(handle->wayland.region, handle->wayland.clipping_rect.x, handle->wayland.clipping_rect.y, handle->wayland.clipping_rect.width, handle->wayland.clipping_rect.height);
|
||||||
// wl_region_add(handle->wayland.region, 0, 0, width, height);
|
if(!handle->wayland.parent)
|
||||||
|
wl_region_add(handle->wayland.region, 0, 0, width, height);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(handle->wayland.type == MwLL_WAYLAND_TOPLEVEL) {
|
if(handle->wayland.type == MwLL_WAYLAND_TOPLEVEL) {
|
||||||
|
|
@ -2044,9 +2053,9 @@ static void MwLLDestroyImpl(MwLL handle) {
|
||||||
|
|
||||||
free(handle);
|
free(handle);
|
||||||
|
|
||||||
if(currentlyHeldWidget == handle) {
|
// if(topmost_parent->wayland.currentlyHeldWidget == handle) {
|
||||||
currentlyHeldWidget = NULL;
|
// topmost_parent->wayland.currentlyHeldWidget = NULL;
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
static void MwLLGetXYWHImpl(MwLL handle, int* x, int* y, unsigned int* w, unsigned int* h) {
|
static void MwLLGetXYWHImpl(MwLL handle, int* x, int* y, unsigned int* w, unsigned int* h) {
|
||||||
|
|
@ -2742,7 +2751,9 @@ static void MwLLMakeToolWindowImpl(MwLL handle) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void MwLLGetCursorCoordImpl(MwLL handle, MwPoint* point) {
|
static void MwLLGetCursorCoordImpl(MwLL handle, MwPoint* point) {
|
||||||
|
MwLL topmost_parent = handle;
|
||||||
WIDGET_CHECK(handle);
|
WIDGET_CHECK(handle);
|
||||||
|
while(topmost_parent->wayland.parent) topmost_parent = topmost_parent->wayland.parent;
|
||||||
|
|
||||||
*point = handle->wayland.cur_mouse_pos;
|
*point = handle->wayland.cur_mouse_pos;
|
||||||
}
|
}
|
||||||
|
|
@ -2810,7 +2821,7 @@ static void MwLLEndStateChangeImpl(MwLL handle) {
|
||||||
wl_subsurface_place_above(child->wayland.sublevel->subsurface, handle->wayland.framebuffer.surface);
|
wl_subsurface_place_above(child->wayland.sublevel->subsurface, handle->wayland.framebuffer.surface);
|
||||||
MwLLEndStateChangeImpl(w->children[i]->lowlevel);
|
MwLLEndStateChangeImpl(w->children[i]->lowlevel);
|
||||||
|
|
||||||
currentlyHeldWidget = NULL;
|
topmost_parent->wayland.currentlyHeldWidget = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue