<AWT Dev> [PATCH] use g_app_info_get_default_for_uri_scheme instead of g_vfs_get_supported_uri_schemes
alex.hello71 at gmail.com
alex.hello71 at gmail.com
Mon Aug 3 19:29:07 UTC 2020
From: "Alex Xu (Hello71)" <alex_y_xu at yahoo.ca>
gtk_show_uri uses gappinfo, not gvfs. see https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/2359
this fixes Desktop.browse for systems without gvfs installed. this
doesn't accurately reflect systems which use libgnome gnome_url_show,
but gtk_show_uri should be used on all modern GNOME systems anyways.
---
.../native/libawt_xawt/awt/gtk2_interface.c | 36 ++++--------------
.../native/libawt_xawt/awt/gtk3_interface.c | 38 ++++---------------
2 files changed, 14 insertions(+), 60 deletions(-)
diff --git a/src/java.desktop/unix/native/libawt_xawt/awt/gtk2_interface.c b/src/java.desktop/unix/native/libawt_xawt/awt/gtk2_interface.c
index 4995044dc..3705a8839 100644
--- a/src/java.desktop/unix/native/libawt_xawt/awt/gtk2_interface.c
+++ b/src/java.desktop/unix/native/libawt_xawt/awt/gtk2_interface.c
@@ -362,8 +362,7 @@ do { \
static void update_supported_actions(JNIEnv *env) {
- GVfs * (*fp_g_vfs_get_default) (void);
- const gchar * const * (*fp_g_vfs_get_supported_uri_schemes) (GVfs * vfs);
+ GAppInfo * (*fp_g_app_info_get_default_for_uri_scheme) (const char *);
const gchar * const * schemes = NULL;
jclass cls_action = (*env)->FindClass(env, "java/awt/Desktop$Action");
@@ -385,38 +384,17 @@ static void update_supported_actions(JNIEnv *env) {
ADD_SUPPORTED_ACTION("OPEN");
- /**
- * gtk_show_uri() documentation says:
- *
- * > you need to install gvfs to get support for uri schemes such as http://
- * > or ftp://, as only local files are handled by GIO itself.
- *
- * So OPEN action was safely added here.
- * However, it looks like Solaris 11 have gvfs support only for 32-bit
- * applications only by default.
- */
-
- fp_g_vfs_get_default = dl_symbol("g_vfs_get_default");
- fp_g_vfs_get_supported_uri_schemes = dl_symbol("g_vfs_get_supported_uri_schemes");
+ fp_g_app_info_get_default_for_uri_scheme = dl_symbol("g_app_info_get_default_for_uri_scheme");
dlerror();
- if (fp_g_vfs_get_default && fp_g_vfs_get_supported_uri_schemes) {
- GVfs * vfs = fp_g_vfs_get_default();
- schemes = vfs ? fp_g_vfs_get_supported_uri_schemes(vfs) : NULL;
- if (schemes) {
- int i = 0;
- while (schemes[i]) {
- if (strcmp(schemes[i], "http") == 0) {
- ADD_SUPPORTED_ACTION("BROWSE");
- ADD_SUPPORTED_ACTION("MAIL");
- break;
- }
- i++;
- }
+ if (fp_g_app_info_get_default_for_uri_scheme) {
+ if (fp_g_app_info_get_default_for_uri_scheme("http")) {
+ ADD_SUPPORTED_ACTION("BROWSE");
+ ADD_SUPPORTED_ACTION("MAIL");
}
} else {
#ifdef DEBUG
- fprintf(stderr, "Cannot load g_vfs_get_supported_uri_schemes\n");
+ fprintf(stderr, "Cannot load g_app_info_get_default_for_uri_scheme\n");
#endif /* DEBUG */
}
diff --git a/src/java.desktop/unix/native/libawt_xawt/awt/gtk3_interface.c b/src/java.desktop/unix/native/libawt_xawt/awt/gtk3_interface.c
index 886437e2a..bd5afbcbf 100644
--- a/src/java.desktop/unix/native/libawt_xawt/awt/gtk3_interface.c
+++ b/src/java.desktop/unix/native/libawt_xawt/awt/gtk3_interface.c
@@ -135,9 +135,7 @@ do { \
static void update_supported_actions(JNIEnv *env) {
- GVfs * (*fp_g_vfs_get_default) (void);
- const gchar * const * (*fp_g_vfs_get_supported_uri_schemes) (GVfs * vfs);
- const gchar * const * schemes = NULL;
+ GAppInfo * (*fp_g_app_info_get_default_for_uri_scheme) (const gchar *);
jclass cls_action = (*env)->FindClass(env, "java/awt/Desktop$Action");
CHECK_NULL(cls_action);
@@ -163,39 +161,17 @@ static void update_supported_actions(JNIEnv *env) {
ADD_SUPPORTED_ACTION("OPEN");
- /**
- * gtk_show_uri() documentation says:
- *
- * > you need to install gvfs to get support for uri schemes such as http://
- * > or ftp://, as only local files are handled by GIO itself.
- *
- * So OPEN action was safely added here.
- * However, it looks like Solaris 11 have gvfs support only for 32-bit
- * applications only by default.
- */
-
- fp_g_vfs_get_default = dl_symbol("g_vfs_get_default");
- fp_g_vfs_get_supported_uri_schemes =
- dl_symbol("g_vfs_get_supported_uri_schemes");
+ fp_g_app_info_get_default_for_uri_scheme = dl_symbol("g_app_info_get_default_for_uri_scheme");
dlerror();
- if (fp_g_vfs_get_default && fp_g_vfs_get_supported_uri_schemes) {
- GVfs * vfs = fp_g_vfs_get_default();
- schemes = vfs ? fp_g_vfs_get_supported_uri_schemes(vfs) : NULL;
- if (schemes) {
- int i = 0;
- while (schemes[i]) {
- if (strcmp(schemes[i], "http") == 0) {
- ADD_SUPPORTED_ACTION("BROWSE");
- ADD_SUPPORTED_ACTION("MAIL");
- break;
- }
- i++;
- }
+ if (fp_g_app_info_get_default_for_uri_scheme) {
+ if (fp_g_app_info_get_default_for_uri_scheme("http")) {
+ ADD_SUPPORTED_ACTION("BROWSE");
+ ADD_SUPPORTED_ACTION("MAIL");
}
} else {
#ifdef DEBUG
- fprintf(stderr, "Cannot load g_vfs_get_supported_uri_schemes\n");
+ fprintf(stderr, "Cannot load g_app_info_get_default_for_uri_scheme\n");
#endif /* DEBUG */
}
--
2.28.0
More information about the awt-dev
mailing list