Mercurial > pidgin
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 |