Use the correct status when switching tabs

This commit is contained in:
Pierre Pronchery 2010-04-20 18:27:16 +00:00
parent 77cd2bb082
commit 473eae8b59

View File

@ -65,6 +65,7 @@ typedef struct _GHtml
struct _GHtmlConn ** conns; struct _GHtmlConn ** conns;
size_t conns_cnt; size_t conns_cnt;
gdouble progress; gdouble progress;
char * status;
/* html widget */ /* html widget */
HtmlDocument * html_document; HtmlDocument * html_document;
@ -105,6 +106,7 @@ static void _ghtmlconn_delete(GHtmlConn * ghtmlconn);
static char const * _ghtml_get_base(GHtml * ghtml); static char const * _ghtml_get_base(GHtml * ghtml);
static int _ghtml_set_base(GHtml * ghtml, char const * url); static int _ghtml_set_base(GHtml * ghtml, char const * url);
static void _ghtml_set_progress(GHtml * ghtml, gdouble progress); 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, static int _ghtml_document_load(GHtml * ghtml, gchar const * url,
gchar const * post); gchar const * post);
static int _ghtml_document_reload(GHtml * ghtml); static int _ghtml_document_reload(GHtml * ghtml);
@ -143,6 +145,7 @@ GtkWidget * ghtml_new(Surfer * surfer)
ghtml->conns = NULL; ghtml->conns = NULL;
ghtml->conns_cnt = 0; ghtml->conns_cnt = 0;
ghtml->progress = -1.0; ghtml->progress = -1.0;
ghtml->status = NULL;
ghtml->html_view = html_view_new(); ghtml->html_view = html_view_new();
g_object_set_data(G_OBJECT(ghtml->html_view), "ghtml", ghtml); g_object_set_data(G_OBJECT(ghtml->html_view), "ghtml", ghtml);
g_signal_connect(G_OBJECT(ghtml->html_view), "button-press-event", 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"); ghtml = g_object_get_data(G_OBJECT(widget), "ghtml");
free(ghtml->source); free(ghtml->source);
free(ghtml->status);
for(i = 0; i < ghtml->conns_cnt; i++) for(i = 0; i < ghtml->conns_cnt; i++)
if(ghtml->conns[i] != NULL) if(ghtml->conns[i] != NULL)
_ghtmlconn_delete(ghtml->conns[i]); _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 */ /* ghtml_document_load */
static int _ghtml_document_load(GHtml * ghtml, gchar const * url, static int _ghtml_document_load(GHtml * ghtml, gchar const * url,
gchar const * post) gchar const * post)
@ -723,7 +736,7 @@ static gboolean _stream_load_idle_directory(GHtmlConn * conn)
html_stream_write(conn->stream, tail, sizeof(tail) - 1); html_stream_write(conn->stream, tail, sizeof(tail) - 1);
closedir(dir); closedir(dir);
_ghtml_set_progress(conn->ghtml, -1.0); _ghtml_set_progress(conn->ghtml, -1.0);
surfer_set_status(conn->ghtml->surfer, NULL); _ghtml_set_status(conn->ghtml, NULL);
_ghtmlconn_delete(conn); _ghtmlconn_delete(conn);
return FALSE; return FALSE;
} }
@ -745,7 +758,7 @@ static gboolean _stream_load_idle_file(GHtmlConn * conn)
else else
{ {
_ghtml_set_progress(conn->ghtml, 0.0); _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(fstat(fd, &st) == 0)
{ {
if(S_ISDIR(st.st_mode)) if(S_ISDIR(st.st_mode))
@ -784,7 +797,7 @@ static gboolean _stream_load_watch_file(GIOChannel * source,
if(len == 0) /* no more data */ if(len == 0) /* no more data */
{ {
_ghtml_set_progress(conn->ghtml, 1.0); _ghtml_set_progress(conn->ghtml, 1.0);
surfer_set_status(conn->ghtml->surfer, NULL); _ghtml_set_status(conn->ghtml, NULL);
_ghtmlconn_delete(conn); _ghtmlconn_delete(conn);
return FALSE; return FALSE;
} }
@ -802,7 +815,7 @@ static gboolean _stream_load_watch_file(GIOChannel * source,
static gboolean _stream_load_idle_http(GHtmlConn * conn) static gboolean _stream_load_idle_http(GHtmlConn * conn)
{ {
_ghtml_set_progress(conn->ghtml, -1.0); _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(); conn->http = gnet_conn_http_new();
gnet_conn_http_set_uri(conn->http, conn->url); gnet_conn_http_set_uri(conn->http, conn->url);
gnet_conn_http_set_user_agent(conn->http, "DeforaOS " PACKAGE); 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) 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) 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; ghtml = conn->ghtml;
_ghtmlconn_delete(conn); _ghtmlconn_delete(conn);
if(ghtml->conns_cnt == 0) 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) static void _http_data_partial(GConnHttpEventData * event, GHtmlConn * conn)
@ -887,7 +900,7 @@ static void _http_data_partial(GConnHttpEventData * event, GHtmlConn * conn)
gchar * buf; gchar * buf;
gsize size; 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) if(gnet_conn_http_steal_buffer(conn->http, &buf, &size) != TRUE)
{ {
/* FIXME report error */ /* FIXME report error */
@ -946,7 +959,7 @@ static void _http_error(GConnHttpEventError * event, GHtmlConn * conn)
break; break;
} }
_ghtml_set_progress(conn->ghtml, -1.0); _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); surfer_error(conn->ghtml->surfer, msg, 0);
_ghtmlconn_delete(conn); _ghtmlconn_delete(conn);
} }
@ -960,7 +973,7 @@ static void _http_redirect(GConnHttpEventRedirect * event, GHtmlConn * conn)
snprintf(buf, sizeof(buf), "%s", _("Redirecting...")); snprintf(buf, sizeof(buf), "%s", _("Redirecting..."));
if(conn == conn->ghtml->conns[0] && url == NULL) /* XXX ugly */ if(conn == conn->ghtml->conns[0] && url == NULL) /* XXX ugly */
{ {
surfer_set_status(ghtml->surfer, buf); _ghtml_set_status(ghtml, buf);
return; return;
} }
if((url = _ghtml_make_url(_ghtml_get_base(ghtml), url)) != NULL) if((url = _ghtml_make_url(_ghtml_get_base(ghtml), url)) != NULL)
@ -978,7 +991,7 @@ static void _http_redirect(GConnHttpEventRedirect * event, GHtmlConn * conn)
return; return;
_ghtml_set_base(ghtml, url); _ghtml_set_base(ghtml, url);
surfer_set_location(ghtml->surfer, 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) 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 */ #if 0 /* XXX check again if this is really an error case */
_ghtml_set_progress(conn->ghtml, -1.0); _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); surfer_error(conn->ghtml->surfer, "Unknown host", 0);
_ghtmlconn_delete(conn); _ghtmlconn_delete(conn);
#endif #endif
} }
else if((name = gnet_inetaddr_get_name_nonblock(event->ia)) == NULL) 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 else
{ {
snprintf(buf, sizeof(buf), "%s%s%s%d", _("Connecting to "), snprintf(buf, sizeof(buf), "%s%s%s%d", _("Connecting to "),
name, ":", gnet_inetaddr_get_port(event->ia)); 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); surfer_error(conn->ghtml->surfer, _("Timeout"), 0);
_ghtml_set_progress(conn->ghtml, -1.0); _ghtml_set_progress(conn->ghtml, -1.0);
surfer_set_status(conn->ghtml->surfer, NULL); _ghtml_set_status(conn->ghtml, NULL);
_ghtmlconn_delete(conn); _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"); ghtml = g_object_get_data(G_OBJECT(view), "ghtml");
if(url == NULL) if(url == NULL)
{ {
surfer_set_status(ghtml->surfer, NULL); _ghtml_set_status(ghtml, NULL);
return; return;
} }
if((link = _ghtml_make_url(_ghtml_get_base(ghtml), url)) != NULL) 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); g_free(link);
} }
} }