mirror of
https://github.com/hyprwm/wlroots-hyprland.git
synced 2024-11-09 15:05:58 +01:00
xdg-shell-v6: next_geometry and geometry fields are not longer pointers in wlr_xdg_surface_v6
This commit is contained in:
parent
149209b72e
commit
ace738dbca
3 changed files with 32 additions and 56 deletions
|
@ -109,8 +109,8 @@ struct wlr_xdg_surface_v6 {
|
||||||
char *app_id;
|
char *app_id;
|
||||||
|
|
||||||
bool has_next_geometry;
|
bool has_next_geometry;
|
||||||
struct wlr_box *next_geometry;
|
struct wlr_box next_geometry;
|
||||||
struct wlr_box *geometry; // TODO: should not be a pointer
|
struct wlr_box geometry;
|
||||||
|
|
||||||
struct wl_listener surface_destroy_listener;
|
struct wl_listener surface_destroy_listener;
|
||||||
|
|
||||||
|
|
|
@ -60,9 +60,9 @@ static void get_size(const struct roots_view *view, struct wlr_box *box) {
|
||||||
assert(view->type == ROOTS_XDG_SHELL_V6_VIEW);
|
assert(view->type == ROOTS_XDG_SHELL_V6_VIEW);
|
||||||
struct wlr_xdg_surface_v6 *surface = view->xdg_surface_v6;
|
struct wlr_xdg_surface_v6 *surface = view->xdg_surface_v6;
|
||||||
|
|
||||||
if (surface->geometry->width > 0 && surface->geometry->height > 0) {
|
if (surface->geometry.width > 0 && surface->geometry.height > 0) {
|
||||||
box->width = surface->geometry->width;
|
box->width = surface->geometry.width;
|
||||||
box->height = surface->geometry->height;
|
box->height = surface->geometry.height;
|
||||||
} else if (view->wlr_surface != NULL) {
|
} else if (view->wlr_surface != NULL) {
|
||||||
box->width = view->wlr_surface->current->width;
|
box->width = view->wlr_surface->current->width;
|
||||||
box->height = view->wlr_surface->current->height;
|
box->height = view->wlr_surface->current->height;
|
||||||
|
|
|
@ -217,8 +217,8 @@ static void xdg_surface_unmap(struct wlr_xdg_surface_v6 *surface) {
|
||||||
}
|
}
|
||||||
|
|
||||||
surface->has_next_geometry = false;
|
surface->has_next_geometry = false;
|
||||||
memset(surface->geometry, 0, sizeof(struct wlr_box));
|
memset(&surface->geometry, 0, sizeof(struct wlr_box));
|
||||||
memset(surface->next_geometry, 0, sizeof(struct wlr_box));
|
memset(&surface->next_geometry, 0, sizeof(struct wlr_box));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void xdg_surface_destroy(struct wlr_xdg_surface_v6 *surface) {
|
static void xdg_surface_destroy(struct wlr_xdg_surface_v6 *surface) {
|
||||||
|
@ -232,8 +232,6 @@ static void xdg_surface_destroy(struct wlr_xdg_surface_v6 *surface) {
|
||||||
wl_list_remove(&surface->link);
|
wl_list_remove(&surface->link);
|
||||||
wl_list_remove(&surface->surface_destroy_listener.link);
|
wl_list_remove(&surface->surface_destroy_listener.link);
|
||||||
wlr_surface_set_role_committed(surface->surface, NULL, NULL);
|
wlr_surface_set_role_committed(surface->surface, NULL, NULL);
|
||||||
free(surface->geometry);
|
|
||||||
free(surface->next_geometry);
|
|
||||||
free(surface);
|
free(surface);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -945,10 +943,10 @@ static void xdg_surface_handle_set_window_geometry(struct wl_client *client,
|
||||||
}
|
}
|
||||||
|
|
||||||
surface->has_next_geometry = true;
|
surface->has_next_geometry = true;
|
||||||
surface->next_geometry->height = height;
|
surface->next_geometry.height = height;
|
||||||
surface->next_geometry->width = width;
|
surface->next_geometry.width = width;
|
||||||
surface->next_geometry->x = x;
|
surface->next_geometry.x = x;
|
||||||
surface->next_geometry->y = y;
|
surface->next_geometry.y = y;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void xdg_surface_handle_destroy(struct wl_client *client,
|
static void xdg_surface_handle_destroy(struct wl_client *client,
|
||||||
|
@ -1073,11 +1071,6 @@ static void wlr_xdg_toplevel_v6_send_configure(
|
||||||
uint32_t width = surface->toplevel->pending.width;
|
uint32_t width = surface->toplevel->pending.width;
|
||||||
uint32_t height = surface->toplevel->pending.height;
|
uint32_t height = surface->toplevel->pending.height;
|
||||||
|
|
||||||
if (width == 0 || height == 0) {
|
|
||||||
width = surface->geometry->width;
|
|
||||||
height = surface->geometry->height;
|
|
||||||
}
|
|
||||||
|
|
||||||
zxdg_toplevel_v6_send_configure(surface->toplevel->resource, width,
|
zxdg_toplevel_v6_send_configure(surface->toplevel->resource, width,
|
||||||
height, &states);
|
height, &states);
|
||||||
|
|
||||||
|
@ -1217,10 +1210,10 @@ static void handle_wlr_surface_committed(struct wlr_surface *wlr_surface,
|
||||||
|
|
||||||
if (surface->has_next_geometry) {
|
if (surface->has_next_geometry) {
|
||||||
surface->has_next_geometry = false;
|
surface->has_next_geometry = false;
|
||||||
surface->geometry->x = surface->next_geometry->x;
|
surface->geometry.x = surface->next_geometry.x;
|
||||||
surface->geometry->y = surface->next_geometry->y;
|
surface->geometry.y = surface->next_geometry.y;
|
||||||
surface->geometry->width = surface->next_geometry->width;
|
surface->geometry.width = surface->next_geometry.width;
|
||||||
surface->geometry->height = surface->next_geometry->height;
|
surface->geometry.height = surface->next_geometry.height;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (surface->role) {
|
switch (surface->role) {
|
||||||
|
@ -1268,21 +1261,9 @@ static void xdg_shell_handle_get_xdg_surface(struct wl_client *wl_client,
|
||||||
struct wlr_xdg_client_v6 *client =
|
struct wlr_xdg_client_v6 *client =
|
||||||
xdg_client_from_resource(client_resource);
|
xdg_client_from_resource(client_resource);
|
||||||
|
|
||||||
struct wlr_xdg_surface_v6 *surface;
|
struct wlr_xdg_surface_v6 *surface =
|
||||||
if (!(surface = calloc(1, sizeof(struct wlr_xdg_surface_v6)))) {
|
calloc(1, sizeof(struct wlr_xdg_surface_v6));
|
||||||
wl_client_post_no_memory(wl_client);
|
if (surface == NULL) {
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(surface->geometry = calloc(1, sizeof(struct wlr_box)))) {
|
|
||||||
free(surface);
|
|
||||||
wl_client_post_no_memory(wl_client);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(surface->next_geometry = calloc(1, sizeof(struct wlr_box)))) {
|
|
||||||
free(surface->geometry);
|
|
||||||
free(surface);
|
|
||||||
wl_client_post_no_memory(wl_client);
|
wl_client_post_no_memory(wl_client);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1294,8 +1275,6 @@ static void xdg_shell_handle_get_xdg_surface(struct wl_client *wl_client,
|
||||||
&zxdg_surface_v6_interface, wl_resource_get_version(client_resource),
|
&zxdg_surface_v6_interface, wl_resource_get_version(client_resource),
|
||||||
id);
|
id);
|
||||||
if (surface->resource == NULL) {
|
if (surface->resource == NULL) {
|
||||||
free(surface->next_geometry);
|
|
||||||
free(surface->geometry);
|
|
||||||
free(surface);
|
free(surface);
|
||||||
wl_client_post_no_memory(wl_client);
|
wl_client_post_no_memory(wl_client);
|
||||||
return;
|
return;
|
||||||
|
@ -1303,8 +1282,6 @@ static void xdg_shell_handle_get_xdg_surface(struct wl_client *wl_client,
|
||||||
|
|
||||||
if (wlr_surface_has_buffer(surface->surface)) {
|
if (wlr_surface_has_buffer(surface->surface)) {
|
||||||
wl_resource_destroy(surface->resource);
|
wl_resource_destroy(surface->resource);
|
||||||
free(surface->next_geometry);
|
|
||||||
free(surface->geometry);
|
|
||||||
free(surface);
|
free(surface);
|
||||||
wl_resource_post_error(surface_resource,
|
wl_resource_post_error(surface_resource,
|
||||||
ZXDG_SURFACE_V6_ERROR_UNCONFIGURED_BUFFER,
|
ZXDG_SURFACE_V6_ERROR_UNCONFIGURED_BUFFER,
|
||||||
|
@ -1500,7 +1477,6 @@ uint32_t wlr_xdg_toplevel_v6_set_size(struct wlr_xdg_surface_v6 *surface,
|
||||||
assert(surface->role == WLR_XDG_SURFACE_V6_ROLE_TOPLEVEL);
|
assert(surface->role == WLR_XDG_SURFACE_V6_ROLE_TOPLEVEL);
|
||||||
surface->toplevel->pending.width = width;
|
surface->toplevel->pending.width = width;
|
||||||
surface->toplevel->pending.height = height;
|
surface->toplevel->pending.height = height;
|
||||||
wlr_log(L_DEBUG, "wlr_xdg_toplevel_v6_set_size %d", width);
|
|
||||||
|
|
||||||
return wlr_xdg_surface_v6_schedule_configure(surface);
|
return wlr_xdg_surface_v6_schedule_configure(surface);
|
||||||
}
|
}
|
||||||
|
@ -1546,10 +1522,10 @@ void wlr_xdg_surface_v6_popup_get_position(struct wlr_xdg_surface_v6 *surface,
|
||||||
double *popup_sx, double *popup_sy) {
|
double *popup_sx, double *popup_sy) {
|
||||||
assert(surface->role == WLR_XDG_SURFACE_V6_ROLE_POPUP);
|
assert(surface->role == WLR_XDG_SURFACE_V6_ROLE_POPUP);
|
||||||
struct wlr_xdg_surface_v6 *parent = surface->popup->parent;
|
struct wlr_xdg_surface_v6 *parent = surface->popup->parent;
|
||||||
*popup_sx = parent->geometry->x + surface->popup->geometry.x -
|
*popup_sx = parent->geometry.x + surface->popup->geometry.x -
|
||||||
surface->geometry->x;
|
surface->geometry.x;
|
||||||
*popup_sy = parent->geometry->y + surface->popup->geometry.y -
|
*popup_sy = parent->geometry.y + surface->popup->geometry.y -
|
||||||
surface->geometry->y;
|
surface->geometry.y;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct wlr_xdg_surface_v6 *wlr_xdg_surface_v6_popup_at(
|
struct wlr_xdg_surface_v6 *wlr_xdg_surface_v6_popup_at(
|
||||||
|
@ -1563,30 +1539,30 @@ struct wlr_xdg_surface_v6 *wlr_xdg_surface_v6_popup_at(
|
||||||
struct wlr_xdg_surface_v6 *popup = popup_state->base;
|
struct wlr_xdg_surface_v6 *popup = popup_state->base;
|
||||||
|
|
||||||
double _popup_sx =
|
double _popup_sx =
|
||||||
surface->geometry->x + popup_state->geometry.x;
|
surface->geometry.x + popup_state->geometry.x;
|
||||||
double _popup_sy =
|
double _popup_sy =
|
||||||
surface->geometry->y + popup_state->geometry.y;
|
surface->geometry.y + popup_state->geometry.y;
|
||||||
int popup_width = popup_state->geometry.width;
|
int popup_width = popup_state->geometry.width;
|
||||||
int popup_height = popup_state->geometry.height;
|
int popup_height = popup_state->geometry.height;
|
||||||
|
|
||||||
struct wlr_xdg_surface_v6 *_popup =
|
struct wlr_xdg_surface_v6 *_popup =
|
||||||
wlr_xdg_surface_v6_popup_at(popup,
|
wlr_xdg_surface_v6_popup_at(popup,
|
||||||
sx - _popup_sx + popup->geometry->x,
|
sx - _popup_sx + popup->geometry.x,
|
||||||
sy - _popup_sy + popup->geometry->y,
|
sy - _popup_sy + popup->geometry.y,
|
||||||
popup_sx, popup_sy);
|
popup_sx, popup_sy);
|
||||||
if (_popup) {
|
if (_popup) {
|
||||||
*popup_sx = *popup_sx + _popup_sx - popup->geometry->x;
|
*popup_sx = *popup_sx + _popup_sx - popup->geometry.x;
|
||||||
*popup_sy = *popup_sy + _popup_sy - popup->geometry->y;
|
*popup_sy = *popup_sy + _popup_sy - popup->geometry.y;
|
||||||
return _popup;
|
return _popup;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((sx > _popup_sx && sx < _popup_sx + popup_width) &&
|
if ((sx > _popup_sx && sx < _popup_sx + popup_width) &&
|
||||||
(sy > _popup_sy && sy < _popup_sy + popup_height)) {
|
(sy > _popup_sy && sy < _popup_sy + popup_height)) {
|
||||||
if (pixman_region32_contains_point(&popup->surface->current->input,
|
if (pixman_region32_contains_point(&popup->surface->current->input,
|
||||||
sx - _popup_sx + popup->geometry->x,
|
sx - _popup_sx + popup->geometry.x,
|
||||||
sy - _popup_sy + popup->geometry->y, NULL)) {
|
sy - _popup_sy + popup->geometry.y, NULL)) {
|
||||||
*popup_sx = _popup_sx - popup->geometry->x;
|
*popup_sx = _popup_sx - popup->geometry.x;
|
||||||
*popup_sy = _popup_sy - popup->geometry->y;
|
*popup_sy = _popup_sy - popup->geometry.y;
|
||||||
return popup;
|
return popup;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue