@ -220,6 +220,13 @@ data_offer_finish(struct wl_client *client, struct wl_resource *resource)
if ( ! offer - > source | | offer - > source - > offer ! = offer )
if ( ! offer - > source | | offer - > source - > offer ! = offer )
return ;
return ;
if ( offer - > source - > set_selection ) {
wl_resource_post_error ( offer - > resource ,
WL_DATA_OFFER_ERROR_INVALID_FINISH ,
" finish only valid for drag n drop " ) ;
return ;
}
/* Disallow finish while we have a grab driving drag-and-drop, or
/* Disallow finish while we have a grab driving drag-and-drop, or
* if the negotiation is not at the right stage
* if the negotiation is not at the right stage
*/
*/
@ -1145,6 +1152,7 @@ weston_seat_set_selection(struct weston_seat *seat,
seat - > selection_data_source = source ;
seat - > selection_data_source = source ;
seat - > selection_serial = serial ;
seat - > selection_serial = serial ;
source - > set_selection = true ;
if ( keyboard )
if ( keyboard )
focus = keyboard - > focus ;
focus = keyboard - > focus ;
@ -1267,6 +1275,7 @@ create_data_source(struct wl_client *client,
source - > dnd_actions = 0 ;
source - > dnd_actions = 0 ;
source - > current_dnd_action = WL_DATA_DEVICE_MANAGER_DND_ACTION_NONE ;
source - > current_dnd_action = WL_DATA_DEVICE_MANAGER_DND_ACTION_NONE ;
source - > compositor_action = WL_DATA_DEVICE_MANAGER_DND_ACTION_NONE ;
source - > compositor_action = WL_DATA_DEVICE_MANAGER_DND_ACTION_NONE ;
source - > set_selection = false ;
wl_array_init ( & source - > mime_types ) ;
wl_array_init ( & source - > mime_types ) ;