diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 1998-10-06 03:28:28 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 1998-10-06 03:28:28 +0000 |
commit | 75ff8fdb16fa0a733512e61350c9844ea530ad35 (patch) | |
tree | a057e60543c77d6e20ea2e91928928df80b2b6d3 /ext | |
parent | 5d71c8d89c6bd7af934e7a8de5882cda2991711b (diff) |
join 1.1c6
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/v1_1dev@310 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext')
-rw-r--r-- | ext/aix_ld.rb | 2 | ||||
-rw-r--r-- | ext/dbm/dbm.c | 9 | ||||
-rw-r--r-- | ext/etc/etc.c | 5 | ||||
-rw-r--r-- | ext/etc/extconf.rb | 23 | ||||
-rw-r--r-- | ext/extmk.rb.in | 60 | ||||
-rw-r--r-- | ext/gtk/MANIFEST | 1 | ||||
-rw-r--r-- | ext/gtk/extconf.rb | 12 | ||||
-rw-r--r-- | ext/gtk/gtk.c | 616 | ||||
-rw-r--r-- | ext/kconv/kconv.c | 9 | ||||
-rw-r--r-- | ext/socket/socket.c | 86 | ||||
-rw-r--r-- | ext/tcltklib/extconf.rb | 11 | ||||
-rw-r--r-- | ext/tcltklib/tcltklib.c | 4 |
12 files changed, 628 insertions, 210 deletions
diff --git a/ext/aix_ld.rb b/ext/aix_ld.rb index 1058977b88..42b2087a46 100644 --- a/ext/aix_ld.rb +++ b/ext/aix_ld.rb @@ -43,7 +43,7 @@ def extract(nm, out) else next end - }.sort! + }.compact!.sort! uniq(data) exp = open(out, "w") for line in data diff --git a/ext/dbm/dbm.c b/ext/dbm/dbm.c index eb1f5c937a..4a3d1127e6 100644 --- a/ext/dbm/dbm.c +++ b/ext/dbm/dbm.c @@ -21,8 +21,6 @@ VALUE cDBM; -extern VALUE rb_mEnumerable; - struct dbmdata { int di_size; DBM *di_dbm; @@ -48,10 +46,10 @@ free_dbm(dbmp) } static VALUE -fdbm_s_open(argc, argv, class) +fdbm_s_open(argc, argv, klass) int argc; VALUE *argv; - VALUE class; + VALUE klass; { VALUE file, vmode; DBM *dbm; @@ -83,7 +81,7 @@ fdbm_s_open(argc, argv, class) rb_sys_fail(RSTRING(file)->ptr); } - obj = Data_Make_Struct(class,struct dbmdata,0,free_dbm,dbmp); + obj = Data_Make_Struct(klass,struct dbmdata,0,free_dbm,dbmp); dbmp->di_dbm = dbm; dbmp->di_size = -1; rb_obj_call_init(obj); @@ -546,6 +544,7 @@ fdbm_to_a(obj) return ary; } +void Init_dbm() { cDBM = rb_define_class("DBM", rb_cObject); diff --git a/ext/etc/etc.c b/ext/etc/etc.c index 5315166799..e2c8de4d80 100644 --- a/ext/etc/etc.c +++ b/ext/etc/etc.c @@ -239,7 +239,10 @@ Init_etc() sPasswd = rb_struct_define("Passwd", "name", "passwd", "uid", "gid", - "gecos", "dir", "shell", +#ifdef PW_GECOS + "gecos", +#endif + "dir", "shell", #ifdef PW_CHANGE "change", #endif diff --git a/ext/etc/extconf.rb b/ext/etc/extconf.rb index a02ff8c091..4cf04a3ec3 100644 --- a/ext/etc/extconf.rb +++ b/ext/etc/extconf.rb @@ -1,8 +1,31 @@ require 'mkmf' + +def etc_grep_header(field) + f = open("conftest.c", "w") + f.print <<EOF +#include <pwd.h> +EOF + f.close + begin + if xsystem("#{CPP} | egrep #{field}") + $defs.push(format("-D%s", field.upcase)) + end + ensure + system "rm -f conftest.c" + end +end + have_library("sun", "getpwnam") # NIS (== YP) interface for IRIX 4 a = have_func("getlogin") b = have_func("getpwent") c = have_func("getgrent") if a or b or c + etc_grep_header("pw_gecos") + etc_grep_header("pw_change") + etc_grep_header("pw_quota") + etc_grep_header("pw_age") + etc_grep_header("pw_class") + etc_grep_header("pw_comment") + etc_grep_header("pw_expire") create_makefile("etc") end diff --git a/ext/extmk.rb.in b/ext/extmk.rb.in index 0c32954577..e8dc56604f 100644 --- a/ext/extmk.rb.in +++ b/ext/extmk.rb.in @@ -1,6 +1,7 @@ #! /usr/local/bin/ruby $".push 'mkmf.rb' #" +load '../lib/find.rb' if ARGV[0] == 'static' $force_static = TRUE @@ -93,6 +94,24 @@ def try_cpp xsystem(format(CPP, $CFLAGS)) end +def install_rb(mfile) + path = [] + dir = [] + Find.find("lib") do |f| + next unless /\.rb$/ =~ f + f = f[4..-1] + path.push f + dir |= File.dirname(f) + end + for f in dir + next if f == "." + mfile.printf "\t@test -d $(libdir)/%s || mkdir $(libdir)/%s\n", f, f + end + for f in path + mfile.printf "\t$(INSTALL_DATA) lib/%s $(libdir)/%s\n", f, f + end +end + def have_library(lib, func) if $lib_cache[lib] if $lib_cache[lib] == "yes" @@ -263,7 +282,8 @@ RUBY_INSTALL_NAME = `t='$(program_transform_name)'; echo ruby | sed $$t` prefix = @prefix@ exec_prefix = @exec_prefix@ -libdir = @libdir@/$(RUBY_INSTALL_NAME)/@arch@ +libdir = @libdir@/$(RUBY_INSTALL_NAME) +archdir = $(libdir)/@arch@ @SET_MAKE@ #### End of system configuration section. #### @@ -299,24 +319,29 @@ clean:; @rm -f *.o *.so *.sl realclean: clean ", target, - if $static then "o" else "@DLEXT@" end, $dots, $dots + if $static then "a" else "@DLEXT@" end, $dots, $dots mfile.printf "\ install: + @test -d $(libdir) || mkdir $(libdir) + @test -d $(archdir) || mkdir $(archdir) " if !$static mfile.printf "\ - @test -d $(libdir) || mkdir $(libdir) - $(INSTALL) $(TARGET) $(libdir)/$(TARGET) + $(INSTALL) $(TARGET) $(archdir)/$(TARGET) " end - for rb in Dir["lib/*.rb"] - mfile.printf "\t$(INSTALL_DATA) %s @libdir@/$(RUBY_INSTALL_NAME)\n", rb - end + install_rb(mfile) mfile.printf "\n" - if !$static && "@DLEXT@" != "o" + if $static + mfile.printf "\ +$(TARGET): $(OBJS) + @AR@ cru $(TARGET) $(OBJS) + @-@RANLIB@ $(LIBRUBY) 2> /dev/null || true +" + elsif "@DLEXT@" != "o" mfile.printf "\ $(TARGET): $(OBJS) $(LDSHARED) $(DLDFLAGS) -o $(TARGET) $(OBJS) $(LOCAL_LIBS) $(LIBS) @@ -327,26 +352,11 @@ $(TARGET): $(OBJS) $(TARGET): $(OBJS) ar cru $(TARGET) $(OBJS) " - elsif PLATFORM =~ "-nextstep" + elsif PLATFORM =~ "-nextstep" || PLATFORM =~ "-openstep" || PLATFORM =~ "-rhapsody" mfile.printf "\ $(TARGET): $(OBJS) cc -r $(CFLAGS) -o $(TARGET) $(OBJS) " - elsif PLATFORM =~ "-openstep" - mfile.printf "\ -$(TARGET): $(OBJS) - cc -r $(CFLAGS) -o $(TARGET) $(OBJS) -" - elsif PLATFORM =~ "-rhapsody" - mfile.printf "\ -$(TARGET): $(OBJS) - cc -r $(CFLAGS) -o $(TARGET) $(OBJS) -" - elsif $static - mfile.printf "\ -$(TARGET): $(OBJS) - ld -r -o $(TARGET) $(OBJS) -" else mfile.printf "\ $(TARGET): $(OBJS) @@ -486,7 +496,7 @@ exit if $install or $clean $extinit = "" unless $extinit if $extlist.size > 0 for s,t in $extlist - f = format("%s/%s.o", s, t) + f = format("%s/%s.a", s, t) if File.exist?(f) $extinit += format("\ \tInit_%s();\n\ diff --git a/ext/gtk/MANIFEST b/ext/gtk/MANIFEST index c38e8cd40a..ec04200677 100644 --- a/ext/gtk/MANIFEST +++ b/ext/gtk/MANIFEST @@ -1,4 +1,5 @@ MANIFEST +ENVIRONMENT extconf.rb gtk.c test.rb diff --git a/ext/gtk/extconf.rb b/ext/gtk/extconf.rb index 43c90c0ece..5177af7381 100644 --- a/ext/gtk/extconf.rb +++ b/ext/gtk/extconf.rb @@ -1,8 +1,15 @@ require "mkmf" # may need to be changed -$LDFLAGS=`gtk-config --libs`.chomp! -$CFLAGS=`gtk-config --cflags`.chomp! +begin + $LDFLAGS, *libs = `gtk-config --libs`.chomp!.split(/(-l.*)/) + $libs = libs.join(' ') + ' ' + $libs + $CFLAGS=`gtk-config --cflags`.chomp! +rescue + $LDFLAGS = '-L/usr/X11R6/lib -L/usr/local/lib' + $CFLAGS = '-I/usr/X11R6/lib -I/usr/local/include' + $libs = '-lm -lc' +end have_library("X11", "XOpenDisplay") have_library("Xext", "XShmQueryVersion") @@ -10,5 +17,6 @@ have_library("Xi", "XOpenDevice") if have_library("glib", "g_print") and have_library("gdk", "gdk_init") and have_library("gtk", "gtk_init") + $libs = $libs.split(/\s/).uniq.join(' ') create_makefile("gtk") end diff --git a/ext/gtk/gtk.c b/ext/gtk/gtk.c index d2a67396e0..fb7c5918a4 100644 --- a/ext/gtk/gtk.c +++ b/ext/gtk/gtk.c @@ -15,7 +15,6 @@ #include <signal.h> extern VALUE rb_argv, rb_argv0; -extern VALUE rb_cData; static VALUE mGtk; @@ -388,26 +387,18 @@ gdkfnt_load_font(self, name) font = gdk_font_load(STR2CSTR(name)); return Data_Wrap_Struct(gdkFont, 0, gdk_font_unref, font); - /* return make_gdkfont(new); */ } + static VALUE gdkfnt_load_fontset(self, name) VALUE self, name; { - GdkFont *new; + GdkFont *font; - new = gdk_fontset_load(STR2CSTR(name)); - return make_gdkfont(new); -} -static VALUE -gdkfnt_new(self, name) - VALUE self, name; -{ - char *cname = STR2CSTR(name); - return (strchr(cname, ',') == NULL) - ? gdkfnt_load_font(self, name) - : gdkfnt_load_fontset(self, name); + font = gdk_fontset_load(STR2CSTR(name)); + return Data_Wrap_Struct(gdkFont, 0, gdk_font_unref, font); } + static VALUE gdkfnt_string_width(self, str) VALUE self, str; @@ -417,12 +408,14 @@ gdkfnt_string_width(self, str) w = gdk_string_width(get_gdkfont(self), STR2CSTR(str)); return INT2NUM(w); } + static VALUE gdkfnt_ascent(self) VALUE self; { return INT2NUM(get_gdkfont(self)->ascent); } + static VALUE gdkfnt_descent(self) VALUE self; @@ -833,6 +826,7 @@ gdkwin_clear(self) gdk_window_clear(get_gdkwindow(self)); return self; } + static VALUE gdkwin_clear_area(self, x,y,w,h) VALUE self,x,y,w,h; @@ -841,6 +835,7 @@ gdkwin_clear_area(self, x,y,w,h) NUM2INT(x), NUM2INT(y), NUM2INT(w), NUM2INT(h)); return self; } + static VALUE gdkwin_clear_area_e(self, x,y,w,h) VALUE self,x,y,w,h; @@ -869,6 +864,32 @@ gdkwin_set_back_pixmap(self, pixmap, parent_relative) return self; } +static VALUE +gdkwin_move(self, x,y) + VALUE self, x,y; +{ + gdk_window_move(get_gdkwindow(self), + NUM2INT(x), NUM2INT(y)); + return self; +} + +static VALUE +gdkwin_resize(self, w,h) + VALUE self, w,h; +{ + gdk_window_resize(get_gdkwindow(self), + NUM2INT(w), NUM2INT(h)); + return self; +} + +static VALUE +gdkwin_move_resize(self, x,y,w,h) + VALUE self, x,y,w,h; +{ + gdk_window_move_resize(get_gdkwindow(self), + NUM2INT(x), NUM2INT(y), NUM2INT(w), NUM2INT(h)); + return self; +} static VALUE make_gdkevent(event) @@ -982,6 +1003,7 @@ gdkgc_set_foreground(self, pix) gdk_gc_set_foreground(get_gdkgc(self), &c); return pix; } + static VALUE gdkgc_set_background(self, pix) VALUE pix; @@ -991,6 +1013,7 @@ gdkgc_set_background(self, pix) gdk_gc_set_background(get_gdkgc(self), &c); return pix; } + static VALUE gdkgc_set_clip_mask(self, mask) VALUE mask; @@ -998,6 +1021,7 @@ gdkgc_set_clip_mask(self, mask) gdk_gc_set_clip_mask(get_gdkgc(self), get_gdkbitmap(mask)); return mask; } + static VALUE gdkgc_set_clip_origin(self, x, y) VALUE x, y; @@ -1005,6 +1029,7 @@ gdkgc_set_clip_origin(self, x, y) gdk_gc_set_clip_origin(get_gdkgc(self), NUM2INT(x), NUM2INT(y)); return self; } + static VALUE gdkgc_set_clip_rectangle(self, rectangle) VALUE rectangle; @@ -1193,6 +1218,7 @@ signal_setup_args(obj, sig, argc, params, args) GtkArg *params; VALUE args; { + GtkArg *params1; int i; char *signame = rb_id2name(sig); @@ -1242,9 +1268,30 @@ signal_setup_args(obj, sig, argc, params, args) } } + params1 = params; for (i=0; i<argc; i++) { - rb_ary_push(args, arg_to_value(params)); - params++; + rb_ary_push(args, arg_to_value(params1)); + params1++; + } +} + +static void +signal_sync_args(obj, sig, argc, params, args) + VALUE obj; + ID sig; + int argc; + GtkArg *params; + VALUE args; +{ + int i; + char *signame = rb_id2name(sig); + + if (rb_obj_is_kind_of(obj, gWidget)) { + if (strcmp(signame, "size_request") == 0) { + memcpy(GTK_VALUE_POINTER(params[0]), get_grequisition(rb_ary_pop(args)), + sizeof(GtkRequisition)); + return; + } } } @@ -1371,8 +1418,14 @@ signal_callback(widget, data, nparams, params) else { rb_ary_unshift(args, self); result = rb_apply(proc, id_call, args); + rb_ary_shift(args); } arg_set_value(params+nparams, result); + + for (i=0; i<RARRAY(a)->len; i++) { + rb_ary_pop(args); + } + signal_sync_args(self, id, nparams, params, args); } static void @@ -1424,7 +1477,7 @@ try_get_gobject(self) } static VALUE -grb_obj_equal(self, other) +gobj_equal(self, other) VALUE self, other; { if (self == other) return Qtrue; @@ -1466,6 +1519,14 @@ gobj_destroy(self) } static VALUE +gobj_get_flags(self) + VALUE self; +{ + /* _GtkObject.flags is int32 */ + return(INT2FIX( GTK_OBJECT_FLAGS(get_gobject(self)) )); +} + +static VALUE gobj_set_flags(self, flags) VALUE self, flags; { @@ -1497,7 +1558,7 @@ gobj_sig_connect(argc, argv, self) id = rb_intern(STR2CSTR(sig)); data = rb_ary_new3(3, rb_f_lambda(), INT2NUM(id), args); add_relative(self, data); - i = gtk_signal_connect_interp(GTK_OBJECT(get_widget(self)), + i = gtk_signal_connect_interp(get_gobject(self), STR2CSTR(sig), signal_callback, (gpointer)data, NULL, 0); @@ -1535,6 +1596,12 @@ cont_bwidth(self, width) NUM2INT(width)); return self; } +static VALUE +cont_get_bwidth(self) + VALUE self; +{ + return INT2NUM(GTK_CONTAINER(get_widget(self))->border_width); +} static VALUE cont_add(self, other) @@ -1545,6 +1612,14 @@ cont_add(self, other) } static VALUE +cont_remove(self, other) + VALUE self, other; +{ + gtk_container_remove(GTK_CONTAINER(get_widget(self)), get_widget(other)); + return self; +} + +static VALUE cont_disable_resize(self) VALUE self; { @@ -1691,20 +1766,23 @@ static VALUE misc_get_xalign(self) VALUE self; { - return float_new(GTK_MISC(get_widget(self))->xalign); + return rb_float_new(GTK_MISC(get_widget(self))->xalign); } + static VALUE misc_get_yalign(self) VALUE self; { - return float_new(GTK_MISC(get_widget(self))->yalign); + return rb_float_new(GTK_MISC(get_widget(self))->yalign); } + static VALUE misc_get_xpad(self) VALUE self; { return INT2NUM(GTK_MISC(get_widget(self))->xpad); } + static VALUE misc_get_ypad(self) VALUE self; @@ -1803,6 +1881,22 @@ adj_initialize(self, value, lower, upper, step_inc, page_inc, page_size) } static VALUE +adj_set_value(self, value) + VALUE self, value; +{ + gtk_adjustment_set_value(GTK_ADJUSTMENT(get_gobject(self)), + NUM2DBL(value)); + return Qnil; +} + +static VALUE +adj_get_value(self) + VALUE self; +{ + return rb_float_new(GTK_ADJUSTMENT(get_gobject(self))->value); +} + +static VALUE widget_show(self) VALUE self; { @@ -1990,29 +2084,12 @@ widget_grab_default(self) } static VALUE -widget_visible(self) - VALUE self; -{ - if (GTK_WIDGET_VISIBLE(get_widget(self))) - return Qtrue; - return Qfalse; -} - -static VALUE widget_reparent(self, parent) VALUE self, parent; { gtk_widget_reparent(get_widget(self), get_widget(parent)); return self; } -static VALUE -widget_mapped(self) - VALUE self; -{ - if (GTK_WIDGET_MAPPED(get_widget(self))) - return TRUE; - return FALSE; -} static VALUE widget_popup(self, x, y) @@ -2245,42 +2322,99 @@ static VALUE widget_push_visual(self, visual) VALUE self, visual; { + GdkVisual v; gtk_widget_push_visual(get_gdkvisual(visual)); return make_gdkcmap(visual); } static VALUE widget_push_style(self, style) - VALUE self, style; + VALUE self; { gtk_widget_push_style(get_gstyle(style)); return Qnil; } static VALUE -widget_pop_cmap(self, cmap) - VALUE self, cmap; +widget_pop_cmap(self) + VALUE self; { gtk_widget_pop_colormap(); return Qnil; } static VALUE -widget_pop_visual(self, visual) - VALUE self, visual; +widget_pop_visual(self) + VALUE self; { gtk_widget_pop_visual(); return Qnil; } static VALUE -widget_pop_style(self, style) - VALUE self, style; +widget_pop_style(self) + VALUE self; { gtk_widget_pop_style(); return Qnil; } +/* +static VALUE +widget_peek_cmap(self) + VALUE self; +{ + GdkColormap *cmap; + + cmap = (GdkColormap*)gtk_widget_peek_colormap(); + return make_gdkcmap(cmap); +} + +static VALUE +widget_peek_visual(self) + VALUE self; +{ + GdkVisual *v; + + v = (GdkVisual*)gtk_widget_peek_visual(); + return make_gdkvisual(v); +} + +static VALUE +widget_peek_style(self) + VALUE self; +{ + GtkStyle *style; + + style = (GtkStyle*)gtk_widget_peek_style(); + return make_gstyle(style); +} +*/ + +#define DEFINE_IS_WIDGET(STATE) \ +static VALUE \ +widget_ ## STATE (self) \ + VALUE self; \ +{ \ + return( GTK_WIDGET_ ## STATE (get_widget(self))? Qtrue: Qfalse ); \ +} +DEFINE_IS_WIDGET(TOPLEVEL) +DEFINE_IS_WIDGET(NO_WINDOW) +DEFINE_IS_WIDGET(REALIZED) +DEFINE_IS_WIDGET(MAPPED) +DEFINE_IS_WIDGET(VISIBLE) +DEFINE_IS_WIDGET(DRAWABLE) +DEFINE_IS_WIDGET(SENSITIVE) +DEFINE_IS_WIDGET(PARENT_SENSITIVE) +DEFINE_IS_WIDGET(IS_SENSITIVE) +DEFINE_IS_WIDGET(CAN_FOCUS) +DEFINE_IS_WIDGET(HAS_FOCUS) +DEFINE_IS_WIDGET(CAN_DEFAULT) +DEFINE_IS_WIDGET(HAS_DEFAULT) +DEFINE_IS_WIDGET(HAS_GRAB) +DEFINE_IS_WIDGET(BASIC) +DEFINE_IS_WIDGET(RC_STYLE) + static VALUE widget_set_default_cmap(self, cmap) VALUE self, cmap; @@ -2356,6 +2490,17 @@ widget_get_alloc(self) { return make_gallocation(&(get_widget(self)->allocation)); } +static VALUE +widget_set_alloc(self, x,y,w,h) + VALUE self, x,y,w,h; +{ + GtkAllocation *a = &(get_widget(self)->allocation); + a->x = NUM2INT(x); + a->y = NUM2INT(y); + a->width = NUM2INT(w); + a->height = NUM2INT(h); + return self; +} static VALUE widget_get_requisition(self) @@ -2804,6 +2949,17 @@ clist_get_row_data(self, row) } static VALUE +clist_get_text(self, row, col) + VALUE self, row, col; +{ + char* text; + + gtk_clist_get_text(GTK_CLIST(get_widget(self)), + NUM2INT(row), NUM2INT(col), &text); + return rb_str_new2(text); +} + +static VALUE clist_select_row(self, row, col) VALUE self, row, col; { @@ -3044,9 +3200,9 @@ static VALUE label_get(self) VALUE self; { - gchar** str; - gtk_label_get(GTK_LABEL(get_widget(self)), str); - return rb_str_new2(*str); + gchar *str; + gtk_label_get(GTK_LABEL(get_widget(self)), &str); + return rb_str_new2(str); } static VALUE @@ -5450,8 +5606,9 @@ static VALUE range_set_adj(self, adj) VALUE self, adj; { - gtk_range_set_adjustment(GTK_RANGE(get_widget(self)), - GTK_ADJUSTMENT(get_gobject(adj))); + if (! NIL_P(adj)) + gtk_range_set_adjustment(GTK_RANGE(get_widget(self)), + GTK_ADJUSTMENT(get_gobject(adj))); return self; } @@ -5812,19 +5969,20 @@ style_base(self, idx) return make_gdkcolor(get_gstyle(self)->base[i]); } -#define DEFINE_STYLE_SET_COLOR(FUNC, TYPE) \ +#define DEFINE_STYLE_SET_COLOR(func, type) \ static VALUE \ -FUNC(self, idx, r, g, b) \ +func(self, idx, r, g, b) \ VALUE self, idx, r, g, b; \ { \ GtkStyle *style; \ GdkColor *color; \ int i = NUM2INT(idx); \ \ - if (i < 0 || 5 < i) ArgError("state out of range"); \ + if (i < 0 || 5 < i) rb_raise(rb_eArgError, "state out of range"); \ style = get_gstyle(self); \ - if (style->fg_gc[0] != NULL) ArgError("you must not change widget style."); \ - color = &(style-> TYPE [i]); \ + if (style->fg_gc[0] != NULL) \ + rb_raise(rb_eArgError, "you must not change widget style."); \ + color = &(style-> type [i]); \ color->red = NUM2INT(r); \ color->green = NUM2INT(g); \ color->blue = NUM2INT(b); \ @@ -5864,7 +6022,8 @@ style_set_font(self, f) GdkFont *font = get_gdkfont(f); GtkStyle *style = get_gstyle(self); - if (style->fg_gc[0] != NULL) ArgError("you must not change widget style."); + if (style->fg_gc[0] != NULL) + rb_raise(rb_eArgError, "you must not change widget style."); if (style->font != NULL) gdk_font_unref(style->font); @@ -6054,6 +6213,18 @@ style_draw_string(self,) /* 5 */ #endif static VALUE +gallocation_new(VALUE self, VALUE x, VALUE y, VALUE w, VALUE h) +{ + GtkAllocation a; + + a.x = NUM2INT(x); + a.y = NUM2INT(y); + a.width = NUM2INT(w); + a.height = NUM2INT(h); + return make_gallocation(&a); +} + +static VALUE gallocation_x(self) { return INT2NUM(get_gallocation(self)->x); @@ -6078,31 +6249,26 @@ gallocation_h(self) } static VALUE -grequisition_w(self) -{ - return INT2NUM(get_grequisition(self)->width); -} -static VALUE -grequisition_h(self) +gallocation_to_a(self) + VALUE self; { - return INT2NUM(get_grequisition(self)->height); + GtkAllocation *a; + + a = get_gallocation(self); + return rb_ary_new3(4, a->x, a->y, a->width, a->height); } -/* + static VALUE -grequisition_set_w(self, w) - VALUE self, w; +gallocation_to_s(self) + VALUE self; { - get_grequisition(self)->width = NUM2INT(w); - return self; -} -static VALUE -grequisition_set_h(self, h) - VALUE self, h; -{ - get_grequisition(self)->height = NUM2INT(h); - return self; + char str[2 +2*3 +5*4 +1]; /* member is guint16. max string size is 5 */ + GtkAllocation *a; + + a = get_gallocation(self); + sprintf(str, "(%5d, %5d, %5d, %5d)", a->x, a->y, a->width, a->height); + return rb_str_new2(str); } -*/ static VALUE gtk_m_main(self) @@ -6309,114 +6475,173 @@ gdkdraw_draw_segs(self, gc, segs) segments[i].y2 = NUM2INT(RARRAY(RARRAY(segs)->ptr[i])->ptr[3]); } gdk_draw_segments(get_gdkdrawable(self), get_gdkgc(gc), - segments, - RARRAY(segs)->len); + segments, RARRAY(segs)->len); return self; } +static VALUE grequisition_new(self, w, h) + VALUE self, w, h; +{ + GtkRequisition r; + + r.width = NUM2INT(w); + r.height = NUM2INT(h); + return make_grequisition(&r); +} + +static VALUE +grequisition_w(self) + VALUE self; +{ + return INT2NUM(get_grequisition(self)->width); +} + +static VALUE +grequisition_h(self) + VALUE self; +{ + return INT2NUM(get_grequisition(self)->height); +} + +static VALUE +grequisition_set_w(self, w) + VALUE self, w; +{ + get_grequisition(self)->width = NUM2INT(w); + return self; +} + +static VALUE +grequisition_set_h(self, h) + VALUE self, h; +{ + get_grequisition(self)->height = NUM2INT(h); + return self; +} + +static VALUE +grequisition_to_a(self) + VALUE self; +{ + GtkRequisition *r; + + r = get_grequisition(self); + return rb_ary_new3(2, r->width, r->height); +} + +static VALUE +grequisition_to_s(self) + VALUE self; +{ + char str[2 +2*1 +5*2 +1]; /* member is guint16. max string size is 5 */ + GtkRequisition *r; + + r = get_grequisition(self); + sprintf(str, "(%5d, %5d)", r->width, r->height); + return rb_str_new2(str); +} static VALUE gdkrect_s_new(self, x, y, width, height) VALUE self, x, y, width, height; { - GdkRectangle new; - new.x = NUM2INT(x); - new.y = NUM2INT(y); - new.width = NUM2INT(width); - new.height = NUM2INT(height); - return make_gdkrectangle(&new); + GdkRectangle new; + new.x = NUM2INT(x); + new.y = NUM2INT(y); + new.width = NUM2INT(width); + new.height = NUM2INT(height); + return make_gdkrectangle(&new); } static VALUE gdkrect_x(self) { - return INT2NUM(get_gdkrectangle(self)->x); + return INT2NUM(get_gdkrectangle(self)->x); } static VALUE gdkrect_y(self) { - return INT2NUM(get_gdkrectangle(self)->y); + return INT2NUM(get_gdkrectangle(self)->y); } static VALUE gdkrect_w(self) { - return INT2NUM(get_gdkrectangle(self)->width); + return INT2NUM(get_gdkrectangle(self)->width); } static VALUE gdkrect_h(self) { - return INT2NUM(get_gdkrectangle(self)->height); + return INT2NUM(get_gdkrectangle(self)->height); } static VALUE gdkevent_type(self) { - return INT2NUM(get_gdkevent(self)->type); + return INT2NUM(get_gdkevent(self)->type); } static VALUE gdkeventexpose_area(self) { - return make_gdkrectangle( &(((GdkEventExpose*)get_gdkevent(self))->area) ); + return make_gdkrectangle(&(((GdkEventExpose*)get_gdkevent(self))->area)); } static VALUE gdkeventbutton_x(self) { - return INT2NUM(((GdkEventButton*)get_gdkevent(self))->x); + return INT2NUM(((GdkEventButton*)get_gdkevent(self))->x); } static VALUE gdkeventbutton_y(self) { - return INT2NUM(((GdkEventButton*)get_gdkevent(self))->y); + return INT2NUM(((GdkEventButton*)get_gdkevent(self))->y); } static VALUE gdkeventbutton_button(self) { - return INT2NUM(((GdkEventButton*)get_gdkevent(self))->button); + return INT2NUM(((GdkEventButton*)get_gdkevent(self))->button); } static VALUE gdkeventmotion_window(self) { - return make_gdkwindow( ((GdkEventMotion*)get_gdkevent(self))->window); + return make_gdkwindow(((GdkEventMotion*)get_gdkevent(self))->window); } static VALUE gdkeventmotion_x(self) { - return INT2NUM(((GdkEventMotion*)get_gdkevent(self))->x); + return INT2NUM(((GdkEventMotion*)get_gdkevent(self))->x); } static VALUE gdkeventmotion_y(self) { - return INT2NUM(((GdkEventMotion*)get_gdkevent(self))->y); + return INT2NUM(((GdkEventMotion*)get_gdkevent(self))->y); } static VALUE gdkeventmotion_state(self) { - return INT2NUM(((GdkEventMotion*)get_gdkevent(self))->state); + return INT2NUM(((GdkEventMotion*)get_gdkevent(self))->state); } static VALUE gdkeventmotion_is_hint(self) { - return INT2NUM(((GdkEventMotion*)get_gdkevent(self))->is_hint); + return INT2NUM(((GdkEventMotion*)get_gdkevent(self))->is_hint); } - static gint idle() { CHECK_INTS; -#ifdef THREAD +#ifdef USE_THREAD if (!rb_thread_critical) rb_thread_schedule(); #endif return Qtrue; @@ -6688,13 +6913,15 @@ Init_gtk() /* GtkObject */ rb_define_method(gObject, "initialize", gobj_initialize, -1); + rb_define_method(gObject, "flags", gobj_get_flags, 0); + rb_define_method(gObject, "get_flags", gobj_get_flags, 0); rb_define_method(gObject, "set_flags", gobj_set_flags, 1); rb_define_method(gObject, "unset_flags", gobj_unset_flags, 1); rb_define_method(gObject, "destroy", gobj_destroy, 0); rb_define_method(gObject, "signal_connect", gobj_sig_connect, -1); rb_define_method(gObject, "signal_connect_after", gobj_sig_connect_after, -1); rb_define_method(gObject, "singleton_method_added", gobj_smethod_added, 1); - rb_define_method(gObject, "==", grb_obj_equal, 1); + rb_define_method(gObject, "==", gobj_equal, 1); rb_define_method(gObject, "inspect", gobj_inspect, 0); /* Widget */ @@ -6721,8 +6948,6 @@ Init_gtk() rb_define_method(gWidget, "grab_focus", widget_grab_focus, 0); rb_define_method(gWidget, "grab_default", widget_grab_default, 0); rb_define_method(gWidget, "set_state", widget_set_state, 1); - rb_define_method(gWidget, "visible?", widget_visible, 0); - rb_define_method(gWidget, "mapped?", widget_mapped, 0); rb_define_method(gWidget, "reparent", widget_reparent, 1); rb_define_method(gWidget, "popup", widget_popup, 2); rb_define_method(gWidget, "intersect", widget_intersect, 2); @@ -6738,6 +6963,7 @@ Init_gtk() rb_define_method(gWidget, "set_extension_events", widget_set_eevents, 1); rb_define_method(gWidget, "unparent", widget_unparent, 0); rb_define_method(gWidget, "allocation", widget_get_alloc, 0); + rb_define_method(gWidget, "set_allocation", widget_set_alloc, 4); rb_define_method(gWidget, "requisition", widget_get_requisition, 0); rb_define_method(gWidget, "set_requisition", widget_set_requisition, 2); rb_define_method(gWidget, "state", widget_state, 0); @@ -6754,7 +6980,6 @@ Init_gtk() rb_define_method(gWidget, "child?", widget_is_child, 1); rb_define_method(gWidget, "window", widget_window, 0); rb_define_method(gWidget, "shape_combine_mask", widget_shape_combine_mask, 3); - rb_define_singleton_method(gWidget, "push_colomap", widget_push_cmap, 1); rb_define_singleton_method(gWidget, "push_visual", widget_push_visual, 1); rb_define_singleton_method(gWidget, "push_style", widget_push_style, 1); @@ -6762,6 +6987,30 @@ Init_gtk() rb_define_singleton_method(gWidget, "pop_visual", widget_pop_visual, 0); rb_define_singleton_method(gWidget, "pop_style", widget_pop_style, 0); + /* peek_* function is defined in gtkwidget.c but not decralated in gtk/*.h + so normally not using it. + rb_define_singleton_method(gWidget, "peek_colomap", widget_pop_cmap, 0); + rb_define_singleton_method(gWidget, "peek_visual", widget_pop_visual, 0); + rb_define_singleton_method(gWidget, "peek_style", widget_pop_style, 0); + */ + + rb_define_method(gWidget, "toplevel?", widget_TOPLEVEL, 0); + rb_define_method(gWidget, "no_window?", widget_NO_WINDOW, 0); + rb_define_method(gWidget, "realized?", widget_REALIZED, 0); + rb_define_method(gWidget, "mapped?", widget_MAPPED, 0); + rb_define_method(gWidget, "visible?", widget_VISIBLE, 0); + rb_define_method(gWidget, "drawable?", widget_DRAWABLE, 0); + rb_define_method(gWidget, "individual_sensitive?", widget_SENSITIVE, 0); + rb_define_method(gWidget, "parent_sensitive?", widget_PARENT_SENSITIVE, 0); + rb_define_method(gWidget, "sensitive?", widget_IS_SENSITIVE, 0); + rb_define_method(gWidget, "can_focus?", widget_CAN_FOCUS, 0); + rb_define_method(gWidget, "has_focus?", widget_HAS_FOCUS, 0); + rb_define_method(gWidget, "can_default?", widget_CAN_DEFAULT, 0); + rb_define_method(gWidget, "has_default?", widget_HAS_DEFAULT, 0); + rb_define_method(gWidget, "has_grab?", widget_HAS_GRAB, 0); + rb_define_method(gWidget, "basic?", widget_BASIC, 0); + rb_define_method(gWidget, "rc_style?", widget_RC_STYLE, 0); + rb_define_singleton_method(gWidget, "set_default_colomap", widget_set_default_cmap, 1); rb_define_singleton_method(gWidget, "set_default_visual", @@ -6789,7 +7038,9 @@ Init_gtk() /* Container */ rb_define_method(gContainer, "border_width", cont_bwidth, 1); + rb_define_method(gContainer, "get_border_width", cont_get_bwidth, 0); rb_define_method(gContainer, "add", cont_add, 1); + rb_define_method(gContainer, "remove", cont_remove, 1); rb_define_method(gContainer, "disable_resize", cont_disable_resize, 0); rb_define_method(gContainer, "enable_resize", cont_enable_resize, 0); rb_define_method(gContainer, "block_resize", cont_block_resize, 0); @@ -6834,6 +7085,10 @@ Init_gtk() /* Adjustment */ rb_define_method(gAdjustment, "initialize", adj_initialize, 6); + rb_define_method(gAdjustment, "set_value", adj_set_value, 1); + rb_define_method(gAdjustment, "get_value", adj_get_value, 0); + rb_define_method(gAdjustment, "value=", adj_set_value, 1); + rb_define_method(gAdjustment, "value", adj_get_value, 0); /* Box */ rb_define_method(gBox, "pack_start", box_pack_start, -1); @@ -6853,6 +7108,7 @@ Init_gtk() rb_define_method(gTButton, "set_state", tbtn_set_state, 1); rb_define_method(gTButton, "toggled", tbtn_toggled, 0); rb_define_method(gTButton, "active", tbtn_active, 0); + rb_define_method(gTButton, "active?", tbtn_active, 0); /* CheckButton */ rb_define_method(gCButton, "initialize", cbtn_initialize, -1); @@ -6909,6 +7165,7 @@ Init_gtk() rb_define_method(gCList, "remove", clist_remove, 1); rb_define_method(gCList, "set_row_data", clist_set_row_data, 2); rb_define_method(gCList, "get_row_data", clist_get_row_data, 1); + rb_define_method(gCList, "get_text", clist_get_text, 2); rb_define_method(gCList, "select_row", clist_select_row, 2); rb_define_method(gCList, "unselect_row", clist_unselect_row, 2); rb_define_method(gCList, "clear", clist_clear, 0); @@ -7122,6 +7379,8 @@ Init_gtk() /* Label */ rb_define_method(gLabel, "initialize", label_initialize, 1); rb_define_method(gLabel, "get", label_get, 0); + rb_define_method(gLabel, "jtype", label_get_jtype, 0); + rb_define_method(gLabel, "jtype=", label_set_jtype, 1); rb_define_method(gLabel, "set", label_set, 1); rb_define_method(gLabel, "jtype", label_get_jtype, 0); rb_define_method(gLabel, "jtype=", label_set_jtype, 1); @@ -7323,7 +7582,7 @@ Init_gtk() rb_define_method(gStyle, "dup", style_copy, 0); rb_define_method(gStyle, "attach", style_attach, 1); rb_define_method(gStyle, "detach", style_detach, 0); - rb_define_method(gStyle, "set_background", style_set_background, 1); + rb_define_method(gStyle, "set_background", style_set_background, 2); rb_define_method(gStyle, "fg", style_fg, 1); rb_define_method(gStyle, "bg", style_bg, 1); rb_define_method(gStyle, "light", style_light, 1); @@ -7364,17 +7623,21 @@ Init_gtk() rb_define_method(gStyle, "draw_string", style_draw_string, 5); #endif + rb_define_singleton_method(gAllocation, "new", gallocation_new, 4); rb_define_method(gAllocation, "x", gallocation_x, 0); rb_define_method(gAllocation, "y", gallocation_y, 0); rb_define_method(gAllocation, "width", gallocation_w, 0); rb_define_method(gAllocation, "height", gallocation_h, 0); + rb_define_method(gAllocation, "to_a", gallocation_to_a, 0); + rb_define_method(gAllocation, "to_s", gallocation_to_s, 0); + rb_define_singleton_method(gRequisition, "new", grequisition_new, 2); rb_define_method(gRequisition, "width", grequisition_w, 0); rb_define_method(gRequisition, "height", grequisition_h, 0); - /* rb_define_method(gRequisition, "width=", grequisition_set_w, 1); rb_define_method(gRequisition, "height=", grequisition_set_h, 1); - */ + rb_define_method(gRequisition, "to_a", grequisition_to_a, 0); + rb_define_method(gRequisition, "to_s", grequisition_to_s, 0); /* Gtk module */ rb_define_module_function(mGtk, "main", gtk_m_main, 0); @@ -7402,7 +7665,6 @@ Init_gtk() /* Gdk module */ /* GdkFont */ rb_define_singleton_method(gdkFont, "load_font", gdkfnt_load_font, 1); - rb_define_singleton_method(gdkFont, "new", gdkfnt_new, 1); rb_define_singleton_method(gdkFont, "load_fontset", gdkfnt_load_fontset, 1); rb_define_method(gdkFont, "string_width", gdkfnt_string_width, 1); rb_define_method(gdkFont, "ascent", gdkfnt_ascent, 0); @@ -7449,6 +7711,9 @@ Init_gtk() rb_define_method(gdkWindow, "clear_area_e", gdkwin_clear, 4); rb_define_method(gdkWindow, "set_background", gdkwin_set_background, 1); rb_define_method(gdkWindow, "set_back_pixmap", gdkwin_set_back_pixmap, 2); + rb_define_method(gdkWindow, "move", gdkwin_move, 2); + rb_define_method(gdkWindow, "resize", gdkwin_resize, 2); + rb_define_method(gdkWindow, "move_resize", gdkwin_move_resize, 4); /* GdkGC */ rb_define_singleton_method(gdkGC, "new", gdkgc_s_new, 1); @@ -7508,15 +7773,18 @@ Init_gtk() rb_define_const(mGtk, "CAN_DEFAULT", INT2FIX(GTK_CAN_DEFAULT)); rb_define_const(mGtk, "BASIC", INT2FIX(GTK_BASIC)); + /* GtkStateType */ + rb_define_const(mGtk, "STATE_NORMAL", INT2FIX(GTK_STATE_NORMAL)); + rb_define_const(mGtk, "STATE_ACTIVE", INT2FIX(GTK_STATE_ACTIVE)); + rb_define_const(mGtk, "STATE_PRELIGHT", INT2FIX(GTK_STATE_PRELIGHT)); + rb_define_const(mGtk, "STATE_SELECTED", INT2FIX(GTK_STATE_SELECTED)); + rb_define_const(mGtk, "STATE_INSENSITIVE", INT2FIX(GTK_STATE_INSENSITIVE)); + /* GtkWindowType */ rb_define_const(mGtk, "WINDOW_TOPLEVEL", INT2FIX(GTK_WINDOW_TOPLEVEL)); rb_define_const(mGtk, "WINDOW_DIALOG", INT2FIX(GTK_WINDOW_DIALOG)); rb_define_const(mGtk, "WINDOW_POPUP", INT2FIX(GTK_WINDOW_POPUP)); - rb_define_const(mGtk, "WIN_POS_NONE", INT2FIX(GTK_WIN_POS_NONE)); - rb_define_const(mGtk, "WIN_POS_CENTER", INT2FIX(GTK_WIN_POS_CENTER)); - rb_define_const(mGtk, "WIN_POS_MOUSE", INT2FIX(GTK_WIN_POS_MOUSE)); - /* GtkDirectionType */ rb_define_const(mGtk, "DIR_TAB_FORWARD", INT2FIX(GTK_DIR_TAB_FORWARD)); rb_define_const(mGtk, "DIR_TAB_BACKWARD", INT2FIX(GTK_DIR_TAB_BACKWARD)); @@ -7525,78 +7793,124 @@ Init_gtk() rb_define_const(mGtk, "DIR_LEFT", INT2FIX(GTK_DIR_LEFT)); rb_define_const(mGtk, "DIR_RIGHT", INT2FIX(GTK_DIR_RIGHT)); - /* GtkPolicyType */ - rb_define_const(mGtk, "POLICY_ALWAYS", INT2FIX(GTK_POLICY_ALWAYS)); - rb_define_const(mGtk, "POLICY_AUTOMATIC", INT2FIX(GTK_POLICY_AUTOMATIC)); - - /* GtkJustification */ - rb_define_const(mGtk, "JUSTIFY_LEFT", INT2FIX(GTK_JUSTIFY_LEFT)); - rb_define_const(mGtk, "JUSTIFY_RIGHT", INT2FIX(GTK_JUSTIFY_RIGHT)); - rb_define_const(mGtk, "JUSTIFY_CENTER", INT2FIX(GTK_JUSTIFY_CENTER)); - rb_define_const(mGtk, "JUSTIFY_FILL", INT2FIX(GTK_JUSTIFY_FILL)); - - /* GtkSelectionMode */ - rb_define_const(mGtk, "SELECTION_SINGLE", INT2FIX(GTK_SELECTION_SINGLE)); - rb_define_const(mGtk, "SELECTION_BROWSE", INT2FIX(GTK_SELECTION_BROWSE)); - rb_define_const(mGtk, "SELECTION_MULTIPLE", INT2FIX(GTK_SELECTION_MULTIPLE)); - rb_define_const(mGtk, "SELECTION_EXTENDED", INT2FIX(GTK_SELECTION_EXTENDED)); - /* GtkPositionType */ - rb_define_const(mGtk, "POS_LEFT", INT2FIX(GTK_POS_LEFT)); - rb_define_const(mGtk, "POS_RIGHT", INT2FIX(GTK_POS_RIGHT)); - rb_define_const(mGtk, "POS_TOP", INT2FIX(GTK_POS_TOP)); - rb_define_const(mGtk, "POS_BOTTOM", INT2FIX(GTK_POS_BOTTOM)); - /* GtkShadowType */ rb_define_const(mGtk, "SHADOW_NONE", INT2FIX(GTK_SHADOW_NONE)); rb_define_const(mGtk, "SHADOW_IN", INT2FIX(GTK_SHADOW_IN)); rb_define_const(mGtk, "SHADOW_OUT", INT2FIX(GTK_SHADOW_OUT)); rb_define_const(mGtk, "SHADOW_ETCHED_IN", INT2FIX(GTK_SHADOW_ETCHED_IN)); rb_define_const(mGtk, "SHADOW_ETCHED_OUT", INT2FIX(GTK_SHADOW_ETCHED_OUT)); - /* GtkStateType */ - rb_define_const(mGtk, "STATE_NORMAL", INT2FIX(GTK_STATE_NORMAL)); - rb_define_const(mGtk, "STATE_ACTIVE", INT2FIX(GTK_STATE_ACTIVE)); - rb_define_const(mGtk, "STATE_PRELIGHT", INT2FIX(GTK_STATE_PRELIGHT)); - rb_define_const(mGtk, "STATE_SELECTED", INT2FIX(GTK_STATE_SELECTED)); - rb_define_const(mGtk, "STATE_INSENSITIVE", INT2FIX(GTK_STATE_INSENSITIVE)); + + /* GtkArrowType */ + rb_define_const(mGtk, "ARROW_UP", INT2FIX(GTK_ARROW_UP)); + rb_define_const(mGtk, "ARROW_DOWN", INT2FIX(GTK_ARROW_DOWN)); + rb_define_const(mGtk, "ARROW_LEFT", INT2FIX(GTK_ARROW_LEFT)); + rb_define_const(mGtk, "ARROW_RIGHT", INT2FIX(GTK_ARROW_RIGHT)); + + /* GtkPackType */ + rb_define_const(mGtk, "GTK_PACK_START", INT2FIX(GTK_PACK_START)); + rb_define_const(mGtk, "GTK_PACK_END", INT2FIX(GTK_PACK_END)); + + /* GtkPolicyType */ + rb_define_const(mGtk, "POLICY_ALWAYS", INT2FIX(GTK_POLICY_ALWAYS)); + rb_define_const(mGtk, "POLICY_AUTOMATIC", INT2FIX(GTK_POLICY_AUTOMATIC)); + + /* GtkUpdateType */ + rb_define_const(mGtk, "UPDATE_CONTINUOUS", INT2FIX(GTK_UPDATE_CONTINUOUS)); + rb_define_const(mGtk, "UPDATE_DISCONTINUOUS", INT2FIX(GTK_UPDATE_DISCONTINUOUS)); + rb_define_const(mGtk, "UPDATE_DELAYED", INT2FIX(GTK_UPDATE_DELAYED)); + /* GtkAttachOptions */ rb_define_const(mGtk, "EXPAND", INT2FIX(GTK_EXPAND)); rb_define_const(mGtk, "SHRINK", INT2FIX(GTK_SHRINK)); rb_define_const(mGtk, "FILL", INT2FIX(GTK_FILL)); + + /* GtkSignalRunOptions */ + rb_define_const(mGtk, "RUN_FIRST", INT2FIX(GTK_RUN_FIRST)); + rb_define_const(mGtk, "RUN_LAST", INT2FIX(GTK_RUN_LAST)); + rb_define_const(mGtk, "RUN_BOTH", INT2FIX(GTK_RUN_BOTH)); + rb_define_const(mGtk, "RUN_MASK", INT2FIX(GTK_RUN_MASK)); + rb_define_const(mGtk, "RUN_NO_RECURSE", INT2FIX(GTK_RUN_NO_RECURSE)); + + /* GtkWindowPosition */ + rb_define_const(mGtk, "WIN_POS_NONE", INT2FIX(GTK_WIN_POS_NONE)); + rb_define_const(mGtk, "WIN_POS_CENTER", INT2FIX(GTK_WIN_POS_CENTER)); + rb_define_const(mGtk, "WIN_POS_MOUSE", INT2FIX(GTK_WIN_POS_MOUSE)); + /* GtkSubmenuDirection */ rb_define_const(mGtk, "DIRECTION_LEFT", INT2FIX(GTK_DIRECTION_LEFT)); rb_define_const(mGtk, "DIRECTION_RIGHT", INT2FIX(GTK_DIRECTION_RIGHT)); + /* GtkSubmenuPlacement */ rb_define_const(mGtk, "TOP_BOTTOM", INT2FIX(GTK_TOP_BOTTOM)); rb_define_const(mGtk, "LEFT_RIGHT", INT2FIX(GTK_LEFT_RIGHT)); + + /* GtkMenuFactoryType */ + rb_define_const(mGtk, "MENU_FACTORY_MENU", INT2FIX(GTK_MENU_FACTORY_MENU)); + rb_define_const(mGtk, "MENU_FACTORY_MENU_BAR", INT2FIX(GTK_MENU_FACTORY_MENU_BAR)); + rb_define_const(mGtk, "MENU_FACTORY_OPTION_MENU", INT2FIX(GTK_MENU_FACTORY_OPTION_MENU)); + /* GtkMetricType */ rb_define_const(mGtk, "PIXELS", INT2FIX(GTK_PIXELS)); rb_define_const(mGtk, "INCHES", INT2FIX(GTK_INCHES)); rb_define_const(mGtk, "CENTIMETERS", INT2FIX(GTK_CENTIMETERS)); - /* GtkArrowType */ - rb_define_const(mGtk, "ARROW_UP", INT2FIX(GTK_ARROW_UP)); - rb_define_const(mGtk, "ARROW_DOWN", INT2FIX(GTK_ARROW_DOWN)); - rb_define_const(mGtk, "ARROW_LEFT", INT2FIX(GTK_ARROW_LEFT)); - rb_define_const(mGtk, "ARROW_RIGHT", INT2FIX(GTK_ARROW_RIGHT)); + /* GtkScrollType */ + rb_define_const(mGtk, "SCROLL_NONE", INT2FIX(GTK_SCROLL_NONE)); + rb_define_const(mGtk, "SCROLL_STEP_BACKWARD", INT2FIX(GTK_SCROLL_STEP_BACKWARD)); + rb_define_const(mGtk, "SCROLL_STEP_FORWARD", INT2FIX(GTK_SCROLL_STEP_FORWARD)); + rb_define_const(mGtk, "SCROLL_PAGE_BACKWARD", INT2FIX(GTK_SCROLL_PAGE_BACKWARD)); + rb_define_const(mGtk, "SCROLL_PAGE_FORWARD", INT2FIX(GTK_SCROLL_PAGE_FORWARD)); + rb_define_const(mGtk, "SCROLL_JUMP", INT2FIX(GTK_SCROLL_JUMP)); + + /* GtkTroughType */ + rb_define_const(mGtk, "TROUGH_NONE", INT2FIX(GTK_TROUGH_NONE)); + rb_define_const(mGtk, "TROUGH_START", INT2FIX(GTK_TROUGH_START)); + rb_define_const(mGtk, "TROUGH_END", INT2FIX(GTK_TROUGH_END)); + rb_define_const(mGtk, "TROUGH_JUMP", INT2FIX(GTK_TROUGH_JUMP)); + + /* GtkPositionType */ + rb_define_const(mGtk, "POS_LEFT", INT2FIX(GTK_POS_LEFT)); + rb_define_const(mGtk, "POS_RIGHT", INT2FIX(GTK_POS_RIGHT)); + rb_define_const(mGtk, "POS_TOP", INT2FIX(GTK_POS_TOP)); + rb_define_const(mGtk, "POS_BOTTOM", INT2FIX(GTK_POS_BOTTOM)); /* GtkPreviewType */ rb_define_const(mGtk, "PREVIEW_COLOR", INT2FIX(GTK_PREVIEW_COLOR)); rb_define_const(mGtk, "PREVIEW_GRAYSCALE", INT2FIX(GTK_PREVIEW_GRAYSCALE)); - rb_define_const(mGtk, "BUTTONBOX_DEFAULT", INT2FIX(GTK_BUTTONBOX_DEFAULT)); - rb_define_const(mGtk, "BUTTONBOX_SPREAD", INT2FIX(GTK_BUTTONBOX_SPREAD)); - rb_define_const(mGtk, "BUTTONBOX_EDGE", INT2FIX(GTK_BUTTONBOX_EDGE)); - rb_define_const(mGtk, "BUTTONBOX_START", INT2FIX(GTK_BUTTONBOX_START)); - rb_define_const(mGtk, "BUTTONBOX_END", INT2FIX(GTK_BUTTONBOX_END)); + /* GtkJustification */ + rb_define_const(mGtk, "JUSTIFY_LEFT", INT2FIX(GTK_JUSTIFY_LEFT)); + rb_define_const(mGtk, "JUSTIFY_RIGHT", INT2FIX(GTK_JUSTIFY_RIGHT)); + rb_define_const(mGtk, "JUSTIFY_CENTER", INT2FIX(GTK_JUSTIFY_CENTER)); + rb_define_const(mGtk, "JUSTIFY_FILL", INT2FIX(GTK_JUSTIFY_FILL)); + + /* GtkSelectionMode */ + rb_define_const(mGtk, "SELECTION_SINGLE", INT2FIX(GTK_SELECTION_SINGLE)); + rb_define_const(mGtk, "SELECTION_BROWSE", INT2FIX(GTK_SELECTION_BROWSE)); + rb_define_const(mGtk, "SELECTION_MULTIPLE", INT2FIX(GTK_SELECTION_MULTIPLE)); + rb_define_const(mGtk, "SELECTION_EXTENDED", INT2FIX(GTK_SELECTION_EXTENDED)); + + /* GtkOrientation */ + rb_define_const(mGtk, "ORIENTATION_HORIZONTAL", INT2FIX(GTK_ORIENTATION_HORIZONTAL)); + rb_define_const(mGtk, "ORIENTATION_VERTICAL", INT2FIX(GTK_ORIENTATION_VERTICAL)); /* GtkToolbarStyle */ rb_define_const(mGtk, "TOOLBAR_ICONS", INT2FIX(GTK_TOOLBAR_ICONS)); rb_define_const(mGtk, "TOOLBAR_TEXT", INT2FIX(GTK_TOOLBAR_TEXT)); rb_define_const(mGtk, "TOOLBAR_BOTH", INT2FIX(GTK_TOOLBAR_BOTH)); - /* GtkOrientation */ - rb_define_const(mGtk, "ORIENTATION_HORIZONTAL", INT2FIX(GTK_ORIENTATION_HORIZONTAL)); - rb_define_const(mGtk, "ORIENTATION_VERTICAL", INT2FIX(GTK_ORIENTATION_VERTICAL)); + /* GtkVisibility */ + rb_define_const(mGtk, "VISIBILITY_NONE", INT2FIX(GTK_VISIBILITY_NONE)); + rb_define_const(mGtk, "VISIBILITY_PARTIAL", INT2FIX(GTK_VISIBILITY_PARTIAL)); + rb_define_const(mGtk, "VISIBILITY_FULL", INT2FIX(GTK_VISIBILITY_FULL)); + + + /* GtkButtonBox */ + rb_define_const(mGtk, "BUTTONBOX_DEFAULT", INT2FIX(GTK_BUTTONBOX_DEFAULT)); + rb_define_const(mGtk, "BUTTONBOX_SPREAD", INT2FIX(GTK_BUTTONBOX_SPREAD)); + rb_define_const(mGtk, "BUTTONBOX_EDGE", INT2FIX(GTK_BUTTONBOX_EDGE)); + rb_define_const(mGtk, "BUTTONBOX_START", INT2FIX(GTK_BUTTONBOX_START)); + rb_define_const(mGtk, "BUTTONBOX_END", INT2FIX(GTK_BUTTONBOX_END)); /* GdkMiscMode */ rb_define_const(mGdk, "FUNCTION_COPY", INT2FIX(GDK_COPY)); diff --git a/ext/kconv/kconv.c b/ext/kconv/kconv.c index d9bb2b4d3d..a3349826f1 100644 --- a/ext/kconv/kconv.c +++ b/ext/kconv/kconv.c @@ -1891,10 +1891,15 @@ static VALUE kconv_guess(obj, src) VALUE obj, src; { - unsigned char *p = RSTRING(src)->ptr; - unsigned char *pend = p + RSTRING(src)->len; + unsigned char *p; + unsigned char *pend; int sequence_counter = 0; + Check_Type(src, T_STRING); + + p = RSTRING(src)->ptr; + pend = p + RSTRING(src)->len; + #define INCR do {\ p++;\ if (p==pend) return INT2FIX(_UNKNOWN);\ diff --git a/ext/socket/socket.c b/ext/socket/socket.c index f3cfafb147..9dbd51fc4f 100644 --- a/ext/socket/socket.c +++ b/ext/socket/socket.c @@ -30,7 +30,7 @@ extern int rb_thread_select(int, fd_set*, fd_set*, fd_set*, struct timeval*); /* # include <GUSI.h> #endif -#if defined(THREAD) && defined(HAVE_FCNTL) +#if defined(USE_THREAD) && defined(HAVE_FCNTL) #ifdef HAVE_SYS_SELECT_H #include <sys/select.h> #endif @@ -72,9 +72,12 @@ static void sock_finalize(fptr) OpenFile *fptr; { - SOCKET s = fileno(fptr->f); + SOCKET s; + + if (!fptr->f) return; + s = fileno(fptr->f); free(fptr->f); - free(fptr->f2); + if (fptr->f2) free(fptr->f2); closesocket(s); } #endif @@ -130,6 +133,55 @@ bsock_shutdown(argc, argv, sock) } static VALUE +bsock_close_read(sock) + VALUE sock; +{ + OpenFile *fptr; + + rb_secure(4); + GetOpenFile(sock, fptr); + if (fptr->f2 == 0) { + return rb_io_close(sock); + } + if (shutdown(fileno(fptr->f), 0) == -1) + rb_sys_fail(0); + fptr->mode &= ~FMODE_READABLE; +#ifdef NT + free(fptr->f); +#else + fclose(fptr->f); +#endif + fptr->f = fptr->f2; + fptr->f2 = 0; + + return Qnil; +} + +static VALUE +bsock_close_write(sock) + VALUE sock; +{ + OpenFile *fptr; + + rb_secure(4); + GetOpenFile(sock, fptr); + if (fptr->f2 == 0) { + return rb_io_close(sock); + } + if (shutdown(fileno(fptr->f), 1) == -1) + rb_sys_fail(0); + fptr->mode &= ~FMODE_WRITABLE; +#ifdef NT + free(fptr->f2); +#else + fclose(fptr->f2); +#endif + fptr->f2 = 0; + + return Qnil; +} + +static VALUE bsock_setsockopt(sock, lev, optname, val) VALUE sock, lev, optname, val; { @@ -235,10 +287,10 @@ bsock_send(argc, argv, sock) rb_scan_args(argc, argv, "21", &msg, &flags, &to); GetOpenFile(sock, fptr); - f = fptr->f2?fptr->f2:fptr->f; + f = GetWriteFile(fptr); fd = fileno(f); retry: -#ifdef THREAD +#ifdef USE_THREAD rb_thread_fd_writable(fd); #endif m = rb_str2cstr(msg, &mlen); @@ -257,7 +309,7 @@ bsock_send(argc, argv, sock) #if EAGAIN != EWOULDBLOCK case EAGAIN: #endif -#ifdef THREAD +#ifdef USE_THREAD rb_thread_schedule(); #endif goto retry; @@ -303,7 +355,7 @@ s_recv(sock, argc, argv, from) GetOpenFile(sock, fptr); fd = fileno(fptr->f); -#ifdef THREAD +#ifdef USE_THREAD rb_thread_wait_fd(fd); #endif TRAP_BEG; @@ -319,7 +371,7 @@ s_recv(sock, argc, argv, from) #if EAGAIN != EWOULDBLOCK case EAGAIN: #endif -#ifdef THREAD +#ifdef USE_THREAD rb_thread_schedule(); #endif goto retry; @@ -449,7 +501,7 @@ setipaddr(name, addr) } } -#if defined(THREAD) && defined(HAVE_FCNTL) +#if defined(USE_THREAD) && defined(HAVE_FCNTL) static int thread_connect(fd, sockaddr, len, type) int fd; @@ -607,7 +659,7 @@ open_inet(class, h, serv, type) syscall = "bind(2)"; } else { -#if defined(THREAD) && defined(HAVE_FCNTL) +#if defined(USE_THREAD) && defined(HAVE_FCNTL) status = thread_connect(fd, (struct sockaddr*)&sockaddr, sizeof(sockaddr), type); #else @@ -726,7 +778,7 @@ s_accept(class, fd, sockaddr, len) int fd2; retry: -#ifdef THREAD +#ifdef USE_THREAD rb_thread_wait_fd(fd); #endif TRAP_BEG; @@ -739,7 +791,7 @@ s_accept(class, fd, sockaddr, len) #if EAGAIN != EWOULDBLOCK case EAGAIN: #endif -#ifdef THREAD +#ifdef USE_THREAD rb_thread_schedule(); #endif goto retry; @@ -927,7 +979,7 @@ udp_connect(sock, host, port) #if EAGAIN != EWOULDBLOCK case EAGAIN: #endif -#ifdef THREAD +#ifdef USE_THREAD rb_thread_schedule(); #endif goto retry; @@ -974,7 +1026,7 @@ udp_send(argc, argv, sock) udp_addrsetup(host, port, &addr); GetOpenFile(sock, fptr); - f = fptr->f2?fptr->f2:fptr->f; + f = GetWriteFile(fptr); m = rb_str2cstr(mesg, &mlen); retry: n = sendto(fileno(f), m, mlen, NUM2INT(flags), @@ -986,7 +1038,7 @@ udp_send(argc, argv, sock) #if EAGAIN != EWOULDBLOCK case EAGAIN: #endif -#ifdef THREAD +#ifdef USE_THREAD rb_thread_schedule(); #endif goto retry; @@ -1239,7 +1291,7 @@ sock_connect(sock, addr) #if EAGAIN != EWOULDBLOCK case EAGAIN: #endif -#ifdef THREAD +#ifdef USE_THREAD rb_thread_schedule(); #endif goto retry; @@ -1469,6 +1521,8 @@ Init_socket() rb_cBasicSocket = rb_define_class("BasicSocket", rb_cIO); rb_undef_method(CLASS_OF(rb_cBasicSocket), "new"); rb_undef_method(CLASS_OF(rb_cBasicSocket), "open"); + rb_define_method(rb_cBasicSocket, "close_read", bsock_close_read, 0); + rb_define_method(rb_cBasicSocket, "close_write", bsock_close_write, 0); rb_define_method(rb_cBasicSocket, "shutdown", bsock_shutdown, -1); rb_define_method(rb_cBasicSocket, "setsockopt", bsock_setsockopt, 3); rb_define_method(rb_cBasicSocket, "getsockopt", bsock_getsockopt, 2); diff --git a/ext/tcltklib/extconf.rb b/ext/tcltklib/extconf.rb index 55cdc498c4..14c8e45ae5 100644 --- a/ext/tcltklib/extconf.rb +++ b/ext/tcltklib/extconf.rb @@ -11,9 +11,10 @@ $includes = [] def search_header(include, *path) pwd = Dir.getwd begin - for i in path.reverse! + for i in path.sort!.reverse! dir = Dir[i] for path in dir + next unless File.directory? path Dir.chdir path files = Dir[include] if files.size > 0 @@ -30,14 +31,14 @@ def search_header(include, *path) end search_header("tcl.h", - "/usr/include/tcl*", + "/usr/include/tcl{,8*,7*}", "/usr/include", - "/usr/local/include/tcl*", + "/usr/local/include/tcl{,8*,7*}", "/usr/local/include") search_header("tk.h", - "/usr/include/tk*", + "/usr/include/tk{,8*,4*}", "/usr/include", - "/usr/local/include/tk*", + "/usr/local/include/tk{,8*,4*}", "/usr/local/include") search_header("X11/Xlib.h", "/usr/include/X11*", diff --git a/ext/tcltklib/tcltklib.c b/ext/tcltklib/tcltklib.c index b3ff66ea3f..625fe61ccc 100644 --- a/ext/tcltklib/tcltklib.c +++ b/ext/tcltklib/tcltklib.c @@ -55,7 +55,7 @@ void _timer_for_tcl (ClientData clientData) timer->flag = 0; CHECK_INTS; -#ifdef THREAD +#ifdef USE_THREAD if (!rb_thread_critical) rb_thread_schedule(); #endif @@ -82,7 +82,7 @@ lib_mainloop(VALUE self) } DUMP1("stop Tk_Mainloop"); -#ifdef THREAD +#ifdef USE_THREAD if (timer->flag) { Tk_DeleteTimerHandler(timer->token); } |