src/gtkimhtmltoolbar.c

changeset 9522
e38381bd8c05
parent 9287
e653264eb602
child 9599
1089c73e0586
equal deleted inserted replaced
9521:9c611a48614b 9522:e38381bd8c05
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

mercurial