refactor: use GtkFileChooserNative for file dialogs
GtkFileChooserNative uses the platform's APIs, and thus the Portal API. This is important since we want to integrate this well with Flatpak. See: https://docs.flatpak.org/en/latest/portals-gtk.htmlpull/19/head
parent
0de1d86494
commit
cfe8c4dbe4
|
@ -8,7 +8,7 @@ use crate::components::editor::EchidnaCoreEditor;
|
||||||
use gio::Cancellable;
|
use gio::Cancellable;
|
||||||
use glib::{clone, Priority};
|
use glib::{clone, Priority};
|
||||||
use gtk::{
|
use gtk::{
|
||||||
prelude::*, subclass::prelude::*, FileChooserAction, FileChooserDialog, Label, ResponseType,
|
prelude::*, subclass::prelude::*, FileChooserAction, FileChooserNative, Label, ResponseType,
|
||||||
};
|
};
|
||||||
use sourceview::{prelude::*, Buffer, File, FileSaver};
|
use sourceview::{prelude::*, Buffer, File, FileSaver};
|
||||||
|
|
||||||
|
@ -36,14 +36,12 @@ impl FileImplementedEditor for super::EchidnaWindow {
|
||||||
Perhaps some of the last points should not be implemented in this function but rather in another function that keeps track of every files.
|
Perhaps some of the last points should not be implemented in this function but rather in another function that keeps track of every files.
|
||||||
*/
|
*/
|
||||||
fn action_open_file(&self) {
|
fn action_open_file(&self) {
|
||||||
let dialog: FileChooserDialog = FileChooserDialog::new(
|
let dialog = FileChooserNative::new(
|
||||||
Some("Open a file"),
|
Some("Open a file"),
|
||||||
Some(self),
|
Some(self),
|
||||||
FileChooserAction::Open,
|
FileChooserAction::Open,
|
||||||
&[
|
Some("Open"),
|
||||||
("Cancel", ResponseType::Cancel),
|
Some("Cancel"),
|
||||||
("Open", ResponseType::Accept),
|
|
||||||
],
|
|
||||||
);
|
);
|
||||||
|
|
||||||
dialog.set_visible(true);
|
dialog.set_visible(true);
|
||||||
|
@ -81,14 +79,12 @@ impl FileImplementedEditor for super::EchidnaWindow {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn action_save_file_as(&self) {
|
fn action_save_file_as(&self) {
|
||||||
let dialog = FileChooserDialog::new(
|
let dialog = FileChooserNative::new(
|
||||||
Some("Save File As"),
|
Some("Save File As"),
|
||||||
Some(self),
|
Some(self),
|
||||||
FileChooserAction::Save,
|
FileChooserAction::Save,
|
||||||
&[
|
Some("Open"),
|
||||||
("Cancel", ResponseType::Cancel),
|
Some("Cancel"),
|
||||||
("Save", ResponseType::Accept),
|
|
||||||
],
|
|
||||||
);
|
);
|
||||||
|
|
||||||
dialog.set_current_name("untitled");
|
dialog.set_current_name("untitled");
|
||||||
|
|
|
@ -9,7 +9,7 @@ use glib::clone;
|
||||||
use glib::subclass::types::ObjectSubclassExt;
|
use glib::subclass::types::ObjectSubclassExt;
|
||||||
use glib::types::Type;
|
use glib::types::Type;
|
||||||
use gtk::prelude::*;
|
use gtk::prelude::*;
|
||||||
use gtk::{ApplicationWindow, FileChooserAction, FileChooserDialog, ResponseType, TreeStore};
|
use gtk::{ApplicationWindow, FileChooserAction, FileChooserNative, ResponseType, TreeStore};
|
||||||
use relative_path::RelativePath;
|
use relative_path::RelativePath;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
@ -46,14 +46,12 @@ impl WorkspaceImplementedEditor for EchidnaEditor {
|
||||||
_action: &SimpleAction,
|
_action: &SimpleAction,
|
||||||
_variant: Option<&glib::Variant>,
|
_variant: Option<&glib::Variant>,
|
||||||
) {
|
) {
|
||||||
let dialog: FileChooserDialog = FileChooserDialog::new(
|
let dialog = FileChooserNative::new(
|
||||||
Some("Open a file"),
|
Some("Open a file"),
|
||||||
Some(&window),
|
Some(&window),
|
||||||
FileChooserAction::Open,
|
FileChooserAction::Open,
|
||||||
&[
|
Some("Open"),
|
||||||
("Cancel", ResponseType::Cancel),
|
Some("Cancel"),
|
||||||
("Open", ResponseType::Accept),
|
|
||||||
],
|
|
||||||
);
|
);
|
||||||
dialog.set_visible(true);
|
dialog.set_visible(true);
|
||||||
dialog.connect_response(clone!(@weak window, @weak app =>
|
dialog.connect_response(clone!(@weak window, @weak app =>
|
||||||
|
@ -78,7 +76,7 @@ impl WorkspaceImplementedEditor for EchidnaEditor {
|
||||||
*
|
*
|
||||||
* Basically, this is just the same as Open Folder, but it's many folders.
|
* Basically, this is just the same as Open Folder, but it's many folders.
|
||||||
*
|
*
|
||||||
* - Open a FileChooserDialog, set to only view .code-workspace files.
|
* - Open a FileChooserNative, set to only view .code-workspace files.
|
||||||
* - If the user pressed cancel, destroy the dialog. If the user opened a .code-workspace file:
|
* - If the user pressed cancel, destroy the dialog. If the user opened a .code-workspace file:
|
||||||
* - Get the workspace file, load and parse its content, .code-workspace files are in JSON with comments. But JSON only should be fine, for now.
|
* - Get the workspace file, load and parse its content, .code-workspace files are in JSON with comments. But JSON only should be fine, for now.
|
||||||
* - Iterate over folders listed in the workspace file.
|
* - Iterate over folders listed in the workspace file.
|
||||||
|
|
Loading…
Reference in New Issue