38 #include <glib/gi18n.h>
44 GtkWidget *mess_history_dialog = NULL;
45 GtkTextBuffer *mess_hist_buffer = NULL;
46 GtkTextTagTable *mess_hist_tag_table = NULL;
47 GtkWidget *mess_hist_view = NULL;
48 gint debug_is_active = FALSE;
57 time_t cur_time = { 0 };
58 static char time_str[128] = {
'\0' };
59 cur_time = time(NULL);
60 const struct tm *tm = localtime(&cur_time);
61 strftime(time_str,
sizeof(time_str),
"(%H:%M:%S) ", tm);
72 GtkTextTag *gray_tag =
73 gtk_text_tag_table_lookup(mess_hist_tag_table,
"gray_bold");
77 gtk_text_buffer_get_end_iter(GTK_TEXT_BUFFER(mess_hist_buffer), &iter);
78 gtk_text_buffer_insert_with_tags(GTK_TEXT_BUFFER(mess_hist_buffer),
79 &iter, current_time, -1, gray_tag, NULL);
81 gtk_text_buffer_insert(GTK_TEXT_BUFFER(mess_hist_buffer), &iter,
83 gtk_text_buffer_insert(GTK_TEXT_BUFFER(mess_hist_buffer), &iter,
86 gtk_text_iter_set_line_offset(&iter, 0);
87 GtkTextMark *mark = gtk_text_buffer_get_mark(mess_hist_buffer,
"end");
88 gtk_text_buffer_move_mark(mess_hist_buffer, mark, &iter);
89 gtk_text_view_scroll_mark_onscreen(GTK_TEXT_VIEW(mess_hist_view), mark);
96 gtk_widget_hide(mess_history_dialog);
115 GtkTextTag *tag = gtk_text_tag_new(
"gray_bold");
117 GValue fg_val = { 0 };
118 g_value_init(&fg_val, G_TYPE_STRING);
119 g_value_set_static_string(&fg_val,
"gray");
120 g_object_set_property(G_OBJECT(tag),
"foreground", &fg_val);
122 gtk_text_tag_table_add(mess_hist_tag_table, tag);
128 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(debug_toggle)))
130 debug_is_active = TRUE;
134 debug_is_active = FALSE;
141 GtkTextIter start_iter;
142 GtkTextIter end_iter;
143 gtk_text_buffer_get_start_iter(mess_hist_buffer, &start_iter);
144 gtk_text_buffer_get_end_iter(mess_hist_buffer, &end_iter);
145 gtk_text_buffer_delete(mess_hist_buffer, &start_iter, &end_iter);
151 GtkWidget *vbox = gtk_vbox_new(FALSE, 0);
152 gtk_container_set_border_width(GTK_CONTAINER(vbox), 3);
155 mess_hist_tag_table = gtk_text_tag_table_new();
158 mess_hist_buffer = gtk_text_buffer_new(mess_hist_tag_table);
160 gtk_text_buffer_get_end_iter(mess_hist_buffer, &iter);
161 gtk_text_buffer_create_mark(mess_hist_buffer,
"end", &iter, TRUE);
162 mess_hist_view = gtk_text_view_new_with_buffer(mess_hist_buffer);
164 gtk_text_view_set_editable(GTK_TEXT_VIEW(mess_hist_view), FALSE);
165 gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(mess_hist_view), FALSE);
166 gtk_text_view_set_left_margin(GTK_TEXT_VIEW(mess_hist_view), 5);
168 GtkWidget *scrolled_window = gtk_scrolled_window_new(NULL, NULL);
169 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_NONE);
170 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window),
171 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
173 gtk_container_add(GTK_CONTAINER(scrolled_window), mess_hist_view);
176 GtkWidget *hbox = gtk_hbox_new(FALSE, 0);
179 GtkWidget *debug_check_button =
180 gtk_check_button_new_with_mnemonic(_(
"Enable _debug messages"));
181 g_signal_connect(G_OBJECT(debug_check_button),
"toggled",
183 gtk_box_pack_start(GTK_BOX(hbox), debug_check_button, FALSE, FALSE, 0);
186 GtkWidget *clear_button =
188 g_signal_connect(G_OBJECT(clear_button),
"clicked",
190 gtk_box_pack_end(GTK_BOX(hbox), clear_button, FALSE, FALSE, 0);
192 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
193 gtk_box_pack_start(GTK_BOX(vbox), scrolled_window, TRUE, TRUE, 3);
201 mess_history_dialog = gtk_dialog_new_with_buttons(_(
"Messages history"), NULL,
202 GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL);
204 gtk_window_set_default_size(GTK_WINDOW(mess_history_dialog), 550, 300);
206 g_signal_connect_swapped(mess_history_dialog,
"response",
208 g_signal_connect(G_OBJECT(mess_history_dialog),
"delete_event",
211 gtk_window_set_position(GTK_WINDOW(mess_history_dialog), GTK_WIN_POS_CENTER);
214 GtkWidget *area = gtk_dialog_get_content_area(GTK_DIALOG(mess_history_dialog));
215 gtk_box_pack_start(GTK_BOX(area), text_component, TRUE, TRUE, 0);