r20078 - gnucash/trunk/src - Bug #636907: Improve "Close when finished" handling in "Online Banking Connection Window"

Christian Stimming cstim at code.gnucash.org
Wed Jan 12 14:47:35 EST 2011


Author: cstim
Date: 2011-01-12 14:47:34 -0500 (Wed, 12 Jan 2011)
New Revision: 20078
Trac: http://svn.gnucash.org/trac/changeset/20078

Modified:
   gnucash/trunk/src/gnome-utils/gnc-main-window.c
   gnucash/trunk/src/gnome-utils/gnc-main-window.h
   gnucash/trunk/src/gnome-utils/gnc-plugin.c
   gnucash/trunk/src/gnome-utils/gnc-plugin.h
   gnucash/trunk/src/import-export/aqbanking/aqbanking.glade
   gnucash/trunk/src/import-export/aqbanking/gnc-gwen-gui.c
   gnucash/trunk/src/import-export/aqbanking/gnc-gwen-gui.h
   gnucash/trunk/src/import-export/aqbanking/gnc-plugin-aqbanking-ui.xml
   gnucash/trunk/src/import-export/aqbanking/gnc-plugin-aqbanking.c
   gnucash/trunk/src/import-export/aqbanking/gnc-plugin-aqbanking.h
Log:
Bug #636907: Improve "Close when finished" handling in "Online Banking Connection Window"

Patch by Manfred Usselmann:

This patch adds a toggle action to the online banking menu, which allows to
open and close the online banking log window. In addition it adds an option to
the online banking preferences to keep the log window open after the transfer
has finished.

Modified: gnucash/trunk/src/gnome-utils/gnc-main-window.c
===================================================================
--- gnucash/trunk/src/gnome-utils/gnc-main-window.c	2011-01-12 19:47:23 UTC (rev 20077)
+++ gnucash/trunk/src/gnome-utils/gnc-main-window.c	2011-01-12 19:47:34 UTC (rev 20078)
@@ -150,7 +150,6 @@
 static void do_popup_menu(GncPluginPage *page, GdkEventButton *event);
 static gboolean gnc_main_window_popup_menu_cb (GtkWidget *widget, GncPluginPage *page);
 
-static GtkAction *gnc_main_window_find_action (GncMainWindow *window, const gchar *name);
 #ifdef MAC_INTEGRATION
 static void gtk_quartz_shutdown(GtkOSXApplication *theApp, gpointer data);
 static gboolean gtk_quartz_should_quit(GtkOSXApplication *theApp, GncMainWindow *window);
@@ -2774,6 +2773,8 @@
                                const gchar *group_name,
                                GtkActionEntry *actions,
                                guint n_actions,
+                               GtkToggleActionEntry *toggle_actions,
+                               guint n_toggle_actions,
                                const gchar *filename,
                                gpointer user_data)
 {
@@ -2802,6 +2803,12 @@
     entry->action_group = gtk_action_group_new (group_name);
     gnc_gtk_action_group_set_translation_domain (entry->action_group, GETTEXT_PACKAGE);
     gtk_action_group_add_actions (entry->action_group, actions, n_actions, data);
+    if (toggle_actions != NULL && n_toggle_actions > 0)
+    {
+        gtk_action_group_add_toggle_actions (entry->action_group,
+                                             toggle_actions, n_toggle_actions,
+                                             data);
+    }
     gtk_ui_manager_insert_action_group (window->ui_merge, entry->action_group, 0);
     entry->merge_id = gtk_ui_manager_add_ui_from_file (window->ui_merge, pathname, &error);
     g_assert(entry->merge_id || error);
@@ -2876,7 +2883,7 @@
 }
 
 
-static GtkAction *
+GtkAction *
 gnc_main_window_find_action (GncMainWindow *window, const gchar *name)
 {
     GtkAction *action = NULL;

Modified: gnucash/trunk/src/gnome-utils/gnc-main-window.h
===================================================================
--- gnucash/trunk/src/gnome-utils/gnc-main-window.h	2011-01-12 19:47:23 UTC (rev 20077)
+++ gnucash/trunk/src/gnome-utils/gnc-main-window.h	2011-01-12 19:47:34 UTC (rev 20078)
@@ -221,6 +221,11 @@
  *
  *  @param n_entries The number of actions in the array.
  *
+ *  @param toggle_entries A pointer to an array of GtkToggleActionEntry.
+ *  These are the toggle actions that will be added to the user interface.
+ *
+ *  @param n_toggle_entries The number of toggle actions in the array.
+ *
  *  @param filename The filename containing the user interface
  *  definition that goes with this set of actions.
  *
@@ -231,6 +236,8 @@
                                     const gchar *group_name,
                                     GtkActionEntry *entries,
                                     guint n_entries,
+                                    GtkToggleActionEntry *toggle_entries,
+                                    guint n_toggle_entries,
                                     const gchar *filename,
                                     gpointer user_data);
 
@@ -381,6 +388,18 @@
  *  this action. */
 void gnc_main_window_all_action_set_sensitive (const gchar *action_name, gboolean sensitive);
 
+/** Find action in main window.
+ *
+ *  @param window Whe window which should be checked for the action.
+ *
+ *  @param name The name of the command to be retrieved.
+ *
+ *  @return A pointer to a GtkAction that was added with the
+ *  specified name. If the name cannot be found, then NULL will be
+ *  returned.
+ */
+GtkAction *gnc_main_window_find_action (GncMainWindow *window, const gchar *name);
+
 /**
  * Shows all main windows.
  **/

Modified: gnucash/trunk/src/gnome-utils/gnc-plugin.c
===================================================================
--- gnucash/trunk/src/gnome-utils/gnc-plugin.c	2011-01-12 19:47:23 UTC (rev 20077)
+++ gnucash/trunk/src/gnome-utils/gnc-plugin.c	2011-01-12 19:47:34 UTC (rev 20078)
@@ -179,9 +179,10 @@
     if (class->actions_name)
     {
         DEBUG ("%s: %d actions to merge with gui from %s",
-               class->actions_name, class->n_actions, class->ui_filename);
+               class->actions_name, (class->n_actions + class->n_toggle_actions), class->ui_filename);
         gnc_main_window_merge_actions (window, class->actions_name,
                                        class->actions, class->n_actions,
+                                       class->toggle_actions, class->n_toggle_actions,
                                        class->ui_filename, plugin);
 
 
@@ -260,7 +261,7 @@
     if (class->actions_name)
     {
         DEBUG ("%s: %d actions to unmerge",
-               class->actions_name, class->n_actions);
+               class->actions_name, (class->n_actions + class->n_toggle_actions));
         gnc_main_window_unmerge_actions (window, class->actions_name);
     }
     LEAVE ("");

Modified: gnucash/trunk/src/gnome-utils/gnc-plugin.h
===================================================================
--- gnucash/trunk/src/gnome-utils/gnc-plugin.h	2011-01-12 19:47:23 UTC (rev 20077)
+++ gnucash/trunk/src/gnome-utils/gnc-plugin.h	2011-01-12 19:47:34 UTC (rev 20078)
@@ -123,6 +123,11 @@
     GtkActionEntry *actions;
     /** The number of actions in the actions array. */
     guint n_actions;
+    /** An array of toggle actions that should automatically be added to
+     *  any GnuCash "main" content window that is opened. */
+    GtkToggleActionEntry *toggle_actions;
+    /** The number of toggle actions in the toggle actions array. */
+    guint n_toggle_actions;
     /** A NULL terminated list of actions that should be considered
      *  important.  In the toolbar, these actions will display the
      *  action name when the toolbar is in "text beside icons"

Modified: gnucash/trunk/src/import-export/aqbanking/aqbanking.glade
===================================================================
--- gnucash/trunk/src/import-export/aqbanking/aqbanking.glade	2011-01-12 19:47:23 UTC (rev 20077)
+++ gnucash/trunk/src/import-export/aqbanking/aqbanking.glade	2011-01-12 19:47:34 UTC (rev 20078)
@@ -1131,6 +1131,7 @@
                 <property name="use_underline">True</property>
                 <property name="active">True</property>
                 <property name="draw_indicator">True</property>
+                <signal name="toggled" handler="ggg_close_toggled_cb"/>
               </widget>
               <packing>
                 <property name="expand">False</property>
@@ -1745,8 +1746,8 @@
           </packing>
         </child>
         <child>
-          <widget class="GtkCheckButton" id="gconf/dialogs/import/hbci/remember_pin">
-            <property name="label" translatable="yes">Remember _PIN</property>
+          <widget class="GtkCheckButton" id="gconf/dialogs/import/hbci/close_on_finish">
+            <property name="label" translatable="yes">_Close log window when finished</property>
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">False</property>
@@ -1763,8 +1764,8 @@
           </packing>
         </child>
         <child>
-          <widget class="GtkCheckButton" id="checkbutton3">
-            <property name="label" translatable="yes">_Verbose debug messages</property>
+          <widget class="GtkCheckButton" id="gconf/dialogs/import/hbci/remember_pin">
+            <property name="label" translatable="yes">Remember _PIN</property>
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">False</property>
@@ -1780,6 +1781,24 @@
             <property name="x_padding">12</property>
           </packing>
         </child>
+        <child>
+          <widget class="GtkCheckButton" id="checkbutton3">
+            <property name="label" translatable="yes">_Verbose debug messages</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">False</property>
+            <property name="use_underline">True</property>
+            <property name="draw_indicator">True</property>
+          </widget>
+          <packing>
+            <property name="right_attach">4</property>
+            <property name="top_attach">3</property>
+            <property name="bottom_attach">4</property>
+            <property name="x_options">GTK_FILL</property>
+            <property name="y_options"></property>
+            <property name="x_padding">12</property>
+          </packing>
+        </child>
       </widget>
     </child>
   </widget>

Modified: gnucash/trunk/src/import-export/aqbanking/gnc-gwen-gui.c
===================================================================
--- gnucash/trunk/src/import-export/aqbanking/gnc-gwen-gui.c	2011-01-12 19:47:23 UTC (rev 20077)
+++ gnucash/trunk/src/import-export/aqbanking/gnc-gwen-gui.c	2011-01-12 19:47:34 UTC (rev 20078)
@@ -42,6 +42,7 @@
 #include "gnc-gwen-gui.h"
 #include "gnc-session.h"
 #include "gnc-ui.h"
+#include "gnc-plugin-aqbanking.h"
 #include "md5.h"
 #include "qof.h"
 
@@ -94,7 +95,31 @@
         GWEN_Gui_SetGui(NULL);
     }
 }
+void
+gnc_GWEN_Gui_set_close_flag(gboolean close_when_finished)
+{
+    gnc_gconf_set_bool(
+        GCONF_SECTION_AQBANKING, KEY_CLOSE_ON_FINISH,
+        close_when_finished,
+        NULL);
+}
+gboolean
+gnc_GWEN_Gui_get_close_flag()
+{
+    return gnc_gconf_get_bool(GCONF_SECTION_AQBANKING, KEY_CLOSE_ON_FINISH, NULL);
+}
 
+gboolean
+gnc_GWEN_Gui_show_dialog()
+{
+    return
+}
+
+void
+gnc_GWEN_Gui_hide_dialog()
+{
+}
+
 #else
 
 /* A unique full-blown GUI, featuring  */
@@ -191,6 +216,7 @@
                              gpointer user_data);
 void ggg_abort_clicked_cb(GtkButton *button, gpointer user_data);
 void ggg_close_clicked_cb(GtkButton *button, gpointer user_data);
+void ggg_close_toggled_cb(GtkToggleButton *button, gpointer user_data);
 
 enum _GuiState
 {
@@ -364,6 +390,71 @@
     LEAVE(" ");
 }
 
+void
+gnc_GWEN_Gui_set_close_flag(gboolean close_when_finished)
+{
+    gnc_gconf_set_bool(
+        GCONF_SECTION_AQBANKING, KEY_CLOSE_ON_FINISH,
+        close_when_finished,
+        NULL);
+
+    if (full_gui)
+    {
+        if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(full_gui->close_checkbutton))
+            != close_when_finished)
+        {
+            gtk_toggle_button_set_active(
+                GTK_TOGGLE_BUTTON(full_gui->close_checkbutton),
+                close_when_finished);
+        }
+    }
+}
+
+gboolean
+gnc_GWEN_Gui_get_close_flag()
+{
+    return gnc_gconf_get_bool(GCONF_SECTION_AQBANKING, KEY_CLOSE_ON_FINISH, NULL);
+}
+
+gboolean
+gnc_GWEN_Gui_show_dialog()
+{
+    GncGWENGui *gui = full_gui;
+
+    if (!gui)
+    {
+        gnc_GWEN_Gui_get(NULL);
+    }
+
+    if (gui)
+    {
+        if (gui->state == HIDDEN)
+        {
+            gui->state = FINISHED;
+        }
+        gtk_toggle_button_set_active(
+            GTK_TOGGLE_BUTTON(gui->close_checkbutton),
+            gnc_gconf_get_bool(GCONF_SECTION_AQBANKING, KEY_CLOSE_ON_FINISH, NULL));
+
+        show_dialog(gui, FALSE);
+
+        return TRUE;
+    }
+
+    return FALSE;
+}
+
+void
+gnc_GWEN_Gui_hide_dialog()
+{
+    GncGWENGui *gui = full_gui;
+
+    if (gui)
+    {
+        hide_dialog(gui);
+    }
+}
+
 static void
 register_callbacks(GncGWENGui *gui)
 {
@@ -599,6 +690,8 @@
 
     gtk_widget_show(gui->dialog);
 
+    gnc_plugin_aqbanking_set_logwindow_visible(TRUE);
+
     /* Clear the log window */
     if (clear_log)
     {
@@ -619,6 +712,8 @@
     /* Hide the dialog */
     gtk_widget_hide(gui->dialog);
 
+    gnc_plugin_aqbanking_set_logwindow_visible(FALSE);
+
     /* Remember whether the dialog is to be closed when finished */
     gnc_gconf_set_bool(
         GCONF_SECTION_AQBANKING, KEY_CLOSE_ON_FINISH,
@@ -1511,4 +1606,22 @@
 
     LEAVE(" ");
 }
+
+void
+ggg_close_toggled_cb(GtkToggleButton *button, gpointer user_data)
+{
+    GncGWENGui *gui = user_data;
+
+    g_return_if_fail(gui);
+    g_return_if_fail(gui->parent);
+
+    ENTER("gui=%p", gui);
+
+    gnc_gconf_set_bool(
+        GCONF_SECTION_AQBANKING, KEY_CLOSE_ON_FINISH,
+        gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)),
+        NULL);
+
+    LEAVE(" ");
+}
 #endif

Modified: gnucash/trunk/src/import-export/aqbanking/gnc-gwen-gui.h
===================================================================
--- gnucash/trunk/src/import-export/aqbanking/gnc-gwen-gui.h	2011-01-12 19:47:23 UTC (rev 20077)
+++ gnucash/trunk/src/import-export/aqbanking/gnc-gwen-gui.h	2011-01-12 19:47:34 UTC (rev 20078)
@@ -72,6 +72,33 @@
  */
 void gnc_GWEN_Gui_shutdown(void);
 
+/**
+ * Set "Close when finished" flag
+ *
+ * @param gboolean close_when_finished
+ */
+void gnc_GWEN_Gui_set_close_flag(gboolean close_when_finished);
+
+/**
+ * Get "Close when finished" flag
+ *
+ * @return gboolean close_when_finished
+ */
+gboolean gnc_GWEN_Gui_get_close_flag(void);
+
+/**
+ * Unhides Online Banking Connection Window (Make log visible)
+ *
+ * @return gboolean window is visible
+ */
+gboolean gnc_GWEN_Gui_show_dialog(void);
+
+/**
+ * Hides Online Banking Connection Window (Close log window)
+ *
+ */
+void gnc_GWEN_Gui_hide_dialog(void);
+
 G_END_DECLS
 
 /** @} */

Modified: gnucash/trunk/src/import-export/aqbanking/gnc-plugin-aqbanking-ui.xml
===================================================================
--- gnucash/trunk/src/import-export/aqbanking/gnc-plugin-aqbanking-ui.xml	2011-01-12 19:47:23 UTC (rev 20077)
+++ gnucash/trunk/src/import-export/aqbanking/gnc-plugin-aqbanking-ui.xml	2011-01-12 19:47:34 UTC (rev 20078)
@@ -19,9 +19,12 @@
         <menu name="OnlineActions" action="OnlineActionsAction">
           <menuitem name="ABGetBalance"         action="ABGetBalanceAction"/>
           <menuitem name="ABGetTrans"           action="ABGetTransAction"/>
+          <separator name="OnlineActionsSep1"/>
           <menuitem name="ABIssueTrans"         action="ABIssueTransAction"/>
           <menuitem name="ABIssueIntTrans"      action="ABIssueIntTransAction"/>
           <menuitem name="ABIssueDirectDebit"   action="ABIssueDirectDebitAction"/>
+          <separator name="OnlineActionsSep2"/>
+          <menuitem name="ABViewLogwindow"   action="ABViewLogwindowAction"/>
         </menu>
       </placeholder>
     </menu>

Modified: gnucash/trunk/src/import-export/aqbanking/gnc-plugin-aqbanking.c
===================================================================
--- gnucash/trunk/src/import-export/aqbanking/gnc-plugin-aqbanking.c	2011-01-12 19:47:23 UTC (rev 20077)
+++ gnucash/trunk/src/import-export/aqbanking/gnc-plugin-aqbanking.c	2011-01-12 19:47:34 UTC (rev 20078)
@@ -40,12 +40,14 @@
 #include "gnc-ab-transfer.h"
 #include "gnc-ab-utils.h"
 #include "gnc-ab-kvp.h"
+#include "gnc-gwen-gui.h"
 #include "gnc-file-aqb-import.h"
 #include "gnc-gconf-utils.h"
 #include "gnc-plugin-aqbanking.h"
 #include "gnc-plugin-manager.h"
 #include "gnc-plugin-page-account-tree.h"
 #include "gnc-plugin-page-register.h"
+#include "gnc-main-window.h"
 
 /* This static indicates the debugging module that this .o belongs to.  */
 static QofLogModule log_module = G_LOG_DOMAIN;
@@ -70,6 +72,7 @@
 static void gnc_plugin_ab_cmd_issue_transaction(GtkAction *action, GncMainWindowActionData *data);
 static void gnc_plugin_ab_cmd_issue_inttransaction(GtkAction *action, GncMainWindowActionData *data);
 static void gnc_plugin_ab_cmd_issue_direct_debit(GtkAction *action, GncMainWindowActionData *data);
+static void gnc_plugin_ab_cmd_view_logwindow(GtkToggleAction *action, GncMainWindow *window);
 static void gnc_plugin_ab_cmd_mt940_import(GtkAction *action, GncMainWindowActionData *data);
 static void gnc_plugin_ab_cmd_mt942_import(GtkAction *action, GncMainWindowActionData *data);
 static void gnc_plugin_ab_cmd_dtaus_import(GtkAction *action, GncMainWindowActionData *data);
@@ -78,6 +81,9 @@
 #define PLUGIN_ACTIONS_NAME "gnc-plugin-aqbanking-actions"
 #define PLUGIN_UI_FILENAME  "gnc-plugin-aqbanking-ui.xml"
 
+#define MENU_TOGGLE_ACTION_AB_VIEW_LOGWINDOW "ABViewLogwindowAction"
+
+
 static GtkActionEntry gnc_plugin_actions [] =
 {
     /* Menus */
@@ -147,6 +153,17 @@
 };
 static guint gnc_plugin_n_actions = G_N_ELEMENTS(gnc_plugin_actions);
 
+static GtkToggleActionEntry gnc_plugin_toggle_actions [] =
+{
+    {
+        MENU_TOGGLE_ACTION_AB_VIEW_LOGWINDOW, NULL,
+        N_("Show _log window"), NULL,
+        N_("Show the online banking log window."),
+        G_CALLBACK(gnc_plugin_ab_cmd_view_logwindow), TRUE
+    },
+};
+static guint gnc_plugin_n_toggle_actions = G_N_ELEMENTS(gnc_plugin_toggle_actions);
+
 static const gchar *need_account_actions[] =
 {
     "ABGetBalanceAction",
@@ -157,6 +174,8 @@
     NULL
 };
 
+static GncMainWindow *gnc_main_window = NULL;
+
 /************************************************************
  *                   Object Implementation                  *
  ************************************************************/
@@ -181,6 +200,8 @@
     plugin_class->actions_name       = PLUGIN_ACTIONS_NAME;
     plugin_class->actions            = gnc_plugin_actions;
     plugin_class->n_actions          = gnc_plugin_n_actions;
+    plugin_class->toggle_actions     = gnc_plugin_toggle_actions;
+    plugin_class->n_toggle_actions   = gnc_plugin_n_toggle_actions;
     plugin_class->ui_filename        = PLUGIN_UI_FILENAME;
     plugin_class->add_to_window      = gnc_plugin_aqbanking_add_to_window;
     plugin_class->remove_from_window = gnc_plugin_aqbanking_remove_from_window;
@@ -199,12 +220,20 @@
 gnc_plugin_aqbanking_add_to_window(GncPlugin *plugin, GncMainWindow *window,
                                    GQuark type)
 {
+    GtkAction *action;
+
+    gnc_main_window = window;
+
     g_signal_connect(window, "page_added",
                      G_CALLBACK(gnc_plugin_ab_main_window_page_added),
                      plugin);
     g_signal_connect(window, "page_changed",
                      G_CALLBACK(gnc_plugin_ab_main_window_page_changed),
                      plugin);
+
+    action = gnc_main_window_find_action(window, MENU_TOGGLE_ACTION_AB_VIEW_LOGWINDOW);
+
+    gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), FALSE);
 }
 
 static void
@@ -375,6 +404,20 @@
     return account;
 }
 
+void
+gnc_plugin_aqbanking_set_logwindow_visible(gboolean logwindow_visible)
+{
+    GtkAction *action;
+
+    action = gnc_main_window_find_action(gnc_main_window,
+                                         MENU_TOGGLE_ACTION_AB_VIEW_LOGWINDOW);
+    if (action)
+    {
+        gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action),
+                                     logwindow_visible);
+    }
+}
+
 /************************************************************
  *                    Command Callbacks                     *
  ************************************************************/
@@ -488,6 +531,24 @@
 }
 
 static void
+gnc_plugin_ab_cmd_view_logwindow(GtkToggleAction *action, GncMainWindow *window)
+{
+    if (gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(action)))
+    {
+        if (!gnc_GWEN_Gui_show_dialog())
+        {
+            /* Log window could not be made visible */
+            gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), FALSE);
+        }
+    }
+    else
+    {
+        gnc_GWEN_Gui_hide_dialog();
+    }
+}
+
+
+static void
 gnc_plugin_ab_cmd_mt940_import(GtkAction *action, GncMainWindowActionData *data)
 {
     gchar *format = gnc_gconf_get_string(GCONF_SECTION_AQBANKING,

Modified: gnucash/trunk/src/import-export/aqbanking/gnc-plugin-aqbanking.h
===================================================================
--- gnucash/trunk/src/import-export/aqbanking/gnc-plugin-aqbanking.h	2011-01-12 19:47:23 UTC (rev 20077)
+++ gnucash/trunk/src/import-export/aqbanking/gnc-plugin-aqbanking.h	2011-01-12 19:47:34 UTC (rev 20078)
@@ -77,6 +77,11 @@
  */
 void gnc_plugin_aqbanking_create_plugin(void);
 
+/**
+ * Set MENU_TOGGLE_ACTION_AB_VIEW_LOGWINDOW
+ */
+void gnc_plugin_aqbanking_set_logwindow_visible(gboolean logwindow_visible);
+
 G_END_DECLS
 
 /** @} */



More information about the gnucash-changes mailing list