topinambour 1.0.11 → 1.0.12
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/README.md +121 -30
- data/bin/topinambour +12 -11
- data/data/app-menu.ui +8 -4
- data/data/gschemas.compiled +0 -0
- data/data/headerbar.ui +6 -64
- data/data/main-menu-popover.ui +131 -0
- data/data/prefs-dialog.ui +405 -505
- data/data/shortcuts.ui +130 -0
- data/data/topinambour.gresource +0 -0
- data/data/topinambour.gresource.xml +2 -19
- data/data/topinambour.gschema.xml +72 -0
- data/lib/actions.rb +12 -13
- data/lib/application.rb +73 -60
- data/lib/color_selector.rb +16 -14
- data/lib/font_selector.rb +8 -14
- data/lib/notebook.rb +22 -11
- data/lib/preferences.rb +159 -114
- data/lib/shortcuts.rb +6 -18
- data/lib/terminal.rb +76 -33
- data/lib/terminal_chooser.rb +247 -110
- data/lib/window.rb +48 -47
- metadata +7 -34
- data/data/#app-menu.ui# +0 -11
- data/data/application-exit-symbolic.svg +0 -32
- data/data/color-select-symbolic.svg +0 -34
- data/data/emblem-photos-symbolic.svg +0 -33
- data/data/font-select-symbolic.svg +0 -33
- data/data/pan-end-symbolic.svg +0 -31
- data/data/pan-start-symbolic.svg +0 -31
- data/data/tab-new-symbolic.svg +0 -34
- data/data/window-close-symbolic.svg +0 -28
- data/lib/css_handler.rb +0 -241
- data/lib/style_properties.rb +0 -171
data/lib/terminal_chooser.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright
|
1
|
+
# Copyright 2017 Cedric LE MOIGNE, cedlemo@gmx.com
|
2
2
|
# This file is part of Topinambour.
|
3
3
|
#
|
4
4
|
# Topinambour is free software: you can redistribute it and/or modify
|
@@ -17,59 +17,227 @@ class TopinambourTermChooser < Gtk::ScrolledWindow
|
|
17
17
|
def initialize(window)
|
18
18
|
super(nil, nil)
|
19
19
|
@window = window
|
20
|
+
@notebook = @window.notebook
|
21
|
+
@notebook.generate_tab_preview
|
22
|
+
initialize_list_box
|
23
|
+
initialize_hidden_list_box
|
24
|
+
initialize_main_box
|
25
|
+
configure_window
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def configure_window
|
20
31
|
set_halign(:end)
|
21
32
|
set_valign(:center)
|
22
33
|
set_policy(:never, :automatic)
|
23
34
|
set_name("terminal_chooser")
|
35
|
+
add(@box)
|
36
|
+
set_size_request(-1, @notebook.current.term.allocation.to_a[3] - 8)
|
37
|
+
end
|
24
38
|
|
25
|
-
|
26
|
-
generate_grid
|
27
|
-
fill_grid
|
28
|
-
|
39
|
+
def initialize_main_box
|
29
40
|
@box = Gtk::Box.new(:vertical, 4)
|
30
41
|
@box.name = "topinambour-overview-box"
|
31
|
-
@box.pack_start(
|
32
|
-
|
33
|
-
|
42
|
+
@box.pack_start(main_title, :expand => false, :fill => true, :padding => 6)
|
43
|
+
@box.pack_start(@listbox, :expand => true, :fill => true, :padding => 12)
|
44
|
+
@box.pack_start(box_title("Hidden terminals"),
|
45
|
+
:expand => false, :fill => true, :padding => 6)
|
46
|
+
@box.pack_start(@listbox_hidden, :expand => true, :fill => true,
|
47
|
+
:padding => 12)
|
34
48
|
end
|
35
49
|
|
36
|
-
|
50
|
+
def main_title
|
51
|
+
hbox = Gtk::Box.new(:horizontal, 6)
|
52
|
+
hbox.pack_start(box_title("Terminals"),
|
53
|
+
:expand => true, :fill => true, :padding => 6)
|
54
|
+
hbox.pack_start(box_close_button,
|
55
|
+
:expand => false, :fill => false, :padding => 6)
|
56
|
+
hbox
|
57
|
+
end
|
37
58
|
|
38
|
-
def
|
39
|
-
|
40
|
-
|
41
|
-
|
59
|
+
def box_title(label)
|
60
|
+
title = Gtk::Label.new("> #{label} :")
|
61
|
+
title.halign = :start
|
62
|
+
title
|
42
63
|
end
|
43
64
|
|
44
|
-
def
|
45
|
-
|
46
|
-
|
65
|
+
def box_close_button
|
66
|
+
button = Gtk::Button.new(:icon_name => "window-close-symbolic",
|
67
|
+
:size => :button)
|
68
|
+
button.relief = :none
|
69
|
+
button.signal_connect("clicked") { @window.exit_overlay_mode }
|
70
|
+
button
|
71
|
+
end
|
72
|
+
|
73
|
+
def initialize_list_box
|
74
|
+
@listbox = Gtk::ListBox.new
|
75
|
+
@listbox.margin = 12
|
76
|
+
@listbox.selection_mode = :single
|
77
|
+
fill_list_box
|
78
|
+
end
|
79
|
+
|
80
|
+
def initialize_hidden_list_box
|
81
|
+
@listbox_hidden = Gtk::ListBox.new
|
82
|
+
@listbox_hidden.placeholder = Gtk::Label.new("Hidden terminals")
|
83
|
+
@listbox_hidden.margin = 12
|
84
|
+
@listbox_hidden.show_all
|
85
|
+
@listbox_hidden.selection_mode = :single
|
86
|
+
fill_hidden_list_box
|
87
|
+
end
|
88
|
+
|
89
|
+
def fill_list_box
|
90
|
+
@listbox.signal_connect "row-selected" do |_list, row|
|
91
|
+
@notebook.current_page = row.nil? ? @notebook.children.size : row.index
|
92
|
+
end
|
93
|
+
|
94
|
+
@notebook.children.each_with_index do |child, i|
|
95
|
+
row = generate_list_box_row(child.term, i)
|
96
|
+
@listbox.insert(row, i)
|
97
|
+
end
|
98
|
+
current_row = @listbox.get_row_at_index(@notebook.current_page)
|
99
|
+
@listbox.select_row(current_row)
|
100
|
+
current_row.grab_focus
|
101
|
+
end
|
102
|
+
|
103
|
+
def fill_hidden_list_box
|
104
|
+
@notebook.hidden.each_with_index do |child, i|
|
105
|
+
row = generate_hidden_list_box_row(child.term, i)
|
106
|
+
@listbox_hidden.insert(row, i)
|
47
107
|
end
|
48
|
-
@grid.attach(generate_separator, 0, @window.notebook.n_pages, 2, 1)
|
49
|
-
button = generate_quit_button
|
50
|
-
@grid.attach(button, 0, @window.notebook.n_pages + 1, 2, 1)
|
51
108
|
end
|
52
109
|
|
53
|
-
def
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
button
|
58
|
-
|
110
|
+
def generate_list_box_row(term, index)
|
111
|
+
list_box_row = Gtk::ListBoxRow.new
|
112
|
+
hbox = _generate_hbox_list_box_row(list_box_row, term, index)
|
113
|
+
button = generate_hide_button(list_box_row)
|
114
|
+
hbox.pack_start(button, :expand => false, :fill => false, :padding => 6)
|
115
|
+
list_box_row.add(hbox)
|
116
|
+
end
|
117
|
+
|
118
|
+
def generate_hidden_list_box_row(term, index)
|
119
|
+
list_box_row = Gtk::ListBoxRow.new
|
120
|
+
hbox = _generate_hbox_list_box_row(list_box_row, term, index)
|
121
|
+
button = generate_show_button(list_box_row)
|
122
|
+
hbox.pack_start(button, :expand => false, :fill => false, :padding => 6)
|
123
|
+
list_box_row.add(hbox)
|
124
|
+
end
|
125
|
+
|
126
|
+
def _generate_hbox_list_box_row(list_box_row, term, index)
|
127
|
+
hbox = Gtk::Box.new(:horizontal, 6)
|
128
|
+
label = leaning_label(index)
|
129
|
+
hbox.pack_start(label, :expand => false, :fill => false, :padding => 6)
|
130
|
+
button = generate_preview_button(term, list_box_row)
|
59
131
|
add_drag_and_drop_functionalities(button)
|
132
|
+
hbox.pack_start(button, :expand => false, :fill => false, :padding => 6)
|
60
133
|
label = generate_label(term)
|
61
|
-
|
62
|
-
button =
|
63
|
-
|
134
|
+
hbox.pack_start(label, :expand => true, :fill => false, :padding => 6)
|
135
|
+
button = generate_hidden_list_box_row_close(list_box_row)
|
136
|
+
hbox.pack_start(button, :expand => false, :fill => false, :padding => 6)
|
137
|
+
hbox
|
64
138
|
end
|
65
139
|
|
66
|
-
def
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
140
|
+
def generate_hidden_list_box_row_close(list_box_row)
|
141
|
+
button = Gtk::Button.new(:icon_name => "window-close-symbolic",
|
142
|
+
:size => :button)
|
143
|
+
button.relief = :none
|
144
|
+
button.signal_connect "clicked" do
|
145
|
+
@notebook.hidden.delete_at(list_box_row.index)
|
146
|
+
list_box_row.destroy
|
72
147
|
end
|
148
|
+
button
|
149
|
+
end
|
150
|
+
|
151
|
+
def leaning_label(index)
|
152
|
+
label = Gtk::Label.new("tab. #{index + 1}")
|
153
|
+
label.angle = 45
|
154
|
+
label
|
155
|
+
end
|
156
|
+
|
157
|
+
def generate_preview_button(child, list_box_row)
|
158
|
+
button = Gtk::Button.new
|
159
|
+
button.image = generate_preview_image(child.preview)
|
160
|
+
button.signal_connect("clicked") do
|
161
|
+
if list_box_row.parent == @listbox
|
162
|
+
@notebook.current_page = list_box_row.index
|
163
|
+
end
|
164
|
+
end
|
165
|
+
button
|
166
|
+
end
|
167
|
+
|
168
|
+
def generate_preview_image(pixbuf)
|
169
|
+
# scaled_pix = pixbuf.scale(150, 75, :bilinear)
|
170
|
+
scaled_pix = pixbuf.scale(200, 100, :bilinear)
|
171
|
+
img = Gtk::Image.new(:pixbuf => scaled_pix)
|
172
|
+
img.show
|
173
|
+
img
|
174
|
+
end
|
175
|
+
|
176
|
+
def generate_hide_button(list_box_row)
|
177
|
+
button = Gtk::Button.new(:label => "Hide")
|
178
|
+
button.valign = :center
|
179
|
+
button.vexpand = false
|
180
|
+
button.signal_connect "clicked" do
|
181
|
+
num = list_box_row.index
|
182
|
+
@notebook.n_pages == 1 ? @window.quit_gracefully : @notebook.hide(num)
|
183
|
+
list_box_row_bkp = change_button_hide_to_show(list_box_row)
|
184
|
+
@listbox.remove(list_box_row)
|
185
|
+
@listbox_hidden.insert(list_box_row_bkp, -1)
|
186
|
+
update_tabs_num_labels
|
187
|
+
end
|
188
|
+
button
|
189
|
+
end
|
190
|
+
|
191
|
+
def generate_show_button(list_box_row)
|
192
|
+
button = Gtk::Button.new(:label => "Show")
|
193
|
+
button.valign = :center
|
194
|
+
button.vexpand = false
|
195
|
+
button.signal_connect "clicked" do
|
196
|
+
tab_num = list_box_row.index
|
197
|
+
@window.notebook.unhide(tab_num)
|
198
|
+
list_box_row_bkp = change_button_show_to_hide(list_box_row)
|
199
|
+
@listbox_hidden.remove(list_box_row)
|
200
|
+
@listbox.insert(list_box_row_bkp, -1)
|
201
|
+
update_tabs_num_labels
|
202
|
+
end
|
203
|
+
button
|
204
|
+
end
|
205
|
+
|
206
|
+
def change_button_hide_to_show(list_box_row)
|
207
|
+
list_box_row_bkp = list_box_row
|
208
|
+
container = list_box_row_bkp.children[0]
|
209
|
+
hide_button = list_box_row_bkp.children[0].children[4]
|
210
|
+
container.remove(hide_button)
|
211
|
+
show_button = generate_show_button(list_box_row_bkp)
|
212
|
+
show_button.show
|
213
|
+
container.pack_start(show_button,
|
214
|
+
:expand => false, :fill => false, :padding => 6)
|
215
|
+
list_box_row_bkp
|
216
|
+
end
|
217
|
+
|
218
|
+
def change_button_show_to_hide(list_box_row)
|
219
|
+
list_box_row_bkp = list_box_row
|
220
|
+
container = list_box_row_bkp.children[0]
|
221
|
+
show_button = list_box_row_bkp.children[0].children[4]
|
222
|
+
container.remove(show_button)
|
223
|
+
hide_button = generate_hide_button(list_box_row_bkp)
|
224
|
+
hide_button.show
|
225
|
+
container.pack_start(hide_button,
|
226
|
+
:expand => false, :fill => false, :padding => 6)
|
227
|
+
list_box_row_bkp
|
228
|
+
end
|
229
|
+
|
230
|
+
def generate_close_tab_button(list_box_row)
|
231
|
+
button = Gtk::Button.new(:icon_name => "window-close-symbolic",
|
232
|
+
:size => :button)
|
233
|
+
button.relief = :none
|
234
|
+
button.signal_connect "clicked" do
|
235
|
+
tab = @notebook.get_nth_page(list_box_row.index)
|
236
|
+
@notebook.n_pages == 1 ? @window.quit_gracefully : @notebook.remove(tab)
|
237
|
+
list_box_row.destroy
|
238
|
+
update_tabs_num_labels
|
239
|
+
end
|
240
|
+
button
|
73
241
|
end
|
74
242
|
|
75
243
|
def add_label_popup_entry_icon_release(entry, label, term)
|
@@ -83,22 +251,38 @@ class TopinambourTermChooser < Gtk::ScrolledWindow
|
|
83
251
|
end
|
84
252
|
end
|
85
253
|
|
254
|
+
def add_label_popup_entry_activate_signal(entry, popup, label, term)
|
255
|
+
entry.signal_connect "activate" do |widget|
|
256
|
+
label.text = widget.buffer.text
|
257
|
+
term.custom_title = widget.buffer.text
|
258
|
+
popup.destroy
|
259
|
+
end
|
260
|
+
end
|
261
|
+
|
86
262
|
def generate_label_popup(label, event, term)
|
87
|
-
entry =
|
88
|
-
entry.max_width_chars = 50
|
89
|
-
entry.buffer.text = label.text
|
90
|
-
entry.set_icon_from_icon_name(:secondary, "edit-clear")
|
263
|
+
entry = initialize_entry_popup(label)
|
91
264
|
pp = Gtk::Popover.new
|
92
265
|
add_label_popup_entry_activate_signal(entry, pp, label, term)
|
93
266
|
add_label_popup_entry_icon_release(entry, label, term)
|
94
|
-
|
95
267
|
pp.add(entry)
|
268
|
+
set_popup_position(pp, label, event)
|
269
|
+
end
|
270
|
+
|
271
|
+
def initialize_entry_popup(label)
|
272
|
+
entry = Gtk::Entry.new
|
273
|
+
entry.max_width_chars = 50
|
274
|
+
entry.buffer.text = label.text
|
275
|
+
entry.set_icon_from_icon_name(:secondary, "edit-clear-symbolic")
|
276
|
+
entry
|
277
|
+
end
|
278
|
+
|
279
|
+
def set_popup_position(popup, label, event)
|
96
280
|
x, y = event.window.coords_to_parent(event.x, event.y)
|
97
281
|
rect = Gdk::Rectangle.new(x - label.allocation.x, y - label.allocation.y,
|
98
282
|
1, 1)
|
99
|
-
|
100
|
-
|
101
|
-
|
283
|
+
popup.pointing_to = rect
|
284
|
+
popup.relative_to = label
|
285
|
+
popup.show_all
|
102
286
|
end
|
103
287
|
|
104
288
|
def generate_label(term)
|
@@ -111,69 +295,23 @@ class TopinambourTermChooser < Gtk::ScrolledWindow
|
|
111
295
|
label
|
112
296
|
end
|
113
297
|
|
114
|
-
def
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
button.add(image)
|
120
|
-
button.hexpand = false
|
121
|
-
button.vexpand = false
|
122
|
-
button.valign = :start
|
123
|
-
button.halign = :center
|
124
|
-
button.signal_connect "button_press_event" do
|
125
|
-
n = @grid.child_get_property(button, "top-attach")
|
126
|
-
tab = @window.notebook.get_nth_page(n)
|
127
|
-
if @window.notebook.n_pages == 1
|
128
|
-
@window.quit_gracefully
|
129
|
-
else
|
130
|
-
remove_tab(tab, n)
|
131
|
-
end
|
298
|
+
def update_tabs_num_labels
|
299
|
+
@listbox.children.each_with_index do |row, i|
|
300
|
+
hbox = row.children[0]
|
301
|
+
label = hbox.children[0]
|
302
|
+
label.text = "tab. #{i + 1}"
|
132
303
|
end
|
133
|
-
|
304
|
+
update_hidden_tabs_num_labels
|
134
305
|
end
|
135
306
|
|
136
|
-
def
|
137
|
-
@
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
end
|
142
|
-
|
143
|
-
def update_tab_num_label(range)
|
144
|
-
range.each do |j|
|
145
|
-
@grid.get_child_at(0, j).text = "tab. #{(j + 1)}"
|
307
|
+
def update_hidden_tabs_num_labels
|
308
|
+
@listbox_hidden.children.each_with_index do |row, i|
|
309
|
+
hbox = row.children[0]
|
310
|
+
label = hbox.children[0]
|
311
|
+
label.text = "tab. #{i + 1}"
|
146
312
|
end
|
147
313
|
end
|
148
314
|
|
149
|
-
def generate_preview_button(child, i)
|
150
|
-
button = Gtk::Button.new
|
151
|
-
button.image = generate_preview_image(child.preview)
|
152
|
-
button.signal_connect("clicked") { @window.notebook.current_page = i }
|
153
|
-
button
|
154
|
-
end
|
155
|
-
|
156
|
-
def generate_preview_image(pixbuf)
|
157
|
-
scaled_pix = pixbuf.scale(150, 75, :bilinear)
|
158
|
-
img = Gtk::Image.new(:pixbuf => scaled_pix)
|
159
|
-
img.show
|
160
|
-
img
|
161
|
-
end
|
162
|
-
|
163
|
-
def generate_separator
|
164
|
-
Gtk::Separator.new(:horizontal)
|
165
|
-
end
|
166
|
-
|
167
|
-
def generate_quit_button
|
168
|
-
button = Gtk::EventBox.new
|
169
|
-
button.tooltip_text = "Quit Topinambour"
|
170
|
-
image = Gtk::Image.new(:icon_name => "application-exit-symbolic",
|
171
|
-
:size => :dialog)
|
172
|
-
button.add(image)
|
173
|
-
button.signal_connect("button_press_event") { @window.quit_gracefully }
|
174
|
-
button
|
175
|
-
end
|
176
|
-
|
177
315
|
def add_drag_and_drop_functionalities(button)
|
178
316
|
add_dnd_source(button)
|
179
317
|
add_dnd_destination(button)
|
@@ -182,7 +320,7 @@ class TopinambourTermChooser < Gtk::ScrolledWindow
|
|
182
320
|
def add_dnd_source(button)
|
183
321
|
button.drag_source_set(Gdk::ModifierType::BUTTON1_MASK |
|
184
322
|
Gdk::ModifierType::BUTTON2_MASK,
|
185
|
-
[["
|
323
|
+
[["drag_term", Gtk::TargetFlags::SAME_APP, 12_345]],
|
186
324
|
Gdk::DragAction::COPY |
|
187
325
|
Gdk::DragAction::MOVE)
|
188
326
|
# Drag source signals
|
@@ -198,7 +336,7 @@ class TopinambourTermChooser < Gtk::ScrolledWindow
|
|
198
336
|
end
|
199
337
|
|
200
338
|
button.signal_connect("drag-data-get") do |widget, _, selection_data, _, _|
|
201
|
-
index =
|
339
|
+
index = widget.parent.parent.index
|
202
340
|
selection_data.set(Gdk::Selection::TYPE_INTEGER, index.to_s)
|
203
341
|
end
|
204
342
|
# button.signal_connect "drag-data-delete" do
|
@@ -212,7 +350,7 @@ class TopinambourTermChooser < Gtk::ScrolledWindow
|
|
212
350
|
def add_dnd_destination(button)
|
213
351
|
button.drag_dest_set(Gtk::DestDefaults::MOTION |
|
214
352
|
Gtk::DestDefaults::HIGHLIGHT,
|
215
|
-
[["
|
353
|
+
[["drag_term", :same_app, 12_345]],
|
216
354
|
Gdk::DragAction::COPY |
|
217
355
|
Gdk::DragAction::MOVE)
|
218
356
|
|
@@ -229,10 +367,11 @@ class TopinambourTermChooser < Gtk::ScrolledWindow
|
|
229
367
|
end
|
230
368
|
|
231
369
|
button.signal_connect("drag-data-received") do |widget, context, _x, _y, selection_data|
|
232
|
-
index =
|
370
|
+
index = widget.parent.parent.index
|
233
371
|
index_of_dragged_object = index
|
234
372
|
context.targets.each do |target|
|
235
|
-
next unless target.name == "
|
373
|
+
next unless target.name == "drag_term" ||
|
374
|
+
selection_data.type == :type_integer
|
236
375
|
data_len = selection_data.data.size
|
237
376
|
index_of_dragged_object = selection_data.data.pack("C#{data_len}").to_i
|
238
377
|
end
|
@@ -246,12 +385,10 @@ class TopinambourTermChooser < Gtk::ScrolledWindow
|
|
246
385
|
dragged = @window.notebook.get_nth_page(src_index)
|
247
386
|
@window.notebook.reorder_child(dragged, dest_index)
|
248
387
|
@window.notebook.children.each_with_index do |child, i|
|
249
|
-
@
|
250
|
-
|
388
|
+
list_box_row = @listbox.get_row_at_index(i)
|
389
|
+
row_h_box = list_box_row.children[0]
|
390
|
+
row_h_box.children[1].image = generate_preview_image(child.term.preview)
|
391
|
+
row_h_box.children[2].text = child.term.terminal_title
|
251
392
|
end
|
252
393
|
end
|
253
|
-
|
254
|
-
def grid_line_of(widget)
|
255
|
-
@grid.child_get_property(widget, "top-attach")
|
256
|
-
end
|
257
394
|
end
|
data/lib/window.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright 2015-
|
1
|
+
# Copyright 2015-2017 Cedric LE MOIGNE, cedlemo@gmx.com
|
2
2
|
# This file is part of Topinambour.
|
3
3
|
#
|
4
4
|
# Topinambour is free software: you can redistribute it and/or modify
|
@@ -14,14 +14,13 @@
|
|
14
14
|
# You should have received a copy of the GNU General Public License
|
15
15
|
# along with Topinambour. If not, see <http://www.gnu.org/licenses/>.
|
16
16
|
|
17
|
-
class TopinambourWindow
|
17
|
+
class TopinambourWindow < Gtk::ApplicationWindow
|
18
18
|
attr_reader :notebook, :bar, :overlay, :current_label, :current_tab
|
19
|
-
attr_accessor :shell
|
20
19
|
def initialize(application)
|
21
|
-
super(
|
20
|
+
super(application)
|
22
21
|
set_icon_name("utilities-terminal-symbolic")
|
23
22
|
set_name("topinambour-window")
|
24
|
-
|
23
|
+
load_settings
|
25
24
|
set_position(:center)
|
26
25
|
create_header_bar
|
27
26
|
create_containers
|
@@ -29,20 +28,19 @@ class TopinambourWindow
|
|
29
28
|
signal_connect "key-press-event" do |widget, event|
|
30
29
|
TopinambourShortcuts.handle_key_press(widget, event)
|
31
30
|
end
|
32
|
-
signal_connect "scroll-event" do |widget, event|
|
33
|
-
TopinambourShortcuts.handle_scroll(widget, event)
|
34
|
-
end
|
35
31
|
end
|
36
32
|
|
37
|
-
def add_terminal(cmd =
|
33
|
+
def add_terminal(cmd = nil)
|
34
|
+
cmd = cmd || application.settings["default-shell"]
|
35
|
+
|
38
36
|
exit_overlay_mode
|
39
37
|
working_dir = nil
|
40
38
|
working_dir = @notebook.current.term.pid_dir if @notebook.current
|
41
|
-
|
42
39
|
terminal = TopinambourTabTerm.new(cmd, working_dir)
|
43
40
|
terminal.show_all
|
44
41
|
|
45
42
|
@notebook.append_page(terminal)
|
43
|
+
terminal.term.load_settings
|
46
44
|
@notebook.set_tab_reorderable(terminal, true)
|
47
45
|
@notebook.set_page(@notebook.n_pages - 1)
|
48
46
|
@notebook.current.term.grab_focus
|
@@ -78,10 +76,6 @@ class TopinambourWindow
|
|
78
76
|
toggle_overlay(TopinambourTermChooser)
|
79
77
|
end
|
80
78
|
|
81
|
-
def show_terminal_chooser2
|
82
|
-
toggle_overlay(TopinambourTermChooserb)
|
83
|
-
end
|
84
|
-
|
85
79
|
def exit_overlay_mode
|
86
80
|
@overlay.children[1].destroy if in_overlay_mode?
|
87
81
|
end
|
@@ -94,7 +88,7 @@ class TopinambourWindow
|
|
94
88
|
"license" => "This program is licenced under the licence GPL-3.0 and later.",
|
95
89
|
"logo_icon_name" => "utilities-terminal-symbolic",
|
96
90
|
"program_name" => "Topinambour",
|
97
|
-
"version" => "1.0.
|
91
|
+
"version" => "1.0.12",
|
98
92
|
"website" => "https://github.com/cedlemo/topinambour",
|
99
93
|
"website_label" => "Topinambour github repository"
|
100
94
|
)
|
@@ -126,8 +120,22 @@ class TopinambourWindow
|
|
126
120
|
end
|
127
121
|
end
|
128
122
|
|
123
|
+
def show_shortcuts
|
124
|
+
resource_file = "/com/github/cedlemo/topinambour/shortcuts.ui"
|
125
|
+
builder = Gtk::Builder.new(:resource => resource_file)
|
126
|
+
shortcuts_win = builder["shortcuts-window"]
|
127
|
+
shortcuts_win.transient_for = self
|
128
|
+
shortcuts_win.show
|
129
|
+
end
|
130
|
+
|
129
131
|
private
|
130
132
|
|
133
|
+
def load_settings
|
134
|
+
height = application.settings["height"]
|
135
|
+
width = application.settings["width"]
|
136
|
+
resize(width, height)
|
137
|
+
end
|
138
|
+
|
131
139
|
def add_overlay(widget)
|
132
140
|
@overlay.add_overlay(widget)
|
133
141
|
@overlay.set_overlay_pass_through(widget, false)
|
@@ -146,13 +154,17 @@ class TopinambourWindow
|
|
146
154
|
headerbar = builder["headerbar"]
|
147
155
|
headerbar.name = "topinambour-headerbar"
|
148
156
|
set_titlebar(headerbar)
|
157
|
+
# Text is modified when notebook switch tabs or
|
158
|
+
# Vte::Terminal command change and if it is the current Vte.
|
149
159
|
@current_label = builder["current_label"]
|
150
160
|
current_label_signals
|
161
|
+
# Value is changed when notebook switch tabs or notebook add tab.
|
151
162
|
@current_tab = builder["current_tab"]
|
163
|
+
headerbar.remove(@current_label)
|
164
|
+
headerbar.custom_title = @current_label
|
152
165
|
next_prev_new_signals(builder)
|
153
|
-
|
166
|
+
overview_signal(builder)
|
154
167
|
main_menu_signal(builder)
|
155
|
-
reload_css_conf_signal(builder)
|
156
168
|
end
|
157
169
|
|
158
170
|
def current_label_signals
|
@@ -162,9 +174,7 @@ class TopinambourWindow
|
|
162
174
|
end
|
163
175
|
|
164
176
|
@current_label.signal_connect "icon-release" do |entry, position|
|
165
|
-
if position == :
|
166
|
-
close_current_tab
|
167
|
-
elsif position == :secondary
|
177
|
+
if position == :secondary
|
168
178
|
@notebook.current.term.custom_title = nil
|
169
179
|
entry.text = @notebook.current.term.window_title
|
170
180
|
end
|
@@ -185,44 +195,35 @@ class TopinambourWindow
|
|
185
195
|
end
|
186
196
|
end
|
187
197
|
|
188
|
-
def
|
198
|
+
def overview_signal(builder)
|
189
199
|
builder["term_overv_button"].signal_connect "clicked" do
|
190
200
|
show_terminal_chooser
|
191
201
|
end
|
192
|
-
|
193
|
-
builder["font_sel_button"].signal_connect "clicked" do
|
194
|
-
show_font_selector
|
195
|
-
end
|
196
|
-
|
197
|
-
builder["colors_sel_button"].signal_connect "clicked" do
|
198
|
-
show_color_selector
|
199
|
-
end
|
200
202
|
end
|
201
203
|
|
202
204
|
def main_menu_signal(builder)
|
203
|
-
builder["menu_button"]
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
rect = Gdk::Rectangle.new(x - button.allocation.x,
|
211
|
-
y - button.allocation.y,
|
212
|
-
1, 1)
|
213
|
-
menu.set_pointing_to(rect)
|
214
|
-
menu.show
|
215
|
-
end
|
205
|
+
button = builder["menu_button"]
|
206
|
+
ui_file = "/com/github/cedlemo/topinambour/main-menu-popover.ui"
|
207
|
+
menu_builder = Gtk::Builder.new(:resource => ui_file)
|
208
|
+
main_menu = menu_builder["main_menu_popover"]
|
209
|
+
button.set_popover(main_menu)
|
210
|
+
button.popover.modal = true
|
211
|
+
add_theme_menu_buttons_signals(menu_builder)
|
216
212
|
end
|
217
213
|
|
218
|
-
def
|
219
|
-
|
220
|
-
button.signal_connect "clicked" do
|
214
|
+
def add_theme_menu_buttons_signals(builder)
|
215
|
+
builder["css_reload_button"].signal_connect "clicked" do
|
221
216
|
application.reload_css_config
|
222
|
-
notebook.each { |tab| tab.term.load_properties }
|
223
|
-
load_properties
|
224
217
|
queue_draw
|
225
218
|
end
|
219
|
+
|
220
|
+
builder["font_sel_button"].signal_connect "clicked" do
|
221
|
+
show_font_selector
|
222
|
+
end
|
223
|
+
|
224
|
+
builder["colors_sel_button"].signal_connect "clicked" do
|
225
|
+
show_color_selector
|
226
|
+
end
|
226
227
|
end
|
227
228
|
|
228
229
|
def toggle_overlay(klass)
|