X-Git-Url: http://gitweb.michael.orlitzky.com/?p=xfce4-hdaps.git;a=blobdiff_plain;f=panel-plugin%2Fxfce4-hdaps-dialogs.c;h=5624ba82a61210cae9a29f328dc8d662e6e304b1;hp=4a995df484056e4cbfa2dbba8bb23266d1bb734f;hb=ef0bd0512e5f92587d27a729033a473609ddadc7;hpb=0062dd83ce22be86d90c8f4320c6634650017069 diff --git a/panel-plugin/xfce4-hdaps-dialogs.c b/panel-plugin/xfce4-hdaps-dialogs.c index 4a995df..5624ba8 100644 --- a/panel-plugin/xfce4-hdaps-dialogs.c +++ b/panel-plugin/xfce4-hdaps-dialogs.c @@ -26,7 +26,7 @@ #include #include #include -#include +#include #include "xfce4-hdaps-dialogs.h" #include "hdaps.h" @@ -39,19 +39,51 @@ */ #define PLUGIN_WEBSITE "http://michael.orlitzky.com/code/xfce4-hdaps.xhtml" +/* Launch a URI using either gtk_show_uri_on_window (gvfs), exo-open + * or xdg-open. This is used both when you click the author's email + * address, and when you visit the plugin's homepage. + */ +static gboolean launch_uri(GtkWindow *parent, const gchar *uri) { + GError *error = NULL; + gboolean result = gtk_show_uri_on_window(parent, + uri, + GDK_CURRENT_TIME, + &error); + /* First, let's try what the GTK docs say the default is. */ + if (result == TRUE) { + return result; + } + else { + g_warning(_("Error launching URI %s: %s"), uri, error->message); + g_error_free(error); + } -static void hdaps_configure_response(GtkWidget *dialog, - gint response, - HdapsPlugin *hdaps) { - - if (response == GTK_RESPONSE_HELP) { - /* Launch the user's web browser and direct them to the plugin webpage. */ - gboolean spawn_result = g_spawn_command_line_async("xdg-open " PLUGIN_WEBSITE, NULL); + /* Ok, GTK failed, on to the fallbacks. Let's try exo-open first, + since it's part of XFCE. */ + gchar *cmd = g_strdup_printf("%s %s","exo-open", uri); + result = g_spawn_command_line_async(cmd, NULL); - if (G_UNLIKELY(spawn_result == FALSE)) { - g_warning(_("Unable to open the following url: %s"), PLUGIN_WEBSITE); + if (G_UNLIKELY(result == FALSE)) { + g_warning(_("Unable to open URI with exo-open, trying xdg-open: %s"), uri); + g_free(cmd); + cmd = g_strdup_printf("%s %s","xdg-open", uri); + result = g_spawn_command_line_async(cmd, NULL); + if (G_UNLIKELY(result == FALSE)) { + g_warning(_("Unable to open URI with xdg-open, giving up: %s"), uri); } + } + + g_free(cmd); + + return result; +} + +static void hdaps_configure_response(GtkDialog *dialog, + gint response, + HdapsPlugin *hdaps) { + if (response == GTK_RESPONSE_HELP) { + launch_uri(GTK_WINDOW(dialog), PLUGIN_WEBSITE); return; } @@ -76,7 +108,7 @@ static void hdaps_configure_response(GtkWidget *dialog, instead. */ g_object_set_data(G_OBJECT(hdaps->plugin), "dialog", NULL); xfce_panel_plugin_unblock_menu(hdaps->plugin); - gtk_widget_destroy(dialog); + gtk_widget_destroy(GTK_WIDGET(dialog)); return; } @@ -203,41 +235,48 @@ void hdaps_configure(XfcePanelPlugin *plugin, static void hdaps_uri_handler(GtkAboutDialog *about, const gchar *uri, gpointer data) { - gchar *cmd; - cmd = g_strdup_printf("%s %s","xdg-open", uri); - - if (!g_spawn_command_line_async(cmd, NULL)) { - g_free(cmd); - cmd = g_strdup_printf("%s %s","xdg-open", uri); - g_spawn_command_line_async(cmd, NULL); - } - g_free(cmd); + launch_uri(GTK_WINDOW(about), uri); } +/* "Close" button handler for the About dialog. */ +static void hdaps_close_handler (GtkAboutDialog *about, + gint response_id, + gpointer user_data) { + /* This will cause the dialog to be destroyed */ + gtk_widget_destroy(GTK_WIDGET(about)); +} void hdaps_about(XfcePanelPlugin *plugin) { const gchar *authors[] = { "Michael Orlitzky ", NULL }; const gchar *copyright = "Copyright \302\251 2019 Michael Orlitzky"; + GtkAboutDialog *about = GTK_ABOUT_DIALOG(gtk_about_dialog_new()); + + gtk_about_dialog_set_authors(about, authors); + gtk_about_dialog_set_copyright(about, copyright); + gtk_about_dialog_set_program_name(about, PACKAGE_NAME); + gtk_about_dialog_set_logo_icon_name(about, PACKAGE_NAME); + gtk_about_dialog_set_license(about, LICENSE_AGPL3); + gtk_about_dialog_set_version(about, PACKAGE_VERSION); + gtk_about_dialog_set_website(about, PLUGIN_WEBSITE); + gtk_about_dialog_set_website_label(about, "xfce4-hdaps homepage"); + /* Use a custom URI handler for http(s):// and mailto:// URIs. The - default behavior apparently needs gio/gvfs to work, and I don't - have those installed. */ - g_signal_connect(plugin, + default behavior apparently needs gio/gvfs to work, so we want + to add some fallbacks. */ + g_signal_connect(about, "activate-link", G_CALLBACK(hdaps_uri_handler), NULL); - gtk_show_about_dialog(NULL, - "authors", authors, - "copyright", copyright, - "destroy-with-parent", TRUE, - "license", LICENSE_AGPL3, - "logo-icon-name", PACKAGE_NAME, - "icon-name", PACKAGE_NAME, - "program-name", PACKAGE_NAME, - "version", PACKAGE_VERSION, - "website", PLUGIN_WEBSITE, - "website-label", "xfce4-hdaps homepage", - NULL); + /* To close the dialog when "close" is clicked, we have to connect + * the response signal to a handler that actually does it. + */ + g_signal_connect(about, + "response", + G_CALLBACK(hdaps_close_handler), + NULL); + gtk_widget_show(GTK_WIDGET(about)); + return; }