[recipes] Show an error if portals are missing



commit d1d9560d8986ea23da9c8cfc091c5c959461048a
Author: Matthias Clasen <mclasen redhat com>
Date:   Wed Jan 18 07:14:20 2017 -0500

    Show an error if portals are missing

 src/gr-image-viewer.c |   30 ++++++++++++++++++++++++++++++
 1 files changed, 30 insertions(+), 0 deletions(-)
---
diff --git a/src/gr-image-viewer.c b/src/gr-image-viewer.c
index 059d76d..d5c5c70 100644
--- a/src/gr-image-viewer.c
+++ b/src/gr-image-viewer.c
@@ -47,6 +47,7 @@ struct _GrImageViewer
         guint hide_timeout;
 
         GtkGesture *gesture;
+        GDBusProxy *portal;
 };
 
 
@@ -82,6 +83,7 @@ gr_image_viewer_finalize (GObject *object)
         g_clear_pointer (&viewer->images, g_array_unref);
         remove_hide_timeout (viewer);
         g_clear_object (&viewer->gesture);
+        g_clear_object (&viewer->portal);
 
         G_OBJECT_CLASS (gr_image_viewer_parent_class)->finalize (object);
 }
@@ -320,6 +322,8 @@ key_press_event (GtkWidget     *widget,
 static void
 gr_image_viewer_init (GrImageViewer *self)
 {
+        g_autoptr(GDBusConnection) bus = NULL;
+
         gtk_widget_init_template (GTK_WIDGET (self));
         gtk_widget_add_events (GTK_WIDGET (self->event_box), GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | 
GDK_POINTER_MOTION_MASK);
         gtk_widget_add_events (GTK_WIDGET (self->event_box), GDK_BUTTON_PRESS_MASK);
@@ -333,6 +337,16 @@ gr_image_viewer_init (GrImageViewer *self)
         gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (self->gesture), GTK_PHASE_BUBBLE);
         g_signal_connect_swapped (self->gesture, "pressed", G_CALLBACK (button_press), self);
         self->images = gr_rotated_image_array_new ();
+
+        bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);
+        self->portal = g_dbus_proxy_new_sync (bus,
+                                              0,
+                                              NULL,
+                                              "org.freedesktop.portal.Desktop",
+                                              "/org/freedesktop/portal/desktop",
+                                              "org.freedesktop.portal.FileChooser",
+                                              NULL,
+                                              NULL);
 }
 
 static void
@@ -475,8 +489,24 @@ open_filechooser (GrImageViewer *viewer)
         GtkWidget *window;
         GtkFileChooserNative *chooser;
         g_autoptr(GtkFileFilter) filter = NULL;
+        g_autofree char *owner = NULL;
 
         window = gtk_widget_get_ancestor (GTK_WIDGET (viewer), GTK_TYPE_APPLICATION_WINDOW);
+
+        owner = g_dbus_proxy_get_name_owner (viewer->portal);
+        if (in_flatpak_sandbox () && owner == NULL) {
+                GtkWidget *dialog;
+
+                dialog = gtk_message_dialog_new (GTK_WINDOW (window),
+                                                 GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
+                                                 GTK_MESSAGE_ERROR,
+                                                 GTK_BUTTONS_OK,
+                                                 _("The system is missing the desktop portals needed to open 
files from inside a flatpak sandbox."));
+                g_signal_connect (dialog, "response", G_CALLBACK (gtk_widget_destroy), NULL);
+                gtk_widget_show (dialog);
+                return;
+        }
+
         chooser = gtk_file_chooser_native_new (_("Select an Image"),
                                                GTK_WINDOW (window),
                                                GTK_FILE_CHOOSER_ACTION_OPEN,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]