GtkWidget* Console_constructWindow( GtkWindow* toplevel ){ GtkWidget* scr = gtk_scrolled_window_new( 0, 0 ); gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( scr ), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC ); gtk_scrolled_window_set_shadow_type( GTK_SCROLLED_WINDOW( scr ), GTK_SHADOW_IN ); gtk_widget_show( scr ); { GtkWidget* text = gtk_text_view_new(); gtk_widget_set_size_request( text, 0, -1 ); // allow shrinking gtk_text_view_set_wrap_mode( GTK_TEXT_VIEW( text ), GTK_WRAP_WORD ); gtk_text_view_set_editable( GTK_TEXT_VIEW( text ), FALSE ); gtk_container_add( GTK_CONTAINER( scr ), text ); gtk_widget_show( text ); g_console = text; //globalExtendedASCIICharacterSet().print(); widget_connect_escape_clear_focus_widget( g_console ); //g_consoleWidgetFocusPrinter.connect(g_console); g_signal_connect( G_OBJECT( g_console ), "populate-popup", G_CALLBACK( console_populate_popup ), 0 ); g_signal_connect( G_OBJECT( g_console ), "destroy", G_CALLBACK( destroy_set_null ), &g_console ); } //prevent focusing on text view after click on tab of floating group dialog (np, if called via hotkey) GtkWidget* vbox = gtk_vbox_new( FALSE, 0 ); gtk_widget_show( vbox ); gtk_box_pack_start( GTK_BOX( vbox ), scr, TRUE, TRUE, 0 ); gtk_container_set_focus_chain( GTK_CONTAINER( vbox ), NULL ); return vbox; }
SourceView::SourceView(const std::string& language, bool readOnly) { // Set the search path to the language and style files gchar* directories[2]; #if defined(POSIX) && defined(PKGDATADIR) std::string langFilesDir = std::string(PKGDATADIR) + "/sourceviewer/"; #else std::string langFilesDir = GlobalRegistry().get(RKEY_APP_PATH) + "sourceviewer/"; #endif directories[0] = const_cast<gchar*>(langFilesDir.c_str()); // stupid GtkSourceLanguageManager is expecting non-const gchar* pointer... directories[1] = NULL; GtkSourceStyleSchemeManager* styleSchemeManager = gtk_source_style_scheme_manager_get_default(); gtk_source_style_scheme_manager_set_search_path(styleSchemeManager, directories); gtk_source_style_scheme_manager_force_rescan(styleSchemeManager); _langManager = gtk_source_language_manager_new(); gtk_source_language_manager_set_search_path(_langManager, directories); GtkSourceLanguage* lang = gtk_source_language_manager_get_language(_langManager, language.c_str()); if (lang == NULL) { globalErrorStream() << "SourceView: Cannot find language " << language << " in " << langFilesDir << std::endl; } // Remember the pointers to the textbuffers if (lang != NULL) { _buffer = gtk_source_buffer_new_with_language(lang); gtk_source_buffer_set_highlight_syntax(_buffer, TRUE); } else { _buffer = gtk_source_buffer_new(NULL); gtk_source_buffer_set_highlight_syntax(_buffer, FALSE); } _view = GTK_SOURCE_VIEW(gtk_source_view_new_with_buffer(_buffer)); gtk_widget_set_size_request(GTK_WIDGET(_view), 0, -1); // allow shrinking gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(_view), GTK_WRAP_WORD); gtk_text_view_set_editable(GTK_TEXT_VIEW(_view), readOnly ? FALSE : TRUE); gtk_source_view_set_show_line_numbers(_view, TRUE); gtk_source_view_set_auto_indent(_view, TRUE); // Use a fixed width font PangoFontDescription* fontDesc = pango_font_description_from_string("Monospace"); if (fontDesc != NULL) { gtk_widget_modify_font(GTK_WIDGET(_view), fontDesc); } // Use a tab size of 4 gtk_source_view_set_tab_width(GTK_SOURCE_VIEW(_view), 4); widget_connect_escape_clear_focus_widget(GTK_WIDGET(_view)); _widget = gtkutil::ScrolledFrame(GTK_WIDGET(_view)); }