----Next_Part(Thu_Dec_24_07:27:14_1998_300)-- Content-Type: Text/Plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit ¤«¤ó¤À@Éö³¹¤Ç¤¹¡£ Takehama Hirohisa <thiro / kt.rim.or.jp>¤µ¤ó¤Î «¤ì¤¿¡¨Â ¡Ö[ruby-list:11402] Re: (gtk) signal (Re: gtk) ¡× ¤«¤é¤Î°úÍѤǤ¹¡£ > > ¤Á¤ç¤Ã¤È¸«¤Æ¤ß¤Þ¤·¤¿¤¬¡¢ruby/gtk ¤Î signal_connect ¤¬ gtk ¤Î > > signal_connect_interp ¤ò»È¤Ã¤Æ¤¤¤ë¤Î¤¬°¤¤¤Î¤«¤Ê¤¡¡Ä¡£¤â¤¦¾¯¤·¸«¤Æ¤ß¤Þ¤¹¡£ Gtk+¤Î¥¹¤òÆÉ¤ó¤Ç¤ß¤¿¤È¤³¤í¡¢¤É¤¦¤â¿Æsignal ¤òé¤ë¤«¤É¤¦¤«¤Ë»È¤ï¤ì¤Æ ¤¤¤ë¤è¤¦¤Ç¤¹¡£Æ±¤¸ signal ¤Î¼¡¤Î handler ¤òé¤é¤Ê¤¤¤è¤¦¤Ë¤·¤¿¤¤¾ì¹ç¤Ï¡¢ ¨Â Íý¤ò¤ä¤á¤¿¤¤ handler Æâ¤Ç gtk_signal_emit_stop() ¤ò¼Â¹Ô¤¹¤ì¤Ð¤è¤¤¤è¤¦¤Ç¤¹¡£ # ¤³¤ì¤Ç¤¤¤¤¤ó¤Ç¤·¤ç¤¦¤«? > Gtk¤ÊÊý¡¹ ¤È¤ê¤¢¤¨¤º GC ¤Î¼þ¤ê¤Ï¹Í¤¨¤º¤Ë Gtk::Object::signal_emit_stop() ¥á¥É¤ò ÄêµÁ¤·¤Æ¤ª¤¤Þ¤·¤¿¡£ KeyEvent ¤À¤±¼ÂÁõ¤·¤Þ¤·¤¿¡£Ðö¤Ë¤Ç¤â¤â¤¦¾¯¤·À°Íý¤·¤Æ¿·¤·¤¤ÈǤò ·¤Æ¤¨Â ¤¤Þ¤¹¡£gdk/gdkkeysyms.h ¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤ë̵¿ô¤Î:) ¥¡¼ÈÖ¹æ¤â¤È¤¤ËÉÕ¤± ¤Þ¤¹¤Î¤Ç¡¢É¬ÍפǤ·¤¿¤é¤·¤Ð¤é¤¯¤ÏľÀÜÀ°¿ô¤òµ ·¤Æ²¼¤µ¤¤¤Þ¤»¡¨Â ÇôëÔåø¤Î¥¡¼ÆþÎϤò²£¼è¤ê¤¹¤ë¥µ¥ó¥×¥ë¤òÉÕ¤±¤Æ¤ª¤¤Þ¤¹¡£¾®Ê¸»ú¤ÇÆþÎϤ·¤Æ ¤âÂçʸ»ú¤Ë¤·¤Þ¤¹¡£ ¤·¤«¤·¡¢Gtk+ ¤Ã¤Æ signal ¼þ¤ê¤¬Æñ¤·¤¤¡Ä Á´¤Æ¤Î¥³¡¼¥É¤Ï signal ¤ËÄ̤º¡¢signal ¤òÀ©¤¹¤ë¼Ô¤Ï Gtk+ ¤òÀ©¤¹ :-P > > Ïäϰ㤤¤Þ¤¹¤¬¡¢Gdk::Event ¤Ã¤Æ type ¤È¤¤¤¦¥á¥É¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢ > > Object::type ¤È¤Ö¤Ä¤«¤ë¤Î¤Ç¥Þ¥º¤¤¤Ç¤¹¤Í¡£event_type ¤È¤«¤¤¤¦Ì¾Á°¤ËÊѹ¹¤·¤¿ > > ¤¤¤Ç¤¹¤±¤ì¤É¡¢º¤¤ëÊý¤Ï¤¤¤Þ¤¹¤«? > > ¤ÊÏÃ¤Ï send ¤Ç¤â¤¢¤ê¤Þ¤·¤¿¤Í¡£º£¤Î¤¦¤Á¤Ë gtk ¦¤Î̾Á°Êѹ¹¤Ë»¿À®¤·¤Þ¤¹¡£ ¤³¤ì¤âÊѤ¨¤Þ¤·¤¿¡£ > > > Tk ¤Ç¤Ï¥¤¥Ù¥ó¥È¤ò <Control-a> ¤Î¤è¤¦¤Ë»ØÄê¤Ç¤¤Þ¤¹¤Í¡£¤µ¤é¤Ë > > > <Control-Button1> ¤È¤« <Control-Meta-a> ¤È¤«¤Ç¤¤Þ¤¹¡£GTK ¤Ç¤â¤³¤³¤Þ¤Ç¤Ç > > > ¤¤ë¤È¤¦¤ì¤·¤¤¤Ê¤È»×¤¤¤Þ¤¹¡£ > > > > Tk ¤ÏÃΤé¤Ê¤¤¤ó¤Ç¤¹¤±¤ì¤É¡¢<Control-a> ¤È¤¤¤¦¥¤¥Ù¥ó¥È¤¬¤¢¤ë¤Î¤Ç¤·¤ç¤¦¤«? > > Key¥¤¥Ù¥ó¥È¤ò¼õ¤±¼è¤Ã¤Æ¥¡¼¥³¡¼¥É¤ò¤¹¤ë¡¢¤È¤¤¤¦¤Î¤¬ÉáÄÌ:-P¤«¤Ê¤È»× > > ¤¦¤Î¤Ç¤¹¤¬¡Ä¡£ > > Tk ¤Ç¤Ï <Control-a> ¤È¤¤¤¦¥¤¥Ù¥ó¥È¤ò»ØÄê¤Ç¤¤Þ¤¹¡£¤Þ¤¿¡¢gtk ¤ÈƱ¤¸¤è¤¦ > ¤Ë <KeyPress> ¤È»ØÄꤷ¤Æ Key¥¤¥Ù¥ó¥È¼õ¤±¤È¤Ã¤Æ¡¢¥¡¼¥³¡¼¥É¤ò¤¹¤ë¤³ > ¤È¤â¤Ç¤¤Þ¤¹¡£Î¾Êý»ØÄꤷ¤Æ¤¢¤Ã¤Æ Control-a ¤ò²¡¤·¤¿¾ì¹ç¤Ï¡¢¤è¤ê¸ÂÄêŪ > ¤Ê¥¤¥Ù¥ó¥È¤ÎÊý¤Ë¥Þ¥Ã¥Á¤¹¤ë¤è¤¦¤Ç¤¹¡£ ´ðËÜ¤Ï Gtk+ ¸ß´¹¤Ë¤·¤¿¤¤¤Î¤Ç¡¢Í¾Ê¬¤Êµ¡ÁȤ߹þ¤à¤È¤·¤Æ¤âÊ̤ˤʤë¤È»×¤¤ ¤Þ¤¹¡£ÌäÂê¤Ï Gtk+ ¤Ç¤âľÀÜ´Ø¿ô¥Ý¥¤¥ó¥¿¤òÂåÆþ¤¹¤ì¤Ð¾å¤Îµ¡²Ì¤¿¤»¤ë¤Î¤À¤± ¤ì¤É¡¢¤Ïǧ¤á¤é¤ì¤Æ¤¤¤ëÊýË¡¤Ê¤Î¤«¤É¤¦¤«¤«¤Ê¡Ä¡£¤È¤ê¤¢¤¨¤º¤ÏÂåÍѤǤ¤Þ¤¹ ¤Î¤Ç¡¢Ä󶡤·¤Ê¤¤¤Ç¤ª¤¤Þ¤¹¡£ ----Next_Part(Thu_Dec_24_07:27:14_1998_300)-- Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=texthook.rb require 'gtk' w tk::Window::new(Gtk::WINDOW_TOPLEVEL) w.signal_connect("delete_event") { exit } w.signal_connect("destroy") { exit } text tk::Text.new text.set_editable(true) text.signal_connect("key_press_event") do |widget, event| p event ret alse if widget.editable? if event.length 1 and ?a < vent.keyval and event.keyval < z widget.delete_selection() widget.insert_text(event.string.capitalize, widget.get_length) widget.signal_emit_stop("key_press_event") ret rue end end ret end w.add(text) text.show w.show Gtk::main() ----Next_Part(Thu_Dec_24_07:27:14_1998_300)-- Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=gtk.c.diff *** gtk.c.orig Mon Dec 21 20:15:52 1998 --- gtk.c Thu Dec 24 06:57:56 1998 *************** *** 1002,1007 **** --- 1002,1010 ---- case GDK_3BUTTON_PRESS: return Data_Wrap_Struct(gdkEventButton, 0, gdk_event_free, event); break; + case GDK_KEY_PRESS: + return Data_Wrap_Struct(gdkEventKey, 0, gdk_event_free, event); + break; default: return Data_Wrap_Struct(gdkEvent, 0, gdk_event_free, event); } *************** *** 1597,1602 **** --- 1600,1615 ---- } static VALUE + gobj_emit_stop(self, sig) + VALUE self, sig; + { + GtkObject *obj et_gobject(self); + + gtk_signal_emit_stop_by_name(obj, STR2CSTR(sig)); + return self; + } + + static VALUE gobj_destroy(self) VALUE self; { *************** *** 4426,4431 **** --- 4439,4451 ---- } static VALUE + txt_has_cursor(self) + VALUE self; + { + return GTK_TEXT(get_widget(self))->has_cursor? TRUE: FALSE; + } + + static VALUE tbar_initialize(argc, argv, self) int argc; VALUE *argv; *************** *** 5253,5258 **** --- 5273,5285 ---- } static VALUE + edit_is_editable(self) + VALUE self; + { + return GTK_EDITABLE(get_widget(self))->editable? TRUE: FALSE; + } + + static VALUE entry_initialize(self) VALUE self; { *************** *** 6755,6760 **** --- 6782,6817 ---- } static VALUE + gdkeventkey_time(self) + { + return INT2NUM(((GdkEventKey*)get_gdkevent(self))->time); + } + + static VALUE + gdkeventkey_state(self) + { + return INT2NUM(((GdkEventKey*)get_gdkevent(self))->state); + } + + static VALUE + gdkeventkey_keyval(self) + { + return INT2NUM(((GdkEventKey*)get_gdkevent(self))->keyval); + } + + static VALUE + gdkeventkey_length(self) + { + return INT2NUM(((GdkEventKey*)get_gdkevent(self))->length); + } + + static VALUE + gdkeventkey_string(self) + { + return str_new2(((GdkEventKey*)get_gdkevent(self))->string); + } + + static VALUE gdkeventmotion_window(self) { return make_gdkwindow(((GdkEventMotion*)get_gdkevent(self))->window); *************** *** 7074,7079 **** --- 7131,7138 ---- rb_define_method(gObject, "