How does it crash? And when doing what? Giulio
2013/9/15 Axel Davy <[email protected]> > > This patch makes XWayland often crash for me. > > Axel Davy > > Le 11/09/2013 18:20, Giulio Camuffo a écrit : > >> add a new function pointer to the weston_shell_interface struct that >> shells will set accordingly. >> --- >> src/compositor.h | 2 ++ >> src/shell.c | 11 +++++++++-- >> src/xwayland/window-manager.c | 11 +++++++++++ >> 3 files changed, 22 insertions(+), 2 deletions(-) >> >> diff --git a/src/compositor.h b/src/compositor.h >> index 3c1b643..ead0c91 100644 >> --- a/src/compositor.h >> +++ b/src/compositor.h >> @@ -107,6 +107,8 @@ struct weston_shell_interface { >> int (*move)(struct shell_surface *shsurf, struct weston_seat *ws); >> int (*resize)(struct shell_surface *shsurf, >> struct weston_seat *ws, uint32_t edges); >> + void (*set_title)(struct shell_surface *shsurf, >> + const char *title); >> >> }; >> >> diff --git a/src/shell.c b/src/shell.c >> index dc15bfa..ea4315a 100644 >> --- a/src/shell.c >> +++ b/src/shell.c >> @@ -1595,13 +1595,19 @@ shell_surface_pong(struct wl_client *client, >> struct wl_resource *resource, >> } >> >> static void >> +set_title(struct shell_surface *shsurf, const char *title) >> +{ >> + free(shsurf->title); >> + shsurf->title = strdup(title); >> +} >> + >> +static void >> shell_surface_set_title(struct wl_client *client, >> struct wl_resource *resource, const char *title) >> { >> struct shell_surface *shsurf = wl_resource_get_user_data(** >> resource); >> >> - free(shsurf->title); >> - shsurf->title = strdup(title); >> + set_title(shsurf, title); >> } >> >> static void >> @@ -4583,6 +4589,7 @@ module_init(struct weston_compositor *ec, >> ec->shell_interface.set_**xwayland = set_xwayland; >> ec->shell_interface.move = surface_move; >> ec->shell_interface.resize = surface_resize; >> + ec->shell_interface.set_title = set_title; >> >> wl_list_init(&shell->input_**panel.surfaces); >> >> diff --git a/src/xwayland/window-manager.**c >> b/src/xwayland/window-manager.**c >> index f775734..b4f64d3 100644 >> --- a/src/xwayland/window-manager.**c >> +++ b/src/xwayland/window-manager.**c >> @@ -363,6 +363,8 @@ static void >> weston_wm_window_read_**properties(struct weston_wm_window *window) >> { >> struct weston_wm *wm = window->wm; >> + struct weston_shell_interface *shell_interface = >> + &wm->server->compositor->**shell_interface; >> >> #define F(field) offsetof(struct weston_wm_window, field) >> const struct { >> @@ -468,6 +470,9 @@ weston_wm_window_read_**properties(struct >> weston_wm_window *window) >> } >> free(reply); >> } >> + >> + if (window->shsurf && window->name) >> + shell_interface->set_title(**window->shsurf, >> window->name); >> } >> >> static void >> @@ -1875,6 +1880,9 @@ surface_destroy(struct wl_listener *listener, void >> *data) >> >> wm_log("surface for xid %d destroyed\n", window->id); >> >> + /* This should have been freed by the shell. >> + Don't try to use it later. */ >> + window->shsurf = NULL; >> window->surface = NULL; >> } >> >> @@ -2029,6 +2037,9 @@ xserver_map_shell_surface(**struct weston_wm *wm, >> window->surface, >> &shell_client); >> >> + if (window->name) >> + shell_interface->set_title(**window->shsurf, >> window->name); >> + >> if (window->fullscreen) { >> window->saved_width = window->width; >> window->saved_height = window->height; >> > > > > ______________________________**_________________ > wayland-devel mailing list > wayland-devel@lists.**freedesktop.org<[email protected]> > http://lists.freedesktop.org/**mailman/listinfo/wayland-devel<http://lists.freedesktop.org/mailman/listinfo/wayland-devel> >
_______________________________________________ wayland-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/wayland-devel
