aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2007-11-17 08:57:20 +0000
committerAnders Broman <anders.broman@ericsson.com>2007-11-17 08:57:20 +0000
commitf6d282b6cdf41b84d83746a25a21833a4b573b6b (patch)
tree298df770b411080e518706bae60c553e66ffef2e
parent794afa79633c8ef3f54b0728f7fe94ac191d3b29 (diff)
Apply yet another set of the optimization patches:
- Don't call tree_view_select on first button click event, it's already done by the tree widget. - Factorize slow gtk_text_buffer_insert_with_tags_by_name() calls svn path=/trunk/; revision=23477
-rw-r--r--gtk/menu.c2
-rw-r--r--gtk/proto_draw.c83
2 files changed, 48 insertions, 37 deletions
diff --git a/gtk/menu.c b/gtk/menu.c
index d1064d82f8..816926859c 100644
--- a/gtk/menu.c
+++ b/gtk/menu.c
@@ -2131,7 +2131,7 @@ popup_menu_handler(GtkWidget *widget, GdkEvent *event, gpointer data)
}
/* Check if we are on tree_view object */
- if (widget == tree_view) {
+ if (widget == tree_view && ((GdkEventButton *)event)->button != 1) {
tree_view_select(widget, (GdkEventButton *) event);
}
diff --git a/gtk/proto_draw.c b/gtk/proto_draw.c
index 72aa858a38..e24885f1b7 100644
--- a/gtk/proto_draw.c
+++ b/gtk/proto_draw.c
@@ -324,7 +324,8 @@ toggle_tree(GtkCTree *ctree, GdkEventKey *event, gpointer user_data _U_)
3 characters per byte of hex dump,
2 blanks separating hex from ASCII,
1 character per byte of ASCII dump */
-#define MAX_LINE_LEN (MAX_OFFSET_LEN + 2 + DATA_DUMP_LEN)
+#define MAX_LINES 100
+#define MAX_LINE_LEN (MAX_LINES *(MAX_OFFSET_LEN + 2 + DATA_DUMP_LEN))
/* number of characters per line;
offset, 2 blanks separating offset
from data dump, data dump */
@@ -1172,8 +1173,6 @@ packet_hex_print_common(GtkWidget *bv, const guint8 *pd, int len, int bstart,
GtkTextBuffer *buf = gtk_text_view_get_buffer(bv_text_view);
GtkTextIter iter;
const char *revstyle;
- gchar *convline;
- gsize newsize;
GtkTextMark *mark = NULL;
#endif
@@ -1200,6 +1199,8 @@ packet_hex_print_common(GtkWidget *bv, const guint8 *pd, int len, int bstart,
#else
gtk_text_buffer_set_text(buf, "", 0);
gtk_text_buffer_get_start_iter(buf, &iter);
+ g_object_ref(buf);
+ gtk_text_view_set_buffer( bv_text_view, NULL);
#endif
/*
@@ -1232,6 +1233,7 @@ packet_hex_print_common(GtkWidget *bv, const guint8 *pd, int len, int bstart,
progbar_stop_flag = FALSE;
g_get_current_time(&progbar_start_time);
+ cur = 0;
while (i < len) {
/* Create the progress bar if necessary.
We check on every iteration of the loop, so that it takes no
@@ -1275,7 +1277,6 @@ packet_hex_print_common(GtkWidget *bv, const guint8 *pd, int len, int bstart,
/* Print the line number */
j = use_digits;
- cur = 0;
do {
j--;
c = (i >> (j*4)) & 0xF;
@@ -1283,12 +1284,11 @@ packet_hex_print_common(GtkWidget *bv, const guint8 *pd, int len, int bstart,
} while (j != 0);
line[cur++] = ' ';
line[cur++] = ' ';
- line[cur] = '\0';
/* Display with inverse video ? */
#if GTK_MAJOR_VERSION < 2
if (prefs.gui_hex_dump_highlight_style) {
- gtk_text_insert(bv_text, user_font_get_regular(), &BLACK, &WHITE, line, -1);
+ gtk_text_insert(bv_text, user_font_get_regular(), &BLACK, &WHITE, line, cur);
/* Do we start in reverse? */
reverse = (i >= bstart && i < bend) || (i >= astart && i < aend);
fg = reverse ? &WHITE : &BLACK;
@@ -1384,14 +1384,12 @@ packet_hex_print_common(GtkWidget *bv, const guint8 *pd, int len, int bstart,
reverse = newreverse;
}
/* Print remaining part of line */
+ line[cur++] = '\n';
gtk_text_insert(bv_text, user_font_get_regular(), fg, bg, line, cur);
cur = 0;
- line[cur++] = '\n';
- line[cur] = '\0';
- gtk_text_insert(bv_text, user_font_get_regular(), &BLACK, &WHITE, line, -1);
}
else {
- gtk_text_insert(bv_text, user_font_get_regular(), NULL, NULL, line, -1);
+ gtk_text_insert(bv_text, user_font_get_regular(), NULL, NULL, line, cur);
/* Do we start in bold? */
cur_font = ((i >= bstart && i < bend) || (i >= astart && i < aend)) ? user_font_get_bold() : user_font_get_regular();
j = i;
@@ -1451,8 +1449,8 @@ packet_hex_print_common(GtkWidget *bv, const guint8 *pd, int len, int bstart,
}
}
line[cur++] = '\n';
- line[cur] = '\0';
- gtk_text_insert(bv_text, cur_font, NULL, NULL, line, -1);
+ gtk_text_insert(bv_text, cur_font, NULL, NULL, line, cur);
+ cur = 0;
}
#else
if (prefs.gui_hex_dump_highlight_style)
@@ -1460,13 +1458,15 @@ packet_hex_print_common(GtkWidget *bv, const guint8 *pd, int len, int bstart,
else
revstyle = "bold";
- gtk_text_buffer_insert_with_tags_by_name(buf, &iter, line, -1,
- "plain", NULL);
/* Do we start in reverse? */
reverse = (i >= bstart && i < bend) || (i >= astart && i < aend);
j = i;
k = i + BYTE_VIEW_WIDTH;
- cur = 0;
+ if (reverse) {
+ gtk_text_buffer_insert_with_tags_by_name(buf, &iter, line, cur,
+ "plain", NULL);
+ cur = 0;
+ }
/* Print the hex bit */
while (i < k) {
if (i < len) {
@@ -1500,21 +1500,26 @@ packet_hex_print_common(GtkWidget *bv, const guint8 *pd, int len, int bstart,
}
reverse = newreverse;
}
- /* Print remaining part of line */
- gtk_text_buffer_insert_with_tags_by_name(buf, &iter, line, cur,
- reverse ? revstyle : "plain",
- NULL);
- cur = 0;
+ if (reverse) {
+ /* Print remaining part of line */
+ gtk_text_buffer_insert_with_tags_by_name(buf, &iter, line, cur,
+ revstyle, NULL);
+ cur = 0;
+ }
+
/* Print some space at the end of the line */
line[cur++] = ' '; line[cur++] = ' '; line[cur++] = ' ';
- gtk_text_buffer_insert_with_tags_by_name(buf, &iter, line, cur,
- "plain", NULL);
- cur = 0;
/* Print the ASCII bit */
i = j;
/* Do we start in reverse? */
reverse = (i >= bstart && i < bend) || (i >= astart && i < aend);
+ if (reverse) {
+ gtk_text_buffer_insert_with_tags_by_name(buf, &iter, line, cur,
+ "plain",NULL);
+ cur = 0;
+ }
+
while (i < k) {
if (i < len) {
if (encoding == CHAR_ASCII) {
@@ -1534,10 +1539,9 @@ packet_hex_print_common(GtkWidget *bv, const guint8 *pd, int len, int bstart,
newreverse = (i >= bstart && i < bend) || (i >= astart && i < aend);
/* Have we gone from reverse to plain? */
if (reverse && (reverse != newreverse)) {
- convline = g_locale_to_utf8(line, cur, NULL, &newsize, NULL);
- gtk_text_buffer_insert_with_tags_by_name(buf, &iter, convline, newsize,
+ gtk_text_buffer_insert_with_tags_by_name(buf, &iter, line, cur,
revstyle, NULL);
- g_free( (gpointer) convline);
+
cur = 0;
}
if (i < k) {
@@ -1548,24 +1552,24 @@ packet_hex_print_common(GtkWidget *bv, const guint8 *pd, int len, int bstart,
}
/* Have we gone from plain to reversed? */
if (!reverse && (reverse != newreverse)) {
- convline = g_locale_to_utf8(line, cur, NULL, &newsize, NULL);
- gtk_text_buffer_insert_with_tags_by_name(buf, &iter, convline, newsize,
+ gtk_text_buffer_insert_with_tags_by_name(buf, &iter, line, cur,
"plain", NULL);
- g_free( (gpointer) convline);
cur = 0;
}
reverse = newreverse;
}
/* Print remaining part of line */
- convline = g_locale_to_utf8(line, cur, NULL, &newsize, NULL);
- gtk_text_buffer_insert_with_tags_by_name(buf, &iter, convline, newsize,
- reverse ? revstyle : "plain",
- NULL);
- g_free( (gpointer) convline);
- cur = 0;
+ if (reverse) {
+ gtk_text_buffer_insert_with_tags_by_name(buf, &iter, line, cur,
+ revstyle, NULL);
+ cur = 0;
+ }
line[cur++] = '\n';
- gtk_text_buffer_insert_with_tags_by_name(buf, &iter, line, cur,
+ if (cur >= MAX_LINE_LEN) {
+ gtk_text_buffer_insert_with_tags_by_name(buf, &iter, line, cur,
"plain", NULL);
+ cur = 0;
+ }
#endif
}
@@ -1588,10 +1592,17 @@ packet_hex_print_common(GtkWidget *bv, const guint8 *pd, int len, int bstart,
gtk_adjustment_set_value(bv_text->vadj, scrollval);
}
#else
+ if (cur) {
+ gtk_text_buffer_insert_with_tags_by_name(buf, &iter, line, cur,
+ "plain", NULL);
+ }
+ gtk_text_view_set_buffer( bv_text_view, buf);
+
if (mark) {
gtk_text_view_scroll_to_mark(bv_text_view, mark, 0.0, TRUE, 1.0, 0.0);
gtk_text_buffer_delete_mark(buf, mark);
}
+ g_object_unref(buf);
#endif
}