summaryrefslogtreecommitdiff
path: root/plugins/gtkui/pluginconf.c
diff options
context:
space:
mode:
authorGravatar Alexey Yakovenko <wakeroid@gmail.com>2010-02-02 21:43:15 +0100
committerGravatar Alexey Yakovenko <wakeroid@gmail.com>2010-02-02 21:43:15 +0100
commitda996ecc965c1660b6186c12c061e919eb2d4d3d (patch)
tree081b1f6bf847e07e30870d0c3407330a2835c6c6 /plugins/gtkui/pluginconf.c
parent40a1a82291681fc52ae3b80ae58760f4b51f1e81 (diff)
improved apply/cancel/ok buttons in plugin preferences
Diffstat (limited to 'plugins/gtkui/pluginconf.c')
-rw-r--r--plugins/gtkui/pluginconf.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/plugins/gtkui/pluginconf.c b/plugins/gtkui/pluginconf.c
index cc96e71b..6b96244f 100644
--- a/plugins/gtkui/pluginconf.c
+++ b/plugins/gtkui/pluginconf.c
@@ -117,12 +117,17 @@ static void apply_conf (GtkWidget *w, DB_plugin_t *p) {
deadbeef->sendmessage (M_CONFIGCHANGED, 0, 0, 0);
}
+static void
+prop_changed (GtkWidget *editable, gpointer user_data) {
+ gtk_dialog_set_response_sensitive (GTK_DIALOG (user_data), GTK_RESPONSE_APPLY, TRUE);
+}
+
void
plugin_configure (GtkWidget *parentwin, DB_plugin_t *p) {
// create window
char title[200];
snprintf (title, sizeof (title), "Setup %s", p->name);
- GtkWidget *win = gtk_dialog_new_with_buttons (title, GTK_WINDOW (parentwin), GTK_DIALOG_MODAL, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, GTK_STOCK_APPLY, GTK_RESPONSE_APPLY, NULL);
+ GtkWidget *win = gtk_dialog_new_with_buttons (title, GTK_WINDOW (parentwin), GTK_DIALOG_MODAL, GTK_STOCK_APPLY, GTK_RESPONSE_APPLY, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL);
gtk_window_set_type_hint (GTK_WINDOW (win), GDK_WINDOW_TYPE_HINT_DIALOG);
gtk_container_set_border_width (GTK_CONTAINER(win), 12);
@@ -183,11 +188,13 @@ plugin_configure (GtkWidget *parentwin, DB_plugin_t *p) {
label = gtk_label_new (labeltext);
gtk_widget_show (label);
prop = gtk_entry_new ();
+ g_signal_connect (G_OBJECT (prop), "changed", G_CALLBACK (prop_changed), win);
gtk_widget_show (prop);
gtk_entry_set_text (GTK_ENTRY (prop), deadbeef->conf_get_str (key, def));
}
else if (!strcmp (type, "checkbox")) {
prop = gtk_check_button_new_with_label (labeltext);
+ g_signal_connect (G_OBJECT (prop), "toggled", G_CALLBACK (prop_changed), win);
gtk_widget_show (prop);
int val = deadbeef->conf_get_int (key, atoi (def));
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (prop), val);
@@ -198,6 +205,7 @@ plugin_configure (GtkWidget *parentwin, DB_plugin_t *p) {
cont = gtk_hbox_new (FALSE, 2);
gtk_widget_show (cont);
prop = gtk_entry_new ();
+ g_signal_connect (G_OBJECT (prop), "changed", G_CALLBACK (prop_changed), win);
gtk_widget_show (prop);
gtk_editable_set_editable (GTK_EDITABLE (prop), FALSE);
gtk_entry_set_text (GTK_ENTRY (prop), deadbeef->conf_get_str (key, def));
@@ -231,6 +239,7 @@ plugin_configure (GtkWidget *parentwin, DB_plugin_t *p) {
int response;
do {
+ gtk_dialog_set_response_sensitive (GTK_DIALOG (win), GTK_RESPONSE_APPLY, FALSE);
response = gtk_dialog_run (GTK_DIALOG (win));
if (response == GTK_RESPONSE_APPLY || response == GTK_RESPONSE_OK) {
apply_conf (win, p);