2008-05-19 [colin] 3.4.0cvs54
authorColin Leroy <colin@colino.net>
Mon, 19 May 2008 16:41:32 +0000 (16:41 +0000)
committerColin Leroy <colin@colino.net>
Mon, 19 May 2008 16:41:32 +0000 (16:41 +0000)
* src/prefs_filtering_action.c
* src/prefs_matcher.c
* src/common/tags.c
* src/common/tags.h
* src/gtk/combobox.c
* src/gtk/combobox.h
Patch by Pawel: disabled Tags menus in filtering dialogs

ChangeLog
PATCHSETS
configure.ac
src/common/tags.c
src/common/tags.h
src/gtk/combobox.c
src/gtk/combobox.h
src/prefs_filtering_action.c
src/prefs_matcher.c

index 34d9fe2..07fa688 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2008-05-19 [colin]     3.4.0cvs54
+
+       * src/prefs_filtering_action.c
+       * src/prefs_matcher.c
+       * src/common/tags.c
+       * src/common/tags.h
+       * src/gtk/combobox.c
+       * src/gtk/combobox.h
+               Patch by Pawel: disabled Tags menus in filtering dialogs
+
 2008-05-19 [colin]     3.4.0cvs53
 
        * src/prefs_account.c
index 9553f19..dcf9341 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( cvs diff -u -r 1.13.2.34 -r 1.13.2.35 src/common/plugin.c;  cvs diff -u -r 1.1.4.100 -r 1.1.4.101 src/etpan/imap-thread.c;  cvs diff -u -r 1.1.2.5 -r 1.1.2.6 src/etpan/nntp-thread.c;  cvs diff -u -r 1.1.4.44 -r 1.1.4.45 src/gtk/gtksctree.c; ) > 3.4.0cvs51.patchset
 ( cvs diff -u -r 1.274.2.241 -r 1.274.2.242 src/mainwindow.c;  ) > 3.4.0cvs52.patchset
 ( cvs diff -u -r 1.105.2.131 -r 1.105.2.132 src/prefs_account.c;  ) > 3.4.0cvs53.patchset
+( cvs diff -u -r 1.1.4.50 -r 1.1.4.51 src/prefs_filtering_action.c;  cvs diff -u -r 1.43.2.72 -r 1.43.2.73 src/prefs_matcher.c;  cvs diff -u -r 1.1.2.6 -r 1.1.2.7 src/common/tags.c;  cvs diff -u -r 1.1.2.3 -r 1.1.2.4 src/common/tags.h;  cvs diff -u -r 1.1.2.12 -r 1.1.2.13 src/gtk/combobox.c;  cvs diff -u -r 1.1.2.10 -r 1.1.2.11 src/gtk/combobox.h;  ) > 3.4.0cvs54.patchset
index e2ca1c5..a0a423e 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=4
 MICRO_VERSION=0
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=53
+EXTRA_VERSION=54
 EXTRA_RELEASE=
 EXTRA_GTK2_VERSION=
 
index b87da87..1b1d5d6 100644 (file)
@@ -240,3 +240,7 @@ GSList *tags_get_list(void)
        return data.list;
 }
 
+guint tags_get_size(void)
+{
+       return g_hash_table_size(tags_table);
+}
index e6e75bf..6065960 100644 (file)
@@ -30,5 +30,6 @@ void tags_update_tag(gint id, const gchar *tag);
 const gchar *tags_get_tag(gint id);
 gint tags_get_id_for_str(const gchar *str);
 GSList *tags_get_list(void);
+guint tags_get_size(void);
 
 #endif 
index d242eb2..55f6a31 100644 (file)
@@ -191,3 +191,43 @@ gboolean combobox_set_value_from_arrow_key(GtkComboBox *combobox,
        /* return TRUE if value could be set */
        return valid;
 }
+
+static void store_set_sensitive(GtkTreeModel *model, GtkTreeIter *iter,
+                               const gboolean sensitive)
+{
+       if(GTK_IS_LIST_STORE(model)) {
+               gtk_list_store_set(GTK_LIST_STORE(model), iter,
+                                  COMBOBOX_SENS, sensitive,
+                                  -1);
+       } else {
+               gtk_tree_store_set(GTK_TREE_STORE(model), iter,
+                                  COMBOBOX_SENS, sensitive,
+                                  -1);
+       }
+}
+
+void combobox_set_sensitive(GtkComboBox *combobox, const guint index,
+                           const gboolean sensitive)
+{
+       GtkTreeModel *model;
+       GtkTreeIter iter, child;
+       guint i;
+       
+       if((model = gtk_combo_box_get_model(combobox)) == NULL)
+               return;
+       
+       gtk_tree_model_get_iter_first(model, &iter);
+       for(i=0; i<index; i++) {
+               if(gtk_tree_model_iter_next(model, &iter) == FALSE)
+                       return;
+       }
+       
+       store_set_sensitive(model, &iter, sensitive);
+
+       if(gtk_tree_model_iter_children(model, &child, &iter) == FALSE)
+               return;
+       
+       do {
+               store_set_sensitive(model, &child, sensitive);
+       } while (gtk_tree_model_iter_next(model, &child) == TRUE);
+}
index e69f52c..6aedcc6 100644 (file)
@@ -65,5 +65,8 @@ void combobox_set_popdown_strings(GtkComboBox         *combobox,
                                 GList       *list);
 gboolean combobox_set_value_from_arrow_key(GtkComboBox *combobox,
                                 guint keyval);
+void combobox_set_sensitive    (GtkComboBox *combobox,
+                                const guint index,
+                                const gboolean sensitive);
 
 #endif /* __COMBOBOX_H__ */
index adf7097..037b429 100644 (file)
@@ -190,6 +190,7 @@ static struct {
 enum {
        ACTION_COMBO_TEXT,
        ACTION_COMBO_DATA,
+       ACTION_COMBO_SENS,
        N_ACTION_COMBO
 };
 
@@ -205,7 +206,8 @@ static GtkTreeModel *prefs_filtering_action_create_model(void)
        gchar *curr_menu = NULL;
        gint i;
        
-       store = gtk_tree_store_new(N_ACTION_COMBO, G_TYPE_STRING, G_TYPE_INT);
+       store = gtk_tree_store_new(N_ACTION_COMBO, G_TYPE_STRING, G_TYPE_INT,
+                                  G_TYPE_BOOLEAN);
        
        for (i = 0; action_menu[i].menu || action_menu[i].text; i++)
        {
@@ -215,6 +217,7 @@ static GtkTreeModel *prefs_filtering_action_create_model(void)
                                gtk_tree_store_set(store, &iter,
                                                   ACTION_COMBO_TEXT,
                                                   gettext(action_menu[i].menu),
+                                                  ACTION_COMBO_SENS, TRUE,
                                                   -1);
                                curr_menu = action_menu[i].menu;
                        } 
@@ -223,6 +226,7 @@ static GtkTreeModel *prefs_filtering_action_create_model(void)
                        gtk_tree_store_set(store, &iter2,
                                           ACTION_COMBO_TEXT, gettext(action_menu[i].text),
                                           ACTION_COMBO_DATA, action_menu[i].action,
+                                          ACTION_COMBO_SENS, TRUE,
                                           -1);
                } else {
                        curr_menu = NULL;
@@ -231,6 +235,7 @@ static GtkTreeModel *prefs_filtering_action_create_model(void)
                        gtk_tree_store_set(store, &iter,
                                           ACTION_COMBO_TEXT, gettext(action_menu[i].text),
                                           ACTION_COMBO_DATA, action_menu[i].action,
+                                          ACTION_COMBO_SENS, TRUE,
                                           -1); 
                }   
        }
@@ -244,8 +249,9 @@ static void cell_is_sensitive(GtkCellLayout   *cell_layout,
                              GtkTreeIter     *iter,
                              gpointer         data)
 {
-       gboolean sensitive = !gtk_tree_model_iter_has_child (tree_model, iter);
-       g_object_set (cell, "sensitive", sensitive, NULL);
+       if(gtk_tree_model_iter_has_child (tree_model, iter)) {
+               g_object_set (cell, "sensitive", FALSE, NULL);
+       }
 }
 
 /*!
@@ -442,6 +448,7 @@ static void prefs_filtering_action_create(void)
        gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(action_combo), renderer, TRUE);
         gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(action_combo), renderer,
                                       "text", ACTION_COMBO_TEXT,
+                                      "sensitive", ACTION_COMBO_SENS,
                                       NULL);
        gtk_cell_layout_set_cell_data_func(GTK_CELL_LAYOUT(action_combo), renderer,
                                           cell_is_sensitive, NULL, NULL);
@@ -683,6 +690,9 @@ static void prefs_filtering_action_set_dialog(GSList *action_list)
        }
        
         prefs_filtering_action_reset_dialog();
+        
+        combobox_set_sensitive(GTK_COMBO_BOX(filtering_action.action_combo), 9,
+                       (tags_get_size() > 0) ? TRUE : FALSE);
 }
 
 /*!
index 378ffe9..82be8a6 100644 (file)
@@ -50,6 +50,7 @@
 
 #include "matcher_parser.h"
 #include "colorlabel.h"
+#include "tags.h"
 
 static void prefs_matcher_addressbook_select(void);
 static void prefs_matcher_test_info(GtkWidget *widget, GtkWidget *parent);
@@ -514,6 +515,8 @@ static void prefs_matcher_create(void)
 
        static GdkGeometry geometry;
        GtkSizeGroup *size_group;
+       GtkListStore *store;
+       GtkTreeIter iter;
 
        debug_print("Creating matcher configuration window...\n");
 
@@ -581,14 +584,23 @@ static void prefs_matcher_create(void)
        gtk_table_attach(GTK_TABLE(table), criteria_label, 0, 1, 0, 1, 
                         GTK_FILL, GTK_SHRINK, 2, 2);
 
-       criteria_combo = combobox_text_new(FALSE, _("All messages"), _("Header"),
-                                          _("Age"), _("Phrase"), _("Flags"),
-                                          _("Color labels"), _("Thread"), 
-                                          _("Score"), _("Size"),
-                                          _("Partially downloaded"),
-                                          _("Address book"), _("Tags"),
-                                          _("External program test"),
-                                          NULL);
+       criteria_combo = gtkut_sc_combobox_create(NULL, FALSE);
+       store = GTK_LIST_STORE(gtk_combo_box_get_model(
+                               GTK_COMBO_BOX(criteria_combo)));
+       COMBOBOX_ADD(store, _("All messages"), 0);
+       COMBOBOX_ADD(store, _("Header"), 1);
+       COMBOBOX_ADD(store, _("Age"), 2);
+       COMBOBOX_ADD(store, _("Phrase"), 3);
+       COMBOBOX_ADD(store, _("Flags"), 4);
+       COMBOBOX_ADD(store, _("Color labels"), 5);
+       COMBOBOX_ADD(store, _("Thread"), 6);
+       COMBOBOX_ADD(store, _("Score"), 7);
+       COMBOBOX_ADD(store, _("Size"), 8);
+       COMBOBOX_ADD(store, _("Partially downloaded"), 9);
+       COMBOBOX_ADD(store, _("Address book"), 10);
+       COMBOBOX_ADD(store, _("Tags"), 11);
+       COMBOBOX_ADD(store, _("External program test"), 12);
+
        gtk_widget_set_size_request(criteria_combo, 150, -1);
        gtk_combo_box_set_active(GTK_COMBO_BOX(criteria_combo), MATCH_ALL);
        gtk_table_attach(GTK_TABLE(table), criteria_combo, 1, 2, 0, 1,
@@ -894,6 +906,9 @@ static void prefs_matcher_set_dialog(MatcherList *matchers)
        gtk_combo_box_set_active(GTK_COMBO_BOX(matcher.bool_op_combo), bool_op);
 
        prefs_matcher_reset_condition();
+       
+       combobox_set_sensitive(GTK_COMBO_BOX(matcher.criteria_combo), MATCH_TAGS,
+                       (tags_get_size() > 0) ? TRUE : FALSE);
 }
 
 /*!