diff options
| author | Rémi Verschelde <rverschelde@gmail.com> | 2023-08-17 11:23:00 +0200 |
|---|---|---|
| committer | Rémi Verschelde <rverschelde@gmail.com> | 2023-08-17 11:23:00 +0200 |
| commit | c72b851dfb46606d3d04d00c79abd555309cae33 (patch) | |
| tree | 7b0615635f2d25c86189b5a11c1669acf95db5da /platform/linuxbsd/x11 | |
| parent | 9a48b14a2d2422d4f374ce3bf74575da76f3ace4 (diff) | |
| parent | 6cc314e0fa3f0070c1bbeef7f8dbabfff976e190 (diff) | |
| download | redot-engine-c72b851dfb46606d3d04d00c79abd555309cae33.tar.gz | |
Merge pull request #80104 from bruvzg/freedesktop_native_file_dialog
[Linux/Freedesktop] Implement native file selection dialog support.
Diffstat (limited to 'platform/linuxbsd/x11')
| -rw-r--r-- | platform/linuxbsd/x11/display_server_x11.cpp | 14 | ||||
| -rw-r--r-- | platform/linuxbsd/x11/display_server_x11.h | 2 |
2 files changed, 16 insertions, 0 deletions
diff --git a/platform/linuxbsd/x11/display_server_x11.cpp b/platform/linuxbsd/x11/display_server_x11.cpp index 9a9ed12aef..f38a9dd278 100644 --- a/platform/linuxbsd/x11/display_server_x11.cpp +++ b/platform/linuxbsd/x11/display_server_x11.cpp @@ -122,6 +122,9 @@ bool DisplayServerX11::has_feature(Feature p_feature) const { case FEATURE_WINDOW_TRANSPARENCY: //case FEATURE_HIDPI: case FEATURE_ICON: +#ifdef DBUS_ENABLED + case FEATURE_NATIVE_DIALOG: +#endif //case FEATURE_NATIVE_ICON: case FEATURE_SWAP_BUFFERS: #ifdef DBUS_ENABLED @@ -360,6 +363,17 @@ bool DisplayServerX11::is_dark_mode() const { } } +Error DisplayServerX11::file_dialog_show(const String &p_title, const String &p_current_directory, const String &p_filename, bool p_show_hidden, FileDialogMode p_mode, const Vector<String> &p_filters, const Callable &p_callback) { + WindowID window_id = _get_focused_window_or_popup(); + + if (!windows.has(window_id)) { + window_id = MAIN_WINDOW_ID; + } + + String xid = vformat("x11:%x", (uint64_t)windows[window_id].x11_window); + return portal_desktop->file_dialog_show(xid, p_title, p_current_directory, p_filename, p_mode, p_filters, p_callback); +} + #endif void DisplayServerX11::mouse_set_mode(MouseMode p_mode) { diff --git a/platform/linuxbsd/x11/display_server_x11.h b/platform/linuxbsd/x11/display_server_x11.h index cce44a92de..71beddce76 100644 --- a/platform/linuxbsd/x11/display_server_x11.h +++ b/platform/linuxbsd/x11/display_server_x11.h @@ -393,6 +393,8 @@ public: #if defined(DBUS_ENABLED) virtual bool is_dark_mode_supported() const override; virtual bool is_dark_mode() const override; + + virtual Error file_dialog_show(const String &p_title, const String &p_current_directory, const String &p_filename, bool p_show_hidden, FileDialogMode p_mode, const Vector<String> &p_filters, const Callable &p_callback) override; #endif virtual void mouse_set_mode(MouseMode p_mode) override; |
