#include "wx/gtk/private.h"
#include "wx/filedlg.h"
#include "wx/filename.h"
+#include "wx/scopeguard.h"
#include "wx/tokenzr.h"
//-----------------------------------------------------------------------------
GSList* ifilters = gtk_file_chooser_list_filters( chooser );
GSList* filters = ifilters;
+ m_ignoreNextFilterEvent = true;
+ wxON_BLOCK_EXIT_SET(m_ignoreNextFilterEvent, false);
+
while ( ifilters )
{
gtk_file_chooser_remove_filter( chooser, GTK_FILE_FILTER( ifilters->data ) );
return index;
}
+bool wxGtkFileChooser::HasFilterChoice() const
+{
+ return gtk_file_chooser_get_filter( m_widget ) != NULL;
+}
+
//-----------------------------------------------------------------------------
// end wxGtkFileChooser Implementation
//-----------------------------------------------------------------------------
}
}
+extern "C"
+{
+ static void
+ gtkfilechooserwidget_notify_callback( GObject *WXUNUSED( gobject ), GParamSpec *arg1, wxGtkFileCtrl *fileCtrl )
+ {
+ const char *name = g_param_spec_get_name (arg1);
+ if ( strcmp( name, "filter" ) == 0 &&
+ fileCtrl->HasFilterChoice() &&
+ !fileCtrl->GTKShouldIgnoreNextFilterEvent() )
+ {
+ GenerateFilterChangedEvent( fileCtrl, fileCtrl );
+ }
+ }
+}
+
// wxGtkFileCtrl implementation
IMPLEMENT_DYNAMIC_CLASS( wxGtkFileCtrl, wxControl )
G_CALLBACK ( gtkfilechooserwidget_selection_changed_callback ),
this );
+ g_signal_connect ( m_fcWidget, "notify",
+ G_CALLBACK ( gtkfilechooserwidget_notify_callback ),
+ this );
+
m_fc.SetWidget( m_fcWidget );
if ( style & wxFC_MULTIPLE )