----Next_Part(Wed_Oct_27_22:28:57_1999_91)--
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit

From: matz / netlab.co.jp (Yukihiro Matsumoto)
Subject: [ruby-ext:00510] Re: [Ruby/Gtk] statusbar messages method
Date: Thu, 28 Oct 1999 08:07:21 +0900

> |# ¤Þ¤Ä¤â¤È¤æ¤­¤Ò¤í»á¤Î RubyËܤˤÏÊդλö¤â¤¤Æ¤¢¤ë¤Î¤Ç¤·¤ç¤¦¤¨Â
Óôòõãô¤Ë¤Ä¤¤¤Æ¤Ï¤¤Æ¤Ê¤¤¤Ç¤¹¤Í¤¨¡£¤¹¤¤¤Þ¤»¤ó¡¨Â
¤µ¤¹¤¬¤ËÁ´¤Æ¤Ë¤Ä¤¤¤Æ¤Ï±¤Ê¤«¤Ã¤¿¡¨Â

¤¤¤¨¤¤¤¨¡£README.EXT¤À¤±¤Ç¤â«¤ê¤Þ¤·¤¿¡¨Â

ÒÅÁÄÍŮŨÔû®êð¤Â¤Ë sturct¤Ë´Ø¤¹¤ë¤â¤Î¤òÉÕ¤±Â­¤·¤Æ¤â¤é¤¤¤¿¤¯¤Æ¤¤Æ¤ß¤¿¤¨Â
¤Ç¤¹¤¬¡¢¡Örb_struct_define()¤ÎºÇ¸å¤Î argument¤Ï 0¤Ç¤Ê¤±¤ì¤Ð¤¤¤±¤Ê¤¤¡×¤Ç
Åö¤Ã¤Æ¤¤¤Þ¤¹¤«?

> |°Ê²¼¤Î error¤¬¤Ç¤ë¤Î¤Ç¤¹¤¬¤É¤ÎÍͤËÂй¤Ù¤­¤Ç¤·¤ç¤¦¤¨Âü£ Òõâù¤Ç struct¤¹¤é»È¤Ã¤¿¤³¤È¤¬¤Ê¤¤¼Ô¤¬¤¤Æ¤¤¤ë¤Î¤Ç¡Å¡Å¡¨Â
ü®¯óôáôõóâáò®ò⺱±µº ÷áòîéîçº áìòåáäéîéôéáìéúåãïîóôáîô ÓÍóç

¤³¤ì¤Ï¥á¥É¤ÎÃæ¤Ç rb_define_struct() ¤ò¸Æ¤ó¤Ç¤¤¤ë¤Î¤¬¸¶°ø
> ¤Ç¤¹¡£rb_define_struct() ¤ÏÂÎ¥¯¥é¥¹¤òÄêµÁ¤¹¤ë¤Î¤Ç¡¢¨Â
¡¼¥Á¥ó Init_xxx ¤ÎÃæ¤Ç¸Æ¤Ó¹É¬Íפ¬¤¢¤ê¤Þ¤¹¡¨Â

¤Ê¤ë¤Û¤É¡£static¤Ë¤·¤Æ Init_gtk_statusbar()¤ÎÃæ¤Ë°Ü¤·¤¿¤éʤ¯¤Ê¤ê¤Þ¤¨Â
¤¿¡£¤¢¤¥¡¢ext/etc/etc.c¤â¡¢ÍͤˤʤäƤޤ¹¤Í¡Å¡Å¡£

¤¢¤È¤Ï¡¢bug fix(nil? -> empty?)¤ÈÊÑ¿ô¤Î̾Á°¤ÎÊѹ¹¡£

¤È¤³¤í¤Ç¡¢¤¦¤Á¤Ç¤ÏÌäÂê¤Ê¤¯Æ°¤¤¤Æ¤¤¤ë¤Î¤Ç¤¹¤¬¡¢messages method¤Î­Êý¤¨Â
Êý¸þŪ¤Ë¤³¤ì¤ÇÎɤ¤¤Î¤Ç¤·¤ç¤¦¤«?
--
            yashi

----Next_Part(Wed_Oct_27_22:28:57_1999_91)--
Content-Type: Text/Plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="README.EXT.diff"

--- README.EXT.old	Mon Aug 16 11:09:09 1999
+++ README.EXT	Wed Oct 27 22:17:43 1999
@@ -182,6 +182,19 @@
     Array operations.  The first argument to each functions must be an 
     array.  They may dump core if other types given.
 
+  Struct functions
+
+  rb_struct_define(const char *name, ...)
+
+    It works as Struct.new() in Ruby.  It has to be called inside of
+    Init_xxx(). Other argumens are access method names of char
+    pointer. The last argument must be 0.
+
+  rb_struct_new(VALUE klass, ...)
+
+    It works as klass.new in Ruby.  klass is the return value of
+    rb_struct_define().
+
 2. Extend Ruby with C
 
 2.1 Add new features to Ruby

----Next_Part(Wed_Oct_27_22:28:57_1999_91)--
Content-Type: Text/Plain; charset=euc-jp
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="README.EXT.jp.diff"

LS0tIFJFQURNRS5FWFQuanAub2xkCUZyaSBBdWcgMTMgMDE6NDU6MDEgMTk5OQ0KKysrIFJF
QURNRS5FWFQuanAJV2VkIE9jdCAyNyAyMjowMDo0NSAxOTk5DQpAQCAtMTY2LDggKzE2Niw4
IEBADQogudSkpqSzpMikz7SrpOGk6aTspN6ku6TzoaWkx6GkUnVieaTOpcehvKW/pPLB4Lru
pLmk67v+pMukzw0KIFJ1YnmkrM3RsNWkt6TGpKSk67TYv/Sk8s3RpKSkxqSvpMCktaSkoaUN
CiANCi2ks6SzpMekz6TipMOkyKTiu8ik76TspOukx6SipO2kpsq4u/rO86TIx9vO86TOwLjA
ri/B4LrupPK51A0KLaSktNi/9KTypKKksqTepLkowbTJ9KTHpM+kyqSkpMekuSmhpQ0KK6Sz
pLOkx6TPpOKkw6TIpOK7yKTvpOyk66THpKKk7aSmyri7+s7zoaLH287zoaK5vcKkws6kzsC4
wK4vweANCiu67qTyudSkpLTYv/Sk8qSipLKk3qS5KMG0yfSkx6TPpMqkpKTHpLkpoaUNCiAN
CiAgyri7+s7zpMvC0KS5pOu02L/0DQogDQpAQCAtMjExLDYgKzIxMSwxOSBAQA0KIA0KICAg
ICBBcnJheaTOxrHMvqTOpeGlvaXDpcmkyMaxpLjGr6StpPKkuaTrtNi/9KGlwugxsPq/9KTP
yaykug0KICAgICDH287zpMekyqSxpOyk0KTKpOmkyqSkoaUNCisNCisgub3CpMLOpMvC0KS5
pOu02L/0DQorDQorICByYl9zdHJ1Y3RfZGVmaW5lKGNvbnN0IGNoYXIgKm5hbWUsIC4uLikN
CisNCisgICAgU3RydWN0Lm5ld6TIxrGkuMavpK2k8qS5pOsuIEluaXRfeHh4KCmkzsPmpMe4
xqTTvdCkucmszdekrA0KKyAgICCkoqTrLiAuLi6kz6Giub3CpMLOpM6l4aXzpdCky8LQpLmk
66Wipa+lu6W5peGlvaXDpcmkzsy+wbAuDQorICAgILrHuOWkzrD6pK2/9KTPIDAuDQorDQor
ICByYl9zdHJ1Y3RfbmV3KFZBTFVFIGtsYXNzLCAuLi4pDQorDQorICAgIGtsYXNzLm5ld6TI
xrGkuMavpK2k8qS5pOsuIGtsYXNzpM8gcmJfc3RydWN0X2RlZmluZSgppM7K1g0KKyAgICCk
6sPNLiANCiANCiAyoaVSdWJ5pM61oce9pPK7yKSmDQogDQo---Next_Part(Wed_Oct_27_22:28:57_1999_91)--
Content-Type: Text/Plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="gtk.patch"

diff -u --new-file --recursive gtk-0.22/sample/testgtk/statusbar.rb gtk/sample/testgtk/statusbar.rb
--- gtk-0.22/sample/testgtk/statusbar.rb	Tue Aug 24 23:21:39 1999
+++ gtk/sample/testgtk/statusbar.rb	Wed Oct 27 21:10:02 1999
@@ -49,8 +49,12 @@
     @statusbar  tatusbar  tk::Statusbar::new()
     box1.pack_end(statusbar, true, true, 0)
     statusbar.show
-    statusbar.signal_connect("text_popped") do popped end
-
+    statusbar.signal_connect("text_popped") do |o, mid, text|
+      popped(mid, text)
+    end
+    statusbar.signal_connect("text_pushed") do |o, mid, text|
+      pushed(mid, text)
+    end
 #
 # GtkWidget* gtk_widget_new  (guint type, ...);
 #
@@ -107,11 +111,14 @@
   def steal
     @statusbar.remove(1, 4)
   end
-  def popped
-    if @statusbar.messages.nil?
+  def popped(mid, text)
+    if @statusbar.messages.empty? then
       @counter  
     end
   end
+  def pushed(mid, text)
+    # do nothing... as of gtk 1.2.6
+  end
   def contexts
     string  any context"
     printf("GtkStatusBar: context%s\", context_id
\n",
@@ -139,17 +146,11 @@
            @statusbar.get_context_id(string))
   end
   def dump_stack
-   print("not implemented.\n")
-   #   GSList *list
-#   for (list  tatusbar.messages; list; list  ist.next)
-#     {
-#       GtkStatusbarMsg *msg
-
-#       msg  ist.data
-#       g_print ("context_id: %d, message_id: %d, status_text: \"%s\"\n",
-#                msg.context_id,
-#                msg.message_id,
-#                msg.text)
-#     }
+    @statusbar.messages.each do |m|
+      printf ("context_id: %d, message_id: %d, status_text: \"%s\"\n",
+	      m.context_id,
+	      m.message_id,
+	      m.text)
+    end
   end
 end
diff -u --new-file --recursive gtk-0.22/sample/testgtk/testgtk.rb gtk/sample/testgtk/testgtk.rb
--- gtk-0.22/sample/testgtk/testgtk.rb	Sun Sep 26 01:54:55 1999
+++ gtk/sample/testgtk/testgtk.rb	Wed Oct 27 21:14:55 1999
@@ -115,7 +115,7 @@
     ["scrolled windows", ScrolledWindowSample],
     ["shapes", ShapesSample],
     ["spinbutton", SpinButtonSample],
-    ["statusbar", nil], #StatusbarSample],   # has BUG
+    ["statusbar", StatusbarSample],
     ["test idle", nil],
     ["test mainloop", nil],
     ["test scrolling", nil],
diff -u --new-file --recursive gtk-0.22/src/rbgtkbox.c gtk/src/rbgtkbox.c
--- gtk-0.22/src/rbgtkbox.c	Tue Aug 24 23:21:44 1999
+++ gtk/src/rbgtkbox.c	Wed Oct 27 21:06:37 1999
@@ -427,6 +427,9 @@
 /*
  * Statusbar
  */
+
+static VALUE sMsg;
+
 static VALUE
 statusbar_initialize(self)
      VALUE self;
@@ -479,6 +482,33 @@
   return Qnil;
 }
 
+static VALUE
+gSMsg2ary(slist)
+    GSList *slist;
+{
+    VALUE msg;
+    VALUE ary  b_ary_new();
+
+    while (slist) {
+	GtkStatusbarMsg *gSMsg  list->data;
+	msg  b_struct_new(sMsg,
+			    rb_tainted_str_new2(gSMsg->text),
+			    INT2FIX(gSMsg->context_id),
+			    INT2FIX(gSMsg->message_id));
+	rb_ary_push(ary, msg);
+	slist  list->next;
+    }
+
+    return ary;
+}
+
+static VALUE
+statusbar_messages(self)
+    VALUE self;
+{
+    return gSMsg2ary(GTK_STATUSBAR(get_widget(self))->messages);
+}
+
 void Init_gtk_statusbar()
 {
     gStatusBar  b_define_class_under(mGtk, "Statusbar", gHBox);
@@ -491,6 +521,9 @@
     rb_define_method(gStatusBar, "pop", statusbar_pop, 1);
     rb_define_method(gStatusBar, "get_context_id", statusbar_get_context_id, 1);
     rb_define_method(gStatusBar, "remove", statusbar_remove, 2);
+    rb_define_method(gStatusBar, "messages", statusbar_messages, 0);
+
+    sMsg  b_struct_define("SMsg", "text", "context_id", "message_id", 0);   
 }
 
 /*

----Next_Part(Wed_Oct_27_22:28:57_1999_91)----