diff options
| -rw-r--r-- | src/main.c | 32 |
1 files changed, 30 insertions, 2 deletions
@@ -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. */ @@ -166,6 +168,11 @@ typedef struct typedef struct { msg_t base; +} msg_disconnected_t; + +typedef struct +{ + msg_t base; gchar* msg; } msg_error_t; @@ -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); |
