src/gtklog.c

changeset 13569
4f0396bc59fc
parent 13435
4c22eed6e0a6
child 14097
0c340861ab79
equal deleted inserted replaced
13568:406e8503a006 13569:4f0396bc59fc
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);
116 1, log, -1); 141 1, log, -1);
117 } 142 }
118 g_free(read); 143 g_free(read);
119 } 144 }
120 145
146 select_first_log(lv);
121 gaim_gtk_clear_cursor(lv->window); 147 gaim_gtk_clear_cursor(lv->window);
122 } 148 }
123 149
124 static gboolean destroy_cb(GtkWidget *w, gint resp, struct log_viewer_hash_t *ht) { 150 static gboolean destroy_cb(GtkWidget *w, gint resp, struct log_viewer_hash_t *ht) {
125 GaimGtkLogViewer *lv = syslog_viewer; 151 GaimGtkLogViewer *lv = syslog_viewer;
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 }

mercurial