X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/dea43e6ee3fef4b91e864d866e1e92f06990c750..4e15d1caa03346c126015019c1fdf093033ef40b:/src/gtk/filedlg.cpp diff --git a/src/gtk/filedlg.cpp b/src/gtk/filedlg.cpp index 85118048ed..28f087c246 100644 --- a/src/gtk/filedlg.cpp +++ b/src/gtk/filedlg.cpp @@ -29,6 +29,7 @@ #include "wx/filename.h" // wxFilename #include "wx/tokenzr.h" // wxStringTokenizer #include "wx/filefn.h" // ::wxGetCwd +#include "wx/testing.h" //----------------------------------------------------------------------------- // "clicked" for OK-button @@ -41,6 +42,7 @@ static void gtk_filedialog_ok_callback(GtkWidget *widget, wxFileDialog *dialog) wxGtkString filename(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget))); // gtk version numbers must be identical with the one in ctor (that calls set_do_overwrite_confirmation) +#ifndef __WXGTK3__ #if GTK_CHECK_VERSION(2,7,3) if (gtk_check_version(2, 7, 3) != NULL) #endif @@ -62,6 +64,7 @@ static void gtk_filedialog_ok_callback(GtkWidget *widget, wxFileDialog *dialog) } } } +#endif if (style & wxFD_FILE_MUST_EXIST) { @@ -135,22 +138,12 @@ static void gtk_filedialog_update_preview_callback(GtkFileChooser *chooser, } // extern "C" -//----------------------------------------------------------------------------- -// "size_request" from m_extraControl -//----------------------------------------------------------------------------- - -extern "C" { -static void extra_widget_size_request(GtkWidget*, GtkRequisition* req, wxWindow* win) +void wxFileDialog::AddChildGTK(wxWindowGTK* child) { // allow dialog to be resized smaller horizontally - req->width = win->GetMinWidth(); -} -} + gtk_widget_set_size_request( + child->m_widget, child->GetMinWidth(), child->m_height); -void wxFileDialog::AddChildGTK(wxWindowGTK* child) -{ - g_signal_connect_after(child->m_widget, "size_request", - G_CALLBACK(extra_widget_size_request), child); gtk_file_chooser_set_extra_widget( GTK_FILE_CHOOSER(m_widget), child->m_widget); } @@ -174,13 +167,24 @@ wxFileDialog::wxFileDialog(wxWindow *parent, const wxString& message, const wxSize& sz, const wxString& name) : wxFileDialogBase() +{ + Create(parent, message, defaultDir, defaultFileName, wildCard, style, pos, sz, name); +} + +bool wxFileDialog::Create(wxWindow *parent, const wxString& message, + const wxString& defaultDir, + const wxString& defaultFileName, + const wxString& wildCard, + long style, const wxPoint& pos, + const wxSize& sz, + const wxString& name) { parent = GetParentForModalDialog(parent, style); if (!wxFileDialogBase::Create(parent, message, defaultDir, defaultFileName, wildCard, style, pos, sz, name)) { - return; + return false; } if (!PreCreation(parent, pos, wxDefaultSize) || @@ -188,7 +192,7 @@ wxFileDialog::wxFileDialog(wxWindow *parent, const wxString& message, wxDefaultValidator, wxT("filedialog"))) { wxFAIL_MSG( wxT("wxFileDialog creation failed") ); - return; + return false; } GtkFileChooserAction gtk_action; @@ -277,7 +281,7 @@ wxFileDialog::wxFileDialog(wxWindow *parent, const wxString& message, const wxString dir = fn.GetPath(); if ( !dir.empty() ) { - gtk_file_chooser_set_current_folder(file_chooser, dir.fn_str()); + gtk_file_chooser_set_current_folder(file_chooser, wxGTK_CONV_FN(dir)); } const wxString fname = fn.GetFullName(); @@ -285,12 +289,18 @@ wxFileDialog::wxFileDialog(wxWindow *parent, const wxString& message, { if ( !fname.empty() ) { - gtk_file_chooser_set_current_name(file_chooser, fname.fn_str()); + gtk_file_chooser_set_current_name(file_chooser, wxGTK_CONV_FN(fname)); } #if GTK_CHECK_VERSION(2,7,3) - if ((style & wxFD_OVERWRITE_PROMPT) && !gtk_check_version(2,7,3)) + if ((style & wxFD_OVERWRITE_PROMPT) +#ifndef __WXGTK3__ + && gtk_check_version(2,7,3) == NULL +#endif + ) + { gtk_file_chooser_set_do_overwrite_confirmation(file_chooser, true); + } #endif } else // wxFD_OPEN @@ -298,7 +308,7 @@ wxFileDialog::wxFileDialog(wxWindow *parent, const wxString& message, if ( !fname.empty() ) { gtk_file_chooser_set_filename(file_chooser, - fn.GetFullPath().fn_str()); + wxGTK_CONV_FN(fn.GetFullPath())); } } @@ -311,6 +321,8 @@ wxFileDialog::wxFileDialog(wxWindow *parent, const wxString& message, G_CALLBACK(gtk_filedialog_update_preview_callback), previewImage); } + + return true; } wxFileDialog::~wxFileDialog() @@ -331,6 +343,8 @@ void wxFileDialog::OnFakeOk(wxCommandEvent& WXUNUSED(event)) int wxFileDialog::ShowModal() { + WX_TESTING_SHOW_MODAL_HOOK(); + CreateExtraControl(); return wxDialog::ShowModal(); @@ -371,6 +385,8 @@ void wxFileDialog::SetMessage(const wxString& message) void wxFileDialog::SetPath(const wxString& path) { + wxFileDialogBase::SetPath(path); + // Don't do anything if no path is specified, in particular don't set the // path to m_dir below as this would result in opening the dialog in the // parent directory of this one instead of m_dir itself. @@ -387,12 +403,9 @@ void wxFileDialog::SetPath(const wxString& path) void wxFileDialog::SetDirectory(const wxString& dir) { - if (m_fc.SetDirectory( dir )) - { - // Cache the dir, as gtk_file_chooser_get_current_folder() - // doesn't return anything until the dialog has been shown - m_dir = dir; - } + wxFileDialogBase::SetDirectory(dir); + + m_fc.SetDirectory(dir); } wxString wxFileDialog::GetDirectory() const @@ -409,10 +422,11 @@ wxString wxFileDialog::GetDirectory() const void wxFileDialog::SetFilename(const wxString& name) { + wxFileDialogBase::SetFilename(name); + if (HasFdFlag(wxFD_SAVE)) { gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(m_widget), wxGTK_CONV(name)); - m_fileName = name; } else @@ -424,7 +438,6 @@ void wxFileDialog::SetFilename(const wxString& name) return; } SetPath(wxFileName(path, name).GetFullPath()); - m_fileName = name; } }