comparison src/gtklog.c @ 10175:53410b84336f

[gaim-migrate @ 11290] I wrote a helper function that creates the imhtml and toolbar and puts them in a widget and what not. And I changed some places to use this. And I removed some whitespace from log.c. And I changed the conversation colors back to normal. And I'm not committing everything in my tree, so let me know if this doesn't compile. And that's all. committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Sun, 14 Nov 2004 01:52:25 +0000
parents e74eb0d11f86
children 5b33637b69fd
comparison
equal deleted inserted replaced
10174:8dd4535dd359 10175:53410b84336f
68 static void search_cb(GtkWidget *button, GaimGtkLogViewer *lv) 68 static void search_cb(GtkWidget *button, GaimGtkLogViewer *lv)
69 { 69 {
70 const char *search_term = gtk_entry_get_text(GTK_ENTRY(lv->entry)); 70 const char *search_term = gtk_entry_get_text(GTK_ENTRY(lv->entry));
71 GList *logs; 71 GList *logs;
72 GdkCursor *cursor = gdk_cursor_new(GDK_WATCH); 72 GdkCursor *cursor = gdk_cursor_new(GDK_WATCH);
73 73
74 if (lv->search) 74 if (lv->search)
75 g_free(lv->search); 75 g_free(lv->search);
76 76
77 gtk_tree_store_clear(lv->treestore); 77 gtk_tree_store_clear(lv->treestore);
78 if (strlen(search_term) == 0) {/* reset the tree */ 78 if (strlen(search_term) == 0) {/* reset the tree */
79 populate_log_tree(lv); 79 populate_log_tree(lv);
80 lv->search = NULL; 80 lv->search = NULL;
81 gtk_imhtml_search_clear(GTK_IMHTML(lv->imhtml)); 81 gtk_imhtml_search_clear(GTK_IMHTML(lv->imhtml));
82 return; 82 return;
83 } 83 }
84 84
85 lv->search = g_strdup(search_term); 85 lv->search = g_strdup(search_term);
86 86
87 gdk_window_set_cursor(lv->window->window, cursor); 87 gdk_window_set_cursor(lv->window->window, cursor);
88 while (gtk_events_pending()) 88 while (gtk_events_pending())
89 gtk_main_iteration(); 89 gtk_main_iteration();
90 gdk_cursor_unref(cursor); 90 gdk_cursor_unref(cursor);
91 91
92 for (logs = lv->logs; logs != NULL; logs = logs->next) { 92 for (logs = lv->logs; logs != NULL; logs = logs->next) {
93 char *read = gaim_log_read((GaimLog*)logs->data, NULL); 93 char *read = gaim_log_read((GaimLog*)logs->data, NULL);
94 if (gaim_strcasestr(read, search_term)) { 94 if (gaim_strcasestr(read, search_term)) {
95 GtkTreeIter iter; 95 GtkTreeIter iter;
96 GaimLog *log = logs->data; 96 GaimLog *log = logs->data;
101 strncpy(title, title_utf8, sizeof(title)); 101 strncpy(title, title_utf8, sizeof(title));
102 g_free(title_utf8); 102 g_free(title_utf8);
103 gtk_tree_store_append (lv->treestore, &iter, NULL); 103 gtk_tree_store_append (lv->treestore, &iter, NULL);
104 gtk_tree_store_set(lv->treestore, &iter, 104 gtk_tree_store_set(lv->treestore, &iter,
105 0, title, 105 0, title,
106 1, log, -1); 106 1, log, -1);
107 } 107 }
108 } 108 }
109 109
110 110
111 cursor = gdk_cursor_new(GDK_LEFT_PTR); 111 cursor = gdk_cursor_new(GDK_LEFT_PTR);
112 gdk_window_set_cursor(lv->window->window, cursor); 112 gdk_window_set_cursor(lv->window->window, cursor);
113 gdk_cursor_unref(cursor); 113 gdk_cursor_unref(cursor);
114 } 114 }
115 115
187 title_utf8 = gaim_utf8_try_convert(title); 187 title_utf8 = gaim_utf8_try_convert(title);
188 g_free(title); 188 g_free(title);
189 title = title_utf8; 189 title = title_utf8;
190 gtk_window_set_title(GTK_WINDOW(viewer->window), title); 190 gtk_window_set_title(GTK_WINDOW(viewer->window), title);
191 gtk_imhtml_clear(GTK_IMHTML(viewer->imhtml)); 191 gtk_imhtml_clear(GTK_IMHTML(viewer->imhtml));
192 gtk_imhtml_append_text(GTK_IMHTML(viewer->imhtml), read, 192 gtk_imhtml_append_text(GTK_IMHTML(viewer->imhtml), read,
193 GTK_IMHTML_NO_COMMENTS | GTK_IMHTML_NO_TITLE | GTK_IMHTML_NO_SCROLL | 193 GTK_IMHTML_NO_COMMENTS | GTK_IMHTML_NO_TITLE | GTK_IMHTML_NO_SCROLL |
194 ((flags & GAIM_LOG_READ_NO_NEWLINE) ? GTK_IMHTML_NO_NEWLINE : 0)); 194 ((flags & GAIM_LOG_READ_NO_NEWLINE) ? GTK_IMHTML_NO_NEWLINE : 0));
195 195
196 if (viewer->search) 196 if (viewer->search)
197 gtk_imhtml_search_find(GTK_IMHTML(viewer->imhtml), viewer->search); 197 gtk_imhtml_search_find(GTK_IMHTML(viewer->imhtml), viewer->search);
198 198
199 g_free(read); 199 g_free(read);
200 g_free(title); 200 g_free(title);
201 } 201 }
202 202
203 /* I want to make this smarter, but haven't come up with a cool algorithm to do so, yet. 203 /* I want to make this smarter, but haven't come up with a cool algorithm to do so, yet.
216 char *utf8_tmp; /* temporary variable for utf8 conversion */ 216 char *utf8_tmp; /* temporary variable for utf8 conversion */
217 GtkTreeIter toplevel, child; 217 GtkTreeIter toplevel, child;
218 GList *logs = lv->logs; 218 GList *logs = lv->logs;
219 while (logs) { 219 while (logs) {
220 GaimLog *log = logs->data; 220 GaimLog *log = logs->data;
221 221
222 strftime(month, sizeof(month), "%B %Y", localtime(&log->time)); 222 strftime(month, sizeof(month), "%B %Y", localtime(&log->time));
223 strftime(title, sizeof(title), "%c", localtime(&log->time)); 223 strftime(title, sizeof(title), "%c", localtime(&log->time));
224 224
225 /* do utf8 conversions */ 225 /* do utf8 conversions */
226 utf8_tmp = gaim_utf8_try_convert(month); 226 utf8_tmp = gaim_utf8_try_convert(month);
227 strncpy(month, utf8_tmp, sizeof(month)); 227 strncpy(month, utf8_tmp, sizeof(month));
228 utf8_tmp = gaim_utf8_try_convert(title); 228 utf8_tmp = gaim_utf8_try_convert(title);
229 strncpy(title, utf8_tmp, sizeof(title)); 229 strncpy(title, utf8_tmp, sizeof(title));
230 g_free(utf8_tmp); 230 g_free(utf8_tmp);
231 231
232 if (strncmp(month, prev_top_month, sizeof(month)) != 0) { 232 if (strncmp(month, prev_top_month, sizeof(month)) != 0) {
233 /* top level */ 233 /* top level */
234 gtk_tree_store_append(lv->treestore, &toplevel, NULL); 234 gtk_tree_store_append(lv->treestore, &toplevel, NULL);
235 gtk_tree_store_set(lv->treestore, &toplevel, 0, month, 1, NULL, -1); 235 gtk_tree_store_set(lv->treestore, &toplevel, 0, month, 1, NULL, -1);
236 236
237 /* sub */ 237 /* sub */
238 gtk_tree_store_append(lv->treestore, &child, &toplevel); 238 gtk_tree_store_append(lv->treestore, &child, &toplevel);
239 gtk_tree_store_set(lv->treestore, &child, 0, title, 1, log, -1); 239 gtk_tree_store_set(lv->treestore, &child, 0, title, 1, log, -1);
240 240
241 strncpy(prev_top_month, month, sizeof(prev_top_month)); 241 strncpy(prev_top_month, month, sizeof(prev_top_month));
242 } else { 242 } else {
243 gtk_tree_store_append(lv->treestore, &child, &toplevel); 243 gtk_tree_store_append(lv->treestore, &child, &toplevel);
244 gtk_tree_store_set(lv->treestore, &child, 0, title, 1, log, -1); 244 gtk_tree_store_set(lv->treestore, &child, 0, title, 1, log, -1);
245 } 245 }
246 246
247 logs = logs->next; 247 logs = logs->next;
248 } 248 }
249 } 249 }
250 250
251 void gaim_gtk_log_show(GaimLogType type, const char *screenname, GaimAccount *account) { 251 void gaim_gtk_log_show(GaimLogType type, const char *screenname, GaimAccount *account) {
274 lv = g_new0(GaimGtkLogViewer, 1); 274 lv = g_new0(GaimGtkLogViewer, 1);
275 lv->logs = logs = gaim_log_get_logs(type, screenname, account); 275 lv->logs = logs = gaim_log_get_logs(type, screenname, account);
276 g_hash_table_insert(log_viewers, ht, lv); 276 g_hash_table_insert(log_viewers, ht, lv);
277 277
278 /* Window ***********/ 278 /* Window ***********/
279 lv->window = gtk_dialog_new_with_buttons(screenname, NULL, 0, 279 lv->window = gtk_dialog_new_with_buttons(screenname, NULL, 0,
280 GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); 280 GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL);
281 gtk_container_set_border_width (GTK_CONTAINER(lv->window), 6); 281 gtk_container_set_border_width (GTK_CONTAINER(lv->window), 6);
282 gtk_dialog_set_has_separator(GTK_DIALOG(lv->window), FALSE); 282 gtk_dialog_set_has_separator(GTK_DIALOG(lv->window), FALSE);
283 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(lv->window)->vbox), 0); 283 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(lv->window)->vbox), 0);
284 g_signal_connect(G_OBJECT(lv->window), "response", 284 g_signal_connect(G_OBJECT(lv->window), "response",
285 G_CALLBACK(destroy_cb), ht); 285 G_CALLBACK(destroy_cb), ht);
286 286
287 hbox = gtk_hbox_new(FALSE, 6); 287 hbox = gtk_hbox_new(FALSE, 6);
288 gtk_container_set_border_width(GTK_CONTAINER(hbox), 6); 288 gtk_container_set_border_width(GTK_CONTAINER(hbox), 6);
289 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(lv->window)->vbox), hbox, FALSE, FALSE, 0); 289 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(lv->window)->vbox), hbox, FALSE, FALSE, 0);
309 309
310 /* Pane *************/ 310 /* Pane *************/
311 pane = gtk_hpaned_new(); 311 pane = gtk_hpaned_new();
312 gtk_container_set_border_width(GTK_CONTAINER(pane), 6); 312 gtk_container_set_border_width(GTK_CONTAINER(pane), 6);
313 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(lv->window)->vbox), pane, TRUE, TRUE, 0); 313 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(lv->window)->vbox), pane, TRUE, TRUE, 0);
314 314
315 /* List *************/ 315 /* List *************/
316 sw = gtk_scrolled_window_new (NULL, NULL); 316 sw = gtk_scrolled_window_new (NULL, NULL);
317 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_IN); 317 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_IN);
318 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); 318 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
319 gtk_paned_add1(GTK_PANED(pane), sw); 319 gtk_paned_add1(GTK_PANED(pane), sw);
341 lv->imhtml = gtk_imhtml_new(NULL, NULL); 341 lv->imhtml = gtk_imhtml_new(NULL, NULL);
342 gtk_widget_set_name(lv->imhtml, "gaim_gtklog_imhtml"); 342 gtk_widget_set_name(lv->imhtml, "gaim_gtklog_imhtml");
343 gtk_container_add(GTK_CONTAINER(sw), lv->imhtml); 343 gtk_container_add(GTK_CONTAINER(sw), lv->imhtml);
344 gaim_setup_imhtml(lv->imhtml); 344 gaim_setup_imhtml(lv->imhtml);
345 gtk_widget_set_size_request(lv->imhtml, 320, 200); 345 gtk_widget_set_size_request(lv->imhtml, 320, 200);
346 346
347 /* Search box **********/ 347 /* Search box **********/
348 hbox = gtk_hbox_new(FALSE, 6); 348 hbox = gtk_hbox_new(FALSE, 6);
349 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); 349 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
350 lv->entry = gtk_entry_new(); 350 lv->entry = gtk_entry_new();
351 gtk_box_pack_start(GTK_BOX(hbox), lv->entry, TRUE, TRUE, 0); 351 gtk_box_pack_start(GTK_BOX(hbox), lv->entry, TRUE, TRUE, 0);
390 syslog_viewer->logs = g_list_concat(syslog_viewer->logs, logs); 390 syslog_viewer->logs = g_list_concat(syslog_viewer->logs, logs);
391 } 391 }
392 syslog_viewer->logs = g_list_sort(syslog_viewer->logs, gaim_log_compare); 392 syslog_viewer->logs = g_list_sort(syslog_viewer->logs, gaim_log_compare);
393 393
394 /* Window ***********/ 394 /* Window ***********/
395 syslog_viewer->window = gtk_dialog_new_with_buttons(_("System Log"), NULL, 0, 395 syslog_viewer->window = gtk_dialog_new_with_buttons(_("System Log"), NULL, 0,
396 GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); 396 GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL);
397 gtk_container_set_border_width (GTK_CONTAINER(syslog_viewer->window), 6); 397 gtk_container_set_border_width (GTK_CONTAINER(syslog_viewer->window), 6);
398 gtk_dialog_set_has_separator(GTK_DIALOG(syslog_viewer->window), FALSE); 398 gtk_dialog_set_has_separator(GTK_DIALOG(syslog_viewer->window), FALSE);
399 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(syslog_viewer->window)->vbox), 0); 399 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(syslog_viewer->window)->vbox), 0);
400 g_signal_connect(G_OBJECT(syslog_viewer->window), "response", 400 g_signal_connect(G_OBJECT(syslog_viewer->window), "response",
401 G_CALLBACK(destroy_cb), NULL); 401 G_CALLBACK(destroy_cb), NULL);
402 402
403 hbox = gtk_hbox_new(FALSE, 6); 403 hbox = gtk_hbox_new(FALSE, 6);
404 gtk_container_set_border_width(GTK_CONTAINER(hbox), 6); 404 gtk_container_set_border_width(GTK_CONTAINER(hbox), 6);
405 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(syslog_viewer->window)->vbox), hbox, 405 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(syslog_viewer->window)->vbox), hbox,
416 /* Pane *************/ 416 /* Pane *************/
417 pane = gtk_hpaned_new(); 417 pane = gtk_hpaned_new();
418 gtk_container_set_border_width(GTK_CONTAINER(pane), 6); 418 gtk_container_set_border_width(GTK_CONTAINER(pane), 6);
419 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(syslog_viewer->window)->vbox), pane, 419 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(syslog_viewer->window)->vbox), pane,
420 TRUE, TRUE, 0); 420 TRUE, TRUE, 0);
421 421
422 /* List *************/ 422 /* List *************/
423 sw = gtk_scrolled_window_new (NULL, NULL); 423 sw = gtk_scrolled_window_new (NULL, NULL);
424 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_IN); 424 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_IN);
425 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); 425 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
426 gtk_paned_add1(GTK_PANED(pane), sw); 426 gtk_paned_add1(GTK_PANED(pane), sw);
468 g_signal_connect (GTK_BUTTON (button), "clicked", 468 g_signal_connect (GTK_BUTTON (button), "clicked",
469 G_CALLBACK (search_cb), 469 G_CALLBACK (search_cb),
470 syslog_viewer); 470 syslog_viewer);
471 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); 471 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
472 472
473 gtk_widget_show_all(syslog_viewer->window); 473 gtk_widget_show_all(syslog_viewer->window);
474 } 474 }