summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1998-10-06 03:28:28 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1998-10-06 03:28:28 +0000
commit75ff8fdb16fa0a733512e61350c9844ea530ad35 (patch)
treea057e60543c77d6e20ea2e91928928df80b2b6d3 /ext
parent5d71c8d89c6bd7af934e7a8de5882cda2991711b (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.rb2
-rw-r--r--ext/dbm/dbm.c9
-rw-r--r--ext/etc/etc.c5
-rw-r--r--ext/etc/extconf.rb23
-rw-r--r--ext/extmk.rb.in60
-rw-r--r--ext/gtk/MANIFEST1
-rw-r--r--ext/gtk/extconf.rb12
-rw-r--r--ext/gtk/gtk.c616
-rw-r--r--ext/kconv/kconv.c9
-rw-r--r--ext/socket/socket.c86
-rw-r--r--ext/tcltklib/extconf.rb11
-rw-r--r--ext/tcltklib/tcltklib.c4
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);
}