The upstream maintainer, Anthony J Bybell <[EMAIL PROTECTED]>, kindly pointed out my fix is not enough for vadjustment.
Here, I attach updated patch. I put it into public domain.
--- gtkwave-1.3.81.orig/src/help.c +++ gtkwave-1.3.81/src/help.c @@ -22,14 +22,28 @@ static GtkWidget *text; static GtkWidget *vscrollbar; +#if defined(WAVE_USE_GTK2) && !defined(GTK_ENABLE_BROKEN) +static GtkTextIter iter; +static GtkTextTag *bold_tag; +#endif + void help_text(char *str) { +#if defined(WAVE_USE_GTK2) && !defined(GTK_ENABLE_BROKEN) +gtk_text_buffer_insert (GTK_TEXT_VIEW (text)->buffer, &iter, str, -1); +#else gtk_text_insert (GTK_TEXT (text), NULL, &text->style->black, NULL, str, -1); +#endif } void help_text_bold(char *str) { +#if defined(WAVE_USE_GTK2) && !defined(GTK_ENABLE_BROKEN) +gtk_text_buffer_insert_with_tags (GTK_TEXT_VIEW (text)->buffer, &iter, + str, -1, bold_tag, NULL); +#else gtk_text_insert (GTK_TEXT (text), NULL, &text->style->fg[GTK_STATE_SELECTED], &text->style->bg[GTK_STATE_SELECTED], str, -1); +#endif } static void @@ -50,7 +64,14 @@ /* Put a text widget in the upper left hand corner. Note the use of * GTK_SHRINK in the y direction */ +#if defined(WAVE_USE_GTK2) && !defined(GTK_ENABLE_BROKEN) +text = gtk_text_view_new (); +gtk_text_buffer_get_start_iter (gtk_text_view_get_buffer(GTK_TEXT_VIEW (text)), &iter); +bold_tag = gtk_text_buffer_create_tag (GTK_TEXT_VIEW (text)->buffer, "bold", + "weight", PANGO_WEIGHT_BOLD, NULL); +#else text = gtk_text_new (NULL, NULL); +#endif gtk_table_attach (GTK_TABLE (table), text, 0, 14, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_SHRINK | GTK_EXPAND, 0, 0); @@ -58,7 +79,14 @@ gtk_widget_show (text); /* And a VScrollbar in the upper right */ +#if defined(WAVE_USE_GTK2) && !defined(GTK_ENABLE_BROKEN) +GtkTextViewClass *tc = (GtkTextViewClass *)GTK_OBJECT_GET_CLASS(GTK_OBJECT(text)); + +tc->set_scroll_adjustments(GTK_TEXT_VIEW (text), NULL, NULL); +vscrollbar = gtk_vscrollbar_new (GTK_TEXT_VIEW (text)->vadjustment); +#else vscrollbar = gtk_vscrollbar_new (GTK_TEXT (text)->vadj); +#endif gtk_table_attach (GTK_TABLE (table), vscrollbar, 15, 16, 0, 1, GTK_FILL, GTK_FILL | GTK_SHRINK | GTK_EXPAND, 0, 0); gtk_widget_show (vscrollbar); @@ -67,7 +95,11 @@ gtk_signal_connect (GTK_OBJECT (text), "realize", GTK_SIGNAL_FUNC (help_realize_text), NULL); +#if defined(WAVE_USE_GTK2) && !defined(GTK_ENABLE_BROKEN) +gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text), GTK_WRAP_WORD); +#else gtk_text_set_word_wrap(GTK_TEXT(text), TRUE); +#endif return(table); } --- gtkwave-1.3.81.orig/src/status.c +++ gtkwave-1.3.81/src/status.c @@ -20,11 +20,20 @@ static GtkWidget *text=NULL; static GtkWidget *vscrollbar; +#if defined(WAVE_USE_GTK2) && !defined(GTK_ENABLE_BROKEN) +static GtkTextIter iter; +static GtkTextTag *bold_tag; +#endif + void status_text(char *str) { if(text) { +#if defined(WAVE_USE_GTK2) && !defined(GTK_ENABLE_BROKEN) + gtk_text_buffer_insert (GTK_TEXT_VIEW (text)->buffer, &iter, str, -1); +#else gtk_text_insert (GTK_TEXT (text), NULL, &text->style->black, NULL, str, -1); +#endif } else { @@ -95,7 +104,14 @@ /* Put a text widget in the upper left hand corner. Note the use of * GTK_SHRINK in the y direction */ +#if defined(WAVE_USE_GTK2) && !defined(GTK_ENABLE_BROKEN) +text = gtk_text_view_new (); +gtk_text_buffer_get_start_iter (gtk_text_view_get_buffer(GTK_TEXT_VIEW (text)), &iter); +bold_tag = gtk_text_buffer_create_tag (GTK_TEXT_VIEW (text)->buffer, "bold", + "weight", PANGO_WEIGHT_BOLD, NULL); +#else text = gtk_text_new (NULL, NULL); +#endif gtk_table_attach (GTK_TABLE (table), text, 0, 14, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_SHRINK | GTK_EXPAND, 0, 0); @@ -103,7 +119,14 @@ gtk_widget_show (text); /* And a VScrollbar in the upper right */ +#if defined(WAVE_USE_GTK2) && !defined(GTK_ENABLE_BROKEN) +GtkTextViewClass *tc = (GtkTextViewClass *)GTK_OBJECT_GET_CLASS(GTK_OBJECT(text)); + +tc->set_scroll_adjustments(GTK_TEXT_VIEW (text), NULL, NULL); +vscrollbar = gtk_vscrollbar_new (GTK_TEXT_VIEW (text)->vadjustment); +#else vscrollbar = gtk_vscrollbar_new ((GTK_TEXT (text))->vadj); +#endif gtk_table_attach (GTK_TABLE (table), vscrollbar, 15, 16, 0, 1, GTK_FILL, GTK_FILL | GTK_SHRINK | GTK_EXPAND, 0, 0); gtk_widget_show (vscrollbar); --- gtkwave-1.3.81.orig/src/logfile.c +++ gtkwave-1.3.81/src/logfile.c @@ -30,14 +30,28 @@ static GdkFont *font = NULL; +#if defined(WAVE_USE_GTK2) && !defined(GTK_ENABLE_BROKEN) +static GtkTextIter iter; +static GtkTextTag *bold_tag; +#endif + void log_text(GtkWidget *text, GdkFont *font, char *str) { +#if defined(WAVE_USE_GTK2) && !defined(GTK_ENABLE_BROKEN) +gtk_text_buffer_insert (GTK_TEXT_VIEW (text)->buffer, &iter, str, -1); +#else gtk_text_insert (GTK_TEXT (text), font, &text->style->black, NULL, str, -1); +#endif } void log_text_bold(GtkWidget *text, GdkFont *font, char *str) { +#if defined(WAVE_USE_GTK2) && !defined(GTK_ENABLE_BROKEN) +gtk_text_buffer_insert_with_tags (GTK_TEXT_VIEW (text)->buffer, &iter, + str, -1, bold_tag, NULL); +#else gtk_text_insert (GTK_TEXT (text), font, &text->style->fg[GTK_STATE_SELECTED], &text->style->bg[GTK_STATE_SELECTED], str, -1); +#endif } static void @@ -81,6 +95,38 @@ { gchar *sel; +#if defined(WAVE_USE_GTK2) && !defined(GTK_ENABLE_BROKEN) +GtkTextIter start; +GtkTextIter end; + +if (gtk_text_buffer_get_selection_bounds (GTK_TEXT_VIEW(text)->buffer, + &start, &end)) + { + if(gtk_text_iter_compare (&start, &end) < 0) + { + sel = gtk_text_buffer_get_text(GTK_TEXT_VIEW(text)->buffer, + &start, &end, FALSE); + + if(sel) + { + if(strlen(sel)&&(sel[0]>='0')&&(sel[0]<='9')) + { + TimeType tm = unformat_time(sel, time_dimension); + if((tm >= tims.first) && (tm <= tims.last)) + { + tims.lmbcache = -1; + update_markertime(tims.marker = tm); + center_op(); + signalarea_configure_event(signalarea, NULL); + wavearea_configure_event(wavearea, NULL); + update_markertime(tims.marker = tm); /* centering problem in GTK2 */ + } + } + g_free(sel); + } + } + } +#else #ifndef WAVE_USE_GTK2 GtkEditable *oe = GTK_EDITABLE(>K_TEXT(text)->editable); GtkTextClass *tc = (GtkTextClass *) ((GtkObject*) (GTK_OBJECT(text)))->klass; @@ -115,6 +161,7 @@ } } } +#endif return(FALSE); /* call remaining handlers... */ } @@ -131,17 +178,34 @@ /* Put a text widget in the upper left hand corner. Note the use of * GTK_SHRINK in the y direction */ +#if defined(WAVE_USE_GTK2) && !defined(GTK_ENABLE_BROKEN) +text = gtk_text_view_new (); +gtk_text_buffer_get_start_iter (gtk_text_view_get_buffer(GTK_TEXT_VIEW (text)), &iter); +bold_tag = gtk_text_buffer_create_tag (GTK_TEXT_VIEW (text)->buffer, "bold", + "weight", PANGO_WEIGHT_BOLD, NULL); +#else text = gtk_text_new (NULL, NULL); +#endif *textpnt = text; gtk_table_attach (GTK_TABLE (table), text, 0, 14, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_SHRINK | GTK_EXPAND, 0, 0); gtk_widget_set_usize(GTK_WIDGET(text), 100, 100); +#if defined(WAVE_USE_GTK2) && !defined(GTK_ENABLE_BROKEN) +gtk_text_view_set_editable(GTK_TEXT_VIEW(text), TRUE); +#else gtk_text_set_editable(GTK_TEXT(text), TRUE); +#endif gtk_widget_show (text); /* And a VScrollbar in the upper right */ +#if defined(WAVE_USE_GTK2) && !defined(GTK_ENABLE_BROKEN) +GtkTextViewClass *tc = (GtkTextViewClass *)GTK_OBJECT_GET_CLASS(GTK_OBJECT(text)); +tc->set_scroll_adjustments(GTK_TEXT_VIEW (text), NULL, NULL); +vscrollbar = gtk_vscrollbar_new (GTK_TEXT_VIEW (text)->vadjustment); +#else vscrollbar = gtk_vscrollbar_new (GTK_TEXT (text)->vadj); +#endif gtk_table_attach (GTK_TABLE (table), vscrollbar, 15, 16, 0, 1, GTK_FILL, GTK_FILL | GTK_SHRINK | GTK_EXPAND, 0, 0); gtk_widget_show (vscrollbar); @@ -153,8 +217,12 @@ gtk_signal_connect(GTK_OBJECT(text), "button_release_event", GTK_SIGNAL_FUNC(button_release_event), NULL); +#if defined(WAVE_USE_GTK2) && !defined(GTK_ENABLE_BROKEN) +gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text), GTK_WRAP_CHAR); +#else gtk_text_set_word_wrap(GTK_TEXT(text), FALSE); gtk_text_set_line_wrap(GTK_TEXT(text), TRUE); +#endif return(table); } --- gtkwave-1.3.81/debian/rules +++ gtkwave-1.3.81/debian/rules @@ -9,7 +9,7 @@ build-stamp: dh_testdir - ln -fs Makefile_GTK2.in src/Makefile.in + ln -fs Makefile_GTK2_new.in src/Makefile.in ./configure2 --prefix=/usr --mandir=/usr/share/man -mkdir bin $(MAKE) --- gtkwave-1.3.81.orig/src/Makefile_GTK2_new.in +++ gtkwave-1.3.81/src/Makefile_GTK2_new.in @@ -0,0 +1,48 @@ +CC = @CC@ +AIXFLAGS = -bmaxdata:0x80000000 -D_WAVE_BE32 +BIGFILES = -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 +CFLAGS = -O2 -DWAVE_USE_GTK2 -I./helpers +DEBUGS = -DDEBUG_FACILITIES -DDEBUG_PRINTF -DDEBUG_MALLOC -DSTRICT_VCD_ONLY -DDEBUG_MALLOC_LINES +AET2LIB = +PTHLIB = -lpthread + +SRCS = menu.c main.c status.c zoombuttons.c pagebuttons.c \ + fetchbuttons.c shiftbuttons.c pixmaps.c \ + timeentry.c currenttime.c wavewindow.c signalwindow.c \ + aet.c bitvec.c analyzer.c bsearch.c entry.c \ + tree.c file.c search.c discardbuttons.c \ + fgetdynamic.c showchange.c treesearch.c \ + markerbox.c print.c strace.c \ + simplereq.c help.c vcd.c debug.c rc.c \ + color.c hiersearch.c renderopt.c \ + rgb.c regex.c fonts.c lxt.c lx2.c helpers/lxt2_read.c \ + ae2.c helpers/vzt_read.c vzt.c baseconvert.c splash.c logfile.c \ + vcd_saver.c helpers/lxt_write.c ghw.c ghwlib.c translate.c \ + pipeio.c ptranslate.c clipping.c + +OBJS = menu.o main.o status.o zoombuttons.o pagebuttons.o \ + fetchbuttons.o shiftbuttons.o pixmaps.o \ + timeentry.o currenttime.o wavewindow.o signalwindow.o \ + aet.o bitvec.o analyzer.o bsearch.o entry.o \ + tree.o file.o search.o discardbuttons.o \ + fgetdynamic.o showchange.o treesearch.o \ + markerbox.o print.o strace.o \ + simplereq.o help.o vcd.o debug.o rc.o \ + color.o hiersearch.o renderopt.o \ + rgb.o regex.o fonts.o lxt.o lx2.o helpers/lxt2_read.o \ + ae2.o helpers/vzt_read.o vzt.o baseconvert.o splash.o logfile.o \ + vcd_saver.o helpers/lxt_write.o ghw.o ghwlib.o translate.o \ + pipeio.o ptranslate.o clipping.o + +all: gtkwave + cp gtkwave ../bin + +gtkwave:$(OBJS) + $(CC) $(CFLAGS) $(OBJS) `pkg-config gtk+-2.0 --libs` $(AET2LIB) -lz -lbz2 -o gtkwave $(PTHLIB) + +.c.o: $(H_FILES) + $(CC) $(CFLAGS) `pkg-config gtk+-2.0 --cflags` -c -o $@ $< + +clean: + rm -f core *.core *.o gtkwave ../bin/gtkwave +