亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? menu.c

?? 一個很有名的瀏覽器
?? C
?? 第 1 頁 / 共 2 頁
字號:
			scroll_menu(menu, 0, 1);			display_menu(win->term, menu);			select_menu(win->term, menu);		}	}}#endif#define DIST 5static voidmenu_page_up(struct menu *menu){	int current = int_max(0, int_min(menu->selected, menu->size - 1));	int step;	int i;	int next_sep = 0;	for (i = current - 1; i > 0; i--)		if (mi_is_horizontal_bar(&menu->items[i])) {			next_sep = i;			break;		}	step = current - next_sep + 1;	int_bounds(&step, 0, int_min(current, DIST));	scroll_menu(menu, -step, 0);}static voidmenu_page_down(struct menu *menu){	int current = int_max(0, int_min(menu->selected, menu->size - 1));	int step;	int i;	int next_sep = menu->size - 1;	for (i = current + 1; i < menu->size; i++)		if (mi_is_horizontal_bar(&menu->items[i])) {			next_sep = i;			break;		}	step = next_sep - current + 1;	int_bounds(&step, 0, int_min(menu->size - 1 - current, DIST));	scroll_menu(menu, step, 0);}#undef DISTstatic inline intsearch_menu_item(struct menu_item *item, unsigned char *buffer,		 struct terminal *term){	unsigned char *text, *match;	if (!mi_has_left_text(item)) return 0;	text = mi_text_translate(item) ? _(item->text, term) : item->text;	/* Crap. We have to remove the hotkey markers '~' */	text = stracpy(text);	if (!text) return 0;	match = strchr(text, '~');	if (match)		memmove(match, match + 1, strlen(match));	match = strcasestr(text, buffer);	mem_free(text);	return !!match;}static enum input_line_codemenu_search_handler(struct input_line *line, int action){	struct menu *menu = line->data;	struct terminal *term = menu->win->term;	unsigned char *buffer = line->buffer;	struct window *win;	int pos = menu->selected;	int direction;	switch (action) {	case ACT_EDIT_REDRAW:		return INPUT_LINE_PROCEED;	case ACT_EDIT_ENTER:		/* XXX: The input line dialog window is above the menu window.		 * Remove it from the top, so that select_menu() will correctly		 * remove all the windows it has to and then readd it. */		win = term->windows.next;		del_from_list(win);		select_menu(term, menu);		add_to_list(term->windows, win);		return INPUT_LINE_CANCEL;	case ACT_EDIT_PREVIOUS_ITEM:		pos--;		direction = -1;		break;	case ACT_EDIT_NEXT_ITEM:		pos++;	default:		direction = 1;	}	/* If there is nothing to match with don't start searching */	if (!*buffer) return INPUT_LINE_PROCEED;	pos %= menu->size;	do {		struct menu_item *item = &menu->items[pos];		if (search_menu_item(item, buffer, term)) {			scroll_menu(menu, pos - menu->selected, 0);			display_menu(term, menu);			return INPUT_LINE_PROCEED;		}		pos += direction;		if (pos == menu->size) pos = 0;		else if (pos < 0) pos = menu->size - 1;	} while (pos != menu->selected);	return INPUT_LINE_CANCEL;}static voidsearch_menu(struct menu *menu){	struct terminal *term = menu->win->term;	struct window *tab = get_current_tab(term);	struct session *ses = tab ? tab->data : NULL;	unsigned char *prompt = _("Search menu/", term);	if (menu->size < 1 || !ses) return;	input_field_line(ses, prompt, menu, NULL, menu_search_handler);}static voidmenu_kbd_handler(struct menu *menu, struct term_event *ev){	struct window *win = menu->win;	enum menu_action action = kbd_action(KEYMAP_MENU, ev, NULL);	int s = 0;	switch (action) {		case ACT_MENU_LEFT:		case ACT_MENU_RIGHT:			if (list_has_next(win->term->windows, win)			    && win->next->handler == mainmenu_handler) {				struct window *next_win = win->next;				delete_window_ev(win, ev);				select_menu(next_win->term, next_win->data);				return;			}			if (action == ACT_MENU_RIGHT)				goto enter;			delete_window(win);			return;		case ACT_MENU_UP:			scroll_menu(menu, -1, 1);			break;		case ACT_MENU_DOWN:			scroll_menu(menu, 1, 1);			break;		case ACT_MENU_HOME:			scroll_menu(menu, -menu->selected, 0);			break;		case ACT_MENU_END:			scroll_menu(menu, menu->size - menu->selected - 1, 0);			break;		case ACT_MENU_PAGE_UP:			menu_page_up(menu);			break;		case ACT_MENU_PAGE_DOWN:			menu_page_down(menu);			break;		case ACT_MENU_ENTER:		case ACT_MENU_SELECT:			goto enter;		case ACT_MENU_SEARCH:			search_menu(menu);			break;		case ACT_MENU_CANCEL:			if (list_has_next(win->term->windows, win)			    && win->next->handler == mainmenu_handler)				delete_window_ev(win, ev);			else				delete_window_ev(win, NULL);			return;		default:		{			int key = get_kbd_key(ev);			if ((key >= KBD_F1 && key <= KBD_F12)			    || check_kbd_modifier(ev, KBD_ALT)) {				delete_window_ev(win, ev);				return;			}			if (!check_kbd_label_key(ev))				break;			s = check_hotkeys(menu, key, win->term);			if (s || check_not_so_hot_keys(menu, key, win->term))				scroll_menu(menu, 0, 1);		}	}	display_menu(win->term, menu);	if (s) {enter:		select_menu(win->term, menu);	}}static voidmenu_handler(struct window *win, struct term_event *ev){	struct menu *menu = win->data;	menu->win = win;	switch (ev->ev) {		case EVENT_INIT:		case EVENT_RESIZE:		case EVENT_REDRAW:			get_parent_ptr(win, &menu->parent_x, &menu->parent_y);			count_menu_size(win->term, menu);			menu->selected--;			scroll_menu(menu, 1, 1);			display_menu(win->term, menu);			break;		case EVENT_MOUSE:#ifdef CONFIG_MOUSE			menu_mouse_handler(menu, ev);#endif /* CONFIG_MOUSE */			break;		case EVENT_KBD:			menu_kbd_handler(menu, ev);			break;		case EVENT_ABORT:			if (menu->items->flags & FREE_ANY)				free_menu_items(menu->items);			break;	}}voiddo_mainmenu(struct terminal *term, struct menu_item *items,	    void *data, int sel){	struct menu *menu = mem_calloc(1, sizeof(*menu));	if (!menu) return;	menu->selected = (sel == -1 ? 0 : sel);	menu->items = items;	menu->data = data;	menu->size = count_items(items);	menu->hotkeys = 1;#ifdef ENABLE_NLS	clear_hotkeys_cache(menu);#endif	init_hotkeys(term, menu);	add_window(term, mainmenu_handler, menu);	if (sel != -1) {		select_menu(term, menu);	}}static voiddisplay_mainmenu(struct terminal *term, struct menu *menu){	struct color_pair *normal_color = get_bfu_color(term, "menu.normal");	struct color_pair *selected_color = get_bfu_color(term, "menu.selected");	int p = 0;	int i;	struct box box;	/* FIXME: menu horizontal scrolling do not work well yet, we need to cache	 * menu items width and recalculate them only when needed (ie. language change)	 * instead of looping and calculate them each time. --Zas */	/* Try to make current selected menu entry visible. */	if (menu->selected < menu->first) {		int num_items_offscreen = menu->selected - menu->first;		menu->first += num_items_offscreen;		menu->last += num_items_offscreen;	} else if (menu->selected > menu->last) {		int num_items_offscreen = menu->last - menu->selected;		menu->first -= num_items_offscreen;		menu->last -= num_items_offscreen;	}	if (menu->last <= 0)		menu->last = menu->size - 1;	int_bounds(&menu->last, 0, menu->size - 1);	int_bounds(&menu->first, 0, menu->last);	set_box(&box, 0, 0, term->width, 1);	draw_box(term, &box, ' ', 0, normal_color);	if (menu->first != 0) {		box.width = L_MAINMENU_SPACE;		draw_box(term, &box, '<', 0, normal_color);	}	p += L_MAINMENU_SPACE;	for (i = menu->first; i < menu->size; i++) {		struct menu_item *mi = &menu->items[i];		struct color_pair *color = normal_color;		unsigned char *text = mi->text;		int l = mi->hotkey_pos;		int textlen;		int selected = (i == menu->selected);		if (mi_text_translate(mi))			text = _(text, term);		textlen = strlen(text) - !!l;		if (selected) {			color = selected_color;			box.x = p;			box.width = L_MAINTEXT_SPACE + L_TEXT_SPACE				    + textlen				    + R_TEXT_SPACE + R_MAINTEXT_SPACE;			draw_box(term, &box, ' ', 0, color);			set_cursor(term, p, 0, 1);			set_window_ptr(menu->win, p, 1);		}		p += L_MAINTEXT_SPACE;		if (l) {			draw_menu_left_text_hk(term, text, l,					       p, 0, textlen + R_TEXT_SPACE + L_TEXT_SPACE,					       color, selected);		} else {			draw_menu_left_text(term, text, textlen,					    p, 0, textlen + R_TEXT_SPACE + L_TEXT_SPACE,					    color);		}		p += textlen;		if (p >= term->width - R_MAINMENU_SPACE)			break;		p += R_MAINTEXT_SPACE + R_TEXT_SPACE + L_TEXT_SPACE;	}	menu->last = i - 1;	int_lower_bound(&menu->last, menu->first);	if (menu->last < menu->size - 1) {		set_box(&box,			term->width - R_MAINMENU_SPACE, 0,			R_MAINMENU_SPACE, 1);		draw_box(term, &box, '>', 0, normal_color);	}	redraw_from_window(menu->win);}#ifdef CONFIG_MOUSEstatic voidmainmenu_mouse_handler(struct menu *menu, struct term_event *ev){	struct window *win = menu->win;	struct menu_item *item;	int scroll = 0;	if (check_mouse_wheel(ev))		return;	/* Mouse was clicked outside the mainmenu bar */	if (ev->info.mouse.y) {		if (check_mouse_action(ev, B_DOWN))			delete_window_ev(win, NULL);		return;	}	/* First check if the mouse button was pressed in the side of the	 * terminal and simply scroll one step in that direction else iterate	 * through the menu items to see if it was pressed on a label. */	if (ev->info.mouse.x < L_MAINMENU_SPACE) {		scroll = -1;	} else if (ev->info.mouse.x >= win->term->width - R_MAINMENU_SPACE) {		scroll = 1;	} else {		int p = L_MAINMENU_SPACE;		/* We don't initialize to menu->first here, since it breaks		 * horizontal scrolling using mouse in some cases. --Zas */		foreach_menu_item (item, menu->items) {			unsigned char *text = item->text;			if (!mi_has_left_text(item)) continue;			if (mi_text_translate(item))				text = _(item->text, win->term);			/* The label width is made up of a little padding on			 * the sides followed by the text width substracting			 * one char if it has hotkeys (the '~' char) */			p += L_MAINTEXT_SPACE + L_TEXT_SPACE			  + strlen(text) - !!item->hotkey_pos			  + R_TEXT_SPACE + R_MAINTEXT_SPACE;			if (ev->info.mouse.x < p) {				scroll = (item - menu->items) - menu->selected;				break;			}		}	}	if (scroll) {		scroll_menu(menu, scroll, 1);		display_mainmenu(win->term, menu);	}	/* We need to select the menu item even if we didn't scroll	 * apparently because we will delete any drop down menus	 * in the clicking process. */	select_menu(win->term, menu);}#endifstatic voidmainmenu_kbd_handler(struct menu *menu, struct term_event *ev){	struct window *win = menu->win;	enum menu_action action = kbd_action(KEYMAP_MENU, ev, NULL);	switch (action) {	case ACT_MENU_ENTER:	case ACT_MENU_DOWN:	case ACT_MENU_UP:	case ACT_MENU_PAGE_UP:	case ACT_MENU_PAGE_DOWN:	case ACT_MENU_SELECT:		select_menu(win->term, menu);		return;	case ACT_MENU_HOME:		scroll_menu(menu, -menu->selected, 0);		break;	case ACT_MENU_END:		scroll_menu(menu, menu->size - menu->selected - 1, 0);		break;	case ACT_MENU_NEXT_ITEM:	case ACT_MENU_PREVIOUS_ITEM:		/* This is pretty western centric since `what is next'?		 * Anyway we cycle clockwise by resetting the action ... */		action = (action == ACT_MENU_NEXT_ITEM)		       ? ACT_MENU_RIGHT : ACT_MENU_LEFT;		/* ... and then letting left/right handling take over. */	case ACT_MENU_LEFT:	case ACT_MENU_RIGHT:		scroll_menu(menu, action == ACT_MENU_LEFT ? -1 : 1, 1);		break;	case ACT_MENU_REDRAW:		/* Just call display_mainmenu() */		break;	default:		/* Fallback to see if any hotkey matches the pressed key */		if (check_kbd_label_key(ev)		    && check_hotkeys(menu, get_kbd_key(ev), win->term)) {			display_mainmenu(win->term, menu);			select_menu(win->term, menu);			return;		}	case ACT_MENU_CANCEL:		delete_window_ev(win, action != ACT_MENU_CANCEL ? ev : NULL);		return;	}	/* Redraw the menu */	display_mainmenu(win->term, menu);}static voidmainmenu_handler(struct window *win, struct term_event *ev){	struct menu *menu = win->data;	menu->win = win;	switch (ev->ev) {		case EVENT_INIT:		case EVENT_RESIZE:		case EVENT_REDRAW:			display_mainmenu(win->term, menu);			break;		case EVENT_MOUSE:#ifdef CONFIG_MOUSE			mainmenu_mouse_handler(menu, ev);#endif /* CONFIG_MOUSE */			break;		case EVENT_KBD:			mainmenu_kbd_handler(menu, ev);			break;		case EVENT_ABORT:			break;	}}/* For dynamic menus the last (cleared) item is used to mark the end. */#define realloc_menu_items(mi_, size) \	mem_align_alloc(mi_, size, (size) + 2, struct menu_item, 0xF)struct menu_item *new_menu(enum menu_item_flags flags){	struct menu_item *mi = NULL;	if (realloc_menu_items(&mi, 0)) mi->flags = flags;	return mi;}voidadd_to_menu(struct menu_item **mi, unsigned char *text, unsigned char *rtext,	    enum main_action action, menu_func func, void *data,	    enum menu_item_flags flags){	int n = count_items(*mi);	/* XXX: Don't clear the last and special item. */	struct menu_item *item = realloc_menu_items(mi, n + 1);	if (!item) return;	item += n;	/* Shift current last item by one place. */	copy_struct(item + 1, item);	/* Setup the new item. All menu items share the item_free value. */	SET_MENU_ITEM(item, text, rtext, action, func, data,		      item->flags | flags, HKS_SHOW, 0);}#undef L_MAINMENU_SPACE#undef R_MAINMENU_SPACE#undef L_MAINTEXT_SPACE#undef R_MAINTEXT_SPACE#undef L_RTEXT_SPACE#undef R_RTEXT_SPACE#undef L_TEXT_SPACE#undef R_TEXT_SPACE#undef MENU_BORDER_SIZE

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人精品免费视频网站| 亚洲精品ww久久久久久p站| 日韩主播视频在线| 欧美日韩国产一二三| 亚洲午夜久久久| 制服丝袜亚洲网站| 麻豆国产欧美日韩综合精品二区| 欧美一级淫片007| 国产一区二区三区四区在线观看| 亚洲精品一区二区三区99| 国产精品69毛片高清亚洲| 久久久噜噜噜久噜久久综合| 99久久伊人精品| 天天色综合天天| 久久久久88色偷偷免费| www.色精品| 亚洲一区成人在线| 精品人在线二区三区| 成人一区二区视频| 亚洲成在线观看| 精品播放一区二区| 99精品视频在线观看免费| 亚洲国产精品久久人人爱蜜臀 | 久久久久久久久久久黄色| 成人一级视频在线观看| 亚洲一区二区三区自拍| 久久综合精品国产一区二区三区| 99久久免费精品高清特色大片| 亚洲国产成人av| 欧美国产精品一区二区三区| 欧美专区日韩专区| 九九热在线视频观看这里只有精品| 中文字幕高清一区| 欧美肥胖老妇做爰| 99久久婷婷国产精品综合| 蜜桃久久久久久久| 亚洲欧美日韩综合aⅴ视频| 日韩精品影音先锋| 色婷婷综合视频在线观看| 久久69国产一区二区蜜臀| 亚洲欧美成人一区二区三区| 亚洲精品一线二线三线| 欧美亚洲国产一区在线观看网站| 国产中文一区二区三区| 亚洲成人久久影院| 国产精品久线在线观看| 欧美tk丨vk视频| 91福利在线播放| 成人aaaa免费全部观看| 久久99热狠狠色一区二区| 亚洲综合清纯丝袜自拍| 国产精品视频麻豆| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 国产午夜精品在线观看| 欧美理论片在线| 97久久久精品综合88久久| 国精产品一区一区三区mba桃花| 亚洲小说欧美激情另类| 国产精品二三区| 欧美激情一区二区三区全黄| 日韩一级片在线观看| 欧美日韩一级大片网址| 91福利精品第一导航| 91在线视频网址| 成人黄色在线视频| 国产成人亚洲综合a∨婷婷图片| 免费成人在线视频观看| 免费久久精品视频| 日韩影视精彩在线| 五月婷婷久久综合| 天天综合色天天综合色h| 夜夜夜精品看看| 一区二区三区精品| 亚洲制服丝袜av| 亚洲国产一区二区在线播放| 夜夜揉揉日日人人青青一国产精品| 亚洲婷婷国产精品电影人久久| 中文字幕视频一区二区三区久| 欧美激情一区二区在线| 国产精品理论片| 亚洲三级免费电影| 亚洲欧美激情在线| 一区二区不卡在线播放| 亚洲一区二区三区四区在线| 一区二区三区中文免费| 亚洲一区二区三区美女| 日韩专区中文字幕一区二区| 另类中文字幕网| 国产乱码字幕精品高清av | 欧美一区2区视频在线观看| 欧美二区三区91| 欧美白人最猛性xxxxx69交| 欧美成人在线直播| 2020国产成人综合网| 国产欧美精品国产国产专区| 国产精品电影一区二区三区| 亚洲激情六月丁香| 日韩国产一二三区| 国产美女精品一区二区三区| 成人午夜又粗又硬又大| 色狠狠一区二区| 欧美一区二区私人影院日本| 久久色成人在线| 亚洲欧美日韩在线| 日韩精品高清不卡| 国产精品一区久久久久| 91香蕉视频污在线| 欧美丰满少妇xxxxx高潮对白| 久久免费的精品国产v∧| 亚洲欧美日韩人成在线播放| 日韩福利视频导航| 国产suv一区二区三区88区| 欧美亚日韩国产aⅴ精品中极品| 91精品免费在线| 国产区在线观看成人精品 | 99re热这里只有精品免费视频| 欧美日韩精品专区| 久久精品人人做人人爽人人| 亚洲人成精品久久久久久| 免费成人av资源网| 91麻豆自制传媒国产之光| 日韩欧美一区在线| 亚洲精品视频一区二区| 精品一区二区三区日韩| 色嗨嗨av一区二区三区| 久久香蕉国产线看观看99| 一区二区三区免费| 韩国v欧美v亚洲v日本v| 欧美手机在线视频| 欧美极品xxx| 免费高清不卡av| 色噜噜狠狠一区二区三区果冻| 精品久久久久久久久久久院品网 | 欧美性感一区二区三区| 国产肉丝袜一区二区| 青青青伊人色综合久久| 日本韩国欧美三级| 国产色91在线| 日韩制服丝袜av| 91成人看片片| 国产精品美女久久久久aⅴ国产馆| 青娱乐精品在线视频| 欧美性一二三区| 综合亚洲深深色噜噜狠狠网站| 国产在线播精品第三| 555www色欧美视频| 亚洲一区二区视频在线观看| 99re这里只有精品6| 国产精品婷婷午夜在线观看| 韩国女主播成人在线观看| 日韩欧美一二三四区| 国产主播一区二区| 欧美一区二区三区四区五区| 亚洲精品美国一| 不卡欧美aaaaa| 国产亚洲污的网站| 精品一区二区三区的国产在线播放 | 日韩一区二区免费高清| 亚洲h动漫在线| 欧美无乱码久久久免费午夜一区| 一区免费观看视频| 99精品久久免费看蜜臀剧情介绍| 中文字幕精品一区二区三区精品| 国产露脸91国语对白| 欧美一级理论性理论a| 天天色综合天天| 欧美一卡2卡3卡4卡| 美国一区二区三区在线播放| 日韩三级在线观看| 捆绑紧缚一区二区三区视频| 欧美一卡二卡在线| 国内外成人在线| 国产视频一区在线观看| 成人午夜大片免费观看| 国产精品久久久久久妇女6080| 波多野结衣中文一区| 国产精品亲子乱子伦xxxx裸| thepron国产精品| 亚洲精品乱码久久久久久| 欧美性视频一区二区三区| 亚洲国产一区二区三区 | 国产精品一区二区久久不卡| 久久久精品综合| 99久久er热在这里只有精品66| 国产精品久久久久久福利一牛影视| 97超碰欧美中文字幕| 一区二区三区在线看| 欧美三级日韩三级国产三级| 奇米色777欧美一区二区| 久久蜜桃av一区二区天堂| 国产成人av一区二区| 国产精品欧美极品| 欧美性做爰猛烈叫床潮| 免费美女久久99| 久久久一区二区三区捆绑**| 成人免费视频视频在线观看免费| 亚洲综合色丁香婷婷六月图片| 欧美一区二区精品在线| 国产69精品久久777的优势| 亚洲猫色日本管|