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);
};
}
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
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);
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 {
}
free(reply);
}
+
+ if (window->shsurf && window->name)
+ shell_interface->set_title(window->shsurf, window->name);
}
static void
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;
}
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;