[Gnucash-changes] Scott Oonk's G2 register bug-fix patches.

Joshua Sled jsled at cvs.gnucash.org
Sun Oct 30 14:20:10 EST 2005


Log Message:
-----------
Scott Oonk's G2 register bug-fix patches.
2005-10-30  Joshua Sled  <jsled at asynchronous.org>

	Patches from Scott Oonk <scott.oonk at gmail.com>:
	* src/register/register-gnome/combocell-gnome.c:
	* src/register/register-gnome/gnucash-item-list.c:
	Remove sort-state flag, code.
	* src/register/register-gnome/gnucash-item-list.c
	(gnc_item_list_show_selected): scroll to selected position.
	* src/register/register-gnome/combocell-gnome.c
	(gnc_combo_cell_autopop_init): auto-raise popups when initialized.
	* src/register/register-gnome/gnucash-item-list.c:
	Change signal emission so initial-combobox-display, keyboard
	arrows/return and selection work correctly.
	* GNOME2_STATUS: Remove items as per fixes.  Yay! :)

Tags:
----
gnucash-gnome2-dev

Modified Files:
--------------
    gnucash:
        GNOME2_STATUS
        ChangeLog
    gnucash/src/register/register-gnome:
        combocell-gnome.c
        gnucash-item-list.c
        gnucash-item-list.h

Revision Data
-------------
Index: ChangeLog
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/ChangeLog,v
retrieving revision 1.1487.2.361
retrieving revision 1.1487.2.362
diff -LChangeLog -LChangeLog -u -r1.1487.2.361 -r1.1487.2.362
--- ChangeLog
+++ ChangeLog
@@ -1,3 +1,18 @@
+2005-10-30  Joshua Sled  <jsled at asynchronous.org>
+
+	Patches from Scott Oonk <scott.oonk at gmail.com>:
+	* src/register/register-gnome/combocell-gnome.c:
+	* src/register/register-gnome/gnucash-item-list.c:
+	Remove sort-state flag, code.
+	* src/register/register-gnome/gnucash-item-list.c
+	(gnc_item_list_show_selected): scroll to selected position.
+	* src/register/register-gnome/combocell-gnome.c
+	(gnc_combo_cell_autopop_init): auto-raise popups when initialized.
+	* src/register/register-gnome/gnucash-item-list.c:
+	Change signal emission so initial-combobox-display, keyboard
+	arrows/return and selection work correctly.
+	* GNOME2_STATUS: Remove items as per fixes.  Yay! :)
+
 2005-10-28  David Hampton  <hampton at employees.org>
 
 	* src/backend/file/gnc-pricedb-xml-v2.c:
Index: GNOME2_STATUS
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/Attic/GNOME2_STATUS,v
retrieving revision 1.1.2.78
retrieving revision 1.1.2.79
diff -LGNOME2_STATUS -LGNOME2_STATUS -u -r1.1.2.78 -r1.1.2.79
--- GNOME2_STATUS
+++ GNOME2_STATUS
@@ -103,29 +103,6 @@
       char-insert callback/handler.  Instead, we register a one-shot
       immediate callback for the idle loop to do the selection.
 
-  - The first time it is used, the combocell popups (account-list,
-    split-action) immediately closes (before the user notices).  After that,
-    it functions normally.
-    
-    - (jsled) This is due to the "changed" signal on the tree-view-selection
-      getting fired, causing the popup to naturally close.  I *believe*
-      "changed" is emitted because the popup window gets
-      gtk_widget_grab_focus()ed, but I'm not 100% sure.  This doesn't explain
-      why it would only occur the first time.
-
-  - selection events on the combo-cells aren't working.
-
-    (gnucash:26380): GLib-GObject-WARNING **: gsignal.c:989: no emission of
-    signal "key-press-event" to stop for instance `0x855a240'
-
-    - (jsled) cannot reproduce, 08 Oct 2005
-
-  - selection of the date for the datecell seems to also select the
-    transaction underneath the calendar, leading to the "this transaction has
-    changed, do you want to save" dialog.
-
-    - (jsled) cannot reproduce as of 02 Oct 2005.
-
   - doesn't remember custom check formats.
 
   - duplicate-transaction dialog is not initialized with transaction number
Index: combocell-gnome.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/register/register-gnome/combocell-gnome.c,v
retrieving revision 1.11.4.9
retrieving revision 1.11.4.10
diff -Lsrc/register/register-gnome/combocell-gnome.c -Lsrc/register/register-gnome/combocell-gnome.c -u -r1.11.4.9 -r1.11.4.10
--- src/register/register-gnome/combocell-gnome.c
+++ src/register/register-gnome/combocell-gnome.c
@@ -45,6 +45,7 @@
 #include "messages.h"
 #include "table-allgui.h"
 
+#define KEY_AUTO_RAISE_LISTS	"auto_raise_lists"
 
 typedef struct _PopBox
 {
@@ -57,7 +58,6 @@
 	gboolean signals_connected; /* list signals connected? */
 
 	gboolean list_in_sync; /* list in sync with menustrings? */
-        gboolean list_sorted;  /* list has been sorted? */
         gboolean list_popped;  /* list is popped up? */
 
         gboolean autosize;
@@ -101,9 +101,13 @@
 static gpointer
 gnc_combo_cell_autopop_init (gpointer unused)
 {
-	gnc_gconf_general_register_cb("auto_raise_lists",
-				      gnc_combo_cell_set_autopop,
-				      NULL);
+        auto_pop_combos = gnc_gconf_get_bool (GCONF_GENERAL_REGISTER, 
+                                              KEY_AUTO_RAISE_LISTS, 
+                                              NULL);
+
+        gnc_gconf_general_register_cb(KEY_AUTO_RAISE_LISTS,
+                                      gnc_combo_cell_set_autopop,
+                                      NULL);
 	return NULL;
 }
 
@@ -143,7 +147,6 @@
 	box->menustrings = NULL;
 	box->signals_connected = FALSE;
 	box->list_in_sync = TRUE;
-        box->list_sorted = TRUE;
         box->list_popped = FALSE;
         box->autosize = FALSE;
 
@@ -382,7 +385,6 @@
         }
 
         box->list_in_sync = TRUE;
-        box->list_sorted = TRUE;
 }
 
 void
@@ -423,15 +425,6 @@
                         box->item_list);
 }
 
-static void
-gnc_combo_sort_edit_list(PopBox *box)
-{
-	if (box->list_sorted || box->item_list == NULL)
-		return;
-
-        gnc_item_list_sort(box->item_list);
-}
-
 void 
 gnc_combo_cell_add_menu_item (ComboCell *cell, char * menustr)
 { 
@@ -468,8 +461,6 @@
         {
                 gnc_quickfill_insert (box->qf, menustr, QUICKFILL_ALPHA);
         }
-
-        box->list_sorted = FALSE;
 }
 
 void 
@@ -516,8 +507,6 @@
         {
                 gnc_quickfill_insert (box->qf, menustr, QUICKFILL_ALPHA);
         }
-
-        box->list_sorted = FALSE;
 }
 
 void
@@ -876,7 +865,6 @@
                 return FALSE;
 
 	gnc_combo_sync_edit_list (box);
-        gnc_combo_sort_edit_list (box);
 
 	gnc_item_edit_set_popup (box->item_edit,
                              GNOME_CANVAS_ITEM (box->item_list),
Index: gnucash-item-list.h
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/register/register-gnome/gnucash-item-list.h,v
retrieving revision 1.1.6.1
retrieving revision 1.1.6.2
diff -Lsrc/register/register-gnome/gnucash-item-list.h -Lsrc/register/register-gnome/gnucash-item-list.h -u -r1.1.6.1 -r1.1.6.2
--- src/register/register-gnome/gnucash-item-list.h
+++ src/register/register-gnome/gnucash-item-list.h
@@ -69,8 +69,6 @@
 
 void gnc_item_list_show_selected (GncItemList *item_list);
 
-void gnc_item_list_sort (GncItemList *item_list);
-
 int gnc_item_list_autosize (GncItemList *item_list);
 
 
Index: gnucash-item-list.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/register/register-gnome/gnucash-item-list.c,v
retrieving revision 1.2.6.11
retrieving revision 1.2.6.12
diff -Lsrc/register/register-gnome/gnucash-item-list.c -Lsrc/register/register-gnome/gnucash-item-list.c -u -r1.2.6.11 -r1.2.6.12
--- src/register/register-gnome/gnucash-item-list.c
+++ src/register/register-gnome/gnucash-item-list.c
@@ -85,7 +85,7 @@
 {
         GncItemList *item_list;
         const char *string_to_find;
-        GtkTreeIter *found_iter;
+        GtkTreePath *found_path;
 } FindSelectionData;
 
 gboolean
@@ -97,7 +97,7 @@
         gtk_tree_model_get(model, iter, 0, &iterStr, -1);
         if (safe_strcmp(to_find->string_to_find, iterStr) == 0)
         {
-                to_find->found_iter = gtk_tree_iter_copy(iter);
+                to_find->found_path = gtk_tree_path_copy(path);
                 return TRUE;
         }
         return FALSE;
@@ -128,21 +128,14 @@
                                _gnc_item_find_selection,
                                to_find_data);
 
-        if (to_find_data->found_iter != NULL)
+        if (to_find_data->found_path != NULL)
         {
-                GtkTreeIter iter;
-                gchar *sel_path = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(item_list->list_store), to_find_data->found_iter);
-                gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(item_list->list_store), &iter, sel_path);
-                gtk_tree_selection_select_iter(tree_sel, &iter);
+                gtk_tree_view_set_cursor(item_list->tree_view, to_find_data->found_path, NULL, FALSE);
+                gtk_tree_path_free(to_find_data->found_path);
 
                 gnc_item_list_show_selected(item_list);
-                g_free(sel_path);
         }
 
-        if (to_find_data->found_iter != NULL)
-        {
-                gtk_tree_iter_free(to_find_data->found_iter);
-        }
         g_free(to_find_data);
 }
 
@@ -150,37 +143,25 @@
 void
 gnc_item_list_show_selected (GncItemList *item_list)
 {
-        //gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(...), path, column, ...)
-
-#if 0
-	GtkVisibility visibility;
-        gint row;
-
-	g_return_if_fail(item_list != NULL);
-	g_return_if_fail(IS_GNC_ITEM_LIST(item_list));
-
-        row = item_list->clist->focus_row;
+        GtkTreeSelection *selection;
+        GtkTreeIter iter;
+        GtkTreePath *path;
+        GtkTreeModel *model;
 
-        visibility = gtk_clist_row_is_visible(item_list->clist, row);
-
-        if (visibility != GTK_VISIBILITY_FULL)
-                gtk_clist_moveto(item_list->clist, row, 0, 0.5, 0.0);
-#endif
-}
+        g_return_if_fail(item_list != NULL);
+        g_return_if_fail(IS_GNC_ITEM_LIST(item_list));
 
+        selection = gtk_tree_view_get_selection (item_list->tree_view);
 
-void
-gnc_item_list_sort (GncItemList *item_list)
-{
-        g_return_if_fail(item_list != NULL);
-	g_return_if_fail(IS_GNC_ITEM_LIST(item_list));
+        if (gtk_tree_selection_get_selected (selection, &model, &iter))
+        {
+                path = gtk_tree_model_get_path (model, &iter);
 
-#if 0
-        gtk_clist_sort(item_list->clist);
-#endif
+                gtk_tree_view_scroll_to_cell (item_list->tree_view, 
+                                              path, NULL, TRUE, 0.5, 0.0); 
+        }
 }
 
-
 int
 gnc_item_list_autosize (GncItemList *item_list)
 {
@@ -197,9 +178,9 @@
 static void
 gnc_item_list_init (GncItemList *item_list)
 {
-#if 0
-        item_list->clist = NULL;
-#endif
+        item_list->tree_view = NULL;
+        item_list->list_store = NULL;
+        item_list->frame = NULL;
 }
 
 
@@ -207,40 +188,75 @@
 gnc_item_list_button_event(GtkWidget *widget, GdkEventButton *event,
 			   gpointer data)
 {
-	/* So the sheet doesn't use it. */
-	g_signal_stop_emission_by_name (G_OBJECT(widget), "button_press_event");
+        GncItemList *item_list;
+        GtkTreeIter iter;
+        GtkTreePath *path;
+        GtkTreeModel *model;
+        gchar *string;
 
-	return TRUE;
+        g_return_val_if_fail(IS_GNC_ITEM_LIST (data), FALSE);
+
+        item_list = GNC_ITEM_LIST (data);
+
+	switch (event->button)
+        {
+                case 1:
+                        if(!gtk_tree_view_get_path_at_pos (item_list->tree_view,
+                                                           event->x,
+                                                           event->y,
+                                                           &path,
+                                                           NULL,
+                                                           NULL,
+                                                           NULL))
+                        {
+                                return FALSE;
+                        }
+
+                        gtk_tree_view_set_cursor (item_list->tree_view, path, NULL, FALSE);
+
+                        model = GTK_TREE_MODEL (item_list->list_store);
+                        gtk_tree_model_get_iter (model, &iter, path);
+
+                        gtk_tree_path_free (path);
+
+                        gtk_tree_model_get (model, &iter, 0, &string, -1);
+
+	                g_signal_emit (G_OBJECT (item_list), 
+                                       gnc_item_list_signals[ACTIVATE_ITEM],
+                                       0, 
+                                       string);
+
+                        return TRUE;
+                default:
+                        return FALSE;
+        }
+
+	return FALSE;
 }
 
 static gboolean
 gnc_item_list_key_event (GtkWidget *widget, GdkEventKey *event, gpointer data)
 {
 	GncItemList *item_list = GNC_ITEM_LIST (data);
-#if 0
-        GtkCList *clist;
-        gboolean got_text;
+        GtkTreeSelection *selection = NULL;
+        GtkTreeIter iter;
+        GtkTreeModel *model;
         gchar *string;
-        gint row;
-#endif
 
         switch (event->keyval) {
                 case GDK_Return:
-#if 0
-                        clist = item_list->clist;
-                        row = clist->focus_row;
-                        if (row < 0)
+                        selection = gtk_tree_view_get_selection (item_list->tree_view);
+                        if (!gtk_tree_selection_get_selected (selection, &model, &iter))
                                 return FALSE;
 
-                        got_text = gtk_clist_get_text(clist, row, 0, &string);
-
-                        if (!got_text)
-                                return FALSE;
+	                gtk_tree_model_get (model, &iter, 0, &string, -1);
 
-                        g_signal_emit (G_OBJECT (item_list),
-                                       gnc_item_list_signals[ACTIVATE_ITEM], 0, string);
+	                g_signal_emit (G_OBJECT (item_list), 
+                                       gnc_item_list_signals[ACTIVATE_ITEM], 
+                                       0, 
+                                       string);
                         return TRUE;
-#endif
+
 		case GDK_Page_Up:
 		case GDK_Page_Down:
 		case GDK_Up:
@@ -358,7 +374,7 @@
 
 	gtk_tree_model_get (model, &iter, 0, &string, -1);
 
-	g_signal_emit (G_OBJECT (item_list), gnc_item_list_signals[SELECT_ITEM], 0, string);
+	g_signal_emit (G_OBJECT (item_list), gnc_item_list_signals[CHANGE_ITEM], 0, string);
 
 	g_free (string);
 }
@@ -386,6 +402,10 @@
 
 	list_store = gtk_list_store_new (1, G_TYPE_STRING);
 	tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (list_store));
+        gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (list_store),
+                                              0,
+                                              GTK_SORT_ASCENDING);
+ 
 	gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (tree_view), FALSE);
 	gtk_tree_selection_set_mode (gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)),
 				     GTK_SELECTION_BROWSE);
@@ -413,7 +433,7 @@
 	item_list->list_store = list_store;
         item_list->frame = frame;
 
-	g_signal_connect_after (G_OBJECT(frame), "button_press_event",
+	g_signal_connect (G_OBJECT(tree_view), "button_press_event",
 				G_CALLBACK (gnc_item_list_button_event), item_list);
 
 	g_signal_connect (G_OBJECT (tree_view), "key_press_event",


More information about the gnucash-changes mailing list