pidgin/gtkxfer.c

changeset 41143
8fa1f37d32f2
parent 41087
4fc5b0ddf55e
child 41144
910bdda75c74
equal deleted inserted replaced
41142:a9f32316d828 41143:8fa1f37d32f2
429 } 429 }
430 430
431 static void 431 static void
432 open_button_cb(GtkButton *button, PidginXferDialog *dialog) 432 open_button_cb(GtkButton *button, PidginXferDialog *dialog)
433 { 433 {
434 #ifdef _WIN32 434 gchar *uri = NULL;
435 /* If using Win32... */ 435 GError *error = NULL;
436 int code; 436
437 wchar_t *wc_filename = g_utf8_to_utf16( 437 uri = g_strdup_printf("file://%s",
438 purple_xfer_get_local_filename( 438 purple_xfer_get_local_filename(dialog->selected_xfer));
439 dialog->selected_xfer), 439 if(!gtk_show_uri_on_window(GTK_WINDOW(dialog), uri, GDK_CURRENT_TIME,
440 -1, NULL, NULL, NULL); 440 &error))
441
442 code = (int) ShellExecuteW(NULL, NULL, wc_filename, NULL, NULL,
443 SW_SHOW);
444
445 g_free(wc_filename);
446
447 if (code == SE_ERR_ASSOCINCOMPLETE || code == SE_ERR_NOASSOC)
448 { 441 {
449 purple_notify_error(dialog, NULL, 442 gchar *tmp = g_strdup_printf(
450 _("There is no application configured to open this type of file."), 443 _("Error launching %s: %s"),
451 NULL, NULL); 444 purple_xfer_get_local_filename(dialog->selected_xfer),
452 } 445 error->message);
453 else if (code < 32) 446 purple_notify_error(dialog, NULL, _("Unable to open file."), tmp, NULL);
454 { 447 g_free(tmp);
455 purple_notify_error(dialog, NULL, 448 g_error_free(error);
456 _("An error occurred while opening the file."), NULL, NULL); 449 }
457 purple_debug_warning("xfer", "filename: %s; code: %d\n", 450 g_free(uri);
458 purple_xfer_get_local_filename(dialog->selected_xfer), code);
459 }
460 #else
461 const char *filename = purple_xfer_get_local_filename(dialog->selected_xfer);
462 char *command = NULL;
463 GError *error = NULL;
464
465 if (purple_running_gnome())
466 {
467 char *escaped = g_shell_quote(filename);
468 command = g_strdup_printf("gnome-open %s", escaped);
469 g_free(escaped);
470 }
471 else if (purple_running_kde())
472 {
473 char *escaped = g_shell_quote(filename);
474
475 if (g_str_has_suffix(filename, ".desktop")) {
476 command = g_strdup_printf("kfmclient openURL %s 'text/plain'", escaped);
477 } else {
478 command = g_strdup_printf("kfmclient openURL %s", escaped);
479 }
480 g_free(escaped);
481 }
482 else
483 {
484 gchar *uri = g_strdup_printf("file://%s", filename);
485 purple_notify_uri(NULL, uri);
486 g_free(uri);
487 return;
488 }
489
490 if (purple_program_is_valid(command))
491 {
492 gint exit_status;
493 if (!g_spawn_command_line_sync(command, NULL, NULL, &exit_status, &error))
494 {
495 char *tmp = g_strdup_printf(_("Error launching %s: %s"),
496 purple_xfer_get_local_filename(dialog->selected_xfer),
497 error->message);
498 purple_notify_error(dialog, NULL, _("Unable to open file."), tmp, NULL);
499 g_free(tmp);
500 g_error_free(error);
501 }
502 if (exit_status != 0)
503 {
504 char *primary = g_strdup_printf(_("Error running %s"), command);
505 char *secondary = g_strdup_printf(_("Process returned error code %d"),
506 exit_status);
507 purple_notify_error(dialog, NULL, primary, secondary, NULL);
508 g_free(primary);
509 g_free(secondary);
510 }
511 }
512 #endif
513 } 451 }
514 452
515 static void 453 static void
516 remove_button_cb(GtkButton *button, PidginXferDialog *dialog) 454 remove_button_cb(GtkButton *button, PidginXferDialog *dialog)
517 { 455 {

mercurial