Files
x3-ssh/src/ssh_terminal.h
T
x3 77f9568cb1 feat: initial x3-ssh client
- GTK3 GUI with VTE terminal emulation
- Tabbed SSH sessions
- Server management (add/edit/remove)
- SSH key management (generate/import/delete)
- Quick connect bar
- libssh for SSH connections
- autotools build system (configure && make)
2026-09-07 14:50:20 +00:00

40 lines
1.1 KiB
C++

#pragma once
#include <gtk/gtk.h>
#include <vte/vte.h>
#include <libssh/libssh.h>
#include <atomic>
#include <string>
#include <functional>
class SshTerminal {
public:
SshTerminal();
~SshTerminal();
bool connect(const std::string& host, int port, const std::string& user,
const std::string& keyfile, const std::string& password);
void disconnect();
bool is_connected() const { return connected_; }
GtkWidget* widget() const { return GTK_WIDGET(vte_box_); }
const std::string& server_name() const { return server_name_; }
void set_server_name(const std::string& name) { server_name_ = name; }
std::function<void(bool, const std::string&)> on_status_change;
private:
void cleanup();
static gpointer io_thread_func(gpointer data);
static void on_size_changed(VteTerminal* term, guint cols, guint rows, gpointer data);
GtkWidget* vte_box_;
VteTerminal* terminal_;
ssh_session session_;
ssh_channel channel_;
int pty_master_;
int pty_slave_;
std::atomic<bool> running_;
std::atomic<bool> connected_;
GThread* thread_;
std::string server_name_;
};