gtk3 3.0.7-x86-mingw32 → 3.0.8-x86-mingw32
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.
- checksums.yaml +4 -4
- data/ext/gtk3/extconf.rb +1 -0
- data/ext/gtk3/rb-gtk3-tree-view.c +4 -0
- data/ext/gtk3/rb-gtk3.c +245 -60
- data/lib/2.2/gtk3.so +0 -0
- data/lib/2.3/gtk3.so +0 -0
- data/lib/gtk3/box.rb +22 -0
- data/lib/gtk3/builder.rb +50 -29
- data/lib/gtk3/deprecated.rb +7 -0
- data/lib/gtk3/entry-buffer.rb +28 -0
- data/lib/gtk3/list-store.rb +2 -20
- data/lib/gtk3/loader.rb +6 -0
- data/lib/gtk3/menu-item.rb +8 -7
- data/lib/gtk3/tree-iter.rb +25 -1
- data/lib/gtk3/tree-model.rb +41 -0
- data/lib/gtk3/tree-store.rb +7 -6
- data/lib/gtk3/widget.rb +18 -1
- data/sample/gtk-demo/TODO +45 -39
- data/sample/gtk-demo/assistant.rb +123 -0
- data/sample/gtk-demo/builder.rb +75 -38
- data/sample/gtk-demo/button_box.rb +100 -0
- data/sample/gtk-demo/colorsel.rb +49 -65
- data/sample/gtk-demo/css_accordion.rb +33 -55
- data/sample/gtk-demo/css_basics.rb +55 -80
- data/sample/gtk-demo/css_multiplebgs.rb +112 -0
- data/sample/gtk-demo/css_pixbufs.rb +84 -0
- data/sample/gtk-demo/css_shadows.rb +101 -0
- data/sample/gtk-demo/cursors.rb +114 -0
- data/sample/gtk-demo/dialog.rb +105 -115
- data/sample/gtk-demo/entry_buffer.rb +44 -0
- data/sample/gtk-demo/entry_completion.rb +40 -52
- data/sample/gtk-demo/expander.rb +60 -26
- data/sample/gtk-demo/filtermodel.rb +119 -0
- data/sample/gtk-demo/font_features.rb +117 -0
- data/sample/gtk-demo/headerbar.rb +57 -0
- data/sample/gtk-demo/iconview_edit.rb +79 -0
- data/sample/gtk-demo/infobar.rb +75 -59
- data/sample/gtk-demo/links.rb +53 -40
- data/sample/gtk-demo/main.rb +353 -43
- data/sample/gtk-demo/main.ui +9 -9
- data/sample/gtk-demo/markup.rb +46 -0
- data/sample/gtk-demo/menus.rb +111 -162
- data/sample/gtk-demo/modelbutton.rb +47 -0
- data/sample/gtk-demo/overlay.rb +61 -0
- data/sample/gtk-demo/overlay2.rb +75 -0
- data/sample/gtk-demo/panes.rb +114 -133
- data/sample/gtk-demo/pickers.rb +70 -0
- data/sample/gtk-demo/popover.rb +110 -0
- data/sample/gtk-demo/printing.rb +68 -83
- data/sample/gtk-demo/revealer.rb +53 -0
- data/sample/gtk-demo/scale.rb +26 -0
- data/sample/gtk-demo/search_entry2.rb +107 -0
- data/sample/gtk-demo/sidebar.rb +68 -0
- data/sample/gtk-demo/sizegroup.rb +93 -105
- data/sample/gtk-demo/spinner.rb +53 -50
- data/sample/gtk-demo/stack.rb +28 -0
- data/sample/gtk-demo/test_mod.rb +22 -0
- data/sample/gtk-demo/textmask.rb +61 -0
- data/sample/gtk-demo/theming_style_classes.rb +16 -12
- data/sample/misc/app-menu.ui +19 -0
- data/sample/misc/button-menu.ui +19 -0
- data/sample/misc/icons-theme-viewer.rb +65 -0
- data/sample/misc/menu.rb +3 -3
- data/sample/misc/menus_from_resources.gresource.xml +8 -0
- data/sample/misc/menus_from_resources.rb +91 -0
- data/sample/misc/statusicon.rb +1 -1
- data/sample/misc/toolbar-menu.ui +23 -0
- data/sample/misc/treestore.rb +63 -0
- data/sample/tutorial/README.md +368 -6
- data/test/test-gtk-box.rb +13 -0
- data/test/test-gtk-builder.rb +1 -1
- data/test/test-gtk-clipboard.rb +124 -0
- data/test/test-gtk-container.rb +3 -3
- data/test/test-gtk-entry-buffer.rb +32 -0
- data/test/test-gtk-list-store.rb +30 -12
- data/test/test-gtk-menu.rb +32 -0
- data/test/test-gtk-tree-iter.rb +61 -5
- data/test/test-gtk-tree-path.rb +26 -1
- data/test/test-gtk-tree-sortable.rb +35 -0
- data/test/test-gtk-tree-store.rb +34 -0
- data/test/test-gtk-widget.rb +33 -2
- metadata +57 -22
- data/lib/2.0/gtk3.so +0 -0
- data/lib/2.1/gtk3.so +0 -0
- data/sample/gtk-demo/button-box.rb +0 -82
data/sample/gtk-demo/printing.rb
CHANGED
@@ -1,80 +1,41 @@
|
|
1
|
-
# Copyright (c)
|
1
|
+
# Copyright (c) 2016 Ruby-GNOME2 Project Team
|
2
2
|
# This program is licenced under the same licence as Ruby-GNOME2.
|
3
|
+
#
|
3
4
|
=begin
|
4
|
-
=
|
5
|
+
= Printing/Printing
|
5
6
|
|
6
|
-
|
7
|
-
in a cross-platform way.
|
8
|
-
=end
|
9
|
-
|
10
|
-
require 'common'
|
11
|
-
|
12
|
-
module Demo
|
13
|
-
class Printing < BasicWindow
|
14
|
-
Data = Struct.new(:font_size, :lines_per_page, :lines, :n_pages)
|
15
|
-
HEADER_HEIGHT = 10 * 72 / 25.4
|
16
|
-
HEADER_GAP = 3 * 72 / 25.4
|
17
|
-
|
18
|
-
def initialize
|
19
|
-
super('Printing')
|
20
|
-
|
21
|
-
button = Gtk::Button.new("Print...")
|
22
|
-
button.signal_connect("clicked") do
|
23
|
-
begin
|
24
|
-
run_print_operation
|
25
|
-
rescue
|
26
|
-
dialog = Gtk::MessageDialog.new(self, :destroy_with_parent, :error,
|
27
|
-
:close, $!.message)
|
28
|
-
dialog.signal_connect("response") do
|
29
|
-
dialog.destroy
|
30
|
-
true
|
31
|
-
end
|
32
|
-
dialog.show
|
33
|
-
end
|
34
|
-
true
|
35
|
-
end
|
36
|
-
add(button)
|
37
|
-
end
|
38
|
-
|
39
|
-
private
|
40
|
-
def run_print_operation
|
41
|
-
operation = Gtk::PrintOperation.new
|
7
|
+
GtkPrintOperation offers a simple API to support printing
|
8
|
+
in a cross-platform way.
|
42
9
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
end
|
48
|
-
operation.signal_connect("draw-page") do |_operation, context, page_number|
|
49
|
-
on_draw_page(_operation, context, page_number, data)
|
50
|
-
end
|
51
|
-
operation.signal_connect("end-print") do |_operation, context|
|
52
|
-
on_end_print(_operation, context, data)
|
53
|
-
end
|
10
|
+
=end
|
11
|
+
module PrintingDemo
|
12
|
+
HEADER_HEIGHT = 10 * 72 / 25.4
|
13
|
+
HEADER_GAP = 3 * 72 / 25.4
|
54
14
|
|
55
|
-
|
56
|
-
|
15
|
+
def self.run_demo(main_window)
|
16
|
+
print_operation = Gtk::PrintOperation.new
|
57
17
|
|
58
|
-
|
59
|
-
|
18
|
+
resource_name = File.expand_path(__FILE__)
|
19
|
+
font_size = 12.0
|
20
|
+
num_pages = 0
|
21
|
+
lines_per_page = 0
|
22
|
+
lines = []
|
60
23
|
|
61
|
-
|
24
|
+
print_operation.signal_connect "begin-print" do |operation, context|
|
62
25
|
height = context.height - HEADER_HEIGHT - HEADER_GAP
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
26
|
+
lines_per_page = (height / font_size).floor
|
27
|
+
File.open(resource_name, "r") do |file|
|
28
|
+
file.each_line do |line|
|
29
|
+
lines << line
|
30
|
+
end
|
31
|
+
end
|
32
|
+
num_pages = lines.size / (lines_per_page + 1)
|
33
|
+
operation.n_pages = num_pages
|
67
34
|
end
|
68
35
|
|
69
|
-
|
36
|
+
print_operation.signal_connect "draw-page" do |_operation, context, page_nr|
|
70
37
|
cr = context.cairo_context
|
71
|
-
draw_header(cr, operation, context, page_number, data)
|
72
|
-
draw_body(cr, operation, context, page_number, data)
|
73
|
-
end
|
74
|
-
|
75
|
-
def draw_header(cr, operation, context, page_number, data)
|
76
38
|
width = context.width
|
77
|
-
|
78
39
|
cr.rectangle(0, 0, width, HEADER_HEIGHT)
|
79
40
|
cr.set_source_rgb(0.8, 0.8, 0.8)
|
80
41
|
cr.fill_preserve
|
@@ -84,45 +45,69 @@ module Demo
|
|
84
45
|
cr.stroke
|
85
46
|
|
86
47
|
layout = context.create_pango_layout
|
87
|
-
|
48
|
+
desc = Pango::FontDescription.new("sans 14")
|
49
|
+
layout.font_description = desc
|
88
50
|
|
89
|
-
layout.text =
|
51
|
+
layout.text = resource_name
|
90
52
|
text_width, text_height = layout.pixel_size
|
91
53
|
|
92
|
-
if
|
54
|
+
if text_width > width
|
93
55
|
layout.width = width
|
94
56
|
layout.ellipsize = :start
|
95
57
|
text_width, text_height = layout.pixel_size
|
96
58
|
end
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
cr.move_to((width - text_width) / 2, y)
|
59
|
+
cr.move_to((width - text_width) / 2,
|
60
|
+
(HEADER_HEIGHT - text_height) / 2)
|
101
61
|
cr.show_pango_layout(layout)
|
102
62
|
|
103
|
-
layout.text = "#{
|
63
|
+
layout.text = "#{page_nr + 1}/#{num_pages}"
|
104
64
|
layout.width = -1
|
105
65
|
text_width, text_height = layout.pixel_size
|
106
|
-
|
66
|
+
|
67
|
+
cr.move_to(width - text_width - 4,
|
68
|
+
(HEADER_HEIGHT - text_height) / 2)
|
107
69
|
cr.show_pango_layout(layout)
|
108
|
-
end
|
109
70
|
|
110
|
-
def draw_body(cr, operation, context, page_number, data)
|
111
71
|
layout = context.create_pango_layout
|
112
|
-
|
113
|
-
|
114
|
-
layout.font_description =
|
72
|
+
desc = Pango::FontDescription.new("monospace")
|
73
|
+
desc.size = font_size * Pango::SCALE
|
74
|
+
layout.font_description = desc
|
115
75
|
|
116
76
|
cr.move_to(0, HEADER_HEIGHT + HEADER_GAP)
|
117
|
-
start_line =
|
118
|
-
|
77
|
+
start_line = page_nr * lines_per_page
|
78
|
+
|
79
|
+
lines[start_line, lines_per_page].each do |line|
|
119
80
|
layout.text = line
|
120
81
|
cr.show_pango_layout(layout)
|
121
|
-
cr.rel_move_to(0,
|
82
|
+
cr.rel_move_to(0, font_size)
|
122
83
|
end
|
123
84
|
end
|
124
85
|
|
125
|
-
|
86
|
+
print_operation.signal_connect "end-print" do
|
87
|
+
puts "End of print"
|
88
|
+
end
|
89
|
+
|
90
|
+
print_operation.use_full_page = false
|
91
|
+
print_operation.unit = :points
|
92
|
+
print_operation.embed_page_setup = true
|
93
|
+
|
94
|
+
settings = Gtk::PrintSettings.new
|
95
|
+
settings.set(:ouput_basename, "gtk-demo")
|
96
|
+
|
97
|
+
print_operation.print_settings = settings
|
98
|
+
|
99
|
+
begin
|
100
|
+
print_operation.run(:print_dialog, main_window)
|
101
|
+
rescue => error
|
102
|
+
dialog = Gtk::MessageDialog.new(:parent => main_window,
|
103
|
+
:flags => :destroy_with_parent,
|
104
|
+
:type => :error,
|
105
|
+
:buttons => :close,
|
106
|
+
:message => error.message)
|
107
|
+
dialog.signal_connect "response" do
|
108
|
+
dialog.destroy
|
109
|
+
end
|
110
|
+
dialog.show
|
126
111
|
end
|
127
112
|
end
|
128
113
|
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# Copyright (c) 2015 Ruby-GNOME2 Project Team
|
2
|
+
# This program is licenced under the same licence as Ruby-GNOME2.
|
3
|
+
#
|
4
|
+
=begin
|
5
|
+
= Revealer
|
6
|
+
|
7
|
+
GtkRevealer is a container that animates showing and hiding
|
8
|
+
of its sole child with nice transitions.
|
9
|
+
=end
|
10
|
+
module RevealerDemo
|
11
|
+
def self.run_demo(main_window)
|
12
|
+
builder = Gtk::Builder.new(:resource => "/revealer/revealer.ui")
|
13
|
+
builder.connect_signals {}
|
14
|
+
|
15
|
+
timeout = nil
|
16
|
+
count = 0
|
17
|
+
|
18
|
+
window = builder["window"]
|
19
|
+
window.screen = main_window.screen
|
20
|
+
window.signal_connect "destroy" do
|
21
|
+
if timeout
|
22
|
+
GLib::Source.remove(timeout)
|
23
|
+
timeout = nil
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
if !window.visible?
|
28
|
+
timeout = GLib::Timeout.add(690) do
|
29
|
+
name = "revealer#{count}"
|
30
|
+
|
31
|
+
revealer = builder[name]
|
32
|
+
revealer.set_reveal_child(true)
|
33
|
+
|
34
|
+
revealer.signal_connect "notify::child-revealed" do |widget|
|
35
|
+
revealed = widget.child_revealed?
|
36
|
+
widget.set_reveal_child(!revealed)
|
37
|
+
end
|
38
|
+
|
39
|
+
count += 1
|
40
|
+
if count >= 9
|
41
|
+
timeout = nil
|
42
|
+
false
|
43
|
+
else
|
44
|
+
true
|
45
|
+
end
|
46
|
+
end
|
47
|
+
window.show_all
|
48
|
+
else
|
49
|
+
window.destroy
|
50
|
+
end
|
51
|
+
window
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# Copyright (c) 2015 Ruby-GNOME2 Project Team
|
2
|
+
# This program is licenced under the same licence as Ruby-GNOME2.
|
3
|
+
#
|
4
|
+
=begin
|
5
|
+
= Scale
|
6
|
+
|
7
|
+
GtkScale is a way to select a value from a range.
|
8
|
+
Scales can have marks to help pick special values,
|
9
|
+
and they can also restrict the values that can be
|
10
|
+
chosen.
|
11
|
+
=end
|
12
|
+
|
13
|
+
module ScaleDemo
|
14
|
+
def self.run_demo(main_window)
|
15
|
+
builder = Gtk::Builder.new(:resource => "/scale/scale.ui")
|
16
|
+
builder.connect_signals {}
|
17
|
+
window = builder["window1"]
|
18
|
+
window.screen = main_window.screen
|
19
|
+
|
20
|
+
if !window.visible?
|
21
|
+
window.show_all
|
22
|
+
else
|
23
|
+
window.destroy
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
# Copyright (c) 2015 Ruby-GNOME2 Project Team
|
2
|
+
# This program is licenced under the same licence as Ruby-GNOME2.
|
3
|
+
#
|
4
|
+
=begin
|
5
|
+
= Entry/Delayed Search Entry
|
6
|
+
|
7
|
+
GtkSearchEntry sets up GtkEntries ready for search. Search entries
|
8
|
+
have their "changed" signal delayed and should be used
|
9
|
+
when the searched operation is slow such as loads of entries
|
10
|
+
to search, or online searches.
|
11
|
+
=end
|
12
|
+
module SearchEntry2Demo
|
13
|
+
def self.run_demo(main_window)
|
14
|
+
window = Gtk::Window.new(:toplevel)
|
15
|
+
window.title = "Delayed Search Entry"
|
16
|
+
window.transient_for = main_window
|
17
|
+
window.resizable = true
|
18
|
+
window.set_size_request(200, -1)
|
19
|
+
|
20
|
+
vbox = Gtk::Box.new(:vertical, 0)
|
21
|
+
window.add(vbox)
|
22
|
+
vbox.border_width = 0
|
23
|
+
|
24
|
+
entry = Gtk::SearchEntry.new
|
25
|
+
container = Gtk::Box.new(:horizontal, 10)
|
26
|
+
container.halign = :center
|
27
|
+
container.pack_start(entry, :expand => false, :fill => false, :padding => 0)
|
28
|
+
|
29
|
+
searchbar = Gtk::SearchBar.new
|
30
|
+
searchbar.connect_entry(entry)
|
31
|
+
searchbar.show_close_button = false
|
32
|
+
searchbar.add(container)
|
33
|
+
vbox.pack_start(searchbar, :expand => false, :fill => false, :padding => 0)
|
34
|
+
|
35
|
+
# Hook the search bar to key presses
|
36
|
+
window.signal_connect("key-press-event") do |_widget, event|
|
37
|
+
searchbar.handle_event(event)
|
38
|
+
end
|
39
|
+
|
40
|
+
# Help
|
41
|
+
label = Gtk::Label.new("Start Typing to search")
|
42
|
+
vbox.pack_start(label, :expand => true, :fill => true, :padding => 0)
|
43
|
+
|
44
|
+
# Toggle button
|
45
|
+
button = Gtk::ToggleButton.new(:label => "Search")
|
46
|
+
button.bind_property("active", searchbar, "search-mode-enabled", :bidirectional)
|
47
|
+
vbox.pack_start(button, :expand => true, :fill => true, :padding => 0)
|
48
|
+
|
49
|
+
# Result
|
50
|
+
hbox = Gtk::Box.new(:horizontal, 10)
|
51
|
+
vbox.pack_start(hbox, :expand => true, :fill => true, :padding => 0)
|
52
|
+
hbox.border_width = 0
|
53
|
+
|
54
|
+
label = Gtk::Label.new("Result:")
|
55
|
+
label.xalign = 0.0
|
56
|
+
label.margin_start = 6
|
57
|
+
hbox.pack_start(label, :expand => true, :fill => true, :padding => 0)
|
58
|
+
|
59
|
+
label = Gtk::Label.new("")
|
60
|
+
hbox.pack_start(label, :expand => true, :fill => true, :padding => 0)
|
61
|
+
|
62
|
+
entry.signal_connect("search-changed") do |widget|
|
63
|
+
puts "search changed: #{widget.text || ''}"
|
64
|
+
label.text = widget.text || ""
|
65
|
+
end
|
66
|
+
|
67
|
+
entry.signal_connect("changed") do |_widget|
|
68
|
+
puts "changed: #{label.text || ''}"
|
69
|
+
end
|
70
|
+
|
71
|
+
hbox = Gtk::Box.new(:horizontal, 10)
|
72
|
+
vbox.pack_start(hbox, :expand => true, :fill => true, :padding => 0)
|
73
|
+
hbox.border_width = 0
|
74
|
+
|
75
|
+
label = Gtk::Label.new("Signal:")
|
76
|
+
label.xalign = 0.0
|
77
|
+
label.margin_start = 6
|
78
|
+
hbox.pack_start(label, :expand => true, :fill => true, :padding => 0)
|
79
|
+
|
80
|
+
label = Gtk::Label.new("")
|
81
|
+
hbox.pack_start(label, :expand => true, :fill => true, :padding => 0)
|
82
|
+
|
83
|
+
entry.signal_connect("search-changed") do |widget|
|
84
|
+
puts "search changed: #{widget.text || ''}"
|
85
|
+
label.text = widget.text || ""
|
86
|
+
end
|
87
|
+
|
88
|
+
entry.signal_connect("next-match") do |_widget|
|
89
|
+
label.text = "next-match"
|
90
|
+
end
|
91
|
+
|
92
|
+
entry.signal_connect("previous-match") do |_widget|
|
93
|
+
label.text = "previous-match"
|
94
|
+
end
|
95
|
+
|
96
|
+
entry.signal_connect("stop-search") do |_widget|
|
97
|
+
label.text = "stop-search"
|
98
|
+
end
|
99
|
+
|
100
|
+
if !window.visible?
|
101
|
+
window.show_all
|
102
|
+
else
|
103
|
+
window.destroy
|
104
|
+
end
|
105
|
+
window
|
106
|
+
end
|
107
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
# Copyright (c) 2015 Ruby-GNOME2 Project Team
|
2
|
+
# This program is licenced under the same licence as Ruby-GNOME2.
|
3
|
+
#
|
4
|
+
=begin
|
5
|
+
= Stack Sidebar
|
6
|
+
|
7
|
+
GtkStackSidebar provides an automatic sidebar widget to control
|
8
|
+
navigation of a GtkStack object. This widget automatically updates it
|
9
|
+
content based on what is presently available in the GtkStack object,
|
10
|
+
and using the "title" child property to set the display labels.
|
11
|
+
=end
|
12
|
+
module SidebarDemo
|
13
|
+
def self.run_demo(_main_window)
|
14
|
+
window = Gtk::Window.new(:toplevel)
|
15
|
+
window.set_resizable(true)
|
16
|
+
window.set_size_request(500, 350)
|
17
|
+
|
18
|
+
header = Gtk::HeaderBar.new
|
19
|
+
header.set_show_close_button(true)
|
20
|
+
window.set_titlebar(header)
|
21
|
+
window.set_title("Stack Sidebar")
|
22
|
+
|
23
|
+
box = Gtk::Box.new(:horizontal, 0)
|
24
|
+
sidebar = Gtk::StackSidebar.new
|
25
|
+
box.pack_start(sidebar, :expand => false, :fill => false, :padding => 0)
|
26
|
+
|
27
|
+
stack = Gtk::Stack.new
|
28
|
+
stack.set_transition_type(:slide_up_down)
|
29
|
+
sidebar.set_stack(stack)
|
30
|
+
|
31
|
+
widget = Gtk::Separator.new(:vertical)
|
32
|
+
box.pack_start(widget, :expand => false, :fill => false, :padding => 0)
|
33
|
+
|
34
|
+
box.pack_start(stack, :expand => true, :fill => true, :padding => 0)
|
35
|
+
|
36
|
+
pages = ["Welcome to GTK+",
|
37
|
+
"GtkStackSidebar Widget",
|
38
|
+
"Automatic navigation",
|
39
|
+
"Consistent appearance",
|
40
|
+
"Scrolling",
|
41
|
+
"Page 6",
|
42
|
+
"Page 7",
|
43
|
+
"Page 8",
|
44
|
+
"Page 9"
|
45
|
+
]
|
46
|
+
|
47
|
+
pages.each_with_index do |page_string, i|
|
48
|
+
child = nil
|
49
|
+
if i == 0
|
50
|
+
child = Gtk::Image.new(:icon_name => "help-about", :size => :menu)
|
51
|
+
child.set_pixel_size(256)
|
52
|
+
else
|
53
|
+
child = Gtk::Label.new(page_string)
|
54
|
+
end
|
55
|
+
|
56
|
+
stack.add_named(child, page_string)
|
57
|
+
stack.child_set_property(child, "title", page_string)
|
58
|
+
end
|
59
|
+
|
60
|
+
window.add(box)
|
61
|
+
|
62
|
+
if !window.visible?
|
63
|
+
window.show_all
|
64
|
+
else
|
65
|
+
window.destroy
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|