X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f04f570fd23deca0ee5ac90ebbda8fbe89f1b9e7..692a0709d32058c72b46ef0512bd4aee8f485b8a:/src/gtk/filedlg.cpp diff --git a/src/gtk/filedlg.cpp b/src/gtk/filedlg.cpp index 6ba8320312..ad0ac78a83 100644 --- a/src/gtk/filedlg.cpp +++ b/src/gtk/filedlg.cpp @@ -135,22 +135,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 +164,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 +189,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 +278,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,7 +286,7 @@ 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) @@ -298,7 +299,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 +312,8 @@ wxFileDialog::wxFileDialog(wxWindow *parent, const wxString& message, G_CALLBACK(gtk_filedialog_update_preview_callback), previewImage); } + + return true; } wxFileDialog::~wxFileDialog() @@ -371,10 +374,17 @@ void wxFileDialog::SetMessage(const wxString& message) void wxFileDialog::SetPath(const wxString& 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. + if ( path.empty() ) + return; + // we need an absolute path for GTK native chooser so ensure that we have - // it + // it: use the initial directory if it was set or just CWD otherwise (this + // is the default behaviour if m_dir is empty) wxFileName fn(path); - fn.MakeAbsolute(); + fn.MakeAbsolute(m_dir); m_fc.SetPath(fn.GetFullPath()); }