Exemple #1
0
static widget_handler_status_T
push_add_server_button(struct dialog_data *dlg_data, struct widget_data *button)
{
    /* [gettext_accelerator_context(.push_add_server_button)] */
#define SERVER_WIDGETS_COUNT 3
    struct terminal *term = dlg_data->win->term;
    struct dialog *dlg;
    unsigned char *name;
    unsigned char *text;

    dlg = calloc_dialog(SERVER_WIDGETS_COUNT, MAX_STR_LEN);
    if (!dlg) return EVENT_NOT_PROCESSED;

    name = get_dialog_offset(dlg, SERVER_WIDGETS_COUNT);
    dlg->title = _("Add server", term);
    dlg->layouter = generic_dialog_layouter;
    dlg->udata = NULL;
    dlg->udata2 = NULL;
    text = _("Server name", term);
    add_dlg_field_float(dlg, text, 0, 0, check_nonempty, MAX_STR_LEN, name, NULL);
    add_dlg_ok_button(dlg, _("~OK", term), B_ENTER, add_server_do, name);
    add_dlg_button(dlg, _("~Cancel", term), B_ESC, cancel_dialog, NULL);
    add_dlg_end(dlg, SERVER_WIDGETS_COUNT);
    do_dialog(term, dlg, getml(dlg, (void *) NULL));

    return EVENT_PROCESSED;
#undef SERVER_WIDGETS_COUNT
}
Exemple #2
0
static void
build_edit_dialog(struct terminal *term, struct cookie *cookie)
{
#define EDIT_WIDGETS_COUNT 8
    /* [gettext_accelerator_context(.build_edit_dialog)] */
    struct dialog *dlg;
    unsigned char *name, *value, *domain, *expires, *secure;
    unsigned char *dlg_server;
    int length = 0;

    dlg = calloc_dialog(EDIT_WIDGETS_COUNT, MAX_STR_LEN * 5);
    if (!dlg) return;

    dlg->title = _("Edit", term);
    dlg->layouter = generic_dialog_layouter;
    dlg->udata = cookie;
    dlg->udata2 = NULL;

    name = get_dialog_offset(dlg, EDIT_WIDGETS_COUNT);
    value = name + MAX_STR_LEN;
    domain = value + MAX_STR_LEN;
    expires = domain + MAX_STR_LEN;
    secure = expires + MAX_STR_LEN;

    safe_strncpy(name, cookie->name, MAX_STR_LEN);
    safe_strncpy(value, cookie->value, MAX_STR_LEN);
    safe_strncpy(domain, cookie->domain, MAX_STR_LEN);
    /* Bug 923: Assumes time_t values fit in unsigned long.  */
    ulongcat(expires, &length, cookie->expires, MAX_STR_LEN, 0);
    length = 0;
    ulongcat(secure, &length, cookie->secure, MAX_STR_LEN, 0);

    dlg_server = cookie->server->host;
    dlg_server = straconcat(_("Server", term), ": ", dlg_server, "\n",
                            (unsigned char *) NULL);

    if (!dlg_server) {
        mem_free(dlg);
        return;
    }

    add_dlg_text(dlg, dlg_server, ALIGN_LEFT, 0);
    add_dlg_field_float(dlg, _("Name", term), 0, 0, set_cookie_name, MAX_STR_LEN, name, NULL);
    add_dlg_field_float(dlg, _("Value", term), 0, 0, set_cookie_value, MAX_STR_LEN, value, NULL);
    add_dlg_field_float(dlg, _("Domain", term), 0, 0, set_cookie_domain, MAX_STR_LEN, domain, NULL);
    add_dlg_field_float(dlg, _("Expires", term), 0, 0, set_cookie_expires, MAX_STR_LEN, expires, NULL);
    add_dlg_field_float(dlg, _("Secure", term), 0, 0, set_cookie_secure, MAX_STR_LEN, secure, NULL);

    add_dlg_button(dlg, _("~OK", term), B_ENTER, ok_dialog, NULL);
    add_dlg_button(dlg, _("~Cancel", term), B_ESC, cancel_dialog, NULL);

    add_dlg_end(dlg, EDIT_WIDGETS_COUNT);

    do_dialog(term, dlg, getml(dlg, (void *) dlg_server, (void *) NULL));
#undef EDIT_WIDGETS_COUNT
}
Exemple #3
0
void
display_download(struct terminal *term, struct file_download *file_download,
		 struct session *ses)
{
	/* [gettext_accelerator_context(display_download)] */
	struct dialog *dlg;

	if (!is_in_downloads_list(file_download))
		return;

#if CONFIG_BITTORRENT
#define DOWNLOAD_WIDGETS_COUNT 5
#else
#define DOWNLOAD_WIDGETS_COUNT 4
#endif

	dlg = calloc_dialog(DOWNLOAD_WIDGETS_COUNT, 0);
	if (!dlg) return;

	undisplay_download(file_download);
	file_download->ses = ses;
	dlg->title = _("Download", term);
	dlg->layouter = download_dialog_layouter;
	dlg->abort = download_abort_function;
	dlg->udata = file_download;

	object_lock(file_download);

	add_dlg_button(dlg, _("~Background", term), B_ENTER | B_ESC, dlg_undisplay_download, NULL);
	add_dlg_button(dlg, _("Background with ~notify", term), B_ENTER | B_ESC, dlg_set_notify, NULL);

#if CONFIG_BITTORRENT
	if (file_download->uri->protocol == PROTOCOL_BITTORRENT)
		add_dlg_button(dlg, _("~Info", term), B_ENTER | B_ESC, dlg_show_bittorrent_info, NULL);
#endif

	add_dlg_button(dlg, _("~Abort", term), 0, dlg_abort_download, NULL);

	/* Downloads scheduled to be opened by external handlers are always
	 * deleted. */
	if (!file_download->external_handler) {
		add_dlg_button(dlg, _("Abort and ~delete file", term), 0, push_delete_button, NULL);
	}

#if CONFIG_BITTORRENT
	add_dlg_end(dlg, DOWNLOAD_WIDGETS_COUNT - !!file_download->external_handler
		         - (file_download->uri->protocol != PROTOCOL_BITTORRENT));
#else
	add_dlg_end(dlg, DOWNLOAD_WIDGETS_COUNT - !!file_download->external_handler);
#endif

	do_dialog(term, dlg, getml(dlg, (void *) NULL));
}
Exemple #4
0
/* TODO: In bookmark/dialogs.c most users seem to want also the dialog_data
 * so we should make when_*() functions take dialog_data instead. --jonas */
void
do_edit_dialog(struct terminal *term, int intl, unsigned char *title,
	       const unsigned char *src_name,
	       const unsigned char *src_url,
	       struct session *ses, struct dialog_data *parent,
	       done_handler_T *when_done,
	       void when_cancel(struct dialog *),
	       void *done_data,
	       enum edit_dialog_type dialog_type)
{
	/* [gettext_accelerator_context(do_edit_dialog)] */
	unsigned char *name, *url;
	struct dialog *dlg;

	if (intl) title = _(title, term);

	/* Number of fields in edit dialog --Zas */
#define EDIT_WIDGETS_COUNT 5

	/* Create the dialog */
	dlg = calloc_dialog(EDIT_WIDGETS_COUNT, 2 * MAX_STR_LEN);
	if (!dlg) return;

	name = get_dialog_offset(dlg, EDIT_WIDGETS_COUNT);
	url = name + MAX_STR_LEN;

	/* Get the name */
	if (!src_name) {
		/* Unknown name. */
		get_current_title(ses, name, MAX_STR_LEN);
	} else {
		/* Known name. */
		safe_strncpy(name, src_name, MAX_STR_LEN);
	}

	/* Get the url */
	if (!src_url) {
		/* Unknown . */
		get_current_url(ses, url, MAX_STR_LEN);
	} else {
		/* Known url. */
		safe_strncpy(url, src_url, MAX_STR_LEN);
	}

	dlg->title = title;
	dlg->layouter = generic_dialog_layouter;
	dlg->layout.maximize_width = 1;
	dlg->udata = parent;
	dlg->udata2 = done_data;

	if (dialog_type == EDIT_DLG_ADD)
		add_dlg_field(dlg, _("Name", term), 0, 0, check_nonempty, MAX_STR_LEN, name, NULL);
	else
		add_dlg_field(dlg, _("Name", term), 0, 0, NULL, MAX_STR_LEN, name, NULL);

	add_dlg_field(dlg, _("URL", term), 0, 0, NULL, MAX_STR_LEN, url, NULL);

	add_dlg_ok_button(dlg, _("~OK", term), B_ENTER, when_done, dlg);
	add_dlg_button(dlg, _("C~lear", term), 0, clear_dialog, NULL);

	if (when_cancel)
		add_dlg_button(dlg, _("~Cancel", term), B_ESC,
			       my_cancel_dialog, when_cancel);
	else
		add_dlg_button(dlg, _("~Cancel", term), B_ESC,
			       cancel_dialog, NULL);

	add_dlg_end(dlg, EDIT_WIDGETS_COUNT);

	do_dialog(term, dlg, getml(dlg, (void *) NULL));

#undef EDIT_WIDGETS_COUNT
}
Exemple #5
0
void
menu_keys(struct terminal *term, void *d_, void *xxx)
{
	/* [gettext_accelerator_context(menu_keys)] */
	int d = (long) d_;

	/* We scale by main mapping because it has the most actions */
	action_id_T action_ids[MAIN_ACTIONS] = {
		ACT_MAIN_MENU,
		ACT_MAIN_QUIT,
		ACT_MAIN_MOVE_LINK_NEXT,
		ACT_MAIN_MOVE_LINK_PREV,
		ACT_MAIN_SCROLL_DOWN,
		ACT_MAIN_SCROLL_UP,
		ACT_MAIN_SCROLL_LEFT,
		ACT_MAIN_SCROLL_RIGHT,
		ACT_MAIN_HISTORY_MOVE_BACK,
		ACT_MAIN_GOTO_URL,
		ACT_MAIN_GOTO_URL_CURRENT,
		ACT_MAIN_DOCUMENT_INFO,
		ACT_MAIN_HEADER_INFO,
		ACT_MAIN_SEARCH,
		ACT_MAIN_SEARCH_BACK,
		ACT_MAIN_FIND_NEXT,
		ACT_MAIN_FIND_NEXT_BACK,
		ACT_MAIN_LINK_FOLLOW,
		ACT_MAIN_LINK_DOWNLOAD,
		ACT_MAIN_TOGGLE_HTML_PLAIN,

		ACT_MAIN_NONE,
	};
	struct string keys;
	struct keys_toggle_info *info;

	info = (struct keys_toggle_info *)mem_calloc(1, sizeof(*info));

	if (!info || !init_string(&keys)) {
		mem_free_if(info);
		return;
	}

	info->term = term;
	info->toggle = d;

	if (info->toggle) {
		int action_id;
		int keymap_id;

		for (action_id = 0; action_id < MAIN_ACTIONS - 1; action_id++) {
			action_ids[action_id] = action_id + 1;
		}

		for (keymap_id = 0; keymap_id < KEYMAP_MAX; keymap_id++) {
			add_actions_to_string(&keys, action_ids, keymap_id, term);
			if (keymap_id + 1 < KEYMAP_MAX)
				add_to_string(&keys, (const unsigned char *)"\n\n");

			/* Just a little reminder that the following code takes
			 * the easy way. */
			assert((int) MAIN_ACTIONS > (int) EDIT_ACTIONS);
			assert((int) EDIT_ACTIONS > (int) MENU_ACTIONS);

			if (keymap_id == KEYMAP_MAIN) {
				action_ids[EDIT_ACTIONS] = ACT_EDIT_NONE;
			} else if (keymap_id == KEYMAP_EDIT) {
				action_ids[MENU_ACTIONS] = ACT_MENU_NONE;
			}
		}
	} else {
		add_actions_to_string(&keys, action_ids, KEYMAP_MAIN, term);
	}

	msg_box(term, getml(info, (void *) NULL), MSGBOX_FREE_TEXT | MSGBOX_SCROLLABLE,
		N_("Keys"), ALIGN_LEFT,
		keys.source,
		info, 2,
		MSG_BOX_BUTTON(N_("~OK"), NULL, B_ENTER | B_ESC),
		MSG_BOX_BUTTON(N_("~Toggle display"), push_toggle_keys_display_button, B_ENTER));
}
Exemple #6
0
/* TODO: Take auth_entry from data. --jonas */
void
do_auth_dialog(struct session *ses, void *data)
{
	/* [gettext_accelerator_context(do_auth_dialog)] */
	struct dialog *dlg;
	struct dialog_data *dlg_data;
	struct terminal *term = ses->tab->term;
	struct auth_entry *a = get_invalid_auth_entry();
	unsigned char sticker[MAX_STR_LEN], *text;
	int sticker_len;

	if (!a || a->blocked) return;

	text = get_uri_string(a->uri, URI_HTTP_AUTH);
	if (!text) return;

#ifdef CONFIG_FORMHIST
	{
		unsigned char *user = get_form_history_value(text, (unsigned char *)"user");
		unsigned char *password = get_form_history_value(text, (unsigned char *)"password");

		if (user) {
			strncpy((char *)a->user, (const char *)user, AUTH_USER_MAXLEN - 1);
		}
		if (password) {
			strncpy((char *)a->password, (const char *)password, AUTH_PASSWORD_MAXLEN - 1);
		}
	}
#endif

	sticker_len = snprintf((char *)sticker, sizeof(sticker),
			       (const char *)_("Authentication required for %s at %s", term),
			       a->realm, text);
	mem_free(text);
	if (sticker_len < 0 || sticker_len > MAX_STR_LEN) return;

#define AUTH_WIDGETS_COUNT 5
	/* + 1 to leave room for the '\0'. */
	dlg = calloc_dialog(AUTH_WIDGETS_COUNT, sticker_len + 1);
	if (!dlg) return;

	a->blocked = 1;

	/* This function is used for at least HTTP and FTP, so don't
	 * name the protocol here.  Consider also what an FTP server
	 * behind an HTTP proxy should be called.  */
	dlg->title = _("Authentication required", term);
	dlg->layouter = generic_dialog_layouter;

	text = get_dialog_offset(dlg, AUTH_WIDGETS_COUNT);
	memcpy(text, sticker, sticker_len); /* calloc_dialog has stored '\0' */

	dlg->udata = (void *) ses;
	dlg->udata2 = a;

	add_dlg_text(dlg, text, ALIGN_LEFT, 0);
	add_dlg_field_float(dlg, _("Login", term), 0, 0, NULL, AUTH_USER_MAXLEN, a->user, NULL);
	add_dlg_field_float_pass(dlg, _("Password", term), 0, 0, NULL, AUTH_PASSWORD_MAXLEN, a->password);

	add_dlg_ok_button(dlg, _("~OK", term), B_ENTER, auth_ok, dlg);
	add_dlg_ok_button(dlg, _("~Cancel", term), B_ESC, auth_cancel, a);

	add_dlg_end(dlg, AUTH_WIDGETS_COUNT);

	dlg_data = do_dialog(term, dlg, getml(dlg, (void *) NULL));
	/* When there's some username, but no password, automagically jump to
	 * the password. */
	if (dlg_data && a->user[0] && !a->password[0])
		select_widget_by_id(dlg_data, 1);
}
Exemple #7
0
static void block_edit_item(struct dialog_data *dlg, void *data, void (*ok_fn)(struct dialog_data *, void *, void *, struct list_description *), void *ok_arg, unsigned char dlg_title)
{
	/*Copied from types.c */
	/*Data is a new item generated by the "default" function*/
	struct block *neww=(struct block*)data;

	struct terminal *term=dlg->win->term;
	struct dialog *d;
	struct assoc_ok_struct *s;
	unsigned char *url;


	/*Allocate space for dialog, 4 items followed by 1 string*/
	d = mem_alloc(sizeof(struct dialog) + 4 * sizeof(struct dialog_item) + 1 * MAX_STR_LEN);
	memset(d, 0, sizeof(struct dialog) + 4 * sizeof(struct dialog_item) + 1 * MAX_STR_LEN);

	/*Set up this string */
	url=(unsigned char *)&d->items[4];
	if (neww->url)safe_strncpy(url,neww->url,MAX_STR_LEN);

	/* Create the dialog */
	s = mem_alloc(sizeof(struct assoc_ok_struct));

	s->fn=ok_fn;
	s->data=ok_arg;
	s->dlg=dlg;

	switch (dlg_title)
	{
		case TITLE_EDIT:
		d->title=TEXT_(T_BLOCK_EDIT);
		break;

		case TITLE_ADD:
		d->title=TEXT_(T_BLOCK_ADD);
		break;

		default:
		internal("Unsupported dialog title.\n");
	}

	d->udata=data;
	d->udata2=s;
	d->fn = block_edit_item_fn;
	d->abort=block_edit_abort;
	d->refresh=block_edit_done;
	d->refresh_data = d;
	d->items[0].type = D_FIELD;
	d->items[0].dlen = MAX_STR_LEN;
	d->items[0].data = url;
	d->items[0].fn = check_nonempty;
	d->items[1].type = D_BUTTON;
	d->items[1].gid = B_ENTER;
	d->items[1].fn = ok_dialog;
	d->items[1].text = TEXT_(T_OK);
	d->items[2].type = D_BUTTON;
	d->items[2].gid = B_ESC;
	d->items[2].text = TEXT_(T_CANCEL);
	d->items[2].fn = cancel_dialog;
	d->items[3].type = D_END;
	do_dialog(term, d, getml(d, NULL));
}