Альтернатива gnome_url_show() в xfce

Я хотел бы знать, есть ли в xfce функция, которая работает аналогично gnome_url_show().

Если это не так, я хотел бы знать, что было бы еще одним удобным способом открытия URL-адреса? Например, если вы добавили обработчик сигнала к кнопке, которая при нажатии открывает веб-сайт.

Есть ли у gtk такая функция? Я знаю, что у него есть что-то встроенное, по крайней мере, потому что, когда вы создаете ярлык с URL-адресом, его можно щелкнуть, чтобы открыть URL-адрес. Я просмотрел различную документацию, но пока не нашел решения.

gtk_show_uri() не будет работать на xfce, потому что для этого требуется gvfs, а я не использую gnome.


person aseq    schedule 07.06.2013    source источник
comment
Не ответ, а: вы можете установить gvfs без установки gnome. По крайней мере, в Debian для gvfs вам нужен пакет libgnomevfs2-0, но не пакеты Gnome. Установка этих пакетов может быть альтернативой.   -  person sleske    schedule 01.08.2015


Ответы (1)


Благодаря источнику 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() может не работать из-за отсутствия gvfs в системах xfce (в конце концов, пользователь использует 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);
    }
}
person aseq    schedule 08.06.2013