mirror of
https://github.com/elementary/gala.git
synced 2024-09-11 07:05:30 +03:00
DragDropAction: support touch (#1962)
This commit is contained in:
parent
d0609ab6b3
commit
93b4244cb6
@ -109,6 +109,11 @@ namespace Gala {
|
|||||||
private InputDevice? grabbed_device = null;
|
private InputDevice? grabbed_device = null;
|
||||||
private ulong on_event_id = 0;
|
private ulong on_event_id = 0;
|
||||||
|
|
||||||
|
static construct {
|
||||||
|
sources = new Gee.HashMap<string,Gee.LinkedList<unowned Actor>> ();
|
||||||
|
destinations = new Gee.HashMap<string,Gee.LinkedList<unowned Actor>> ();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new DragDropAction
|
* Create a new DragDropAction
|
||||||
*
|
*
|
||||||
@ -119,18 +124,12 @@ namespace Gala {
|
|||||||
*/
|
*/
|
||||||
public DragDropAction (DragDropActionType type, string id) {
|
public DragDropAction (DragDropActionType type, string id) {
|
||||||
Object (drag_type : type, drag_id : id);
|
Object (drag_type : type, drag_id : id);
|
||||||
|
|
||||||
if (sources == null)
|
|
||||||
sources = new Gee.HashMap<string,Gee.LinkedList<unowned Actor>> ();
|
|
||||||
|
|
||||||
if (destinations == null)
|
|
||||||
destinations = new Gee.HashMap<string,Gee.LinkedList<unowned Actor>> ();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
~DragDropAction () {
|
~DragDropAction () {
|
||||||
if (actor != null)
|
if (actor != null) {
|
||||||
release_actor (actor);
|
release_actor (actor);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void set_actor (Actor? new_actor) {
|
public override void set_actor (Actor? new_actor) {
|
||||||
@ -197,6 +196,11 @@ namespace Gala {
|
|||||||
|
|
||||||
switch (event.get_type ()) {
|
switch (event.get_type ()) {
|
||||||
case EventType.BUTTON_PRESS:
|
case EventType.BUTTON_PRESS:
|
||||||
|
case EventType.TOUCH_BEGIN:
|
||||||
|
if (!is_valid_touch_event (event)) {
|
||||||
|
return Clutter.EVENT_PROPAGATE;
|
||||||
|
}
|
||||||
|
|
||||||
if (grabbed_actor != null) {
|
if (grabbed_actor != null) {
|
||||||
return Clutter.EVENT_PROPAGATE;
|
return Clutter.EVENT_PROPAGATE;
|
||||||
}
|
}
|
||||||
@ -213,6 +217,11 @@ namespace Gala {
|
|||||||
return Clutter.EVENT_STOP;
|
return Clutter.EVENT_STOP;
|
||||||
|
|
||||||
case EventType.BUTTON_RELEASE:
|
case EventType.BUTTON_RELEASE:
|
||||||
|
case EventType.TOUCH_END:
|
||||||
|
if (!is_valid_touch_event (event)) {
|
||||||
|
return Clutter.EVENT_PROPAGATE;
|
||||||
|
}
|
||||||
|
|
||||||
if (!dragging) {
|
if (!dragging) {
|
||||||
float x, y, ex, ey;
|
float x, y, ex, ey;
|
||||||
event.get_coords (out ex, out ey);
|
event.get_coords (out ex, out ey);
|
||||||
@ -290,6 +299,11 @@ namespace Gala {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case EventType.MOTION:
|
case EventType.MOTION:
|
||||||
|
case EventType.TOUCH_UPDATE:
|
||||||
|
if (!is_valid_touch_event (event)) {
|
||||||
|
return Clutter.EVENT_PROPAGATE;
|
||||||
|
}
|
||||||
|
|
||||||
float x, y;
|
float x, y;
|
||||||
event.get_coords (out x, out y);
|
event.get_coords (out x, out y);
|
||||||
|
|
||||||
@ -447,5 +461,17 @@ namespace Gala {
|
|||||||
|
|
||||||
dragging = false;
|
dragging = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool is_valid_touch_event (Clutter.Event event) {
|
||||||
|
var type = event.get_type ();
|
||||||
|
|
||||||
|
return (
|
||||||
|
type != Clutter.EventType.TOUCH_BEGIN &&
|
||||||
|
type != Clutter.EventType.TOUCH_CANCEL &&
|
||||||
|
type != Clutter.EventType.TOUCH_END &&
|
||||||
|
type != Clutter.EventType.TOUCH_UPDATE ||
|
||||||
|
Meta.Util.is_wayland_compositor ()
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user