void termit_on_set_tab_name() { GtkWidget *dlg = gtk_dialog_new_with_buttons( _("Tab name"), GTK_WINDOW(termit.main_window), GTK_DIALOG_MODAL, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL); gtk_dialog_set_default_response(GTK_DIALOG(dlg), GTK_RESPONSE_ACCEPT); gtk_window_set_modal(GTK_WINDOW(dlg), TRUE); gint page = gtk_notebook_get_current_page(GTK_NOTEBOOK(termit.notebook)); TERMIT_GET_TAB_BY_INDEX(pTab, page); GtkWidget *label = gtk_label_new(_("Tab name")); GtkWidget *entry = gtk_entry_new(); gtk_entry_set_text( GTK_ENTRY(entry), gtk_notebook_get_tab_label_text(GTK_NOTEBOOK(termit.notebook), pTab->hbox)); GtkWidget *hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, FALSE, 5); g_signal_connect(G_OBJECT(dlg), "key-press-event", G_CALLBACK(dlg_key_press), dlg); gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dlg))), hbox, FALSE, FALSE, 10); gtk_widget_show_all(dlg); if (GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dlg))) { termit_tab_set_title(pTab, gtk_entry_get_text(GTK_ENTRY(entry))); pTab->custom_tab_name = TRUE; } gtk_widget_destroy(dlg); }
void termit_on_tab_title_changed(VteTerminal *vte, gpointer user_data) { if (!configs.allow_changing_title) return; gint page = gtk_notebook_get_current_page(GTK_NOTEBOOK(termit.notebook)); TERMIT_GET_TAB_BY_INDEX(pTab, page); if (pTab->custom_tab_name) return; termit_tab_set_title(pTab, vte_terminal_get_window_title(VTE_TERMINAL(pTab->vte))); }
static void dlg_set_tab_default_values(struct TermitTab* pTab, struct TermitDlgHelper* hlp) { if (hlp->tab_title) termit_tab_set_title(pTab, hlp->tab_title); vte_terminal_set_default_colors(VTE_TERMINAL(pTab->vte)); termit_tab_set_font(pTab, hlp->style.font_name); termit_tab_set_background_image(pTab, hlp->style.image_file); termit_tab_set_color_foreground(pTab, hlp->style.foreground_color); termit_tab_set_color_background(pTab, hlp->style.background_color); termit_tab_set_transparency(pTab, hlp->style.transparency); termit_tab_set_audible_bell(pTab, hlp->au_bell); termit_tab_set_visible_bell(pTab, hlp->vi_bell); if (hlp->style.image_file) { gtk_file_chooser_select_filename(GTK_FILE_CHOOSER(hlp->btn_image_file), hlp->style.image_file); } }
void termit_preferences_dialog(struct TermitTab *pTab) { // store font_name, foreground, background struct TermitDlgHelper* hlp = termit_dlg_helper_new(pTab); GtkStockItem item = {}; gtk_stock_lookup(GTK_STOCK_PREFERENCES, &item); // may be memory leak inside GtkWidget* dialog = gtk_dialog_new_with_buttons(item.label, GTK_WINDOW_TOPLEVEL, GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL, GTK_STOCK_CANCEL, GTK_RESPONSE_NONE, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); g_signal_connect(G_OBJECT(dialog), "key-press-event", G_CALLBACK(dlg_key_press), dialog); GtkWidget* dlg_table = gtk_table_new(5, 2, FALSE); #define TERMIT_PREFERENCE_ROW(pref_name, widget) \ gtk_table_attach(GTK_TABLE(dlg_table), gtk_label_new(pref_name), 0, 1, row, row + 1, 0, 0, 0, 0); \ gtk_table_attach_defaults(GTK_TABLE(dlg_table), widget, 1, 2, row, row + 1); \ hlp->widget = widget; \ row++; #define TERMIT_PREFERENCE_ROW2(pref_widget, widget) \ gtk_table_attach(GTK_TABLE(dlg_table), pref_widget, 0, 1, row, row + 1, 0, 0, 0, 0); \ gtk_table_attach_defaults(GTK_TABLE(dlg_table), widget, 1, 2, row, row + 1); \ hlp->widget = widget; \ row++; gboolean apply_to_all_tabs_flag = FALSE; GtkWidget* entry_title = gtk_entry_new(); guint row = 0; { // tab title gtk_entry_set_text(GTK_ENTRY(entry_title), hlp->tab_title); TERMIT_PREFERENCE_ROW(_("Title"), entry_title); } // font selection GtkWidget* btn_font = gtk_font_button_new_with_font(pTab->style.font_name); g_signal_connect(btn_font, "font-set", G_CALLBACK(dlg_set_font), pTab); TERMIT_PREFERENCE_ROW(_("Font"), btn_font); // foreground GtkWidget* btn_foreground = (pTab->style.foreground_color) ? gtk_color_button_new_with_color(pTab->style.foreground_color) : gtk_color_button_new(); g_signal_connect(btn_foreground, "color-set", G_CALLBACK(dlg_set_foreground), pTab); TERMIT_PREFERENCE_ROW(_("Foreground"), btn_foreground); // background GtkWidget* btn_background = (pTab->style.background_color) ? gtk_color_button_new_with_color(pTab->style.background_color) : gtk_color_button_new(); g_signal_connect(btn_background, "color-set", G_CALLBACK(dlg_set_background), pTab); TERMIT_PREFERENCE_ROW(_("Background"), btn_background); // background image GtkWidget* btn_image_file = gtk_file_chooser_button_new(pTab->style.image_file, GTK_FILE_CHOOSER_ACTION_OPEN); GtkFileFilter* filter = gtk_file_filter_new(); gtk_file_filter_set_name(filter, _("images")); gtk_file_filter_add_mime_type(filter, "image/*"); if (pTab->style.image_file) { gtk_file_chooser_select_filename(GTK_FILE_CHOOSER(btn_image_file), pTab->style.image_file); } gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(btn_image_file), filter); g_signal_connect(btn_image_file, "file-set", G_CALLBACK(dlg_set_image_file), pTab); g_signal_connect(btn_image_file, "key-press-event", G_CALLBACK(dlg_clear_image_file), pTab); GtkWidget* btn_switch_image_file = gtk_check_button_new_with_label(_("Background image")); if (pTab->style.image_file) { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(btn_switch_image_file), TRUE); } /*g_signal_connect(btn_switch_image_file, "toggled", G_CALLBACK(dlg_switch_image_file), btn_image_file);*/ /*TERMIT_PREFERENCE_ROW2(btn_switch_image_file, btn_image_file);*/ TERMIT_PREFERENCE_ROW(_("Image"), btn_image_file); // transparency GtkWidget* scale_transparency = gtk_spin_button_new_with_range(0, 1, 0.05); gtk_spin_button_set_value(GTK_SPIN_BUTTON(scale_transparency), pTab->style.transparency); g_signal_connect(scale_transparency, "value-changed", G_CALLBACK(dlg_set_transparency), pTab); TERMIT_PREFERENCE_ROW(_("Transparency"), scale_transparency); // audible_bell GtkWidget* audible_bell = gtk_check_button_new(); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(audible_bell), pTab->audible_bell); g_signal_connect(audible_bell, "toggled", G_CALLBACK(dlg_set_audible_bell), pTab); TERMIT_PREFERENCE_ROW(_("Audible bell"), audible_bell); // visible_bell GtkWidget* visible_bell = gtk_check_button_new(); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(visible_bell), pTab->visible_bell); g_signal_connect(visible_bell, "toggled", G_CALLBACK(dlg_set_visible_bell), pTab); TERMIT_PREFERENCE_ROW(_("Visible bell"), visible_bell); // apply to al tabs GtkWidget* btn_apply_to_all_tabs = gtk_check_button_new(); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(btn_apply_to_all_tabs), FALSE); g_signal_connect(btn_apply_to_all_tabs, "toggled", G_CALLBACK(dlg_set_apply_to_all_tabs), &apply_to_all_tabs_flag); TERMIT_PREFERENCE_ROW(_("Apply to all tabs"), btn_apply_to_all_tabs); GtkWidget* btn_restore = gtk_button_new_from_stock(GTK_STOCK_REVERT_TO_SAVED); g_signal_connect(G_OBJECT(btn_restore), "clicked", G_CALLBACK(dlg_restore_defaults), hlp); gtk_table_attach(GTK_TABLE(dlg_table), btn_restore, 1, 2, row, row + 1, 0, 0, 0, 0); gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), dlg_table); gtk_widget_show_all(dialog); if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_OK) { dlg_set_tab_default_values(pTab, hlp); } else { if (apply_to_all_tabs_flag) { gint page_num = gtk_notebook_get_n_pages(GTK_NOTEBOOK(termit.notebook)); gint i=0; for (; i<page_num; ++i) { TERMIT_GET_TAB_BY_INDEX(pTab, i, continue); dlg_set_font(GTK_FONT_BUTTON(btn_font), pTab); dlg_set_foreground(GTK_COLOR_BUTTON(btn_foreground), pTab); dlg_set_background(GTK_COLOR_BUTTON(btn_background), pTab); dlg_set_transparency(GTK_SPIN_BUTTON(scale_transparency), pTab); dlg_set_image_file(GTK_FILE_CHOOSER_BUTTON(btn_image_file), pTab); dlg_set_audible_bell(GTK_TOGGLE_BUTTON(audible_bell), pTab); dlg_set_visible_bell(GTK_TOGGLE_BUTTON(visible_bell), pTab); } } // insane title flag if (pTab->title || (!pTab->title && strcmp(gtk_label_get_text(GTK_LABEL(pTab->tab_name)), gtk_entry_get_text(GTK_ENTRY(entry_title))) != 0)) { termit_tab_set_title(pTab, gtk_entry_get_text(GTK_ENTRY(entry_title))); } } termit_dlg_helper_free(hlp); gtk_widget_destroy(dialog); }