GObject parent_instance;
GFile *file;
+ unsigned int always_ask : 1;
};
enum {
PROP_FILE = 1,
+ PROP_ALWAYS_ASK = 2,
NUM_PROPERTIES
};
g_value_set_object (value, self->file);
break;
+ case PROP_ALWAYS_ASK:
+ g_value_set_boolean (value, self->always_ask);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
gtk_file_launcher_set_file (self, g_value_get_object (value));
break;
+ case PROP_ALWAYS_ASK:
+ gtk_file_launcher_set_always_ask (self, g_value_get_boolean (value));
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
G_TYPE_FILE,
G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS|G_PARAM_EXPLICIT_NOTIFY);
+ /**
+ * GtkFileLauncher:always-ask: (attributes org.gtk.Property.get=gtk_file_launcher_get_always_ask org.gtk.Property.set=gtk_file_launcher_set_always_ask)
+ *
+ * Whether to ask the user to choose an app for opening the file. If `FALSE`,
+ * the file might be opened with a default app or the previous choice.
+ *
+ * Since: 4.12
+ */
+ properties[PROP_ALWAYS_ASK] =
+ g_param_spec_boolean ("always-ask", NULL, NULL,
+ FALSE,
+ G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS|G_PARAM_EXPLICIT_NOTIFY);
+
g_object_class_install_properties (object_class, NUM_PROPERTIES, properties);
}
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_FILE]);
}
+/**
+ * gtk_file_launcher_get_always_ask:
+ * @self: a `GtkFileLauncher`
+ *
+ * Returns whether to ask the user to choose an app for opening the file.
+ *
+ * Returns: `TRUE` if always asking for app
+ *
+ * Since: 4.12
+ */
+gboolean
+gtk_file_launcher_get_always_ask (GtkFileLauncher *self)
+{
+ g_return_val_if_fail (GTK_IS_FILE_LAUNCHER (self), FALSE);
+
+ return self->always_ask;
+}
+
+/**
+ * gtk_file_launcher_set_always_ask:
+ * @self: a `GtkFileLauncher`
+ * @always_ask: a `gboolean`
+ *
+ * Sets whether to awlays ask the user to choose an app for opening the file.
+ * If `FALSE`, the file might be opened with a default app or the previous choice.
+ *
+ * Since: 4.12
+ */
+void
+gtk_file_launcher_set_always_ask (GtkFileLauncher *self,
+ gboolean always_ask)
+{
+ g_return_if_fail (GTK_IS_FILE_LAUNCHER (self));
+
+ if (self->always_ask == always_ask)
+ return;
+
+ self->always_ask = always_ask;
+
+ g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_ALWAYS_ASK]);
+}
+
/* }}} */
/* {{{ Async implementation */
#ifndef G_OS_WIN32
if (gtk_openuri_portal_is_available ())
{
- gtk_openuri_portal_open_async (self->file, FALSE, parent, cancellable, open_done, task);
+ gtk_openuri_portal_open_async (self->file, FALSE, self->always_ask, parent, cancellable, open_done, task);
}
else
#endif
#ifndef G_OS_WIN32
if (gtk_openuri_portal_is_available ())
{
- gtk_openuri_portal_open_async (self->file, TRUE, parent, cancellable, open_done, task);
+ gtk_openuri_portal_open_async (self->file, TRUE, FALSE, parent, cancellable, open_done, task);
}
else
#endif
GFile *file;
char *uri;
gboolean open_folder;
+ gboolean always_ask;
GDBusConnection *connection;
GCancellable *cancellable;
GTask *task;
{
GFile *file = data->file;
gboolean open_folder = data->open_folder;
+ gboolean always_ask = data->always_ask;
GTask *task;
GVariant *opts = NULL;
int i;
if (activation_token)
g_variant_builder_add (&opt_builder, "{sv}", "activation_token", g_variant_new_string (activation_token));
+ if (always_ask && !open_folder)
+ g_variant_builder_add (&opt_builder, "{sv}", "ask", g_variant_new_boolean (always_ask));
+
opts = g_variant_builder_end (&opt_builder);
if (file && g_file_is_native (file))
void
gtk_openuri_portal_open_async (GFile *file,
gboolean open_folder,
+ gboolean always_ask,
GtkWindow *parent,
GCancellable *cancellable,
GAsyncReadyCallback callback,
data->parent = parent ? g_object_ref (parent) : NULL;
data->file = g_object_ref (file);
data->open_folder = open_folder;
+ data->always_ask = always_ask;
data->cancellable = cancellable ? g_object_ref (cancellable) : NULL;
data->task = g_task_new (parent, cancellable, callback, user_data);
g_task_set_check_cancellable (data->task, FALSE);