1

我想知道 xfce 是否具有类似于 gnome 的 gnome_url_show() 的功能。

如果不是这种情况,我想知道打开网址的另一种便捷方式是什么?例如,如果您向一个按钮添加了一个信号处理程序,单击该按钮会打开一个网站。

gtk有这样的功能吗?我知道它至少有一些内置的东西,因为当你创建一个带有 url 的标签时,可以点击它来打开 url。我浏览了各种文档,但还没有找到解决方案。

gtk_show_uri() 不能在 xfce 上工作,因为它需要 gvfs 而我没有使用 gnome。

4

1 回答 1

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 这可能更可取,因为它会退回到 gtk_show_uri() 以防万一exo 没有安装。尽管 gtk_show_uri() 可能由于 xfce 系统上缺少 gvfs 而无法工作(毕竟用户使用的是 xfce,而不是 gnome)。xfce 面板使用这个函数来加载一个 url。

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);
    }
}
于 2013-06-08T01:42:39.677 回答