+2008-09-05 Carlos Garcia Campos <carlosgc@gnome.org>
+
+ * libdocument/ev-attachment.[ch]: (ev_attachment_launch_app),
+ (ev_attachment_open):
+ * shell/ev-sidebar-attachments.c:
+ (ev_sidebar_attachments_button_press):
+ * shell/ev-window.c: (ev_attachment_popup_cmd_open_attachment):
+
+ Use GdkAppLaunchContext when available to open attachments.
+
2008-09-04 Carlos Garcia Campos <carlosgc@gnome.org>
* shell/ev-media-player-keys.c: (ev_media_player_keys_grab_keys):
#include <config.h>
#include <glib/gi18n.h>
#include <glib/gstdio.h>
+#include <gtk/gtk.h>
#include "ev-file-helpers.h"
#include "ev-attachment.h"
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);
+
+#if GTK_CHECK_VERSION (2, 14, 0)
+ 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);
+#endif
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;
if (attachment->priv->tmp_file &&
g_file_query_exists (attachment->priv->tmp_file, NULL)) {
- retval = ev_attachment_launch_app (attachment, error);
+ retval = ev_attachment_launch_app (attachment, screen,
+ timestamp, error);
} else {
GFile *tmpdir;
GFile *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);
static void
ev_attachment_popup_cmd_open_attachment (GtkAction *action, EvWindow *window)
{
- GList *l;
+ GList *l;
+ GdkScreen *screen;
if (!window->priv->attach_list)
return;
+ screen = gtk_window_get_screen (GTK_WINDOW (window));
+
for (l = window->priv->attach_list; l && l->data; l = g_list_next (l)) {
EvAttachment *attachment;
GError *error = NULL;
attachment = (EvAttachment *) l->data;
- ev_attachment_open (attachment, &error);
+ ev_attachment_open (attachment, screen, GDK_CURRENT_TIME, &error);
if (error) {
ev_window_error_message (GTK_WINDOW (window),