Re: crash problem

Cheuksan Edward Wang <[email protected]> Sun, 27 Nov 2005 04:50:25 -0500
Newsgroups gmane.comp.scigraphica.gtkextra
Message-ID <[email protected]>
I fixed my problem with the attached patch. I think my crash was caused by
gtkentry not generating the focus-out event. I also think those
GTK_WIDGET_SET/UNSET_FLAGS are not necessary.

What do you think?

Cheuksan Wang

On 11/26/05, Al Hooton <[email protected]> wrote:
>
>         Can you post a small sample program that demonstrates the
> problem?  You
> can look at the test*.c programs in the gtkextra distribution for
> examples of small test programs.
>
>         Without some code that exhibits the problem for other people to
> study,
> it will be difficult for anybody to help.
>
> -Al
>
> On Thu, 2005-11-24 at 22:46 -0500, Cheuksan Edward Wang wrote:
> > I'm using gtk+extra-2.1.1 with glade. I'm using the gtksheet widget in
> > a window. However, I'm getting the following crash when I select
> > multiple cells or a row. I didn't do anything special with the focus
> > in/out events. Does anyone have any ideas?
> >
> > Thanks
> >
> > Edward Wang
> >
> > (optical_monitoring:8995): Gtk-WARNING **: GtkEntry - did not receive
> > focus-out-event. If you
> > connect a handler to this signal, it must return
> > FALSE so the entry gets the event as well
> >
> > Gtk-ERROR **: file gtkentry.c: line 4856 (blink_cb): assertion failed:
> > (GTK_WIDGET_HAS_FOCUS (entry))
> > aborting...
> > Aborted
> > !DSPAM:4386894b125011854773323!
> --
>
>
> Al Hooton
> al-at-hootons-dot-org
>
> ========
> Lead maintainer of the linux-based open-source project Parapin.
> http://www.sf.net/projects/parapin/
> ========
>
>
gtksheet.diff (text/x-patch, 2 KB)
--- gtksheet.c~	2005-11-24 09:54:34.000000000 -0500
+++ gtksheet.c	2005-11-25 00:52:07.000000000 -0500
@@ -3967,8 +3967,6 @@
                    sheet->column[col].width+4,
                    sheet->row[row].height+4);   
 
- GTK_WIDGET_UNSET_FLAGS(sheet->sheet_entry, GTK_HAS_FOCUS);
- GTK_WIDGET_SET_FLAGS(GTK_WIDGET(sheet), GTK_HAS_FOCUS);
  gtk_widget_grab_focus(GTK_WIDGET(sheet));
 
  GTK_WIDGET_UNSET_FLAGS(GTK_WIDGET(sheet->sheet_entry), GTK_VISIBLE);
@@ -4092,8 +4090,6 @@
  gtk_sheet_draw_active_cell(sheet);
 
  gtk_widget_grab_focus(GTK_WIDGET(sheet_entry));
- GTK_WIDGET_SET_FLAGS(GTK_WIDGET(sheet_entry), GTK_HAS_FOCUS);
- GTK_WIDGET_UNSET_FLAGS(GTK_WIDGET(sheet), GTK_HAS_FOCUS);
 
  g_free(text);
 }
@@ -4835,8 +4831,6 @@
 		       NULL, NULL, event->time);
      gtk_grab_add(GTK_WIDGET(sheet));
      sheet->timer=gtk_timeout_add(TIMEOUT_SCROLL, gtk_sheet_scroll, sheet); 
-     GTK_WIDGET_UNSET_FLAGS(sheet->sheet_entry, GTK_HAS_FOCUS);
-     GTK_WIDGET_SET_FLAGS(GTK_SHEET(sheet), GTK_HAS_FOCUS);
      gtk_widget_grab_focus(GTK_WIDGET(sheet));
 
      if(sheet->selection_mode != GTK_SELECTION_SINGLE &&
@@ -4901,8 +4895,6 @@
        gtk_sheet_click_cell(sheet, -1, column, &veto);
        gtk_grab_add(GTK_WIDGET(sheet));
        sheet->timer=gtk_timeout_add(TIMEOUT_SCROLL, gtk_sheet_scroll, sheet); 
-       GTK_WIDGET_UNSET_FLAGS(sheet->sheet_entry, GTK_HAS_FOCUS);
-       GTK_WIDGET_SET_FLAGS(GTK_SHEET(sheet), GTK_HAS_FOCUS);
        gtk_widget_grab_focus(GTK_WIDGET(sheet));
        GTK_SHEET_SET_FLAGS(sheet, GTK_SHEET_IN_SELECTION);
      }
@@ -4915,8 +4907,6 @@
        gtk_sheet_click_cell(sheet, row, -1, &veto);
        gtk_grab_add(GTK_WIDGET(sheet));
        sheet->timer=gtk_timeout_add(TIMEOUT_SCROLL, gtk_sheet_scroll, sheet); 
-       GTK_WIDGET_UNSET_FLAGS(sheet->sheet_entry, GTK_HAS_FOCUS);
-       GTK_WIDGET_SET_FLAGS(GTK_SHEET(sheet), GTK_HAS_FOCUS);
        gtk_widget_grab_focus(GTK_WIDGET(sheet));
        GTK_SHEET_SET_FLAGS(sheet, GTK_SHEET_IN_SELECTION);
      }