Add "filter changed" event to wxFileCtrl.

Generate an event when the selection in the filter combobox of wxFileCtrl
changes.

Closes #12099.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64429 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2010-05-29 10:35:47 +00:00
parent 384859f8c6
commit 6305f044a1
8 changed files with 96 additions and 1 deletions

View File

@@ -26,6 +26,7 @@
#include "wx/gtk/private.h"
#include "wx/filedlg.h"
#include "wx/filename.h"
#include "wx/scopeguard.h"
#include "wx/tokenzr.h"
//-----------------------------------------------------------------------------
@@ -126,6 +127,9 @@ void wxGtkFileChooser::SetWildcard( const wxString& wildCard )
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 ) );
@@ -201,6 +205,11 @@ int wxGtkFileChooser::GetFilterIndex() const
return index;
}
bool wxGtkFileChooser::HasFilterChoice() const
{
return gtk_file_chooser_get_filter( m_widget ) != NULL;
}
//-----------------------------------------------------------------------------
// end wxGtkFileChooser Implementation
//-----------------------------------------------------------------------------
@@ -257,6 +266,21 @@ extern "C"
}
}
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 )
@@ -311,6 +335,10 @@ bool wxGtkFileCtrl::Create( wxWindow *parent,
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 )