38 #include <glib/gi18n.h> 45 #define REMMINA_TYPE_LOG_WINDOW (remmina_log_window_get_type()) 46 #define REMMINA_LOG_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), REMMINA_TYPE_LOG_WINDOW, RemminaLogWindow)) 47 #define REMMINA_LOG_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), REMMINA_TYPE_LOG_WINDOW, RemminaLogWindowClass)) 48 #define REMMINA_IS_LOG_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), REMMINA_TYPE_LOG_WINDOW)) 49 #define REMMINA_IS_LOG_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), REMMINA_TYPE_LOG_WINDOW)) 50 #define REMMINA_LOG_WINDOW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), REMMINA_TYPE_LOG_WINDOW, RemminaLogWindowClass)) 79 GdkEventKey *e = (GdkEventKey *)event;
84 if ((e->state & GDK_CONTROL_MASK) == GDK_CONTROL_MASK) {
97 GtkWidget *scrolledwindow;
100 gtk_container_set_border_width(GTK_CONTAINER(logwin), 4);
102 scrolledwindow = gtk_scrolled_window_new(NULL, NULL);
103 gtk_widget_show(scrolledwindow);
104 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
105 gtk_container_add(GTK_CONTAINER(logwin), scrolledwindow);
107 widget = gtk_text_view_new();
108 gtk_widget_show(widget);
109 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(widget), GTK_WRAP_WORD_CHAR);
110 gtk_text_view_set_editable(GTK_TEXT_VIEW(widget), FALSE);
111 gtk_container_add(GTK_CONTAINER(scrolledwindow), widget);
113 logwin->
log_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(widget));
121 TRACE_CALL(__func__);
122 return GTK_WIDGET(g_object_new(REMMINA_TYPE_LOG_WINDOW, NULL));
127 TRACE_CALL(__func__);
133 TRACE_CALL(__func__);
138 gtk_window_set_default_size(GTK_WINDOW(
log_window), 640, 480);
144 "\tCTRL+S: collect, show and send stats\n" 145 "\tCTRL+T: collect and show stats\n");
150 TRACE_CALL(__func__);
156 TRACE_CALL(__func__);
161 gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW(REMMINA_LOG_WINDOW(
log_window)->
log_view), &iter, 0.0, FALSE, 0.0,
169 TRACE_CALL(__func__);
174 gtk_text_buffer_insert(REMMINA_LOG_WINDOW(
log_window)->
log_buffer, &iter, (
const gchar*)data, -1);
183 TRACE_CALL(__func__);
202 text = g_strdup_vprintf(fmt, args);
204 g_autofree gchar *buf = g_strconcat(
"(",
fun,
") - ", text, NULL);
206 g_debug (
"%s", g_strdup(buf));
208 buf = g_strconcat (buf,
"\n", NULL);
217 TRACE_CALL(__func__);
224 text = g_strdup_vprintf(fmt, args);
void remmina_log_start(void)
static gboolean remmina_log_print_real(gpointer data)
struct _RemminaLogWindowClass RemminaLogWindowClass
static gboolean remmina_log_scroll_to_end(gpointer data)
GtkTextBuffer * log_buffer
gboolean remmina_log_running(void)
void remmina_debug(const gchar *fmt,...)
Print a string in the Remmina Debug Windows and in the terminal.
G_DEFINE_TYPE(RemminaConnectionWindow, rcw, GTK_TYPE_WINDOW)
static void remmina_log_window_init(RemminaLogWindow *logwin)
static gboolean remmina_log_on_keypress(GtkWidget *widget, GdkEvent *event, gpointer user_data)
GType remmina_log_window_get_type(void)
static GtkWidget * remmina_log_window_new(void)
struct _RemminaLogWindow RemminaLogWindow
static GtkWidget * log_window
void remmina_log_printf(const gchar *fmt,...)
gboolean remmina_stat_sender_can_send()
void remmina_stats_sender_send(gboolean show_only)
void remmina_log_print(const gchar *text)
static void remmina_log_end(GtkWidget *widget, gpointer data)
GtkWindowClass parent_class