X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c282e47d8f2179954ca40688677961c169688084..12bb29f5432174ecbd65549bda832d70d34a98ae:/src/gtk/dirdlg.cpp diff --git a/src/gtk/dirdlg.cpp b/src/gtk/dirdlg.cpp index a877cbabfe..7372b32300 100644 --- a/src/gtk/dirdlg.cpp +++ b/src/gtk/dirdlg.cpp @@ -31,53 +31,15 @@ #include "wx/gtk/private.h" -#ifdef __UNIX__ -#include // chdir -#endif - -//----------------------------------------------------------------------------- -// "clicked" for OK-button -//----------------------------------------------------------------------------- - -extern "C" { -static void gtk_dirdialog_ok_callback(GtkWidget *widget, wxDirDialog *dialog) -{ - // change to the directory where the user went if asked - if (dialog->HasFlag(wxDD_CHANGE_DIR)) - { - wxGtkString filename(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget))); - chdir(filename); - } - - wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, wxID_OK); - event.SetEventObject(dialog); - dialog->HandleWindowEvent(event); -} -} - -//----------------------------------------------------------------------------- -// "clicked" for Cancel-button -//----------------------------------------------------------------------------- - extern "C" { -static void gtk_dirdialog_cancel_callback(GtkWidget *WXUNUSED(w), - wxDirDialog *dialog) -{ - wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, wxID_CANCEL); - event.SetEventObject(dialog); - dialog->HandleWindowEvent(event); -} -} - -extern "C" { -static void gtk_dirdialog_response_callback(GtkWidget *w, +static void gtk_dirdialog_response_callback(GtkWidget * WXUNUSED(w), gint response, wxDirDialog *dialog) { if (response == GTK_RESPONSE_ACCEPT) - gtk_dirdialog_ok_callback(w, dialog); + dialog->GTKOnAccept(); else // GTK_RESPONSE_CANCEL or GTK_RESPONSE_NONE - gtk_dirdialog_cancel_callback(w, dialog); + dialog->GTKOnCancel(); } } @@ -87,10 +49,6 @@ static void gtk_dirdialog_response_callback(GtkWidget *w, IMPLEMENT_DYNAMIC_CLASS(wxDirDialog, wxDialog) -BEGIN_EVENT_TABLE(wxDirDialog, wxDirDialogBase) - EVT_BUTTON(wxID_OK, wxDirDialog::OnFakeOk) -END_EVENT_TABLE() - wxDirDialog::wxDirDialog(wxWindow* parent, const wxString& title, const wxString& defaultPath, @@ -140,7 +98,7 @@ bool wxDirDialog::Create(wxWindow* parent, // gtk_widget_hide_on_delete is used here to avoid that Gtk automatically destroys // the dialog when the user press ESC on the dialog: in that case a second call to // ShowModal() would result in a bunch of Gtk-CRITICAL errors... - g_signal_connect (G_OBJECT(m_widget), + g_signal_connect (m_widget, "delete_event", G_CALLBACK (gtk_widget_hide_on_delete), (gpointer)this); @@ -156,17 +114,30 @@ bool wxDirDialog::Create(wxWindow* parent, G_CALLBACK (gtk_dirdialog_response_callback), this); if ( !defaultPath.empty() ) - gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER(m_widget), - wxGTK_CONV_FN(defaultPath) ); + SetPath(defaultPath); return true; } -void wxDirDialog::OnFakeOk(wxCommandEvent& WXUNUSED(event)) +void wxDirDialog::GTKOnAccept() { + wxGtkString str(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(m_widget))); + m_selectedDirectory = wxString::FromUTF8(str); + + // change to the directory where the user went if asked + if (HasFlag(wxDD_CHANGE_DIR)) + { + wxSetWorkingDirectory(m_selectedDirectory); + } + EndDialog(wxID_OK); } +void wxDirDialog::GTKOnCancel() +{ + EndDialog(wxID_CANCEL); +} + void wxDirDialog::DoSetSize(int x, int y, int width, int height, int sizeFlags) { if (!m_wxwindow) @@ -186,8 +157,7 @@ void wxDirDialog::SetPath(const wxString& dir) wxString wxDirDialog::GetPath() const { - wxGtkString str(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(m_widget))); - return wxString::FromUTF8(str); + return m_selectedDirectory; } #endif // wxUSE_DIRDLG