From d6d1815a7066f183e8f528bf261085ba9dc9c22b Mon Sep 17 00:00:00 2001 From: David Hampton Date: Wed, 8 Mar 2006 02:26:53 +0000 Subject: [PATCH] Remove all usage of gnc_get_current_session / book / whatever except at the very top level when the dialog is originally created. Tell the component manager to delete the dialog when the session is destroyed. Remove support for an old url-that-generates-a-price-edit-window trick. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13531 57a11ea4-9604-0410-9ed3-97b8803252fd --- ChangeLog | 12 +++++++ src/gnc-ui.h | 5 ++- src/gnome/dialog-commodities.c | 10 ++++-- src/gnome/dialog-price-edit-db.c | 34 +++++++++++--------- src/gnome/dialog-price-editor.c | 54 +++++++++++++------------------- src/gnome/top-level.c | 32 ------------------- 6 files changed, 61 insertions(+), 86 deletions(-) diff --git a/ChangeLog b/ChangeLog index 40104bf103..7fe83cd6a0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,17 @@ 2006-03-07 David Hampton + * src/gnome-utils/gnc-file.c: + * src/gnome/dialog-price-editor.c: + * src/gnome/top-level.c: + * src/gnome/dialog-commodities.c: + * src/gnome/dialog-price-edit-db.c: + + * src/gnc-ui.h: Remove all usage of gnc_get_current_session / book + / whatever except at the very top level when the dialog is + originally created. Tell the component manager to delete the + dialog when the session is destroyed. Remove support for an old + url-that-generates-a-price-edit-window trick. + * src/engine/gnc-pricedb.c: Use the pointer to the commodity as a hash key instead of looking up the commodity string and then hashing that. Fixes 332678. diff --git a/src/gnc-ui.h b/src/gnc-ui.h index ac94124721..cd9aa011d2 100644 --- a/src/gnc-ui.h +++ b/src/gnc-ui.h @@ -107,9 +107,8 @@ typedef enum GNC_PRICE_NEW, } GNCPriceEditType; -GNCPrice* gnc_price_edit_dialog (gncUIWidget parent, GNCPrice *price, - GNCPriceEditType type); -GNCPrice * gnc_price_edit_by_guid (GtkWidget * parent, const GUID * guid); +GNCPrice* gnc_price_edit_dialog (gncUIWidget parent, QofSession *session, + GNCPrice *price, GNCPriceEditType type); void gnc_prices_dialog (gncUIWidget parent); void gnc_commodities_dialog (gncUIWidget parent); diff --git a/src/gnome/dialog-commodities.c b/src/gnome/dialog-commodities.c index 17a0feb3ad..ee242c3c7e 100644 --- a/src/gnome/dialog-commodities.c +++ b/src/gnome/dialog-commodities.c @@ -37,6 +37,7 @@ #include "gnc-ui-util.h" #include "gnc-gconf-utils.h" #include "gnc-gnome-utils.h" +#include "gnc-session.h" #define DIALOG_COMMODITIES_CM_CLASS "dialog-commodities" @@ -48,6 +49,7 @@ typedef struct { GtkWidget * dialog; + QofSession *session; QofBook *book; GncTreeViewCommodity * commodity_tree; @@ -104,7 +106,7 @@ remove_clicked (CommoditiesDialog *cd) if (commodity == NULL) return; - accounts = xaccGroupGetSubAccounts (gnc_get_current_group ()); + accounts = xaccGroupGetSubAccounts (xaccGetAccountGroup(cd->book)); can_delete = TRUE; do_delete = FALSE; @@ -165,7 +167,7 @@ remove_clicked (CommoditiesDialog *cd) { gnc_commodity_table *ct; - ct = gnc_get_current_commodities (); + ct = gnc_book_get_commodity_table (cd->book); for (node = prices; node; node = node->next) gnc_pricedb_remove_price(pdb, node->data); @@ -287,7 +289,8 @@ gnc_commodities_dialog_create (GtkWidget * parent, CommoditiesDialog *cd) dialog = glade_xml_get_widget (xml, "Commodities Dialog"); cd->dialog = dialog; - cd->book = gnc_get_current_book(); + cd->session = gnc_get_current_session(); + cd->book = qof_session_get_book(cd->session); cd->show_currencies = gnc_gconf_get_bool(GCONF_SECTION, "include_iso", NULL); glade_xml_signal_autoconnect_full(xml, gnc_glade_autoconnect_full_func, cd); @@ -384,6 +387,7 @@ gnc_commodities_dialog (GtkWidget * parent) component_id = gnc_register_gui_component (DIALOG_COMMODITIES_CM_CLASS, refresh_handler, close_handler, cd); + gnc_gui_component_set_session (component_id, cd->session); gtk_widget_grab_focus (GTK_WIDGET(cd->commodity_tree)); diff --git a/src/gnome/dialog-price-edit-db.c b/src/gnome/dialog-price-edit-db.c index 3a7b80391c..a8009adeb2 100644 --- a/src/gnome/dialog-price-edit-db.c +++ b/src/gnome/dialog-price-edit-db.c @@ -39,6 +39,7 @@ #include "gnc-engine.h" #include "gnc-gui-query.h" #include "gnc-pricedb.h" +#include "gnc-session.h" #include "gnc-tree-view-price.h" #include "gnc-ui.h" #include "gnc-ui-util.h" @@ -66,13 +67,14 @@ void gnc_prices_dialog_get_quotes_clicked (GtkWidget *widget, gpointer data); typedef struct { GtkWidget * dialog; + QofSession *session; + QofBook *book; + GNCPriceDB *price_db; GncTreeViewPrice * price_tree; GtkWidget * edit_button; GtkWidget * remove_button; - - GNCPriceDB *price_db; } PricesDialog; @@ -131,7 +133,8 @@ gnc_prices_dialog_edit_clicked (GtkWidget *widget, gpointer data) return; } - gnc_price_edit_dialog (pdb_dialog->dialog, price_list->data, GNC_PRICE_EDIT); + gnc_price_edit_dialog (pdb_dialog->dialog, pdb_dialog->session, + price_list->data, GNC_PRICE_EDIT); g_list_free(price_list); LEAVE(" "); } @@ -188,10 +191,7 @@ gnc_prices_dialog_remove_clicked (GtkWidget *widget, gpointer data) } if (response == GTK_RESPONSE_YES) { - GNCBook *book = gnc_get_current_book (); - GNCPriceDB *pdb = gnc_book_get_pricedb (book); - - g_list_foreach(price_list, (GFunc)remove_helper, pdb); + g_list_foreach(price_list, (GFunc)remove_helper, pdb_dialog->price_db); } g_list_free(price_list); LEAVE(" "); @@ -218,8 +218,6 @@ gnc_prices_dialog_remove_old_clicked (GtkWidget *widget, gpointer data) result = gtk_dialog_run (GTK_DIALOG (dialog)); if (result == GTK_RESPONSE_OK) { - GNCBook *book = gnc_get_current_book (); - GNCPriceDB *pdb = gnc_book_get_pricedb (book); Timespec ts; DEBUG("deleting prices"); @@ -231,7 +229,8 @@ gnc_prices_dialog_remove_old_clicked (GtkWidget *widget, gpointer data) button = glade_xml_get_widget (xml, "delete_last"); delete_last = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)); - gnc_pricedb_remove_old_prices(pdb, ts, delete_user, delete_last); + gnc_pricedb_remove_old_prices(pdb_dialog->price_db, ts, + delete_user, delete_last); } gtk_widget_destroy(dialog); @@ -251,14 +250,15 @@ gnc_prices_dialog_add_clicked (GtkWidget *widget, gpointer data) price = price_list->data; g_list_free(price_list); } - gnc_price_edit_dialog (pdb_dialog->dialog, price, GNC_PRICE_NEW); + gnc_price_edit_dialog (pdb_dialog->dialog, pdb_dialog->session, + price, GNC_PRICE_NEW); LEAVE(" "); } void gnc_prices_dialog_get_quotes_clicked (GtkWidget *widget, gpointer data) { - GNCBook *book = gnc_get_current_book (); + PricesDialog *pdb_dialog = data; SCM quotes_func; SCM book_scm; @@ -269,7 +269,7 @@ gnc_prices_dialog_get_quotes_clicked (GtkWidget *widget, gpointer data) return; } - book_scm = gnc_book_to_scm (book); + book_scm = gnc_book_to_scm (pdb_dialog->book); if (SCM_NFALSEP (scm_not (book_scm))) { LEAVE("no book"); return; @@ -353,7 +353,10 @@ gnc_prices_dialog_create (GtkWidget * parent, PricesDialog *pdb_dialog) dialog = glade_xml_get_widget (xml, "Prices Dialog"); pdb_dialog->dialog = dialog; - pdb_dialog->price_db = gnc_pricedb_get_db(gnc_get_current_book()); + + pdb_dialog->session = gnc_get_current_session(); + pdb_dialog->book = qof_session_get_book(pdb_dialog->session); + pdb_dialog->price_db = gnc_pricedb_get_db(pdb_dialog->book); glade_xml_signal_autoconnect_full(xml, gnc_glade_autoconnect_full_func, pdb_dialog); @@ -366,7 +369,7 @@ gnc_prices_dialog_create (GtkWidget * parent, PricesDialog *pdb_dialog) /* price tree */ scrolled_window = glade_xml_get_widget (xml, "price_list_window"); - view = gnc_tree_view_price_new(gnc_get_current_book(), + view = gnc_tree_view_price_new(pdb_dialog->book, "gconf-section", GCONF_SECTION, "show-column-menu", TRUE, NULL); @@ -464,6 +467,7 @@ gnc_prices_dialog (GtkWidget * parent) component_id = gnc_register_gui_component (DIALOG_PRICE_DB_CM_CLASS, refresh_handler, close_handler, pdb_dialog); + gnc_gui_component_set_session (component_id, pdb_dialog->session); gtk_widget_grab_focus (GTK_WIDGET(pdb_dialog->price_tree)); diff --git a/src/gnome/dialog-price-editor.c b/src/gnome/dialog-price-editor.c index 92bece55f6..574aeb09ef 100644 --- a/src/gnome/dialog-price-editor.c +++ b/src/gnome/dialog-price-editor.c @@ -52,6 +52,9 @@ typedef struct { GtkWidget * dialog; + QofSession *session; + QofBook *book; + GNCPriceDB *price_db; GtkWidget * commodity_edit; GtkWidget * currency_edit; @@ -221,8 +224,6 @@ void pedit_dialog_response_cb (GtkDialog *dialog, gint response, gpointer data) { PriceEditDialog *pedit_dialog = data; - GNCBook *book = gnc_get_current_book (); - GNCPriceDB *pdb = gnc_book_get_pricedb (book); const char *error_str; if (response == GTK_RESPONSE_OK) { @@ -234,7 +235,7 @@ pedit_dialog_response_cb (GtkDialog *dialog, gint response, gpointer data) pedit_dialog->changed = FALSE; if (TRUE == pedit_dialog->new) - gnc_pricedb_add_price (pdb, pedit_dialog->price); + gnc_pricedb_add_price (pedit_dialog->price_db, pedit_dialog->price); gnc_gui_refresh_all (); } @@ -247,8 +248,6 @@ pedit_dialog_response_cb (GtkDialog *dialog, gint response, gpointer data) static void commodity_changed_cb (GNCGeneralSelect *gsl, gpointer data) { - GNCBook *book; - GNCPriceDB *pdb; gnc_commodity *commodity = NULL; gnc_commodity *currency = NULL; GList *price_list; @@ -261,10 +260,8 @@ commodity_changed_cb (GNCGeneralSelect *gsl, gpointer data) if(commodity) { - book = gnc_price_get_book (pedit_dialog->price); - pdb = gnc_book_get_pricedb (book); - - price_list = gnc_pricedb_lookup_latest_any_currency (pdb, commodity); + price_list = gnc_pricedb_lookup_latest_any_currency + (pedit_dialog->price_db, commodity); if(price_list) { currency = gnc_price_get_currency((GNCPrice *)price_list->data); @@ -292,7 +289,9 @@ pedit_data_changed_cb (GtkWidget *w, gpointer data) } static void -gnc_price_pedit_dialog_create (GtkWidget * parent, PriceEditDialog *pedit_dialog) +gnc_price_pedit_dialog_create (GtkWidget *parent, + PriceEditDialog *pedit_dialog, + QofSession *session) { GladeXML *xml; GNCPrintAmountInfo print_info; @@ -304,6 +303,10 @@ gnc_price_pedit_dialog_create (GtkWidget * parent, PriceEditDialog *pedit_dialog xml = gnc_glade_xml_new ("price.glade", "Price Dialog"); + pedit_dialog->session = session; + pedit_dialog->book = qof_session_get_book(pedit_dialog->session); + pedit_dialog->price_db = gnc_pricedb_get_db(pedit_dialog->book); + dialog = glade_xml_get_widget (xml, "Price Dialog"); pedit_dialog->dialog = dialog; @@ -434,7 +437,10 @@ show_handler (const char *class, gint component_id, * Return: nothing * \********************************************************************/ GNCPrice * -gnc_price_edit_dialog (GtkWidget * parent, GNCPrice * price, GNCPriceEditType type) +gnc_price_edit_dialog (GtkWidget * parent, + QofSession *session, + GNCPrice * price, + GNCPriceEditType type) { PriceEditDialog *pedit_dialog; gint component_id; @@ -445,15 +451,15 @@ gnc_price_edit_dialog (GtkWidget * parent, GNCPrice * price, GNCPriceEditType ty return(price); pedit_dialog = g_new0 (PriceEditDialog, 1); - gnc_price_pedit_dialog_create (parent, pedit_dialog); + gnc_price_pedit_dialog_create (parent, pedit_dialog, session); gnc_restore_window_size(GCONF_SECTION, GTK_WINDOW(pedit_dialog->dialog)); switch (type) { case GNC_PRICE_NEW: if (price) { - price = gnc_price_clone(price, gnc_get_current_book ()); + price = gnc_price_clone(price, pedit_dialog->book); } else { - price = gnc_price_create (gnc_get_current_book ()); + price = gnc_price_create (pedit_dialog->book); } gnc_price_new_price_init(price); pedit_dialog->new = TRUE; @@ -471,28 +477,10 @@ gnc_price_edit_dialog (GtkWidget * parent, GNCPrice * price, GNCPriceEditType ty component_id = gnc_register_gui_component (DIALOG_PRICE_EDIT_CM_CLASS, refresh_handler, close_handler, pedit_dialog); + gnc_gui_component_set_session (component_id, pedit_dialog->session); gtk_widget_grab_focus (pedit_dialog->commodity_edit); gtk_widget_show (pedit_dialog->dialog); return(price); } - -/********************************************************************\ - * gnc_price_edit_by_guid * - * opens up a window to edit price information * - * * - * Args: parent - the parent of the window to be created * - * Return: nothing * -\********************************************************************/ -GNCPrice * -gnc_price_edit_by_guid (GtkWidget * parent, const GUID * guid) -{ - GNCPrice *price; - - price = gnc_price_lookup (guid, gnc_get_current_book ()); - if (price == NULL) - return(NULL); - - return(gnc_price_edit_dialog(parent, price, GNC_PRICE_EDIT)); -} diff --git a/src/gnome/top-level.c b/src/gnome/top-level.c index 0f990f3ee3..e36cd59867 100644 --- a/src/gnome/top-level.c +++ b/src/gnome/top-level.c @@ -167,35 +167,6 @@ gnc_html_register_url_cb (const char *location, const char *label, /* ============================================================== */ -static gboolean -gnc_html_price_url_cb (const char *location, const char *label, - gboolean new_window, GNCURLResult *result) -{ - QofBook * book = gnc_get_current_book(); - g_return_val_if_fail (location != NULL, FALSE); - g_return_val_if_fail (result != NULL, FALSE); - - result->load_to_stream = FALSE; - - /* href="gnc-register:guid=12345678901234567890123456789012" */ - IF_TYPE ("price-guid=", GNC_ID_PRICE) - if (!gnc_price_edit_by_guid (NULL, &guid)) - { - result->error_message = g_strdup_printf (_("No such price: %s"), - location); - return FALSE; - } - } - else - { - result->error_message = g_strdup_printf (_("Badly formed URL %s"), - location); - return FALSE; - } - - return TRUE; -} - /** Restore all persistent program state. This function finds the * "new" state file associated with a specific book guid. It then * iterates through this state information, calling a helper function @@ -389,9 +360,6 @@ gnc_main_gui_init (void) gnc_html_register_url_handler (URL_TYPE_REGISTER, gnc_html_register_url_cb); - gnc_html_register_url_handler (URL_TYPE_PRICE, - gnc_html_price_url_cb); - gnc_ui_sx_initialize(); /* FIXME Remove this test code */