gtk3 3.0.8 → 3.0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/ext/gtk3/rb-gtk3.c +17 -0
  3. data/lib/gtk3/container.rb +0 -7
  4. data/lib/gtk3/deprecated.rb +3 -3
  5. data/lib/gtk3/image.rb +7 -7
  6. data/lib/gtk3/loader.rb +11 -5
  7. data/lib/gtk3/text-buffer.rb +33 -12
  8. data/lib/gtk3/text-view.rb +53 -0
  9. data/lib/gtk3/tree-model.rb +5 -0
  10. data/lib/gtk3/tree-view.rb +25 -0
  11. data/lib/gtk3/widget.rb +0 -5
  12. data/sample/gtk-demo/TODO +10 -6
  13. data/sample/gtk-demo/application.ui +93 -70
  14. data/sample/gtk-demo/appmenu.ui +19 -0
  15. data/sample/gtk-demo/assistant.rb +1 -0
  16. data/sample/gtk-demo/css_accordion.css +8 -8
  17. data/sample/gtk-demo/css_accordion.rb +2 -2
  18. data/sample/gtk-demo/css_basics.css +1 -1
  19. data/sample/gtk-demo/css_basics.rb +2 -2
  20. data/sample/gtk-demo/css_multiplebgs.rb +2 -2
  21. data/sample/gtk-demo/css_pixbufs.css +2 -2
  22. data/sample/gtk-demo/css_pixbufs.rb +2 -2
  23. data/sample/gtk-demo/css_shadows.css +5 -5
  24. data/sample/gtk-demo/css_shadows.rb +2 -2
  25. data/sample/gtk-demo/cssview.css +5 -5
  26. data/sample/gtk-demo/data/16x16/gtk3-demo-symbolic.symbolic.png +0 -0
  27. data/sample/gtk-demo/data/16x16/gtk3-demo.png +0 -0
  28. data/sample/gtk-demo/data/22x22/gtk3-demo-symbolic.symbolic.png +0 -0
  29. data/sample/gtk-demo/data/22x22/gtk3-demo.png +0 -0
  30. data/sample/gtk-demo/data/24x24/gtk3-demo-symbolic.symbolic.png +0 -0
  31. data/sample/gtk-demo/data/24x24/gtk3-demo.png +0 -0
  32. data/sample/gtk-demo/data/256x256/gtk3-demo-symbolic.symbolic.png +0 -0
  33. data/sample/gtk-demo/data/256x256/gtk3-demo.png +0 -0
  34. data/sample/gtk-demo/data/32x32/gtk3-demo-symbolic.symbolic.png +0 -0
  35. data/sample/gtk-demo/data/32x32/gtk3-demo.png +0 -0
  36. data/sample/gtk-demo/data/48x48/gtk3-demo-symbolic.symbolic.png +0 -0
  37. data/sample/gtk-demo/data/48x48/gtk3-demo.png +0 -0
  38. data/sample/gtk-demo/data/512x512/gtk3-demo-symbolic.symbolic.png +0 -0
  39. data/sample/gtk-demo/data/512x512/gtk3-demo.png +0 -0
  40. data/sample/gtk-demo/data/source.svg +2886 -0
  41. data/sample/gtk-demo/data/symbolic-source.svg +29 -0
  42. data/sample/gtk-demo/demo.gresource.xml +16 -5
  43. data/sample/gtk-demo/demo.ui +1 -0
  44. data/sample/gtk-demo/font_features.rb +1 -1
  45. data/sample/gtk-demo/main.rb +2 -2
  46. data/sample/gtk-demo/main.ui +18 -36
  47. data/sample/gtk-demo/markup.rb +53 -8
  48. data/sample/gtk-demo/markup.txt +2 -2
  49. data/sample/gtk-demo/org.gtk.Demo.gschema.xml +9 -0
  50. data/sample/gtk-demo/pixbufs.rb +105 -145
  51. data/sample/gtk-demo/reset.css +1 -58
  52. data/sample/gtk-demo/rotated_text.rb +119 -55
  53. data/sample/gtk-demo/shortcuts-boxes.ui +167 -0
  54. data/sample/gtk-demo/shortcuts-builder.ui +547 -0
  55. data/sample/gtk-demo/shortcuts-clocks.ui +166 -0
  56. data/sample/gtk-demo/shortcuts-gedit.ui +172 -0
  57. data/sample/gtk-demo/shortcuts.ui +65 -0
  58. data/sample/gtk-demo/stack.ui +5 -5
  59. data/sample/gtk-demo/textscroll.rb +106 -0
  60. data/sample/gtk-demo/theming.ui +58 -22
  61. data/sample/gtk-demo/theming_style_classes.rb +5 -4
  62. data/sample/gtk-demo/transparent.rb +143 -0
  63. data/sample/misc/aboutdialog.rb +1 -1
  64. data/sample/misc/bindings.rb +36 -15
  65. data/sample/misc/combobox.rb +1 -1
  66. data/sample/misc/dnd.rb +3 -3
  67. data/sample/misc/icons-theme-viewer.rb +1 -1
  68. data/sample/misc/iconview.rb +2 -2
  69. data/sample/misc/textbuffer-serialize.rb +18 -14
  70. data/sample/misc/to-drawable.rb +2 -2
  71. data/sample/misc/tooltips.rb +1 -0
  72. data/sample/misc/treeview.rb +1 -1
  73. data/sample/tutorial/README.md +18 -18
  74. data/test/test-gtk-clipboard.rb +1 -1
  75. data/test/test-gtk-combo-box.rb +2 -2
  76. data/test/test-gtk-icon-view.rb +2 -2
  77. data/test/test-gtk-image.rb +1 -1
  78. data/test/test-gtk-list-store.rb +9 -3
  79. data/test/test-gtk-text-view.rb +64 -0
  80. data/test/test-gtk-tree-path.rb +1 -3
  81. data/test/test-gtk-tree-view.rb +97 -0
  82. data/test/test-gtk-window.rb +2 -2
  83. data/test/test-pango-context.rb +56 -0
  84. metadata +44 -17
@@ -0,0 +1,166 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <interface>
3
+ <!-- interface-requires gtk+ 3.17 -->
4
+
5
+ <object class="GtkShortcutsWindow" id="shortcuts-clocks">
6
+ <property name="modal">1</property>
7
+ <child>
8
+ <object class="GtkShortcutsSection">
9
+ <property name="visible">1</property>
10
+ <property name="section-name">shortcuts</property>
11
+ <property name="max-height">10</property>
12
+ <child>
13
+ <object class="GtkShortcutsGroup">
14
+ <property name="visible">1</property>
15
+ <property name="title" translatable="yes">General</property>
16
+ <child>
17
+ <object class="GtkShortcutsShortcut">
18
+ <property name="visible">1</property>
19
+ <property name="accelerator">&lt;ctrl&gt;Page_Down</property>
20
+ <property name="title" translatable="yes">Go to the next section</property>
21
+ </object>
22
+ </child>
23
+ <child>
24
+ <object class="GtkShortcutsShortcut">
25
+ <property name="visible">1</property>
26
+ <property name="accelerator">&lt;ctrl&gt;Page_Up</property>
27
+ <property name="title" translatable="yes">Go to the previous section</property>
28
+ </object>
29
+ </child>
30
+ <child>
31
+ <object class="GtkShortcutsShortcut">
32
+ <property name="visible">1</property>
33
+ <property name="accelerator">&lt;alt&gt;Q</property>
34
+ <property name="title" translatable="yes">Quit</property>
35
+ </object>
36
+ </child>
37
+ <child>
38
+ <object class="GtkShortcutsShortcut">
39
+ <property name="visible">1</property>
40
+ <property name="accelerator">&lt;alt&gt;Right</property>
41
+ <property name="direction">ltr</property>
42
+ <property name="title" translatable="yes">Forward</property>
43
+ </object>
44
+ </child>
45
+ <child>
46
+ <object class="GtkShortcutsShortcut">
47
+ <property name="visible">1</property>
48
+ <property name="accelerator">&lt;ctrl&gt;Left</property>
49
+ <property name="direction">ltr</property>
50
+ <property name="title" translatable="yes">Back</property>
51
+ </object>
52
+ </child>
53
+ <child>
54
+ <object class="GtkShortcutsShortcut">
55
+ <property name="visible">1</property>
56
+ <property name="accelerator">&lt;alt&gt;Left</property>
57
+ <property name="direction">rtl</property>
58
+ <property name="title" translatable="yes">Forward</property>
59
+ </object>
60
+ </child>
61
+ <child>
62
+ <object class="GtkShortcutsShortcut">
63
+ <property name="visible">1</property>
64
+ <property name="accelerator">&lt;ctrl&gt;Right</property>
65
+ <property name="direction">rtl</property>
66
+ <property name="title" translatable="yes">Back</property>
67
+ </object>
68
+ </child>
69
+ </object>
70
+ </child>
71
+ <child>
72
+ <object class="GtkShortcutsGroup">
73
+ <property name="visible">1</property>
74
+ <property name="view">world</property>
75
+ <property name="title" translatable="yes">World Clocks</property>
76
+ <child>
77
+ <object class="GtkShortcutsShortcut">
78
+ <property name="visible">1</property>
79
+ <property name="accelerator">&lt;ctrl&gt;N</property>
80
+ <property name="title" translatable="yes">Add a world clock</property>
81
+ </object>
82
+ </child>
83
+ <child>
84
+ <object class="GtkShortcutsShortcut">
85
+ <property name="visible">1</property>
86
+ <property name="accelerator">&lt;ctrl&gt;S</property>
87
+ <property name="title" translatable="yes">Select world clocks</property>
88
+ </object>
89
+ </child>
90
+ </object>
91
+ </child>
92
+ <child>
93
+ <object class="GtkShortcutsGroup">
94
+ <property name="visible">1</property>
95
+ <property name="view">alarm</property>
96
+ <property name="title" translatable="yes">Alarm</property>
97
+ <child>
98
+ <object class="GtkShortcutsShortcut">
99
+ <property name="visible">1</property>
100
+ <property name="accelerator">&lt;ctrl&gt;N</property>
101
+ <property name="title" translatable="yes">Add an alarm</property>
102
+ </object>
103
+ </child>
104
+ <child>
105
+ <object class="GtkShortcutsShortcut">
106
+ <property name="visible">1</property>
107
+ <property name="accelerator">&lt;ctrl&gt;S</property>
108
+ <property name="title" translatable="yes">Select alarms</property>
109
+ </object>
110
+ </child>
111
+ </object>
112
+ </child>
113
+ <child>
114
+ <object class="GtkShortcutsGroup">
115
+ <property name="visible">1</property>
116
+ <property name="view">stopwatch</property>
117
+ <property name="title" translatable="yes">Stopwatch</property>
118
+ <child>
119
+ <object class="GtkShortcutsShortcut">
120
+ <property name="visible">1</property>
121
+ <property name="accelerator">Return space</property>
122
+ <property name="title" translatable="yes">Start / Stop / Continue</property>
123
+ </object>
124
+ </child>
125
+ <child>
126
+ <object class="GtkShortcutsShortcut">
127
+ <property name="visible">1</property>
128
+ <property name="accelerator">L</property>
129
+ <property name="title" translatable="yes">Lap</property>
130
+ </object>
131
+ </child>
132
+ <child>
133
+ <object class="GtkShortcutsShortcut">
134
+ <property name="visible">1</property>
135
+ <property name="accelerator">Delete</property>
136
+ <property name="title" translatable="yes">Reset</property>
137
+ </object>
138
+ </child>
139
+ </object>
140
+ </child>
141
+ <child>
142
+ <object class="GtkShortcutsGroup">
143
+ <property name="visible">1</property>
144
+ <property name="view">timer</property>
145
+ <property name="title" translatable="yes">Timer</property>
146
+ <child>
147
+ <object class="GtkShortcutsShortcut">
148
+ <property name="visible">1</property>
149
+ <property name="accelerator">Return space</property>
150
+ <property name="title" translatable="yes">Start / Stop / Pause</property>
151
+ </object>
152
+ </child>
153
+ <child>
154
+ <object class="GtkShortcutsShortcut">
155
+ <property name="visible">1</property>
156
+ <property name="accelerator">Delete</property>
157
+ <property name="title" translatable="yes">Reset</property>
158
+ </object>
159
+ </child>
160
+ </object>
161
+ </child>
162
+ </object>
163
+ </child>
164
+ </object>
165
+
166
+ </interface>
@@ -0,0 +1,172 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <interface>
3
+ <!-- interface-requires gtk+ 3.17 -->
4
+
5
+ <object class="GtkShortcutsWindow" id="shortcuts-gedit">
6
+ <property name="modal">1</property>
7
+ <child>
8
+ <object class="GtkShortcutsSection">
9
+ <property name="visible">1</property>
10
+ <property name="section-name">shortcuts</property>
11
+ <property name="max-height">12</property>
12
+ <child>
13
+ <object class="GtkShortcutsGroup">
14
+ <property name="visible">1</property>
15
+ <property name="title" translatable="yes">Touchpad gestures</property>
16
+ <child>
17
+ <object class="GtkShortcutsShortcut">
18
+ <property name="visible">1</property>
19
+ <property name="shortcut-type">gesture-two-finger-swipe-right</property>
20
+ <property name="title" translatable="yes">Switch to the next document</property>
21
+ </object>
22
+ </child>
23
+ <child>
24
+ <object class="GtkShortcutsShortcut">
25
+ <property name="visible">1</property>
26
+ <property name="shortcut-type">gesture-two-finger-swipe-left</property>
27
+ <property name="title" translatable="yes">Switch to the previous document</property>
28
+ </object>
29
+ </child>
30
+ </object>
31
+ </child>
32
+ <child>
33
+ <object class="GtkShortcutsGroup">
34
+ <property name="visible">1</property>
35
+ <property name="title" translatable="yes">Documents</property>
36
+ <child>
37
+ <object class="GtkShortcutsShortcut">
38
+ <property name="visible">1</property>
39
+ <property name="accelerator">&lt;ctrl&gt;N</property>
40
+ <property name="title" translatable="yes">Create new document</property>
41
+ </object>
42
+ </child>
43
+ <child>
44
+ <object class="GtkShortcutsShortcut">
45
+ <property name="visible">1</property>
46
+ <property name="accelerator">&lt;ctrl&gt;O</property>
47
+ <property name="title" translatable="yes">Open a document</property>
48
+ </object>
49
+ </child>
50
+ <child>
51
+ <object class="GtkShortcutsShortcut">
52
+ <property name="visible">1</property>
53
+ <property name="accelerator">&lt;ctrl&gt;S</property>
54
+ <property name="title" translatable="yes">Save the document</property>
55
+ </object>
56
+ </child>
57
+ <child>
58
+ <object class="GtkShortcutsShortcut">
59
+ <property name="visible">1</property>
60
+ <property name="accelerator">&lt;ctrl&gt;W</property>
61
+ <property name="title" translatable="yes">Close the document</property>
62
+ </object>
63
+ </child>
64
+ <child>
65
+ <object class="GtkShortcutsShortcut">
66
+ <property name="visible">1</property>
67
+ <property name="accelerator">&lt;ctrl&gt;&lt;Alt&gt;Page_Down</property>
68
+ <property name="title" translatable="yes">Switch to the next document</property>
69
+ </object>
70
+ </child>
71
+ <child>
72
+ <object class="GtkShortcutsShortcut">
73
+ <property name="visible">1</property>
74
+ <property name="accelerator">&lt;ctrl&gt;&lt;Alt&gt;Page_Up</property>
75
+ <property name="title" translatable="yes">Switch to the previous document</property>
76
+ </object>
77
+ </child>
78
+ </object>
79
+ </child>
80
+ <child>
81
+ <object class="GtkShortcutsGroup">
82
+ <property name="visible">1</property>
83
+ <property name="title" translatable="yes">Find and Replace</property>
84
+ <child>
85
+ <object class="GtkShortcutsShortcut">
86
+ <property name="visible">1</property>
87
+ <property name="accelerator">&lt;ctrl&gt;F</property>
88
+ <property name="title" translatable="yes">Find</property>
89
+ </object>
90
+ </child>
91
+ <child>
92
+ <object class="GtkShortcutsShortcut">
93
+ <property name="visible">1</property>
94
+ <property name="accelerator">&lt;ctrl&gt;G</property>
95
+ <property name="title" translatable="yes">Find the next match</property>
96
+ </object>
97
+ </child>
98
+ <child>
99
+ <object class="GtkShortcutsShortcut">
100
+ <property name="visible">1</property>
101
+ <property name="accelerator">&lt;ctrl&gt;&lt;Shift&gt;G</property>
102
+ <property name="title" translatable="yes">Find the previous match</property>
103
+ </object>
104
+ </child>
105
+ <child>
106
+ <object class="GtkShortcutsShortcut">
107
+ <property name="visible">1</property>
108
+ <property name="accelerator">&lt;ctrl&gt;H</property>
109
+ <property name="title" translatable="yes">Find and Replace</property>
110
+ </object>
111
+ </child>
112
+ <child>
113
+ <object class="GtkShortcutsShortcut">
114
+ <property name="visible">1</property>
115
+ <property name="accelerator">&lt;ctrl&gt;&lt;Shift&gt;K</property>
116
+ <property name="title" translatable="yes">Clear highlight</property>
117
+ </object>
118
+ </child>
119
+ <child>
120
+ <object class="GtkShortcutsShortcut">
121
+ <property name="visible">1</property>
122
+ <property name="accelerator">&lt;ctrl&gt;I</property>
123
+ <property name="title" translatable="yes">Go to line</property>
124
+ </object>
125
+ </child>
126
+ </object>
127
+ </child>
128
+ <child>
129
+ <object class="GtkShortcutsGroup">
130
+ <property name="visible">1</property>
131
+ <property name="title" translatable="yes">Tools</property>
132
+ <child>
133
+ <object class="GtkShortcutsShortcut">
134
+ <property name="visible">1</property>
135
+ <property name="accelerator">&lt;shift&gt;F7</property>
136
+ <property name="title" translatable="yes">Check spelling</property>
137
+ </object>
138
+ </child>
139
+ </object>
140
+ </child>
141
+ <child>
142
+ <object class="GtkShortcutsGroup">
143
+ <property name="visible">1</property>
144
+ <property name="title" translatable="yes">Miscellaneous</property>
145
+ <child>
146
+ <object class="GtkShortcutsShortcut">
147
+ <property name="visible">1</property>
148
+ <property name="accelerator">F11</property>
149
+ <property name="title" translatable="yes">Fullscreen on / off</property>
150
+ </object>
151
+ </child>
152
+ <child>
153
+ <object class="GtkShortcutsShortcut">
154
+ <property name="visible">1</property>
155
+ <property name="accelerator">&lt;ctrl&gt;P</property>
156
+ <property name="title" translatable="yes">Print the document</property>
157
+ </object>
158
+ </child>
159
+ <child>
160
+ <object class="GtkShortcutsShortcut">
161
+ <property name="visible">1</property>
162
+ <property name="accelerator">Insert</property>
163
+ <property name="title" translatable="yes">Toggle insert / overwrite</property>
164
+ </object>
165
+ </child>
166
+ </object>
167
+ </child>
168
+ </object>
169
+ </child>
170
+ </object>
171
+
172
+ </interface>
@@ -0,0 +1,65 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <interface>
3
+ <!-- interface-requires gtk+ 3.17 -->
4
+
5
+ <object class="GtkWindow" id="window1">
6
+ <property name="title" translatable="yes">Shortcuts</property>
7
+ <child>
8
+ <object class="GtkBox">
9
+ <property name="visible">1</property>
10
+ <property name="orientation">vertical</property>
11
+ <property name="margin">50</property>
12
+ <property name="spacing">10</property>
13
+ <child>
14
+ <object class="GtkButton">
15
+ <property name="visible">1</property>
16
+ <property name="label">Builder</property>
17
+ <signal name="clicked" handler="builder_shortcuts" swapped="1" object="window1"/>
18
+ </object>
19
+ </child>
20
+ <child>
21
+ <object class="GtkButton">
22
+ <property name="visible">1</property>
23
+ <property name="label">GEdit</property>
24
+ <signal name="clicked" handler="gedit_shortcuts" swapped="1" object="window1"/>
25
+ </object>
26
+ </child>
27
+ <child>
28
+ <object class="GtkButton">
29
+ <property name="visible">1</property>
30
+ <property name="label">Clocks - All</property>
31
+ <signal name="clicked" handler="clocks_shortcuts" swapped="1" object="window1"/>
32
+ </object>
33
+ </child>
34
+ <child>
35
+ <object class="GtkButton">
36
+ <property name="visible">1</property>
37
+ <property name="label">Clocks - Stopwatch</property>
38
+ <signal name="clicked" handler="clocks_shortcuts_stopwatch" swapped="1" object="window1"/>
39
+ </object>
40
+ </child>
41
+ <child>
42
+ <object class="GtkButton">
43
+ <property name="visible">1</property>
44
+ <property name="label">Boxes</property>
45
+ <signal name="clicked" handler="boxes_shortcuts" swapped="1" object="window1"/>
46
+ </object>
47
+ </child>
48
+ <child>
49
+ <object class="GtkButton">
50
+ <property name="visible">1</property>
51
+ <property name="label">Boxes - Wizard</property>
52
+ <signal name="clicked" handler="boxes_shortcuts_wizard" swapped="1" object="window1"/>
53
+ </object>
54
+ </child>
55
+ <child>
56
+ <object class="GtkButton">
57
+ <property name="visible">1</property>
58
+ <property name="label">Boxes - Display</property>
59
+ <signal name="clicked" handler="boxes_shortcuts_display" swapped="1" object="window1"/>
60
+ </object>
61
+ </child>
62
+ </object>
63
+ </child>
64
+ </object>
65
+ </interface>
@@ -4,10 +4,10 @@
4
4
  <object class="GtkWindow" id="window1">
5
5
  <property name="title" translatable="yes">Stack</property>
6
6
  <child>
7
- <object class="GtkGrid" id="grid1">
7
+ <object class="GtkGrid">
8
8
  <property name="visible">1</property>
9
9
  <child>
10
- <object class="GtkStackSwitcher" id="switcher">
10
+ <object class="GtkStackSwitcher">
11
11
  <property name="visible">1</property>
12
12
  <property name="stack">stack</property>
13
13
  <property name="halign">center</property>
@@ -23,7 +23,7 @@
23
23
  <property name="can_focus">1</property>
24
24
  <property name="transition-type">crossfade</property>
25
25
  <child>
26
- <object class="GtkImage" id="image1">
26
+ <object class="GtkImage">
27
27
  <property name="visible">1</property>
28
28
  <property name="margin-top">20</property>
29
29
  <property name="margin-bottom">20</property>
@@ -35,7 +35,7 @@
35
35
  </packing>
36
36
  </child>
37
37
  <child>
38
- <object class="GtkCheckButton" id="checkbutton1">
38
+ <object class="GtkCheckButton">
39
39
  <property name="label" translatable="yes">Page 2</property>
40
40
  <property name="visible">1</property>
41
41
  <property name="can_focus">1</property>
@@ -49,7 +49,7 @@
49
49
  </packing>
50
50
  </child>
51
51
  <child>
52
- <object class="GtkSpinner" id="spinner1">
52
+ <object class="GtkSpinner">
53
53
  <property name="visible">1</property>
54
54
  <property name="halign">center</property>
55
55
  <property name="valign">center</property>
@@ -0,0 +1,106 @@
1
+ # Copyright (c) 2016 Ruby-GNOME2 Project Team
2
+ # This program is licenced under the same licence as Ruby-GNOME2.
3
+ #
4
+ =begin
5
+ = Text View/Automatic Scrolling
6
+
7
+ This example demonstrates how to use the gravity of
8
+ GtkTextMarks to keep a text view scrolled to the bottom
9
+ while appending text.
10
+ =end
11
+ module TextscrollDemo
12
+ def self.run_demo(main_window)
13
+ window = Gtk::Window.new(:toplevel)
14
+ window.screen = main_window.screen
15
+
16
+ window.set_default_size(600, 400)
17
+
18
+ hbox = Gtk::Box.new(:horizontal, 6)
19
+ hbox.homogeneous = true
20
+ window.add(hbox)
21
+
22
+ create_text_view(hbox, true)
23
+ create_text_view(hbox, false)
24
+
25
+ if !window.visible?
26
+ window.show_all
27
+ else
28
+ window.destroy
29
+ end
30
+ window
31
+ end
32
+
33
+ def self.create_text_view(hbox, to_end)
34
+ swindow = Gtk::ScrolledWindow.new
35
+ hbox.pack_start(swindow, :fill => true, :expand => true, :padding => 0)
36
+ textview = Gtk::TextView.new
37
+ swindow.add(textview)
38
+ timeout = setup_scroll(textview, to_end)
39
+ textview.signal_connect("destroy") { GLib::Source.remove(timeout) }
40
+ end
41
+
42
+ def self.setup_scroll(textview, to_end)
43
+ buffer = textview.buffer
44
+ end_iter = buffer.end_iter
45
+ count = 0
46
+ if to_end
47
+ # If we want to scroll to the end, including horizontal scrolling,
48
+ # then we just create a mark with right gravity at the end of the
49
+ # buffer. It will stay at the end unless explicitly moved with
50
+ # gtk_text_buffer_move_mark.
51
+ buffer.create_mark("end", end_iter, false)
52
+
53
+ # add scrolling timeout
54
+ return GLib::Timeout.add(50) do # scroll to end
55
+ count += 1
56
+ # Get "end" mark. It's located at the end of buffer because
57
+ # of right gravity
58
+ mark = buffer.get_mark("end")
59
+ mark_iter = buffer.get_iter_at(:mark => mark)
60
+ # and insert some text at its position, the iter will be
61
+ # revalidated after insertion to point to the end of inserted text
62
+ buffer.insert(mark_iter, "\n")
63
+ buffer.insert(mark_iter, " " * count)
64
+ buffer.insert(mark_iter, "Scroll to end scroll to end scroll" +
65
+ " to end scroll to end #{count}")
66
+ # Now scroll the end mark onscreen.
67
+ textview.scroll_mark_onscreen(mark)
68
+
69
+ # Emulate typewriter behavior, shift to the left if we
70
+ # are far enough to the right.
71
+ count = 0 if count > 150
72
+ GLib::Source::CONTINUE
73
+ end
74
+ else
75
+ # If we want to scroll to the bottom, but not scroll horizontally,
76
+ # then an end mark won't do the job. Just create a mark so we can
77
+ # use it with gtk_text_view_scroll_mark_onscreen, we'll position it
78
+ # explicitly when needed. Use left gravity so the mark stays where
79
+ # we put it after inserting new text.
80
+ buffer.create_mark("scroll", end_iter, true)
81
+ return GLib::Timeout.add(100) do # scroll to bottom
82
+ count += 1
83
+ # Get end iterator
84
+ end_iter = buffer.end_iter
85
+ # and insert some text at it, the iter will be revalidated
86
+ # after insertion to point to the end of inserted text
87
+ buffer.insert(end_iter, "\n")
88
+ buffer.insert(end_iter, " " * count)
89
+ buffer.insert(end_iter,"Scroll to bottom scroll to bottom scroll" +
90
+ " to bottom scroll to bottom #{count}")
91
+ # Move the iterator to the beginning of line, so we don't scroll
92
+ # in horizontal direction
93
+ end_iter.line_offset = 0
94
+ # and place the mark at iter. the mark will stay there after we
95
+ # insert some text at the end because it has left gravity.
96
+ mark = buffer.get_mark("scroll")
97
+ buffer.move_mark(mark, end_iter)
98
+ # Scroll the mark onscreen.
99
+ textview.scroll_mark_onscreen(mark)
100
+ # Shift text back if we got enough to the right.
101
+ count = 0 if count > 40
102
+ GLib::Source::CONTINUE
103
+ end
104
+ end
105
+ end
106
+ end