Replace deprecated gtk_show_uri() method for help window (!82)
The gtk_show_uri() [1] method was deprecated as of gtk3 version 3.22 and has been replaced with gtk_show_uri_on_window [2]. [1] https://developer.gnome.org/gtk3/stable/gtk3-Filesystem-utilities.html#gtk-show-uri [2] https://developer.gnome.org/gtk3/stable/gtk-migrating-2-to-3.html#id-1.6.3.3.7 Note that AppInfo::launch_uris() has been removed because with glib/glibmm >= 2.58 AppInfo::launch_uris() always reports success even when yelp is not launched and in such cases prevents the dialog reporting the error from being displayed. Closes !82 - Replace deprecated gtk_show_uri() method for help window
This commit is contained in:
parent
f5b17f40fe
commit
26f4dc504a
12
configure.ac
12
configure.ac
|
@ -266,6 +266,18 @@ PKG_CHECK_EXISTS(
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
dnl Check for gtk+-3.0 >= 3.22 to determine availability of gtk_show_uri_on_window() function.
|
||||||
|
AC_MSG_CHECKING([for gtk_show_uri_on_window() function])
|
||||||
|
PKG_CHECK_EXISTS(
|
||||||
|
[gtk+-3.0 >= 3.22.0],
|
||||||
|
[AC_DEFINE([HAVE_GTK_SHOW_URI_ON_WINDOW], 1,
|
||||||
|
[Define to 1 if gtk provides gtk_show_uri_on_window function.])
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
],
|
||||||
|
[AC_MSG_RESULT([no])]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
dnl Definitions for building of and with gtest. Gets flags for pthread via earlier
|
dnl Definitions for building of and with gtest. Gets flags for pthread via earlier
|
||||||
dnl gthread package check.
|
dnl gthread package check.
|
||||||
GTEST_CPPFLAGS="-DGTEST_HAS_PTHREAD=1"
|
GTEST_CPPFLAGS="-DGTEST_HAS_PTHREAD=1"
|
||||||
|
|
|
@ -1778,52 +1778,55 @@ void Win_GParted::show_resize_readonly( const Glib::ustring & path )
|
||||||
void Win_GParted::show_help(const Glib::ustring & filename /* E.g., "gparted" */,
|
void Win_GParted::show_help(const Glib::ustring & filename /* E.g., "gparted" */,
|
||||||
const Glib::ustring & link_id /* For context sensitive help */)
|
const Glib::ustring & link_id /* For context sensitive help */)
|
||||||
{
|
{
|
||||||
GError *error1 = NULL;
|
// Build uri string
|
||||||
GdkScreen *gscreen = NULL ;
|
|
||||||
|
|
||||||
Glib::ustring uri = "help:" + filename;
|
Glib::ustring uri = "help:" + filename;
|
||||||
if (link_id.size() > 0)
|
if (link_id.size() > 0)
|
||||||
uri = uri + "/" + link_id;
|
uri = uri + "/" + link_id;
|
||||||
|
|
||||||
gscreen = get_window()->get_screen()->gobj();
|
// Check if yelp is available to provide a useful error message.
|
||||||
gtk_show_uri(gscreen, uri.c_str(), gtk_get_current_event_time(), &error1);
|
// Missing yelp is the most common cause of failure to display help.
|
||||||
if (error1 != NULL)
|
//
|
||||||
|
// This early check is performed because failure of gtk_show_uri*()
|
||||||
|
// method only provides a generic "Operation not permitted" message.
|
||||||
|
if (Glib::find_program_in_path("yelp").empty())
|
||||||
{
|
{
|
||||||
//Try opening yelp application directly
|
Gtk::MessageDialog errorDialog(*this,
|
||||||
|
_("Unable to open GParted Manual help file"),
|
||||||
Glib::RefPtr<Gio::AppInfo> yelp
|
false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true);
|
||||||
= Gio::AppInfo::create_from_commandline("yelp", "", Gio::APP_INFO_CREATE_SUPPORTS_URIS);
|
Glib::ustring sec_text(_("Command yelp not found."));
|
||||||
|
sec_text.append("\n");
|
||||||
Glib::RefPtr<Gdk::AppLaunchContext> context
|
sec_text.append("\n");
|
||||||
= get_window()->get_display()->get_app_launch_context();
|
sec_text.append(_("Install yelp and try again."));
|
||||||
|
errorDialog.set_secondary_text(sec_text, true);
|
||||||
context->set_timestamp(gtk_get_current_event_time());
|
errorDialog.run();
|
||||||
|
return;
|
||||||
bool launched = false;
|
|
||||||
Glib::ustring error2_msg;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
launched = yelp->launch_uris(std::vector<std::string>(1, uri), context);
|
|
||||||
}
|
|
||||||
catch (Glib::Error& e)
|
|
||||||
{
|
|
||||||
error2_msg = e.what();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!launched)
|
|
||||||
{
|
|
||||||
Gtk::MessageDialog dialog(*this,
|
|
||||||
_( "Unable to open GParted Manual help file" ),
|
|
||||||
false,
|
|
||||||
Gtk::MESSAGE_ERROR,
|
|
||||||
Gtk::BUTTONS_OK,
|
|
||||||
true);
|
|
||||||
dialog.set_secondary_text(error2_msg);
|
|
||||||
dialog.run();
|
|
||||||
}
|
|
||||||
|
|
||||||
g_clear_error(&error1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GError *error = NULL;
|
||||||
|
|
||||||
|
// Display help window
|
||||||
|
#if HAVE_GTK_SHOW_URI_ON_WINDOW
|
||||||
|
// NULL is provided for the gtk_show_uri_on_window() parent window
|
||||||
|
// so that failures to launch yelp are reported.
|
||||||
|
// https://gitlab.gnome.org/GNOME/gparted/-/merge_requests/82#note_1106114
|
||||||
|
gtk_show_uri_on_window(NULL, uri.c_str(), gtk_get_current_event_time(), &error);
|
||||||
|
#else
|
||||||
|
GdkScreen *gscreen = gscreen = gdk_screen_get_default();
|
||||||
|
gtk_show_uri(gscreen, uri.c_str(), gtk_get_current_event_time(), &error);
|
||||||
|
#endif
|
||||||
|
if (error != NULL)
|
||||||
|
{
|
||||||
|
Gtk::MessageDialog errorDialog(*this,
|
||||||
|
_("Failed to open GParted Manual help file"),
|
||||||
|
false,
|
||||||
|
Gtk::MESSAGE_ERROR,
|
||||||
|
Gtk::BUTTONS_OK,
|
||||||
|
true);
|
||||||
|
errorDialog.set_secondary_text(error->message);
|
||||||
|
errorDialog.run();
|
||||||
|
}
|
||||||
|
|
||||||
|
g_clear_error(&error);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Win_GParted::menu_help_contents()
|
void Win_GParted::menu_help_contents()
|
||||||
|
|
Loading…
Reference in New Issue