forked from AuroraMiddleware/gtk
Merge branch 'portal-chooser-fail' into 'master'
portal file chooser: Handle errors Closes #2527 See merge request GNOME/gtk!1551
This commit is contained in:
commit
bf988f8d07
@ -682,6 +682,13 @@ gtk_file_chooser_native_get_files (GtkFileChooser *chooser)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
portal_error_handler (GtkFileChooserNative *self)
|
||||||
|
{
|
||||||
|
self->mode = MODE_FALLBACK;
|
||||||
|
show_dialog (self);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gtk_file_chooser_native_show (GtkNativeDialog *native)
|
gtk_file_chooser_native_show (GtkNativeDialog *native)
|
||||||
{
|
{
|
||||||
@ -700,7 +707,7 @@ gtk_file_chooser_native_show (GtkNativeDialog *native)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (self->mode == MODE_FALLBACK &&
|
if (self->mode == MODE_FALLBACK &&
|
||||||
gtk_file_chooser_native_portal_show (self))
|
gtk_file_chooser_native_portal_show (self, portal_error_handler))
|
||||||
self->mode = MODE_PORTAL;
|
self->mode = MODE_PORTAL;
|
||||||
|
|
||||||
if (self->mode == MODE_FALLBACK)
|
if (self->mode == MODE_FALLBACK)
|
||||||
|
@ -43,6 +43,7 @@
|
|||||||
#include "gtkfilefilterprivate.h"
|
#include "gtkfilefilterprivate.h"
|
||||||
#include "gtkwindowprivate.h"
|
#include "gtkwindowprivate.h"
|
||||||
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
GtkFileChooserNative *self;
|
GtkFileChooserNative *self;
|
||||||
|
|
||||||
@ -58,6 +59,7 @@ typedef struct {
|
|||||||
const char *method_name;
|
const char *method_name;
|
||||||
|
|
||||||
GtkWindow *exported_window;
|
GtkWindow *exported_window;
|
||||||
|
PortalErrorHandler error_handler;
|
||||||
} FilechooserPortalData;
|
} FilechooserPortalData;
|
||||||
|
|
||||||
|
|
||||||
@ -188,12 +190,13 @@ open_file_msg_cb (GObject *source_object,
|
|||||||
|
|
||||||
if (reply == NULL)
|
if (reply == NULL)
|
||||||
{
|
{
|
||||||
if (!data->hidden)
|
if (!data->hidden && data->error_handler)
|
||||||
_gtk_native_dialog_emit_response (GTK_NATIVE_DIALOG (self), GTK_RESPONSE_DELETE_EVENT);
|
{
|
||||||
g_warning ("Can't open portal file chooser: %s", error->message);
|
data->error_handler (self);
|
||||||
|
filechooser_portal_data_free (data);
|
||||||
|
self->mode_data = NULL;
|
||||||
|
}
|
||||||
g_error_free (error);
|
g_error_free (error);
|
||||||
filechooser_portal_data_free (data);
|
|
||||||
self->mode_data = NULL;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -398,7 +401,8 @@ window_handle_exported (GtkWindow *window,
|
|||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
gtk_file_chooser_native_portal_show (GtkFileChooserNative *self)
|
gtk_file_chooser_native_portal_show (GtkFileChooserNative *self,
|
||||||
|
PortalErrorHandler error_handler)
|
||||||
{
|
{
|
||||||
FilechooserPortalData *data;
|
FilechooserPortalData *data;
|
||||||
GtkWindow *transient_for;
|
GtkWindow *transient_for;
|
||||||
@ -428,6 +432,7 @@ gtk_file_chooser_native_portal_show (GtkFileChooserNative *self)
|
|||||||
data = g_new0 (FilechooserPortalData, 1);
|
data = g_new0 (FilechooserPortalData, 1);
|
||||||
data->self = g_object_ref (self);
|
data->self = g_object_ref (self);
|
||||||
data->connection = connection;
|
data->connection = connection;
|
||||||
|
data->error_handler = error_handler;
|
||||||
|
|
||||||
data->method_name = method_name;
|
data->method_name = method_name;
|
||||||
|
|
||||||
@ -470,10 +475,9 @@ gtk_file_chooser_native_portal_hide (GtkFileChooserNative *self)
|
|||||||
data->hidden = TRUE;
|
data->hidden = TRUE;
|
||||||
|
|
||||||
if (data->portal_handle)
|
if (data->portal_handle)
|
||||||
{
|
send_close (data);
|
||||||
send_close (data);
|
|
||||||
filechooser_portal_data_free (data);
|
filechooser_portal_data_free (data);
|
||||||
}
|
|
||||||
|
|
||||||
self->mode_data = NULL;
|
self->mode_data = NULL;
|
||||||
}
|
}
|
||||||
|
@ -61,7 +61,9 @@ void gtk_file_chooser_native_win32_hide (GtkFileChooserNative *self);
|
|||||||
gboolean gtk_file_chooser_native_quartz_show (GtkFileChooserNative *self);
|
gboolean gtk_file_chooser_native_quartz_show (GtkFileChooserNative *self);
|
||||||
void gtk_file_chooser_native_quartz_hide (GtkFileChooserNative *self);
|
void gtk_file_chooser_native_quartz_hide (GtkFileChooserNative *self);
|
||||||
|
|
||||||
gboolean gtk_file_chooser_native_portal_show (GtkFileChooserNative *self);
|
typedef void (* PortalErrorHandler) (GtkFileChooserNative *self);
|
||||||
|
gboolean gtk_file_chooser_native_portal_show (GtkFileChooserNative *self,
|
||||||
|
PortalErrorHandler error_handler);
|
||||||
void gtk_file_chooser_native_portal_hide (GtkFileChooserNative *self);
|
void gtk_file_chooser_native_portal_hide (GtkFileChooserNative *self);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
Loading…
Reference in New Issue
Block a user