From 6f65c5adcfddfb6d3ebfae17775cf6f6b7812279 Mon Sep 17 00:00:00 2001 From: Dave Peticolas Date: Sat, 7 Oct 2000 08:12:48 +0000 Subject: [PATCH] Jump to transaction after a double-click in the reconcile window. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@3029 57a11ea4-9604-0410-9ed3-97b8803252fd --- src/gnome/reconcile-list.c | 35 +++++++++++++++++++++++++++++++++-- src/gnome/reconcile-list.h | 2 ++ src/gnome/window-reconcile.c | 24 +++++++++++++++++++++++- 3 files changed, 58 insertions(+), 3 deletions(-) diff --git a/src/gnome/reconcile-list.c b/src/gnome/reconcile-list.c index dafa834e64..8ed7162cf9 100644 --- a/src/gnome/reconcile-list.c +++ b/src/gnome/reconcile-list.c @@ -39,6 +39,7 @@ enum { TOGGLE_RECONCILED, + DOUBLE_CLICK_SPLIT, LAST_SIGNAL }; @@ -227,6 +228,16 @@ gnc_reconcile_list_class_init(GNCReconcileListClass *klass) GTK_TYPE_NONE, 1, GTK_TYPE_POINTER); + reconcile_list_signals[DOUBLE_CLICK_SPLIT] = + gtk_signal_new("double_click_split", + GTK_RUN_FIRST, + object_class->type, + GTK_SIGNAL_OFFSET(GNCReconcileListClass, + double_click_split), + gtk_marshal_NONE__POINTER, + GTK_TYPE_NONE, 1, + GTK_TYPE_POINTER); + gtk_object_class_add_signals(object_class, reconcile_list_signals, LAST_SIGNAL); @@ -237,6 +248,7 @@ gnc_reconcile_list_class_init(GNCReconcileListClass *klass) clist_class->unselect_row = gnc_reconcile_list_unselect_row; klass->toggle_reconciled = NULL; + klass->double_click_split = NULL; } static void @@ -290,8 +302,7 @@ gnc_reconcile_list_toggle(GNCReconcileList *list) gnc_reconcile_list_set_row_style(list, row, reconciled); gtk_signal_emit(GTK_OBJECT(list), - reconcile_list_signals[TOGGLE_RECONCILED], - split); + reconcile_list_signals[TOGGLE_RECONCILED], split); } static void @@ -304,6 +315,16 @@ gnc_reconcile_list_select_row(GtkCList *clist, gint row, gint column, gnc_reconcile_list_toggle(list); GTK_CLIST_CLASS(parent_class)->select_row(clist, row, column, event); + + if (event && (event->type == GDK_2BUTTON_PRESS)) + { + Split *split; + + split = gtk_clist_get_row_data(clist, row); + + gtk_signal_emit(GTK_OBJECT(list), + reconcile_list_signals[DOUBLE_CLICK_SPLIT], split); + } } static void @@ -320,6 +341,16 @@ gnc_reconcile_list_unselect_row(GtkCList *clist, gint row, gint column, } GTK_CLIST_CLASS(parent_class)->unselect_row(clist, row, column, event); + + if (event && (event->type == GDK_2BUTTON_PRESS)) + { + Split *split; + + split = gtk_clist_get_row_data(clist, row); + + gtk_signal_emit(GTK_OBJECT(list), + reconcile_list_signals[DOUBLE_CLICK_SPLIT], split); + } } static void diff --git a/src/gnome/reconcile-list.h b/src/gnome/reconcile-list.h index 97edf603fe..71381d09de 100644 --- a/src/gnome/reconcile-list.h +++ b/src/gnome/reconcile-list.h @@ -75,6 +75,8 @@ struct _GNCReconcileListClass void (*toggle_reconciled) (GNCReconcileList *list, Split *split); + void (*double_click_split) (GNCReconcileList *list, + Split *split); }; /*********************************************************** diff --git a/src/gnome/window-reconcile.c b/src/gnome/window-reconcile.c index c9707a4959..17e5fc8787 100644 --- a/src/gnome/window-reconcile.c +++ b/src/gnome/window-reconcile.c @@ -459,12 +459,31 @@ static void gnc_reconcile_window_list_cb(GNCReconcileList *list, Split *split, gpointer data) { - RecnWindow *recnData = (RecnWindow *) data; + RecnWindow *recnData = data; gnc_reconcile_window_set_sensitivity(recnData); recnRecalculateBalance(recnData); } +static void +gnc_reconcile_window_double_click_cb(GNCReconcileList *list, Split *split, + gpointer data) +{ + RecnWindow *recnData = data; + RegWindow *regData; + + /* This should never be true, but be paranoid */ + if (split == NULL) + return; + + regData = regWindowSimple(recnData->account); + if (regData == NULL) + return; + + gnc_register_raise(regData); + gnc_register_jump_to_split_amount(regData, split); +} + static void gnc_reconcile_window_focus_cb(GtkWidget *widget, GdkEventFocus *event, gpointer data) @@ -559,6 +578,9 @@ gnc_reconcile_window_create_list_box(Account *account, gtk_signal_connect(GTK_OBJECT(list), "toggle_reconciled", GTK_SIGNAL_FUNC(gnc_reconcile_window_list_cb), recnData); + gtk_signal_connect(GTK_OBJECT(list), "double_click_split", + GTK_SIGNAL_FUNC(gnc_reconcile_window_double_click_cb), + recnData); gtk_signal_connect(GTK_OBJECT(list), "focus_in_event", GTK_SIGNAL_FUNC(gnc_reconcile_window_focus_cb), recnData);