From 3365baa7ed609e8bd07a9df49418abd5f3c8b968 Mon Sep 17 00:00:00 2001 From: Christian Stimming Date: Mon, 14 Nov 2011 21:28:32 +0000 Subject: [PATCH] Take into account the read-only flag of the book to update the buttons in the register accordingly. Also, the register itself must be read-only. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@21569 57a11ea4-9604-0410-9ed3-97b8803252fd --- src/engine/Transaction.c | 15 +++++++---- src/gnome/gnc-plugin-page-register.c | 38 ++++++++++++++++++++++++++++ src/gnome/gnc-split-reg.c | 7 +++++ 3 files changed, 55 insertions(+), 5 deletions(-) diff --git a/src/engine/Transaction.c b/src/engine/Transaction.c index 03f63c975d..94b62ab03c 100644 --- a/src/engine/Transaction.c +++ b/src/engine/Transaction.c @@ -1121,8 +1121,11 @@ xaccTransBeginEdit (Transaction *trans) if (qof_book_shutting_down(qof_instance_get_book(trans))) return; - xaccOpenLog (); - xaccTransWriteLog (trans, 'B'); + if (!qof_book_is_readonly(qof_instance_get_book(trans))) + { + xaccOpenLog (); + xaccTransWriteLog (trans, 'B'); + } /* Make a clone of the transaction; we will use this * in case we need to roll-back the edit. */ @@ -1179,7 +1182,7 @@ do_destroy (Transaction *trans) destroy_gains (trans); /* Make a log in the journal before destruction. */ - if (!shutting_down) + if (!shutting_down && !qof_book_is_readonly(qof_instance_get_book(trans))) xaccTransWriteLog (trans, 'D'); qof_event_gen (&trans->inst, QOF_EVENT_DESTROY, NULL); @@ -1288,7 +1291,8 @@ static void trans_cleanup_commit(Transaction *trans) } g_list_free(slist); - xaccTransWriteLog (trans, 'C'); + if (!qof_book_is_readonly(qof_instance_get_book(trans))) + xaccTransWriteLog (trans, 'C'); /* Get rid of the copy we made. We won't be rolling back, * so we don't need it any more. */ @@ -1512,7 +1516,8 @@ xaccTransRollbackEdit (Transaction *trans) } } - xaccTransWriteLog (trans, 'R'); + if (!qof_book_is_readonly(qof_instance_get_book(trans))) + xaccTransWriteLog (trans, 'R'); xaccFreeTransaction (trans->orig); diff --git a/src/gnome/gnc-plugin-page-register.c b/src/gnome/gnc-plugin-page-register.c index 105195f466..e519cab50c 100644 --- a/src/gnome/gnc-plugin-page-register.c +++ b/src/gnome/gnc-plugin-page-register.c @@ -745,6 +745,31 @@ gnc_plugin_page_register_get_account (GncPluginPageRegister *page) return NULL; } +/* This is the list of actions which are switched inactive in a read-only book. */ +static const char* readonly_inactive_actions[] = +{ + "EditCutAction", + "EditPasteAction", + "CutTransactionAction", + "PasteTransactionAction", + "DuplicateTransactionAction", + "DeleteTransactionAction", + "RemoveTransactionSplitsAction", + "RecordTransactionAction", + "CancelTransactionAction", + "UnvoidTransactionAction", + "VoidTransactionAction", + "ReverseTransactionAction", + "ShiftTransactionForwardAction", + "ActionsTransferAction", + "ActionsReconcileAction", + "ActionsStockSplitAction", + "ScheduleTransactionAction", + "ScrubAllAction", + "ScrubCurrentAction", + NULL +}; + static void gnc_plugin_page_register_ui_update (gpointer various, GncPluginPageRegister *page) { @@ -777,6 +802,19 @@ gnc_plugin_page_register_ui_update (gpointer various, GncPluginPageRegister *pag action = gnc_plugin_page_get_action (GNC_PLUGIN_PAGE(page), "UnvoidTransactionAction"); gtk_action_set_sensitive (GTK_ACTION(action), voided); + + /* If we are in a readonly book, make any modifying action inactive */ + if (qof_book_is_readonly(gnc_get_current_book())) + { + const char **iter; + for (iter = readonly_inactive_actions; *iter; ++iter) + { + /* Set the action's sensitivity */ + GtkAction *action = gnc_plugin_page_get_action (GNC_PLUGIN_PAGE(page), *iter); + gtk_action_set_sensitive(action, FALSE); + } + + } } static void diff --git a/src/gnome/gnc-split-reg.c b/src/gnome/gnc-split-reg.c index 81ca751243..477e6e2af1 100644 --- a/src/gnome/gnc-split-reg.c +++ b/src/gnome/gnc-split-reg.c @@ -1975,6 +1975,13 @@ gnc_split_reg_determine_read_only( GNCSplitReg *gsr ) dialog_args *args = g_malloc(sizeof(dialog_args)); SplitRegister *reg; + if (qof_book_is_readonly(gnc_get_current_book())) + { + /* Is the book read-only? Then for sure also make this register + read-only. */ + gsr->read_only = TRUE; + } + if ( !gsr->read_only ) {