From d904e1078857dc191aa29b32041576d15b8fba77 Mon Sep 17 00:00:00 2001 From: Joel Klinghed Date: Thu, 19 Jul 2018 01:15:35 +0200 Subject: Make it possible to connect again after a disconnect --- src/main.c | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) (limited to 'src/main.c') diff --git a/src/main.c b/src/main.c index d909a7d..436e6f5 100644 --- a/src/main.c +++ b/src/main.c @@ -110,8 +110,10 @@ typedef enum MSG_CONNECT, /* Worker responding to an MSG_CONNECT */ MSG_CONNECTRESULT, - /* Tell worker to disconnect. No response. */ + /* Tell worker to disconnect. Will generate a MSG_DISCONNECTED as response. */ MSG_DISCONNECT, + /* Worker responding to an MSG_DISCONNECT */ + MSG_DISCONNECTED, /* Tell worker to QUIT. No response. */ MSG_QUIT, /* Worker reporting a fatal error to main. Main should just quit. */ @@ -163,6 +165,11 @@ typedef struct gchar* errmsg; } msg_connectresult_t; +typedef struct +{ + msg_t base; +} msg_disconnected_t; + typedef struct { msg_t base; @@ -246,6 +253,7 @@ static msg_t* msg_connect(const gchar* url, const gchar* username, const gchar* password); static msg_t* msg_connectresult_success(version_t version); static msg_t* msg_connectresult_failed(const gchar* errfmt, ...); +static msg_t* msg_disconnected(); static msg_t* msg_error(const gchar* format, ...); static msg_t* msg_status(const gchar* format, ...); static msg_t* msg_disconnect(void); @@ -675,6 +683,13 @@ gboolean incoming_msg(gpointer data) } break; } + case MSG_DISCONNECTED: + { + status(msg->master, "Disconnected"); + gtk_action_set_sensitive(msg->master->connectaction, TRUE); + gtk_action_set_sensitive(msg->master->disconnectaction, FALSE); + break; + } case MSG_ERROR: { msg_error_t* m = (msg_error_t*)msg; @@ -1098,7 +1113,7 @@ gpointer worker_main(gpointer _data) { xmlrpc_server_info_free(server); server = NULL; - worker_respond(data, msg_status("Disconnected.")); + worker_respond(data, msg_disconnected()); break; } case MSG_UPDATELIST: @@ -1395,6 +1410,12 @@ void msg_free(msg_t* msg) g_slice_free(msg_disconnect_t, m); break; } + case MSG_DISCONNECTED: + { + msg_disconnected_t* m = (msg_disconnected_t*)msg; + g_slice_free(msg_disconnected_t, m); + break; + } case MSG_QUIT: { msg_quit_t* m = (msg_quit_t*)msg; @@ -1510,6 +1531,13 @@ msg_t* msg_disconnect(void) return &msg->base; } +msg_t* msg_disconnected(void) +{ + msg_disconnected_t* msg = g_slice_new(msg_disconnected_t); + msg->base.type = MSG_DISCONNECTED; + return &msg->base; +} + msg_t* msg_quit(void) { msg_quit_t* msg = g_slice_new(msg_quit_t); -- cgit v1.2.3-70-g09d2