[recipes] Show an error if portals are missing
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [recipes] Show an error if portals are missing
- Date: Wed, 18 Jan 2017 12:20:28 +0000 (UTC)
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]