| 81 g_free(normal); |
81 g_free(normal); |
| 82 |
82 |
| 83 return ret; |
83 return ret; |
| 84 } |
84 } |
| 85 |
85 |
| |
86 static void select_first_log(GaimGtkLogViewer *lv) |
| |
87 { |
| |
88 GtkTreeModel *model; |
| |
89 GtkTreeIter iter, it; |
| |
90 GtkTreePath *path; |
| |
91 |
| |
92 model = GTK_TREE_MODEL(lv->treestore); |
| |
93 |
| |
94 if (!gtk_tree_model_get_iter_first(model, &iter)) |
| |
95 return; |
| |
96 |
| |
97 path = gtk_tree_model_get_path(model, &iter); |
| |
98 if (gtk_tree_model_iter_children(model, &it, &iter)) |
| |
99 { |
| |
100 gtk_tree_view_expand_row(GTK_TREE_VIEW(lv->treeview), path, TRUE); |
| |
101 path = gtk_tree_model_get_path(model, &it); |
| |
102 } |
| |
103 |
| |
104 gtk_tree_selection_select_path(gtk_tree_view_get_selection(GTK_TREE_VIEW(lv->treeview)), path); |
| |
105 |
| |
106 gtk_tree_path_free(path); |
| |
107 } |
| |
108 |
| 86 static void search_cb(GtkWidget *button, GaimGtkLogViewer *lv) |
109 static void search_cb(GtkWidget *button, GaimGtkLogViewer *lv) |
| 87 { |
110 { |
| 88 const char *search_term = gtk_entry_get_text(GTK_ENTRY(lv->entry)); |
111 const char *search_term = gtk_entry_get_text(GTK_ENTRY(lv->entry)); |
| 89 GList *logs; |
112 GList *logs; |
| 90 |
113 |
| 95 if (!(*search_term)) { |
118 if (!(*search_term)) { |
| 96 /* reset the tree */ |
119 /* reset the tree */ |
| 97 populate_log_tree(lv); |
120 populate_log_tree(lv); |
| 98 lv->search = NULL; |
121 lv->search = NULL; |
| 99 gtk_imhtml_search_clear(GTK_IMHTML(lv->imhtml)); |
122 gtk_imhtml_search_clear(GTK_IMHTML(lv->imhtml)); |
| |
123 select_first_log(lv); |
| 100 return; |
124 return; |
| 101 } |
125 } |
| 102 |
126 |
| 103 lv->search = g_strdup(search_term); |
127 lv->search = g_strdup(search_term); |
| |
128 gtk_imhtml_clear(GTK_IMHTML(lv->imhtml)); |
| 104 |
129 |
| 105 gaim_gtk_set_cursor(lv->window, GDK_WATCH); |
130 gaim_gtk_set_cursor(lv->window, GDK_WATCH); |
| 106 |
131 |
| 107 for (logs = lv->logs; logs != NULL; logs = logs->next) { |
132 for (logs = lv->logs; logs != NULL; logs = logs->next) { |
| 108 char *read = gaim_log_read((GaimLog*)logs->data, NULL); |
133 char *read = gaim_log_read((GaimLog*)logs->data, NULL); |
| 133 |
159 |
| 134 g_free(ht); |
160 g_free(ht); |
| 135 } else |
161 } else |
| 136 syslog_viewer = NULL; |
162 syslog_viewer = NULL; |
| 137 |
163 |
| 138 while (lv->logs != NULL) { |
164 g_list_foreach(lv->logs, (GFunc)gaim_log_free, NULL); |
| 139 GList *logs2; |
165 g_list_free(lv->logs); |
| 140 |
|
| 141 gaim_log_free((GaimLog *)lv->logs->data); |
|
| 142 |
|
| 143 logs2 = lv->logs->next; |
|
| 144 g_list_free_1(lv->logs); |
|
| 145 lv->logs = logs2; |
|
| 146 } |
|
| 147 |
166 |
| 148 if (lv->search != NULL) |
167 if (lv->search != NULL) |
| 149 g_free(lv->search); |
168 g_free(lv->search); |
| 150 |
169 |
| 151 g_free(lv); |
170 g_free(lv); |
| 271 GtkWidget *pane; |
290 GtkWidget *pane; |
| 272 GtkWidget *sw; |
291 GtkWidget *sw; |
| 273 GtkCellRenderer *rend; |
292 GtkCellRenderer *rend; |
| 274 GtkTreeViewColumn *col; |
293 GtkTreeViewColumn *col; |
| 275 GtkTreeSelection *sel; |
294 GtkTreeSelection *sel; |
| 276 #if GTK_CHECK_VERSION(2,2,0) |
|
| 277 GtkTreePath *path_to_first_log; |
|
| 278 #endif |
|
| 279 GtkWidget *vbox; |
295 GtkWidget *vbox; |
| 280 GtkWidget *frame; |
296 GtkWidget *frame; |
| 281 GtkWidget *hbox; |
297 GtkWidget *hbox; |
| 282 GtkWidget *button; |
298 GtkWidget *button; |
| 283 GtkWidget *size_label; |
299 GtkWidget *size_label; |
| 284 |
|
| 285 lv = g_new0(GaimGtkLogViewer, 1); |
|
| 286 lv->logs = logs; |
|
| 287 |
300 |
| 288 if (logs == NULL) |
301 if (logs == NULL) |
| 289 { |
302 { |
| 290 /* No logs were found. */ |
303 /* No logs were found. */ |
| 291 const char *log_preferences = NULL; |
304 const char *log_preferences = NULL; |
| 305 |
318 |
| 306 gaim_notify_info(NULL, title, _("No logs were found"), log_preferences); |
319 gaim_notify_info(NULL, title, _("No logs were found"), log_preferences); |
| 307 return NULL; |
320 return NULL; |
| 308 } |
321 } |
| 309 |
322 |
| |
323 lv = g_new0(GaimGtkLogViewer, 1); |
| |
324 lv->logs = logs; |
| |
325 |
| 310 if (ht != NULL) |
326 if (ht != NULL) |
| 311 g_hash_table_insert(log_viewers, ht, lv); |
327 g_hash_table_insert(log_viewers, ht, lv); |
| 312 |
328 |
| 313 /* Window ***********/ |
329 /* Window ***********/ |
| 314 lv->window = gtk_dialog_new_with_buttons(title, NULL, 0, |
330 lv->window = gtk_dialog_new_with_buttons(title, NULL, 0, |
| 406 lv->entry = gtk_entry_new(); |
422 lv->entry = gtk_entry_new(); |
| 407 gtk_box_pack_start(GTK_BOX(hbox), lv->entry, TRUE, TRUE, 0); |
423 gtk_box_pack_start(GTK_BOX(hbox), lv->entry, TRUE, TRUE, 0); |
| 408 button = gtk_button_new_from_stock(GTK_STOCK_FIND); |
424 button = gtk_button_new_from_stock(GTK_STOCK_FIND); |
| 409 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); |
425 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); |
| 410 g_signal_connect(GTK_ENTRY(lv->entry), "activate", G_CALLBACK(search_cb), lv); |
426 g_signal_connect(GTK_ENTRY(lv->entry), "activate", G_CALLBACK(search_cb), lv); |
| 411 g_signal_connect(GTK_BUTTON(button), "activate", G_CALLBACK(search_cb), lv); |
|
| 412 g_signal_connect(GTK_BUTTON(button), "clicked", G_CALLBACK(search_cb), lv); |
427 g_signal_connect(GTK_BUTTON(button), "clicked", G_CALLBACK(search_cb), lv); |
| 413 |
428 |
| 414 #if GTK_CHECK_VERSION(2,2,0) |
429 select_first_log(lv); |
| 415 /* Show most recent log **********/ |
|
| 416 path_to_first_log = gtk_tree_path_new_from_string("0:0"); |
|
| 417 if (path_to_first_log) |
|
| 418 { |
|
| 419 gtk_tree_view_expand_to_path(GTK_TREE_VIEW(lv->treeview), path_to_first_log); |
|
| 420 gtk_tree_selection_select_path(sel, path_to_first_log); |
|
| 421 gtk_tree_path_free(path_to_first_log); |
|
| 422 } |
|
| 423 #endif |
|
| 424 |
430 |
| 425 gtk_widget_show_all(lv->window); |
431 gtk_widget_show_all(lv->window); |
| 426 |
432 |
| 427 return lv; |
433 return lv; |
| 428 } |
434 } |