Update the code for NEW_FILTER_COMBO_BOX.
authoretxrab <etxrab@f5534014-38df-0310-8fa8-9805f1628bb7>
Mon, 7 Jun 2010 18:25:37 +0000 (18:25 +0000)
committeretxrab <etxrab@f5534014-38df-0310-8fa8-9805f1628bb7>
Mon, 7 Jun 2010 18:25:37 +0000 (18:25 +0000)
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@33140 f5534014-38df-0310-8fa8-9805f1628bb7

gtk/main_filter_toolbar.c

index 6afd498714500bb091716d2e1f2e00b05a7485c0..1641997c6b22f86c63a579d2a924714b02be4c4c 100644 (file)
 
 GtkWidget   *main_display_filter_widget=NULL;
 
+/* #define NEW_FILTER_COMBO_BOX 1 */
 /* Run the current display filter on the current packet set, and
    redisplay. */
 static void
 filter_activate_cb(GtkWidget *w _U_, gpointer data)
 {
   const char *s;
-#ifdef NEW_FILTER_COMBO_BOX
-#if GTK_CHECK_VERSION(2,6,0)
-#else
-       GtkTreeIter   iter;
-       GtkTreeModel *model;
-#endif
-  /* Since 2.6 */
-  #if GTK_CHECK_VERSION(2,6,0)
-  s = gtk_combo_box_get_active_text(GTK_COMBO_BOX(filter_cm))
-  #else
-  gtk_combo_box_get_active_iter(GTK_COMBO_BOX(filter_cm), &iter);
-  model = gtk_combo_box_get_model(GTK_COMBO_BOX(filter_cm));
-  gtk_tree_model_get(model, &iter, 0, &s, -1);
-  #endif
 
-#else
   s = gtk_entry_get_text(GTK_ENTRY(data));
-#endif
   main_filter_packets(&cfile, s, FALSE);
 }
 
@@ -91,8 +76,6 @@ filter_reset_cb(GtkWidget *w, gpointer data _U_)
   main_filter_packets(&cfile, NULL, FALSE);
 }
 
-/* #define NEW_FILTER_COMBO_BOX 1 */
-
 GtkWidget *filter_toolbar_new()
 {
     GtkWidget     *filter_cm;
@@ -297,26 +280,33 @@ dfilter_entry_match(gconstpointer a, gconstpointer b)
 
 #ifdef NEW_FILTER_COMBO_BOX
 static gboolean
-dfilter_entry_match_new(GtkWidget *filter_cm, char *s)
+dfilter_entry_match_new(GtkWidget *filter_cm, char *s, int *index)
 {
        GtkTreeModel *model = gtk_combo_box_get_model (GTK_COMBO_BOX(filter_cm));
        GtkTreeIter   iter;
        GValue value = { 0, {{0}}};
        const char *filter_str;
+       int i;
 
-       if (!gtk_tree_model_get_iter_first (model, &iter))
+       i = -1;
+       if (!gtk_tree_model_get_iter_first (model, &iter)){
+               *index = i;
                return FALSE;
+       }
        do{
+               i++;
                gtk_tree_model_get_value (model, &iter, 0, &value);
                filter_str = g_value_get_string (&value);
                if(filter_str){
                        if(strcmp(s, filter_str) == 0){
                                g_value_unset (&value);
+                               *index = i;
                                return TRUE;
                        }
                }
        }while (gtk_tree_model_iter_next (model, &iter));
 
+       *index = i;
        return FALSE;
 }
 #endif
@@ -326,7 +316,8 @@ dfilter_entry_match_new(GtkWidget *filter_cm, char *s)
 static gboolean
 dfilter_combo_add(GtkWidget *filter_cm, char *s) {
 #ifdef NEW_FILTER_COMBO_BOX
-       if(!dfilter_entry_match_new(filter_cm,s))
+       int index;
+       if(!dfilter_entry_match_new(filter_cm,s, &index))
                gtk_combo_box_append_text(GTK_COMBO_BOX(filter_cm), s);
 #else
     GList     *dfilter_list = g_object_get_data(G_OBJECT(filter_cm), E_DFILTER_FL_KEY);
@@ -414,7 +405,11 @@ dfilter_combo_add_recent(gchar *s) {
 gboolean
 main_filter_packets(capture_file *cf, const gchar *dftext, gboolean force)
 {
+#ifdef NEW_FILTER_COMBO_BOX
+    GtkWidget *filter_cm = g_object_get_data(G_OBJECT(top_level), E_DFILTER_CM_KEY);
+#else
     GtkCombo  *filter_cm = g_object_get_data(G_OBJECT(top_level), E_DFILTER_CM_KEY);
+#endif
     GList     *dfilter_list = g_object_get_data(G_OBJECT(filter_cm), E_DFILTER_FL_KEY);
     gboolean   free_filter = TRUE;
     char      *s;
@@ -430,6 +425,19 @@ main_filter_packets(capture_file *cf, const gchar *dftext, gboolean force)
        our own filter list, and feed it to gtk_combo_set_popdown_strings when
        a new filter is added. */
     if (cf_status == CF_OK && strlen(s) > 0) {
+#ifdef NEW_FILTER_COMBO_BOX
+               int index;
+               if(!dfilter_entry_match_new(filter_cm,s, &index)){
+                       gtk_combo_box_prepend_text(GTK_COMBO_BOX(filter_cm), s);
+                       index++;
+               }
+               while ((guint)index >= prefs.gui_recent_df_entries_max){
+                       gtk_combo_box_remove_text(GTK_COMBO_BOX(filter_cm), index);
+                       index--;
+               }
+
+#else
+
         GList *li;
 
         while ((li = g_list_find_custom(dfilter_list, s, dfilter_entry_match)) != NULL)
@@ -446,8 +454,8 @@ main_filter_packets(capture_file *cf, const gchar *dftext, gboolean force)
         g_object_set_data(G_OBJECT(filter_cm), E_DFILTER_FL_KEY, dfilter_list);
         gtk_combo_set_popdown_strings(filter_cm, dfilter_list);
         gtk_entry_set_text(GTK_ENTRY(filter_cm->entry), g_list_first(dfilter_list)->data);
+#endif
     }
-
     if (free_filter)
         g_free(s);