/* adds string to the msg treeview */ void msgwin_msg_add_string(gint msg_color, gint line, GeanyDocument *doc, const gchar *string) { GtkTreeIter iter; const GdkColor *color = get_color(msg_color); gchar *tmp; gsize len; gchar *utf8_msg; if (! ui_prefs.msgwindow_visible) msgwin_show_hide(TRUE); /* work around a strange problem when adding very long lines(greater than 4000 bytes) * cut the string to a maximum of 1024 bytes and discard the rest */ /* TODO: find the real cause for the display problem / if it is GtkTreeView file a bug report */ len = strlen(string); if (len > 1024) tmp = g_strndup(string, 1024); else tmp = g_strdup(string); if (! g_utf8_validate(tmp, -1, NULL)) utf8_msg = utils_get_utf8_from_locale(tmp); else utf8_msg = tmp; gtk_list_store_append(msgwindow.store_msg, &iter); gtk_list_store_set(msgwindow.store_msg, &iter, MSG_COL_LINE, line, MSG_COL_DOC_ID, doc ? doc->id : 0, MSG_COL_COLOR, color, MSG_COL_STRING, utf8_msg, -1); g_free(tmp); if (utf8_msg != tmp) g_free(utf8_msg); }
/** * Switches to the given notebook tab of the messages window and shows the messages window * if it was previously hidden and @a show is set to @c TRUE. * * @param tabnum An index of a tab in the messages window. Valid values are all elements of * #MessageWindowTabNum. * @param show Whether to show the messages window at all if it was hidden before. * * @since 0.15 **/ GEANY_API_SYMBOL void msgwin_switch_tab(gint tabnum, gboolean show) { GtkWidget *widget = NULL; /* widget to focus */ switch (tabnum) { case MSG_SCRATCH: widget = msgwindow.scribble; break; case MSG_COMPILER: widget = msgwindow.tree_compiler; break; case MSG_STATUS: widget = msgwindow.tree_status; break; case MSG_MESSAGE: widget = msgwindow.tree_msg; break; #ifdef HAVE_VTE case MSG_VTE: widget = (vte_info.have_vte) ? vc->vte : NULL; break; #endif default: break; } /* the msgwin must be visible before we switch to the VTE page so that * the font settings are applied on realization */ if (show) msgwin_show_hide(TRUE); gtk_notebook_set_current_page(GTK_NOTEBOOK(msgwindow.notebook), tabnum); if (show && widget) gtk_widget_grab_focus(widget); }
static void on_show_messages_window1_toggled(GtkCheckMenuItem *checkmenuitem, gpointer user_data) { if (ignore_callback) return; ui_prefs.msgwindow_visible = (ui_prefs.msgwindow_visible) ? FALSE : TRUE; msgwin_show_hide(ui_prefs.msgwindow_visible); }
void vte_send_selection_to_vte(void) { GeanyDocument *doc; gchar *text; gsize len; doc = document_get_current(); g_return_if_fail(doc != NULL); if (sci_has_selection(doc->editor->sci)) { text = g_malloc0(sci_get_selected_text_length(doc->editor->sci) + 1); sci_get_selected_text(doc->editor->sci, text); } else { /* Get the current line */ gint line_num = sci_get_current_line(doc->editor->sci); text = sci_get_line(doc->editor->sci, line_num); } len = strlen(text); if (vc->send_selection_unsafe) { /* Explicitly append a trailing newline character to get the command executed, this is disabled by default as it could cause all sorts of damage. */ if (text[len-1] != '\n' && text[len-1] != '\r') { SETPTR(text, g_strconcat(text, "\n", NULL)); len++; } } else { /* Make sure there is no newline character at the end to prevent unwanted execution */ while (text[len-1] == '\n' || text[len-1] == '\r') { text[len-1] = '\0'; len--; } } vf->vte_terminal_feed_child(VTE_TERMINAL(vc->vte), text, len); /* show the VTE */ gtk_notebook_set_current_page(GTK_NOTEBOOK(msgwindow.notebook), MSG_VTE); gtk_widget_grab_focus(vc->vte); msgwin_show_hide(TRUE); g_free(text); }
static void on_hide_message_window(GtkMenuItem *menuitem, gpointer user_data) { msgwin_show_hide(FALSE); }