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_search_find_prev() { gint page = gtk_notebook_get_current_page(GTK_NOTEBOOK(termit.notebook)); TERMIT_GET_TAB_BY_INDEX(pTab, page); TRACE("%s tab=%p page=%d", __FUNCTION__, pTab, page); vte_terminal_search_find_previous(VTE_TERMINAL(pTab->vte)); }
static void termit_set_fonts() { gint page_num = gtk_notebook_get_n_pages(GTK_NOTEBOOK(termit.notebook)); gint minWidth = 0, minHeight = 0; gint i=0; for (; i<page_num; ++i) { TERMIT_GET_TAB_BY_INDEX(pTab, i); vte_terminal_set_font(VTE_TERMINAL(pTab->vte), pTab->style.font); GtkBorder* border; gtk_widget_style_get(GTK_WIDGET(pTab->vte), "inner-border", &border, NULL); gint w = vte_terminal_get_char_width(VTE_TERMINAL(pTab->vte)) * configs.cols + border->left + border->right; if (w > minWidth) minWidth = w; gint h = vte_terminal_get_char_height(VTE_TERMINAL(pTab->vte)) * configs.rows + border->top + border->bottom; if (h > minHeight) minHeight = h; } gint oldWidth, oldHeight; gtk_window_get_size(GTK_WINDOW(termit.main_window), &oldWidth, &oldHeight); gint width = (minWidth > oldWidth) ? minWidth : oldWidth; gint height = (minHeight > oldHeight) ? minHeight : oldHeight; gtk_window_resize(GTK_WINDOW(termit.main_window), width, height); GdkGeometry geom; geom.min_width = minWidth; geom.min_height = minHeight; TRACE("width=%d height=%d", width, height); TRACE("minWidth=%d minHeight=%d", minWidth, minHeight); gtk_window_set_geometry_hints(GTK_WINDOW(termit.main_window), termit.main_window, &geom, GDK_HINT_MIN_SIZE); }
void termit_set_default_colors() { 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); vte_terminal_set_default_colors(VTE_TERMINAL(pTab->vte)); } }
void termit_tab_set_font_by_index(gint tab_index, const gchar* font_name) { TRACE("%s: tab_index=%d font=%s", __FUNCTION__, tab_index, font_name); if (tab_index < 0) { tab_index = gtk_notebook_get_current_page(GTK_NOTEBOOK(termit.notebook)); } TERMIT_GET_TAB_BY_INDEX(pTab, tab_index); termit_tab_set_font(pTab, font_name); }
static void termit_set_colors() { 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); termit_tab_apply_colors(pTab); } }
void termit_for_each_row(int lua_callback) { TRACE("%s lua_callback=%d", __FUNCTION__, lua_callback); gint page = gtk_notebook_get_current_page(GTK_NOTEBOOK(termit.notebook)); TERMIT_GET_TAB_BY_INDEX(pTab, page); GtkAdjustment* adj = gtk_range_get_adjustment(GTK_RANGE(pTab->scrollbar)); const glong rows_total = gtk_adjustment_get_upper(adj); termit_for_each_row_execute(pTab, 0, rows_total, lua_callback); }
void termit_for_each_visible_row(int lua_callback) { TRACE("%s lua_callback=%d", __FUNCTION__, lua_callback); gint page = gtk_notebook_get_current_page(GTK_NOTEBOOK(termit.notebook)); TERMIT_GET_TAB_BY_INDEX(pTab, page); GtkAdjustment* adj = gtk_range_get_adjustment(GTK_RANGE(pTab->scrollbar)); const glong row_start = ceil(gtk_adjustment_get_value(adj)); const glong page_size = vte_terminal_get_row_count(VTE_TERMINAL(pTab->vte)); termit_for_each_row_execute(pTab, row_start, row_start + page_size, lua_callback); }
void termit_set_encoding(const gchar* encoding) { gint page = gtk_notebook_get_current_page(GTK_NOTEBOOK(termit.notebook)); TERMIT_GET_TAB_BY_INDEX(pTab, page); TRACE("%s tab=%p page=%d encoding=%s", __FUNCTION__, pTab, page, encoding); vte_terminal_set_encoding(VTE_TERMINAL(pTab->vte), encoding); g_free(pTab->encoding); pTab->encoding = g_strdup(encoding); termit_set_statusbar_message(page); }
static void termit_hide_scrollbars() { 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); if (!pTab->scrollbar_is_shown) gtk_widget_hide(pTab->scrollbar); } }
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))); }
void termit_on_toggle_scrollbar() { TRACE_MSG(__FUNCTION__); gint page = gtk_notebook_get_current_page(GTK_NOTEBOOK(termit.notebook)); TERMIT_GET_TAB_BY_INDEX(pTab, page); if (pTab->scrollbar_is_shown) gtk_widget_hide(GTK_WIDGET(pTab->scrollbar)); else gtk_widget_show(GTK_WIDGET(pTab->scrollbar)); pTab->scrollbar_is_shown = !pTab->scrollbar_is_shown; }
static void termit_set_color__(gint tab_index, const GdkColor* p_color, void (*callback)(struct TermitTab*, const GdkColor*)) { TRACE("%s: tab_index=%d color=%p", __FUNCTION__, tab_index, p_color); if (!p_color) { TRACE_MSG("p_color is NULL"); return; } if (tab_index < 0) { tab_index = gtk_notebook_get_current_page(GTK_NOTEBOOK(termit.notebook)); } TERMIT_GET_TAB_BY_INDEX(pTab, tab_index); callback(pTab, p_color); }
void termit_set_statusbar_message(guint page) { TERMIT_GET_TAB_BY_INDEX(pTab, page); TRACE("%s page=%d get_statusbar_callback=%d", __FUNCTION__, page, configs.get_statusbar_callback); if (configs.get_statusbar_callback) { gchar* statusbarMessage = termit_lua_getStatusbarCallback(configs.get_statusbar_callback, page); TRACE("statusbarMessage=[%s]", statusbarMessage); gtk_statusbar_push(GTK_STATUSBAR(termit.statusbar), 0, statusbarMessage); g_free(statusbarMessage); } else { gtk_statusbar_push(GTK_STATUSBAR(termit.statusbar), 0, vte_terminal_get_encoding(VTE_TERMINAL(pTab->vte))); } }
void termit_on_child_exited() { gint page = gtk_notebook_get_current_page(GTK_NOTEBOOK(termit.notebook)); TERMIT_GET_TAB_BY_INDEX(pTab, page); TRACE("waiting for pid %d", pTab->pid); int status = 0; waitpid(pTab->pid, &status, WNOHANG); /* TODO: check wait return */ termit_close_tab(); }
static void termit_del_tab() { gint page = gtk_notebook_get_current_page(GTK_NOTEBOOK(termit.notebook)); TERMIT_GET_TAB_BY_INDEX(pTab, page); TRACE("%s pid=%d", __FUNCTION__, pTab->pid); g_array_free(pTab->matches, TRUE); g_free(pTab->encoding); g_free(pTab->command); g_free(pTab->title); termit_style_free(&pTab->style); g_free(pTab); gtk_notebook_remove_page(GTK_NOTEBOOK(termit.notebook), page); termit_check_single_tab(); }
void termit_on_switch_page(GtkNotebook *notebook, gpointer arg, guint page, gpointer user_data) { TERMIT_GET_TAB_BY_INDEX(pTab, page); TRACE("%s page=%d vte=%p", __FUNCTION__, page, pTab->vte); // it seems that set_active eventually calls toggle callback /*((GtkCheckMenuItem*)termit.mi_show_scrollbar)->active = pTab->scrollbar_is_shown;*/ gpointer pHandlerId = g_object_get_data(G_OBJECT(termit.mi_show_scrollbar), "handlerId"); if (pHandlerId) { g_signal_handler_disconnect(G_OBJECT(termit.mi_show_scrollbar), *((gulong*)pHandlerId)); } gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(termit.mi_show_scrollbar), pTab->scrollbar_is_shown); termit_set_show_scrollbar_signal(termit.mi_show_scrollbar, pHandlerId); termit_set_statusbar_message(page); if (configs.allow_changing_title) termit_set_window_title(pTab->title); }
void termit_toggle_search() { #ifdef TERMIT_ENABLE_SEARCH if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(termit.b_toggle_search))) { gtk_widget_show(termit.search_entry); gtk_widget_show(termit.b_find_prev); gtk_widget_show(termit.b_find_next); gtk_window_set_focus(GTK_WINDOW(termit.main_window), termit.search_entry); } else { gtk_widget_hide(termit.search_entry); gtk_widget_hide(termit.b_find_prev); gtk_widget_hide(termit.b_find_next); gint page = gtk_notebook_get_current_page(GTK_NOTEBOOK(termit.notebook)); TERMIT_GET_TAB_BY_INDEX(pTab, page); gtk_window_set_focus(GTK_WINDOW(termit.main_window), pTab->vte); } #endif // TERMIT_ENABLE_SEARCH }
static void termit_search_prepare_regex(const gchar* searchRegex) { gint page = gtk_notebook_get_current_page(GTK_NOTEBOOK(termit.notebook)); TERMIT_GET_TAB_BY_INDEX(pTab, page); if (strlen(searchRegex) == 0) { vte_terminal_search_set_gregex(VTE_TERMINAL(pTab->vte), NULL); } else { GRegex* currSearchRegex = vte_terminal_search_get_gregex(VTE_TERMINAL(pTab->vte)); if (!currSearchRegex || strcmp(searchRegex, g_regex_get_pattern(currSearchRegex)) != 0) { GError* err = NULL; GRegex* regex = g_regex_new(searchRegex, 0, 0, &err); if (err) { TRACE("failed to compile regex [%s]: skipping", searchRegex); return; } vte_terminal_search_set_gregex(VTE_TERMINAL(pTab->vte), regex); } } }
void termit_on_edit_preferences() { gint page = gtk_notebook_get_current_page(GTK_NOTEBOOK(termit.notebook)); TERMIT_GET_TAB_BY_INDEX(pTab, page); termit_preferences_dialog(pTab); }
void termit_copy() { gint page = gtk_notebook_get_current_page(GTK_NOTEBOOK(termit.notebook)); TERMIT_GET_TAB_BY_INDEX(pTab, page); vte_terminal_copy_clipboard(VTE_TERMINAL(pTab->vte)); }