[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