310
326
error_dialog (TrashApplet *applet, const gchar *error, ...)
316
g_return_if_fail (error != NULL);
318
va_start (args, error);
319
error_string = g_strdup_vprintf (error, args);
322
dialog = gtk_message_dialog_new (NULL,
329
g_signal_connect (G_OBJECT (dialog), "response",
330
G_CALLBACK (gtk_widget_destroy),
333
gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
334
gtk_window_set_screen (GTK_WINDOW(dialog),
335
gtk_widget_get_screen (GTK_WIDGET (applet)));
336
gtk_widget_show (dialog);
338
g_free (error_string);
332
g_return_if_fail (error != NULL);
334
va_start (args, error);
335
error_string = g_strdup_vprintf (error, args);
338
dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL,
339
GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
342
g_signal_connect (G_OBJECT (dialog), "response",
343
G_CALLBACK (gtk_widget_destroy),
346
gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
347
gtk_window_set_screen (GTK_WINDOW(dialog),
348
gtk_widget_get_screen (GTK_WIDGET (applet)));
349
gtk_widget_show (dialog);
351
g_free (error_string);
342
355
trash_applet_do_empty (BonoboUIComponent *component,
346
359
trash_empty (GTK_WIDGET (applet));
350
363
trash_applet_open_folder (BonoboUIComponent *component,
356
/* Open the "trash:" URI with gnome-open */
357
gchar *argv[] = { "gnome-open", "trash:", NULL };
361
screen = gtk_widget_get_screen (GTK_WIDGET (applet));
362
res = gdk_spawn_on_screen (screen, NULL,
370
error_dialog (applet, _("Error while spawning nautilus:\n%s"),
369
gtk_show_uri (gtk_widget_get_screen (GTK_WIDGET (applet)),
371
gtk_get_current_event_time (),
376
error_dialog (applet, _("Error while spawning nautilus:\n%s"),
377
383
trash_applet_show_help (BonoboUIComponent *component,
383
/* FIXME - Actually, we need a user guide */
384
gnome_help_display_desktop_on_screen
385
(NULL, "trashapplet", "trashapplet", NULL,
386
gtk_widget_get_screen (GTK_WIDGET (applet)),
390
error_dialog (applet, _("There was an error displaying help: %s"), err->message);
389
/* FIXME - Actually, we need a user guide */
390
gtk_show_uri (gtk_widget_get_screen (GTK_WIDGET (applet)),
392
gtk_get_current_event_time (),
397
error_dialog (applet,
398
_("There was an error displaying help: %s"),
397
406
trash_applet_show_about (BonoboUIComponent *component,
401
static const char *authors[] = {
402
"Michiel Sikkes <michiel@eyesopened.nl>",
403
"Emmanuele Bassi <ebassi@gmail.com>",
404
"Sebastian Bacher <seb128@canonical.com>",
405
"James Henstridge <james.henstridge@canonical.com>",
406
"Ryan Lortie <desrt@desrt.ca>",
409
static const char *documenters[] = {
410
"Michiel Sikkes <michiel@eyesopened.nl>",
410
static const char *authors[] = {
411
"Michiel Sikkes <michiel@eyesopened.nl>",
412
"Emmanuele Bassi <ebassi@gmail.com>",
413
"Sebastian Bacher <seb128@canonical.com>",
414
"James Henstridge <james.henstridge@canonical.com>",
415
"Ryan Lortie <desrt@desrt.ca>",
418
static const char *documenters[] = {
419
"Michiel Sikkes <michiel@eyesopened.nl>",
414
gtk_show_about_dialog
417
"copyright", "Copyright \xC2\xA9 2004 Michiel Sikkes,"
418
"\xC2\xA9 2008 Ryan Lortie",
419
"comments", _("A GNOME trash bin that lives in your panel. "
420
"You can use it to view the trash or drag "
421
"and drop items into the trash."),
423
"documenters", documenters,
424
"translator-credits", _("translator-credits"),
425
"logo_icon_name", "user-trash-full",
423
gtk_show_about_dialog (NULL,
425
"copyright", "Copyright \xC2\xA9 2004 Michiel Sikkes,"
426
"\xC2\xA9 2008 Ryan Lortie",
427
"comments", _("A GNOME trash bin that lives in your panel. "
428
"You can use it to view the trash or drag "
429
"and drop items into the trash."),
431
"documenters", documenters,
432
"translator-credits", _("translator-credits"),
433
"logo_icon_name", "user-trash-full",
430
438
confirm_delete_immediately (GtkWidget *parent_view,
435
GtkWidget *dialog, *hbox, *vbox, *image, *label;
436
gchar *str, *prompt, *detail;
439
screen = gtk_widget_get_screen (parent_view);
441
dialog = gtk_dialog_new ();
442
gtk_window_set_screen (GTK_WINDOW (dialog), screen);
443
atk_object_set_role (gtk_widget_get_accessible (dialog), ATK_ROLE_ALERT);
444
gtk_window_set_title (GTK_WINDOW (dialog), _("Delete Immediately?"));
445
gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE);
446
gtk_container_set_border_width (GTK_CONTAINER (dialog), 5);
447
gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
449
gtk_widget_realize (dialog);
450
gdk_window_set_transient_for (GTK_WIDGET (dialog)->window,
451
gdk_screen_get_root_window (screen));
452
gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
454
gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->vbox), 14);
456
hbox = gtk_hbox_new (FALSE, 12);
457
gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
458
gtk_widget_show (hbox);
459
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), hbox,
462
image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_QUESTION,
463
GTK_ICON_SIZE_DIALOG);
464
gtk_misc_set_alignment (GTK_MISC (image), 0.5, 0.0);
465
gtk_widget_show (image);
466
gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0);
468
vbox = gtk_vbox_new (FALSE, 12);
469
gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0);
470
gtk_widget_show (vbox);
473
prompt = _("Cannot move items to trash, do you want to delete them immediately?");
474
detail = g_strdup_printf ("None of the %d selected items can be moved to the Trash", num_files);
476
prompt = _("Cannot move some items to trash, do you want to delete these immediately?");
477
detail = g_strdup_printf ("%d of the selected items cannot be moved to the Trash", num_files);
480
str = g_strconcat ("<span weight=\"bold\" size=\"larger\">",
481
prompt, "</span>", NULL);
482
label = gtk_label_new (str);
483
gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
484
gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
485
gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
486
gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
487
gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
488
gtk_widget_show (label);
491
label = gtk_label_new (detail);
492
gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
493
gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
494
gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
495
gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
496
gtk_widget_show (label);
499
gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_CANCEL,
500
GTK_RESPONSE_CANCEL);
501
gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_DELETE,
503
gtk_dialog_set_default_response (GTK_DIALOG (dialog),
506
response = gtk_dialog_run (GTK_DIALOG (dialog));
508
gtk_object_destroy (GTK_OBJECT (dialog));
510
return response == GTK_RESPONSE_YES;
443
GtkWidget *dialog, *hbox, *vbox, *image, *label;
444
gchar *str, *prompt, *detail;
447
screen = gtk_widget_get_screen (parent_view);
449
dialog = gtk_dialog_new ();
450
gtk_window_set_screen (GTK_WINDOW (dialog), screen);
451
atk_object_set_role (gtk_widget_get_accessible (dialog), ATK_ROLE_ALERT);
452
gtk_window_set_title (GTK_WINDOW (dialog), _("Delete Immediately?"));
453
gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE);
454
gtk_container_set_border_width (GTK_CONTAINER (dialog), 5);
455
gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
457
gtk_widget_realize (dialog);
458
gdk_window_set_transient_for (GTK_WIDGET (dialog)->window,
459
gdk_screen_get_root_window (screen));
460
gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
462
gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->vbox), 14);
464
hbox = gtk_hbox_new (FALSE, 12);
465
gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
466
gtk_widget_show (hbox);
467
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), hbox,
470
image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_QUESTION,
471
GTK_ICON_SIZE_DIALOG);
472
gtk_misc_set_alignment (GTK_MISC (image), 0.5, 0.0);
473
gtk_widget_show (image);
474
gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0);
476
vbox = gtk_vbox_new (FALSE, 12);
477
gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0);
478
gtk_widget_show (vbox);
482
prompt = _("Cannot move items to trash, do you want to delete them immediately?");
483
detail = g_strdup_printf ("None of the %d selected items can be moved to the Trash", num_files);
487
prompt = _("Cannot move some items to trash, do you want to delete these immediately?");
488
detail = g_strdup_printf ("%d of the selected items cannot be moved to the Trash", num_files);
491
str = g_strconcat ("<span weight=\"bold\" size=\"larger\">",
492
prompt, "</span>", NULL);
493
label = gtk_label_new (str);
494
gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
495
gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
496
gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
497
gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
498
gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
499
gtk_widget_show (label);
502
label = gtk_label_new (detail);
503
gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
504
gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
505
gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
506
gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
507
gtk_widget_show (label);
510
gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_CANCEL,
511
GTK_RESPONSE_CANCEL);
512
gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_DELETE,
514
gtk_dialog_set_default_response (GTK_DIALOG (dialog),
517
response = gtk_dialog_run (GTK_DIALOG (dialog));
519
gtk_object_destroy (GTK_OBJECT (dialog));
521
return response == GTK_RESPONSE_YES;
514
525
trash_applet_drag_data_received (GtkWidget *widget,
515
GdkDragContext *context,
518
GtkSelectionData *selectiondata,
526
GdkDragContext *context,
529
GtkSelectionData *selectiondata,
524
GList *trashed = NULL;
525
GList *untrashable = NULL;
527
GError *error = NULL;
529
list = g_uri_list_extract_uris ((gchar *)selectiondata->data);
531
for (i = 0; list[i]; i++) {
534
file = g_file_new_for_uri (list[i]);
535
if (!g_file_trash (file, NULL, NULL)) {
536
untrashable = g_list_prepend (untrashable, file);
539
trashed = g_list_prepend (trashed, file);
544
if (confirm_delete_immediately (widget,
545
g_list_length (untrashable),
547
for (l = untrashable; l; l = l->next) {
548
if (!g_file_delete (l->data, NULL, &error)) {
535
GList *trashed = NULL;
536
GList *untrashable = NULL;
538
GError *error = NULL;
540
list = g_uri_list_extract_uris ((gchar *)selectiondata->data);
542
for (i = 0; list[i]; i++)
546
file = g_file_new_for_uri (list[i]);
548
if (!g_file_trash (file, NULL, NULL))
550
untrashable = g_list_prepend (untrashable, file);
554
trashed = g_list_prepend (trashed, file);
560
if (confirm_delete_immediately (widget,
561
g_list_length (untrashable),
564
for (l = untrashable; l; l = l->next)
566
if (!g_file_delete (l->data, NULL, &error))
550
* FIXME: uncomment me after branched (we're string frozen)
551
error_dialog (applet,
552
_("Unable to delete '%s': %s"),
553
g_file_get_uri (l->data),
569
* FIXME: uncomment me after branched (we're string frozen)
570
error_dialog (applet,
571
_("Unable to delete '%s': %s"),
572
g_file_get_uri (l->data),
556
g_clear_error (&error);
562
g_list_foreach (untrashable, (GFunc)g_object_unref, NULL);
563
g_list_free (untrashable);
564
g_list_foreach (trashed, (GFunc)g_object_unref, NULL);
565
g_list_free (trashed);
569
gtk_drag_finish (context, TRUE, FALSE, time_);
575
g_clear_error (&error);
581
g_list_foreach (untrashable, (GFunc)g_object_unref, NULL);
582
g_list_free (untrashable);
583
g_list_foreach (trashed, (GFunc)g_object_unref, NULL);
584
g_list_free (trashed);
588
gtk_drag_finish (context, TRUE, FALSE, time_);