[PD-cvs] externals/miXed/toxy widget.c,1.4,1.5

krzyszcz at users.sourceforge.net krzyszcz at users.sourceforge.net
Fri Feb 27 14:38:29 CET 2004


Update of /cvsroot/pure-data/externals/miXed/toxy
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16220/toxy

Modified Files:
	widget.c 
Log Message:
safer widget-to-text transform

Index: widget.c
===================================================================
RCS file: /cvsroot/pure-data/externals/miXed/toxy/widget.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** widget.c	25 Feb 2004 10:54:43 -0000	1.4
--- widget.c	27 Feb 2004 13:38:26 -0000	1.5
***************
*** 3,8 ****
   * WARRANTIES, see the file, "LICENSE.txt," in this distribution.  */
  
- /* FIXME crash if closing window with a failed widget (e.g. .wid missing) */
- 
  /* LATER think about reloading method for .wid files */
  
--- 3,6 ----
***************
*** 160,171 ****
  }
  
  static void widget_transtick(t_widget *x)
  {
-     glist_delete(x->x_glist, (t_gobj *)x);
- }
- 
- /* called from widget__failure(), LATER also bind this to F4 or something */
- static void widget_transedit(t_widget *x)
- {
      t_text *newt, *oldt = (t_text *)x;
      t_binbuf *bb = binbuf_new();
--- 158,171 ----
  }
  
+ /* If Tk widget creation fails, gui will send the '_failure' message
+    to the Pd widget object, asking the receiving object to transform
+    itself into a regular text object.  Due to the 'bindlist' corruption
+    danger, this cannot be done directly from the '_failure' call, but
+    has to be scheduled through a 'transclock', instead.  When the clock
+    fires, the widget object creates, and glist_adds a 'makeshift' text
+    object, then glist_deletes itself. */
+ /* LATER also bind this to F4 or something */
  static void widget_transtick(t_widget *x)
  {
      t_text *newt, *oldt = (t_text *)x;
      t_binbuf *bb = binbuf_new();
***************
*** 186,196 ****
      newt->te_ypix = oldt->te_ypix;
      glist_add(x->x_glist, &newt->te_g);
!     glist_noselect(x->x_glist);
!     glist_select(x->x_glist, &newt->te_g);
!     gobj_activate(&newt->te_g, x->x_glist, 1);
!     x->x_glist->gl_editor->e_textdirty = 1;  /* force evaluation */
      canvas_unsetcurrent(x->x_glist);
      canvas_dirty(x->x_glist, 1);
!     clock_delay(x->x_transclock, 0);  /* LATER rethink */
  }
  
--- 186,199 ----
      newt->te_ypix = oldt->te_ypix;
      glist_add(x->x_glist, &newt->te_g);
!     if (glist_isvisible(x->x_glist))
!     {
! 	glist_noselect(x->x_glist);
! 	glist_select(x->x_glist, &newt->te_g);
! 	gobj_activate(&newt->te_g, x->x_glist, 1);
! 	x->x_glist->gl_editor->e_textdirty = 1;  /* force evaluation */
!     }
      canvas_unsetcurrent(x->x_glist);
      canvas_dirty(x->x_glist, 1);
!     glist_delete(x->x_glist, (t_gobj *)x);
  }
  
***************
*** 675,679 ****
      loud_error((t_pd *)x, "creation failure");
      x->x_vised = 0;
!     widget_transedit(x);
  }
  
--- 678,682 ----
      loud_error((t_pd *)x, "creation failure");
      x->x_vised = 0;
!     clock_delay(x->x_transclock, 0);
  }
  





More information about the Pd-cvs mailing list