----Next_Part(Sun_May_30_22:12:22_1999_83)--
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit

いがらしです。

「[ruby-ext:00213] Re: ruby-gtk-0.17」で 、
"Dai.K." <MAP2303 / mapletown.net>さんはました;
福嶋です。
> > 
> > ruby-gtkを使うと、スレッドがうまく切り替わりません。
> > 
> > THREADというマクロはいつの頃からか(1.3になってから?)
> > 無くなったみたいです。
> 
>   だったのですね。まだ試していないけれど、スレッドの問題は解決かな?
>   結リティカルなので、做にでも 0.18 を靴泙靴腓Α
までにパッチ歓迎:)

少ないけど0.17からのパッチです。間に合うかな?
  Gtk::Window#set_default_size
  Gtk::Window#set_modal
  Gtk::Text#set_word_wrap
  Gtk::POLICY_NEVER
の追加と、いくつかbug fixです。

----
五  宏  (Hiroshi IGARASHI)

----Next_Part(Sun_May_30_22:12:22_1999_83)--
Content-Type: Text/Plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename=ruby-gtk-0.17-19990530.patch

--- rbgtk.c.orig	Sat May 15 14:39:29 1999
+++ rbgtk.c	Sat May 29 01:54:43 1999
@@ -2301,6 +2301,15 @@
 }
 
 static VALUE
+gwin_set_default_size(self, w, h)
+    VALUE self, w, h;
+{
+    gtk_window_set_default_size(GTK_WINDOW(get_widget(self)),
+				NUM2INT(w), NUM2INT(h));
+    return self;
+}
+
+static VALUE
 gwin_set_default(self, win)
     VALUE self, win;
 {
@@ -2342,6 +2351,15 @@
   return self;
 }
 
+
+static VALUE
+gwin_set_modal(self, modal)
+    VALUE self, modal;
+{
+    gtk_window_set_modal(GTK_WINDOW(get_widget(self)), RTEST(modal));
+    return self;
+}
+
 static VALUE
 gwin_shape_combine_mask(self, shape_mask, offset_x, offset_y)
      VALUE self, shape_mask, offset_x, offset_y;
@@ -3541,6 +3559,14 @@
 }
 
 static VALUE
+txt_set_word_wrap(self, word_wrap)
+    VALUE self, word_wrap;
+{
+    gtk_text_set_word_wrap(GTK_TEXT(get_widget(self)), RTEST(word_wrap));
+    return self;
+}
+
+static VALUE
 txt_set_adjustment(self, h_adj, v_adj)
     VALUE self, h_adj, v_adj;
 {
@@ -4164,7 +4190,7 @@
     VALUE self, n;
 {
     (void)gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(get_widget(self)),
-				       (n Qfalse || n Qnil) ? FALSE : TRUE);
+				       RTEST(n));
     return self;
 }
 
@@ -4449,10 +4475,13 @@
     VALUE self, start, end;
 {
     gchar *s;
+    VALUE ret;
 
-    s  tk_editable_get_chars(GTK_EDITABLE(get_widget(self)),
-			       NUM2INT(start), NUM2INT(end));
-    return rb_str_new2(s);
+    s  tk_editable_get_chars(GTK_EDITABLE(get_widget(self)), /* check s */
+			       NUM2INT(start), NUM2INT(end));  /* check start,end */
+    ret  b_str_new2(s);
+    g_free(s);
+    return ret;
 }
 
 /*
@@ -4559,8 +4588,11 @@
     VALUE self;
 {
     gchar* text;
+    VALUE ret;
     text  tk_entry_get_text(GTK_ENTRY(get_widget(self)));
-    return rb_str_new2(text);
+    ret  b_str_new2(text);
+    g_free(text);
+    return ret;
 }
 
 static VALUE
@@ -4669,7 +4701,7 @@
     VALUE self, n;
 {
   (void)gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(get_widget(self))
-                                     , (n Qfalse || n Qnil) ? FALSE : TRUE);
+                                     , RTEST(n));
   return self;
 }
 static VALUE
@@ -4693,8 +4725,8 @@
 sbtn_set_wrap(self,n)
     VALUE self, n;
 {
-  (void)gtk_spin_button_set_wrap(GTK_SPIN_BUTTON(get_widget(self))
-                                    , (n Qfalse || n Qnil) ? FALSE : TRUE);
+  (void)gtk_spin_button_set_wrap(GTK_SPIN_BUTTON(get_widget(self)),
+				 RTEST(n));
   return self;
 }
 static VALUE
@@ -4702,7 +4734,7 @@
     VALUE self, n;
 {
   (void)gtk_spin_button_set_snap_to_ticks(GTK_SPIN_BUTTON(get_widget(self)),
-					  (n Qfalse || n Qnil) ? FALSE : TRUE);
+					  RTEST(n));
   return self;
 }
 /*------- spin button end ------ */
@@ -5928,9 +5960,7 @@
 idle()
 {
     CHECK_INTS;
-#ifdef THREAD
     if (!rb_thread_critical) rb_thread_schedule();
-#endif
     return Qtrue;
 }
 
@@ -5946,9 +5976,12 @@
     VALUE self, interval;
 {
     int id;
+    VALUE func;
 
+    func  b_f_lambda();
+    add_relative(self, func);
     id  tk_timeout_add(NUM2INT(interval), (GtkFunction)exec_interval,
-						 (gpointer)rb_f_lambda());
+			 (gpointer)func);
     return INT2FIX(id);
 }
 
@@ -5965,8 +5998,11 @@
     VALUE self;
 {
     int id;
+    VALUE func;
 
-    id  tk_idle_add((GtkFunction)exec_interval, (gpointer)rb_f_lambda());
+    func  b_f_lambda();
+    add_relative(self, func);
+    id  tk_idle_add((GtkFunction)exec_interval, (gpointer)func);
     return INT2FIX(id);
 }
 
@@ -6482,8 +6518,9 @@
   rb_define_method(gWindow, "initialize", gwin_initialize, 1);
   rb_define_method(gWindow, "set_title", gwin_set_title, 1);
   rb_define_method(gWindow, "set_policy", gwin_set_policy, 3);
-  rb_define_method(gWindow, "set_wmclass", gwin_set_wmclass, 1);
+  rb_define_method(gWindow, "set_wmclass", gwin_set_wmclass, 2);
   rb_define_method(gWindow, "set_focus", gwin_set_focus, 1);
+  rb_define_method(gWindow, "set_default_size", gwin_set_default_size, 2);
   rb_define_method(gWindow, "set_default", gwin_set_default, 1);
   /* 1.2.x
   rb_define_method(gWindow, "add_accelerator_table", gwin_add_accel, 1);
@@ -6492,6 +6529,7 @@
   rb_define_method(gWindow, "position", gwin_position, 1);
   rb_define_method(gWindow, "grab_add", gwin_grab_add, 0);
   rb_define_method(gWindow, "grab_remove", gwin_grab_remove, 0);
+  rb_define_method(gWindow, "set_modal", gwin_set_modal, 1);
   rb_define_method(gWindow, "shape_combine_mask", gwin_shape_combine_mask, 3);
 
   /* Dialog */
@@ -6868,6 +6906,7 @@
   /* Text */
   rb_define_method(gText, "initialize", txt_initialize, -1);
   rb_define_method(gText, "set_editable", txt_set_editable, 1);
+  rb_define_method(gText, "set_word_wrap", txt_set_word_wrap, 1);
   rb_define_method(gText, "set_adjustment", txt_set_adjustment, 2);
   rb_define_method(gText, "set_point", txt_set_point, 1);
   rb_define_method(gText, "get_point", txt_get_point, 0);
@@ -7096,6 +7135,7 @@
   /* GtkPolicyType */
   rb_define_const(mGtk, "POLICY_ALWAYS", INT2FIX(GTK_POLICY_ALWAYS));
   rb_define_const(mGtk, "POLICY_AUTOMATIC", INT2FIX(GTK_POLICY_AUTOMATIC));
+  rb_define_const(mGtk, "POLICY_NEVER", INT2FIX(GTK_POLICY_NEVER));
 
   /* GtkUpdateType */
   rb_define_const(mGtk, "UPDATE_CONTINUOUS", INT2FIX(GTK_UPDATE_CONTINUOUS));

----Next_Part(Sun_May_30_22:12:22_1999_83)----