diff --git a/include/wx/filedlg.h b/include/wx/filedlg.h index 14f667fa68..d1a451f657 100644 --- a/include/wx/filedlg.h +++ b/include/wx/filedlg.h @@ -48,7 +48,8 @@ enum wxFD_FILE_MUST_EXIST = 0x0010, wxFD_CHANGE_DIR = 0x0080, wxFD_PREVIEW = 0x0100, - wxFD_MULTIPLE = 0x0200 + wxFD_MULTIPLE = 0x0200, + wxFD_SHOW_HIDDEN = 0x0400 }; #define wxFD_DEFAULT_STYLE wxFD_OPEN diff --git a/include/wx/msw/missing.h b/include/wx/msw/missing.h index ec6b93efc8..e56a6bfa68 100644 --- a/include/wx/msw/missing.h +++ b/include/wx/msw/missing.h @@ -413,5 +413,9 @@ #define INVALID_FILE_ATTRIBUTES ((DWORD)-1) #endif +#ifndef OFN_FORCESHOWHIDDEN + #define OFN_FORCESHOWHIDDEN 0x10000000 +#endif + #endif // _WX_MISSING_H_ diff --git a/interface/wx/filedlg.h b/interface/wx/filedlg.h index 10715cb330..022686a6b8 100644 --- a/interface/wx/filedlg.h +++ b/interface/wx/filedlg.h @@ -14,7 +14,8 @@ enum wxFD_FILE_MUST_EXIST = 0x0010, wxFD_CHANGE_DIR = 0x0080, wxFD_PREVIEW = 0x0100, - wxFD_MULTIPLE = 0x0200 + wxFD_MULTIPLE = 0x0200, + wxFD_SHOW_HIDDEN = 0x0400 }; #define wxFD_DEFAULT_STYLE wxFD_OPEN @@ -141,6 +142,8 @@ const char wxFileSelectorDefaultWildcardStr[]; @style{wxFD_PREVIEW} Show the preview of the selected files (currently only supported by wxGTK). + @style{wxFD_SHOW_HIDDEN} + Show hidden files. This flag was added in wxWidgets 3.1.3 @endStyleTable @library{wxcore} diff --git a/samples/dialogs/dialogs.cpp b/samples/dialogs/dialogs.cpp index 7ccab36a73..6b9ef63ec8 100644 --- a/samples/dialogs/dialogs.cpp +++ b/samples/dialogs/dialogs.cpp @@ -1616,7 +1616,7 @@ void MyFrame::FileOpen2(wxCommandEvent& WXUNUSED(event) ) wxFileSelectorDefaultWildcardStr, wxFileSelectorDefaultWildcardStr ), - wxFD_OPEN|wxFD_CHANGE_DIR|wxFD_PREVIEW|wxFD_NO_FOLLOW, + wxFD_OPEN|wxFD_CHANGE_DIR|wxFD_PREVIEW|wxFD_NO_FOLLOW|wxFD_SHOW_HIDDEN, this ); diff --git a/src/gtk/filedlg.cpp b/src/gtk/filedlg.cpp index 05449efc65..d6dd123ac7 100644 --- a/src/gtk/filedlg.cpp +++ b/src/gtk/filedlg.cpp @@ -151,6 +151,21 @@ static void gtk_filedialog_update_preview_callback(GtkFileChooser *chooser, } // extern "C" +extern "C" +{ +static gboolean gtk_frame_map_callback( GtkFileChooser *file_chooser, + GdkEvent * WXUNUSED(event), + wxFileDialog *dlg ) +{ +/* if ( dlg->GetWindowStyle() & wxFD_SHOW_HIDDEN ) + gtk_file_chooser_set_show_hidden( file_chooser, TRUE ); + else + gtk_file_chooser_set_show_hidden( file_chooser, FALSE );*/ + gtk_file_chooser_set_show_hidden(file_chooser, dlg->HasFlag(wxFD_SHOW_HIDDEN)); + return FALSE; +} +} + void wxFileDialog::AddChildGTK(wxWindowGTK* child) { // allow dialog to be resized smaller horizontally @@ -275,7 +290,9 @@ bool wxFileDialog::Create(wxWindow *parent, const wxString& message, g_signal_connect (m_widget, "selection-changed", G_CALLBACK (gtk_filedialog_selchanged_callback), this); - // deal with extensions/filters + g_signal_connect (m_widget, "map_event", + G_CALLBACK (gtk_frame_map_callback), this); + // deal with extensions/filters SetWildcard(wildCard); wxString defaultFileNameWithExt = defaultFileName; diff --git a/src/msw/filedlg.cpp b/src/msw/filedlg.cpp index 1a3d3a5c91..ec0529c47d 100644 --- a/src/msw/filedlg.cpp +++ b/src/msw/filedlg.cpp @@ -443,6 +443,9 @@ int wxFileDialog::ShowModal() if ( HasFdFlag(wxFD_FILE_MUST_EXIST) ) msw_flags |= OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; + + if ( HasFlag(wxFD_SHOW_HIDDEN) ) + msw_flags |= OFN_FORCESHOWHIDDEN; /* If the window has been moved the programmer is probably trying to center or position it. Thus we set the callback diff --git a/src/osx/cocoa/filedlg.mm b/src/osx/cocoa/filedlg.mm index 24fdc457f7..6a43696b12 100644 --- a/src/osx/cocoa/filedlg.mm +++ b/src/osx/cocoa/filedlg.mm @@ -340,6 +340,7 @@ void wxFileDialog::ShowWindowModal() modalForWindow: nativeParent modalDelegate: m_sheetDelegate didEndSelector: @selector(sheetDidEnd:returnCode:contextInfo:) contextInfo: nil]; + [sPanel setShowsHiddenFiles: HasFlag(wxFD_SHOW_HIDDEN) ? YES : NO]; } else { @@ -360,6 +361,7 @@ void wxFileDialog::ShowWindowModal() modalDelegate: m_sheetDelegate didEndSelector: @selector(sheetDidEnd:returnCode:contextInfo:) contextInfo: nil]; + [oPanel setShowsHiddenFiles: HasFlag(wxFD_SHOW_HIDDEN) ? YES : NO]; } wxGCC_WARNING_RESTORE(deprecated-declarations) @@ -576,6 +578,7 @@ int wxFileDialog::ShowModal() [sPanel setCanSelectHiddenExtension:YES]; [sPanel setAllowedFileTypes:types]; [sPanel setAllowsOtherFileTypes:NO]; + [sPanel setShowsHiddenFiles: HasFlag(wxFD_SHOW_HIDDEN) ? YES : NO]; if ( HasFlag(wxFD_OVERWRITE_PROMPT) ) { @@ -609,6 +612,7 @@ int wxFileDialog::ShowModal() [oPanel setCanChooseFiles:YES]; [oPanel setMessage:cf.AsNSString()]; [oPanel setAllowsMultipleSelection: (HasFlag(wxFD_MULTIPLE) ? YES : NO )]; + [oPanel setShowsHiddenFiles: HasFlag(wxFD_SHOW_HIDDEN) ? YES : NO]; // Note that the test here is intentionally different from the one // above, in the wxFD_SAVE case: we need to call DoOnFilterSelected()