summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1998-01-19 05:08:25 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1998-01-19 05:08:25 +0000
commit5c47ddf9e7fa05bc993818c166e8162c20a970f9 (patch)
tree2f6b7ca53886b3e41a06d1268fb65e0a7bfbe741 /ext
parentd556e58fc0f5d94961e4ecb765cb1052cd754871 (diff)
Mon Jan 19 14:06:13 JST 1998
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/v1_1r@23 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext')
-rw-r--r--ext/Setup1
-rw-r--r--ext/gtk/gtk.c22
-rw-r--r--ext/gtk/test5.rb7
-rw-r--r--ext/gtk/testd.rb96
4 files changed, 113 insertions, 13 deletions
diff --git a/ext/Setup b/ext/Setup
index c92ac53e00..867d88cfda 100644
--- a/ext/Setup
+++ b/ext/Setup
@@ -10,3 +10,4 @@
#socket
#tkutil
#tcltklib
+gtk
diff --git a/ext/gtk/gtk.c b/ext/gtk/gtk.c
index 9114312195..ec4105acbb 100644
--- a/ext/gtk/gtk.c
+++ b/ext/gtk/gtk.c
@@ -196,19 +196,20 @@ static void
gobj_free(obj)
GtkObject *obj;
{
- VALUE self = get_value_from_gobject(obj);
-
- if (GTK_OBJECT_NEED_DESTROY(obj)) {
- gtk_object_destroy(obj);
- }
- rb_ivar_set(self, id_relatives, Qnil);
+ /* just a type mark */
}
static void
-delete_gobject(obj)
- GtkObject *obj;
+delete_gobject(gtkobj, obj)
+ GtkObject *gtkobj;
+ VALUE obj;
{
- ary_delete(gtk_object_list, get_value_from_gobject(obj));
+ struct RData *data;
+
+ data = RDATA(rb_ivar_get(obj, id_gtkdata));
+ data->dfree = 0;
+ data->data = 0;
+ ary_delete(gtk_object_list, obj);
}
static VALUE
@@ -223,7 +224,8 @@ make_gobject(klass, gtkobj)
gtk_object_set_user_data(gtkobj, (gpointer)obj);
rb_ivar_set(obj, id_gtkdata, data);
- gtk_signal_connect(gtkobj, "destroy", (GtkSignalFunc)delete_gobject, 0);
+ gtk_signal_connect(gtkobj, "destroy",
+ (GtkSignalFunc)delete_gobject, (gpointer)obj);
ary_push(gtk_object_list, obj);
return obj;
}
diff --git a/ext/gtk/test5.rb b/ext/gtk/test5.rb
index 714232079b..f1d5d734cf 100644
--- a/ext/gtk/test5.rb
+++ b/ext/gtk/test5.rb
@@ -21,10 +21,11 @@ button = []
end
0.upto(8) do |i|
button[i].signal_connect("clicked") do |w|
- if button[i+1].visible?
- button[i+1].hide
+ j = (i+1)%9
+ if button[j].visible?
+ button[j].hide
else
- button[i+1].show
+ button[j].show
end
end
button[i].show
diff --git a/ext/gtk/testd.rb b/ext/gtk/testd.rb
new file mode 100644
index 0000000000..52ce5db7e0
--- /dev/null
+++ b/ext/gtk/testd.rb
@@ -0,0 +1,96 @@
+require 'gtk'
+
+def create_menu(depth)
+ return nil if depth < 1
+
+ menu = Gtk::Menu::new()
+ group = nil
+ submenu = nil
+
+ for i in 0..4
+ buf = sprintf("item %2d - %d", depth, i+1)
+# menuitem = Gtk::MenuItem::new(buf)
+ menuitem = Gtk::RadioMenuItem.new(group, buf)
+ group = menuitem.group
+ if depth % 2
+ menuitem.set_show_toggle TRUE
+ end
+ menu.append menuitem
+ menuitem.show
+ if depth > 0
+ unless submenu
+ submenu = create_menu(depth - 1)
+ end
+ menuitem.set_submenu submenu
+ end
+ end
+ return menu
+end
+
+window = Gtk::Window::new(Gtk::WINDOW_TOPLEVEL)
+window.signal_connect("destroy") do
+ exit
+end
+window.signal_connect("delete_event") do
+ exit
+end
+window.set_title("menus")
+window.border_width(0)
+
+box1 = Gtk::VBox::new(FALSE, 0)
+window.add box1
+box1.show
+
+menubar = Gtk::MenuBar::new()
+box1.pack_start menubar, FALSE, TRUE, 0
+menubar.show
+
+menu = create_menu(2)
+menuitem = Gtk::MenuItem::new("test\nline2")
+menuitem.set_submenu menu
+menubar.append menuitem
+menuitem.show
+
+menuitem = Gtk::MenuItem::new("foo")
+menuitem.set_submenu menu
+menubar.append menuitem
+menuitem.show
+
+menuitem = Gtk::MenuItem::new("bar")
+menuitem.set_submenu menu
+menubar.append menuitem
+menuitem.show
+
+box2 = Gtk::VBox::new(FALSE, 10)
+box2.border_width 10
+box1.pack_start box2, TRUE, TRUE, 0
+box2.show
+
+optionmenu = Gtk::OptionMenu::new()
+optionmenu.set_menu create_menu(1)
+optionmenu.set_history 4
+box2.pack_start optionmenu, TRUE, TRUE, 0
+optionmenu.show
+
+separator = Gtk::HSeparator::new()
+box1.pack_start(separator, FALSE, TRUE, 0)
+separator.show
+
+box2 = Gtk::HBox::new(FALSE, 10)
+box2.border_width(10)
+box1.pack_start(box2, FALSE, TRUE, 0)
+box2.show
+
+button = Gtk::Button::new("close")
+button.signal_connect("clicked") do
+ window.destroy
+ exit
+end
+box2.pack_start(button, TRUE, TRUE, 0)
+button.set_flags(Gtk::CAN_DEFAULT);
+button.grab_default
+button.show
+
+window.show
+
+Gtk::main()