execute Tk_MainLoop
# File tk/lib/multi-tk.rb, line 2695
def mainloop(check_root = true)
MultiTkIp.mainloop(check_root)
end
Extended maintenance of Ruby 1.9.3 ended on February 23, 2015. Read more
# File tk/lib/multi-tk.rb, line 2735
def _conv_listelement(arg)
MultiTkIp._conv_listelement(arg)
end
static VALUE
lib_fromUTF8(argc, argv, self)
int argc;
VALUE *argv;
VALUE self;
{
VALUE str, encodename;
if (rb_scan_args(argc, argv, "11", &str, &encodename) == 1) {
encodename = Qnil;
}
return lib_fromUTF8_core(Qnil, str, encodename);
}
# File tk/lib/multi-tk.rb, line 2732
def _merge_tklist(*args)
MultiTkIp._merge_tklist(*args)
end
static VALUE
lib_split_tklist(self, list_str)
VALUE self;
VALUE list_str;
{
return lib_split_tklist_core(Qnil, list_str);
}
static VALUE
lib_Tcl_backslash(self, str)
VALUE self;
VALUE str;
{
return lib_UTF_backslash_core(self, str, 1);
}
static VALUE
lib_UTF_backslash(self, str)
VALUE self;
VALUE str;
{
return lib_UTF_backslash_core(self, str, 0);
}
static VALUE
lib_toUTF8(argc, argv, self)
int argc;
VALUE *argv;
VALUE self;
{
VALUE str, encodename;
if (rb_scan_args(argc, argv, "11", &str, &encodename) == 1) {
encodename = Qnil;
}
return lib_toUTF8_core(Qnil, str, encodename);
}
# File tk/lib/multi-tk.rb, line 2701
def do_one_event(flag = TclTkLib::EventFlag::ALL)
MultiTkIp.do_one_event(flag)
end
static VALUE
lib_thread_callback(argc, argv, self)
int argc;
VALUE *argv;
VALUE self;
{
struct thread_call_proc_arg *q;
VALUE proc, th, ret;
int status, foundEvent;
if (rb_scan_args(argc, argv, "01", &proc) == 0) {
proc = rb_block_proc();
}
q = (struct thread_call_proc_arg *)ALLOC(struct thread_call_proc_arg);
/* q = (struct thread_call_proc_arg *)ckalloc(sizeof(struct thread_call_proc_arg)); */
q->proc = proc;
q->done = (int*)ALLOC(int);
/* q->done = (int*)ckalloc(sizeof(int)); */
*(q->done) = 0;
/* create call-proc thread */
th = rb_thread_create(_thread_call_proc, (void*)q);
rb_thread_schedule();
/* start sub-eventloop */
foundEvent = RTEST(lib_eventloop_launcher(/* not check root-widget */0, 0,
q->done, (Tcl_Interp*)NULL));
#ifdef RUBY_VM
if (RTEST(rb_funcall(th, ID_alive_p, 0))) {
#else
if (RTEST(rb_thread_alive_p(th))) {
#endif
rb_funcall(th, ID_kill, 0);
ret = Qnil;
} else {
ret = rb_protect(_thread_call_proc_value, th, &status);
}
xfree(q->done);
xfree(q);
/* ckfree((char*)q->done); */
/* ckfree((char*)q); */
if (NIL_P(rbtk_pending_exception)) {
/* return rb_errinfo(); */
if (status) {
rb_exc_raise(rb_errinfo());
}
} else {
VALUE exc = rbtk_pending_exception;
rbtk_pending_exception = Qnil;
/* return exc; */
rb_exc_raise(exc);
}
return ret;
}
static VALUE
lib_get_system_encoding(self)
VALUE self;
{
#if TCL_MAJOR_VERSION > 8 || (TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION > 0)
tcl_stubs_check();
return rb_str_new2(Tcl_GetEncodingName((Tcl_Encoding)NULL));
#else
return Qnil;
#endif
}
static VALUE
lib_set_system_encoding(self, enc_name)
VALUE self;
VALUE enc_name;
{
#if TCL_MAJOR_VERSION > 8 || (TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION > 0)
tcl_stubs_check();
if (NIL_P(enc_name)) {
Tcl_SetSystemEncoding((Tcl_Interp *)NULL, (CONST char *)NULL);
return lib_get_system_encoding(self);
}
enc_name = rb_funcall(enc_name, ID_to_s, 0, 0);
if (Tcl_SetSystemEncoding((Tcl_Interp *)NULL,
StringValuePtr(enc_name)) != TCL_OK) {
rb_raise(rb_eArgError, "unknown encoding name '%s'",
RSTRING_PTR(enc_name));
}
return enc_name;
#else
return Qnil;
#endif
}
static VALUE
lib_get_system_encoding(self)
VALUE self;
{
#if TCL_MAJOR_VERSION > 8 || (TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION > 0)
tcl_stubs_check();
return rb_str_new2(Tcl_GetEncodingName((Tcl_Encoding)NULL));
#else
return Qnil;
#endif
}
static VALUE
lib_set_system_encoding(self, enc_name)
VALUE self;
VALUE enc_name;
{
#if TCL_MAJOR_VERSION > 8 || (TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION > 0)
tcl_stubs_check();
if (NIL_P(enc_name)) {
Tcl_SetSystemEncoding((Tcl_Interp *)NULL, (CONST char *)NULL);
return lib_get_system_encoding(self);
}
enc_name = rb_funcall(enc_name, ID_to_s, 0, 0);
if (Tcl_SetSystemEncoding((Tcl_Interp *)NULL,
StringValuePtr(enc_name)) != TCL_OK) {
rb_raise(rb_eArgError, "unknown encoding name '%s'",
RSTRING_PTR(enc_name));
}
return enc_name;
#else
return Qnil;
#endif
}
# File tk/lib/multi-tk.rb, line 2713
def get_eventloop_tick
MultiTkIp.get_eventloop_tick
end
# File tk/lib/multi-tk.rb, line 2725
def get_eventloop_weight
MultiTkIp.get_eventloop_weight
end
static VALUE
get_eventloop_window_mode(self)
VALUE self;
{
if ( ~window_event_mode ) {
return Qfalse;
} else {
return Qtrue;
}
}
# File tk/lib/multi-tk.rb, line 2719
def get_no_event_wait
MultiTkIp.get_no_event_wait
end
static VALUE
lib_get_reltype_name(self)
VALUE self;
{
set_tcltk_version();
switch(tcltk_version.type) {
case TCL_ALPHA_RELEASE:
return rb_str_new2("alpha");
case TCL_BETA_RELEASE:
return rb_str_new2("beta");
case TCL_FINAL_RELEASE:
return rb_str_new2("final");
default:
rb_raise(rb_eRuntimeError, "tcltklib has invalid release type number");
}
}
static VALUE
lib_getversion(self)
VALUE self;
{
set_tcltk_version();
return rb_ary_new3(4, INT2NUM(tcltk_version.major),
INT2NUM(tcltk_version.minor),
INT2NUM(tcltk_version.type),
INT2NUM(tcltk_version.patchlevel));
}
execute Tk_MainLoop
# File tk/lib/multi-tk.rb, line 2695
def mainloop(check_root = true)
MultiTkIp.mainloop(check_root)
end
static VALUE
lib_evloop_abort_on_exc(self)
VALUE self;
{
if (event_loop_abort_on_exc > 0) {
return Qtrue;
} else if (event_loop_abort_on_exc == 0) {
return Qfalse;
} else {
return Qnil;
}
}
static VALUE
lib_evloop_abort_on_exc_set(self, val)
VALUE self, val;
{
rb_secure(4);
if (RTEST(val)) {
event_loop_abort_on_exc = 1;
} else if (NIL_P(val)) {
event_loop_abort_on_exc = -1;
} else {
event_loop_abort_on_exc = 0;
}
return lib_evloop_abort_on_exc(self);
}
static VALUE
lib_evloop_thread_p(self)
VALUE self;
{
if (NIL_P(eventloop_thread)) {
return Qnil; /* no eventloop */
} else if (rb_thread_current() == eventloop_thread) {
return Qtrue; /* is eventloop */
} else {
return Qfalse; /* not eventloop */
}
}
# File tk/lib/multi-tk.rb, line 2698
def mainloop_watchdog(check_root = true)
MultiTkIp.mainloop_watchdog(check_root)
end
static VALUE
lib_num_of_mainwindows(self)
VALUE self;
{
#ifdef RUBY_USE_NATIVE_THREAD /* Ruby 1.9+ !!! */
return tk_funcall(lib_num_of_mainwindows_core, 0, (VALUE*)NULL, self);
#else
return lib_num_of_mainwindows_core(self, 0, (VALUE*)NULL);
#endif
}
# File tk/lib/multi-tk.rb, line 2728
def restart(*args)
MultiTkIp.restart(*args)
end
def ::mainloop_abort_on_exception
MultiTkIp.mainloop_abort_on_exception
end def ::mainloop_abort_on_exception=(mode)
MultiTkIp.mainloop_abort_on_exception=(mode)
end
# File tk/lib/multi-tk.rb, line 2710
def set_eventloop_tick(tick)
MultiTkIp.set_eventloop_tick(tick)
end
# File tk/lib/multi-tk.rb, line 2722
def set_eventloop_weight(loop_max, no_event_tick)
MultiTkIp.set_eventloop_weight(loop_max, no_event_tick)
end
static VALUE
set_eventloop_window_mode(self, mode)
VALUE self;
VALUE mode;
{
rb_secure(4);
if (RTEST(mode)) {
window_event_mode = ~0;
} else {
window_event_mode = ~TCL_WINDOW_EVENTS;
}
return mode;
}
static VALUE
set_max_block_time(self, time)
VALUE self;
VALUE time;
{
struct Tcl_Time tcl_time;
VALUE divmod;
switch(TYPE(time)) {
case T_FIXNUM:
case T_BIGNUM:
/* time is micro-second value */
divmod = rb_funcall(time, rb_intern("divmod"), 1, LONG2NUM(1000000));
tcl_time.sec = NUM2LONG(RARRAY_PTR(divmod)[0]);
tcl_time.usec = NUM2LONG(RARRAY_PTR(divmod)[1]);
break;
case T_FLOAT:
/* time is second value */
divmod = rb_funcall(time, rb_intern("divmod"), 1, INT2FIX(1));
tcl_time.sec = NUM2LONG(RARRAY_PTR(divmod)[0]);
tcl_time.usec = (long)(NUM2DBL(RARRAY_PTR(divmod)[1]) * 1000000);
default:
{
VALUE tmp = rb_funcall(time, ID_inspect, 0, 0);
rb_raise(rb_eArgError, "invalid value for time: '%s'",
StringValuePtr(tmp));
}
}
Tcl_SetMaxBlockTime(&tcl_time);
return Qnil;
}
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.