gnucash maint: Multiple changes pushed

Robert Fewell bobit at code.gnucash.org
Sun Jul 17 07:20:26 EDT 2022


Updated	 via  https://github.com/Gnucash/gnucash/commit/0a8dcdcd (commit)
	 via  https://github.com/Gnucash/gnucash/commit/2b447d47 (commit)
	from  https://github.com/Gnucash/gnucash/commit/d688a17e (commit)



commit 0a8dcdcd818242f045605c0c2bb37478f32506a5
Merge: d688a17ef 2b447d478
Author: Robert Fewell <14uBobIT at gmail.com>
Date:   Sun Jul 17 11:44:49 2022 +0100

    Merge Simon Arlott's branch 'view-menu-tab-position' into maint PR #1369


commit 2b447d47874b9698edb1bef63669dc0d1415a7f9
Author: Simon Arlott <sa.me.uk>
Date:   Tue Jun 14 23:35:24 2022 +0100

    Add action group to View menu for the tab position

diff --git a/gnucash/gnome-utils/gnc-main-window.c b/gnucash/gnome-utils/gnc-main-window.c
index 249de0490..41f8b6e0c 100644
--- a/gnucash/gnome-utils/gnc-main-window.c
+++ b/gnucash/gnome-utils/gnc-main-window.c
@@ -166,6 +166,7 @@ static void gnc_main_window_cmd_view_refresh (GtkAction *action, GncMainWindow *
 static void gnc_main_window_cmd_view_toolbar (GtkAction *action, GncMainWindow *window);
 static void gnc_main_window_cmd_view_summary (GtkAction *action, GncMainWindow *window);
 static void gnc_main_window_cmd_view_statusbar (GtkAction *action, GncMainWindow *window);
+static void gnc_main_window_cmd_view_tab_position (GtkAction *action, GtkRadioAction *current, GncMainWindow *window);
 static void gnc_main_window_cmd_actions_reset_warnings (GtkAction *action, GncMainWindow *window);
 static void gnc_main_window_cmd_actions_rename_page (GtkAction *action, GncMainWindow *window);
 static void gnc_main_window_cmd_window_new (GtkAction *action, GncMainWindow *window);
@@ -339,6 +340,7 @@ static GtkActionEntry gnc_menu_actions [] =
 
     /* View menu */
 
+    { "ViewTabPositionAction", NULL, N_("Tab P_osition"), NULL, NULL, NULL },
     {
         "ViewSortByAction", NULL, N_("_Sort By..."), NULL,
         N_("Select sorting criteria for this page view"), NULL
@@ -424,6 +426,32 @@ static GtkToggleActionEntry toggle_actions [] =
 /** The number of toggle actions provided by the main window. */
 static guint n_toggle_actions = G_N_ELEMENTS (toggle_actions);
 
+/** An array of all of the radio actions provided by the main window
+ *  for tab positions. */
+static GtkRadioActionEntry tab_pos_radio_entries [] =
+{
+    {
+        "ViewTabPositionTopAction", NULL, N_("To_p"), NULL,
+        N_("Display the notebook tabs at the top of the window."), GTK_POS_TOP
+    },
+    {
+        "ViewTabPositionBottomAction", NULL, N_("B_ottom"), NULL,
+        N_("Display the notebook tabs at the bottom of the window."), GTK_POS_BOTTOM
+    },
+    {
+        "ViewTabPositionLeftAction", NULL, N_("_Left"), NULL,
+        N_("Display the notebook tabs at the left of the window."), GTK_POS_LEFT
+    },
+    {
+        "ViewTabPositionRightAction", NULL, N_("_Right"), NULL,
+        N_("Display the notebook tabs at the right of the window."), GTK_POS_RIGHT
+    },
+};
+
+/** The number of radio actions provided by the main window for tab
+ *  positions. */
+static guint n_tab_pos_radio_entries = G_N_ELEMENTS (tab_pos_radio_entries);
+
 #ifndef MAC_INTEGRATION
 /** An array of all of the radio action provided by the main window
  *  code. */
@@ -3576,12 +3604,21 @@ gnc_main_window_update_tab_position (gpointer prefs, gchar *pref, gpointer user_
     GncMainWindow *window;
     GtkPositionType position = GTK_POS_TOP;
     GncMainWindowPrivate *priv;
+    GtkAction *first_action;
+    GtkAction *position_action;
+    gsize i;
 
     g_return_if_fail (GNC_IS_MAIN_WINDOW(user_data));
 
     window = GNC_MAIN_WINDOW(user_data);
 
     ENTER ("window %p", window);
+
+    /* Ignore notification of the preference that is being set to false when
+     * the choice of tab position changes. */
+    if (pref && !gnc_prefs_get_bool (GNC_PREFS_GROUP_GENERAL, pref))
+        return;
+
     if (gnc_prefs_get_bool (GNC_PREFS_GROUP_GENERAL, GNC_PREF_TAB_POSITION_BOTTOM))
         position = GTK_POS_BOTTOM;
     else if (gnc_prefs_get_bool (GNC_PREFS_GROUP_GENERAL, GNC_PREF_TAB_POSITION_LEFT))
@@ -3592,6 +3629,26 @@ gnc_main_window_update_tab_position (gpointer prefs, gchar *pref, gpointer user_
     priv = GNC_MAIN_WINDOW_GET_PRIVATE (window);
     gtk_notebook_set_tab_pos (GTK_NOTEBOOK (priv->notebook), position);
 
+    /* Groups of radio actions use the first action for the callback and all
+     * change events so block/unblock signals on the first radio action. */
+    first_action = gtk_action_group_get_action (priv->action_group,
+                                                tab_pos_radio_entries[0].name);
+
+    for (i = n_tab_pos_radio_entries - 1; i > 0; i--)
+        if (tab_pos_radio_entries[i].value == position)
+            break;
+
+    position_action = gtk_action_group_get_action (priv->action_group,
+                                                   tab_pos_radio_entries[i].name);
+
+    g_signal_handlers_block_by_func (G_OBJECT (first_action),
+                                     G_CALLBACK (gnc_main_window_cmd_view_tab_position),
+                                     window);
+    gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (position_action), TRUE);
+    g_signal_handlers_unblock_by_func (G_OBJECT (first_action),
+                                       G_CALLBACK (gnc_main_window_cmd_view_tab_position),
+                                       window);
+
     LEAVE ("");
 }
 
@@ -3844,6 +3901,12 @@ gnc_main_window_setup_window (GncMainWindow *window)
     g_assert(merge_id || error);
     if (merge_id)
     {
+        gtk_action_group_add_radio_actions (priv->action_group,
+                                            tab_pos_radio_entries,
+                                            n_tab_pos_radio_entries,
+                                            0,
+                                            G_CALLBACK(gnc_main_window_cmd_view_tab_position),
+                                            window);
         gtk_window_add_accel_group (GTK_WINDOW (window),
                                     gtk_ui_manager_get_accel_group(window->ui_merge));
         gtk_ui_manager_ensure_update (window->ui_merge);
@@ -4601,6 +4664,45 @@ gnc_main_window_cmd_window_move_page (GtkAction *action, GncMainWindow *window)
     LEAVE("page moved");
 }
 
+static void
+gnc_main_window_cmd_view_tab_position (GtkAction *action,
+                                         GtkRadioAction *current,
+                                         GncMainWindow *window)
+{
+    GtkPositionType value = gtk_radio_action_get_current_value(current);
+
+    if (value != GTK_POS_TOP && gnc_prefs_get_bool (GNC_PREFS_GROUP_GENERAL, GNC_PREF_TAB_POSITION_TOP))
+        gnc_prefs_set_bool (GNC_PREFS_GROUP_GENERAL, GNC_PREF_TAB_POSITION_TOP, FALSE);
+
+    if (value != GTK_POS_BOTTOM && gnc_prefs_get_bool (GNC_PREFS_GROUP_GENERAL, GNC_PREF_TAB_POSITION_BOTTOM))
+        gnc_prefs_set_bool (GNC_PREFS_GROUP_GENERAL, GNC_PREF_TAB_POSITION_BOTTOM, FALSE);
+
+    if (value != GTK_POS_LEFT && gnc_prefs_get_bool (GNC_PREFS_GROUP_GENERAL, GNC_PREF_TAB_POSITION_LEFT))
+        gnc_prefs_set_bool (GNC_PREFS_GROUP_GENERAL, GNC_PREF_TAB_POSITION_LEFT, FALSE);
+
+    if (value != GTK_POS_RIGHT && gnc_prefs_get_bool (GNC_PREFS_GROUP_GENERAL, GNC_PREF_TAB_POSITION_RIGHT))
+        gnc_prefs_set_bool (GNC_PREFS_GROUP_GENERAL, GNC_PREF_TAB_POSITION_RIGHT, FALSE);
+
+    switch (value)
+    {
+    case GTK_POS_TOP:
+        gnc_prefs_set_bool (GNC_PREFS_GROUP_GENERAL, GNC_PREF_TAB_POSITION_TOP, TRUE);
+        break;
+
+    case GTK_POS_BOTTOM:
+        gnc_prefs_set_bool (GNC_PREFS_GROUP_GENERAL, GNC_PREF_TAB_POSITION_BOTTOM, TRUE);
+        break;
+
+    case GTK_POS_LEFT:
+        gnc_prefs_set_bool (GNC_PREFS_GROUP_GENERAL, GNC_PREF_TAB_POSITION_LEFT, TRUE);
+        break;
+
+    case GTK_POS_RIGHT:
+        gnc_prefs_set_bool (GNC_PREFS_GROUP_GENERAL, GNC_PREF_TAB_POSITION_RIGHT, TRUE);
+        break;
+    }
+}
+
 #ifndef MAC_INTEGRATION
 static void
 gnc_main_window_cmd_window_raise (GtkAction *action,
diff --git a/gnucash/ui/gnc-main-window-ui.xml b/gnucash/ui/gnc-main-window-ui.xml
index 77580a7c1..64068dafc 100644
--- a/gnucash/ui/gnc-main-window-ui.xml
+++ b/gnucash/ui/gnc-main-window-ui.xml
@@ -51,6 +51,12 @@
       <menuitem name="ViewToolbar" action="ViewToolbarAction"/>
       <menuitem name="ViewSummary" action="ViewSummaryAction"/>
       <menuitem name="ViewStatusbar" action="ViewStatusbarAction"/>
+      <menu name="ViewTabPosition" action="ViewTabPositionAction">
+        <menuitem name="ViewTabPositionTop" action="ViewTabPositionTopAction"/>
+        <menuitem name="ViewTabPositionBottom" action="ViewTabPositionBottomAction"/>
+        <menuitem name="ViewTabPositionLeft" action="ViewTabPositionLeftAction"/>
+        <menuitem name="ViewTabPositionRight" action="ViewTabPositionRightAction"/>
+      </menu>
       <separator name="ViewSep1"/>
       <placeholder name="ViewContentPlaceholder"/>
       <separator name="ViewSep2"/>



Summary of changes:
 gnucash/gnome-utils/gnc-main-window.c | 102 ++++++++++++++++++++++++++++++++++
 gnucash/ui/gnc-main-window-ui.xml     |   6 ++
 2 files changed, 108 insertions(+)



More information about the gnucash-changes mailing list