- diff --git a/xxxterm.c b/xxxterm.c
- index 3c47fa4..ace5cba 100644
- --- a/xxxterm.c
- +++ b/xxxterm.c
- @@ -197,6 +197,8 @@ TAILQ_HEAD(command_list, command_entry);
- #define XT_STATUS_LINK (1)
- #define XT_STATUS_URI (2)
- #define XT_STATUS_LOADING (3)
- +#define XT_STATUS_STOPPED (4)
- +#define XT_STATUS_FAILED (5)
- #define XT_SES_DONOTHING (0)
- #define XT_SES_CLOSETABS (1)
- @@ -476,10 +478,15 @@ set_status(struct tab *t, gchar *s, int status)
- {
- gchar *type = NULL;
- - if (s == NULL)
- + if (s == NULL || (status == XT_STATUS_STOPPED &&
- + webkit_web_view_get_load_status(t->wv) == WEBKIT_LOAD_FINISHED))
- return;
- switch (status) {
- + case XT_STATUS_FAILED:
- + type = g_strdup_printf("Failed: %s", s);
- + s = type;
- + break;
- case XT_STATUS_LOADING:
- type = g_strdup_printf("Loading: %s", s);
- s = type;
- @@ -491,6 +498,10 @@ set_status(struct tab *t, gchar *s, int status)
- GTK_ENTRY(t->sbe.statusbar)));
- s = type;
- break;
- + case XT_STATUS_STOPPED:
- + type = g_strdup_printf("Stopped: %s", s);
- + s = type;
- + break;
- case XT_STATUS_URI:
- type = g_strdup_printf("%s", s);
- if (!t->status) {
- @@ -843,6 +854,7 @@ load_uri(struct tab *t, gchar *uri)
- }
- set_status(t, (char *)uri, XT_STATUS_LOADING);
- + gtk_entry_set_text(GTK_ENTRY(t->uri_entry), uri);
- marks_clear(t);
- webkit_web_view_load_uri(t->wv, uri);
- done:
- @@ -863,7 +875,7 @@ get_uri(struct tab *t)
- /* use tmp_uri to make sure it is g_freed */
- if (t->tmp_uri)
- g_free(t->tmp_uri);
- - t->tmp_uri =g_strdup_printf("%s%s", XT_URI_ABOUT,
- + t->tmp_uri = g_strdup_printf("%s%s", XT_URI_ABOUT,
- about_list[t->xtp_meaning].name);
- uri = t->tmp_uri;
- }
- @@ -2130,6 +2142,9 @@ navaction(struct tab *t, struct karg *args)
- webkit_web_frame_reload(frame);
- break;
- case XT_NAV_STOP:
- + /* order is relevant, else get_uri(t) will return NULL */
- + t->stopped = 1;
- + set_status(t, (char *)get_uri(t), XT_STATUS_STOPPED);
- frame = webkit_web_view_get_main_frame(t->wv);
- webkit_web_frame_stop_loading(frame);
- break;
- @@ -3827,6 +3842,9 @@ notify_load_status_cb(WebKitWebView* wview, GParamSpec* pspec, struct tab *t)
- gtk_widget_modify_base(t->uri_entry, GTK_STATE_NORMAL, &color);
- statusbar_modify_attr(t, "white", XT_COLOR_BLACK);
- + gdk_color_parse(XT_COLOR_RED, &color);
- + gtk_widget_modify_bg(t->tab_elems.loadbox, GTK_STATE_NORMAL, &color);
- +
- /* take focus if we are visible */
- focus_webview(t);
- t->focus_wv = 1;
- @@ -3843,6 +3861,7 @@ notify_load_status_cb(WebKitWebView* wview, GParamSpec* pspec, struct tab *t)
- uri = get_uri(t);
- if (uri == NULL)
- return;
- + /* already set, but should update it here */
- gtk_entry_set_text(GTK_ENTRY(t->uri_entry), uri);
- if (t->status) {
- @@ -3887,6 +3906,9 @@ notify_load_status_cb(WebKitWebView* wview, GParamSpec* pspec, struct tab *t)
- color_visited(get_current_tab(),
- g_strdup_printf("{'%s' : 'dummy'}", uri));
- }
- +
- + gdk_color_parse(XT_COLOR_BLUE, &color);
- + gtk_widget_modify_bg(t->tab_elems.loadbox, GTK_STATE_NORMAL, &color);
- break;
- case WEBKIT_LOAD_FINISHED:
- @@ -3907,16 +3929,39 @@ notify_load_status_cb(WebKitWebView* wview, GParamSpec* pspec, struct tab *t)
- }
- set_status(t, (char *)uri, XT_STATUS_URI);
- +
- + gdk_color_parse(XT_COLOR_GREEN, &color);
- + gtk_widget_modify_bg(t->tab_elems.loadbox, GTK_STATE_NORMAL, &color);
- +
- + gtk_widget_set_sensitive(GTK_WIDGET(t->stop), FALSE);
- +#if GTK_CHECK_VERSION(2, 20, 0)
- + gtk_spinner_stop(GTK_SPINNER(t->spinner));
- + gtk_widget_hide(t->spinner);
- +#endif
- + break;
- +
- #if WEBKIT_CHECK_VERSION(1, 1, 18)
- + /* also when user stopped the loading */
- case WEBKIT_LOAD_FAILED:
- /* 4 */
- #endif
- + default:
- + /* XXX can't call get_uri since it will return NULL. Fix it? */
- + uri = gtk_entry_get_text(GTK_ENTRY(t->uri_entry));
- +
- + if (t->stopped) {
- + set_status(t, (char *)uri, XT_STATUS_STOPPED);
- + t->stopped = 0;
- + } else
- + set_status(t, (char *)uri, XT_STATUS_FAILED);
- +
- + gtk_widget_set_sensitive(GTK_WIDGET(t->stop), FALSE);
- + gdk_color_parse(XT_COLOR_RED, &color);
- + gtk_widget_modify_bg(t->tab_elems.loadbox, GTK_STATE_NORMAL, &color);
- #if GTK_CHECK_VERSION(2, 20, 0)
- gtk_spinner_stop(GTK_SPINNER(t->spinner));
- gtk_widget_hide(t->spinner);
- #endif
- - default:
- - gtk_widget_set_sensitive(GTK_WIDGET(t->stop), FALSE);
- break;
- }
- @@ -5893,6 +5938,8 @@ stop_cb(GtkWidget *w, struct tab *t)
- return;
- }
- + t->stopped = 1;
- + set_status(t, (char *)get_uri(t), XT_STATUS_STOPPED);
- webkit_web_frame_stop_loading(frame);
- abort_favicon_download(t);
- }
- @@ -6487,6 +6534,7 @@ create_new_tab(char *title, struct undo *u, int focus, int position)
- }
- t = g_malloc0(sizeof *t);
- + t->stopped = 0;
- if (title == NULL) {
- title = "(untitled)";
- @@ -6640,10 +6688,12 @@ create_new_tab(char *title, struct undo *u, int focus, int position)
- /* compact tab bar */
- t->tab_elems.label = gtk_label_new(title);
- t->tab_elems.favicon = gtk_image_new();
- + t->tab_elems.loadbox = gtk_drawing_area_new();
- gtk_label_set_width_chars(GTK_LABEL(t->tab_elems.label), 1.0);
- gtk_misc_set_alignment(GTK_MISC(t->tab_elems.label), 0.0, 0.0);
- gtk_misc_set_padding(GTK_MISC(t->tab_elems.label), 4.0, 4.0);
- gtk_widget_modify_font(GTK_WIDGET(t->tab_elems.label), tabbar_font);
- + gtk_widget_set_size_request(t->tab_elems.loadbox, 2, -1);
- t->tab_elems.eventbox = gtk_event_box_new();
- t->tab_elems.box = gtk_hbox_new(FALSE, 0);
- @@ -6655,7 +6705,11 @@ create_new_tab(char *title, struct undo *u, int focus, int position)
- gtk_widget_modify_fg(t->tab_elems.label, GTK_STATE_NORMAL, &color);
- gdk_color_parse(XT_COLOR_CT_SEPARATOR, &color);
- gtk_widget_modify_bg(t->tab_elems.sep, GTK_STATE_NORMAL, &color);
- + gdk_color_parse(XT_COLOR_GREEN, &color);
- + gtk_widget_modify_bg(t->tab_elems.loadbox, GTK_STATE_NORMAL, &color);
- + gtk_box_pack_start(GTK_BOX(t->tab_elems.box), t->tab_elems.loadbox, FALSE,
- + FALSE, 0);
- gtk_box_pack_start(GTK_BOX(t->tab_elems.box), t->tab_elems.favicon, FALSE,
- FALSE, 0);
- gtk_box_pack_start(GTK_BOX(t->tab_elems.box), t->tab_elems.label, TRUE,