GTK# 的FileChooserDialog可以用作统一的文件/URI 对话框吗?我希望它接受 http/https/ftp URI 而无需“重写”它们(在本地目录之前)。
即使我将LocalOnly=false
http://.... uri 设置并粘贴到文件选择器内的文本框中,我也无法获得原始条目。本地目录总是附加在文本前面。
GTK# 的FileChooserDialog可以用作统一的文件/URI 对话框吗?我希望它接受 http/https/ftp URI 而无需“重写”它们(在本地目录之前)。
即使我将LocalOnly=false
http://.... uri 设置并粘贴到文件选择器内的文本框中,我也无法获得原始条目。本地目录总是附加在文本前面。
我做了一些研究,我认为这是不可能的。至少不使用我测试过的直接原生 C GTK+ API。
在我的测试中,我总是将本地目录的路径添加到我在对话框中输入的 http:// URI 前面,或者我返回(null)。我确实调用了该get_uri()
方法,而不仅仅是get_filename()
.
作为参考,我还快速浏览了GIMP应用程序的文件菜单。您可能知道,GIMP 在 GTK+ 中提供了 G,因此有时可以将其用作有关如何使用该工具包的想法的参考。GIMP 不尝试支持在文件选择器对话框中输入的 URI,而是有一个专用的打开位置命令,该命令打开一个只有 GtkEntry 的简单对话框。
我认为您需要将local-only设置为 FALSE,然后使用 GIO get_file ()/get_files ()调用返回可通过 File API 访问的 GFile* GIO
,因此可通过gvfs
.
毕竟我找到了一个解决方案/破解(在 C# 中):
private string _extractUri(Widget wi) {
if (wi is Entry)
return ((wi as Entry).Text);
else if (wi is Container) {
foreach (Widget w in (wi as Container).Children) {
string x = _extractUri(w);
if (x!=null)
return x;
}
}
return null;
}
我不确定这是否总是安全的,但它适用于标准 FileChooserDialog。它将从输入字段返回原始字符串 - 即使标准 Uri / 文件结果被破坏。