gtk_sheet_show_active_cell() performance enhancement
John Gotts <[email protected]> Sat, 19 Mar 2005 03:23:33 -0500
| Newsgroups | gmane.comp.scigraphica.gtkextra |
|---|---|
| Message-ID | <[email protected]> |
We have been annoyed for some time by a bug where if you change any color or
text value in any cell, the selection in the active cell disappears. For
example, if you are currently working on cell (0,0) and some part of its text
is highlighted and the background color for cell (4,4) changes to green and
then you enter new text intending to replace the highlighted text, you will
get unexpected results. Adrian helped me pinpoint the
gtk_sheet_show_active_cell() function. At first I rewrote the function to save
the old selection but then I realized that gtk_entry_set_text() and
gtk_item_entry_set_text() are completely redundant if the old text didn't
change. As an added bonus, there is no flashing anymore and a better
interactive response if there are a lot of sheet changes going on.
If anyone can come up with a situation where my change breaks something, let me
know.
A more elegant fix would be to make even more code in
gtk_sheet_show_active_cell() conditional and the best fix would be to invoke
gtk_sheet_show_active_cell() only when necessary.
John
--- gtk+extra-0.99.16/gtkextra/gtksheet.c.orig 2005-03-19 02:11:07.000000000 -0500
+++ gtk+extra-0.99.16/gtkextra/gtksheet.c 2005-03-19 02:50:17.000000000 -0500
@@ -3687,6 +3687,7 @@
GtkEntry *sheet_entry;
GtkSheetCellAttr attributes;
gchar *text = NULL;
+ gchar *old_text;
GtkJustification justification;
gint row, col;
@@ -3727,10 +3728,13 @@
if(!text) text = g_strdup("");
- if(!GTK_IS_ITEM_ENTRY(sheet_entry))
- gtk_entry_set_text(GTK_ENTRY(sheet_entry), text);
- else
- gtk_item_entry_set_text(GTK_ITEM_ENTRY(sheet_entry), text, justification);
+ old_text = gtk_entry_get_text(GTK_ENTRY(sheet_entry));
+ if (strcmp(old_text, text) != 0) {
+ if(!GTK_IS_ITEM_ENTRY(sheet_entry))
+ gtk_entry_set_text(GTK_ENTRY(sheet_entry), text);
+ else
+ gtk_item_entry_set_text(GTK_ITEM_ENTRY(sheet_entry), text, justification);
+ }
if(GTK_SHEET_IS_LOCKED(sheet) || !attributes.is_editable)
gtk_entry_set_editable(GTK_ENTRY(sheet_entry), FALSE);
--
John GOTTS <[email protected]> http://linuxsavvy.com/staff/jgotts
-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click