/* Registers a function to be called when an instance of the mainloop is left. */ int clip_GTK_QUITADD(ClipMachine * cm) { guint main_level = INT_OPTION(cm,1,gtk_main_level()); C_var *c; CHECKOPT(1,NUMERIC_t); CHECKARG2(2,PCODE_t,CCODE_t); c = NEW(C_var); c->cm = cm; //c->cfunc = NEW(ClipVar); _clip_mclone(cm,&c->cfunc, _clip_spar(cm,2)); _clip_retni(cm,gtk_quit_add_full(main_level,(GtkFunction)__func,NULL,c, _destroy__func)); return 0; err: return 1; }
static VALUE rg_m_quit_add(VALUE self, VALUE main_level) { volatile VALUE func = rb_block_proc(); VALUE rb_id; callback_info_t *info; guint id; info = ALLOC(callback_info_t); info->callback = func; info->key = id_relative_callbacks; id = gtk_quit_add_full(NUM2UINT(main_level), (GtkFunction)gtk_m_function, NULL, (gpointer)info, g_free); info->id = id; rb_id = UINT2NUM(id); G_RELATIVE2(self, func, id__quit_callbacks__, rb_id); return rb_id; }