gnucash maint: Multiple changes pushed
Robert Fewell
bobit at code.gnucash.org
Fri Mar 19 07:02:33 EDT 2021
Updated via https://github.com/Gnucash/gnucash/commit/51ae7d80 (commit)
via https://github.com/Gnucash/gnucash/commit/61e23baf (commit)
from https://github.com/Gnucash/gnucash/commit/c915fb30 (commit)
commit 51ae7d8083da9a071cb14520e19bf048964c5daa
Author: Robert Fewell <14uBobIT at gmail.com>
Date: Fri Mar 19 10:34:07 2021 +0000
Bug 798147 - Main Window Cut/Copy/Paste Error
If the focus widget is a GtkTextView, accessing the clipboard was
trying to be obtained from the GtkTextBuffer and failing as
GtkTextBuffer is not a widget so instead use the GtkTextView to obtain
the clipboard.
diff --git a/gnucash/gnome-utils/gnc-main-window.c b/gnucash/gnome-utils/gnc-main-window.c
index a9f58e885..e1d2a8d8f 100644
--- a/gnucash/gnome-utils/gnc-main-window.c
+++ b/gnucash/gnome-utils/gnc-main-window.c
@@ -4363,62 +4363,61 @@ gnc_main_window_cmd_file_quit (GtkAction *action, GncMainWindow *window)
static void
gnc_main_window_cmd_edit_cut (GtkAction *action, GncMainWindow *window)
{
- GtkWidget *widget = gtk_window_get_focus (GTK_WINDOW (window));
- GtkTextBuffer *text_buffer;
- GtkClipboard *clipboard;
- gboolean editable;
+ GtkWidget *widget = gtk_window_get_focus (GTK_WINDOW(window));
- if (GTK_IS_EDITABLE (widget))
+ if (GTK_IS_EDITABLE(widget))
{
- gtk_editable_cut_clipboard (GTK_EDITABLE (widget));
+ gtk_editable_cut_clipboard (GTK_EDITABLE(widget));
}
- else if (GTK_IS_TEXT_VIEW (widget))
+ else if (GTK_IS_TEXT_VIEW(widget))
{
- text_buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(widget));
- clipboard = gtk_widget_get_clipboard (GTK_WIDGET(text_buffer),
- GDK_SELECTION_CLIPBOARD);
- editable = gtk_text_view_get_editable (GTK_TEXT_VIEW (widget));
- gtk_text_buffer_cut_clipboard (text_buffer, clipboard, editable);
+ GtkTextBuffer *text_buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(widget));
+ GtkClipboard *clipboard = gtk_widget_get_clipboard (GTK_WIDGET(widget),
+ GDK_SELECTION_CLIPBOARD);
+ gboolean editable = gtk_text_view_get_editable (GTK_TEXT_VIEW(widget));
+
+ if (clipboard)
+ gtk_text_buffer_cut_clipboard (text_buffer, clipboard, editable);
}
}
static void
gnc_main_window_cmd_edit_copy (GtkAction *action, GncMainWindow *window)
{
- GtkWidget *widget = gtk_window_get_focus (GTK_WINDOW (window));
- GtkTextBuffer *text_buffer;
- GtkClipboard *clipboard;
+ GtkWidget *widget = gtk_window_get_focus (GTK_WINDOW(window));
- if (GTK_IS_EDITABLE (widget))
+ if (GTK_IS_EDITABLE(widget))
{
- gtk_editable_copy_clipboard (GTK_EDITABLE (widget));
+ gtk_editable_copy_clipboard (GTK_EDITABLE(widget));
}
- else if (GTK_IS_TEXT_VIEW (widget))
+ else if (GTK_IS_TEXT_VIEW(widget))
{
- text_buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(widget));
- clipboard = gtk_widget_get_clipboard (GTK_WIDGET(text_buffer),
- GDK_SELECTION_CLIPBOARD);
- gtk_text_buffer_copy_clipboard (text_buffer, clipboard);
+ GtkTextBuffer *text_buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(widget));
+ GtkClipboard *clipboard = gtk_widget_get_clipboard (GTK_WIDGET(widget),
+ GDK_SELECTION_CLIPBOARD);
+ if (clipboard)
+ gtk_text_buffer_copy_clipboard (text_buffer, clipboard);
}
}
static void
gnc_main_window_cmd_edit_paste (GtkAction *action, GncMainWindow *window)
{
- GtkWidget *widget = gtk_window_get_focus (GTK_WINDOW (window));
- GtkTextBuffer *text_buffer;
- GtkClipboard *clipboard;
+ GtkWidget *widget = gtk_window_get_focus (GTK_WINDOW(window));
- if (GTK_IS_EDITABLE (widget))
+ if (GTK_IS_EDITABLE(widget))
{
- gtk_editable_paste_clipboard (GTK_EDITABLE (widget));
+ gtk_editable_paste_clipboard (GTK_EDITABLE(widget));
}
- else if (GTK_IS_TEXT_VIEW (widget))
+ else if (GTK_IS_TEXT_VIEW(widget))
{
- text_buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(widget));
- clipboard = gtk_widget_get_clipboard (GTK_WIDGET(text_buffer),
- GDK_SELECTION_CLIPBOARD);
- gtk_text_buffer_paste_clipboard (text_buffer, clipboard, NULL, FALSE);
+ GtkTextBuffer *text_buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(widget));
+ GtkClipboard *clipboard = gtk_widget_get_clipboard (GTK_WIDGET(widget),
+ GDK_SELECTION_CLIPBOARD);
+ gboolean editable = gtk_text_view_get_editable (GTK_TEXT_VIEW(widget));
+
+ if (clipboard)
+ gtk_text_buffer_paste_clipboard (text_buffer, clipboard, NULL, editable);
}
}
commit 61e23baf8733cb9e470d5d6da831894999bde042
Author: Robert Fewell <14uBobIT at gmail.com>
Date: Fri Mar 19 10:07:26 2021 +0000
Bug 798149 - Follow up to CSV saved account settings
The previous commit breaks backwards compatibility so this change adds
a new setting BaseAccountGuid to hold the account Guid, BaseAccount
holds the account full path as before. When a CSV setting is selected,
the Guid is first used to find the account. If unsuccessful, the full
path is then used and if successful the account guid is immediately
saved for future use. If unsuccessfull the account combo is blank with
a error message as before.
When save CSV settings button is used, both the Guid and full paths are
saved so previous versions can still use the full path as before.
diff --git a/gnucash/import-export/csv-imp/gnc-imp-settings-csv-tx.cpp b/gnucash/import-export/csv-imp/gnc-imp-settings-csv-tx.cpp
index 8ba7995aa..f7c89f8c5 100644
--- a/gnucash/import-export/csv-imp/gnc-imp-settings-csv-tx.cpp
+++ b/gnucash/import-export/csv-imp/gnc-imp-settings-csv-tx.cpp
@@ -51,6 +51,7 @@ constexpr auto group_prefix = "Import csv,transaction - ";
#define CSV_COL_TYPES "ColumnTypes"
#define CSV_ACCOUNT "BaseAccount"
+#define CSV_ACCOUNT_GUID "BaseAccountGuid"
#define CSV_MULTI_SPLIT "MultiSplit"
G_GNUC_UNUSED static QofLogModule log_module = GNC_MOD_IMPORT;
@@ -170,15 +171,22 @@ CsvTransImpSettings::load (void)
m_multi_split = g_key_file_get_boolean (keyfile, group.c_str(), CSV_MULTI_SPLIT, &key_error);
m_load_error |= handle_load_error (&key_error, group);
- gchar *key_char = g_key_file_get_string (keyfile, group.c_str(), CSV_ACCOUNT, &key_error);
+ gchar *key_char = g_key_file_get_string (keyfile, group.c_str(), CSV_ACCOUNT_GUID, &key_error);
if (key_char && *key_char != '\0')
{
QofBook* book = gnc_get_current_book ();
GncGUID guid;
- if (string_to_guid (key_char, &guid)) // find account by guid
+ if (string_to_guid (key_char, &guid)) // find account by guid first
m_base_account = xaccAccountLookup (&guid, book);
+ }
+ m_load_error |= handle_load_error (&key_error, group);
+ if (key_char)
+ g_free (key_char);
+ key_char = g_key_file_get_string (keyfile, group.c_str(), CSV_ACCOUNT, &key_error);
+ if (key_char && *key_char != '\0')
+ {
if (m_base_account == nullptr)
{
m_base_account = gnc_account_lookup_by_full_name (gnc_get_current_root_account(), key_char);
@@ -187,9 +195,17 @@ CsvTransImpSettings::load (void)
{
gchar acct_guid[GUID_ENCODING_LENGTH + 1];
guid_to_string_buff (xaccAccountGetGUID (m_base_account), acct_guid);
- g_key_file_set_string (keyfile, group.c_str(), CSV_ACCOUNT, acct_guid);
+ g_key_file_set_string (keyfile, group.c_str(), CSV_ACCOUNT_GUID, acct_guid);
}
}
+ else // check to see if saved full name is the same and save if not
+ {
+ gchar *full_name = gnc_account_get_full_name (m_base_account);
+
+ if (g_strcmp0 (key_char, full_name) != 0)
+ g_key_file_set_string (keyfile, group.c_str(), CSV_ACCOUNT, full_name);
+ g_free (full_name);
+ }
}
m_load_error |= handle_load_error (&key_error, group);
if (key_char)
@@ -258,11 +274,15 @@ CsvTransImpSettings::save (void)
g_key_file_set_boolean (keyfile, group.c_str(), CSV_MULTI_SPLIT, m_multi_split);
- if (m_base_account)
+ if (m_base_account) // also save account guid introduced in version 4.5
{
gchar acct_guid[GUID_ENCODING_LENGTH + 1];
guid_to_string_buff (xaccAccountGetGUID (m_base_account), acct_guid);
- g_key_file_set_string (keyfile, group.c_str(), CSV_ACCOUNT, acct_guid);
+ g_key_file_set_string (keyfile, group.c_str(), CSV_ACCOUNT_GUID, acct_guid);
+
+ gchar *full_name = gnc_account_get_full_name (m_base_account);
+ g_key_file_set_string (keyfile, group.c_str(), CSV_ACCOUNT, full_name);
+ g_free (full_name);
}
std::vector<const char*> col_types_str;
Summary of changes:
gnucash/gnome-utils/gnc-main-window.c | 63 +++++++++++-----------
.../csv-imp/gnc-imp-settings-csv-tx.cpp | 30 +++++++++--
2 files changed, 56 insertions(+), 37 deletions(-)
More information about the gnucash-changes
mailing list