shell: Fix repeated window grabs
This commit is contained in:
parent
1a8432395c
commit
33eedb0b58
1 changed files with 18 additions and 2 deletions
|
|
@ -222,7 +222,7 @@ impl MoveSurfaceGrab {
|
||||||
// No more buttons are pressed, release the grab.
|
// No more buttons are pressed, release the grab.
|
||||||
let output = self.seat.active_output();
|
let output = self.seat.active_output();
|
||||||
|
|
||||||
if let Some(grab_state) = self
|
let offset = if let Some(grab_state) = self
|
||||||
.seat
|
.seat
|
||||||
.user_data()
|
.user_data()
|
||||||
.get::<SeatMoveGrabState>()
|
.get::<SeatMoveGrabState>()
|
||||||
|
|
@ -266,11 +266,27 @@ impl MoveSurfaceGrab {
|
||||||
.active_space_mut(&output)
|
.active_space_mut(&output)
|
||||||
.floating_layer
|
.floating_layer
|
||||||
.map_internal(grab_state.window, &output, Some(window_location + offset));
|
.map_internal(grab_state.window, &output, Some(window_location + offset));
|
||||||
|
Some(grab_state.window_offset)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
|
||||||
handle.unset_grab(state, serial, time);
|
handle.unset_grab(state, serial, time);
|
||||||
if self.window.alive() {
|
if self.window.alive() {
|
||||||
|
if let Some(offset) = offset {
|
||||||
|
handle.motion(
|
||||||
|
state,
|
||||||
|
Some((PointerFocusTarget::from(self.window.clone()), offset)),
|
||||||
|
&MotionEvent {
|
||||||
|
location: handle.current_location(),
|
||||||
|
serial: serial,
|
||||||
|
time: time,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
Common::set_focus(
|
Common::set_focus(
|
||||||
state,
|
state,
|
||||||
Some(&KeyboardFocusTarget::from(self.window.clone())),
|
Some(&KeyboardFocusTarget::from(self.window.clone())),
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue