gtk3 3.0.7-x86-mingw32 → 3.0.8-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/ext/gtk3/extconf.rb +1 -0
  3. data/ext/gtk3/rb-gtk3-tree-view.c +4 -0
  4. data/ext/gtk3/rb-gtk3.c +245 -60
  5. data/lib/2.2/gtk3.so +0 -0
  6. data/lib/2.3/gtk3.so +0 -0
  7. data/lib/gtk3/box.rb +22 -0
  8. data/lib/gtk3/builder.rb +50 -29
  9. data/lib/gtk3/deprecated.rb +7 -0
  10. data/lib/gtk3/entry-buffer.rb +28 -0
  11. data/lib/gtk3/list-store.rb +2 -20
  12. data/lib/gtk3/loader.rb +6 -0
  13. data/lib/gtk3/menu-item.rb +8 -7
  14. data/lib/gtk3/tree-iter.rb +25 -1
  15. data/lib/gtk3/tree-model.rb +41 -0
  16. data/lib/gtk3/tree-store.rb +7 -6
  17. data/lib/gtk3/widget.rb +18 -1
  18. data/sample/gtk-demo/TODO +45 -39
  19. data/sample/gtk-demo/assistant.rb +123 -0
  20. data/sample/gtk-demo/builder.rb +75 -38
  21. data/sample/gtk-demo/button_box.rb +100 -0
  22. data/sample/gtk-demo/colorsel.rb +49 -65
  23. data/sample/gtk-demo/css_accordion.rb +33 -55
  24. data/sample/gtk-demo/css_basics.rb +55 -80
  25. data/sample/gtk-demo/css_multiplebgs.rb +112 -0
  26. data/sample/gtk-demo/css_pixbufs.rb +84 -0
  27. data/sample/gtk-demo/css_shadows.rb +101 -0
  28. data/sample/gtk-demo/cursors.rb +114 -0
  29. data/sample/gtk-demo/dialog.rb +105 -115
  30. data/sample/gtk-demo/entry_buffer.rb +44 -0
  31. data/sample/gtk-demo/entry_completion.rb +40 -52
  32. data/sample/gtk-demo/expander.rb +60 -26
  33. data/sample/gtk-demo/filtermodel.rb +119 -0
  34. data/sample/gtk-demo/font_features.rb +117 -0
  35. data/sample/gtk-demo/headerbar.rb +57 -0
  36. data/sample/gtk-demo/iconview_edit.rb +79 -0
  37. data/sample/gtk-demo/infobar.rb +75 -59
  38. data/sample/gtk-demo/links.rb +53 -40
  39. data/sample/gtk-demo/main.rb +353 -43
  40. data/sample/gtk-demo/main.ui +9 -9
  41. data/sample/gtk-demo/markup.rb +46 -0
  42. data/sample/gtk-demo/menus.rb +111 -162
  43. data/sample/gtk-demo/modelbutton.rb +47 -0
  44. data/sample/gtk-demo/overlay.rb +61 -0
  45. data/sample/gtk-demo/overlay2.rb +75 -0
  46. data/sample/gtk-demo/panes.rb +114 -133
  47. data/sample/gtk-demo/pickers.rb +70 -0
  48. data/sample/gtk-demo/popover.rb +110 -0
  49. data/sample/gtk-demo/printing.rb +68 -83
  50. data/sample/gtk-demo/revealer.rb +53 -0
  51. data/sample/gtk-demo/scale.rb +26 -0
  52. data/sample/gtk-demo/search_entry2.rb +107 -0
  53. data/sample/gtk-demo/sidebar.rb +68 -0
  54. data/sample/gtk-demo/sizegroup.rb +93 -105
  55. data/sample/gtk-demo/spinner.rb +53 -50
  56. data/sample/gtk-demo/stack.rb +28 -0
  57. data/sample/gtk-demo/test_mod.rb +22 -0
  58. data/sample/gtk-demo/textmask.rb +61 -0
  59. data/sample/gtk-demo/theming_style_classes.rb +16 -12
  60. data/sample/misc/app-menu.ui +19 -0
  61. data/sample/misc/button-menu.ui +19 -0
  62. data/sample/misc/icons-theme-viewer.rb +65 -0
  63. data/sample/misc/menu.rb +3 -3
  64. data/sample/misc/menus_from_resources.gresource.xml +8 -0
  65. data/sample/misc/menus_from_resources.rb +91 -0
  66. data/sample/misc/statusicon.rb +1 -1
  67. data/sample/misc/toolbar-menu.ui +23 -0
  68. data/sample/misc/treestore.rb +63 -0
  69. data/sample/tutorial/README.md +368 -6
  70. data/test/test-gtk-box.rb +13 -0
  71. data/test/test-gtk-builder.rb +1 -1
  72. data/test/test-gtk-clipboard.rb +124 -0
  73. data/test/test-gtk-container.rb +3 -3
  74. data/test/test-gtk-entry-buffer.rb +32 -0
  75. data/test/test-gtk-list-store.rb +30 -12
  76. data/test/test-gtk-menu.rb +32 -0
  77. data/test/test-gtk-tree-iter.rb +61 -5
  78. data/test/test-gtk-tree-path.rb +26 -1
  79. data/test/test-gtk-tree-sortable.rb +35 -0
  80. data/test/test-gtk-tree-store.rb +34 -0
  81. data/test/test-gtk-widget.rb +33 -2
  82. metadata +57 -22
  83. data/lib/2.0/gtk3.so +0 -0
  84. data/lib/2.1/gtk3.so +0 -0
  85. data/sample/gtk-demo/button-box.rb +0 -82
@@ -0,0 +1,75 @@
1
+ # Copyright (c) 2015 Ruby-GNOME2 Project Team
2
+ # This program is licenced under the same licence as Ruby-GNOME2.
3
+ #
4
+ =begin
5
+ = Overlay/Decorative Overlay
6
+
7
+ Another example of an overlay with some decorative
8
+ and some interactive controls.
9
+ =end
10
+ module Overlay2Demo
11
+ def self.run_demo(_main_window)
12
+ window = Gtk::Window.new(:toplevel)
13
+ window.set_default_size(500, 510)
14
+ window.set_title("Decorative Overlay")
15
+
16
+ overlay = Gtk::Overlay.new
17
+
18
+ sw = Gtk::ScrolledWindow.new
19
+ sw.set_policy(:automatic, :automatic)
20
+
21
+ text = Gtk::TextView.new
22
+ buffer = text.buffer
23
+ buffer.text = "Dear Diary..."
24
+
25
+ tag = buffer.create_tag("top-margin", "pixels-above-lines" => 0)
26
+
27
+ word_end = buffer.start_iter
28
+ word_end.forward_word_end
29
+ buffer.apply_tag(tag, buffer.start_iter, word_end)
30
+
31
+ window.add(overlay)
32
+ overlay.add(sw)
33
+ sw.add(text)
34
+
35
+ image = Gtk::Image.new(:resource => "/overlay2/decor1.png")
36
+ overlay.add_overlay(image)
37
+ overlay.set_overlay_pass_through(image, true)
38
+ image.set_halign(:start)
39
+ image.set_valign(:start)
40
+
41
+ image = Gtk::Image.new(:resource => "/overlay2/decor2.png")
42
+ overlay.add_overlay(image)
43
+ overlay.set_overlay_pass_through(image, true)
44
+ image.set_halign(:end)
45
+ image.set_valign(:end)
46
+
47
+ adjustment = Gtk::Adjustment.new(0, 0, 100, 1, 1, 0)
48
+ adjustment.signal_connect "value-changed" do |widget|
49
+ value = widget.value
50
+ text.set_left_margin(value)
51
+ tag.set_property("pixels-above-lines", value)
52
+ end
53
+
54
+ scale = Gtk::Scale.new(:horizontal, adjustment)
55
+ scale.set_draw_value(false)
56
+ scale.set_size_request(120, -1)
57
+ scale.set_margin_start(20)
58
+ scale.set_margin_end(20)
59
+ scale.set_margin_bottom(20)
60
+ overlay.add_overlay(scale)
61
+ scale.set_halign(:start)
62
+ scale.set_valign(:end)
63
+ scale.set_tooltip_text("Margin")
64
+
65
+ adjustment.value = 100
66
+ overlay.show_all
67
+
68
+ if !window.visible?
69
+ window.show_all
70
+ else
71
+ window.destroy
72
+ end
73
+ window
74
+ end
75
+ end
@@ -1,156 +1,137 @@
1
- # Copyright (c) 2003-2005 Ruby-GNOME2 Project Team
1
+ # Copyright (c) 2016 Ruby-GNOME2 Project Team
2
2
  # This program is licenced under the same licence as Ruby-GNOME2.
3
3
  #
4
- # $Id: panes.rb,v 1.5 2005/02/12 23:06:07 kzys Exp $
5
4
  =begin
6
- = Paned Widgets
5
+ = Paned Widgets
7
6
 
8
- The Gtk::HPaned and Gtk::VPaned Widgets divide their content
9
- area into two panes with a divider in between that the
10
- user can adjust. A separate child is placed into each
11
- pane.
7
+ The GtkPaned Widget divides its content area into two panes
8
+ with a divider in between that the user can adjust. A separate
9
+ child is placed into each pane. GtkPaned widgets can be split
10
+ horizontally or vertically.
12
11
 
13
- There are a number of options that can be set for each pane.
14
- This test contains both a horizontal (HPaned) and a vertical
15
- (VPaned) widget, and allows you to adjust the options for
16
- each side of each widget.
12
+ There are a number of options that can be set for each pane.
13
+ This test contains both a horizontal and a vertical GtkPaned
14
+ widget, and allows you to adjust the options for each side of
15
+ each widget.
17
16
  =end
18
- require 'common'
19
-
20
- module Demo
21
- class Panes < BasicWindow
22
- def initialize
23
- super('Panes')
24
- self.border_width = 0
17
+ module PanesDemo
18
+ def self.run_demo(main_window)
19
+ window = Gtk::Window.new(:toplevel)
20
+ window.screen = main_window.screen
21
+ window.title = "Paned Widgets"
22
+ window.border_width = 0
23
+
24
+ vbox = Gtk::Box.new(:vertical, 0)
25
+ window.add(vbox)
26
+
27
+ vpaned = Gtk::Paned.new(:vertical)
28
+ vbox.pack_start(vpaned, :expand => true, :fill => true, :padding => 0)
29
+ vpaned.border_width = 5
30
+
31
+ hpaned = Gtk::Paned.new(:horizontal)
32
+ vpaned.add1(hpaned)
33
+
34
+ frame = Gtk::Frame.new
35
+ frame.shadow_type = :in
36
+ frame.set_size_request(60, 60)
37
+ hpaned.add1(frame)
38
+
39
+ button = Gtk::Button.new(:label => "_Hi there", :use_underline => true)
40
+ frame.add(button)
41
+
42
+ frame = Gtk::Frame.new
43
+ frame.shadow_type = :in
44
+ frame.set_size_request(80, 60)
45
+ hpaned.add2(frame)
46
+
47
+ frame = Gtk::Frame.new
48
+ frame.shadow_type = :in
49
+ frame.set_size_request(60, 80)
50
+ vpaned.add2(frame)
51
+
52
+ # Now create toggle buttons to control sizing
53
+ buttons = create_pane_options(hpaned,
54
+ "Horizontal",
55
+ "Left",
56
+ "Right")
57
+ vbox.pack_start(buttons, :expand => false, :fill => false, :padding => 0)
58
+ buttons = create_pane_options(hpaned,
59
+ "Vertical",
60
+ "Top",
61
+ "Bottom")
62
+ vbox.pack_start(buttons, :expand => false, :fill => false, :padding => 0)
63
+ vbox.show_all
64
+
65
+ if !window.visible?
66
+ window.show_all
67
+ else
68
+ window.destroy
69
+ end
70
+ window
71
+ end
25
72
 
26
- vbox = Gtk::VBox.new(false, 0)
27
- add(vbox)
73
+ def self.create_pane_options(paned, frame_label, label1, label2)
74
+ child1 = paned.child1
75
+ child2 = paned.child2
28
76
 
29
- vpaned = Gtk::VPaned.new
30
- vbox.pack_start(vpaned, :expand => true, :fill => true, :padding => 0)
31
- vpaned.border_width = 5
77
+ frame = Gtk::Frame.new(frame_label)
78
+ frame.border_width = 4
32
79
 
33
- hpaned = Gtk::HPaned.new
34
- vpaned.add1(hpaned)
80
+ table = Gtk::Grid.new
81
+ frame.add(table)
35
82
 
36
- frame = Gtk::Frame.new
37
- frame.shadow_type = :in
38
- frame.set_size_request(60, 60)
39
- hpaned.add1(frame)
83
+ label = Gtk::Label.new(label1)
84
+ table.attach(label, 0, 0, 1, 1)
40
85
 
41
- button = Gtk::Button.new('_Hi there', true)
42
- frame.add(button)
86
+ check_button = Gtk::CheckButton.new("_Resize")
87
+ check_button.use_underline = true
88
+ table.attach(check_button, 0, 1, 1, 1)
89
+ check_button.signal_connect "toggled" do
90
+ resize = paned.child_get_property(child1, "resize")
91
+ shrink = paned.child_get_property(child1, "shrink")
43
92
 
44
- frame = Gtk::Frame.new
45
- frame.shadow_type = :in
46
- frame.set_size_request(80, 60)
47
- hpaned.add2(frame)
93
+ paned.remove(child1)
94
+ paned.pack1(child1, :resize => !resize, :shrink => shrink)
95
+ end
48
96
 
49
- frame = Gtk::Frame.new
50
- frame.shadow_type = :in
51
- frame.set_size_request(60, 80)
52
- vpaned.add2(frame)
97
+ check_button = Gtk::CheckButton.new("_Shrink")
98
+ check_button.use_underline = true
99
+ table.attach(check_button, 0, 2, 1, 1)
100
+ check_button.active = true
101
+ check_button.signal_connect "toggled" do
102
+ resize = paned.child_get_property(child1, "resize")
103
+ shrink = paned.child_get_property(child1, "shrink")
53
104
 
54
- # Now create toggle buttons to control sizing
105
+ paned.remove(child1)
106
+ paned.pack1(child1, :resize => resize, :shrink => !shrink)
107
+ end
55
108
 
56
- vbox.pack_start(create_pane_options(hpaned,
57
- 'Horizontal', 'Left', 'Right'),
58
- :expand => false, :fill => false, :padding => 0)
109
+ label = Gtk::Label.new(label2)
110
+ table.attach(label, 1, 0, 1, 1)
59
111
 
60
- vbox.pack_start(create_pane_options(vpaned,
61
- 'Vertical', 'Top', 'Bottom'),
62
- :expand => false, :fill => false, :padding => 0)
63
- end
112
+ check_button = Gtk::CheckButton.new("_Resize")
113
+ check_button.use_underline = true
114
+ table.attach(check_button, 1, 1, 1, 1)
115
+ check_button.active = true
116
+ check_button.signal_connect "toggled" do
117
+ resize = paned.child_get_property(child2, "resize")
118
+ shrink = paned.child_get_property(child2, "shrink")
64
119
 
65
- def create_pane_options(paned, frame_label, label1, label2)
66
- frame = Gtk::Frame.new(frame_label)
67
- frame.border_width = 4
68
-
69
- table = Gtk::Table.new(3, 2, true)
70
- frame.add(table)
71
-
72
- label = Gtk::Label.new(label1)
73
- table.attach_defaults(label, 0, 1, 0, 1)
74
-
75
- check_button = Gtk::CheckButton.new('_Resize', true)
76
- table.attach_defaults(check_button, 0, 1, 1, 2)
77
- check_button.signal_connect('toggled') do
78
- toggle_resize(paned.child1)
79
- end
80
-
81
- check_button = Gtk::CheckButton.new('_Shrink', true)
82
- table.attach_defaults(check_button, 0, 1, 2, 3)
83
- check_button.active = true
84
- check_button.signal_connect('toggled') do
85
- toggle_shrink(paned.child1)
86
- end
87
-
88
- label = Gtk::Label.new(label2)
89
- table.attach_defaults(label, 1, 2, 0, 1)
90
-
91
- check_button = Gtk::CheckButton.new('_Resize')
92
- table.attach_defaults(check_button, 1, 2, 1, 2)
93
- check_button.active = true
94
- check_button.signal_connect('toggled') do
95
- toggle_resize(paned.child2)
96
- end
97
-
98
- check_button = Gtk::CheckButton.new('_Shrink')
99
- table.attach_defaults(check_button, 1, 2, 2, 3)
100
- check_button.active = true
101
- check_button.signal_connect('toggled') do
102
- toggle_shrink(paned.child2)
103
- end
104
-
105
- return frame
120
+ paned.remove(child2)
121
+ paned.pack2(child2, :resize => !resize, :shrink => shrink)
106
122
  end
107
123
 
108
- def toggle_resize(child)
109
- paned = child.parent
110
- is_child1 = (child == paned.child1)
111
-
112
- resize = if is_child1
113
- paned.child1_resize?
114
- else
115
- paned.child2_resize?
116
- end
117
-
118
- shrink = if is_child1
119
- paned.child1_shrink?
120
- else
121
- paned.child2_shrink?
122
- end
123
-
124
- child.parent.remove(child)
125
- if is_child1
126
- paned.pack1(child, !resize, shrink)
127
- else
128
- paned.pack2(child, !resize, shrink)
129
- end
130
- end
124
+ check_button = Gtk::CheckButton.new("_Shrink")
125
+ check_button.use_underline = true
126
+ table.attach(check_button, 1, 2, 1, 1)
127
+ check_button.active = true
128
+ check_button.signal_connect "toggled" do
129
+ resize = paned.child_get_property(child2, "resize")
130
+ shrink = paned.child_get_property(child2, "shrink")
131
131
 
132
- def toggle_shrink(child)
133
- paned = child.parent
134
- is_child1 = (child == paned.child1)
135
-
136
- resize = if is_child1
137
- paned.child1_resize?
138
- else
139
- paned.child2_resize?
140
- end
141
-
142
- shrink = if is_child1
143
- paned.child1_shrink?
144
- else
145
- paned.child2_shrink?
146
- end
147
-
148
- child.parent.remove(child)
149
- if is_child1
150
- paned.pack1(child, resize, !shrink)
151
- else
152
- paned.pack2(child, resize, !shrink)
153
- end
132
+ paned.remove(child2)
133
+ paned.pack2(child2, :resize => resize, :shrink => !shrink)
154
134
  end
135
+ frame
155
136
  end
156
137
  end
@@ -0,0 +1,70 @@
1
+ # Copyright (c) 2015 Ruby-GNOME2 Project Team
2
+ # This program is licenced under the same licence as Ruby-GNOME2.
3
+ #
4
+ =begin
5
+ = Pickers
6
+
7
+ These widgets are mainly intended for use in preference dialogs.
8
+ They allow to select colors, fonts, files, directories and applications.
9
+ =end
10
+ module PickersDemo
11
+ def self.run_demo(main_window)
12
+ window = Gtk::Window.new(:toplevel)
13
+ window.screen = main_window.screen
14
+ window.set_title("Pickers")
15
+ window.set_border_width(10)
16
+
17
+ table = Gtk::Grid.new
18
+ table.set_row_spacing(3)
19
+ table.set_column_spacing(10)
20
+ window.add(table)
21
+
22
+ label = Gtk::Label.new("Color:")
23
+ label.set_halign(:start)
24
+ label.set_valign(:center)
25
+ label.set_hexpand(true)
26
+ picker = Gtk::ColorButton.new
27
+ table.attach(label, 0, 0, 1, 1)
28
+ table.attach(picker, 1, 0, 1, 1)
29
+
30
+ label = Gtk::Label.new("Font:")
31
+ label.set_halign(:start)
32
+ label.set_valign(:center)
33
+ label.set_hexpand(true)
34
+ picker = Gtk::FontButton.new
35
+ table.attach(label, 0, 1, 1, 1)
36
+ table.attach(picker, 1, 1, 1, 1)
37
+
38
+ label = Gtk::Label.new("File:")
39
+ label.set_halign(:start)
40
+ label.set_valign(:center)
41
+ label.set_hexpand(true)
42
+ picker = Gtk::FileChooserButton.new("Pick a file", :open)
43
+ table.attach(label, 0, 2, 1, 1)
44
+ table.attach(picker, 1, 2, 1, 1)
45
+
46
+ label = Gtk::Label.new("Folder:")
47
+ label.set_halign(:start)
48
+ label.set_valign(:center)
49
+ label.set_hexpand(true)
50
+ picker = Gtk::FileChooserButton.new("Pick a folder", :select_folder)
51
+ table.attach(label, 0, 3, 1, 1)
52
+ table.attach(picker, 1, 3, 1, 1)
53
+
54
+ label = Gtk::Label.new("Mail:")
55
+ label.set_halign(:start)
56
+ label.set_valign(:center)
57
+ label.set_hexpand(true)
58
+ picker = Gtk::AppChooserButton.new("x-scheme-handler/mailto")
59
+ picker.set_show_dialog_item(true)
60
+ table.attach(label, 0, 4, 1, 1)
61
+ table.attach(picker, 1, 4, 1, 1)
62
+
63
+ if !window.visible?
64
+ window.show_all
65
+ else
66
+ window.destroy
67
+ end
68
+ window
69
+ end
70
+ end
@@ -0,0 +1,110 @@
1
+ # Copyright (c) 2015 Ruby-GNOME2 Project Team
2
+ # This program is licenced under the same licence as Ruby-GNOME2.
3
+ #
4
+ =begin
5
+ = Popovers
6
+
7
+ A bubble-like window containing contextual information or options.
8
+ GtkPopovers can be attached to any widget, and will be displayed
9
+ within the same window, but on top of all its content.
10
+ =end
11
+ module PopoverDemo
12
+ def self.run_demo(main_window)
13
+ window = Gtk::Window.new(:toplevel)
14
+ window.screen = main_window.screen
15
+ box = Gtk::Box.new(:vertical, 24)
16
+ box.border_width = 24
17
+ window.add(box)
18
+
19
+ widget = Gtk::ToggleButton.new(:label => "Button")
20
+ toggle_popover = create_popover(widget,
21
+ Gtk::Label.new(
22
+ "This popover does not grab input"
23
+ ),
24
+ :top)
25
+ toggle_popover.modal = false
26
+ widget.signal_connect "toggled" do |button|
27
+ toggle_popover.visible = button.active?
28
+ end
29
+
30
+ box.add(widget)
31
+
32
+ widget = CustomEntry.new
33
+ entry_popover = create_complex_popover(widget, :top)
34
+ widget.set_icon_from_icon_name(:primary, "edit-find")
35
+ widget.set_icon_from_icon_name(:secondary, "edit-clear")
36
+ widget.signal_connect "icon-press" do |entry, icon_pos, _event|
37
+ rect = entry.get_icon_area(icon_pos)
38
+ entry_popover.set_pointing_to(rect)
39
+ entry_popover.show
40
+ entry.popover_icon_pos = icon_pos
41
+ end
42
+
43
+ widget.signal_connect "size-allocate" do |entry, _allocation|
44
+ if entry_popover.visible?
45
+ popover_pos = entry.popover_icon_pos
46
+ rect = entry.get_icon_area(popover_pos)
47
+ entry_popover.set_pointing_to(rect)
48
+ end
49
+ end
50
+
51
+ box.add(widget)
52
+
53
+ widget = Gtk::Calendar.new
54
+ widget.signal_connect "day-selected" do |calendar|
55
+ event = Gtk.current_event
56
+ if event.type == :button_press
57
+ x, y = event.window.coords_to_parent(event.x,
58
+ event.y)
59
+ allocation = calendar.allocation
60
+ rect = Gdk::Rectangle.new(x - allocation.x,
61
+ y - allocation.y,
62
+ 1,
63
+ 1)
64
+ cal_popover = create_popover(calendar, CustomEntry.new, :bottom)
65
+ cal_popover.set_pointing_to(rect)
66
+ cal_popover.show
67
+ end
68
+ end
69
+
70
+ box.add(widget)
71
+
72
+ if !window.visible?
73
+ window.show_all
74
+ else
75
+ window.destroy
76
+ end
77
+ window
78
+ end
79
+
80
+ def self.create_popover(parent, child, pos)
81
+ popover = Gtk::Popover.new(parent)
82
+ popover.position = pos
83
+ popover.add(child)
84
+ popover.border_width = 6
85
+ child.show
86
+ popover
87
+ end
88
+
89
+ def self.create_complex_popover(parent, pos)
90
+ builder = Gtk::Builder.new(:resource => "/popover/popover.ui")
91
+ window = builder["window"]
92
+ content = window.child
93
+ content.parent.remove(content)
94
+ window.destroy
95
+ popover = create_popover(parent, content, pos)
96
+ popover.set_size_request(200, -1)
97
+ popover.vexpand = true
98
+ popover.margin_start = 10
99
+ popover.margin_end = 10
100
+ popover.margin_bottom = 10
101
+ popover
102
+ end
103
+
104
+ class CustomEntry < Gtk::Entry
105
+ attr_accessor :popover_icon_pos
106
+ def initialize
107
+ super
108
+ end
109
+ end
110
+ end