void apply_new_win_data_to_page (struct Window *win_data_orig, struct Window *win_data, struct Page *page_data) { #ifdef DETAIL g_debug("! Launch apply_new_win_data_to_page() with win_data_orig = %p, win_data = %p, page_data = %p", win_data_orig, win_data, page_data); #endif #ifdef SAFEMODE if ((win_data_orig==NULL) || (win_data==NULL) || (page_data==NULL) || (page_data->vte==NULL)) return; #endif // if (win_data_orig->use_rgba != win_data->use_rgba) // init_rgba(win_data); #ifdef ENABLE_RGBA set_window_opacity (NULL, 0, win_data->window_opacity, win_data); #endif init_monitor_cmdline_datas(win_data, page_data); if (win_data_orig->enable_hyperlink != win_data->enable_hyperlink) set_hyprelink(win_data, page_data); // ---- the color used in vte ---- // gboolean update_color = FALSE; if (compare_color(&(win_data_orig->cursor_color), &(win_data->cursor_color)) || (win_data_orig->have_custom_color != win_data->have_custom_color) || (win_data_orig->use_custom_theme != win_data->use_custom_theme) || (win_data_orig->color_brightness != win_data->color_brightness)) update_color = TRUE; gint i; if (! update_color && (win_data->use_custom_theme)) { for (i=0; i<COLOR; i++) if (compare_color(&(win_data_orig->color[i]), &(win_data->color[i]))) update_color = TRUE; } if (update_color) set_vte_color(page_data->vte, use_default_vte_theme(win_data), win_data->cursor_color, win_data->color, FALSE); // ---- tabs on notebook ---- // if (win_data_orig->tabs_bar_position != win_data->tabs_bar_position) { if (win_data->tabs_bar_position) gtk_notebook_set_tab_pos(GTK_NOTEBOOK(win_data->notebook), GTK_POS_BOTTOM); else gtk_notebook_set_tab_pos(GTK_NOTEBOOK(win_data->notebook), GTK_POS_TOP); } // the fill_tabs_bar may not always work, so we should call set_fill_tabs_bar() every time. // if (win_data_orig->fill_tabs_bar != win_data->fill_tabs_bar) set_fill_tabs_bar(GTK_NOTEBOOK(win_data->notebook), win_data->fill_tabs_bar, page_data); if (win_data_orig->page_width != win_data->page_width) set_page_width(win_data, page_data); // g_debug("ORI: %d", win_data_orig->page_shows_current_cmdline || // win_data_orig->page_shows_current_dir || // win_data_orig->page_shows_window_title); // g_debug("NEW: %d", win_data->page_shows_current_cmdline || // win_data->page_shows_current_dir || // win_data->page_shows_window_title); if ((proc_exist) && ((page_data->page_update_method != PAGE_METHOD_NORMAL) || (win_data->page_shows_current_cmdline || win_data->page_shows_current_dir || win_data->page_shows_window_title))) { // FIXME: Is it necessary? if (page_data->page_update_method == PAGE_METHOD_WINDOW_TITLE) page_data->window_title_updated = 1; page_data->page_update_method = PAGE_METHOD_REFRESH; } // g_debug("page_data->page_update_method = %d", page_data->page_update_method); if (win_data->page_shows_window_title != win_data_orig->page_shows_window_title) add_remove_window_title_changed_signal(page_data); if (win_data->check_root_privileges != win_data_orig->check_root_privileges) { if (win_data->check_root_privileges) page_data->is_root = check_is_root(page_data->displayed_tpgid); else page_data->is_root = FALSE; // g_debug("apply_new_win_data_to_page(): page_data->is_root = %d", page_data->is_root); } if (page_data->is_bold) { if (page_data->vte == win_data->current_vte) { if (win_data->bold_current_page_name == FALSE) { page_data->is_bold = page_data->should_be_bold; if (win_data->bold_action_page_name == FALSE) page_data->is_bold = FALSE; } } else { if (win_data->bold_action_page_name == FALSE) page_data->is_bold = FALSE; } } else { if (page_data->vte == win_data->current_vte) page_data->is_bold = win_data->bold_current_page_name; else if (win_data->bold_action_page_name == TRUE) page_data->is_bold = page_data->should_be_bold; } if ((win_data_orig->window_title_shows_current_page != win_data->window_title_shows_current_page) || (win_data_orig->window_title_append_package_name != win_data->window_title_append_package_name)) { check_and_update_window_title(win_data, page_data->custom_window_title, page_data->page_no+1, page_data->custom_page_name, page_data->page_name); // g_debug("FINAL: New window title = %s", gtk_window_get_title(GTK_WINDOW(win_data->window))); } get_and_update_page_name(page_data, FALSE); if ((win_data_orig->show_close_button_on_tab != win_data->show_close_button_on_tab) || (win_data_orig->show_close_button_on_all_tabs != win_data->show_close_button_on_all_tabs)) show_close_button_on_tab(win_data, page_data); // ---- font ---- // if (win_data_orig->font_anti_alias != win_data->font_anti_alias) vte_terminal_set_font_from_string_full (VTE_TERMINAL(page_data->vte), page_data->font_name, win_data->font_anti_alias); // ---- other settings for init a vte ---- // if (compare_strings(win_data_orig->word_chars, win_data->word_chars, TRUE)) vte_terminal_set_word_chars(VTE_TERMINAL(page_data->vte), win_data->word_chars); if (win_data_orig->show_scroll_bar != win_data->show_scroll_bar) // hide_scroll_bar(win_data, page_data); show_and_hide_scroll_bar(page_data, check_show_or_hide_scroll_bar(win_data)); if (win_data_orig->scroll_bar_position != win_data->scroll_bar_position) { g_object_ref(page_data->vte); gtk_container_remove (GTK_CONTAINER(page_data->hbox), page_data->vte); g_object_ref(page_data->scroll_bar); gtk_container_remove (GTK_CONTAINER(page_data->hbox), page_data->scroll_bar); pack_vte_and_scroll_bar_to_hbox(win_data, page_data); g_object_unref(page_data->vte); g_object_unref(page_data->scroll_bar); } if (compare_color(&(win_data_orig->color[0]), &(win_data->color[0])) || (win_data_orig->transparent_background != win_data->transparent_background) || (win_data_orig->background_saturation != win_data->background_saturation) || (win_data_orig->scroll_background != win_data->scroll_background) || compare_strings (win_data_orig->background_image, win_data->background_image, TRUE)) set_background_saturation (NULL, 0, win_data->background_saturation, page_data->vte); if (win_data_orig->scrollback_lines != win_data->scrollback_lines) vte_terminal_set_scrollback_lines (VTE_TERMINAL(page_data->vte), win_data->scrollback_lines); if (win_data_orig->cursor_blinks != win_data->cursor_blinks) set_cursor_blink(win_data, page_data); if (win_data_orig->allow_bold_text != win_data->allow_bold_text) vte_terminal_set_allow_bold(VTE_TERMINAL(page_data->vte), win_data->allow_bold_text); if (win_data_orig->audible_bell != win_data->audible_bell) vte_terminal_set_audible_bell (VTE_TERMINAL(page_data->vte), win_data->audible_bell); if (win_data_orig->visible_bell != win_data->visible_bell) vte_terminal_set_visible_bell (VTE_TERMINAL(page_data->vte), win_data->visible_bell); #ifdef ENABLE_BEEP_SINGAL if (win_data_orig->urgent_bell != win_data->urgent_bell) set_vte_urgent_bell(win_data, page_data); #endif if (win_data_orig->erase_binding != win_data->erase_binding) vte_terminal_set_backspace_binding (VTE_TERMINAL(page_data->vte), win_data->erase_binding); #ifdef ENABLE_CURSOR_SHAPE if (win_data_orig->cursor_shape != win_data->cursor_shape) vte_terminal_set_cursor_shape(VTE_TERMINAL(page_data->vte), win_data->cursor_shape); #endif if (compare_strings(win_data_orig->emulate_term, win_data->emulate_term, TRUE)) vte_terminal_set_emulation (VTE_TERMINAL(page_data->vte), win_data->emulate_term); }
void read_value(char *name, char *value) { //The *name and *value are derived from sargv which is given one by one through //a loop from conf_init() if (name != NULL && value != NULL) { if (name[0] == '#') return; g_strstrip(name); g_strstrip(value); if (!strcmp("font", name) || !strcmp("-fn", name)) strcpy(_font, value); else if (!strcmp("background", name) || !strcmp("-bg", name)) { if (!parse_hex_color(value, &_bg)) gdk_color_parse("black", &_bg); } else if (!strcmp("foreground", name) || !strcmp("-fg", name)) { if (!parse_hex_color(value, &_fg)) gdk_color_parse("white", &_fg); } else if (!strcmp("scrollbar", name) || !strcmp("-s", name)) { if (!strcmp(value, "true")) _scrollpos = POS_RIGHT; else if (!strcmp(value, "left")) _scrollpos = POS_LEFT; else if (!strcmp(value, "right")) _scrollpos = POS_RIGHT; else _scrollpos = -1; } else if (!strcmp("border", name) || !strcmp("-b", name)) set_border(value); else if (!strcmp("opacity", name) || !strcmp("-o", name)) _opacity = atof(value); else if (!strcmp("bgimage", name) || !strcmp("-bgimg", name)) strcpy(_bgimage, value); else if (!strcmp("width", name) || !strcmp("-w", name)) _width = atoi(value); else if (!strcmp("height", name) || !strcmp("-h", name)) _height = atoi(value); else if (!strcmp("position", name) || !strcmp("-p", name)) set_pos(value); else if (!strcmp("mod", name) || !strcmp("-m", name)) set_mod(value); else if (!strcmp("key", name) || !strcmp("-k", name)) set_key(value); else if (!strcmp("shell", name) || !strcmp("-sh", name)) strcpy(_shell, value); else if (!strcmp("lines", name) || !strcmp("-l", name)) _lines = atoi(value); else if (!strcmp("showtab", name) || !strcmp("-showtab", name)) { if (!strcasecmp(value, "always")) _showtab = TABS_ALWAYS; else if (!strcasecmp(value, "never")) _showtab = TABS_NEVER; } else if (!strcmp("tabpos", name) || !strcmp("-tabpos", name)) _tabpos = read_pos(value); else if (!strcmp("tablabel", name) || !strcmp("-tablabel", name)) strcpy(_termname, value); else if (!strcmp("cursorblink", name) || !strcmp("-cb", name)) set_cursor_blink(value); else if (!strcmp("cursorshape", name) || !strcmp("-cs", name)) set_cursor_shape(value); else if (g_str_has_prefix(name, "color") || g_str_has_prefix(name, "-c")) { g_strcanon(name, "0123456789", ' '); g_strchug(name); parse_hex_color(value, &_palette[atoi(name)]); read_colors++; } else if (!strcmp("tabfill", name) || !strcmp("-tf", name)) _tabfill = parse_bool_str(value, _tabfill); else if (!strcmp("allowbold", name) || !strcmp("-ab", name)) _allowbold = parse_bool_str(value, _allowbold); else if (!strcmp("keymod", name) || !strcmp("-km", name)) { char **list; list = g_strsplit_set(value, "+", -1); GdkModifierType tmp = 0; int i = 0; while (list[i] != NULL) tmp = tmp | parse_mod(list[i++]); g_strfreev(list); if (tmp != 0) _keymod = tmp; } else if (!strcmp("autohide", name) || !strcmp("-ah", name)) _autohide = parse_bool_str(value, _autohide); else if (!strcmp("scroll", name) || !strcmp("-sc", name)) _scrolloutput = parse_bool_str(value, _scrolloutput); else if (!strcmp("bell", name) || !strcmp("-bell", name)) if (!strcasecmp(value, "false")) _bell = FALSE; } }
// to init a new page void init_new_page(struct Window *win_data, struct Page *page_data, glong column, glong row) { #ifdef DETAIL g_debug("! Launch init_new_page() with win_data = %p, page_data = %p, " " column = %ld, row = %ld", win_data, page_data, column, row); #endif #ifdef SAFEMODE if ((win_data==NULL) || (page_data==NULL) || (page_data->vte==NULL)) return; #endif // g_debug("Get win_data = %d when initing new page!", win_data); #ifdef SAFEMODE if (page_data->font_name) { #endif // set font // g_debug("Set Font AA = %d", win_data->font_anti_alias); vte_terminal_set_font_from_string_full (VTE_TERMINAL(page_data->vte), page_data->font_name, win_data->font_anti_alias); #ifdef SAFEMODE } #endif //g_debug("Got font size from %s: %d", font_name, pango_font_description_get_size ( // pango_font_description_from_string(font_name))/PANGO_SCALE); // set terminal size // g_debug("Set the vte size to: %dx%d", column, row); #ifdef SAFEMODE if (page_data->vte) #endif vte_terminal_set_size(VTE_TERMINAL(page_data->vte), column, row); #ifdef GEOMETRY # ifdef USE_GTK2_GEOMETRY_METHOD g_debug("@ init_new_page(for %p, vte = %p): Set win_data->keep_vte_size to %d, and column = %ld, row = %ld", win_data->window, page_data->vte, win_data->keep_vte_size, column, row); # else g_debug("@ init_new_page(for %p, vte = %p): Set column = %ld, row = %ld", win_data->window, page_data->vte, column, row); # endif #endif set_vte_color(page_data->vte, use_default_vte_theme(win_data), win_data->cursor_color, win_data->color, FALSE); // set transparent set_background_saturation(NULL, 0, win_data->background_saturation, page_data->vte); // other settings vte_terminal_set_word_chars(VTE_TERMINAL(page_data->vte), win_data->word_chars); vte_terminal_set_scrollback_lines(VTE_TERMINAL(page_data->vte), win_data->scrollback_lines); // some fixed parameter vte_terminal_set_scroll_on_output(VTE_TERMINAL(page_data->vte), FALSE); vte_terminal_set_scroll_on_keystroke(VTE_TERMINAL(page_data->vte), TRUE); // vte_terminal_set_backspace_binding (VTE_TERMINAL(page_data->vte), VTE_ERASE_ASCII_DELETE); // vte_terminal_set_delete_binding (VTE_TERMINAL(page_data->vte), VTE_ERASE_ASCII_DELETE); // vte_terminal_set_emulation (VTE_TERMINAL(page_data->vte), "xterm"); #ifdef ENABLE_FIND_STRING vte_terminal_search_set_wrap_around (VTE_TERMINAL(page_data->vte), TRUE); #endif set_hyprelink(win_data, page_data); set_cursor_blink(win_data, page_data); vte_terminal_set_allow_bold(VTE_TERMINAL(page_data->vte), win_data->allow_bold_text); vte_terminal_set_audible_bell (VTE_TERMINAL(page_data->vte), win_data->audible_bell); vte_terminal_set_visible_bell (VTE_TERMINAL(page_data->vte), win_data->visible_bell); // g_debug("init_new_page(): call set_vte_urgent_bell()"); #ifdef ENABLE_BEEP_SINGAL set_vte_urgent_bell(win_data, page_data); #endif vte_terminal_set_backspace_binding (VTE_TERMINAL(page_data->vte), win_data->erase_binding); #ifdef ENABLE_CURSOR_SHAPE vte_terminal_set_cursor_shape(VTE_TERMINAL(page_data->vte), win_data->cursor_shape); #endif vte_terminal_set_emulation (VTE_TERMINAL(page_data->vte), win_data->emulate_term); }