return FALSE;
}
+WidgetFocusPrinter g_consoleWidgetFocusPrinter("console");
GtkWidget* Console_constructWindow(GtkWindow* toplevel)
{
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);
}
return scr;
}
+class GtkTextBufferOutputStream : public TextOutputStream
+{
+ GtkTextBuffer* textBuffer;
+ GtkTextIter* iter;
+ GtkTextTag* tag;
+public:
+ GtkTextBufferOutputStream(GtkTextBuffer* textBuffer, GtkTextIter* iter, GtkTextTag* tag) : textBuffer(textBuffer), iter(iter), tag(tag)
+ {
+ }
+ std::size_t write(const char* buffer, std::size_t length)
+ {
+ gtk_text_buffer_insert_with_tags(textBuffer, iter, buffer, gint(length), tag, 0);
+ return length;
+ }
+};
+
std::size_t Sys_Print(int level, const char* buf, std::size_t length)
{
- bool contains_newline = strchr(buf, '\n') != 0;
+ bool contains_newline = std::find(buf, buf+length, '\n') != buf+length;
if(level == SYS_ERR)
{
}
- StringOutputStream converted;
- if(!globalCharacterSet().isUTF8())
- {
- converted << ConvertLocaleToUTF8(StringRange(buf, buf + length));
- }
- else
{
- converted << StringRange(buf, buf + length);
+ GtkTextBufferOutputStream textBuffer(buffer, &iter, tag);
+ if(!globalCharacterSet().isUTF8())
+ {
+ BufferedTextOutputStream<GtkTextBufferOutputStream> buffered(textBuffer);
+ buffered << ConvertLocaleToUTF8(StringRange(buf, buf + length));
+ }
+ else
+ {
+ textBuffer << StringRange(buf, buf + length);
+ }
}
- gtk_text_buffer_insert_with_tags(buffer, &iter, converted.c_str(), gint(string_length(converted.c_str())), tag, 0);
-
// update console widget immediatly if we're doing something time-consuming
if(contains_newline)
{