commit d150466fdaa27a3b1a52ff4c1524ce04dd3f5ad5
Author: phantomjinx <p.g.richard...@phantomjinx.co.uk>
Date:   Fri Dec 24 22:16:01 2010 +0000

    Fix transient dialogs opening with incorrect parent
    
    * misc.*
     * Implement extra version of get_user_string that doesn't assume gtkpod_app
       as the parent of dialogs.
    
    * coverweb_preferences.c
     * Specify correct parent of bookmarks dialog
    
    * track_display_preferences.c
     * Fix correct parent of notebook, which will be a GtkWindow not a GDKWinow
     * ignore word clicked doesn't add if work is empty or if word already 
exists
     * Specify correct parent of ign_word using get_user_string_with_parent

 libgtkpod/misc.c                                  |   37 ++++++++++++++++-----
 libgtkpod/misc.h                                  |    4 +-
 plugins/coverweb/coverweb_preferences.c           |   10 +++++-
 plugins/track_display/track_display_preferences.c |   28 ++++++++++++++-
 4 files changed, 65 insertions(+), 14 deletions(-)
---
diff --git a/libgtkpod/misc.c b/libgtkpod/misc.c
index b322424..1c6ef9e 100644
--- a/libgtkpod/misc.c
+++ b/libgtkpod/misc.c
@@ -1701,15 +1701,34 @@ gboolean get_offline(iTunesDB *itdb) {
     return eitdb->offline;
 }
 
-/* Retrieves a string (and option) from the user using a dialog.
- @title: title of the dialogue (may be NULL)
- @message: text (question) to be displayed (may be NULL)
- @dflt: default string to be returned (may be NULL)
- @opt_msg: message for the option checkbox (or NULL)
- @opt_state: original state of the checkbox. Will be updated
- return value: the string entered by the user or NULL if the dialog
- was cancelled. */
+/*
+ * Retrieves a string (and option) from the user using a dialog.
+ *
+ * @title: title of the dialogue (may be NULL)
+ * @message: text (question) to be displayed (may be NULL)
+ * @dflt: default string to be returned (may be NULL)
+ * @opt_msg: message for the option checkbox (or NULL)
+ * @opt_state: original state of the checkbox. Will be updated
+ * return value: the string entered by the user or NULL if the dialog
+ *                      was cancelled.
+ */
 gchar *get_user_string(gchar *title, gchar *message, gchar *dflt, gchar 
*opt_msg, gboolean *opt_state, const gchar *accept_button) {
+    return get_user_string_with_parent(GTK_WINDOW(gtkpod_app), title, message, 
dflt, opt_msg, opt_state, accept_button);
+}
+
+/*
+ * Retrieves a string (and option) from the user using a dialog.
+ *
+ * @parent: parent window for the dialog
+ * @title: title of the dialogue (may be NULL)
+ * @message: text (question) to be displayed (may be NULL)
+ * @dflt: default string to be returned (may be NULL)
+ * @opt_msg: message for the option checkbox (or NULL)
+ * @opt_state: original state of the checkbox. Will be updated
+ * return value: the string entered by the user or NULL if the dialog
+ *                      was cancelled.
+ */
+gchar *get_user_string_with_parent(GtkWindow *parent, gchar *title, gchar 
*message, gchar *dflt, gchar *opt_msg, gboolean *opt_state, const gchar 
*accept_button) {
     GladeXML *xml = gtkpod_xml_new(gtkpod_get_glade_xml(), "input_box");
     GtkWidget *dialog = gtkpod_xml_get_widget(xml, "input_box");
     GtkWidget *label = gtkpod_xml_get_widget(xml, "input_box_label");
@@ -1741,7 +1760,7 @@ gchar *get_user_string(gchar *title, gchar *message, 
gchar *dflt, gchar *opt_msg
         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (checkb), *opt_state);
     }
 
-    gtk_window_set_transient_for(GTK_WINDOW (dialog), GTK_WINDOW (gtkpod_app));
+    gtk_window_set_transient_for(GTK_WINDOW (dialog), parent);
     response = gtk_dialog_run(GTK_DIALOG (dialog));
 
     if (response == GTK_RESPONSE_OK) {
diff --git a/libgtkpod/misc.h b/libgtkpod/misc.h
index d671fe5..d2a9078 100644
--- a/libgtkpod/misc.h
+++ b/libgtkpod/misc.h
@@ -75,8 +75,8 @@ extern gboolean widgets_blocked;
 
 gchar *utf8_strcasestr (const gchar *haystack, const gchar *needle);
 
-gchar *get_user_string (gchar *title, gchar *message, gchar *dflt,
-                       gchar *opt_msg, gboolean *opt_state, const gchar 
*accept_button);
+gchar *get_user_string_with_parent (GtkWindow *parent, gchar *title, gchar 
*message, gchar *dflt, gchar *opt_msg, gboolean *opt_state, const gchar 
*accept_button);
+gchar *get_user_string (gchar *title, gchar *message, gchar *dflt, gchar 
*opt_msg, gboolean *opt_state, const gchar *accept_button);
 Playlist *add_new_pl_user_name (iTunesDB *itdb, gchar *dflt, gint32 pos);
 void add_new_pl_or_spl_user_name (iTunesDB *itdb, gchar *dflt, gint32 pos);
 void create_add_files_fileselector (void);
diff --git a/plugins/coverweb/coverweb_preferences.c 
b/plugins/coverweb/coverweb_preferences.c
index ba3897c..c0a1369 100644
--- a/plugins/coverweb/coverweb_preferences.c
+++ b/plugins/coverweb/coverweb_preferences.c
@@ -118,6 +118,14 @@ static void save_bookmarks_preferences() {
     update_bookmark_menu();
 }
 
+static GtkWindow *bookmarks_view_get_parent_window() {
+    if (! bookmarks_view) {
+        return NULL;
+    }
+
+    return GTK_WINDOW(gtk_widget_get_toplevel(bookmarks_view));
+}
+
 /*
     glade callback
 */
@@ -131,7 +139,7 @@ G_MODULE_EXPORT void on_bookmark_add_clicked (GtkButton 
*sender, gpointer e)
     GtkTreeIter iter;
 
     bookmark
-                = get_user_string(_("Bookmark Url"), _("Please enter the full 
url of the bookmark"), NULL, NULL, NULL, GTK_STOCK_ADD);
+                = 
get_user_string_with_parent(bookmarks_view_get_parent_window(), _("Bookmark 
Url"), _("Please enter the full url of the bookmark"), NULL, NULL, NULL, 
GTK_STOCK_ADD);
 
     if (!bookmark)
         return;
diff --git a/plugins/track_display/track_display_preferences.c 
b/plugins/track_display/track_display_preferences.c
index 19cc9b7..8b39109 100644
--- a/plugins/track_display/track_display_preferences.c
+++ b/plugins/track_display/track_display_preferences.c
@@ -49,7 +49,7 @@ static GtkWindow *notebook_get_parent_window() {
         return NULL;
     }
 
-    return GTK_WINDOW(gtk_widget_get_parent(notebook));
+    return GTK_WINDOW(gtk_widget_get_toplevel(notebook));
 }
 
 static gint column_tree_sort (GtkTreeModel *model,
@@ -226,16 +226,40 @@ void on_ign_field_toggled (GtkToggleButton *togglebutton, 
gpointer data) {
 /*
     glade callback
 */
+
 G_MODULE_EXPORT void on_ign_word_add_clicked (GtkButton *sender, gpointer e) {
     g_return_if_fail(ign_words_view);
     GtkTreeModel *model;
     GtkTreeIter iter;
+    gboolean valid_iter;
 
-    gchar *word = get_user_string(_("New Word to Ignore"), _("Please enter a 
word for sorting functions to ignore"), NULL, NULL, NULL, GTK_STOCK_ADD);
+    gchar *word = get_user_string_with_parent(notebook_get_parent_window(), 
_("New Word to Ignore"), _("Please enter a word for sorting functions to 
ignore"), NULL, NULL, NULL, GTK_STOCK_ADD);
     if (! word)
         return;
 
+    if (strlen(word) == 0)
+        return;
+
     model = gtk_tree_view_get_model (GTK_TREE_VIEW(ign_words_view));
+
+    /* Check if the value is already in the list store */
+    valid_iter = gtk_tree_model_get_iter_first (model, &iter);
+    while (valid_iter) {
+        gchar *curr_ign;
+        gint comparison;
+        gtk_tree_model_get (model, &iter, 0, &curr_ign, -1);
+
+        comparison = compare_string_case_insensitive(word, curr_ign);
+        g_free (curr_ign);
+        if (comparison == 0) {
+            gtkpod_statusbar_message("The word %s is already in the \"Ignored 
Frequent Word\" list", word);
+            return;
+        }
+
+        valid_iter = gtk_tree_model_iter_next (model, &iter);
+    }
+
+
     gtk_list_store_append (GTK_LIST_STORE (model), &iter);
     gtk_list_store_set(GTK_LIST_STORE (model), &iter, 0, word, -1);
     apply_ign_strings();

------------------------------------------------------------------------------
Learn how Oracle Real Application Clusters (RAC) One Node allows customers
to consolidate database storage, standardize their database environment, and, 
should the need arise, upgrade to a full multi-node Oracle RAC database 
without downtime or disruption
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
gtkpod-cvs2 mailing list
gtkpod-cvs2@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2

Reply via email to