]> gitweb.michael.orlitzky.com - xfce4-hdaps.git/commitdiff
xfce4-hdaps-dialogs.c: construct "about" dialog by hand.
authorMichael Orlitzky <michael@orlitzky.com>
Tue, 29 Oct 2019 23:43:22 +0000 (19:43 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Tue, 29 Oct 2019 23:43:22 +0000 (19:43 -0400)
The way we were constructing our "about" dialog made it impossible to
hook up the "activate-link" signal handler to it. It pretended to
work, but attempting to add the signal handler to an XfcePanelPlugin
silently failed, and the only way to get a real GTK object (to make it
work) is to build up the "about" dialog ourselves.

panel-plugin/xfce4-hdaps-dialogs.c

index 5ac786051e2dfde205f0fc1b9b56e6a8ed8a2fb5..c43eafa6d7602e0b5f5411be968f0aae783c8351 100644 (file)
@@ -214,29 +214,44 @@ static void hdaps_uri_handler(GtkAboutDialog *about,
     g_free(cmd);
 }
 
+/* "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 <michael@orlitzky.com>", 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;
 }