summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/gtk/gtk.c25
-rw-r--r--hash.c3
-rw-r--r--sample/test.rb1
-rw-r--r--string.c3
4 files changed, 21 insertions, 11 deletions
diff --git a/ext/gtk/gtk.c b/ext/gtk/gtk.c
index 6c68cca20c..9c922aac5a 100644
--- a/ext/gtk/gtk.c
+++ b/ext/gtk/gtk.c
@@ -347,11 +347,11 @@ get_gtkprevinfo(value)
}
static void
-exec_callback(widget, data, nparams, params)
+signal_callback(widget, data, nparams, params)
GtkWidget *widget;
VALUE data;
int nparams;
- GtkType *params;
+ GtkArg *params;
{
VALUE self = get_value_from_gobject(GTK_OBJECT(widget));
VALUE proc = RARRAY(data)->ptr[0];
@@ -368,6 +368,14 @@ exec_callback(widget, data, nparams, params)
}
static void
+exec_callback(widget, proc)
+ GtkWidget *widget;
+ VALUE proc;
+{
+ rb_funcall(proc, id_call, 1, get_value_from_gobject(GTK_OBJECT(widget)));
+}
+
+static void
free_ttips(tips)
GtkTooltips *tips;
{
@@ -861,13 +869,12 @@ gobj_smethod_added(self, id)
GtkObject *obj = get_gobject(self);
char *name = rb_id2name(NUM2INT(id));
-
if (gtk_signal_lookup(name, GTK_OBJECT_TYPE(obj))) {
VALUE handler = assoc_new(Qnil, id);
add_relative(self, handler);
gtk_signal_connect_interp(obj, name,
- exec_callback, (gpointer)handler,
+ signal_callback, (gpointer)handler,
NULL, 0);
}
return Qnil;
@@ -922,7 +929,7 @@ gobj_sig_connect(argc, argv, self)
handler = assoc_new(handler, INT2NUM(id));
add_relative(self, handler);
n = gtk_signal_connect_interp(GTK_OBJECT(widget), RSTRING(sig)->ptr,
- exec_callback, (gpointer)handler,
+ signal_callback, (gpointer)handler,
NULL, 0);
return INT2FIX(n);
@@ -947,7 +954,7 @@ gobj_sig_connect_after(argc, argv, self)
}
add_relative(self, handler);
n = gtk_signal_connect_interp(GTK_OBJECT(widget), RSTRING(sig)->ptr,
- exec_callback, (gpointer)handler,
+ signal_callback, (gpointer)handler,
NULL, 1);
return INT2FIX(n);
@@ -3715,7 +3722,7 @@ tbar_append_item(self, text, ttext, icon, func)
STR2CSTR(ttext),
get_widget(icon),
exec_callback,
- (gpointer)ary_new3(1, func));
+ (gpointer)func);
return self;
}
@@ -3733,7 +3740,7 @@ tbar_prepend_item(self, text, ttext, icon, func)
STR2CSTR(ttext),
get_widget(icon),
exec_callback,
- (gpointer)ary_new3(1, func));
+ (gpointer)func);
return self;
}
@@ -3751,7 +3758,7 @@ tbar_insert_item(self, text, ttext, icon, func, pos)
STR2CSTR(ttext),
get_widget(icon),
exec_callback,
- (gpointer)ary_new3(1, func),
+ (gpointer)func,
NUM2INT(pos));
return self;
}
diff --git a/hash.c b/hash.c
index 920885709e..b355d0661e 100644
--- a/hash.c
+++ b/hash.c
@@ -14,6 +14,9 @@
#include "st.h"
#include "sig.h"
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
#include <sys/stat.h>
#ifndef HAVE_STRING_H
diff --git a/sample/test.rb b/sample/test.rb
index ce0822685a..52e936af71 100644
--- a/sample/test.rb
+++ b/sample/test.rb
@@ -453,7 +453,6 @@ ok($x+1 == 815915283247897734345611269596115894272000000001)
ok($x/fact(20) == 335367096786357081410764800000)
$x = -$x
ok($x == -815915283247897734345611269596115894272000000000)
-p [2**32, 2-(2**32), -(2**32-2)]
ok(2-(2**32) == -(2**32-2))
ok(2**32 - 5 == (2**32-3)-2)
diff --git a/string.c b/string.c
index 220f6f1bfb..0af0be0d09 100644
--- a/string.c
+++ b/string.c
@@ -105,7 +105,8 @@ str_assign(str, str2)
VALUE str, str2;
{
if (NIL_P(str2) || str == str2) return;
- free(RSTRING(str)->ptr);
+ if (!RSTRING(str)->orig && RSTRING(str)->ptr)
+ free(RSTRING(str)->ptr);
RSTRING(str)->ptr = RSTRING(str2)->ptr;
RSTRING(str)->len = RSTRING(str2)->len;
RSTRING(str)->orig = RSTRING(str2)->orig;