cgtk4

Properly finalizing a GTK4 file filter


(Using GTK 4.8 on Debian)

I created a file filter for specific image suffixes:

GtkFileFilter *file_filter = gtk_file_filter_new ();
gtk_file_filter_add_suffix (file_filter, "png");
gtk_file_filter_add_suffix (file_filter, "jpg");
gtk_file_filter_add_suffix (file_filter, "gif");

I then associated the file filter with a file chooser.

gtk_file_chooser_set_filter (GTK_FILE_CHOOSER(file_chooser), file_filter );

How do I properly finalize the file filter?

I ask because the second option, g_object_unref(file_filter), gives me a runtime error g_object_unref: assertion 'G_IS_OBJECT (object)' failed.


Solution

  • This can be done like this --

      //1.Default filter (all files) 
      GtkFileFilter *filter = gtk_file_filter_new ();
      gtk_file_filter_set_name (filter, "All Files");
      gtk_file_filter_add_pattern (filter, "*");
      gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter);
    
      // Make this filter the default 
      gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (dialog), filter);
      g_object_unref (filter);
    
      //2.filter start with D**
      filter = gtk_file_filter_new ();
      gtk_file_filter_set_name (filter, "Starts with D");
      gtk_file_filter_add_pattern (filter, "D*");
      gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter);
      g_object_unref (filter);
    
      //3.filter jpeg & png
      filter = gtk_file_filter_new ();
      gtk_file_filter_set_name (filter, "PNG and JPEG");
      gtk_file_filter_add_mime_type (filter, "image/jpeg");
      gtk_file_filter_add_mime_type (filter, "image/png");
      gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter);
      g_object_unref (filter);
    

    NOTE: According to the current Gtk4 documentation; GtkFileChooser - Deprecated since: 4.10,,Use GtkFileDialog.