From ruby-ext-admin@netlab.co.jp Fri May 12 12:27:31 2000 Received: from voscc.nagaokaut.ac.jp (voscc.nagaokaut.ac.jp [133.44.1.100]) by blade.nagaokaut.ac.jp (8.8.8/8.8.8/Debian/GNU) with ESMTP id MAA03209; Fri, 12 May 2000 12:27:31 +0900 Received: from hoyogw.netlab.co.jp by voscc.nagaokaut.ac.jp id MAA09290; Fri, 12 May 2000 12:23:27 +0900 (JST) Received: from hoyogw.netlab.co.jp (matz@localhost [127.0.0.1]) by hoyogw.netlab.co.jp (8.9.3+3.2W/3.7W/1.3) with SMTP id MAA16252; Fri, 12 May 2000 12:23:15 +0900 Date: Fri, 12 May 2000 12:23:10 +0900 From: Hiroshi IGARASHI Reply-To: ruby-ext@netlab.co.jp Subject: [ruby-ext:01074] Ruby/GTK: signal hook extention To: ruby-ext@netlab.co.jp (ruby-ext ML) Message-Id: <200005120323.MAA01029@bleu.ueda.info.waseda.ac.jp> X-ML-Name: ruby-ext X-Mail-Count: 01074 X-MLServer: fml [fml 2.2]; post only (only members can post) X-ML-Info: If you have a question, send a mail with the body "# help" (without quotes) to the address ruby-ext-ctl@netlab.co.jp; help= User-Agent: Wanderlust/2.2.8 (Free As A Bird) SEMI/1.13.7 (Awazu) FLIM/1.13.2 (Kasanui) Emacs/20.6 (sparc-sun-solaris2.6) MULE/4.0 (HANANOEN) Mime-Version: 1.0 (generated by SEMI 1.13.7 - "Awazu") Content-Type: text/plain; charset=ISO-2022-JP Precedence: bulk Lines: 58 いがらしです。 あらきさんに送って頂いた signal hook 拡張です。 # まだ検討してません。 -- 五十嵐 宏 (Hiroshi IGARASHI) *** gtk-0.23.orig/src/global.h Fri Jan 28 01:40:48 2000 --- gtk-0.23/src/global.h Wed Apr 19 11:06:47 2000 *************** *** 301,304 **** --- 301,309 ---- extern GdkBitmap* get_gdkimlibmask(VALUE mask); #endif + /* for extra signal setup args */ + #define SIG_SETUP_ARGS_MAX_ENTRIES 32 + typedef gboolean (*SigSetupArgs)(VALUE, ID, int, GtkArg*, VALUE); + gboolean signal_add_setup_args(SigSetupArgs); + #endif *** gtk-0.23.orig/src/rbgtk.c Fri Feb 11 19:20:42 2000 --- gtk-0.23/src/rbgtk.c Wed Apr 19 11:06:54 2000 *************** *** 121,126 **** --- 121,138 ---- static VALUE mesg_handler; static VALUE print_handler; + static SigSetupArgs sig_setup_args_list[SIG_SETUP_ARGS_MAX_ENTRIES]; + static int sig_setup_args_entries = 0; + + gboolean + signal_add_setup_args(SigSetupArgs entry) + { + if (entry == NULL) return TRUE; + if (sig_setup_args_entries == SIG_SETUP_ARGS_MAX_ENTRIES) return FALSE; + sig_setup_args_list[sig_setup_args_entries++] = entry; + return TRUE; + } + static void gobj_mark(obj) GtkObject *obj; *************** *** 630,635 **** --- 642,651 ---- return; } } + /* call extra setup function */ + for (i = 0 ; i < sig_setup_args_entries ; i++) { + if (sig_setup_args_list[i](obj, sig, argc, params, args)) return; + } params1 = params; for (i=0; i