mirror of
https://github.com/kotatogram/kotatogram-desktop
synced 2025-08-28 13:17:43 +00:00
Add option to choose file dialog
This commit is contained in:
parent
a618181120
commit
ecb10dca8a
@ -2754,6 +2754,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
"ktg_settings_system" = "System";
|
||||
"ktg_settings_gtk_integration" = "GTK integration";
|
||||
|
||||
"ktg_settings_file_dialog_type" = "File dialog";
|
||||
"ktg_file_dialog_type_default" = "Default";
|
||||
|
||||
"ktg_settings_other" = "Other";
|
||||
"ktg_profile_copy_id" = "Copy ID";
|
||||
"ktg_profile_bot_id" = "Bot ID";
|
||||
|
@ -68,6 +68,8 @@
|
||||
"ktg_net_speed_boost_big": "Big",
|
||||
"ktg_settings_system": "System",
|
||||
"ktg_settings_gtk_integration": "GTK integration",
|
||||
"ktg_settings_file_dialog_type": "File dialog",
|
||||
"ktg_file_dialog_type_default": "Default",
|
||||
"ktg_settings_other": "Other",
|
||||
"ktg_profile_copy_id": "Copy ID",
|
||||
"ktg_profile_bot_id": "Bot ID",
|
||||
|
@ -67,6 +67,8 @@
|
||||
"ktg_net_speed_boost_big": "Высокое",
|
||||
"ktg_settings_system": "Система",
|
||||
"ktg_settings_gtk_integration": "GTK-интеграция",
|
||||
"ktg_settings_file_dialog_type": "Файловый диалог",
|
||||
"ktg_file_dialog_type_default": "По умолчанию",
|
||||
"ktg_settings_other": "Прочие",
|
||||
"ktg_profile_copy_id": "Копировать ID",
|
||||
"ktg_profile_bot_id": "ID бота",
|
||||
|
@ -370,6 +370,7 @@ QByteArray GenerateSettingsJson(bool areDefault = false) {
|
||||
settings.insert(qsl("userpic_corner_type"), cUserpicCornersType());
|
||||
settings.insert(qsl("always_show_top_userpic"), cShowTopBarUserpic());
|
||||
settings.insert(qsl("gtk_integration"), cGtkIntegration());
|
||||
settings.insert(qsl("file_dialog_type"), int(cFileDialogType()));
|
||||
settings.insert(qsl("disable_tray_counter"), cDisableTrayCounter());
|
||||
settings.insert(qsl("use_telegram_panel_icon"), cUseTelegramPanelIcon());
|
||||
settings.insert(qsl("custom_app_icon"), cCustomAppIcon());
|
||||
@ -616,6 +617,14 @@ bool Manager::readCustomFile() {
|
||||
cSetGtkIntegration(v);
|
||||
});
|
||||
|
||||
ReadIntOption(settings, "file_dialog_type", [&](auto v) {
|
||||
const auto typedValue = Platform::FileDialog::ImplementationType(v);
|
||||
if (typedValue >= Platform::FileDialog::ImplementationType::Default
|
||||
&& typedValue < Platform::FileDialog::ImplementationType::Count) {
|
||||
cSetFileDialogType(typedValue);
|
||||
}
|
||||
});
|
||||
|
||||
ReadBoolOption(settings, "disable_tray_counter", [&](auto v) {
|
||||
cSetDisableTrayCounter(v);
|
||||
});
|
||||
|
@ -148,6 +148,7 @@ rpl::producer<int> RecentStickersLimitChanges() {
|
||||
int gUserpicCornersType = 3;
|
||||
bool gShowTopBarUserpic = false;
|
||||
bool gGtkIntegration = false;
|
||||
Platform::FileDialog::ImplementationType gFileDialogType = Platform::FileDialog::ImplementationType::Default;
|
||||
bool gDisableTrayCounter = Platform::IsLinux();
|
||||
bool gUseTelegramPanelIcon = false;
|
||||
int gCustomAppIcon = 0;
|
||||
|
@ -7,6 +7,8 @@ https://github.com/kotatogram/kotatogram-desktop/blob/dev/LEGAL
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "platform/platform_file_utilities.h"
|
||||
|
||||
#define DeclareReadSetting(Type, Name) extern Type g##Name; \
|
||||
inline const Type &c##Name() { \
|
||||
return g##Name; \
|
||||
@ -102,6 +104,7 @@ void SetRecentStickersLimit(int limit);
|
||||
DeclareSetting(int, UserpicCornersType);
|
||||
DeclareSetting(bool, ShowTopBarUserpic);
|
||||
DeclareSetting(bool, GtkIntegration);
|
||||
DeclareSetting(Platform::FileDialog::ImplementationType, FileDialogType);
|
||||
DeclareSetting(bool, DisableTrayCounter);
|
||||
DeclareSetting(bool, UseTelegramPanelIcon);
|
||||
DeclareSetting(int, CustomAppIcon);
|
||||
|
@ -41,6 +41,15 @@ namespace Settings {
|
||||
|
||||
namespace {
|
||||
|
||||
QString FileDialogTypeLabel(int value) {
|
||||
const auto typedValue = Platform::FileDialog::ImplementationType(value);
|
||||
switch (typedValue) {
|
||||
case Platform::FileDialog::ImplementationType::Default:
|
||||
return tr::ktg_file_dialog_type_default(tr::now);
|
||||
}
|
||||
return Platform::FileDialog::ImplementationTypeLabel(typedValue);
|
||||
}
|
||||
|
||||
QString NetBoostLabel(int boost) {
|
||||
switch (boost) {
|
||||
case 0:
|
||||
@ -457,6 +466,23 @@ void SetupKotatoSystem(
|
||||
}
|
||||
#endif // !DESKTOP_APP_DISABLE_GTK_INTEGRATION
|
||||
|
||||
AddButtonWithLabel(
|
||||
container,
|
||||
tr::ktg_settings_file_dialog_type(),
|
||||
rpl::single(FileDialogTypeLabel(int(cFileDialogType()))),
|
||||
st::settingsButton
|
||||
)->addClickHandler([=] {
|
||||
Ui::show(Box<::Kotato::RadioBox>(
|
||||
tr::ktg_settings_file_dialog_type(tr::now),
|
||||
int(cFileDialogType()),
|
||||
int(Platform::FileDialog::ImplementationType::Count),
|
||||
FileDialogTypeLabel,
|
||||
[=](int value) {
|
||||
cSetFileDialogType(Platform::FileDialog::ImplementationType(value));
|
||||
::Kotato::JsonSettings::Write();
|
||||
}, false));
|
||||
});
|
||||
|
||||
if (Platform::IsMac()) {
|
||||
const auto useNativeDecorationsToggled = Ui::CreateChild<rpl::event_stream<bool>>(
|
||||
container.get());
|
||||
|
@ -159,6 +159,19 @@ bool GetQt(
|
||||
|
||||
}
|
||||
|
||||
QString ImplementationTypeLabel(ImplementationType value) {
|
||||
switch (value) {
|
||||
#ifndef DESKTOP_APP_DISABLE_DBUS_INTEGRATION
|
||||
case ImplementationType::XDP: return qsl("XDG Desktop Portal");
|
||||
#endif // !DESKTOP_APP_DISABLE_DBUS_INTEGRATION
|
||||
#ifndef DESKTOP_APP_DISABLE_GTK_INTEGRATION
|
||||
case ImplementationType::GTK: return qsl("GTK");
|
||||
#endif // !DESKTOP_APP_DISABLE_GTK_INTEGRATION
|
||||
case ImplementationType::Qt: return qsl("Qt");
|
||||
}
|
||||
Unexpected("Value in Platform::FileDialog::ImplementationTypeLabel.");
|
||||
}
|
||||
|
||||
bool Get(
|
||||
QPointer<QWidget> parent,
|
||||
QStringList &files,
|
||||
|
@ -27,6 +27,18 @@ inline void PostprocessDownloaded(const QString &filepath) {
|
||||
|
||||
namespace FileDialog {
|
||||
|
||||
enum class ImplementationType {
|
||||
Default,
|
||||
#ifndef DESKTOP_APP_DISABLE_DBUS_INTEGRATION
|
||||
XDP,
|
||||
#endif // !DESKTOP_APP_DISABLE_DBUS_INTEGRATION
|
||||
#ifndef DESKTOP_APP_DISABLE_GTK_INTEGRATION
|
||||
GTK,
|
||||
#endif // !DESKTOP_APP_DISABLE_GTK_INTEGRATION
|
||||
Qt,
|
||||
Count,
|
||||
};
|
||||
|
||||
inline void InitLastPath() {
|
||||
::FileDialog::internal::InitLastPathDefault();
|
||||
}
|
||||
|
@ -642,11 +642,12 @@ void GtkFileDialog::setNameFilters(const QStringList &filters) {
|
||||
} // namespace
|
||||
|
||||
bool Use(Type type) {
|
||||
if (!Supported()) {
|
||||
if (!Supported()
|
||||
|| (cFileDialogType() > ImplementationType::GTK)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return qEnvironmentVariableIsSet("TDESKTOP_USE_GTK_FILE_DIALOG")
|
||||
return (cFileDialogType() == ImplementationType::GTK)
|
||||
|| DesktopEnvironment::IsGtkBased();
|
||||
}
|
||||
|
||||
|
@ -642,17 +642,18 @@ rpl::producer<> XDPFileDialog::rejected() {
|
||||
} // namespace
|
||||
|
||||
bool Use(Type type) {
|
||||
static const auto ShouldUse = [&] {
|
||||
const auto envVar = qEnvironmentVariableIsSet("TDESKTOP_USE_PORTAL");
|
||||
const auto shouldUse = [&] {
|
||||
const auto setting = cFileDialogType() <= ImplementationType::XDP;
|
||||
const auto forceSetting = cFileDialogType() == ImplementationType::XDP;
|
||||
const auto confined = InFlatpak() || InSnap();
|
||||
const auto notGtkBased = !DesktopEnvironment::IsGtkBased();
|
||||
|
||||
return confined || notGtkBased || envVar;
|
||||
return setting && (confined || notGtkBased || forceSetting);
|
||||
}();
|
||||
|
||||
static const auto Version = FileChooserPortalVersion();
|
||||
|
||||
return ShouldUse
|
||||
return shouldUse
|
||||
&& Version.has_value()
|
||||
&& (type != Type::ReadFolder || *Version >= 3);
|
||||
}
|
||||
|
@ -27,6 +27,15 @@ inline void PostprocessDownloaded(const QString &filepath) {
|
||||
|
||||
namespace FileDialog {
|
||||
|
||||
enum class ImplementationType {
|
||||
Default,
|
||||
Count,
|
||||
};
|
||||
|
||||
inline QString ImplementationTypeLabel(ImplementationType value) {
|
||||
Unexpected("Value in Platform::FileDialog::TypeLabel.");
|
||||
}
|
||||
|
||||
inline void InitLastPath() {
|
||||
::FileDialog::internal::InitLastPathDefault();
|
||||
}
|
||||
|
@ -27,6 +27,10 @@ void PostprocessDownloaded(const QString &filepath);
|
||||
|
||||
namespace FileDialog {
|
||||
|
||||
enum class ImplementationType;
|
||||
|
||||
QString ImplementationTypeLabel(ImplementationType value);
|
||||
|
||||
void InitLastPath();
|
||||
|
||||
bool Get(
|
||||
|
@ -12,6 +12,15 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
namespace Platform {
|
||||
namespace File {
|
||||
|
||||
enum class ImplementationType {
|
||||
Default,
|
||||
Count,
|
||||
};
|
||||
|
||||
inline QString ImplementationTypeLabel(ImplementationType value) {
|
||||
Unexpected("Value in Platform::FileDialog::TypeLabel.");
|
||||
}
|
||||
|
||||
inline QString UrlToLocal(const QUrl &url) {
|
||||
return ::File::internal::UrlToLocalDefault(url);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user