----Next_Part(Thu_Dec_24_07:15:30_1998_893)-- Content-Type: Text/Plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit ¤«¤ó¤À@Éö³¹¤Ç¤¹¡£ Takehama Hirohisa <thiro / kt.rim.or.jp>¤µ¤ó¤Î «¤ì¤¿¡¨Â ¡Ö[ruby-list:11395] Re: gtk ¡× ¤«¤é¤Î°úÍѤǤ¹¡£ > ¤«¤ó¤À¤µ¤ó¡¢¤¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤¹¡£ > > > > ¡¦signal_connect ¤ÎºÇ¸å¤Ç¡¢¿¿µ¶Ãͤ«À°¿ôÃͤòÊÖ¤µ¤Ê¤¤¤È¤¤¤±¤Ê¤¤¤è¤¦¤Ê¤Î¤Ç¤¹¤¬¡¢ > > > ¤³¤ì¤Ï²¿¤ÎÃͤǤ·¤ç¤¦¤«? > > > > signal ¤Î ý¤ò³¤±¤ë¤«¤ä¤á¤ë¤«¤ò»ØÄꤷ¤Þ¤¹¡¨Âôòõå¤À¤È¤Ç»ß¤á¤Þ¤¹¡£ > > ¤¢¤ë signal ¤ËÊ£¿ô¤Î handler ¤¬ÅÐÏ¿¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤ÏÅÐÏ¿ ËÅϤµ¤ì¤Þ¤¨Â ¤¬¡¢¤µ¤é¤Ë»ÒsignalÊý¸þ¡¢¿Æwidget Êý¸þ¤Ø¤Èé¤ë¤è¤¦¤Ç¤¹¡£ > > 3¤Ä¤á¤Î¼ÁÌä¤È´ØÏ¢¤·¤Æ¤¤¤Þ¤¹¤¬¡¢true ¤òÊÖ¤·¤Æ signal ¤Î ý¤ò¤ä¤á¤ë¤È¡¨Â ÷éäçåô ¤Î¤â¤È¤â¤È¤Î¥¡¼ÆþÎÏ ý¤ò²£¼è¤ê¤Ç¤¤Ê¤¤¤Î¤Ç¤·¤ç¤¦¤«¡£»î¤·¤¿¤¨Â ¤³¤í¡¢ > > text.signal_connect('key_press_event') {|w, e| > true > } > > ¤È¤·¤¿¤À¤±¤Ç¤Ï¡¢¤¢¤¤¤«¤ï¤é¤º¥Ç¥Õ¥©¥ë¥È¤Îưºî(ʸ»ú¤¬ÁÞÆþ¤µ¤ì¤¿¤ê¡¢¥«¡¼ > °Üư¤·¤¿¤ê)¤¬¹Ô¤Ê¤ï¤ì¤Þ¤¹¡£ Gtk+¤Î¥¹¤òÆÉ¤ó¤Ç¤ß¤¿¤È¤³¤í¡¢¤É¤¦¤â¿Æsignal ¤òé¤ë¤«¤É¤¦¤«¤Ë»È¤ï¤ì¤Æ ¤¤¤ë¤è¤¦¤Ç¤¹¡£Æ±¤¸ signal ¤Î¼¡¤Î handler ¤òé¤é¤Ê¤¤¤è¤¦¤Ë¤·¤¿¤¤¾ì¹ç¤Ï¡¢ ¨Â Íý¤ò¤ä¤á¤¿¤¤ handler Æâ¤Ç gtk_signal_emit_stop() ¤ò¼Â¹Ô¤¹¤ì¤Ð¤è¤¤¤è¤¦¤Ç¤¹¡£ # ¤³¤ì¤Ç¤¤¤¤¤ó¤Ç¤·¤ç¤¦¤«? > Gtk¤ÊÊý¡¹ ¤È¤ê¤¢¤¨¤º GC ¤Î¼þ¤ê¤Ï¹Í¤¨¤º¤Ë Gtk::Object::signal_emit_stop() ¥á¥É¤ò ÄêµÁ¤·¤Æ¤ª¤¤Þ¤·¤¿¡£¥Ñ¥Ã¥ÁÉÕ¤±¤Þ¤¹¡£ ¤·¤«¤·¡¢Gtk+ ¤Ã¤Æ signal ¼þ¤ê¤¬Æñ¤·¤¤¡Ä Á´¤Æ¤Î¥³¡¼¥É¤Ï signal ¤ËÄ̤º¡¢signal ¤òÀ©¤¹¤ë¼Ô¤Ï Gtk+ ¤òÀ©¤¹ :-P > > event¼þ¤ê¤Ï¤Þ¤À¤Û¤È¤ó¤É¤Ç¤¤Æ¤¤¤Þ¤»¤ó¡£¤³¤³¤Ï¥Û¥ó¥È¤Ï GdkEventKey ¥¤¥ó¥¹ > > ¥¿¥ó¥¹¤òÊÖ¤¹¤Ù¤¤È¤³¤í¤Ç¡¢GdkEventKey ¤Ï keyval ¤È¤«¤¤¤¦¥á¥É¤¬ÄêµÁ¤µ¤ì > > ¤ë¤è¤¦¤Ç¤¹¡£ > > # ¤³¤ì¤¯¤é¤¤¤Ê¤é¤¹¤°¤Ë¤Ç¤¤Þ¤¹¤¬¡¢º£¤Á¤ç¤Ã¤ÈË»¤·¤¤¤Î¤Çº£Ìë¤Ë¤Ç¤â > > ¤ª¼ê¿ô¤Ç¤¹¤¬À§È󤪴ꤤ¤·¤Þ¤¹¡£ KeyEvent ¤À¤±¼ÂÁõ¤·¤Þ¤·¤¿¡£Ðö¤Ë¤Ç¤â¤â¤¦¾¯¤·À°Íý¤·¤Æ¿·¤·¤¤ÈǤò ·¤Æ¤¨Â ¤¤Þ¤¹¡£gdk/gdkkeysyms.h ¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤ë̵¿ô¤Î:) ¥¡¼ÈÖ¹æ¤â¤È¤¤ËÉÕ¤± ¤Þ¤¹¤Î¤Ç¡¢É¬ÍפǤ·¤¿¤é¤·¤Ð¤é¤¯¤ÏľÀÜÀ°¿ô¤òµ ·¤Æ²¼¤µ¤¤¤Þ¤»¡¨Â ÇôëÔåø¤Î¥¡¼ÆþÎϤò²£¼è¤ê¤¹¤ë¥µ¥ó¥×¥ë¤òÉÕ¤±¤Æ¤ª¤¤Þ¤¹¡£¾®Ê¸»ú¤ÇÆþÎϤ·¤Æ ¤âÂçʸ»ú¤Ë¤·¤Þ¤¹¡£ > > gtktext ¤Ë¤Ï control_key['z'-'a'+1] ¤È¤«¤¤¤Ã¤¿ÇÛÎó¤¬ÍѰդµ¤ì¤Æ¤¤¤Æ¡¢¤³¤ì > > ¤Ë´Ø¿ô¥Ý¥¤¥ó¥¿¤òËä¤á¹þ¤ó¤Ç¤¤¤Þ¤¹¡£¤Ç¡¢¼ÂºÝ¤Ë ctrl-a ¤È¤«¤¬²¡¤µ¤ì¤ë¤È¡¢ > > control_key[0] ¤Î´Ø¿ô¤¬¸Æ¤Ó µ¤ì¤ë¡£¤À¤«¤é¡¢¤³¤ÎÇÛÎó¤ËÊ̤δؿô¥Ý¥¤¥ó¥¿¤ò¨ Æþ¤¹¤ì¤Ð¤Ç¥¡¼¥Ð¥¤¥ó¥É¤¬Êѹ¹¤Ç¤¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¤Í¡£¤¿¤À¡¢gtk¤Î´Ø¿ô¤È¤· > > ¤ÆÍѰդϤµ¤ì¤Æ¤¤¤Ê¤¤¤è¤¦¤Ç¤¹¤Î¤Ç¡¢»ÅÍͤ«¤é¹Í¤¨¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£ > > Tk ¤Ç¤Ï¥¤¥Ù¥ó¥È¤ò <Control-a> ¤Î¤è¤¦¤Ë»ØÄê¤Ç¤¤Þ¤¹¤Í¡£¤µ¤é¤Ë > <Control-Button1> ¤È¤« <Control-Meta-a> ¤È¤«¤Ç¤¤Þ¤¹¡£GTK ¤Ç¤â¤³¤³¤Þ¤Ç¤Ç > ¤¤ë¤È¤¦¤ì¤·¤¤¤Ê¤È»×¤¤¤Þ¤¹¡£ ´ðËÜ¤Ï Gtk+ ¸ß´¹¤Ë¤·¤¿¤¤¤Î¤Ç¡¢Í¾Ê¬¤Êµ¡ÁȤ߹þ¤à¤È¤·¤Æ¤âÊ̤ˤʤë¤È»×¤¤ ¤Þ¤¹¡£ÌäÂê¤Ï Gtk+ ¤Ç¤âľÀÜ´Ø¿ô¥Ý¥¤¥ó¥¿¤òÂåÆþ¤¹¤ì¤Ð¾å¤Îµ¡²Ì¤¿¤»¤ë¤Î¤À¤± ¤ì¤É¡¢¤Ïǧ¤á¤é¤ì¤Æ¤¤¤ëÊýË¡¤Ê¤Î¤«¤É¤¦¤«¤«¤Ê¡Ä¡£¤È¤ê¤¢¤¨¤º¤ÏÂåÍѤǤ¤Þ¤¹ ¤Î¤Ç¡¢Ä󶡤·¤Ê¤¤¤Ç¤ª¤¤Þ¤¹¡£ ----Next_Part(Thu_Dec_24_07:15:30_1998_893)-- 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:15:30_1998_893)-- 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, "