comparison src/gtkimhtmltoolbar.c @ 9522:4399fc6e667a

[gaim-migrate @ 10349] gtk2.4 file chooserifying gtkimhtmltoolbar.c I decided not to use gaim_request_file() here. There wasn't a lot of other Gaim code in gtkimhtmltoolbar.c, and I figured it was easy enough not to add to it. Besides, this dialog should have an image preview, and to do that you can't use gtknotify.c (not without modifying gtknotify.c, anyway, but that's out of the scope of my changes) committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Tue, 13 Jul 2004 03:20:46 +0000
parents 2fa81d44ee6f
children a1029432ae4a
comparison
equal deleted inserted replaced
9521:9b2f1444811f 9522:4399fc6e667a
420 gtk_widget_grab_focus(toolbar->imhtml); 420 gtk_widget_grab_focus(toolbar->imhtml);
421 } 421 }
422 422
423 423
424 static void 424 static void
425 do_insert_image_cb(GtkWidget *widget, int resp, GtkIMHtmlToolbar *toolbar) 425 do_insert_image_cb(GtkWidget *widget, int response, GtkIMHtmlToolbar *toolbar)
426 { 426 {
427 char *name, *filename; 427 gchar *filename, *name, *buf;
428 char *buf, *filedata; 428 char *filedata;
429 size_t size; 429 size_t size;
430 GError *error = NULL; 430 GError *error = NULL;
431 int id; 431 int id;
432 GtkTextIter iter; 432 GtkTextIter iter;
433 GtkTextMark *ins; 433 GtkTextMark *ins;
434 434
435 if (resp != GTK_RESPONSE_OK) { 435 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
436 if (response != GTK_RESPONSE_ACCEPT) {
437 #else /* FILECHOOSER */
438 if (response != GTK_RESPONSE_OK) {
439 #endif /* FILECHOOSER */
436 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE); 440 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE);
437 return; 441 return;
438 } 442 }
439 443
440 name = g_strdup(gtk_file_selection_get_filename(GTK_FILE_SELECTION(widget))); 444 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
441 445 filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget));
442 if (!name) { 446 #else /* FILECHOOSER */
447 filename = g_strdup(gtk_file_selection_get_filename(GTK_FILE_SELECTION(widget)));
448 #endif /* FILECHOOSER */
449
450 if (filename == NULL) {
443 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE); 451 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE);
444 return; 452 return;
445 } 453 }
446 454
447 if (gaim_gtk_check_if_dir(name, GTK_FILE_SELECTION(widget))) { 455 #if !GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
448 g_free(name); 456 if (gaim_gtk_check_if_dir(filename, GTK_FILE_SELECTION(widget))) {
457 g_free(filename);
449 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE); 458 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE);
450 return; 459 return;
451 } 460 }
452 461 #endif /* FILECHOOSER */
462
463 /* The following triggers a callback that closes the widget */
453 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE); 464 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), FALSE);
454 465
455 if (!g_file_get_contents(name, &filedata, &size, &error)) { 466 if (!g_file_get_contents(filename, &filedata, &size, &error)) {
456 gaim_notify_error(NULL, NULL, error->message, NULL); 467 gaim_notify_error(NULL, NULL, error->message, NULL);
457 468
458 g_error_free(error); 469 g_error_free(error);
459 g_free(name); 470 g_free(filename);
460 471
461 return; 472 return;
462 } 473 }
463 474
464 filename = name; 475 name = strrchr(filename, G_DIR_SEPARATOR) + 1;
465 while (strchr(filename, '/')) 476
466 filename = strchr(filename, '/') + 1; 477 id = gaim_imgstore_add(filedata, size, name);
467
468 id = gaim_imgstore_add(filedata, size, filename);
469 g_free(filedata); 478 g_free(filedata);
470 479
471 if (!id) { 480 if (id == 0) {
472 buf = g_strdup_printf(_("Failed to store image: %s\n"), name); 481 buf = g_strdup_printf(_("Failed to store image: %s\n"), filename);
473 gaim_notify_error(NULL, NULL, buf, NULL); 482 gaim_notify_error(NULL, NULL, buf, NULL);
474 483
475 g_free(buf); 484 g_free(buf);
476 g_free(name); 485 g_free(filename);
477 486
478 return; 487 return;
479 } 488 }
489
490 g_free(filename);
480 491
481 ins = gtk_text_buffer_get_insert(gtk_text_view_get_buffer(GTK_TEXT_VIEW(toolbar->imhtml))); 492 ins = gtk_text_buffer_get_insert(gtk_text_view_get_buffer(GTK_TEXT_VIEW(toolbar->imhtml)));
482 gtk_text_buffer_get_iter_at_mark(gtk_text_view_get_buffer(GTK_TEXT_VIEW(toolbar->imhtml)), 493 gtk_text_buffer_get_iter_at_mark(gtk_text_view_get_buffer(GTK_TEXT_VIEW(toolbar->imhtml)),
483 &iter, ins); 494 &iter, ins);
484 gtk_imhtml_insert_image_at_iter(GTK_IMHTML(toolbar->imhtml), id, &iter); 495 gtk_imhtml_insert_image_at_iter(GTK_IMHTML(toolbar->imhtml), id, &iter);
485 gaim_imgstore_unref(id); 496 gaim_imgstore_unref(id);
486
487 g_free(name);
488 } 497 }
489 498
490 499
491 static void 500 static void
492 insert_image_cb(GtkWidget *save, GtkIMHtmlToolbar *toolbar) 501 insert_image_cb(GtkWidget *save, GtkIMHtmlToolbar *toolbar)
493 { 502 {
494 char buf[BUF_LONG];
495 GtkWidget *window; 503 GtkWidget *window;
496 504
497 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->image))) { 505 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->image))) {
506 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
507 window = gtk_file_chooser_dialog_new(_("Insert Image"),
508 NULL,
509 GTK_FILE_CHOOSER_ACTION_OPEN,
510 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
511 GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
512 NULL);
513 gtk_dialog_set_default_response(GTK_DIALOG(window), GTK_RESPONSE_ACCEPT);
514 g_signal_connect(G_OBJECT(GTK_FILE_CHOOSER(window)),
515 "response", G_CALLBACK(do_insert_image_cb), toolbar);
516 #else /* FILECHOOSER */
498 window = gtk_file_selection_new(_("Insert Image")); 517 window = gtk_file_selection_new(_("Insert Image"));
499 g_snprintf(buf, sizeof(buf), "%s" G_DIR_SEPARATOR_S, gaim_home_dir());
500 gtk_file_selection_set_filename(GTK_FILE_SELECTION(window), buf);
501
502 gtk_dialog_set_default_response(GTK_DIALOG(window), GTK_RESPONSE_OK); 518 gtk_dialog_set_default_response(GTK_DIALOG(window), GTK_RESPONSE_OK);
503 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(window)), 519 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(window)),
504 "response", G_CALLBACK(do_insert_image_cb), toolbar); 520 "response", G_CALLBACK(do_insert_image_cb), toolbar);
521 #endif /* FILECHOOSER */
505 522
506 gtk_widget_show(window); 523 gtk_widget_show(window);
507 toolbar->image_dialog = window; 524 toolbar->image_dialog = window;
508 } else { 525 } else {
509 gtk_widget_destroy(toolbar->image_dialog); 526 gtk_widget_destroy(toolbar->image_dialog);
510 toolbar->image_dialog = NULL; 527 toolbar->image_dialog = NULL;
511 } 528 }
529
512 gtk_widget_grab_focus(toolbar->imhtml); 530 gtk_widget_grab_focus(toolbar->imhtml);
513 } 531 }
514 532
515 533
516 static void 534 static void