Package: gtkwave Version: 1.3.81-1 Severity: normal Tags: patch Since gtkwave uses GtkText widget (I think it's obsolete), and it emits warnings like: (gtkwave:30510): Gdk-CRITICAL **: gdk_text_width: assertion `font != NULL' failed
It's not just warnings. The display of "Wave help" dialog and clicking on logfile viewer don't work well. Here is a patch to kill these warnings and fix problems. It enables us to compile gtkwave without -DGTK_ENABLE_BROKEN. The changes consist of Debian independent part and Debian specific part. Independent part are changes of help.c, status.c, and logfile.c, which replaces uses of GtkText widget by ones of GtkTextView widget. Specific part is new Makefile_GTK2_new.in without -DGTK_ENABLE_BROKEN, and change of debian/rules wich uses Makefile_GTK2_new.in. I put these changes of mine 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,11 @@ gtk_widget_show (text); /* And a VScrollbar in the upper right */ +#if defined(WAVE_USE_GTK2) && !defined(GTK_ENABLE_BROKEN) +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 +92,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,11 @@ gtk_widget_show (text); /* And a VScrollbar in the upper right */ +#if defined(WAVE_USE_GTK2) && !defined(GTK_ENABLE_BROKEN) +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,32 @@ /* 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) +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 +215,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 + -- System Information: Debian Release: 4.0 APT prefers unstable APT policy: (500, 'unstable') Architecture: i386 (i686) Shell: /bin/sh linked to /bin/bash Kernel: Linux 2.6.18-lattitude-x1 Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968) Versions of packages gtkwave depends on: ii libatk1.0-0 1.12.3-1 The ATK accessibility toolkit ii libbz2-1.0 1.0.3-6 high-quality block-sorting file co ii libc6 2.3.6.ds1-9 GNU C Library: Shared libraries ii libcairo2 1.2.4-4 The Cairo 2D vector graphics libra ii libfontconfig1 2.4.2-1 generic font configuration library ii libglib2.0-0 2.12.6-1 The GLib library of C routines ii libgtk2.0-0 2.8.20-3 The GTK+ graphical user interface ii libpango1.0-0 1.14.8-3 Layout and rendering of internatio ii libx11-6 2:1.0.3-4 X11 client-side library ii libxcursor1 1.1.7-4 X cursor management library ii libxext6 1:1.0.1-2 X11 miscellaneous extension librar ii libxi6 1:1.0.1-4 X11 Input extension library ii libxinerama1 1:1.0.1-4.1 X11 Xinerama extension library ii libxrandr2 2:1.1.0.2-5 X11 RandR extension library ii libxrender1 1:0.9.1-3 X Rendering Extension client libra ii zlib1g 1:1.2.3-13 compression library - runtime gtkwave recommends no packages. -- no debconf information -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]