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