# HG changeset patch # User Mark Doliner # Date 1118722391 0 # Node ID 9fe9c7e00666d84a0205257f98cb8bc3546fab9c # Parent 926d2ff728992f2048bc849bfb6b51c79ceb54a0 [gaim-migrate @ 12871] sf patch #1207058, from Dave Ahlswede (with tweaks by me) Enable opening received files in GNOME by using gnome-open Thank to grim and rlaager for help testing. committer: Tailor Script diff -r 926d2ff72899 -r 9fe9c7e00666 src/gtkft.c --- a/src/gtkft.c Tue Jun 14 02:26:04 2005 +0000 +++ b/src/gtkft.c Tue Jun 14 04:13:11 2005 +0000 @@ -292,12 +292,20 @@ gtk_widget_hide(dialog->stop_button); gtk_widget_show(dialog->remove_button); -#ifdef _WIN32 /* Only supported in Win32 right now */ +#ifdef _WIN32 + /* If using Win32... */ if (gaim_xfer_get_type(xfer) == GAIM_XFER_RECEIVE) { gtk_widget_set_sensitive(dialog->open_button, TRUE); } else { gtk_widget_set_sensitive(dialog->open_button, FALSE); } +#else + /* If using GNOME, use gnome-open */ + if (gaim_xfer_get_type(xfer) == GAIM_XFER_RECEIVE && gaim_running_gnome()) { + gtk_widget_set_sensitive(dialog->open_button, TRUE); + } else { + gtk_widget_set_sensitive (dialog->open_button, FALSE); + } #endif gtk_widget_set_sensitive(dialog->pause_button, FALSE); gtk_widget_set_sensitive(dialog->resume_button, FALSE); @@ -406,14 +414,15 @@ static void open_button_cb(GtkButton *button, GaimGtkXferDialog *dialog) { -#ifdef _WIN32 /* Only supported in Win32 right now */ +#ifdef _WIN32 + /* If using Win32... */ int code; if (G_WIN32_HAVE_WIDECHAR_API ()) { wchar_t *wc_filename = g_utf8_to_utf16( gaim_xfer_get_local_filename( dialog->selected_xfer), -1, NULL, NULL, NULL); - + code = (int) ShellExecuteW(NULL, NULL, wc_filename, NULL, NULL, SW_SHOW); @@ -423,7 +432,7 @@ gaim_xfer_get_local_filename( dialog->selected_xfer), -1, NULL, NULL, NULL); - + code = (int) ShellExecuteA(NULL, NULL, l_filename, NULL, NULL, SW_SHOW); @@ -432,16 +441,49 @@ if (code == SE_ERR_ASSOCINCOMPLETE || code == SE_ERR_NOASSOC) { - gaim_notify_error(NULL, NULL, + gaim_notify_error(dialog, NULL, _("There is no application configured to open this type of file."), NULL); } else if (code < 32) { - gaim_notify_error(NULL, NULL, + gaim_notify_error(dialog, NULL, _("An error occurred while opening the file."), NULL); gaim_debug_warning("ft", "filename: %s; code: %d\n", gaim_xfer_get_local_filename(dialog->selected_xfer), code); } +#else + /* If using GNOME, use gnome-open */ + if (gaim_running_gnome()) + { + char *command = NULL; + char *tmp = NULL; + GError *error = NULL; + + command = g_strdup_printf("gnome-open \"%s\"", + gaim_xfer_get_local_filename(dialog->selected_xfer)); + + if (gaim_program_is_valid(command)) + { + gint exit_status; + if (!g_spawn_command_line_sync(command, NULL, NULL, &exit_status, &error)) + { + tmp = g_strdup_printf(_("Error launching %s: %s"), + gaim_xfer_get_local_filename(dialog->selected_xfer), + error->message); + gaim_notify_error(dialog, NULL, _("Unable to open file."), tmp); + 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); + gaim_notify_error(dialog, NULL, primary, secondary); + g_free(tmp); + } + } + } #endif } @@ -785,6 +827,8 @@ { g_return_if_fail(dialog != NULL); + gaim_notify_close_with_handle(dialog); + gtk_widget_destroy(dialog->window); g_free(dialog); @@ -803,6 +847,8 @@ { g_return_if_fail(dialog != NULL); + gaim_notify_close_with_handle(dialog); + gtk_widget_hide(dialog->window); } @@ -1092,6 +1138,12 @@ } void +gaim_gtk_xfers_uninit(void) +{ + gaim_gtkxfer_dialog_destroy(xfer_dialog); +} + +void gaim_set_gtkxfer_dialog(GaimGtkXferDialog *dialog) { xfer_dialog = dialog; diff -r 926d2ff72899 -r 9fe9c7e00666 src/gtkft.h --- a/src/gtkft.h Tue Jun 14 02:26:04 2005 +0000 +++ b/src/gtkft.h Tue Jun 14 04:13:11 2005 +0000 @@ -121,6 +121,11 @@ void gaim_gtk_xfers_init(void); /** + * Uninitializes the GTK+ file transfer system. + */ +void gaim_gtk_xfers_uninit(void); + +/** * Sets gaim's main file transfer dialog. * * @param dialog The main dialog. diff -r 926d2ff72899 -r 9fe9c7e00666 src/gtkmain.c --- a/src/gtkmain.c Tue Jun 14 02:26:04 2005 +0000 +++ b/src/gtkmain.c Tue Jun 14 04:13:11 2005 +0000 @@ -289,6 +289,7 @@ gaim_gtk_status_uninit(); gaim_gtk_blist_uninit(); gaim_gtk_account_uninit(); + gaim_gtk_xfers_uninit(); /* and end it all... */ gtk_main_quit();