grim/pidgin

Use gtk_show_uri_on_window to open File Transfer results

2021-10-26, Elliott Sales de Andrade
8fa1f37d32f2
Parents a9f32316d828
Children 910bdda75c74
Use gtk_show_uri_on_window to open File Transfer results

Using `gtk_show_uri_on_window` to open File Transfer results removes an extra set of `purple_running_*` call.

Testing Done:
Transferred a file to me, and then hit the Open button in the File Transfer window. As it was named `mentions.txt`, it opened in GEdit, as expected.

Reviewed at https://reviews.imfreedom.org/r/1103/
--- a/pidgin/gtkxfer.c Mon Oct 25 22:06:07 2021 -0500
+++ b/pidgin/gtkxfer.c Tue Oct 26 04:04:58 2021 -0500
@@ -431,85 +431,23 @@
static void
open_button_cb(GtkButton *button, PidginXferDialog *dialog)
{
-#ifdef _WIN32
- /* If using Win32... */
- int code;
- wchar_t *wc_filename = g_utf8_to_utf16(
- purple_xfer_get_local_filename(
- dialog->selected_xfer),
- -1, NULL, NULL, NULL);
-
- code = (int) ShellExecuteW(NULL, NULL, wc_filename, NULL, NULL,
- SW_SHOW);
-
- g_free(wc_filename);
-
- if (code == SE_ERR_ASSOCINCOMPLETE || code == SE_ERR_NOASSOC)
- {
- purple_notify_error(dialog, NULL,
- _("There is no application configured to open this type of file."),
- NULL, NULL);
- }
- else if (code < 32)
- {
- purple_notify_error(dialog, NULL,
- _("An error occurred while opening the file."), NULL, NULL);
- purple_debug_warning("xfer", "filename: %s; code: %d\n",
- purple_xfer_get_local_filename(dialog->selected_xfer), code);
- }
-#else
- const char *filename = purple_xfer_get_local_filename(dialog->selected_xfer);
- char *command = NULL;
+ gchar *uri = NULL;
GError *error = NULL;
- if (purple_running_gnome())
- {
- char *escaped = g_shell_quote(filename);
- command = g_strdup_printf("gnome-open %s", escaped);
- g_free(escaped);
- }
- else if (purple_running_kde())
+ uri = g_strdup_printf("file://%s",
+ purple_xfer_get_local_filename(dialog->selected_xfer));
+ if(!gtk_show_uri_on_window(GTK_WINDOW(dialog), uri, GDK_CURRENT_TIME,
+ &error))
{
- char *escaped = g_shell_quote(filename);
-
- if (g_str_has_suffix(filename, ".desktop")) {
- command = g_strdup_printf("kfmclient openURL %s 'text/plain'", escaped);
- } else {
- command = g_strdup_printf("kfmclient openURL %s", escaped);
- }
- g_free(escaped);
- }
- else
- {
- gchar *uri = g_strdup_printf("file://%s", filename);
- purple_notify_uri(NULL, uri);
- g_free(uri);
- return;
+ gchar *tmp = g_strdup_printf(
+ _("Error launching %s: %s"),
+ purple_xfer_get_local_filename(dialog->selected_xfer),
+ error->message);
+ purple_notify_error(dialog, NULL, _("Unable to open file."), tmp, NULL);
+ g_free(tmp);
+ g_error_free(error);
}
-
- if (purple_program_is_valid(command))
- {
- gint exit_status;
- if (!g_spawn_command_line_sync(command, NULL, NULL, &exit_status, &error))
- {
- char *tmp = g_strdup_printf(_("Error launching %s: %s"),
- purple_xfer_get_local_filename(dialog->selected_xfer),
- error->message);
- purple_notify_error(dialog, NULL, _("Unable to open file."), tmp, NULL);
- g_free(tmp);
- g_error_free(error);
- }
- if (exit_status != 0)
- {
- char *primary = g_strdup_printf(_("Error running %s"), command);
- char *secondary = g_strdup_printf(_("Process returned error code %d"),
- exit_status);
- purple_notify_error(dialog, NULL, primary, secondary, NULL);
- g_free(primary);
- g_free(secondary);
- }
- }
-#endif
+ g_free(uri);
}
static void