*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#include <config.h>
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
#include <glib/gstdio.h>
+#include <gtk/gtk.h>
#include "ev-file-helpers.h"
#include "ev-attachment.h"
attachment->priv->tmp_file = NULL;
}
- (* G_OBJECT_CLASS (ev_attachment_parent_class)->finalize) (object);
+ G_OBJECT_CLASS (ev_attachment_parent_class)->finalize (object);
}
static void
g_return_val_if_fail (EV_IS_ATTACHMENT (attachment), FALSE);
g_return_val_if_fail (G_IS_FILE (file), FALSE);
- output_stream = g_file_create (file, 0, NULL, &ioerror);
+ output_stream = g_file_replace (file, NULL, FALSE, 0, NULL, &ioerror);
if (output_stream == NULL) {
char *uri;
static gboolean
ev_attachment_launch_app (EvAttachment *attachment,
+ GdkScreen *screen,
+ guint32 timestamp,
GError **error)
{
- gboolean result;
- GList *files = NULL;
- GError *ioerror = NULL;
+ gboolean result;
+ GList *files = NULL;
+ GAppLaunchContext *context = NULL;
+ GError *ioerror = NULL;
g_assert (G_IS_FILE (attachment->priv->tmp_file));
g_assert (G_IS_APP_INFO (attachment->priv->app));
files = g_list_prepend (files, attachment->priv->tmp_file);
+
+ context = G_APP_LAUNCH_CONTEXT (gdk_app_launch_context_new ());
+ gdk_app_launch_context_set_screen (GDK_APP_LAUNCH_CONTEXT (context), screen);
+ gdk_app_launch_context_set_timestamp (GDK_APP_LAUNCH_CONTEXT (context), timestamp);
+
result = g_app_info_launch (attachment->priv->app, files,
- NULL, &ioerror);
+ context, &ioerror);
+
+ if (context)
+ g_object_unref (context);
if (!result) {
g_set_error (error,
gboolean
ev_attachment_open (EvAttachment *attachment,
+ GdkScreen *screen,
+ guint32 timestamp,
GError **error)
{
GAppInfo *app_info;
g_return_val_if_fail (EV_IS_ATTACHMENT (attachment), FALSE);
if (!attachment->priv->app) {
- app_info = g_app_info_get_default_for_type (attachment->priv->mime_type, TRUE);
+ app_info = g_app_info_get_default_for_type (attachment->priv->mime_type, FALSE);
attachment->priv->app = app_info;
}
return FALSE;
}
- if (attachment->priv->tmp_file &&
- g_file_query_exists (attachment->priv->tmp_file, NULL)) {
- retval = ev_attachment_launch_app (attachment, error);
+ if (attachment->priv->tmp_file) {
+ retval = ev_attachment_launch_app (attachment, screen,
+ timestamp, error);
} else {
- GFile *tmpdir;
+ char *template;
GFile *file;
-
- tmpdir = g_file_new_for_path (ev_tmp_dir ());
- file = g_file_get_child (tmpdir, attachment->priv->name);
- if (ev_attachment_save (attachment, file, error)) {
+ /* FIXMEchpe: convert to filename encoding first! */
+ template = g_strdup_printf ("%s.XXXXXX", ev_attachment_get_name (attachment));
+ file = ev_mkstemp_file (template, error);
+ g_free (template);
+
+ if (file != NULL && ev_attachment_save (attachment, file, error)) {
if (attachment->priv->tmp_file)
g_object_unref (attachment->priv->tmp_file);
attachment->priv->tmp_file = g_object_ref (file);
- retval = ev_attachment_launch_app (attachment, error);
+ retval = ev_attachment_launch_app (attachment, screen,
+ timestamp, error);
}
g_object_unref (file);
- g_object_unref (tmpdir);
}
return retval;