summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Klinghed <the_jk@spawned.biz>2018-07-19 01:15:35 +0200
committerJoel Klinghed <the_jk@spawned.biz>2018-07-19 01:15:35 +0200
commitd904e1078857dc191aa29b32041576d15b8fba77 (patch)
tree40cf70db9b4949e0c6d97c68957b8837e5ac1299
parenta1b7c9910fd505ca42633dc7c75d25ce925670d7 (diff)
Make it possible to connect again after a disconnectHEADmaster
-rw-r--r--src/main.c32
1 files changed, 30 insertions, 2 deletions
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. */
@@ -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);