diff options
author | Todd Fries <todd@fries.net> | 2011-01-27 17:58:10 +0000 |
---|---|---|
committer | Todd Fries <todd@fries.net> | 2011-01-27 17:58:10 +0000 |
commit | 8060f7751f91fbcf6fe5166351462a79336a9148 (patch) | |
tree | 439f159130c769fd5fdbacbcb6833f778a0c9012 | |
parent | 0d5c55311fa81a877b7e6af6e61d485aee64c0b6 (diff) | |
download | xombrero-8060f7751f91fbcf6fe5166351462a79336a9148.tar.gz |
this makes t->cmd a beginning status bar like thing.
- progress indicator updates here now also - favicon updated here now also - URL: <%s> for url of page when not in :cmd mode - Link: <%s> for url of link when hovering over edd likes it, no negative feedback, can easily be backed out or tweaked committing primarily because this matches what email of the last few days ago concluded and marco seems busy
-rw-r--r-- | xxxterm.c | 92 |
1 files changed, 75 insertions, 17 deletions
diff --git a/xxxterm.c b/xxxterm.c index a5605ea..ca2bd68 100644 --- a/xxxterm.c +++ b/xxxterm.c @@ -190,7 +190,7 @@ struct tab { /* flags */ int focus_wv; int ctrl_click; - gchar *hover; + gchar *cmd_store; int xtp_meaning; /* identifies dls/favorites */ /* hints */ @@ -390,6 +390,11 @@ struct karg { #define XT_CMD_TABNEW (2) #define XT_CMD_TABNEW_CURRENT (3) +#define XT_SETCMD_NOSTORE (0) +#define XT_SETCMD_LINK (1) +#define XT_SETCMD_CMD (2) +#define XT_SETCMD_URI (3) + #define XT_SES_DONOTHING (0) #define XT_SES_CLOSETABS (1) @@ -634,6 +639,43 @@ load_webkit_string(struct tab *t, const char *str) } void +set_cmd(struct tab *t, gchar *s, int store) +{ + gchar *type = NULL; + + if (s == NULL) + return; + + switch (store) { + case XT_SETCMD_LINK: + type = g_strdup_printf("Link: <%s>", s); + if (!t->cmd_store) + t->cmd_store = strdup(gtk_entry_get_text(GTK_ENTRY(t->cmd))); + s = type; + break; + case XT_SETCMD_URI: + type = g_strdup_printf("URI: <%s>", s); + if (!t->cmd_store) { + t->cmd_store = g_strdup(type); + } + s = type; + /* fallthrough */ + case XT_SETCMD_CMD: + if (!t->cmd_store) + t->cmd_store = strdup(s); + break; + case XT_SETCMD_NOSTORE: + /* fallthrough */ + default: + break; + } + gtk_entry_set_text(GTK_ENTRY(t->cmd), s); + gtk_widget_show(t->cmd); + if (type) + g_free(type); +} + +void hide_oops(struct tab *t) { gtk_widget_hide(t->oops); @@ -642,7 +684,9 @@ hide_oops(struct tab *t) void hide_cmd(struct tab *t) { - gtk_widget_hide(t->cmd); + set_cmd(t, (char *)t->cmd_store, 0); + gtk_widget_grab_focus(GTK_WIDGET(t->wv)); + /* gtk_widget_hide(t->cmd); */ } void @@ -3325,7 +3369,7 @@ command(struct tab *t, struct karg *args) DNPRINTF(XT_D_CMD, "command: type %s\n", s); - gtk_entry_set_text(GTK_ENTRY(t->cmd), s); + set_cmd(t, s, XT_SETCMD_CMD); gdk_color_parse("white", &color); gtk_widget_modify_base(t->cmd, GTK_STATE_NORMAL, &color); show_cmd(t); @@ -4692,6 +4736,8 @@ abort_favicon_download(struct tab *t) gtk_entry_set_icon_from_icon_name(GTK_ENTRY(t->uri_entry), GTK_ENTRY_ICON_PRIMARY, "text-html"); + gtk_entry_set_icon_from_icon_name(GTK_ENTRY(t->cmd), + GTK_ENTRY_ICON_PRIMARY, "text-html"); } void @@ -4727,6 +4773,8 @@ set_favicon_from_file(struct tab *t, char *file) if (pixbuf == NULL) { gtk_entry_set_icon_from_icon_name(GTK_ENTRY(t->uri_entry), GTK_ENTRY_ICON_PRIMARY, "text-html"); + gtk_entry_set_icon_from_icon_name(GTK_ENTRY(t->cmd), + GTK_ENTRY_ICON_PRIMARY, "text-html"); return; } @@ -4751,6 +4799,8 @@ set_favicon_from_file(struct tab *t, char *file) t->icon_pixbuf = scaled; gtk_entry_set_icon_from_pixbuf(GTK_ENTRY(t->uri_entry), GTK_ENTRY_ICON_PRIMARY, t->icon_pixbuf); + gtk_entry_set_icon_from_pixbuf(GTK_ENTRY(t->cmd), + GTK_ENTRY_ICON_PRIMARY, t->icon_pixbuf); } void @@ -4891,8 +4941,14 @@ notify_load_status_cb(WebKitWebView* wview, GParamSpec* pspec, struct tab *t) case WEBKIT_LOAD_COMMITTED: frame = webkit_web_view_get_main_frame(wview); uri = webkit_web_frame_get_uri(frame); - if (uri) + if (uri) { gtk_entry_set_text(GTK_ENTRY(t->uri_entry), uri); + if (t->cmd_store) { + g_free(t->cmd_store); + t->cmd_store = NULL; + } + set_cmd(t, (char *)uri, XT_SETCMD_URI); + } /* check if js white listing is enabled */ if (enable_js_whitelist) { @@ -4985,6 +5041,8 @@ webview_progress_changed_cb(WebKitWebView *wv, int progress, struct tab *t) { gtk_entry_set_progress_fraction(GTK_ENTRY(t->uri_entry), progress == 100 ? 0 : (double)progress / 100); + gtk_entry_set_progress_fraction(GTK_ENTRY(t->cmd), + progress == 100 ? 0 : (double)progress / 100); } int @@ -5173,7 +5231,6 @@ webview_download_cb(WebKitWebView *wv, WebKitDownload *wk_download, struct tab * return (ret); /* start download */ } -/* XXX currently unused */ void webview_hover_cb(WebKitWebView *wv, gchar *title, gchar *uri, struct tab *t) { @@ -5183,14 +5240,13 @@ webview_hover_cb(WebKitWebView *wv, gchar *title, gchar *uri, struct tab *t) errx(1, "webview_hover_cb"); if (uri) { - if (t->hover) { - g_free(t->hover); - t->hover = NULL; + set_cmd(t, uri, XT_SETCMD_LINK); + } else { + if (t->cmd_store) { + set_cmd(t, t->cmd_store, XT_SETCMD_NOSTORE); + } else { + hide_cmd(t); } - t->hover = g_strdup(uri); - } else if (t->hover) { - g_free(t->hover); - t->hover = NULL; } } @@ -5735,10 +5791,6 @@ create_toolbar(struct tab *t) gtk_box_pack_start(GTK_BOX(eb1), t->uri_entry, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(b), eb1, TRUE, TRUE, 0); - /* set empty favicon */ - gtk_entry_set_icon_from_icon_name(GTK_ENTRY(t->uri_entry), - GTK_ENTRY_ICON_PRIMARY, "text-html"); - /* search entry */ if (fancy_bar && search_string) { GtkWidget *eb2; @@ -5968,6 +6020,12 @@ create_new_tab(char *title, struct undo *u, int focus) /* xtp meaning is normal by default */ t->xtp_meaning = XT_XTP_TAB_MEANING_NORMAL; + /* set empty favicon */ + gtk_entry_set_icon_from_icon_name(GTK_ENTRY(t->uri_entry), + GTK_ENTRY_ICON_PRIMARY, "text-html"); + gtk_entry_set_icon_from_icon_name(GTK_ENTRY(t->cmd), + GTK_ENTRY_ICON_PRIMARY, "text-html"); + /* and show it all */ gtk_widget_show_all(b); gtk_widget_show_all(t->vbox); @@ -6016,7 +6074,7 @@ create_new_tab(char *title, struct undo *u, int focus) g_object_connect(G_OBJECT(t->wv), "signal::key-press-event", (GCallback)wv_keypress_cb, t, "signal-after::key-press-event", (GCallback)wv_keypress_after_cb, t, - /* "signal::hovering-over-link", (GCallback)webview_hover_cb, t, */ + "signal::hovering-over-link", (GCallback)webview_hover_cb, t, "signal::download-requested", (GCallback)webview_download_cb, t, "signal::mime-type-policy-decision-requested", (GCallback)webview_mimetype_cb, t, "signal::navigation-policy-decision-requested", (GCallback)webview_npd_cb, t, |