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
This commit is contained in:
David Hampton 2006-03-08 02:26:53 +00:00
parent 408f7d2779
commit d6d1815a70
6 changed files with 61 additions and 86 deletions

View File

@ -1,5 +1,17 @@
2006-03-07 David Hampton <hampton@employees.org>
* 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.

View File

@ -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);

View File

@ -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));

View File

@ -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));

View File

@ -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));
}

View File

@ -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 */