ssh-hull 1.0.0
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 +7 -0
- data/.github/workflows/ci.yml +44 -0
- data/.gitignore +27 -0
- data/.rubocop.yml +62 -0
- data/.tool-versions +1 -0
- data/Gemfile +5 -0
- data/Gemfile.lock +142 -0
- data/LICENSE +19 -0
- data/README.md +12 -0
- data/Rakefile +7 -0
- data/bin/bundle +114 -0
- data/bin/rake +29 -0
- data/bin/rspec +29 -0
- data/bin/rubocop +29 -0
- data/bomb +12 -0
- data/config/locales/en.yml +71 -0
- data/config/locales/fr.yml +71 -0
- data/exe/ssh-hull +12 -0
- data/exe/ssh-tunnel +1 -0
- data/lib/ssh-hull/cli.rb +113 -0
- data/lib/ssh-hull/logger.rb +6 -0
- data/lib/ssh-hull/ui/application.rb +47 -0
- data/lib/ssh-hull/ui/forms/application_form.rb +69 -0
- data/lib/ssh-hull/ui/forms/host_form.rb +27 -0
- data/lib/ssh-hull/ui/forms/tunnel_form.rb +31 -0
- data/lib/ssh-hull/ui/helpers/application_window_helper.rb +233 -0
- data/lib/ssh-hull/ui/helpers/common/form_helper.rb +169 -0
- data/lib/ssh-hull/ui/helpers/common/minimize_helper.rb +46 -0
- data/lib/ssh-hull/ui/helpers/common/modal_helper.rb +43 -0
- data/lib/ssh-hull/ui/helpers/common/toolbar_helper.rb +106 -0
- data/lib/ssh-hull/ui/helpers/common/translation_helper.rb +18 -0
- data/lib/ssh-hull/ui/helpers/common/tree_view_helper.rb +40 -0
- data/lib/ssh-hull/ui/helpers/host_window_helper.rb +230 -0
- data/lib/ssh-hull/ui/helpers/tunnel_window_helper.rb +96 -0
- data/lib/ssh-hull/ui/models/config.rb +82 -0
- data/lib/ssh-hull/ui/models/host.rb +90 -0
- data/lib/ssh-hull/ui/models/tunnel.rb +118 -0
- data/lib/ssh-hull/ui/status_icon.rb +45 -0
- data/lib/ssh-hull/ui/windows/about_window.rb +32 -0
- data/lib/ssh-hull/ui/windows/application_window.rb +42 -0
- data/lib/ssh-hull/ui/windows/hosts/delete_window.rb +56 -0
- data/lib/ssh-hull/ui/windows/hosts/edit_window.rb +39 -0
- data/lib/ssh-hull/ui/windows/hosts/new_window.rb +45 -0
- data/lib/ssh-hull/ui/windows/tunnels/delete_window.rb +57 -0
- data/lib/ssh-hull/ui/windows/tunnels/edit_window.rb +39 -0
- data/lib/ssh-hull/ui/windows/tunnels/new_window.rb +45 -0
- data/lib/ssh-hull/version.rb +17 -0
- data/lib/ssh-tunnel.rb +94 -0
- data/resources/gresources.xml +13 -0
- data/resources/ui/about_window.glade +48 -0
- data/resources/ui/application_window.glade +196 -0
- data/resources/ui/hosts/delete_window.glade +74 -0
- data/resources/ui/hosts/edit_window.glade +331 -0
- data/resources/ui/hosts/new_window.glade +328 -0
- data/resources/ui/tunnels/delete_window.glade +73 -0
- data/resources/ui/tunnels/edit_window.glade +305 -0
- data/resources/ui/tunnels/new_window.glade +305 -0
- data/snap/snapcraft.yaml +48 -0
- data/spec/factories/host.rb +22 -0
- data/spec/factories/tunnel.rb +16 -0
- data/spec/spec_helper.rb +31 -0
- data/spec/ssh_tunnel/ui/forms/host_form_spec.rb +103 -0
- data/spec/ssh_tunnel/ui/forms/tunnel_form_spec.rb +132 -0
- data/spec/ssh_tunnel/ui/models/host_spec.rb +116 -0
- data/spec/ssh_tunnel/ui/models/tunnel_spec.rb +43 -0
- data/spec/ssh_tunnel_spec.rb +45 -0
- data/ssh-hull.gemspec +38 -0
- metadata +320 -0
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SSHTunnel
|
4
|
+
module UI
|
5
|
+
module Windows
|
6
|
+
module Tunnels
|
7
|
+
class EditWindow < Gtk::Window
|
8
|
+
|
9
|
+
# Register the class in the GLib world
|
10
|
+
type_register
|
11
|
+
|
12
|
+
class << self
|
13
|
+
|
14
|
+
def init
|
15
|
+
# Set the template from the resources binary
|
16
|
+
set_template resource: '/com/ungtb10d/ssh-hull/ui/tunnels/edit_window.glade'
|
17
|
+
super
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
include SSHTunnel::UI::Helpers::TunnelWindowHelper
|
23
|
+
|
24
|
+
|
25
|
+
def initialize(application, window, tunnel)
|
26
|
+
super
|
27
|
+
|
28
|
+
# Set window title
|
29
|
+
set_title t('window.tunnel.edit', tunnel: @tunnel.name)
|
30
|
+
|
31
|
+
# Fills input fields
|
32
|
+
restore_form_values(@tunnel)
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SSHTunnel
|
4
|
+
module UI
|
5
|
+
module Windows
|
6
|
+
module Tunnels
|
7
|
+
class NewWindow < Gtk::Window
|
8
|
+
|
9
|
+
# Register the class in the GLib world
|
10
|
+
type_register
|
11
|
+
|
12
|
+
class << self
|
13
|
+
|
14
|
+
def init
|
15
|
+
# Set the template from the resources binary
|
16
|
+
set_template resource: '/com/ungtb10d/ssh-hull/ui/tunnels/new_window.glade'
|
17
|
+
super
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
include SSHTunnel::UI::Helpers::TunnelWindowHelper
|
23
|
+
|
24
|
+
|
25
|
+
def initialize(application, window, tunnel)
|
26
|
+
super
|
27
|
+
|
28
|
+
# Set window title
|
29
|
+
set_title t('window.tunnel.new')
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
|
36
|
+
def save_and_reload_view
|
37
|
+
@host.add_tunnel(@tunnel)
|
38
|
+
super
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SSHTunnel
|
4
|
+
|
5
|
+
def self.gem_version
|
6
|
+
Gem::Version.new VERSION::STRING
|
7
|
+
end
|
8
|
+
|
9
|
+
module VERSION
|
10
|
+
MAJOR = 1
|
11
|
+
MINOR = 0
|
12
|
+
TINY = 0
|
13
|
+
PRE = nil
|
14
|
+
|
15
|
+
STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
|
16
|
+
end
|
17
|
+
end
|
data/lib/ssh-tunnel.rb
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Require Gtk3 first. If it fails nothing works.
|
4
|
+
begin
|
5
|
+
require 'gtk3'
|
6
|
+
rescue GObjectIntrospection::RepositoryError::TypelibNotFound => _e
|
7
|
+
puts GObjectIntrospection::Repository.search_path
|
8
|
+
puts %x(ls -hal /usr/lib/x86_64-linux-gnu/girepository-1.0)
|
9
|
+
puts %x(ls -hal /usr/lib/girepository-1.0)
|
10
|
+
puts %x(ls -hal /usr/lib)
|
11
|
+
puts %x(ls -hal /)
|
12
|
+
require 'gtk3'
|
13
|
+
end
|
14
|
+
|
15
|
+
# Require other libs
|
16
|
+
require 'fileutils'
|
17
|
+
require 'json'
|
18
|
+
require 'yaml'
|
19
|
+
require 'singleton'
|
20
|
+
require 'optparse'
|
21
|
+
require 'tmpdir'
|
22
|
+
require 'securerandom'
|
23
|
+
require 'logger'
|
24
|
+
|
25
|
+
require 'i18n'
|
26
|
+
require 'i18n/backend/fallbacks'
|
27
|
+
|
28
|
+
require 'subprocess'
|
29
|
+
|
30
|
+
require 'active_model'
|
31
|
+
require 'active_support/concern'
|
32
|
+
require 'active_support/core_ext/hash'
|
33
|
+
require 'active_support/core_ext/string'
|
34
|
+
require 'ruby2_keywords'
|
35
|
+
|
36
|
+
require 'zeitwerk'
|
37
|
+
loader = Zeitwerk::Loader.for_gem
|
38
|
+
loader.inflector.inflect 'ssh-hull' => 'SSHTunnel'
|
39
|
+
loader.inflector.inflect 'ui' => 'UI'
|
40
|
+
loader.inflector.inflect 'cli' => 'CLI'
|
41
|
+
loader.setup
|
42
|
+
|
43
|
+
module SSHTunnel
|
44
|
+
|
45
|
+
ROOT_PATH = Pathname.new File.expand_path('..', __dir__)
|
46
|
+
|
47
|
+
def self.root_path
|
48
|
+
ROOT_PATH
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
def self.resources_path
|
53
|
+
@resources_path ||= root_path.join('resources')
|
54
|
+
end
|
55
|
+
|
56
|
+
|
57
|
+
def self.resources_xml
|
58
|
+
@resources_xml ||= resources_path.join('gresources.xml')
|
59
|
+
end
|
60
|
+
|
61
|
+
|
62
|
+
def self.resources_bin
|
63
|
+
@resources_bin ||= Pathname.new(Dir.tmpdir).join('gresources.bin')
|
64
|
+
end
|
65
|
+
|
66
|
+
|
67
|
+
def self.locales_path
|
68
|
+
root_path.join('config', 'locales', '*.yml')
|
69
|
+
end
|
70
|
+
|
71
|
+
|
72
|
+
def self.current_locale
|
73
|
+
Gtk.default_language.to_s.split('-').first.to_sym
|
74
|
+
end
|
75
|
+
|
76
|
+
|
77
|
+
def self.load_config(file)
|
78
|
+
@config = SSHTunnel::UI::Models::Config.new(file)
|
79
|
+
end
|
80
|
+
|
81
|
+
|
82
|
+
def self.config
|
83
|
+
@config
|
84
|
+
end
|
85
|
+
|
86
|
+
|
87
|
+
def self.logger
|
88
|
+
@logger ||= SSHTunnel::Logger.new($stdout, level: Logger::INFO)
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
|
+
|
93
|
+
# Eager load application
|
94
|
+
loader.eager_load
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<gresources>
|
3
|
+
<gresource prefix="/com/ungtb10d/ssh-hull">
|
4
|
+
<file preprocess="xml-stripblanks">ui/application_window.glade</file>
|
5
|
+
<file preprocess="xml-stripblanks">ui/about_window.glade</file>
|
6
|
+
<file preprocess="xml-stripblanks">ui/hosts/new_window.glade</file>
|
7
|
+
<file preprocess="xml-stripblanks">ui/hosts/edit_window.glade</file>
|
8
|
+
<file preprocess="xml-stripblanks">ui/hosts/delete_window.glade</file>
|
9
|
+
<file preprocess="xml-stripblanks">ui/tunnels/new_window.glade</file>
|
10
|
+
<file preprocess="xml-stripblanks">ui/tunnels/edit_window.glade</file>
|
11
|
+
<file preprocess="xml-stripblanks">ui/tunnels/delete_window.glade</file>
|
12
|
+
</gresource>
|
13
|
+
</gresources>
|
@@ -0,0 +1,48 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!-- Generated with glade 3.38.2 -->
|
3
|
+
<interface>
|
4
|
+
<requires lib="gtk+" version="3.18"/>
|
5
|
+
<template class="SSHTunnelUIWindowsAboutWindow" parent="GtkAboutDialog">
|
6
|
+
<property name="visible">True</property>
|
7
|
+
<property name="can-focus">False</property>
|
8
|
+
<property name="modal">True</property>
|
9
|
+
<property name="window-position">center</property>
|
10
|
+
<property name="type-hint">dialog</property>
|
11
|
+
<property name="gravity">center</property>
|
12
|
+
<property name="program-name">SSH Tunnel</property>
|
13
|
+
<property name="website">https://github.com/ungtb10d/ssh-hull</property>
|
14
|
+
<property name="website-label" translatable="yes">https://github.com/ungtb10d/ssh-hull</property>
|
15
|
+
<property name="authors">Anders Pippi Tednes <theblckswan@protonmail.com></property>
|
16
|
+
<property name="logo-icon-name">network-idle</property>
|
17
|
+
<property name="license-type">mit-x11</property>
|
18
|
+
<child internal-child="vbox">
|
19
|
+
<object class="GtkBox">
|
20
|
+
<property name="visible">True</property>
|
21
|
+
<property name="can-focus">False</property>
|
22
|
+
<property name="orientation">vertical</property>
|
23
|
+
<property name="spacing">2</property>
|
24
|
+
<child internal-child="action_area">
|
25
|
+
<object class="GtkButtonBox">
|
26
|
+
<property name="visible">True</property>
|
27
|
+
<property name="can-focus">False</property>
|
28
|
+
<property name="layout-style">end</property>
|
29
|
+
<child>
|
30
|
+
<placeholder/>
|
31
|
+
</child>
|
32
|
+
<child>
|
33
|
+
<placeholder/>
|
34
|
+
</child>
|
35
|
+
</object>
|
36
|
+
<packing>
|
37
|
+
<property name="expand">False</property>
|
38
|
+
<property name="fill">False</property>
|
39
|
+
<property name="position">0</property>
|
40
|
+
</packing>
|
41
|
+
</child>
|
42
|
+
<child>
|
43
|
+
<placeholder/>
|
44
|
+
</child>
|
45
|
+
</object>
|
46
|
+
</child>
|
47
|
+
</template>
|
48
|
+
</interface>
|
@@ -0,0 +1,196 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!-- Generated with glade 3.38.2 -->
|
3
|
+
<interface>
|
4
|
+
<requires lib="gtk+" version="3.18"/>
|
5
|
+
<template class="SSHTunnelUIWindowsApplicationWindow" parent="GtkApplicationWindow">
|
6
|
+
<property name="visible">True</property>
|
7
|
+
<property name="can-focus">False</property>
|
8
|
+
<property name="has-focus">True</property>
|
9
|
+
<property name="window-position">center</property>
|
10
|
+
<property name="default-width">1200</property>
|
11
|
+
<property name="default-height">600</property>
|
12
|
+
<property name="icon-name">network-idle</property>
|
13
|
+
<property name="gravity">center</property>
|
14
|
+
<child>
|
15
|
+
<object class="GtkBox" id="main_box">
|
16
|
+
<property name="visible">True</property>
|
17
|
+
<property name="can-focus">False</property>
|
18
|
+
<property name="orientation">vertical</property>
|
19
|
+
<child>
|
20
|
+
<object class="GtkMenuBar" id="menu_bar">
|
21
|
+
<property name="visible">True</property>
|
22
|
+
<property name="can-focus">False</property>
|
23
|
+
<child>
|
24
|
+
<object class="GtkMenuItem">
|
25
|
+
<property name="visible">True</property>
|
26
|
+
<property name="can-focus">False</property>
|
27
|
+
<property name="label" translatable="yes">File</property>
|
28
|
+
<property name="use-underline">True</property>
|
29
|
+
<child type="submenu">
|
30
|
+
<object class="GtkMenu">
|
31
|
+
<property name="visible">True</property>
|
32
|
+
<property name="can-focus">False</property>
|
33
|
+
<child>
|
34
|
+
<object class="GtkImageMenuItem" id="menu_quit">
|
35
|
+
<property name="label">gtk-quit</property>
|
36
|
+
<property name="visible">True</property>
|
37
|
+
<property name="can-focus">False</property>
|
38
|
+
<property name="use-underline">True</property>
|
39
|
+
<property name="use-stock">True</property>
|
40
|
+
</object>
|
41
|
+
</child>
|
42
|
+
</object>
|
43
|
+
</child>
|
44
|
+
</object>
|
45
|
+
</child>
|
46
|
+
<child>
|
47
|
+
<object class="GtkMenuItem">
|
48
|
+
<property name="visible">True</property>
|
49
|
+
<property name="can-focus">False</property>
|
50
|
+
<property name="label" translatable="yes">Help</property>
|
51
|
+
<property name="use-underline">True</property>
|
52
|
+
<child type="submenu">
|
53
|
+
<object class="GtkMenu">
|
54
|
+
<property name="visible">True</property>
|
55
|
+
<property name="can-focus">False</property>
|
56
|
+
<child>
|
57
|
+
<object class="GtkImageMenuItem" id="menu_about">
|
58
|
+
<property name="label">gtk-about</property>
|
59
|
+
<property name="visible">True</property>
|
60
|
+
<property name="can-focus">False</property>
|
61
|
+
<property name="use-underline">True</property>
|
62
|
+
<property name="use-stock">True</property>
|
63
|
+
</object>
|
64
|
+
</child>
|
65
|
+
</object>
|
66
|
+
</child>
|
67
|
+
</object>
|
68
|
+
</child>
|
69
|
+
</object>
|
70
|
+
<packing>
|
71
|
+
<property name="expand">False</property>
|
72
|
+
<property name="fill">True</property>
|
73
|
+
<property name="position">0</property>
|
74
|
+
</packing>
|
75
|
+
</child>
|
76
|
+
<child>
|
77
|
+
<object class="GtkToolbar" id="tool_bar">
|
78
|
+
<property name="visible">True</property>
|
79
|
+
<property name="can-focus">False</property>
|
80
|
+
<child>
|
81
|
+
<object class="GtkToolButton" id="button_add">
|
82
|
+
<property name="visible">True</property>
|
83
|
+
<property name="can-focus">False</property>
|
84
|
+
<property name="tooltip-text" translatable="yes">Add Tunnel</property>
|
85
|
+
<property name="stock-id">gtk-add</property>
|
86
|
+
</object>
|
87
|
+
<packing>
|
88
|
+
<property name="expand">False</property>
|
89
|
+
<property name="homogeneous">True</property>
|
90
|
+
</packing>
|
91
|
+
</child>
|
92
|
+
<child>
|
93
|
+
<object class="GtkToolButton" id="button_edit">
|
94
|
+
<property name="visible">True</property>
|
95
|
+
<property name="can-focus">False</property>
|
96
|
+
<property name="tooltip-text" translatable="yes">Edit Tunnel</property>
|
97
|
+
<property name="stock-id">gtk-edit</property>
|
98
|
+
</object>
|
99
|
+
<packing>
|
100
|
+
<property name="expand">False</property>
|
101
|
+
<property name="homogeneous">True</property>
|
102
|
+
</packing>
|
103
|
+
</child>
|
104
|
+
<child>
|
105
|
+
<object class="GtkToolButton" id="button_remove">
|
106
|
+
<property name="visible">True</property>
|
107
|
+
<property name="can-focus">False</property>
|
108
|
+
<property name="tooltip-text" translatable="yes">Remove Tunnel</property>
|
109
|
+
<property name="stock-id">gtk-remove</property>
|
110
|
+
</object>
|
111
|
+
<packing>
|
112
|
+
<property name="expand">False</property>
|
113
|
+
<property name="homogeneous">True</property>
|
114
|
+
</packing>
|
115
|
+
</child>
|
116
|
+
<child>
|
117
|
+
<object class="GtkSeparatorToolItem" id="separator1">
|
118
|
+
<property name="visible">True</property>
|
119
|
+
<property name="can-focus">False</property>
|
120
|
+
</object>
|
121
|
+
<packing>
|
122
|
+
<property name="expand">False</property>
|
123
|
+
<property name="homogeneous">False</property>
|
124
|
+
</packing>
|
125
|
+
</child>
|
126
|
+
<child>
|
127
|
+
<object class="GtkToolButton" id="button_start">
|
128
|
+
<property name="visible">True</property>
|
129
|
+
<property name="can-focus">False</property>
|
130
|
+
<property name="tooltip-text" translatable="yes">Start Tunnel</property>
|
131
|
+
<property name="stock-id">gtk-go-up</property>
|
132
|
+
</object>
|
133
|
+
<packing>
|
134
|
+
<property name="expand">False</property>
|
135
|
+
<property name="homogeneous">True</property>
|
136
|
+
</packing>
|
137
|
+
</child>
|
138
|
+
<child>
|
139
|
+
<object class="GtkToolButton" id="button_stop">
|
140
|
+
<property name="visible">True</property>
|
141
|
+
<property name="can-focus">False</property>
|
142
|
+
<property name="tooltip-text" translatable="yes">Stop Tunnel</property>
|
143
|
+
<property name="stock-id">gtk-go-down</property>
|
144
|
+
</object>
|
145
|
+
<packing>
|
146
|
+
<property name="expand">False</property>
|
147
|
+
<property name="homogeneous">True</property>
|
148
|
+
</packing>
|
149
|
+
</child>
|
150
|
+
<child>
|
151
|
+
<object class="GtkSeparatorToolItem" id="separator2">
|
152
|
+
<property name="visible">True</property>
|
153
|
+
<property name="can-focus">False</property>
|
154
|
+
</object>
|
155
|
+
<packing>
|
156
|
+
<property name="expand">False</property>
|
157
|
+
<property name="homogeneous">False</property>
|
158
|
+
</packing>
|
159
|
+
</child>
|
160
|
+
</object>
|
161
|
+
<packing>
|
162
|
+
<property name="expand">False</property>
|
163
|
+
<property name="fill">True</property>
|
164
|
+
<property name="position">1</property>
|
165
|
+
</packing>
|
166
|
+
</child>
|
167
|
+
<child>
|
168
|
+
<object class="GtkScrolledWindow" id="hosts_scrolled_window">
|
169
|
+
<property name="visible">True</property>
|
170
|
+
<property name="can-focus">True</property>
|
171
|
+
<property name="shadow-type">in</property>
|
172
|
+
<child>
|
173
|
+
<placeholder/>
|
174
|
+
</child>
|
175
|
+
</object>
|
176
|
+
<packing>
|
177
|
+
<property name="expand">True</property>
|
178
|
+
<property name="fill">True</property>
|
179
|
+
<property name="position">2</property>
|
180
|
+
</packing>
|
181
|
+
</child>
|
182
|
+
<child>
|
183
|
+
<object class="GtkStatusbar" id="status_bar">
|
184
|
+
<property name="visible">True</property>
|
185
|
+
<property name="can-focus">False</property>
|
186
|
+
</object>
|
187
|
+
<packing>
|
188
|
+
<property name="expand">False</property>
|
189
|
+
<property name="fill">False</property>
|
190
|
+
<property name="position">3</property>
|
191
|
+
</packing>
|
192
|
+
</child>
|
193
|
+
</object>
|
194
|
+
</child>
|
195
|
+
</template>
|
196
|
+
</interface>
|
@@ -0,0 +1,74 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!-- Generated with glade 3.38.2 -->
|
3
|
+
<interface>
|
4
|
+
<requires lib="gtk+" version="3.18"/>
|
5
|
+
<template class="SSHTunnelUIWindowsHostsDeleteWindow" parent="GtkWindow">
|
6
|
+
<property name="visible">True</property>
|
7
|
+
<property name="can-focus">False</property>
|
8
|
+
<property name="resizable">False</property>
|
9
|
+
<property name="modal">True</property>
|
10
|
+
<property name="window-position">center</property>
|
11
|
+
<property name="default-width">350</property>
|
12
|
+
<property name="default-height">100</property>
|
13
|
+
<property name="type-hint">dialog</property>
|
14
|
+
<property name="skip-taskbar-hint">True</property>
|
15
|
+
<property name="gravity">center</property>
|
16
|
+
<child>
|
17
|
+
<object class="GtkBox">
|
18
|
+
<property name="visible">True</property>
|
19
|
+
<property name="can-focus">False</property>
|
20
|
+
<property name="orientation">vertical</property>
|
21
|
+
<child>
|
22
|
+
<object class="GtkLabel" id="label_confirm">
|
23
|
+
<property name="visible">True</property>
|
24
|
+
<property name="can-focus">False</property>
|
25
|
+
<property name="vexpand">True</property>
|
26
|
+
<property name="label" translatable="yes">Are you sure?</property>
|
27
|
+
</object>
|
28
|
+
<packing>
|
29
|
+
<property name="expand">True</property>
|
30
|
+
<property name="fill">True</property>
|
31
|
+
<property name="position">0</property>
|
32
|
+
</packing>
|
33
|
+
</child>
|
34
|
+
<child>
|
35
|
+
<object class="GtkActionBar">
|
36
|
+
<property name="visible">True</property>
|
37
|
+
<property name="can-focus">False</property>
|
38
|
+
<child>
|
39
|
+
<object class="GtkButton" id="button_cancel">
|
40
|
+
<property name="label">gtk-cancel</property>
|
41
|
+
<property name="visible">True</property>
|
42
|
+
<property name="can-focus">True</property>
|
43
|
+
<property name="receives-default">True</property>
|
44
|
+
<property name="use-stock">True</property>
|
45
|
+
</object>
|
46
|
+
<packing>
|
47
|
+
<property name="pack-type">end</property>
|
48
|
+
<property name="position">0</property>
|
49
|
+
</packing>
|
50
|
+
</child>
|
51
|
+
<child>
|
52
|
+
<object class="GtkButton" id="button_submit">
|
53
|
+
<property name="label">gtk-apply</property>
|
54
|
+
<property name="visible">True</property>
|
55
|
+
<property name="can-focus">True</property>
|
56
|
+
<property name="receives-default">True</property>
|
57
|
+
<property name="use-stock">True</property>
|
58
|
+
</object>
|
59
|
+
<packing>
|
60
|
+
<property name="pack-type">end</property>
|
61
|
+
<property name="position">0</property>
|
62
|
+
</packing>
|
63
|
+
</child>
|
64
|
+
</object>
|
65
|
+
<packing>
|
66
|
+
<property name="expand">False</property>
|
67
|
+
<property name="fill">True</property>
|
68
|
+
<property name="position">1</property>
|
69
|
+
</packing>
|
70
|
+
</child>
|
71
|
+
</object>
|
72
|
+
</child>
|
73
|
+
</template>
|
74
|
+
</interface>
|