Hiding the statusbar in embedded mode if appropriate (may break links at bottom of pages)
This commit is contained in:
parent
025e434d16
commit
032ddfd7c2
@ -40,6 +40,8 @@
|
||||
#include "ghtml.h"
|
||||
#include "../config.h"
|
||||
|
||||
#define max(a, b) ((a) > (b) ? (a) : (b))
|
||||
|
||||
|
||||
/* GHtml */
|
||||
/* private */
|
||||
@ -415,6 +417,13 @@ static void _ghtmlconn_delete(GHtmlConn * ghtmlconn)
|
||||
if(ghtmlconn->stream != NULL)
|
||||
html_stream_close(ghtmlconn->stream);
|
||||
free(ghtmlconn);
|
||||
/* free the connections array if possible */
|
||||
for(i = 0; i < ghtml->conns_cnt; i++)
|
||||
if(ghtml->conns[i] != NULL)
|
||||
return;
|
||||
free(ghtml->conns);
|
||||
ghtml->conns = NULL;
|
||||
ghtml->conns_cnt = 0;
|
||||
}
|
||||
|
||||
static void _ghtmlconn_delete_file(GHtmlConn * ghtmlconn)
|
||||
@ -471,9 +480,13 @@ static gchar * _ghtml_make_url(gchar const * base, gchar const * url)
|
||||
if(url == NULL)
|
||||
return NULL;
|
||||
/* XXX use a more generic protocol finder (strchr(':')) */
|
||||
if(strncmp("ftp://", url, 6) == 0)
|
||||
return g_strdup(url);
|
||||
if(strncmp("http://", url, 7) == 0)
|
||||
return g_strdup(url);
|
||||
if(strncmp("ftp://", url, 6) == 0)
|
||||
if(strncmp("https://", url, 8) == 0)
|
||||
return g_strdup(url);
|
||||
if(strncmp("mailto:", url, 7) == 0)
|
||||
return g_strdup(url);
|
||||
if(base != NULL)
|
||||
{
|
||||
@ -739,6 +752,7 @@ static void _http_data_complete(GConnHttpEventData * event, GHtmlConn * conn)
|
||||
{
|
||||
gchar * buf;
|
||||
gsize size;
|
||||
GHtml * ghtml;
|
||||
|
||||
if(gnet_conn_http_steal_buffer(conn->http, &buf, &size) != TRUE)
|
||||
{
|
||||
@ -751,8 +765,10 @@ static void _http_data_complete(GConnHttpEventData * event, GHtmlConn * conn)
|
||||
html_stream_write(conn->stream, buf, size);
|
||||
_http_data_progress(event, conn);
|
||||
}
|
||||
surfer_set_status(conn->ghtml->surfer, NULL);
|
||||
ghtml = conn->ghtml;
|
||||
_ghtmlconn_delete(conn);
|
||||
if(ghtml->conns_cnt == 0)
|
||||
surfer_set_status(ghtml->surfer, NULL);
|
||||
}
|
||||
|
||||
static void _http_data_partial(GConnHttpEventData * event, GHtmlConn * conn)
|
||||
@ -775,8 +791,8 @@ static void _http_data_progress(GConnHttpEventData * event, GHtmlConn * conn)
|
||||
{
|
||||
size_t i;
|
||||
GHtmlConn * p;
|
||||
guint64 len = 0;
|
||||
guint64 rec = 0;
|
||||
guint64 len = 1; /* don't divide by zero */
|
||||
guint64 rec = 1;
|
||||
gdouble fraction;
|
||||
|
||||
conn->data_received = event->data_received;
|
||||
@ -786,14 +802,12 @@ static void _http_data_progress(GConnHttpEventData * event, GHtmlConn * conn)
|
||||
if((p = conn->ghtml->conns[i]) == NULL
|
||||
|| p->content_length == 0)
|
||||
continue;
|
||||
len += p->content_length;
|
||||
len += (p->content_length != 0) ? p->content_length
|
||||
: p->data_received + 1;
|
||||
rec += p->data_received;
|
||||
}
|
||||
if(len > 0)
|
||||
{
|
||||
fraction = rec;
|
||||
surfer_set_progress(conn->ghtml->surfer, fraction / len);
|
||||
}
|
||||
}
|
||||
|
||||
static void _http_error(GConnHttpEventError * event, GHtmlConn * conn)
|
||||
|
33
src/surfer.c
33
src/surfer.c
@ -128,7 +128,6 @@ Surfer * surfer_new(char const * url)
|
||||
GtkWidget * toolbar;
|
||||
GtkToolItem * toolitem;
|
||||
GtkWidget * widget;
|
||||
GtkWidget * hbox;
|
||||
|
||||
if((surfer = malloc(sizeof(*surfer))) == NULL)
|
||||
return NULL;
|
||||
@ -217,19 +216,21 @@ Surfer * surfer_new(char const * url)
|
||||
ghtml_load_url(surfer->view, url);
|
||||
gtk_box_pack_start(GTK_BOX(vbox), surfer->view, TRUE, TRUE, 0);
|
||||
/* statusbar */
|
||||
hbox = gtk_hbox_new(FALSE, 0);
|
||||
surfer->statusbox = gtk_hbox_new(FALSE, 0);
|
||||
surfer->progress = gtk_progress_bar_new();
|
||||
gtk_box_pack_start(GTK_BOX(hbox), surfer->progress, FALSE, FALSE, 0);
|
||||
gtk_box_pack_start(GTK_BOX(surfer->statusbox), surfer->progress, FALSE,
|
||||
FALSE, 0);
|
||||
surfer->statusbar = gtk_statusbar_new();
|
||||
surfer->statusbar_id = gtk_statusbar_push(GTK_STATUSBAR(
|
||||
surfer->statusbar),
|
||||
gtk_statusbar_get_context_id(GTK_STATUSBAR(
|
||||
surfer->statusbar), ""), "Ready");
|
||||
gtk_box_pack_start(GTK_BOX(hbox), surfer->statusbar, TRUE, TRUE, 0);
|
||||
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
|
||||
surfer->statusbar_id = 0;
|
||||
gtk_box_pack_start(GTK_BOX(surfer->statusbox), surfer->statusbar, TRUE,
|
||||
TRUE, 0);
|
||||
gtk_widget_show_all(surfer->statusbox);
|
||||
gtk_container_add(GTK_CONTAINER(surfer->window), vbox);
|
||||
gtk_widget_grab_focus(GTK_WIDGET(surfer->tb_path));
|
||||
gtk_widget_show_all(surfer->window);
|
||||
/* hack to display the statusbar only if necessary */
|
||||
gtk_box_pack_start(GTK_BOX(vbox), surfer->statusbox, FALSE, FALSE, 0);
|
||||
surfer_set_status(surfer, NULL);
|
||||
surfer_cnt++;
|
||||
return surfer;
|
||||
}
|
||||
@ -354,6 +355,20 @@ void surfer_set_status(Surfer * surfer, char const * status)
|
||||
surfer->statusbar_id = gtk_statusbar_push(sb,
|
||||
gtk_statusbar_get_context_id(sb, ""), (status != NULL)
|
||||
? status : "Ready");
|
||||
if(status == NULL)
|
||||
{
|
||||
gtk_progress_bar_set_text(GTK_PROGRESS_BAR(surfer->progress),
|
||||
"");
|
||||
gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(
|
||||
surfer->progress), 0.0);
|
||||
#ifdef FOR_EMBEDDED
|
||||
gtk_widget_hide(surfer->statusbox);
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_widget_show(surfer->statusbox);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -54,6 +54,7 @@ typedef struct _Surfer
|
||||
GtkWidget * tb_path;
|
||||
GtkWidget * view;
|
||||
GtkWidget * progress;
|
||||
GtkWidget * statusbox;
|
||||
GtkWidget * statusbar;
|
||||
guint statusbar_id;
|
||||
} Surfer;
|
||||
|
Loading…
Reference in New Issue
Block a user