[balsa/66-save-and-open-folder] add option to open folder when saving multiple attachments
- From: Albrecht Dreß <albrecht src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [balsa/66-save-and-open-folder] add option to open folder when saving multiple attachments
- Date: Sat, 22 Jan 2022 12:55:56 +0000 (UTC)
commit 0e5ea496a7f0339b419b9dcca89733311881408d
Author: Albrecht Dreß <albrecht dress netcologne de>
Date: Sat Jan 22 13:55:52 2022 +0100
add option to open folder when saving multiple attachments
Add the option to open the destination folder after saving to the “Save
selected to folder” context menu item. Some refactoring to eliminate
duplicated code.
Details:
- src/balsa-mime-widget-callbacks.[ch]: add helper function for opening
the destination folder, use it in balsa_mime_widget_ctx_menu_save()
- src/balsa-message.c: add helper function for creating the “…and view”
context menu item, use it in tree_mult_selection_popup() and
part_create_menu(), use new open folder helper in
part_context_dump_all_cb()
Signed-off-by: Albrecht Dreß <albrecht dress netcologne de>
src/balsa-message.c | 36 ++++++++++++++++++++++++------------
src/balsa-mime-widget-callbacks.c | 35 +++++++++++++++++++++--------------
src/balsa-mime-widget-callbacks.h | 1 +
3 files changed, 46 insertions(+), 26 deletions(-)
---
diff --git a/src/balsa-message.c b/src/balsa-message.c
index 2bb63373e..6939a3aaa 100644
--- a/src/balsa-message.c
+++ b/src/balsa-message.c
@@ -907,6 +907,22 @@ collect_selected_info(GtkTreeModel * model, GtkTreePath * path,
}
}
+static void
+add_save_view_menu_item(GtkWidget *menu, const gchar *label, GCallback callback, gpointer user_data)
+{
+ GAppInfo *app_info;
+
+ app_info = g_app_info_get_default_for_type("inode/directory", FALSE);
+ if (app_info != NULL) {
+ GtkWidget *menu_item;
+
+ menu_item = gtk_menu_item_new_with_label(label);
+ g_object_set_data_full(G_OBJECT(menu_item), BALSA_MIME_WIDGET_CB_APPINFO, app_info,
g_object_unref);
+ g_signal_connect(menu_item, "activate", callback, user_data);
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);
+ }
+}
+
static void
tree_mult_selection_popup(BalsaMessage *balsa_message,
const GdkEvent *event,
@@ -951,18 +967,19 @@ tree_mult_selection_popup(BalsaMessage *balsa_message,
g_object_ref_sink(balsa_message->save_all_popup);
menu_item =
gtk_menu_item_new_with_label (_("Save selected as…"));
- gtk_widget_show(menu_item);
g_signal_connect (menu_item, "activate",
G_CALLBACK (part_context_save_all_cb),
(gpointer) balsa_message->save_all_list);
gtk_menu_shell_append (GTK_MENU_SHELL (balsa_message->save_all_popup), menu_item);
menu_item =
gtk_menu_item_new_with_label (_("Save selected to folder…"));
- gtk_widget_show(menu_item);
g_signal_connect (menu_item, "activate",
G_CALLBACK (part_context_dump_all_cb),
(gpointer) balsa_message->save_all_list);
gtk_menu_shell_append (GTK_MENU_SHELL (balsa_message->save_all_popup), menu_item);
+ add_save_view_menu_item(balsa_message->save_all_popup, _("Save selected to folder and view…"),
+ G_CALLBACK(part_context_dump_all_cb), balsa_message->save_all_list);
+ gtk_widget_show_all(balsa_message->save_all_popup);
if (event != NULL) {
gtk_menu_popup_at_pointer(GTK_MENU(balsa_message->save_all_popup), event);
} else {
@@ -1665,16 +1682,8 @@ part_create_menu (BalsaPartInfo* info)
info->body);
gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item), submenu);
} else {
- GAppInfo *app_info;
-
- app_info = g_app_info_get_default_for_type("inode/directory", FALSE);
- if (app_info != NULL) {
- menu_item = gtk_menu_item_new_with_mnemonic (_("Save and _view…"));
- g_object_set_data_full(G_OBJECT(menu_item), BALSA_MIME_WIDGET_CB_APPINFO, app_info,
g_object_unref);
- g_signal_connect(menu_item, "activate",
- G_CALLBACK (balsa_mime_widget_ctx_menu_save), info->body);
- gtk_menu_shell_append (GTK_MENU_SHELL (info->popup_menu), menu_item);
- }
+ add_save_view_menu_item(info->popup_menu, _("Save and view…"),
+ G_CALLBACK(balsa_mime_widget_ctx_menu_save), info->body);
}
gtk_widget_show_all (info->popup_menu);
@@ -1837,6 +1846,9 @@ part_context_dump_all_cb(GtkWidget * menu_item, GList * info_list)
g_object_unref(save_uri);
info_list = g_list_next(info_list);
}
+ if (dir_uri != NULL) {
+ balsa_mime_widget_view_save_dir(menu_item);
+ }
g_object_unref(dir_uri);
}
gtk_widget_destroy(dump_dialog);
diff --git a/src/balsa-mime-widget-callbacks.c b/src/balsa-mime-widget-callbacks.c
index aebd4b1a1..a18b35bd5 100644
--- a/src/balsa-mime-widget-callbacks.c
+++ b/src/balsa-mime-widget-callbacks.c
@@ -168,20 +168,7 @@ balsa_mime_widget_ctx_menu_save(GtkWidget * parent_widget,
file_uri, err ? err->message : _("Unknown error"));
g_clear_error(&err);
} else {
- GAppInfo *app_info;
-
- app_info = (GAppInfo *) g_object_get_data(G_OBJECT(parent_widget),
BALSA_MIME_WIDGET_CB_APPINFO);
- if (app_info != NULL) {
- GList *list;
-
- list = g_list_prepend(NULL, balsa_app.save_dir);
- if (!g_app_info_launch_uris(app_info, list, NULL, &err)) {
- balsa_information(LIBBALSA_INFORMATION_ERROR, _("Could not view %s: %s"),
- file_uri, err ? err->message : _("Unknown error"));
- g_clear_error(&err);
- }
- g_list_free(list);
- }
+ balsa_mime_widget_view_save_dir(parent_widget);
}
}
@@ -189,6 +176,26 @@ balsa_mime_widget_ctx_menu_save(GtkWidget * parent_widget,
g_free(file_uri);
}
+void
+balsa_mime_widget_view_save_dir(GtkWidget *widget)
+{
+ GAppInfo *app_info;
+
+ app_info = (GAppInfo *) g_object_get_data(G_OBJECT(widget), BALSA_MIME_WIDGET_CB_APPINFO);
+ if (app_info != NULL) {
+ GList *list;
+ GError *error = NULL;
+
+ list = g_list_prepend(NULL, balsa_app.save_dir);
+ if (!g_app_info_launch_uris(app_info, list, NULL, &error)) {
+ balsa_information(LIBBALSA_INFORMATION_ERROR, _("Could not view %s: %s"),
+ balsa_app.save_dir, error ? error->message : _("Unknown error"));
+ g_clear_error(&error);
+ }
+ g_list_free(list);
+ }
+}
+
static void
scroll_change(GtkAdjustment * adj, gint diff, BalsaMessage * bm)
{
diff --git a/src/balsa-mime-widget-callbacks.h b/src/balsa-mime-widget-callbacks.h
index c8c061c8d..0eabd5868 100644
--- a/src/balsa-mime-widget-callbacks.h
+++ b/src/balsa-mime-widget-callbacks.h
@@ -42,6 +42,7 @@ void balsa_mime_widget_limit_focus(GtkEventControllerKey *key_controller,
gpointer user_data);
void balsa_mime_widget_unlimit_focus(GtkEventControllerKey *key_controller,
gpointer user_data);
+void balsa_mime_widget_view_save_dir(GtkWidget *widget);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]