fix: xdg surface handle pending configure + dont update usable area when new layer surface firt create
This commit is contained in:
2
layer.c
2
layer.c
@ -352,7 +352,7 @@ void diyac_new_layer_surface(struct wl_listener *listener, void *data)
|
|||||||
*/
|
*/
|
||||||
struct wlr_layer_surface_v1_state old_state = layer_surface->current;
|
struct wlr_layer_surface_v1_state old_state = layer_surface->current;
|
||||||
layer_surface->current = layer_surface->pending;
|
layer_surface->current = layer_surface->pending;
|
||||||
diyac_output_update_usable_area(output);
|
// diyac_output_update_usable_area(output);
|
||||||
layer_surface->current = old_state;
|
layer_surface->current = old_state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
21
view.c
21
view.c
@ -26,10 +26,9 @@ static int handle_configure_timeout(void *data)
|
|||||||
return 0; /* ignored per wl_event_loop docs */
|
return 0; /* ignored per wl_event_loop docs */
|
||||||
}
|
}
|
||||||
|
|
||||||
static void diyac_view_configure(struct diyac_view *view, struct wlr_box geo)
|
void diya_view_set_pending_configure_serial(struct diyac_view* view, uint32_t serial)
|
||||||
{
|
{
|
||||||
view->pending_size = geo;
|
view->configuration_serial = serial;
|
||||||
view->configuration_serial = wlr_xdg_toplevel_set_size(view->xdg_toplevel, geo.width, geo.height);
|
|
||||||
if (!view->configuration_timeout)
|
if (!view->configuration_timeout)
|
||||||
{
|
{
|
||||||
view->configuration_timeout = wl_event_loop_add_timer(view->server->wl_event_loop, handle_configure_timeout, view);
|
view->configuration_timeout = wl_event_loop_add_timer(view->server->wl_event_loop, handle_configure_timeout, view);
|
||||||
@ -37,10 +36,24 @@ static void diyac_view_configure(struct diyac_view *view, struct wlr_box geo)
|
|||||||
wl_event_source_timer_update(view->configuration_timeout, CONFIGURE_TIMEOUT_MS);
|
wl_event_source_timer_update(view->configuration_timeout, CONFIGURE_TIMEOUT_MS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void diyac_view_configure(struct diyac_view *view, struct wlr_box geo)
|
||||||
|
{
|
||||||
|
view->pending_size = geo;
|
||||||
|
uint32_t serial = wlr_xdg_toplevel_set_size(view->xdg_toplevel, geo.width, geo.height);
|
||||||
|
if(serial > 0)
|
||||||
|
{
|
||||||
|
diya_view_set_pending_configure_serial(view, serial);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void diyac_view_set_activated(struct diyac_view *view, bool activated)
|
static void diyac_view_set_activated(struct diyac_view *view, bool activated)
|
||||||
{
|
{
|
||||||
struct diyac_server *server = view->server;
|
struct diyac_server *server = view->server;
|
||||||
wlr_xdg_toplevel_set_activated(view->xdg_toplevel, activated);
|
uint32_t serial = wlr_xdg_toplevel_set_activated(view->xdg_toplevel, activated);
|
||||||
|
if(serial > 0)
|
||||||
|
{
|
||||||
|
diya_view_set_pending_configure_serial(view, serial);
|
||||||
|
}
|
||||||
if (view->toplevel.handle)
|
if (view->toplevel.handle)
|
||||||
{
|
{
|
||||||
wlr_foreign_toplevel_handle_v1_set_activated(view->toplevel.handle, activated);
|
wlr_foreign_toplevel_handle_v1_set_activated(view->toplevel.handle, activated);
|
||||||
|
1
view.h
1
view.h
@ -22,4 +22,5 @@ void diyac_view_update_title(struct diyac_view * view);
|
|||||||
void diyac_view_update_app_id(struct diyac_view * view);
|
void diyac_view_update_app_id(struct diyac_view * view);
|
||||||
void diyac_view_sync_geo(struct diyac_view *view);
|
void diyac_view_sync_geo(struct diyac_view *view);
|
||||||
void diya_view_unfocus(struct diyac_view* view);
|
void diya_view_unfocus(struct diyac_view* view);
|
||||||
|
void diya_view_set_pending_configure_serial(struct diyac_view* view, uint32_t serial);
|
||||||
#endif
|
#endif
|
4
xdg.c
4
xdg.c
@ -65,6 +65,10 @@ static void xdg_toplevel_commit(struct wl_listener *listener, void *data)
|
|||||||
wlr_xdg_surface_schedule_configure(xdg_surface);
|
wlr_xdg_surface_schedule_configure(xdg_surface);
|
||||||
uint32_t wm_caps = WLR_XDG_TOPLEVEL_WM_CAPABILITIES_MAXIMIZE | WLR_XDG_TOPLEVEL_WM_CAPABILITIES_FULLSCREEN | WLR_XDG_TOPLEVEL_WM_CAPABILITIES_MINIMIZE;
|
uint32_t wm_caps = WLR_XDG_TOPLEVEL_WM_CAPABILITIES_MAXIMIZE | WLR_XDG_TOPLEVEL_WM_CAPABILITIES_FULLSCREEN | WLR_XDG_TOPLEVEL_WM_CAPABILITIES_MINIMIZE;
|
||||||
wlr_xdg_toplevel_set_wm_capabilities(toplevel->xdg_toplevel, wm_caps);
|
wlr_xdg_toplevel_set_wm_capabilities(toplevel->xdg_toplevel, wm_caps);
|
||||||
|
if(serial > 0)
|
||||||
|
{
|
||||||
|
diya_view_set_pending_configure_serial(toplevel, serial);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user