[gthumb: 1/2] drag&drop: allow alt action via keyboard modifiers
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb: 1/2] drag&drop: allow alt action via keyboard modifiers
- Date: Mon, 2 May 2022 16:43:23 +0000 (UTC)
commit d8636d0cbf0564b6296af5b803652012e7627717
Author: matthewmelvin <matthewmelvin gmail com>
Date: Mon May 2 16:43:22 2022 +0000
drag&drop: allow alt action via keyboard modifiers
extensions/file_manager/callbacks.c | 9 +++++++--
gthumb/gth-browser.c | 6 +++++-
gthumb/gtk-utils.c | 18 ++++++++++++++++++
gthumb/gtk-utils.h | 1 +
4 files changed, 31 insertions(+), 3 deletions(-)
---
diff --git a/extensions/file_manager/callbacks.c b/extensions/file_manager/callbacks.c
index eb0a9bb8..8877bd8d 100644
--- a/extensions/file_manager/callbacks.c
+++ b/extensions/file_manager/callbacks.c
@@ -477,7 +477,12 @@ gth_file_list_drag_motion (GtkWidget *file_view,
}
}
- gdk_drag_status (context, source_is_reorderable ? GDK_ACTION_COPY : GDK_ACTION_MOVE, time);
+ if (source_is_reorderable)
+ gdk_drag_status (context, GDK_ACTION_COPY, time);
+ else if (_gtk_drag_drop_modifier_state (file_view))
+ gdk_drag_status (context, GDK_ACTION_COPY, time);
+ else
+ gdk_drag_status (context, GDK_ACTION_MOVE, time);
}
return TRUE;
@@ -878,7 +883,7 @@ fm__gth_browser_load_location_after_cb (GthBrowser *browser,
G_N_ELEMENTS (non_reorderable_drag_dest_targets),
GDK_ACTION_COPY | GDK_ACTION_MOVE);
- source_actions = GDK_ACTION_MOVE | GDK_ACTION_ASK;
+ source_actions = GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_ASK;
}
/* set the drag source targets */
diff --git a/gthumb/gth-browser.c b/gthumb/gth-browser.c
index 006ad96f..c85c5e8f 100644
--- a/gthumb/gth-browser.c
+++ b/gthumb/gth-browser.c
@@ -2856,7 +2856,11 @@ folder_tree_drag_motion_cb (GtkWidget *file_view,
browser->priv->folder_tree_open_folder_id = g_timeout_add (AUTO_OPEN_FOLDER_DELAY,
folder_tree_open_folder_cb, browser);
}
- gdk_drag_status (context, GDK_ACTION_MOVE, time);
+ if (_gtk_drag_drop_modifier_state (file_view))
+ gdk_drag_status (context, GDK_ACTION_COPY, time);
+ else
+ gdk_drag_status (context, GDK_ACTION_MOVE, time);
+
gtk_tree_path_free (path);
return TRUE;
diff --git a/gthumb/gtk-utils.c b/gthumb/gtk-utils.c
index 7c5731b0..b7289da3 100644
--- a/gthumb/gtk-utils.c
+++ b/gthumb/gtk-utils.c
@@ -877,6 +877,24 @@ _gtk_menu_ask_drag_drop_action (GtkWidget *widget,
}
+gboolean
+_gtk_drag_drop_modifier_state (GtkWidget *widget)
+{
+ GdkModifierType mask;
+
+ gdk_window_get_device_position (gtk_widget_get_window (widget),
+ _gtk_widget_get_client_pointer (widget),
+ NULL,
+ NULL,
+ &mask);
+
+ if (mask & (GDK_SHIFT_MASK | GDK_CONTROL_MASK))
+ return TRUE;
+
+ return FALSE;
+}
+
+
static gboolean
_gdk_rgba_shade (GdkRGBA *color,
GdkRGBA *result,
diff --git a/gthumb/gtk-utils.h b/gthumb/gtk-utils.h
index a23b3d41..d61154a9 100644
--- a/gthumb/gtk-utils.h
+++ b/gthumb/gtk-utils.h
@@ -161,6 +161,7 @@ void _gtk_window_resize_to_fit_screen_height (GtkWidget *wi
void _gtk_info_bar_clear_action_area (GtkInfoBar *info_bar);
GdkDragAction _gtk_menu_ask_drag_drop_action (GtkWidget *widget,
GdkDragAction actions);
+gboolean _gtk_drag_drop_modifier_state (GtkWidget *widget);
gboolean _gdk_rgba_darker (GdkRGBA *color,
GdkRGBA *result);
gboolean _gdk_rgba_lighter (GdkRGBA *color,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]