X-Git-Url: http://gitweb.michael.orlitzky.com/?p=xfce4-hdaps.git;a=blobdiff_plain;f=panel-plugin%2Fxfce4-hdaps-dialogs.c;h=26f454e4aa146c104bdd80064acc34f673996322;hp=80e0bcc3ba580f22f0ce5ce5e22c229e804fa9e0;hb=60ffd1d1b7266d9a030b2c864135ff444f0cb917;hpb=63eef27ea56fc385cf1eb7af33211e697b384c3e diff --git a/panel-plugin/xfce4-hdaps-dialogs.c b/panel-plugin/xfce4-hdaps-dialogs.c index 80e0bcc..26f454e 100644 --- a/panel-plugin/xfce4-hdaps-dialogs.c +++ b/panel-plugin/xfce4-hdaps-dialogs.c @@ -1,11 +1,34 @@ +/* + * xfce4-hdaps, an XFCE4 panel plugin for the HDAPS system. + * + * Copyright (C) 2019 Michael Orlitzky + * + * http://michael.orlitzky.com/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details: + * + * https://www.gnu.org/licenses/agpl-3.0.html + * + */ + #ifdef HAVE_CONFIG_H #include #endif +#include #include -#include +#include #include #include "xfce4-hdaps-dialogs.h" +#include "hdaps.h" /* Wild guess. Actually borrowed from some code I copy-and-pasted. Doesn't seem too ugly. */ @@ -14,7 +37,7 @@ /* If people can't read the README, well maybe * they can do it /online/. */ -#define PLUGIN_WEBSITE "http://michael.orlitzky.com/code/xfce4-hdaps.php" +#define PLUGIN_WEBSITE "http://michael.orlitzky.com/code/xfce4-hdaps.xhtml" static void hdaps_configure_response(GtkWidget *dialog, @@ -25,27 +48,27 @@ static void hdaps_configure_response(GtkWidget *dialog, /* Launch the user's web browser and direct them to the plugin's webpage. */ gboolean spawn_result = g_spawn_command_line_async("exo-open --launch WebBrowser " PLUGIN_WEBSITE, NULL); - + if (G_UNLIKELY(spawn_result == FALSE)) { g_warning(_("Unable to open the following url: %s"), PLUGIN_WEBSITE); } - + return; } - + if (response == GTK_RESPONSE_OK) { /* This corresponds to the "Save" button, so we want to save any settings that may have changed. */ g_object_set_data(G_OBJECT(hdaps->plugin), "dialog", NULL); hdaps->poll_frequency = gtk_spin_button_get_value_as_int((GtkSpinButton*)hdaps->sb_poll_frequency); - hdaps->device_name = gtk_combo_box_get_active_text((GtkComboBox*)hdaps->cb_device_name); + hdaps->device_name = gtk_combo_box_text_get_active_text((GtkComboBoxText*)hdaps->cb_device_name); snprintf(hdaps->sysfs_file, FILENAME_MAX, UNLOAD_HEADS_FMT, hdaps->device_name); hdaps_save(hdaps->plugin, hdaps); hdaps_reset_timeout(hdaps); } - + /* Since there is already a "save" button, we should ignore any changes that were made if the user presses "cancel" instead. */ @@ -60,16 +83,16 @@ static void hdaps_configure_response(GtkWidget *dialog, void hdaps_configure(XfcePanelPlugin *plugin, HdapsPlugin *hdaps) { - + /* Here comes a bunch of GTK garbage to create the settings dialog. */ - + GtkWidget *dialog; GtkWidget *label; GtkWidget *vbox; GtkWidget *hbox; GtkSizeGroup *sg; - + /* Block the plugin menu while the configuration dialogue is open. Don't forget to unblock it before we close. */ @@ -78,10 +101,10 @@ void hdaps_configure(XfcePanelPlugin *plugin, /* Create the dialog */ dialog = xfce_titled_dialog_new_with_buttons(_("Hdaps Plugin"), GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (plugin))), - GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR, - GTK_STOCK_HELP, GTK_RESPONSE_HELP, - GTK_STOCK_SAVE, GTK_RESPONSE_OK, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_DIALOG_DESTROY_WITH_PARENT, + "gtk-help", GTK_RESPONSE_HELP, + "gtk-save", GTK_RESPONSE_OK, + "gtk-cancel", GTK_RESPONSE_CANCEL, NULL); /* Center the dialog on screen. */ @@ -98,25 +121,27 @@ void hdaps_configure(XfcePanelPlugin *plugin, g_signal_connect(G_OBJECT (dialog), "response", G_CALLBACK(hdaps_configure_response), hdaps); - - vbox = gtk_vbox_new(FALSE, DEFAULT_BORDER_WIDTH); + + vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, DEFAULT_BORDER_WIDTH); gtk_container_set_border_width(GTK_CONTAINER(vbox), DEFAULT_BORDER_WIDTH - 2); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), vbox, TRUE, TRUE, 0); - + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), + vbox, TRUE, TRUE, 0); + /* Create size group to keep widgets aligned */ sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); - hbox = gtk_hbox_new(FALSE, DEFAULT_BORDER_WIDTH); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, DEFAULT_BORDER_WIDTH); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); label = gtk_label_new(_("Poll Frequency:")); gtk_size_group_add_widget(sg, label); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); + gtk_widget_set_halign(label, 0.0); + gtk_widget_set_valign(label, 0.5); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); hdaps->sb_poll_frequency = gtk_spin_button_new_with_range(100, 5000, 100); gtk_spin_button_set_value((GtkSpinButton*)hdaps->sb_poll_frequency, hdaps->poll_frequency); - + gtk_box_pack_start(GTK_BOX(hbox), hdaps->sb_poll_frequency, FALSE, @@ -124,71 +149,89 @@ void hdaps_configure(XfcePanelPlugin *plugin, 0); /* Create the device name dropdown. */ - hbox = gtk_hbox_new(FALSE, DEFAULT_BORDER_WIDTH); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, DEFAULT_BORDER_WIDTH); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); label = gtk_label_new(_("Device Name:")); gtk_size_group_add_widget(sg, label); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); + gtk_widget_set_halign(label, 0.0); + gtk_widget_set_valign(label, 0.5); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); - hdaps->cb_device_name = gtk_combo_box_new_text(); + hdaps->cb_device_name = gtk_combo_box_text_new(); + /* Add the current device name, it should always be available. Oh, and it should be the default, too. */ - gtk_combo_box_append_text((GtkComboBox*)hdaps->cb_device_name, hdaps->device_name); - + gtk_combo_box_text_append_text((GtkComboBoxText*)hdaps->cb_device_name, hdaps->device_name); + /* This function takes an index, and 0 should be the first (only) index at this point. */ gtk_combo_box_set_active((GtkComboBox*)hdaps->cb_device_name, 0); - + /* Now loop through the list of available devices, adding each - to the list as we go. I believe GTK takes care of the duplicates - for us. */ + to the list as we go. */ char hdaps_devices[MAX_HDAPS_DEVICES][FILENAME_MAX]; int found_devices = get_hdaps_device_list(hdaps_devices); int list_idx = 0; - + for (list_idx = 0; list_idx < found_devices; list_idx++) { - gtk_combo_box_append_text((GtkComboBox*)hdaps->cb_device_name, hdaps_devices[list_idx]); + /* We don't want to add duplicate entries to the combo box. + However, at this point, the current device name should be + the only entry. Therefore, to avoid duplicates, we only + have to avoid adding the current device name a second time. */ + if (strcmp(hdaps_devices[list_idx], hdaps->device_name) != 0) { + gtk_combo_box_text_append_text((GtkComboBoxText*)hdaps->cb_device_name, hdaps_devices[list_idx]); + } } - + gtk_box_pack_start(GTK_BOX(hbox), hdaps->cb_device_name, FALSE, FALSE, 0); - + /* Show the dialog and all of its widgets. */ gtk_widget_show_all(dialog); } + +/* URI (http(s):// and mailto://) handler used on the About dialog. */ +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); +} + + void hdaps_about(XfcePanelPlugin *plugin) { - GdkPixbuf *icon; - GtkWidget *dialog; - XfceAboutInfo *about; - - /* Send NULL as our license, since GPL >= 3 is not - supported yet. I don't particularly care if people - want to re-license under GPL2, but I also don't want - to cause any unnecessary confusion. */ - about = xfce_about_info_new("xfce4-hdaps", - VERSION, - _("An HDAPS Plugin for XFCE4"), - XFCE_COPYRIGHT_TEXT("2009", "Michael Orlitzky"), - NULL); - - xfce_about_info_set_homepage(about, PLUGIN_WEBSITE); - - xfce_about_info_add_credit(about, - "Michael Orlitzky", - "michael@orlitzky.com", - _("A Reasonable Man")); - - icon = gtk_icon_theme_load_icon(gtk_icon_theme_get_default(), - "xfce4-hdaps", - 48, 0, NULL); - - dialog = xfce_about_dialog_new_with_values(NULL, about, icon); - xfce_about_info_free(about); - gtk_dialog_run(GTK_DIALOG(dialog)); - gtk_widget_destroy(dialog); - g_object_unref(G_OBJECT(icon)); + const gchar *authors[] = { "Michael Orlitzky ", NULL }; + const gchar *copyright = "Copyright \302\251 2012 Michael Orlitzky"; + + /* 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, + "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); }