[PATCH] smoke:fix the segment fault error

Tiago Vignatti tiago.vignatti at linux.intel.com
Thu Feb 2 07:13:16 PST 2012


why do not cap that in the compositor instead?

@ -326,9 +326,13 @@ shell_surface_resize(struct wl_client *client, 
struct wl_re
                      struct wl_resource *input_resource, uint32_t time,
                      uint32_t edges)
  {
-       struct weston_input_device *wd = input_resource->data;
+       struct weston_input_device *wd;
         struct shell_surface *shsurf = resource->data;

+       if (!input_resource)
+               return;
+
+       wd = input_resource->data;


On 02/03/2012 01:02 AM, juan.j.zhao at linux.intel.com wrote:
> From: Juan Zhao<juan.j.zhao at linux.intel.com>
>
> Add widget_set_size in the initiate time to allow smoke get the
>   correct surface later. Or it will report segment fault error
>   because of the null surface.
> Also add resize_handler to not allow resizing just like flower.
>
> Signed-off-by: Juan Zhao<juan.j.zhao at linux.intel.com>
> ---
>   clients/smoke.c |   12 ++++++++++++
>   1 files changed, 12 insertions(+), 0 deletions(-)
>
> diff --git a/clients/smoke.c b/clients/smoke.c
> index c1665ce..69a1ac7 100644
> --- a/clients/smoke.c
> +++ b/clients/smoke.c
> @@ -249,6 +249,16 @@ smoke_motion_handler(struct widget *widget, struct input *input,
>   	return POINTER_HAND1;
>   }
>
> +static void
> +resize_handler(struct widget *widget,
> +	       int32_t width, int32_t height, void *data)
> +{
> +	struct smoke *smoke = data;
> +
> +	/* Dont resize me */
> +	widget_set_size(smoke->widget, smoke->width, smoke->height);
> +}
> +
>   int main(int argc, char *argv[])
>   {
>   	struct timespec ts;
> @@ -270,6 +280,7 @@ int main(int argc, char *argv[])
>   	smoke.window = window_create(d);
>   	smoke.widget = window_add_widget(smoke.window,&smoke);
>   	window_set_title(smoke.window, "smoke");
> +	widget_set_size(smoke.widget, smoke.width, smoke.height);
>
>   	window_set_buffer_type(smoke.window, WINDOW_BUFFER_TYPE_SHM);
>   	clock_gettime(CLOCK_MONOTONIC,&ts);
> @@ -291,6 +302,7 @@ int main(int argc, char *argv[])
>   	window_flush(smoke.window);
>
>   	widget_set_motion_handler(smoke.widget, smoke_motion_handler);
> +	widget_set_resize_handler(smoke.widget, resize_handler);
>
>   	window_set_user_data(smoke.window,&smoke);
>   	frame_callback(&smoke, NULL, 0);



More information about the wayland-devel mailing list