Mercurial > pidgin
comparison src/dialogs.c @ 2621:f8b02cf4af94
[gaim-migrate @ 2634]
i *really* wish i'd gotten to look this over before it got committed.
i'm getting the 16-byte leaks too. i haven't tracked it down yet but I have a pretty good idea of where they're coming from.
i wish i'd been able to look this over before it got committed.
committer: Tailor Script <tailor@pidgin.im>
| author | Eric Warmenhoven <eric@warmenhoven.org> |
|---|---|
| date | Fri, 26 Oct 2001 22:58:17 +0000 |
| parents | 6f7e1fc3e132 |
| children | 66164831c228 |
comparison
equal
deleted
inserted
replaced
| 2620:a1b708ee93af | 2621:f8b02cf4af94 |
|---|---|
| 219 GtkWidget *cancel; | 219 GtkWidget *cancel; |
| 220 GtkWidget *original; | 220 GtkWidget *original; |
| 221 GtkWidget *new1; | 221 GtkWidget *new1; |
| 222 GtkWidget *new2; | 222 GtkWidget *new2; |
| 223 struct gaim_connection *gc; | 223 struct gaim_connection *gc; |
| 224 }; | |
| 225 | |
| 226 struct view_log { | |
| 227 long offset; | |
| 228 int options; | |
| 229 char *name; | |
| 230 GtkWidget *bbox; | |
| 231 GtkWidget *window; | |
| 232 GtkWidget *layout; | |
| 224 }; | 233 }; |
| 225 | 234 |
| 226 /*------------------------------------------------------------------------*/ | 235 /*------------------------------------------------------------------------*/ |
| 227 /* Destroys */ | 236 /* Destroys */ |
| 228 /*------------------------------------------------------------------------*/ | 237 /*------------------------------------------------------------------------*/ |
| 306 } | 315 } |
| 307 | 316 |
| 308 | 317 |
| 309 void destroy_all_dialogs() | 318 void destroy_all_dialogs() |
| 310 { | 319 { |
| 311 GList *d = dialogwindows; | 320 while (dialogwindows) |
| 312 | 321 destroy_dialog(NULL, dialogwindows->data); |
| 313 while (d) { | |
| 314 destroy_dialog(NULL, d->data); | |
| 315 d = d->next; | |
| 316 } | |
| 317 | |
| 318 g_list_free(dialogwindows); | |
| 319 dialogwindows = NULL; | |
| 320 | 322 |
| 321 if (awaymessage) | 323 if (awaymessage) |
| 322 do_im_back(NULL, NULL); | 324 do_im_back(NULL, NULL); |
| 323 | 325 |
| 324 if (imdialog) { | 326 if (imdialog) { |
| 3285 while (fgets(buf, BUF_LONG, fp_old)) | 3287 while (fgets(buf, BUF_LONG, fp_old)) |
| 3286 fputs(buf, fp_new); | 3288 fputs(buf, fp_new); |
| 3287 fclose(fp_old); | 3289 fclose(fp_old); |
| 3288 fclose(fp_new); | 3290 fclose(fp_new); |
| 3289 | 3291 |
| 3290 dialogwindows = g_list_remove(dialogwindows, filesel); | |
| 3291 gtk_widget_destroy(filesel); | 3292 gtk_widget_destroy(filesel); |
| 3292 | 3293 |
| 3293 return; | 3294 return; |
| 3294 } | 3295 } |
| 3295 | 3296 |
| 3300 | 3301 |
| 3301 g_snprintf(buf, BUF_LEN - 1, "%s/%s%s", getenv("HOME"), | 3302 g_snprintf(buf, BUF_LEN - 1, "%s/%s%s", getenv("HOME"), |
| 3302 name ? normalize(name) : "system", name ? ".log" : ""); | 3303 name ? normalize(name) : "system", name ? ".log" : ""); |
| 3303 | 3304 |
| 3304 filesel = gtk_file_selection_new(_("Gaim - Save Log File")); | 3305 filesel = gtk_file_selection_new(_("Gaim - Save Log File")); |
| 3305 dialogwindows = g_list_prepend(dialogwindows, filesel); | |
| 3306 gtk_signal_connect(GTK_OBJECT(filesel), "delete_event", | 3306 gtk_signal_connect(GTK_OBJECT(filesel), "delete_event", |
| 3307 GTK_SIGNAL_FUNC(destroy_dialog), filesel); | 3307 GTK_SIGNAL_FUNC(destroy_dialog), filesel); |
| 3308 | 3308 |
| 3309 gtk_file_selection_hide_fileop_buttons(GTK_FILE_SELECTION(filesel)); | 3309 gtk_file_selection_hide_fileop_buttons(GTK_FILE_SELECTION(filesel)); |
| 3310 gtk_file_selection_set_filename(GTK_FILE_SELECTION(filesel), buf); | 3310 gtk_file_selection_set_filename(GTK_FILE_SELECTION(filesel), buf); |
| 3350 GtkWidget *button; | 3350 GtkWidget *button; |
| 3351 GtkWidget *label; | 3351 GtkWidget *label; |
| 3352 GtkWidget *hsep; | 3352 GtkWidget *hsep; |
| 3353 | 3353 |
| 3354 window = gtk_window_new(GTK_WINDOW_DIALOG); | 3354 window = gtk_window_new(GTK_WINDOW_DIALOG); |
| 3355 dialogwindows = g_list_prepend(dialogwindows, window); | |
| 3356 gtk_window_set_wmclass(GTK_WINDOW(window), "dialog", "Gaim"); | 3355 gtk_window_set_wmclass(GTK_WINDOW(window), "dialog", "Gaim"); |
| 3357 gtk_container_set_border_width(GTK_CONTAINER(window), 10); | 3356 gtk_container_set_border_width(GTK_CONTAINER(window), 10); |
| 3358 gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, TRUE); | 3357 gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, TRUE); |
| 3359 gtk_signal_connect(GTK_OBJECT(window), "delete_event", GTK_SIGNAL_FUNC(destroy_dialog), window); | 3358 gtk_signal_connect(GTK_OBJECT(window), "delete_event", GTK_SIGNAL_FUNC(destroy_dialog), window); |
| 3360 gtk_widget_realize(window); | 3359 gtk_widget_realize(window); |
| 3388 gtk_widget_show_all(window); | 3387 gtk_widget_show_all(window); |
| 3389 | 3388 |
| 3390 return; | 3389 return; |
| 3391 } | 3390 } |
| 3392 | 3391 |
| 3393 static void log_show_convo(GtkWidget *w, GtkWidget *layout) | 3392 static void log_show_convo(GtkWidget *w, struct view_log *view) |
| 3394 { | 3393 { |
| 3395 gchar buf[BUF_LONG]; | 3394 gchar buf[BUF_LONG]; |
| 3396 long offset; | |
| 3397 int options; | |
| 3398 gchar *name; | |
| 3399 GtkWidget *bbox; | |
| 3400 GtkWidget *window; | |
| 3401 FILE *fp; | 3395 FILE *fp; |
| 3402 char filename[256]; | 3396 char filename[256]; |
| 3403 int i=0; | 3397 int i=0; |
| 3404 GString *string; | 3398 GString *string; |
| 3405 guint block; | 3399 guint block; |
| 3406 | 3400 |
| 3407 offset = (long)gtk_object_get_user_data(GTK_OBJECT(w)); | |
| 3408 options = (int)gtk_object_get_data(GTK_OBJECT(w), "options"); | |
| 3409 name = gtk_object_get_data(GTK_OBJECT(w), "name"); | |
| 3410 bbox = gtk_object_get_data(GTK_OBJECT(w), "box"); | |
| 3411 window = gtk_object_get_data(GTK_OBJECT(w), "window"); | |
| 3412 string = g_string_new(""); | 3401 string = g_string_new(""); |
| 3413 | 3402 |
| 3414 if (name) { | 3403 if (view->name) { |
| 3415 char *tmp = gaim_user_dir(); | 3404 char *tmp = gaim_user_dir(); |
| 3416 g_snprintf(filename, 256, "%s/logs/%s.log", tmp, normalize(name)); | 3405 g_snprintf(filename, 256, "%s/logs/%s.log", tmp, normalize(view->name)); |
| 3417 g_free(tmp); | 3406 g_free(tmp); |
| 3418 } else { | 3407 } else { |
| 3419 char *tmp = gaim_user_dir(); | 3408 char *tmp = gaim_user_dir(); |
| 3420 g_snprintf(filename, 256, "%s/logs/system", tmp); | 3409 g_snprintf(filename, 256, "%s/logs/system", tmp); |
| 3421 g_free(tmp); | 3410 g_free(tmp); |
| 3424 g_snprintf(buf, BUF_LONG, "Unable to open log file %s", filename); | 3413 g_snprintf(buf, BUF_LONG, "Unable to open log file %s", filename); |
| 3425 do_error_dialog(buf, "Error!"); | 3414 do_error_dialog(buf, "Error!"); |
| 3426 return; | 3415 return; |
| 3427 } | 3416 } |
| 3428 | 3417 |
| 3429 gtk_widget_set_sensitive(bbox, FALSE); | 3418 gtk_widget_set_sensitive(view->bbox, FALSE); |
| 3430 gtk_signal_disconnect_by_func(GTK_OBJECT(window), GTK_SIGNAL_FUNC(destroy_dialog), window); | 3419 gtk_signal_disconnect_by_func(GTK_OBJECT(view->window), |
| 3431 block = gtk_signal_connect(GTK_OBJECT(window), "delete_event", | 3420 GTK_SIGNAL_FUNC(destroy_dialog), view->window); |
| 3432 GTK_SIGNAL_FUNC(dont_destroy), window); | 3421 block = gtk_signal_connect(GTK_OBJECT(view->window), "delete_event", |
| 3433 | 3422 GTK_SIGNAL_FUNC(dont_destroy), view->window); |
| 3434 fseek(fp, offset, SEEK_SET); | 3423 |
| 3435 gtk_imhtml_clear(GTK_IMHTML(layout)); | 3424 fseek(fp, view->offset, SEEK_SET); |
| 3425 gtk_imhtml_clear(GTK_IMHTML(view->layout)); | |
| 3426 /* | |
| 3436 while (gtk_events_pending()) | 3427 while (gtk_events_pending()) |
| 3437 gtk_main_iteration(); | 3428 gtk_main_iteration(); |
| 3429 */ | |
| 3438 | 3430 |
| 3439 while (fgets(buf, BUF_LONG, fp) && !strstr(buf, "---- New C")) { | 3431 while (fgets(buf, BUF_LONG, fp) && !strstr(buf, "---- New C")) { |
| 3440 i++; | 3432 i++; |
| 3441 if (strlen(buf) >= 5 && (!strncmp(buf + strlen(buf) - 5, "<BR>\n", 5))) | 3433 if (strlen(buf) >= 5 && (!strncmp(buf + strlen(buf) - 5, "<BR>\n", 5))) |
| 3442 /* take off the \n */ | 3434 /* take off the \n */ |
| 3443 buf[strlen(buf) - 1] = '\0'; | 3435 buf[strlen(buf) - 1] = '\0'; |
| 3444 | 3436 |
| 3445 if (i == 30) { | 3437 if (i == 30) { |
| 3446 gtk_imhtml_append_text(GTK_IMHTML(layout), string->str, options); | 3438 gtk_imhtml_append_text(GTK_IMHTML(view->layout), string->str, view->options); |
| 3447 g_string_free(string, TRUE); | 3439 g_string_free(string, TRUE); |
| 3448 string = g_string_new(""); | 3440 string = g_string_new(""); |
| 3441 /* you can't have these anymore. if someone clicks on another item while one is | |
| 3442 * drawing, it will try to move to that item, and that causes problems here. | |
| 3449 while (gtk_events_pending()) | 3443 while (gtk_events_pending()) |
| 3450 gtk_main_iteration(); | 3444 gtk_main_iteration(); |
| 3445 */ | |
| 3451 i = 0; | 3446 i = 0; |
| 3452 } else { | 3447 } else { |
| 3453 g_string_append(string, buf); | 3448 g_string_append(string, buf); |
| 3454 } | 3449 } |
| 3455 | 3450 |
| 3456 } | 3451 } |
| 3457 gtk_imhtml_append_text(GTK_IMHTML(layout), string->str, options); | 3452 gtk_imhtml_append_text(GTK_IMHTML(view->layout), string->str, view->options); |
| 3458 gtk_imhtml_append_text(GTK_IMHTML(layout), "<BR>", options); | 3453 gtk_imhtml_append_text(GTK_IMHTML(view->layout), "<BR>", view->options); |
| 3459 | 3454 |
| 3460 gtk_widget_set_sensitive(bbox, TRUE); | 3455 gtk_widget_set_sensitive(view->bbox, TRUE); |
| 3461 gtk_signal_disconnect(GTK_OBJECT(window), block); | 3456 gtk_signal_disconnect(GTK_OBJECT(view->window), block); |
| 3462 gtk_signal_connect(GTK_OBJECT(window), "delete_event", GTK_SIGNAL_FUNC(destroy_dialog), window); | 3457 gtk_signal_connect(GTK_OBJECT(view->window), "delete_event", |
| 3458 GTK_SIGNAL_FUNC(destroy_dialog), view->window); | |
| 3463 g_string_free(string, TRUE); | 3459 g_string_free(string, TRUE); |
| 3464 fclose(fp); | 3460 fclose(fp); |
| 3461 } | |
| 3462 | |
| 3463 static void des_view_item(GtkObject *obj, struct view_log *view) | |
| 3464 { | |
| 3465 if (view->name) | |
| 3466 g_free(view->name); | |
| 3467 g_free(view); | |
| 3465 } | 3468 } |
| 3466 | 3469 |
| 3467 void show_log(char *name) | 3470 void show_log(char *name) |
| 3468 { | 3471 { |
| 3469 gchar filename[256]; | 3472 gchar filename[256]; |
| 3481 GtkWidget *list = NULL; | 3484 GtkWidget *list = NULL; |
| 3482 GList *item_list = NULL; | 3485 GList *item_list = NULL; |
| 3483 GtkWidget *item = NULL; | 3486 GtkWidget *item = NULL; |
| 3484 GtkWidget *last = NULL; | 3487 GtkWidget *last = NULL; |
| 3485 GtkWidget *frame; | 3488 GtkWidget *frame; |
| 3489 struct view_log *view; | |
| 3486 | 3490 |
| 3487 int options; | 3491 int options; |
| 3488 guint block; | 3492 guint block; |
| 3489 char convo_start[32]; | 3493 char convo_start[32]; |
| 3490 long offset = 0; | 3494 long offset = 0; |
| 3497 options ^= GTK_IMHTML_NO_FONTS; | 3501 options ^= GTK_IMHTML_NO_FONTS; |
| 3498 if (convo_options & OPT_CONVO_IGNORE_SIZES) | 3502 if (convo_options & OPT_CONVO_IGNORE_SIZES) |
| 3499 options ^= GTK_IMHTML_NO_SIZES; | 3503 options ^= GTK_IMHTML_NO_SIZES; |
| 3500 | 3504 |
| 3501 window = gtk_window_new(GTK_WINDOW_TOPLEVEL); | 3505 window = gtk_window_new(GTK_WINDOW_TOPLEVEL); |
| 3502 dialogwindows = g_list_prepend(dialogwindows, window); | |
| 3503 gtk_window_set_wmclass(GTK_WINDOW(window), "log", "Gaim"); | 3506 gtk_window_set_wmclass(GTK_WINDOW(window), "log", "Gaim"); |
| 3504 if (name) | 3507 if (name) |
| 3505 g_snprintf(buf, BUF_LONG, "Gaim - Conversations with %s", name); | 3508 g_snprintf(buf, BUF_LONG, "Gaim - Conversations with %s", name); |
| 3506 else | 3509 else |
| 3507 g_snprintf(buf, BUF_LONG, "Gaim - System Log"); | 3510 g_snprintf(buf, BUF_LONG, "Gaim - System Log"); |
| 3566 if (length > 31) length = 31; | 3569 if (length > 31) length = 31; |
| 3567 | 3570 |
| 3568 offset = ftell(fp); | 3571 offset = ftell(fp); |
| 3569 g_snprintf(convo_start, length, "%s", temp); | 3572 g_snprintf(convo_start, length, "%s", temp); |
| 3570 item = gtk_list_item_new_with_label(convo_start); | 3573 item = gtk_list_item_new_with_label(convo_start); |
| 3571 gtk_object_set_user_data(GTK_OBJECT(item), (gpointer)offset); | 3574 view = g_new0(struct view_log, 1); |
| 3572 gtk_object_set_data(GTK_OBJECT(item), "options", (gpointer)options); | 3575 view->options = options; |
| 3573 gtk_object_set_data(GTK_OBJECT(item), "name", (gpointer)name); | 3576 view->offset = offset; |
| 3574 gtk_object_set_data(GTK_OBJECT(item), "box", (gpointer)bbox); | 3577 view->name = g_strdup(name); |
| 3575 gtk_object_set_data(GTK_OBJECT(item), "window", (gpointer)window); | 3578 view->bbox = bbox; |
| 3579 view->window = window; | |
| 3580 view->layout = layout; | |
| 3576 gtk_signal_connect(GTK_OBJECT(item), "select", | 3581 gtk_signal_connect(GTK_OBJECT(item), "select", |
| 3577 GTK_SIGNAL_FUNC(log_show_convo), layout); | 3582 GTK_SIGNAL_FUNC(log_show_convo), view); |
| 3583 gtk_signal_connect(GTK_OBJECT(item), "destroy", | |
| 3584 GTK_SIGNAL_FUNC(des_view_item), view); | |
| 3578 last = item; | 3585 last = item; |
| 3579 item_list = g_list_append(item_list, item); | 3586 item_list = g_list_append(item_list, item); |
| 3580 | 3587 |
| 3581 gtk_widget_show(item); | 3588 gtk_widget_show(item); |
| 3582 } | 3589 } |
| 3624 gtk_signal_connect(GTK_OBJECT(save_button), "clicked", GTK_SIGNAL_FUNC(show_save_log), name); | 3631 gtk_signal_connect(GTK_OBJECT(save_button), "clicked", GTK_SIGNAL_FUNC(show_save_log), name); |
| 3625 | 3632 |
| 3626 gtk_widget_show_all(window); | 3633 gtk_widget_show_all(window); |
| 3627 | 3634 |
| 3628 if (!name) { | 3635 if (!name) { |
| 3629 gtk_object_set_user_data(GTK_OBJECT(layout), (gpointer)0); | 3636 view = g_new0(struct view_log, 1); |
| 3630 gtk_object_set_data(GTK_OBJECT(layout), "options", (gpointer)options); | 3637 view->options = options; |
| 3631 gtk_object_set_data(GTK_OBJECT(layout), "name", (gpointer)NULL); | 3638 view->name = NULL; |
| 3632 gtk_object_set_data(GTK_OBJECT(layout), "box", (gpointer)bbox); | 3639 view->bbox = bbox; |
| 3633 gtk_object_set_data(GTK_OBJECT(layout), "window", (gpointer)window); | 3640 view->window = window; |
| 3634 log_show_convo(layout, layout); | 3641 view->layout = layout; |
| 3642 log_show_convo(layout, view); | |
| 3643 gtk_signal_connect(GTK_OBJECT(layout), "destroy", GTK_SIGNAL_FUNC(des_view_item), view); | |
| 3635 } else { | 3644 } else { |
| 3636 gtk_list_select_item(GTK_LIST(list), 0); | 3645 gtk_list_select_item(GTK_LIST(list), 0); |
| 3637 } | 3646 } |
| 3638 | 3647 |
| 3639 gtk_widget_set_sensitive(bbox, TRUE); | 3648 gtk_widget_set_sensitive(bbox, TRUE); |
