gnucash maint: Account tree: set menu sensitivities in only 1 function

Christopher Lam clam at code.gnucash.org
Tue Aug 2 09:17:52 EDT 2022


Updated	 via  https://github.com/Gnucash/gnucash/commit/b70fe138 (commit)
	from  https://github.com/Gnucash/gnucash/commit/1b845a86 (commit)



commit b70fe1381d9c623b5ca6241d89eb3924411f9fd7
Author: Christopher Lam <christopher.lck at gmail.com>
Date:   Sun Jul 31 15:56:52 2022 +0800

    Account tree: set menu sensitivities in only 1 function

diff --git a/gnucash/gnome/gnc-plugin-page-account-tree.c b/gnucash/gnome/gnc-plugin-page-account-tree.c
index 72d8960d3..4bcd08dd7 100644
--- a/gnucash/gnome/gnc-plugin-page-account-tree.c
+++ b/gnucash/gnome/gnc-plugin-page-account-tree.c
@@ -367,6 +367,15 @@ static const gchar *actions_requiring_account_rw[] =
     NULL
 };
 
+/** Actions that require the selected account to have subaccounts
+ *  before they are enabled, and the book is in read-write mode. */
+static const gchar *actions_requiring_subaccounts_rw[] =
+{
+    "EditRenumberSubaccountsAction",
+    "EditCascadeAccountAction",
+    NULL
+};
+
 /** Actions that require an account to be selected before they are
  *  enabled. Those actions can be selected even if the book is in readonly mode. */
 static const gchar *actions_requiring_account_always[] =
@@ -387,7 +396,6 @@ static const gchar* readonly_inactive_actions[] =
     "FileAddAccountHierarchyAssistantAction",
     "EditEditAccountAction",
     "EditDeleteAccountAction",
-    "EditRenumberSubaccountsAction",
     "ActionsTransferAction",
     "ActionsReconcileAction",
     "ActionsAutoClearAction",
@@ -889,12 +897,24 @@ gnc_plugin_page_account_tree_destroy_widget (GncPluginPage *plugin_page)
 
 static void update_inactive_actions(GncPluginPage *plugin_page)
 {
+    GncPluginPageAccountTreePrivate *priv;
     GtkActionGroup *action_group;
-    gboolean is_sensitive = !qof_book_is_readonly(gnc_get_current_book());
+    Account *account = NULL;
+    gboolean allow_write = !qof_book_is_readonly(gnc_get_current_book());
+    gboolean has_account = FALSE;
+    gboolean subaccounts = FALSE;
 
-    // We are readonly - so we have to switch particular actions to inactive.
-    g_return_if_fail(plugin_page);
-    g_return_if_fail(GNC_IS_PLUGIN_PAGE(plugin_page));
+    g_return_if_fail (plugin_page && GNC_IS_PLUGIN_PAGE(plugin_page));
+
+    priv = GNC_PLUGIN_PAGE_ACCOUNT_TREE_GET_PRIVATE (plugin_page);
+
+    if (gtk_tree_view_get_selection (priv->tree_view))
+    {
+        account = gnc_tree_view_account_get_selected_account (GNC_TREE_VIEW_ACCOUNT(priv->tree_view));
+        has_account = (account != NULL);
+        subaccounts = (account && gnc_account_n_children (account) != 0);
+        /* Check here for placeholder accounts, etc. */
+    }
 
     /* Get the action group */
     action_group = gnc_plugin_page_get_action_group(plugin_page);
@@ -902,7 +922,14 @@ static void update_inactive_actions(GncPluginPage *plugin_page)
 
     /* Set the action's sensitivity */
     gnc_plugin_update_actions (action_group, readonly_inactive_actions,
-                               "sensitive", is_sensitive);
+                               "sensitive", allow_write);
+    gnc_plugin_update_actions (action_group, actions_requiring_account_rw,
+                               "sensitive", allow_write && has_account);
+    gnc_plugin_update_actions (action_group, actions_requiring_account_always,
+                               "sensitive", has_account);
+    gnc_plugin_update_actions (action_group, actions_requiring_subaccounts_rw,
+                               "sensitive", allow_write && subaccounts);
+    g_signal_emit (plugin_page, plugin_page_signals[ACCOUNT_SELECTED], 0, account);
 }
 
 /**
@@ -1117,52 +1144,10 @@ gnc_plugin_page_account_tree_double_click_cb (GtkTreeView *treeview,
 
 static void
 gnc_plugin_page_account_tree_selection_changed_cb (GtkTreeSelection *selection,
-        GncPluginPageAccountTree *page)
+                                                   GncPluginPageAccountTree *page)
 {
-    GtkActionGroup *action_group;
-    GtkAction *action;
-    GtkTreeView *view;
-    Account *account = NULL;
-    gboolean sensitive;
-    gboolean subaccounts;
-    gboolean is_readwrite = !qof_book_is_readonly(gnc_get_current_book());
-
-    g_return_if_fail(GNC_IS_PLUGIN_PAGE_ACCOUNT_TREE(page));
-
-    if (!selection)
-    {
-        sensitive = FALSE;
-        subaccounts = FALSE;
-    }
-    else
-    {
-        g_return_if_fail(GTK_IS_TREE_SELECTION(selection));
-        view = gtk_tree_selection_get_tree_view (selection);
-        account = gnc_tree_view_account_get_selected_account (GNC_TREE_VIEW_ACCOUNT(view));
-        sensitive = (account != NULL);
-
-        subaccounts = account && (gnc_account_n_children(account) != 0);
-        /* Check here for placeholder accounts, etc. */
-    }
-
-    action_group = gnc_plugin_page_get_action_group(GNC_PLUGIN_PAGE(page));
-    gnc_plugin_update_actions (action_group, actions_requiring_account_rw,
-                               "sensitive", is_readwrite && sensitive);
-    gnc_plugin_update_actions (action_group, actions_requiring_account_always,
-                               "sensitive", sensitive);
-    g_signal_emit (page, plugin_page_signals[ACCOUNT_SELECTED], 0, account);
-
-    action = gtk_action_group_get_action (action_group, "EditRenumberSubaccountsAction");
-    g_object_set (G_OBJECT(action), "sensitive",
-                  is_readwrite && sensitive && subaccounts, NULL);
-
-    action = gtk_action_group_get_action (action_group, "EditCascadeAccountAction");
-    g_object_set (G_OBJECT(action), "sensitive", subaccounts, NULL);
-
-    gnc_plugin_update_actions (action_group, actions_requiring_account_rw,
-                               "sensitive", is_readwrite && sensitive);
-    gnc_plugin_update_actions (action_group, actions_requiring_account_always,
-                               "sensitive", sensitive);
+    GncPluginPage *plugin_page = GNC_PLUGIN_PAGE(page);
+    update_inactive_actions (plugin_page);
 }
 
 



Summary of changes:
 gnucash/gnome/gnc-plugin-page-account-tree.c | 87 ++++++++++++----------------
 1 file changed, 36 insertions(+), 51 deletions(-)



More information about the gnucash-changes mailing list