gir_ffi-gtk 0.13.1 → 0.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +26 -1
  3. data/lib/gir_ffi-gtk/base.rb +3 -3
  4. data/lib/gir_ffi-gtk/dialog.rb +31 -0
  5. data/lib/gir_ffi-gtk/file_chooser_dialog.rb +35 -0
  6. data/lib/gir_ffi-gtk/gtk2/menu.rb +26 -0
  7. data/lib/gir_ffi-gtk/message_dialog.rb +1 -1
  8. data/lib/gir_ffi-gtk/tree_path.rb +1 -1
  9. data/lib/gir_ffi-gtk/version.rb +5 -0
  10. data/lib/gir_ffi-gtk/widget.rb +25 -0
  11. data/lib/gir_ffi-gtk2.rb +22 -18
  12. data/lib/gir_ffi-gtk3.rb +18 -15
  13. metadata +98 -69
  14. data/Rakefile +0 -8
  15. data/examples/01_empty_window.rb +0 -12
  16. data/examples/02_hello_world.rb +0 -27
  17. data/examples/03_upgraded_hello_world.rb +0 -40
  18. data/examples/04_webkit.rb +0 -18
  19. data/examples/05_notification.rb +0 -33
  20. data/examples/06_treeview.rb +0 -51
  21. data/examples/07_simple_gtk_application.rb +0 -30
  22. data/examples/08_webkit_headless.rb +0 -21
  23. data/examples/09_webkit2_headless.rb +0 -24
  24. data/examples/10_completion_provider.rb +0 -62
  25. data/lib/gir_ffi-gtk/menu.rb +0 -19
  26. data/tasks/test.rake +0 -30
  27. data/test/callback_exceptions_test.rb +0 -58
  28. data/test/gir_ffi-gtk/action_test.rb +0 -17
  29. data/test/gir_ffi-gtk/base_test.rb +0 -47
  30. data/test/gir_ffi-gtk/builder_test.rb +0 -70
  31. data/test/gir_ffi-gtk/button_test.rb +0 -19
  32. data/test/gir_ffi-gtk/container_test.rb +0 -33
  33. data/test/gir_ffi-gtk/generated_gtk_test.rb +0 -58
  34. data/test/gir_ffi-gtk/image_test.rb +0 -43
  35. data/test/gir_ffi-gtk/list_store_test.rb +0 -38
  36. data/test/gir_ffi-gtk/menu_test.rb +0 -20
  37. data/test/gir_ffi-gtk/message_dialog_test.rb +0 -15
  38. data/test/gir_ffi-gtk/radio_action_test.rb +0 -28
  39. data/test/gir_ffi-gtk/radio_button_test.rb +0 -37
  40. data/test/gir_ffi-gtk/target_entry_test.rb +0 -19
  41. data/test/gir_ffi-gtk/tree_path_test.rb +0 -17
  42. data/test/gir_ffi-gtk/tree_store_test.rb +0 -38
  43. data/test/gir_ffi-gtk/tree_view_column_test.rb +0 -51
  44. data/test/test_helper.rb +0 -36
@@ -1,18 +0,0 @@
1
- #!/usr/bin/env ruby
2
- #
3
- # Based on https://web.archive.org/web/20110228141616/http://www.idle-hacking.com/2010/02/webkit-ruby-and-gtk/
4
- #
5
-
6
- require 'gir_ffi-gtk3'
7
-
8
- GirFFI.setup :WebKit2, '4.0'
9
-
10
- Gtk.init
11
-
12
- win = Gtk::Window.new :toplevel
13
- wv = WebKit2::WebView.new
14
- win.add(wv)
15
- win.show_all
16
- wv.load_uri('http://www.google.com/')
17
- win.signal_connect('destroy') { Gtk.main_quit }
18
- Gtk.main
@@ -1,33 +0,0 @@
1
- #!/usr/bin/env ruby
2
- #
3
- # Simple notification example.
4
- require 'gir_ffi-gtk3'
5
-
6
- GirFFI.setup :Notify
7
-
8
- # Both Gtk and Notify need to be init'ed.
9
- Gtk.init
10
- Notify.init "notification test"
11
-
12
- # Basic set up of the notification.
13
- nf = Notify::Notification.new "Hello!", "Hi there.", "gtk-dialog-info"
14
- nf.timeout = 3000
15
- nf.urgency = :critical
16
-
17
- # Show a button 'Test' in the notification, with a callback function.
18
- nf.add_action("test", "Test") { |obj, action, user_data|
19
- puts "Action #{action} clicked."
20
- }
21
-
22
- # In this case, we want the program to end once the notification is gone,
23
- # but not before.
24
- nf.signal_connect("closed") {
25
- puts "Notification closed."
26
- Gtk.main_quit
27
- }
28
-
29
- # Show the notification.
30
- nf.show
31
-
32
- # Start a main loop to wait for the notification to be closed.
33
- Gtk.main
@@ -1,51 +0,0 @@
1
- #!/usr/bin/env ruby
2
- #
3
- $LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
4
- require 'gir_ffi-gtk3'
5
-
6
- Gtk.init
7
-
8
-
9
- #Add window.
10
- win = Gtk::Window.new(:toplevel)
11
- win.resize(640, 480)
12
- win.signal_connect("destroy") { Gtk.main_quit }
13
-
14
-
15
- #Add treeview.
16
- tv = Gtk::TreeView.new
17
-
18
-
19
- #Add store.
20
- ls = Gtk::ListStore.new([GObject::TYPE_STRING])
21
- tv.set_model(ls)
22
-
23
-
24
- #Add column.
25
- lab = Gtk::Label.new("Name")
26
- rend = Gtk::CellRendererText.new
27
-
28
- col = Gtk::TreeViewColumn.new
29
- col.set_widget(lab)
30
- col.pack_start(rend, true)
31
- col.add_attribute(rend, "text", 0)
32
-
33
- lab.show
34
-
35
- tv.append_column(col)
36
-
37
-
38
- #Add rows.
39
- iter = ls.append
40
- ls.set_value(iter, 0, "Kasper")
41
-
42
- iter = ls.append
43
- ls.set_value(iter, 0, "Christina")
44
-
45
-
46
- win.add tv
47
- tv.show
48
-
49
- win.show
50
-
51
- Gtk.main
@@ -1,30 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'gir_ffi-gtk3'
4
-
5
- myapp = Gtk::Application.new('org.gtk.example', :handles_command_line)
6
-
7
- myapp.signal_connect 'command-line' do |app, _command_line|
8
- app.activate
9
- 0
10
- end
11
-
12
- myapp.signal_connect 'activate' do |app|
13
- win = Gtk::ApplicationWindow.new(app)
14
- win.set_title('Gtk Application example')
15
- win.set_default_size(200, 200)
16
-
17
- button_box = Gtk::ButtonBox.new(:horizontal)
18
- win.add(button_box)
19
-
20
- button = Gtk::Button.new_with_label('Hello world')
21
- button.signal_connect 'clicked' do
22
- puts 'Hello World'
23
- app.quit
24
- end
25
-
26
- button_box.add(button)
27
- win.show_all
28
- end
29
-
30
- exit(myapp.run([$PROGRAM_NAME] + ARGV))
@@ -1,21 +0,0 @@
1
- require 'gir_ffi-gtk3'
2
-
3
- GirFFI.setup :WebKit, '3.0'
4
-
5
- Gtk.init
6
-
7
- win = Gtk::OffscreenWindow.new
8
- web_view = WebKit::WebView.new
9
- win.add(web_view)
10
-
11
- web_view.signal_connect "load-finished" do
12
- pixbuf = win.get_pixbuf
13
- pixbuf.savev("google.png", "png", nil, nil)
14
- puts web_view.get_title
15
- Gtk.main_quit
16
- end
17
-
18
- web_view.load_uri('http://www.google.com/')
19
- win.show_all
20
-
21
- Gtk.main
@@ -1,24 +0,0 @@
1
- require 'gir_ffi-gtk3'
2
-
3
- GirFFI.setup :WebKit2, '4.0'
4
-
5
- Gtk.init
6
-
7
- win = Gtk::OffscreenWindow.new
8
- web_view = WebKit2::WebView.new
9
- win.add(web_view)
10
-
11
- web_view.signal_connect "load-changed" do |_, event, _|
12
- case event
13
- when :finished
14
- pixbuf = win.get_pixbuf
15
- pixbuf.savev("google.png", "png", nil, nil)
16
- puts web_view.get_title
17
- Gtk.main_quit
18
- end
19
- end
20
-
21
- web_view.load_uri('http://www.google.com/')
22
- win.show_all
23
-
24
- Gtk.main
@@ -1,62 +0,0 @@
1
- require 'gir_ffi-gtk3'
2
-
3
- # This is an example of creating a derived class with vfunc implementations.
4
-
5
- GirFFI.setup :GtkSource
6
-
7
- Gtk.init
8
-
9
- class TestProvider < GObject::Object
10
- include GtkSource::CompletionProvider
11
-
12
- def get_name
13
- 'Test Provider'
14
- end
15
-
16
- def get_priority
17
- 1
18
- end
19
-
20
- def match(_context)
21
- true
22
- end
23
-
24
- def populate(context)
25
- icon = Gtk::IconTheme.get_default.load_icon(Gtk::STOCK_DIALOG_INFO, 16, 0)
26
-
27
- proposals = [
28
- GtkSource::CompletionItem.new("Proposal 1", "Proposal 1", icon, "blah 1"),
29
- GtkSource::CompletionItem.new("Proposal 2", "Proposal 2", icon, "blah 2"),
30
- GtkSource::CompletionItem.new("Proposal 3", "Proposal 3", icon, "blah 3"),
31
- ]
32
- context.add_proposals(self, proposals, true)
33
- end
34
- end
35
-
36
- GirFFI.define_type TestProvider do |info|
37
- info.install_vfunc_implementation :get_name
38
- info.install_vfunc_implementation :get_priority
39
- info.install_vfunc_implementation :match
40
- info.install_vfunc_implementation :populate
41
- end
42
-
43
- win = Gtk::Window.new :toplevel
44
- win.show
45
- GObject.signal_connect(win, "destroy") { Gtk.main_quit }
46
-
47
- vbox = Gtk::VBox.new(false, 0)
48
- win.add vbox
49
-
50
- lm = GtkSource::LanguageManager.get_default
51
- lang = lm.get_language "ruby"
52
- buffer = GtkSource::Buffer.new_with_language lang
53
- @source = GtkSource::View.new_with_buffer buffer
54
-
55
- test_provider = TestProvider.new
56
- completion = @source.get_completion
57
- completion.add_provider test_provider
58
-
59
- vbox.pack_start @source, true, true, 0
60
-
61
- win.show_all
62
- Gtk.main
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- Gtk.load_class :Menu
4
- module Gtk
5
- # Overrides for GtkMenu
6
- class Menu
7
- unless method_defined? :popup
8
- # Smells of :reek:LongParameterList: due to the defined GtkMenu interface.
9
- # rubocop:disable Metrics/ParameterLists
10
- def popup(parent_menu_shell, parent_menu_item, func, data, button, activate_time)
11
- popup_for_device(nil,
12
- parent_menu_shell, parent_menu_item, func, data,
13
- nil,
14
- button, activate_time)
15
- end
16
- # rubocop:enable Metrics/ParameterLists
17
- end
18
- end
19
- end
data/tasks/test.rake DELETED
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rake/testtask'
4
-
5
- namespace :test do
6
- Rake::TestTask.new(:gtk3) do |t|
7
- t.libs = ['lib']
8
- t.test_files = FileList['test/**/*_test.rb']
9
- t.ruby_opts += ['-w', '-Itest']
10
- end
11
-
12
- Rake::TestTask.new(:gtk2) do |t|
13
- t.libs = ['lib']
14
- t.test_files = FileList['test/**/*_test.rb']
15
- t.ruby_opts += ['-w', '-Itest']
16
- end
17
-
18
- task gtk2: :set_gtk_version_2
19
-
20
- task :set_gtk_version_2 do
21
- ENV['GTK_VERSION'] = '2'
22
- end
23
-
24
- task :sleep do
25
- sleep 1
26
- end
27
- end
28
-
29
- desc 'Run unit tests'
30
- task test: ['test:gtk3', 'test:sleep', 'test:gtk2']
@@ -1,58 +0,0 @@
1
- require 'test_helper'
2
-
3
- class CallbackTestException < RuntimeError; end
4
-
5
- describe 'An exception in a callback' do
6
- describe 'for signals' do
7
- let(:object) { Gtk::Window.new :toplevel }
8
-
9
- before do
10
- object.signal_connect 'destroy' do
11
- raise CallbackTestException, 'Boom'
12
- end
13
- end
14
-
15
- describe 'when the signal is emitted synchronously' do
16
- it 'raises an error' do
17
- -> { GObject.signal_emit object, 'destroy' }.must_raise CallbackTestException
18
- end
19
- end
20
-
21
- describe 'when the signal is emitted during an event loop' do
22
- it 'causes loop run to be terminated with an exception' do
23
- GLib.timeout_add GLib::PRIORITY_DEFAULT, 1 do
24
- GObject.signal_emit object, 'destroy'
25
- false
26
- end
27
- # Guard against runaway loop
28
- @guard = GLib.timeout_add(GLib::PRIORITY_DEFAULT, 1000) { Gtk.main_quit }
29
- proc do
30
- Gtk.main
31
- end.must_raise CallbackTestException
32
- end
33
-
34
- after do
35
- GLib.source_remove @guard
36
- end
37
- end
38
- end
39
-
40
- describe 'for other callbacks' do
41
- describe 'when the callback occurs during an event loop' do
42
- it 'causes loop run to be terminated with an exception' do
43
- GLib.timeout_add GLib::PRIORITY_DEFAULT, 1 do
44
- raise CallbackTestException, 'Boom'
45
- end
46
- # Guard against runaway loop
47
- @guard = GLib.timeout_add(GLib::PRIORITY_DEFAULT, 1000) { Gtk.main_quit }
48
- proc do
49
- Gtk.main
50
- end.must_raise CallbackTestException
51
- end
52
-
53
- after do
54
- GLib.source_remove @guard
55
- end
56
- end
57
- end
58
- end
@@ -1,17 +0,0 @@
1
- require 'test_helper'
2
-
3
- describe Gtk::Action do
4
- let(:action) { Gtk::Action.new('hi', 'Hello', 'hey there', Gtk::STOCK_FILE) }
5
-
6
- describe '#create_icon' do
7
- it 'works when called with a symbol' do
8
- result = action.create_icon :dialog
9
- result.must_be_instance_of Gtk::Image
10
- end
11
-
12
- it 'works when called with an integer' do
13
- result = action.create_icon 4
14
- result.must_be_instance_of Gtk::Image
15
- end
16
- end
17
- end
@@ -1,47 +0,0 @@
1
- require 'test_helper'
2
-
3
- describe Gtk do
4
- describe '::init' do
5
- before do
6
- module DummyGtk
7
- def self.init(_arr)
8
- %w(baz qux zonk)
9
- end
10
-
11
- include GirFFIGtk::AutoArgv
12
- end
13
- end
14
-
15
- it 'does not take any arguments' do
16
- assert_raises(ArgumentError) { DummyGtk.init 1, ['foo'] }
17
- assert_raises(ArgumentError) { DummyGtk.init ['foo'] }
18
- assert_nothing_raised { DummyGtk.init }
19
- end
20
-
21
- it 'replaces ARGV with the tail of the result of the original init function' do
22
- ARGV.replace %w(foo bar)
23
- DummyGtk.init
24
- assert_equal %w(qux zonk), ARGV.to_a
25
- end
26
- end
27
-
28
- describe '::main' do
29
- it 'allows other threads to run' do
30
- a = []
31
- GLib.timeout_add(GLib::PRIORITY_DEFAULT, 150) { Gtk.main_quit }
32
-
33
- slow_thread = Thread.new do
34
- sleep 0.005
35
- a << 'During run'
36
- end
37
-
38
- a << 'Before run'
39
- Gtk.main
40
- a << 'After run'
41
-
42
- slow_thread.join
43
-
44
- a.last.must_equal 'After run'
45
- end
46
- end
47
- end
@@ -1,70 +0,0 @@
1
- require 'test_helper'
2
-
3
- describe Gtk::Builder do
4
- let(:builder) { Gtk::Builder.new }
5
- let(:spec) do
6
- <<-XML
7
- <interface>
8
- <object class="GtkButton" id="foo">
9
- <signal handler="on_button_clicked" name="clicked"/>
10
- </object>
11
- </interface>
12
- XML
13
- end
14
-
15
- describe '#add_from_string' do
16
- it 'takes one string as argument' do
17
- builder.add_from_string spec
18
- pass
19
- end
20
- end
21
-
22
- describe '#connect_signals' do
23
- before do
24
- builder.add_from_string spec
25
- end
26
-
27
- it 'passes the handler name to the block' do
28
- name = nil
29
- builder.connect_signals do |handler_name|
30
- name = handler_name
31
- nil
32
- end
33
-
34
- name.must_equal 'on_button_clicked'
35
- end
36
-
37
- it 'connects the signal to the proc returned by the block' do
38
- name = nil
39
- builder.connect_signals do |handler_name|
40
- proc { name = handler_name }
41
- end
42
- button = builder.get_object('foo')
43
- GObject.signal_emit button, 'clicked'
44
- name.must_equal 'on_button_clicked'
45
- end
46
-
47
- describe 'with a signal with after flag' do
48
- let(:spec) do
49
- <<-XML
50
- <interface>
51
- <object class="GtkButton" id="foo">
52
- <signal handler="handler_after" name="clicked" after="true"/>
53
- <signal handler="handler_before" name="clicked"/>
54
- </object>
55
- </interface>
56
- XML
57
- end
58
-
59
- it 'connects the handlers in the right order' do
60
- name = nil
61
- builder.connect_signals do |handler_name|
62
- proc { name = handler_name }
63
- end
64
- button = builder.get_object('foo')
65
- GObject.signal_emit button, 'clicked'
66
- name.must_equal 'handler_after'
67
- end
68
- end
69
- end
70
- end
@@ -1,19 +0,0 @@
1
- require 'test_helper'
2
-
3
- describe Gtk::Button do
4
- describe '.new_from_icon_name' do
5
- before do
6
- skip if Gtk::MAJOR_VERSION == 2 || Gtk::MAJOR_VERSION == 3 && Gtk::MINOR_VERSION < 10
7
- end
8
-
9
- it 'works when called with a symbol' do
10
- result = Gtk::Button.new_from_icon_name('hi', :dialog)
11
- result.must_be_instance_of Gtk::Button
12
- end
13
-
14
- it 'works when called with an integer' do
15
- result = Gtk::Button.new_from_icon_name('hi', 4)
16
- result.must_be_instance_of Gtk::Button
17
- end
18
- end
19
- end
@@ -1,33 +0,0 @@
1
- require 'test_helper'
2
-
3
- describe Gtk::Container do
4
- let(:container) { Gtk::Table.new 1, 1, true }
5
- let(:widget) { Gtk::Label.new 'foo' }
6
-
7
- describe '#add_with_properties' do
8
- before do
9
- container.add_with_properties widget, 'left-attach': 1
10
- end
11
-
12
- it 'adds the widget to the container' do
13
- container.get_children.to_a.must_equal [widget]
14
- end
15
-
16
- it 'sets the child properties for the widget' do
17
- container.child_get_property(widget, 'left-attach').must_equal 1
18
- end
19
- end
20
-
21
- describe '#child_get_property' do
22
- it 'fetches the given child property' do
23
- container.add widget
24
- container.child_set_property(widget, 'left-attach', 1)
25
- container.child_get_property(widget, 'left-attach').must_equal 1
26
- end
27
-
28
- it 'raises an ArgumentError for unknown properties' do
29
- container.add widget
30
- proc { container.child_get_property(widget, 'foobar') }.must_raise ArgumentError
31
- end
32
- end
33
- end
@@ -1,58 +0,0 @@
1
- require 'test_helper'
2
-
3
- # Tests generated methods and functions in the Gtk namespace.
4
- describe 'In the generated Gtk module' do
5
- describe 'a Gtk::Builder instance' do
6
- before do
7
- @builder = Gtk::Builder.new
8
- @spec = '
9
- <interface>
10
- <object class="GtkButton" id="foo">
11
- <signal handler="on_button_clicked" name="clicked"/>
12
- </object>
13
- </interface>
14
- '
15
- end
16
-
17
- it 'loads the interface spec' do
18
- assert_nothing_raised { @builder.add_from_string @spec }
19
- end
20
-
21
- describe 'its #get_object method' do
22
- it 'returns objects of the proper class' do
23
- @builder.add_from_string @spec
24
- o = @builder.get_object 'foo'
25
- assert_instance_of Gtk::Button, o
26
- end
27
- end
28
-
29
- describe 'its #connect_signals_full method' do
30
- before do
31
- @builder.add_from_string @spec
32
- end
33
- it 'passes arguments correctly' do
34
- aa = nil
35
- @builder.connect_signals_full { |*args| aa = args }
36
- b, o, sn, hn, co, f, ud = aa
37
- assert_instance_of Gtk::Builder, b
38
- assert_equal b.to_ptr, @builder.to_ptr
39
- assert_instance_of Gtk::Button, o
40
- assert_equal 'clicked', sn
41
- assert_equal 'on_button_clicked', hn
42
- co.must_be_nil
43
- assert_equal 0, f
44
- ud.wont_be_nil
45
- end
46
- end
47
- end
48
-
49
- describe 'a Gtk::Window instance' do
50
- before do
51
- @w = Gtk::Window.new :toplevel
52
- end
53
-
54
- it 'starts with a refcount of 2 (one for us, one for GTK+)' do
55
- assert_equal 2, ref_count(@w)
56
- end
57
- end
58
- end
@@ -1,43 +0,0 @@
1
- require 'test_helper'
2
-
3
- describe Gtk::Image do
4
- describe '.new_from_icon_name' do
5
- it 'works when called with a symbol' do
6
- result = Gtk::Image.new_from_icon_name('hi', :dialog)
7
- result.must_be_instance_of Gtk::Image
8
- end
9
-
10
- it 'works when called with an integer' do
11
- result = Gtk::Image.new_from_icon_name('hi', 4)
12
- result.must_be_instance_of Gtk::Image
13
- end
14
- end
15
-
16
- describe '.new_from_gicon' do
17
- let(:gicon) { Gio::ThemedIcon.new('hi') }
18
- it 'works when called with a symbol' do
19
- result = Gtk::Image.new_from_gicon(gicon, :dialog)
20
- result.must_be_instance_of Gtk::Image
21
- end
22
-
23
- it 'works when called with an integer' do
24
- result = Gtk::Image.new_from_gicon(gicon, 4)
25
- result.must_be_instance_of Gtk::Image
26
- end
27
- end
28
-
29
- describe '#set_from_gicon' do
30
- let(:gicon) { Gio::ThemedIcon.new('gnome') }
31
- let(:image) { Gtk::Image.new }
32
-
33
- it 'works when called with a symbol' do
34
- image.set_from_gicon(gicon, :dialog)
35
- image.get_gicon.must_equal [gicon, 6]
36
- end
37
-
38
- it 'works when called with an integer' do
39
- image.set_from_gicon(gicon, 4)
40
- image.get_gicon.must_equal [gicon, 4]
41
- end
42
- end
43
- end
@@ -1,38 +0,0 @@
1
- require 'test_helper'
2
-
3
- describe Gtk::ListStore do
4
- describe '.new' do
5
- it 'takes an array of column types' do
6
- store = Gtk::ListStore.new([GObject::TYPE_STRING, GObject::TYPE_INT])
7
- store.must_be_instance_of Gtk::ListStore
8
- end
9
- end
10
-
11
- describe '#insert_with_values' do
12
- it 'inserts a row with the given values' do
13
- store = Gtk::ListStore.new([GObject::TYPE_STRING, GObject::TYPE_INT])
14
- row = store.insert_with_values(0, [0, 1], ['foo', 42])
15
- store.get_value(row, 0).must_equal 'foo'
16
- store.get_value(row, 1).must_equal 42
17
- end
18
- end
19
-
20
- describe '#set' do
21
- it 'updates a row with the given values' do
22
- store = Gtk::ListStore.new([GObject::TYPE_STRING, GObject::TYPE_INT])
23
- row = store.insert_with_values(0, [0, 1], ['foo', 42])
24
- store.set(row, [1, 0], [3, 'bar'])
25
- store.get_value(row, 0).must_equal 'bar'
26
- store.get_value(row, 1).must_equal 3
27
- end
28
- end
29
-
30
- describe '#set_value' do
31
- it 'allows setting a value to nil' do
32
- store = Gtk::ListStore.new([GObject::TYPE_STRING, GObject::TYPE_INT])
33
- row = store.insert_with_values(0, [0, 1], ['foo', 42])
34
- store.set_value(row, 0, nil)
35
- store.get_value(row, 0).must_be_nil
36
- end
37
- end
38
- end