@@ -468,10 +468,11 @@ meta_wayland_surface_state_merge_into (MetaWaylandSurfaceState *from,
468468
469469 to -> newly_attached = TRUE;
470470 to -> buffer = from -> buffer ;
471- to -> dx = from -> dx ;
472- to -> dy = from -> dy ;
473471 }
474472
473+ to -> dx = from -> dx ;
474+ to -> dy = from -> dy ;
475+
475476 wl_list_insert_list (& to -> frame_callback_list , & from -> frame_callback_list );
476477
477478 cairo_region_union (to -> surface_damage , from -> surface_damage );
@@ -925,6 +926,16 @@ wl_surface_attach (struct wl_client *client,
925926 pending -> buffer );
926927 }
927928
929+ if (wl_resource_get_version (surface_resource ) >=
930+ WL_SURFACE_OFFSET_SINCE_VERSION &&
931+ (dx != 0 || dy != 0 ))
932+ {
933+ wl_resource_post_error (surface_resource ,
934+ WL_SURFACE_ERROR_INVALID_OFFSET ,
935+ "Attaching with an offset is no longer allowed" );
936+ return ;
937+ }
938+
928939 pending -> newly_attached = TRUE;
929940 pending -> buffer = buffer ;
930941 pending -> dx = dx ;
@@ -1153,6 +1164,20 @@ wl_surface_damage_buffer (struct wl_client *client,
11531164 cairo_region_union_rectangle (pending -> buffer_damage , & rectangle );
11541165}
11551166
1167+ static void
1168+ wl_surface_offset (struct wl_client * client ,
1169+ struct wl_resource * surface_resource ,
1170+ int32_t dx ,
1171+ int32_t dy )
1172+ {
1173+ MetaWaylandSurface * surface = wl_resource_get_user_data (surface_resource );
1174+ MetaWaylandSurfaceState * pending = surface -> pending_state ;
1175+
1176+ pending -> dx = dx ;
1177+ pending -> dy = dy ;
1178+ }
1179+
1180+
11561181static const struct wl_surface_interface meta_wayland_wl_surface_interface = {
11571182 wl_surface_destroy ,
11581183 wl_surface_attach ,
@@ -1164,6 +1189,7 @@ static const struct wl_surface_interface meta_wayland_wl_surface_interface = {
11641189 wl_surface_set_buffer_transform ,
11651190 wl_surface_set_buffer_scale ,
11661191 wl_surface_damage_buffer ,
1192+ wl_surface_offset ,
11671193};
11681194
11691195static void
0 commit comments