From 473eae8b59c0bdb4385b6b02aa128595db09cae1 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Tue, 20 Apr 2010 18:27:16 +0000 Subject: [PATCH] Use the correct status when switching tabs --- src/ghtml-gtkhtml.c | 45 +++++++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/src/ghtml-gtkhtml.c b/src/ghtml-gtkhtml.c index c6f3f7d..7debe2a 100644 --- a/src/ghtml-gtkhtml.c +++ b/src/ghtml-gtkhtml.c @@ -65,6 +65,7 @@ typedef struct _GHtml struct _GHtmlConn ** conns; size_t conns_cnt; gdouble progress; + char * status; /* html widget */ HtmlDocument * html_document; @@ -105,6 +106,7 @@ static void _ghtmlconn_delete(GHtmlConn * ghtmlconn); static char const * _ghtml_get_base(GHtml * ghtml); static int _ghtml_set_base(GHtml * ghtml, char const * url); static void _ghtml_set_progress(GHtml * ghtml, gdouble progress); +static void _ghtml_set_status(GHtml * ghtml, char const * status); static int _ghtml_document_load(GHtml * ghtml, gchar const * url, gchar const * post); static int _ghtml_document_reload(GHtml * ghtml); @@ -143,6 +145,7 @@ GtkWidget * ghtml_new(Surfer * surfer) ghtml->conns = NULL; ghtml->conns_cnt = 0; ghtml->progress = -1.0; + ghtml->status = NULL; ghtml->html_view = html_view_new(); g_object_set_data(G_OBJECT(ghtml->html_view), "ghtml", ghtml); g_signal_connect(G_OBJECT(ghtml->html_view), "button-press-event", @@ -181,6 +184,7 @@ void ghtml_delete(GtkWidget * widget) ghtml = g_object_get_data(G_OBJECT(widget), "ghtml"); free(ghtml->source); + free(ghtml->status); for(i = 0; i < ghtml->conns_cnt; i++) if(ghtml->conns[i] != NULL) _ghtmlconn_delete(ghtml->conns[i]); @@ -558,6 +562,15 @@ static void _ghtml_set_progress(GHtml * ghtml, gdouble progress) } +/* ghtml_set_status */ +static void _ghtml_set_status(GHtml * ghtml, char const * status) +{ + free(ghtml->status); + ghtml->status = (status != NULL) ? strdup(status) : NULL; + surfer_set_status(ghtml->surfer, status); +} + + /* ghtml_document_load */ static int _ghtml_document_load(GHtml * ghtml, gchar const * url, gchar const * post) @@ -723,7 +736,7 @@ static gboolean _stream_load_idle_directory(GHtmlConn * conn) html_stream_write(conn->stream, tail, sizeof(tail) - 1); closedir(dir); _ghtml_set_progress(conn->ghtml, -1.0); - surfer_set_status(conn->ghtml->surfer, NULL); + _ghtml_set_status(conn->ghtml, NULL); _ghtmlconn_delete(conn); return FALSE; } @@ -745,7 +758,7 @@ static gboolean _stream_load_idle_file(GHtmlConn * conn) else { _ghtml_set_progress(conn->ghtml, 0.0); - surfer_set_status(conn->ghtml->surfer, _("Reading file...")); + _ghtml_set_status(conn->ghtml, _("Reading file...")); if(fstat(fd, &st) == 0) { if(S_ISDIR(st.st_mode)) @@ -784,7 +797,7 @@ static gboolean _stream_load_watch_file(GIOChannel * source, if(len == 0) /* no more data */ { _ghtml_set_progress(conn->ghtml, 1.0); - surfer_set_status(conn->ghtml->surfer, NULL); + _ghtml_set_status(conn->ghtml, NULL); _ghtmlconn_delete(conn); return FALSE; } @@ -802,7 +815,7 @@ static gboolean _stream_load_watch_file(GIOChannel * source, static gboolean _stream_load_idle_http(GHtmlConn * conn) { _ghtml_set_progress(conn->ghtml, -1.0); - surfer_set_status(conn->ghtml->surfer, _("Resolving...")); + _ghtml_set_status(conn->ghtml, _("Resolving...")); conn->http = gnet_conn_http_new(); gnet_conn_http_set_uri(conn->http, conn->url); gnet_conn_http_set_user_agent(conn->http, "DeforaOS " PACKAGE); @@ -852,7 +865,7 @@ static void _stream_load_watch_http(GConnHttp * connhttp, static void _http_connected(GHtmlConn * conn) { - surfer_set_status(conn->ghtml->surfer, _("Connected")); + _ghtml_set_status(conn->ghtml, _("Connected")); } static void _http_data_complete(GConnHttpEventData * event, GHtmlConn * conn) @@ -879,7 +892,7 @@ static void _http_data_complete(GConnHttpEventData * event, GHtmlConn * conn) ghtml = conn->ghtml; _ghtmlconn_delete(conn); if(ghtml->conns_cnt == 0) - surfer_set_status(ghtml->surfer, NULL); + _ghtml_set_status(ghtml, NULL); } static void _http_data_partial(GConnHttpEventData * event, GHtmlConn * conn) @@ -887,7 +900,7 @@ static void _http_data_partial(GConnHttpEventData * event, GHtmlConn * conn) gchar * buf; gsize size; - surfer_set_status(conn->ghtml->surfer, _("Downloading...")); + _ghtml_set_status(conn->ghtml, _("Downloading...")); if(gnet_conn_http_steal_buffer(conn->http, &buf, &size) != TRUE) { /* FIXME report error */ @@ -946,7 +959,7 @@ static void _http_error(GConnHttpEventError * event, GHtmlConn * conn) break; } _ghtml_set_progress(conn->ghtml, -1.0); - surfer_set_status(conn->ghtml->surfer, NULL); + _ghtml_set_status(conn->ghtml, NULL); surfer_error(conn->ghtml->surfer, msg, 0); _ghtmlconn_delete(conn); } @@ -960,7 +973,7 @@ static void _http_redirect(GConnHttpEventRedirect * event, GHtmlConn * conn) snprintf(buf, sizeof(buf), "%s", _("Redirecting...")); if(conn == conn->ghtml->conns[0] && url == NULL) /* XXX ugly */ { - surfer_set_status(ghtml->surfer, buf); + _ghtml_set_status(ghtml, buf); return; } if((url = _ghtml_make_url(_ghtml_get_base(ghtml), url)) != NULL) @@ -978,7 +991,7 @@ static void _http_redirect(GConnHttpEventRedirect * event, GHtmlConn * conn) return; _ghtml_set_base(ghtml, url); surfer_set_location(ghtml->surfer, url); - surfer_set_status(ghtml->surfer, buf); + _ghtml_set_status(ghtml, buf); } static void _http_resolved(GConnHttpEventResolved * event, GHtmlConn * conn) @@ -993,18 +1006,18 @@ static void _http_resolved(GConnHttpEventResolved * event, GHtmlConn * conn) { #if 0 /* XXX check again if this is really an error case */ _ghtml_set_progress(conn->ghtml, -1.0); - surfer_set_status(conn->ghtml->surfer, NULL); + _ghtml_set_status(conn->ghtml, NULL); surfer_error(conn->ghtml->surfer, "Unknown host", 0); _ghtmlconn_delete(conn); #endif } else if((name = gnet_inetaddr_get_name_nonblock(event->ia)) == NULL) - surfer_set_status(conn->ghtml->surfer, _("Connecting...")); + _ghtml_set_status(conn->ghtml, _("Connecting...")); else { snprintf(buf, sizeof(buf), "%s%s%s%d", _("Connecting to "), name, ":", gnet_inetaddr_get_port(event->ia)); - surfer_set_status(conn->ghtml->surfer, buf); + _ghtml_set_status(conn->ghtml, buf); } } @@ -1040,7 +1053,7 @@ static void _http_timeout(GHtmlConn * conn) { surfer_error(conn->ghtml->surfer, _("Timeout"), 0); _ghtml_set_progress(conn->ghtml, -1.0); - surfer_set_status(conn->ghtml->surfer, NULL); + _ghtml_set_status(conn->ghtml, NULL); _ghtmlconn_delete(conn); } @@ -1187,12 +1200,12 @@ static void _on_url(HtmlView * view, const gchar * url) ghtml = g_object_get_data(G_OBJECT(view), "ghtml"); if(url == NULL) { - surfer_set_status(ghtml->surfer, NULL); + _ghtml_set_status(ghtml, NULL); return; } if((link = _ghtml_make_url(_ghtml_get_base(ghtml), url)) != NULL) { - surfer_set_status(ghtml->surfer, link); + _ghtml_set_status(ghtml, link); g_free(link); } }