Fix segfault, add wl_shell view
This commit is contained in:
parent
ed9a43c213
commit
acf58e04de
|
@ -6,8 +6,8 @@
|
|||
#include <wlr/types/wlr_xdg_shell_v6.h>
|
||||
|
||||
struct roots_wl_shell_surface {
|
||||
struct roots_view *view;
|
||||
// TODO
|
||||
void *_placeholder;
|
||||
};
|
||||
|
||||
struct roots_xdg_surface_v6 {
|
||||
|
@ -34,7 +34,7 @@ struct roots_view {
|
|||
// TODO: Something for roots-enforced width/height
|
||||
enum roots_view_type type;
|
||||
union {
|
||||
struct wlr_shell_surface *wl_shell_surface;
|
||||
struct wlr_wl_shell_surface *wl_shell_surface;
|
||||
struct wlr_xdg_surface_v6 *xdg_surface_v6;
|
||||
};
|
||||
union {
|
||||
|
|
|
@ -10,6 +10,6 @@ executable(
|
|||
'output.c',
|
||||
'pointer.c',
|
||||
'xdg_shell_v6.c',
|
||||
'wl_shell.c'
|
||||
'wl_shell.c',
|
||||
], dependencies: wlroots
|
||||
)
|
||||
|
|
|
@ -16,5 +16,21 @@ void handle_wl_shell_surface(struct wl_listener *listener, void *data) {
|
|||
|
||||
struct wlr_wl_shell_surface *surface = data;
|
||||
wlr_log(L_DEBUG, "new wl_shell surface");
|
||||
wlr_wl_shell_surface_ping(surface);
|
||||
//wlr_wl_shell_surface_ping(surface);
|
||||
|
||||
struct roots_wl_shell_surface *roots_surface =
|
||||
calloc(1, sizeof(struct roots_wl_shell_surface));
|
||||
// TODO: all of the trimmings
|
||||
|
||||
struct roots_view *view = calloc(1, sizeof(struct roots_view));
|
||||
view->type = ROOTS_WL_SHELL_VIEW;
|
||||
view->x = view->y = 200;
|
||||
view->wl_shell_surface = surface;
|
||||
view->roots_wl_shell_surface = roots_surface;
|
||||
//view->wlr_surface = surface->surface;
|
||||
//view->get_input_bounds = get_input_bounds;
|
||||
//view->activate = activate;
|
||||
view->desktop = desktop;
|
||||
roots_surface->view = view;
|
||||
wl_list_insert(&desktop->views, &view->link);
|
||||
}
|
||||
|
|
|
@ -116,8 +116,6 @@ static void wl_shell_get_shell_surface(struct wl_client *client,
|
|||
wlr_log(L_DEBUG, "New wl_shell %p (res %p)", state, shell_surface_resource);
|
||||
wl_resource_set_implementation(shell_surface_resource,
|
||||
&shell_surface_interface, state, destroy_shell_surface);
|
||||
wl_list_insert(&wlr_wl_shell->surfaces, &state->link);
|
||||
wl_signal_emit(&wlr_wl_shell->events.new_surface, state);
|
||||
|
||||
wl_signal_init(&state->events.ping_timeout);
|
||||
|
||||
|
@ -128,6 +126,9 @@ static void wl_shell_get_shell_surface(struct wl_client *client,
|
|||
if (state->ping_timer == NULL) {
|
||||
wl_client_post_no_memory(client);
|
||||
}
|
||||
|
||||
wl_list_insert(&wlr_wl_shell->surfaces, &state->link);
|
||||
wl_signal_emit(&wlr_wl_shell->events.new_surface, state);
|
||||
}
|
||||
|
||||
static struct wl_shell_interface wl_shell_impl = {
|
||||
|
@ -199,6 +200,5 @@ void wlr_wl_shell_surface_ping(struct wlr_wl_shell_surface *surface) {
|
|||
wl_display_next_serial(wl_client_get_display(surface->client));
|
||||
wl_event_source_timer_update(surface->ping_timer,
|
||||
surface->shell->ping_timeout);
|
||||
wl_shell_surface_send_ping(surface->surface,
|
||||
surface->ping_serial);
|
||||
wl_shell_surface_send_ping(surface->surface, surface->ping_serial);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue