[PATCH weston v2] xwm: set the shell_surface's title

Giulio Camuffo giuliocamuffo at gmail.com
Mon Sep 16 02:39:44 PDT 2013


How does it crash? And when doing what?

Giulio


2013/9/15 Axel Davy <davy at clipper.ens.fr>

>
> 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 at lists.**freedesktop.org<wayland-devel at lists.freedesktop.org>
> http://lists.freedesktop.org/**mailman/listinfo/wayland-devel<http://lists.freedesktop.org/mailman/listinfo/wayland-devel>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/wayland-devel/attachments/20130916/3996d971/attachment.html>


More information about the wayland-devel mailing list