Skip to content
28 changes: 24 additions & 4 deletions anvil/src/shell/grabs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,12 @@ impl<BackendData: Backend> PointerGrab<AnvilState<BackendData>> for PointerMoveS
&self.start_data
}

fn unset(&mut self, _data: &mut AnvilState<BackendData>) {}
fn unset(
&mut self,
_data: &mut AnvilState<BackendData>,
_handle: &mut PointerInnerHandle<'_, AnvilState<BackendData>>,
) {
}
}

pub struct TouchMoveSurfaceGrab<BackendData: Backend + 'static> {
Expand Down Expand Up @@ -265,7 +270,12 @@ impl<BackendData: Backend> TouchGrab<AnvilState<BackendData>> for TouchMoveSurfa
&self.start_data
}

fn unset(&mut self, _data: &mut AnvilState<BackendData>) {}
fn unset(
&mut self,
_data: &mut AnvilState<BackendData>,
_handle: &mut smithay::input::touch::TouchInnerHandle<'_, AnvilState<BackendData>>,
) {
}
}

bitflags::bitflags! {
Expand Down Expand Up @@ -622,7 +632,12 @@ impl<BackendData: Backend> PointerGrab<AnvilState<BackendData>> for PointerResiz
&self.start_data
}

fn unset(&mut self, _data: &mut AnvilState<BackendData>) {}
fn unset(
&mut self,
_data: &mut AnvilState<BackendData>,
_handle: &mut PointerInnerHandle<'_, AnvilState<BackendData>>,
) {
}
}

pub struct TouchResizeSurfaceGrab<BackendData: Backend + 'static> {
Expand Down Expand Up @@ -865,5 +880,10 @@ impl<BackendData: Backend> TouchGrab<AnvilState<BackendData>> for TouchResizeSur
&self.start_data
}

fn unset(&mut self, _data: &mut AnvilState<BackendData>) {}
fn unset(
&mut self,
_data: &mut AnvilState<BackendData>,
_handle: &mut smithay::input::touch::TouchInnerHandle<'_, AnvilState<BackendData>>,
) {
}
}
12 changes: 11 additions & 1 deletion anvil/src/shell/xdg.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use std::cell::RefCell;

use smithay::{
desktop::{
PopupKeyboardGrab, PopupKind, PopupPointerGrab, PopupUngrabStrategy, Space, Window,
PopupKeyboardGrab, PopupKind, PopupPointerGrab, PopupTouchGrab, PopupUngrabStrategy, Space, Window,
WindowSurfaceType, find_popup_root_surface, get_popup_toplevel_coords, layer_map_for_output,
space::SpaceElement,
},
Expand Down Expand Up @@ -420,6 +420,16 @@ impl<BackendData: Backend> XdgShellHandler for AnvilState<BackendData> {
}
pointer.set_grab(self, PopupPointerGrab::new(&grab), serial, Focus::Keep);
}
if let Some(touch) = seat.get_touch() {
if touch.is_grabbed()
&& !(touch.has_grab(serial)
|| touch.has_grab(grab.previous_serial().unwrap_or_else(|| grab.serial())))
{
grab.ungrab(PopupUngrabStrategy::All);
return;
}
touch.set_grab(self, PopupTouchGrab::new(&grab), serial);
}
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion smallvil/src/grabs/move_grab.rs
Original file line number Diff line number Diff line change
Expand Up @@ -156,5 +156,5 @@ impl PointerGrab<Smallvil> for MoveSurfaceGrab {
&self.start_data
}

fn unset(&mut self, _data: &mut Smallvil) {}
fn unset(&mut self, _data: &mut Smallvil, _handle: &mut PointerInnerHandle<'_, Smallvil>) {}
}
2 changes: 1 addition & 1 deletion smallvil/src/grabs/resize_grab.rs
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,7 @@ impl PointerGrab<Smallvil> for ResizeSurfaceGrab {
&self.start_data
}

fn unset(&mut self, _data: &mut Smallvil) {}
fn unset(&mut self, _data: &mut Smallvil, _handle: &mut PointerInnerHandle<'_, Smallvil>) {}
}

/// State of the resize operation.
Expand Down
Loading
Loading