[gnome-flashback] desktop: unselect icons on button release
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-flashback] desktop: unselect icons on button release
- Date: Sat, 23 Nov 2019 21:13:10 +0000 (UTC)
commit 28655b87a462d9f20512d595363c55542d3fdd24
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Sat Nov 23 23:01:52 2019 +0200
desktop: unselect icons on button release
gnome-flashback/libdesktop/gf-icon.c | 60 +++++++++++++++++++++++++++++++++---
1 file changed, 55 insertions(+), 5 deletions(-)
---
diff --git a/gnome-flashback/libdesktop/gf-icon.c b/gnome-flashback/libdesktop/gf-icon.c
index a5887b0..085691d 100644
--- a/gnome-flashback/libdesktop/gf-icon.c
+++ b/gnome-flashback/libdesktop/gf-icon.c
@@ -47,6 +47,7 @@ typedef struct
GtkWidget *label;
gboolean selected;
+ gboolean did_select;
GDesktopAppInfo *app_info;
@@ -453,13 +454,11 @@ multi_press_pressed_cb (GtkGestureMultiPress *gesture,
if (button == GDK_BUTTON_PRIMARY)
{
- if (!control_pressed && !shift_pressed)
+ if (!priv->selected && !control_pressed && !shift_pressed)
gf_icon_view_clear_selection (priv->icon_view);
- if (control_pressed || shift_pressed)
- gf_icon_set_selected (self, !priv->selected);
- else
- gf_icon_set_selected (self, TRUE);
+ priv->did_select = !priv->selected;
+ gf_icon_set_selected (self, TRUE);
if (!control_pressed && n_press == 2)
gf_icon_open (self);
@@ -479,6 +478,53 @@ multi_press_pressed_cb (GtkGestureMultiPress *gesture,
}
}
+static void
+multi_press_released_cb (GtkGestureMultiPress *gesture,
+ gint n_press,
+ gdouble x,
+ gdouble y,
+ GfIcon *self)
+{
+ GfIconPrivate *priv;
+ guint button;
+ GdkEventSequence *sequence;
+ const GdkEvent *event;
+ GdkModifierType state;
+ gboolean control_pressed;
+ gboolean shift_pressed;
+
+ priv = gf_icon_get_instance_private (self);
+
+ button = gtk_gesture_single_get_current_button (GTK_GESTURE_SINGLE (gesture));
+ sequence = gtk_gesture_single_get_current_sequence (GTK_GESTURE_SINGLE (gesture));
+ event = gtk_gesture_get_last_event (GTK_GESTURE (gesture), sequence);
+
+ if (event == NULL)
+ return;
+
+ gdk_event_get_state (event, &state);
+
+ control_pressed = (state & GDK_CONTROL_MASK) == GDK_CONTROL_MASK;
+ shift_pressed = (state & GDK_SHIFT_MASK) == GDK_SHIFT_MASK;
+
+ if (button == GDK_BUTTON_PRIMARY)
+ {
+ if (!control_pressed && !shift_pressed)
+ {
+ gboolean was_selected;
+
+ was_selected = priv->selected;
+
+ gf_icon_view_clear_selection (priv->icon_view);
+ gf_icon_set_selected (self, was_selected);
+ }
+ else if (control_pressed && !priv->did_select)
+ {
+ gf_icon_set_selected (self, FALSE);
+ }
+ }
+}
+
static cairo_surface_t *
get_thumbnail_surface (GfIcon *self)
{
@@ -1093,6 +1139,10 @@ gf_icon_init (GfIcon *self)
G_CALLBACK (multi_press_pressed_cb),
self);
+ g_signal_connect (priv->multi_press, "released",
+ G_CALLBACK (multi_press_released_cb),
+ self);
+
gtk_widget_set_focus_on_click (GTK_WIDGET (self), FALSE);
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]