X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=panel-plugin%2Fxfce4-hdaps-dialogs.c;h=4a995df484056e4cbfa2dbba8bb23266d1bb734f;hb=0062dd83ce22be86d90c8f4320c6634650017069;hp=b6da7cb95edab9e365a81dc0f243906c0ddbeba3;hpb=f53133d9a33b1a3390cca82b3885a6788b42e761;p=xfce4-hdaps.git diff --git a/panel-plugin/xfce4-hdaps-dialogs.c b/panel-plugin/xfce4-hdaps-dialogs.c index b6da7cb..4a995df 100644 --- a/panel-plugin/xfce4-hdaps-dialogs.c +++ b/panel-plugin/xfce4-hdaps-dialogs.c @@ -41,34 +41,36 @@ static void hdaps_configure_response(GtkWidget *dialog, - gint response, - HdapsPlugin *hdaps) { + gint response, + HdapsPlugin *hdaps) { if (response == GTK_RESPONSE_HELP) { - /* 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); - + /* 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); + 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); - snprintf(hdaps->sysfs_file, FILENAME_MAX, UNLOAD_HEADS_FMT, hdaps->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. */ @@ -82,30 +84,31 @@ static void hdaps_configure_response(GtkWidget *dialog, void hdaps_configure(XfcePanelPlugin *plugin, - HdapsPlugin *hdaps) { - + 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. */ xfce_panel_plugin_block_menu(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_STOCK_HELP, GTK_RESPONSE_HELP, - GTK_STOCK_SAVE, GTK_RESPONSE_OK, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - NULL); + dialog = xfce_titled_dialog_new_with_buttons( + _("Hdaps Plugin"), + GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(plugin))), + 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. */ gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); @@ -119,70 +122,76 @@ void hdaps_configure(XfcePanelPlugin *plugin, /* Connect the reponse signal to the dialog. */ g_signal_connect(G_OBJECT (dialog), "response", - G_CALLBACK(hdaps_configure_response), hdaps); + 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_spin_button_set_value((GtkSpinButton*)hdaps->sb_poll_frequency, + hdaps->poll_frequency); + gtk_box_pack_start(GTK_BOX(hbox), - hdaps->sb_poll_frequency, - FALSE, - FALSE, - 0); + hdaps->sb_poll_frequency, + FALSE, + FALSE, + 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. */ 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++) { /* 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_append_text((GtkComboBox*)hdaps->cb_device_name, hdaps_devices[list_idx]); + 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); } @@ -190,52 +199,45 @@ void hdaps_configure(XfcePanelPlugin *plugin, -/* URL handler used on the About dialog. */ -static void hdaps_url_handler(GtkAboutDialog *about, - const gchar *link, - gpointer data) { +/* 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", link); + cmd = g_strdup_printf("%s %s","xdg-open", uri); - /* Stolen from xfce4-power-manager. */ if (!g_spawn_command_line_async(cmd, NULL)) { g_free(cmd); - cmd = g_strdup_printf("%s %s","xfbrowser4", link); + cmd = g_strdup_printf("%s %s","xdg-open", uri); g_spawn_command_line_async(cmd, NULL); } g_free(cmd); } -/* Email address handler used on the About dialog. */ -static void hdaps_mailto_handler(GtkAboutDialog *about, - const gchar *link, - gpointer data) { - gchar *cmd = g_strdup_printf( "%s %s", "xdg-email", link); - - g_spawn_command_line_async(cmd, NULL); - g_free(cmd); -} - - void hdaps_about(XfcePanelPlugin *plugin) { const gchar *authors[] = { "Michael Orlitzky ", NULL }; - const gchar *copyright = "Copyright \302\251 2012 Michael Orlitzky"; + const gchar *copyright = "Copyright \302\251 2019 Michael Orlitzky"; - gtk_about_dialog_set_url_hook(hdaps_url_handler, NULL, NULL); - gtk_about_dialog_set_email_hook(hdaps_mailto_handler, NULL, NULL); + /* 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); + "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); }