diff --git a/src/pane.ui b/src/pane.ui
index fdbfafc..c772c52 100644
--- a/src/pane.ui
+++ b/src/pane.ui
@@ -1,5 +1,16 @@
+
diff --git a/src/pane.vala b/src/pane.vala
index 58e53b1..adf87ee 100644
--- a/src/pane.vala
+++ b/src/pane.vala
@@ -21,15 +21,23 @@
namespace Footerm {
[GtkTemplate (ui = "/fr/oupson/FooTerm/pane.ui")]
public class Pane : Gtk.Box {
+ [GtkChild]
+ private unowned Adw.ViewStack footerm_pane_stack;
+
+ [GtkChild]
+ private unowned Footerm.NewPane new_pane;
+
+ [GtkChild]
+ private unowned Footerm.TerminalPane terminal_pane;
+
construct {
- var new_pane = new Footerm.NewPane();
- ulong handler_id;
- handler_id = new_pane.on_server_selected.connect((s) => {
- new_pane.disconnect (handler_id);
- this.remove(new_pane);
- this.append(new Footerm.TerminalPane(s));
+ this.new_pane.on_server_selected.connect ((s) => {
+ this.footerm_pane_stack.set_visible_child (this.terminal_pane);
+ this.terminal_pane.connect (s);
});
- this.append(new_pane);
+ }
+
+ async void close () {
}
}
}
diff --git a/src/terminalpane.vala b/src/terminalpane.vala
index 210aa2c..6723d5f 100644
--- a/src/terminalpane.vala
+++ b/src/terminalpane.vala
@@ -27,11 +27,21 @@ namespace Footerm {
private SSH2.Session? session;
private SSH2.Channel? channel;
private SocketConnection socket;
- private int slave_pty;
+ private IOChannel slave_channel;
- private Footerm.Model.Server server;
+ private Footerm.Model.Server? server;
- public TerminalPane(Footerm.Model.Server server) {
+ public TerminalPane() {
+
+ this.terminal.char_size_changed.connect(() => {
+ int rows = 0;
+ int columns = 0;
+ this.terminal.get_pty().get_size(out rows, out columns);
+ this.channel.request_pty_size(columns, rows);
+ });
+ }
+
+ public void connect(Footerm.Model.Server server) {
this.server = server;
this.terminal.set_enable_sixel(true);
this.connect_to_server.begin((obj, res) => {
@@ -134,8 +144,8 @@ namespace Footerm {
throw GLib.IOError.from_errno(Posix.errno);
}
- this.slave_pty = Posix.open(pts_name, Posix.O_RDWR);
- if (this.slave_pty < 0) {
+ var slave_pty = Posix.open(pts_name, Posix.O_RDWR);
+ if (slave_pty < 0) {
throw GLib.IOError.from_errno(Posix.errno);
}
@@ -149,7 +159,7 @@ namespace Footerm {
source.set_callback(this.on_ssh_event);
source.attach(null);
- var slave_channel = new GLib.IOChannel.unix_new(slave_pty);
+ this.slave_channel = new GLib.IOChannel.unix_new(slave_pty);
slave_channel.set_encoding(null);
slave_channel.set_buffered(false);
slave_channel.add_watch(GLib.IOCondition.IN, this.on_slave_event);
@@ -169,9 +179,8 @@ namespace Footerm {
size = this.channel.read(buffer);
if (size > 0) {
debug("Got %zd bytes from ssh", size);
- if (Posix.write(this.slave_pty, buffer, size) < 0) {
- throw GLib.IOError.from_errno(Posix.errno);
- }
+ size_t written_size = 0;
+ this.slave_channel.write_chars((char[]) (buffer[0 : size]), out written_size);
} else if ((size == 0 && channel.eof() != 0) || (size < 0 && size != SSH2.Error.AGAIN)) {
warning("Channel is closed");
return false;