diff options
author | Alexey Yakovenko <wakeroid@gmail.com> | 2010-02-02 21:43:15 +0100 |
---|---|---|
committer | Alexey Yakovenko <wakeroid@gmail.com> | 2010-02-02 21:43:15 +0100 |
commit | da996ecc965c1660b6186c12c061e919eb2d4d3d (patch) | |
tree | 081b1f6bf847e07e30870d0c3407330a2835c6c6 /plugins | |
parent | 40a1a82291681fc52ae3b80ae58760f4b51f1e81 (diff) |
improved apply/cancel/ok buttons in plugin preferences
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/gtkui/pluginconf.c | 11 |
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); |