diff options
author | Josh Rickmar <jrick@devio.us> | 2012-06-01 16:57:37 -0400 |
---|---|---|
committer | Josh Rickmar <jrick@devio.us> | 2012-06-01 16:57:37 -0400 |
commit | 4a89688b2bd24de45155cdd95d5e29ae3c9d1229 (patch) | |
tree | 5d606c0f01ab199eabbc753259566aedc27a5bb6 /xombrero.c | |
parent | 59e5b689070af33f9597ee85f9d046e850aa26e8 (diff) | |
download | xombrero-4a89688b2bd24de45155cdd95d5e29ae3c9d1229.tar.gz |
Fix the behavior of show_url and fancy_bar so they actually act like
the manpage says they do. Setting show_url = 1 and fancy_bar = 0 will now only display the url bar on the toolbar and not draw the buttons and search box.
Diffstat (limited to 'xombrero.c')
-rw-r--r-- | xombrero.c | 159 |
1 files changed, 78 insertions, 81 deletions
diff --git a/xombrero.c b/xombrero.c index 4b16a8d..6835fb7 100644 --- a/xombrero.c +++ b/xombrero.c @@ -167,6 +167,11 @@ TAILQ_HEAD(command_list, command_entry); #define XT_ZOOM_OUT (-2) #define XT_ZOOM_NORMAL (100) +#define XT_CMD_OPEN (0) +#define XT_CMD_OPEN_CURRENT (1) +#define XT_CMD_TABNEW (2) +#define XT_CMD_TABNEW_CURRENT (3) + #define XT_STATUS_NOTHING (0) #define XT_STATUS_LINK (1) #define XT_STATUS_URI (2) @@ -2610,21 +2615,14 @@ movetab(struct tab *t, struct karg *args) int cmd_prefix = 0; -struct prompt_sub { - const char *s; - const char *(*f)(struct tab *); -} subs[] = { - { "<uri>", get_uri }, -}; int command(struct tab *t, struct karg *args) { - struct karg a; - int i; - char *s = NULL, *sp = NULL, *sl = NULL; - gchar **sv; + char *s = NULL, *ss = NULL; gchar *text, *base; + const gchar *uri; + struct karg a; if (t == NULL || args == NULL) { show_oops(NULL, "command invalid parameters"); @@ -2639,31 +2637,13 @@ command(struct tab *t, struct karg *args) s = "?"; break; case ':': - if (cmd_prefix == 0) { - if (args->s != NULL && strlen(args->s) != 0) { - ss = g_strdup_printf(":%s", args->s); - s = sp; - } else - s = ":"; - } else { + if (cmd_prefix == 0) + s = ":"; + else { ss = g_strdup_printf(":%d", cmd_prefix); - s = sp; + s = ss; cmd_prefix = 0; } - sl = g_strdup(s); - if (sp) { - g_free(sp); - sp = NULL; - } - s = sl; - for (i = 0; i < sizeof subs / sizeof (struct prompt_sub); ++i) { - sv = g_strsplit(sl, subs[i].s, -1); - if (sl) - g_free(sl); - sl = g_strjoinv(subs[i].f(t), sv); - g_strfreev(sv); - s = sl; - } break; case '.': t->mode = XT_MODE_HINT; @@ -2679,6 +2659,23 @@ command(struct tab *t, struct karg *args) hint(t, &a); s = ","; break; + case XT_CMD_OPEN: + s = ":open "; + break; + case XT_CMD_TABNEW: + s = ":tabnew "; + break; + case XT_CMD_OPEN_CURRENT: + s = ":open "; + /* FALL THROUGH */ + case XT_CMD_TABNEW_CURRENT: + if (!s) /* FALL THROUGH? */ + s = ":tabnew "; + if ((uri = get_uri(t)) != NULL) { + ss = g_strdup_printf("%s%s", s, uri); + s = ss; + } + break; default: show_oops(t, "command: invalid opcode %d", args->i); return (XT_CB_PASSTHROUGH); @@ -2698,10 +2695,8 @@ command(struct tab *t, struct karg *args) gtk_widget_grab_focus(GTK_WIDGET(t->cmd)); gtk_editable_set_position(GTK_EDITABLE(t->cmd), -1); - if (sp) - g_free(sp); - if (sl) - g_free(sl); + if (ss) + g_free(ss); return (XT_CB_HANDLED); } @@ -3198,6 +3193,12 @@ struct cmd { { "encoding", 0, set_encoding, 0, XT_USERARG }, { "loadimages", 0, tabaction, XT_TAB_LOAD_IMAGES, 0 }, + /* command aliases (handy when -S flag is used) */ + { "promptopen", 0, command, XT_CMD_OPEN, 0 }, + { "promptopencurrent", 0, command, XT_CMD_OPEN_CURRENT, 0 }, + { "prompttabnew", 0, command, XT_CMD_TABNEW, 0 }, + { "prompttabnewcurrent",0, command, XT_CMD_TABNEW_CURRENT, 0 }, + /* settings */ { "set", 0, set, 0, XT_SETARG }, @@ -5416,7 +5417,6 @@ done: gboolean handle_keypress(struct tab *t, GdkEventKey *e, int entry) { - struct karg args; struct key_binding *k; /* handle keybindings if buffercmd is empty. @@ -5431,15 +5431,11 @@ handle_keypress(struct tab *t, GdkEventKey *e, int entry) (e->state & CTRL || e->state & MOD1)) return (XT_CB_PASSTHROUGH); - if ((k->mask == 0 && - (e->state & (CTRL | MOD1)) == 0) || - (e->state & k->mask) == k->mask) { - if (k->cmd[0] == ':') { - args.i = ':'; - args.s = &k->cmd[1]; - return command(t, &args); - } else + if (k->mask == 0) { + if ((e->state & (CTRL | MOD1)) == 0) return (cmd_execute(t, k->cmd)); + } else if ((e->state & k->mask) == k->mask) { + return (cmd_execute(t, k->cmd)); } } @@ -6453,36 +6449,38 @@ create_toolbar(struct tab *t) toolbar = b; gtk_container_set_border_width(GTK_CONTAINER(toolbar), 0); - /* backward button */ - t->backward = create_button("Back", GTK_STOCK_GO_BACK, 0); - gtk_widget_set_sensitive(t->backward, FALSE); - g_signal_connect(G_OBJECT(t->backward), "clicked", - G_CALLBACK(backward_cb), t); - gtk_box_pack_start(GTK_BOX(b), t->backward, FALSE, FALSE, 0); - - /* forward button */ - t->forward = create_button("Forward",GTK_STOCK_GO_FORWARD, 0); - gtk_widget_set_sensitive(t->forward, FALSE); - g_signal_connect(G_OBJECT(t->forward), "clicked", - G_CALLBACK(forward_cb), t); - gtk_box_pack_start(GTK_BOX(b), t->forward, FALSE, - FALSE, 0); - - /* stop button */ - t->stop = create_button("Stop", GTK_STOCK_STOP, 0); - gtk_widget_set_sensitive(t->stop, FALSE); - g_signal_connect(G_OBJECT(t->stop), "clicked", - G_CALLBACK(stop_cb), t); - gtk_box_pack_start(GTK_BOX(b), t->stop, FALSE, - FALSE, 0); - - /* JS button */ - t->js_toggle = create_button("JS-Toggle", enable_scripts ? - GTK_STOCK_MEDIA_PLAY : GTK_STOCK_MEDIA_PAUSE, 0); - gtk_widget_set_sensitive(t->js_toggle, TRUE); - g_signal_connect(G_OBJECT(t->js_toggle), "clicked", - G_CALLBACK(js_toggle_cb), t); - gtk_box_pack_start(GTK_BOX(b), t->js_toggle, FALSE, FALSE, 0); + if (fancy_bar) { + /* backward button */ + t->backward = create_button("Back", GTK_STOCK_GO_BACK, 0); + gtk_widget_set_sensitive(t->backward, FALSE); + g_signal_connect(G_OBJECT(t->backward), "clicked", + G_CALLBACK(backward_cb), t); + gtk_box_pack_start(GTK_BOX(b), t->backward, FALSE, FALSE, 0); + + /* forward button */ + t->forward = create_button("Forward",GTK_STOCK_GO_FORWARD, 0); + gtk_widget_set_sensitive(t->forward, FALSE); + g_signal_connect(G_OBJECT(t->forward), "clicked", + G_CALLBACK(forward_cb), t); + gtk_box_pack_start(GTK_BOX(b), t->forward, FALSE, + FALSE, 0); + + /* stop button */ + t->stop = create_button("Stop", GTK_STOCK_STOP, 0); + gtk_widget_set_sensitive(t->stop, FALSE); + g_signal_connect(G_OBJECT(t->stop), "clicked", + G_CALLBACK(stop_cb), t); + gtk_box_pack_start(GTK_BOX(b), t->stop, FALSE, + FALSE, 0); + + /* JS button */ + t->js_toggle = create_button("JS-Toggle", enable_scripts ? + GTK_STOCK_MEDIA_PLAY : GTK_STOCK_MEDIA_PAUSE, 0); + gtk_widget_set_sensitive(t->js_toggle, TRUE); + g_signal_connect(G_OBJECT(t->js_toggle), "clicked", + G_CALLBACK(js_toggle_cb), t); + gtk_box_pack_start(GTK_BOX(b), t->js_toggle, FALSE, FALSE, 0); + } t->uri_entry = gtk_entry_new(); g_signal_connect(G_OBJECT(t->uri_entry), "activate", @@ -6496,7 +6494,7 @@ create_toolbar(struct tab *t) gtk_box_pack_start(GTK_BOX(b), eb1, TRUE, TRUE, 0); /* search entry */ - if (search_string != NULL && strlen(search_string) != 0) { + if (fancy_bar && search_string != NULL && strlen(search_string) != 0) { GtkWidget *eb2; t->search_entry = gtk_entry_new(); gtk_entry_set_width_chars(GTK_ENTRY(t->search_entry), 30); @@ -6890,7 +6888,7 @@ create_new_tab(char *title, struct undo *u, int focus, int position) 0); } else { t->toolbar = create_toolbar(t); - if (fancy_bar) + if (show_url) gtk_box_pack_start(GTK_BOX(t->vbox), t->toolbar, FALSE, FALSE, 0); } @@ -7696,6 +7694,9 @@ main(int argc, char **argv) start_argv = (char * const *)argv; + if (os_init) + os_init(); + /* prepare gtk */ #ifdef USE_THREADS #if !defined __MINGW32__ @@ -7835,10 +7836,6 @@ main(int argc, char **argv) spell_check_languages = g_strdup("en_US"); encoding = g_strdup("UTF-8"); - /* override os specific settings */ - if (os_init) - os_init(); - /* read config file */ if (strlen(conf) == 0) snprintf(conf, sizeof conf, "%s" PS ".%s", |