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>
|
#include <wlr/types/wlr_xdg_shell_v6.h>
|
||||||
|
|
||||||
struct roots_wl_shell_surface {
|
struct roots_wl_shell_surface {
|
||||||
|
struct roots_view *view;
|
||||||
// TODO
|
// TODO
|
||||||
void *_placeholder;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct roots_xdg_surface_v6 {
|
struct roots_xdg_surface_v6 {
|
||||||
|
@ -34,7 +34,7 @@ struct roots_view {
|
||||||
// TODO: Something for roots-enforced width/height
|
// TODO: Something for roots-enforced width/height
|
||||||
enum roots_view_type type;
|
enum roots_view_type type;
|
||||||
union {
|
union {
|
||||||
struct wlr_shell_surface *wl_shell_surface;
|
struct wlr_wl_shell_surface *wl_shell_surface;
|
||||||
struct wlr_xdg_surface_v6 *xdg_surface_v6;
|
struct wlr_xdg_surface_v6 *xdg_surface_v6;
|
||||||
};
|
};
|
||||||
union {
|
union {
|
||||||
|
|
|
@ -10,6 +10,6 @@ executable(
|
||||||
'output.c',
|
'output.c',
|
||||||
'pointer.c',
|
'pointer.c',
|
||||||
'xdg_shell_v6.c',
|
'xdg_shell_v6.c',
|
||||||
'wl_shell.c'
|
'wl_shell.c',
|
||||||
], dependencies: wlroots
|
], dependencies: wlroots
|
||||||
)
|
)
|
||||||
|
|
|
@ -16,5 +16,21 @@ void handle_wl_shell_surface(struct wl_listener *listener, void *data) {
|
||||||
|
|
||||||
struct wlr_wl_shell_surface *surface = data;
|
struct wlr_wl_shell_surface *surface = data;
|
||||||
wlr_log(L_DEBUG, "new wl_shell surface");
|
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);
|
wlr_log(L_DEBUG, "New wl_shell %p (res %p)", state, shell_surface_resource);
|
||||||
wl_resource_set_implementation(shell_surface_resource,
|
wl_resource_set_implementation(shell_surface_resource,
|
||||||
&shell_surface_interface, state, destroy_shell_surface);
|
&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);
|
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) {
|
if (state->ping_timer == NULL) {
|
||||||
wl_client_post_no_memory(client);
|
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 = {
|
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_display_next_serial(wl_client_get_display(surface->client));
|
||||||
wl_event_source_timer_update(surface->ping_timer,
|
wl_event_source_timer_update(surface->ping_timer,
|
||||||
surface->shell->ping_timeout);
|
surface->shell->ping_timeout);
|
||||||
wl_shell_surface_send_ping(surface->surface,
|
wl_shell_surface_send_ping(surface->surface, surface->ping_serial);
|
||||||
surface->ping_serial);
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue