add an easy way to open any folder on start-up

This commit is contained in:
Paul 2023-01-02 17:27:07 +00:00
parent 102602650e
commit ca89ade8eb
5 changed files with 111 additions and 6 deletions

View file

@ -1,6 +1,6 @@
/*
* Claws Mail -- a GTK based, lightweight, and fast e-mail client
* Copyright (C) 1999-2022 the Claws Mail team and Hiroyuki Yamamoto
* Copyright (C) 1999-2023 the Claws Mail team and Hiroyuki Yamamoto
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -189,6 +189,8 @@ static void folderview_search_cb (GtkAction *action,
gpointer data);
static void folderview_run_processing_cb(GtkAction *action,
gpointer data);
static void folderview_startup_folder_cb(GtkAction *action,
gpointer data);
static void folderview_property_cb (GtkAction *action,
gpointer data);
@ -252,6 +254,7 @@ static GtkActionEntry folderview_common_popup_entries[] =
{"FolderViewPopup/---", NULL, "---", NULL, NULL , NULL},
{"FolderViewPopup/RunProcessing", NULL, N_("R_un processing rules"), NULL, NULL, G_CALLBACK(folderview_run_processing_cb) },
{"FolderViewPopup/SearchFolder", NULL, N_("_Search folder..."), NULL, NULL, G_CALLBACK(folderview_search_cb) },
{"FolderViewPopup/OpenFolder", NULL, N_("Open on start-up"), NULL, NULL, G_CALLBACK(folderview_startup_folder_cb) },
{"FolderViewPopup/Properties", NULL, N_("_Properties..."), NULL, NULL, G_CALLBACK(folderview_property_cb) },
{"FolderViewPopup/Processing", NULL, N_("Process_ing..."), NULL, NULL, G_CALLBACK(folderview_processing_cb) },
{"FolderViewPopup/EmptyTrash", NULL, N_("Empty _trash..."), NULL, NULL, G_CALLBACK(folderview_empty_trash_cb) },
@ -1956,6 +1959,7 @@ static void folderview_set_sens_and_popup_menu(FolderView *folderview, gint row,
MENUITEM_ADDUI_MANAGER(ui_manager, "/Popup/FolderViewPopup", "Separator1", "FolderViewPopup/---", GTK_UI_MANAGER_SEPARATOR)
MENUITEM_ADDUI_MANAGER(ui_manager, "/Popup/FolderViewPopup", "RunProcessing", "FolderViewPopup/RunProcessing", GTK_UI_MANAGER_MENUITEM)
MENUITEM_ADDUI_MANAGER(ui_manager, "/Popup/FolderViewPopup", "SearchFolder", "FolderViewPopup/SearchFolder", GTK_UI_MANAGER_MENUITEM)
MENUITEM_ADDUI_MANAGER(ui_manager, "/Popup/FolderViewPopup", "OpenFolder", "FolderViewPopup/OpenFolder", GTK_UI_MANAGER_MENUITEM)
MENUITEM_ADDUI_MANAGER(ui_manager, "/Popup/FolderViewPopup", "Properties", "FolderViewPopup/Properties", GTK_UI_MANAGER_MENUITEM)
MENUITEM_ADDUI_MANAGER(ui_manager, "/Popup/FolderViewPopup", "Processing", "FolderViewPopup/Processing", GTK_UI_MANAGER_MENUITEM)
@ -2574,6 +2578,20 @@ static void folderview_search_cb(GtkAction *action, gpointer data)
summary_search(folderview->summaryview);
}
static void folderview_startup_folder_cb(GtkAction *action, gpointer data)
{
FolderView *folderview = (FolderView *)data;
FolderItem *item;
if (!folderview->selected) return;
item = folderview_get_selected_item(folderview);
prefs_common.goto_last_folder_on_startup = FALSE;
prefs_common.goto_folder_on_startup = TRUE;
prefs_common.startup_folder = folder_item_get_identifier(item);
}
static void folderview_run_processing_cb(GtkAction *action, gpointer data)
{
FolderView *folderview = (FolderView *)data;

View file

@ -1,6 +1,6 @@
/*
* Claws Mail -- a GTK based, lightweight, and fast e-mail client
* Copyright (C) 1999-2022 the Claws Mail team and Hiroyuki Yamamoto
* Copyright (C) 1999-2023 the Claws Mail team and Hiroyuki Yamamoto
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -1605,7 +1605,11 @@ int main(int argc, char *argv[])
folderview_thaw(mainwin->folderview);
main_window_cursor_normal(mainwin);
if (!cmd.target && prefs_common.goto_last_folder_on_startup &&
if (!cmd.target && prefs_common.goto_folder_on_startup &&
folder_find_item_from_identifier(prefs_common.startup_folder) != NULL &&
!claws_crashed()) {
cmd.target = prefs_common.startup_folder;
} else if (!cmd.target && prefs_common.goto_last_folder_on_startup &&
folder_find_item_from_identifier(prefs_common.last_opened_folder) != NULL &&
!claws_crashed()) {
cmd.target = prefs_common.last_opened_folder;

View file

@ -1,6 +1,6 @@
/*
* Claws Mail -- a GTK based, lightweight, and fast e-mail client
* Copyright (C) 1999-2022 the Claws Mail team and Hiroyuki Yamamoto
* Copyright (C) 1999-2023 the Claws Mail team and Hiroyuki Yamamoto
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -1212,6 +1212,10 @@ static PrefParam param[] = {
P_STRING, NULL, NULL, NULL },
{"goto_last_folder_on_startup", "FALSE", &prefs_common.goto_last_folder_on_startup,
P_BOOL, NULL, NULL, NULL },
{"startup_folder", "", &prefs_common.startup_folder,
P_STRING, NULL, NULL, NULL },
{"goto_folder_on_startup", "FALSE", &prefs_common.goto_folder_on_startup,
P_BOOL, NULL, NULL, NULL },
{"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
NULL, NULL, NULL},
{"summary_quicksearch_dynamic", "0", &prefs_common.summary_quicksearch_dynamic, P_INT,

View file

@ -1,6 +1,6 @@
/*
* Claws Mail -- a GTK based, lightweight, and fast e-mail client
* Copyright (C) 1999-2022 the Claws Mail team and Hiroyuki Yamamoto
* Copyright (C) 1999-2023 the Claws Mail team and Hiroyuki Yamamoto
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -277,6 +277,8 @@ struct _PrefsCommon
gchar *last_opened_folder;
gboolean goto_last_folder_on_startup;
gchar *startup_folder;
gboolean goto_folder_on_startup;
ToolbarStyle toolbar_style;
gboolean show_statusbar;

View file

@ -1,6 +1,6 @@
/*
* Claws Mail -- a GTK based, lightweight, and fast e-mail client
* Copyright (C) 2005-2022 Colin Leroy and The Claws Mail Team
* Copyright (C) 2005-2023 the Claws Mail Team and Colin Leroy
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -31,6 +31,7 @@
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#include "foldersel.h"
#include "prefs_common.h"
#include "prefs_gtk.h"
#include "prefs_summary_open.h"
@ -59,6 +60,9 @@ typedef struct _SummariesPage
GtkWidget *entry_datefmt;
GtkWidget *checkbtn_reopen_last_folder;
GtkWidget *checkbtn_startup_folder;
GtkWidget *startup_folder_entry;
GtkWidget *startup_folder_select;
GtkWidget *checkbtn_always_show_msg;
GtkWidget *checkbtn_show_on_folder_open;
GtkWidget *checkbtn_show_on_search_results;
@ -111,6 +115,41 @@ static void mark_as_read_toggled (GtkToggleButton *button,
static void always_show_msg_toggled (GtkToggleButton *button,
gpointer user_data);
static void reopen_last_folder_toggled(GtkToggleButton *toggle_btn, GtkWidget *widget)
{
gboolean is_active;
is_active = gtk_toggle_button_get_active(toggle_btn);
gtk_widget_set_sensitive(widget, !is_active);
if (is_active)
prefs_common.goto_folder_on_startup = FALSE;
}
static void startup_folder_toggled(GtkToggleButton *toggle_btn, GtkWidget *widget)
{
gboolean is_active;
is_active = gtk_toggle_button_get_active(toggle_btn);
gtk_widget_set_sensitive(widget, !is_active);
if (is_active)
prefs_common.goto_last_folder_on_startup = FALSE;
}
static void foldersel_cb(GtkWidget *widget, gpointer data)
{
GtkWidget *entry = (GtkWidget *) data;
FolderItem *item;
gchar *item_id;
gint newpos = 0;
item = foldersel_folder_sel(NULL, FOLDER_SEL_ALL, NULL, FALSE, NULL);
if (item && (item_id = folder_item_get_identifier(item)) != NULL) {
gtk_editable_delete_text(GTK_EDITABLE(entry), 0, -1);
gtk_editable_insert_text(GTK_EDITABLE(entry), item_id, strlen(item_id), &newpos);
g_free(item_id);
}
}
static GtkWidget *date_format_create(GtkButton *button, void *data)
{
static GtkWidget *datefmt_win = NULL;
@ -339,6 +378,9 @@ static void prefs_summaries_create_widget(PrefsPage *_page, GtkWindow *window,
GtkWidget *entry_datefmt;
GtkWidget *button_dispitem;
GtkWidget *checkbtn_reopen_last_folder;
GtkWidget *checkbtn_startup_folder;
GtkWidget *startup_folder_entry;
GtkWidget *startup_folder_select;
GtkWidget *checkbtn_always_show_msg;
GtkWidget *checkbtn_show_on_folder_open;
GtkWidget *checkbtn_show_on_search_results;
@ -414,6 +456,31 @@ static void prefs_summaries_create_widget(PrefsPage *_page, GtkWindow *window,
(vbox1, checkbtn_reopen_last_folder,
_("Open last opened folder at start-up"));
hbox0 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 8);
gtk_widget_show(hbox0);
gtk_box_pack_start(GTK_BOX(vbox1), hbox0, FALSE, FALSE, 0);
PACK_CHECK_BUTTON
(hbox0, checkbtn_startup_folder,
_("Open selected folder at start-up"));
startup_folder_entry = gtk_entry_new();
gtk_widget_show(startup_folder_entry);
gtk_box_pack_start(GTK_BOX(hbox0), startup_folder_entry, TRUE, TRUE, 0);
startup_folder_select = gtkut_get_browse_directory_btn(_("_Browse"));
gtk_widget_show(startup_folder_select);
gtk_box_pack_start(GTK_BOX(hbox0), startup_folder_select, FALSE, FALSE, 0);
SET_TOGGLE_SENSITIVITY(checkbtn_startup_folder, startup_folder_entry)
SET_TOGGLE_SENSITIVITY(checkbtn_startup_folder, startup_folder_select)
g_signal_connect(G_OBJECT(checkbtn_reopen_last_folder), "toggled",
G_CALLBACK(reopen_last_folder_toggled), checkbtn_startup_folder);
g_signal_connect(G_OBJECT(checkbtn_startup_folder), "toggled",
G_CALLBACK(startup_folder_toggled), checkbtn_reopen_last_folder);
g_signal_connect(G_OBJECT(startup_folder_select), "clicked",
G_CALLBACK(foldersel_cb), startup_folder_entry);
PACK_CHECK_BUTTON
(vbox1, checkbtn_run_processingrules_mark_all_read,
_("Run processing rules before marking all messages in a folder as read or unread"));
@ -681,6 +748,8 @@ static void prefs_summaries_create_widget(PrefsPage *_page, GtkWindow *window,
prefs_summaries->checkbtn_threadsubj = checkbtn_threadsubj;
prefs_summaries->entry_datefmt = entry_datefmt;
prefs_summaries->checkbtn_reopen_last_folder = checkbtn_reopen_last_folder;
prefs_summaries->checkbtn_startup_folder = checkbtn_startup_folder;
prefs_summaries->startup_folder_entry = startup_folder_entry;
prefs_summaries->checkbtn_always_show_msg = checkbtn_always_show_msg;
prefs_summaries->checkbtn_show_on_folder_open = checkbtn_show_on_folder_open;
@ -731,6 +800,10 @@ static void prefs_summaries_create_widget(PrefsPage *_page, GtkWindow *window,
prefs_common.date_format?prefs_common.date_format:"");
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_reopen_last_folder),
prefs_common.goto_last_folder_on_startup);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_startup_folder),
prefs_common.goto_folder_on_startup);
gtk_entry_set_text(GTK_ENTRY(startup_folder_entry),
prefs_common.startup_folder?prefs_common.startup_folder:"");
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_always_show_msg),
prefs_common.always_show_msg);
@ -809,6 +882,10 @@ static void prefs_summaries_save(PrefsPage *_page)
prefs_common.goto_last_folder_on_startup = gtk_toggle_button_get_active(
GTK_TOGGLE_BUTTON(page->checkbtn_reopen_last_folder));
prefs_common.goto_folder_on_startup = gtk_toggle_button_get_active(
GTK_TOGGLE_BUTTON(page->checkbtn_startup_folder));
prefs_common.startup_folder = gtk_editable_get_chars(
GTK_EDITABLE(page->startup_folder_entry), 0, -1);
prefs_common.always_show_msg = gtk_toggle_button_get_active(
GTK_TOGGLE_BUTTON(page->checkbtn_always_show_msg));