我想知道xfce是否有一个类似于gnome的gnome_url_show()的函数。
如果不是这种情况,我想知道打开网址的另一种方便方法是什么?例如,如果您将一个信号处理程序添加到按钮中,该按钮在单击时会打开一个网站。
gtk有这样的功能吗?我知道它至少内置了一些东西,因为当你创建一个带有url的标签时,可以点击它来打开url。我查看了各种文档,但还没有找到解决方案。
gtk_show_uri()不能在xfce上运行,因为它需要gvfs并且我没有使用gnome。
答案 0 :(得分:0)
感谢xfce4-weather-plugin源码,我发现这是一个实用的解决方案:
gchar *str = g_strdup_printf("exo-open --launch WebBrowser %s", url);
g_spawn_command_line_async(str, NULL);
g_free(str);
考虑到插件是核心xfce应用程序的一部分,我将假设它是适当的方式来实现它。我也发现了exo_execute_preferred_application()但是我不想包含另一个库。
此主题的变体可在此处找到:http://git.xfce.org/xfce/libxfce4ui/tree/libxfce4ui/xfce-dialogs.c#n66 这可能是更可取的,因为如果未安装exo,它将回退到gtk_show_uri()。虽然有可能gtk_show_uri()可能无法工作,因为xfce系统上缺少gvfs(用户毕竟使用的是xfce,而不是gnome)。 xfce面板使用此函数加载网址。
static void
xfce_dialog_show_help_uri (GdkScreen *screen,
GtkWindow *parent,
GString *uri)
{
GError *error = NULL;
gchar *path;
gchar *cmd;
gboolean result;
g_return_if_fail (GDK_IS_SCREEN (screen));
g_return_if_fail (parent == NULL || GTK_IS_WINDOW (parent));
path = g_find_program_in_path ("exo-open");
if (G_LIKELY (path != NULL))
{
cmd = g_strdup_printf ("%s --launch WebBrowser '%s'", path, uri->str);
result = xfce_spawn_command_line_on_screen (screen, cmd, FALSE, TRUE, &error);
g_free (path);
g_free (cmd);
}
else
{
/* not very likely to happen, but it is possible exo is not installed */
result = gtk_show_uri (screen, uri->str, gtk_get_current_event_time (), &error);
}
if (!result)
{
xfce_dialog_show_error (parent, error,
_("Failed to open web browser for online documentation"));
g_error_free (error);
}
}