// that GTK+ < 2.4
#include "wx/generic/filepickerg.h"
-
-
//-----------------------------------------------------------------------------
// wxFileButton and wxDirButton shared code
// (cannot be a base class since they need to derive from wxGenericFileButton
// and from wxGenericDirButton classes !)
//-----------------------------------------------------------------------------
-#define FILEDIRBTN_OVERRIDES \
- /* NULL is because of a problem with destruction order which happens */ \
- /* if we pass GetParent(): in fact, this GTK native implementation */ \
- /* needs to create the dialog in ::Create() and not for each user request */ \
- /* in response to the user click as the generic implementation does */ \
- virtual wxWindow *GetDialogParent() \
- { \
- return NULL; \
- } \
- \
- virtual bool Destroy() \
- { \
- m_dialog->Destroy(); \
- return wxButton::Destroy(); \
- } \
- \
- virtual void SetPath(const wxString &str) \
- { \
- m_path=str; \
- UpdateDialogPath(m_dialog); \
- }
+#define FILEDIRBTN_OVERRIDES \
+ /* NULL is because of a problem with destruction order which happens */ \
+ /* if we pass GetParent(): in fact, this GTK native implementation */ \
+ /* needs to create the dialog in ::Create() and not for each user */ \
+ /* request in response to the user click as the generic implementation */ \
+ /* does. */ \
+ virtual wxWindow *GetDialogParent() \
+ { \
+ return NULL; \
+ } \
+ \
+ virtual bool Destroy() \
+ { \
+ if (m_dialog) \
+ m_dialog->Destroy(); \
+ return wxButton::Destroy(); \
+ } \
+ \
+ /* even if wx derive from wxGenericFileButton, i.e. from wxButton, our */ \
+ /* native GTK+ widget does not derive from GtkButton thus *all* uses */ \
+ /* GTK_BUTTON(m_widget) macro done by wxButton must be bypassed to */ \
+ /* avoid bunch of GTK+ warnings like: */ \
+ /* invalid cast from `GtkFileChooserButton' to `GtkButton' */ \
+ /* so, override wxButton::GTKGetWindow and return NULL as GTK+ doesn't */ \
+ /* give us access to the internal GdkWindow of a GtkFileChooserButton */ \
+protected: \
+ virtual GdkWindow * \
+ GTKGetWindow(wxArrayGdkWindows& WXUNUSED(windows)) const \
+ { return NULL; }
//-----------------------------------------------------------------------------
// event handler for the click
void OnDialogOK(wxCommandEvent &);
-
-public: // some overrides
-
- // GtkFileChooserButton does not support GTK_FILE_CHOOSER_ACTION_SAVE
- // so we replace it with GTK_FILE_CHOOSER_ACTION_OPEN; since wxFD_SAVE
- // is not supported, wxFD_OVERWRITE_PROMPT isn't too...
- virtual long GetDialogStyle() const
- {
- return (wxGenericFileButton::GetDialogStyle() &
- ~(wxFD_SAVE | wxFD_OVERWRITE_PROMPT)) | wxFD_OPEN;
- }
+ virtual void SetPath(const wxString &str);
// see macro defined above
FILEDIRBTN_OVERRIDES
protected:
+ virtual bool GTKShouldConnectSizeRequest() const { return false; }
+
wxDialog *m_dialog;
-private:
DECLARE_DYNAMIC_CLASS(wxFileButton)
};
class WXDLLIMPEXP_CORE wxDirButton : public wxGenericDirButton
{
public:
- wxDirButton() { m_dialog = NULL;}
+ wxDirButton() { Init(); }
wxDirButton(wxWindow *parent,
wxWindowID id,
const wxString& label = wxFilePickerWidgetLabel,
const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxFilePickerWidgetNameStr)
{
- m_dialog = NULL;
+ Init();
+
Create(parent, id, label, path, message, wxEmptyString,
pos, size, style, validator, name);
}
const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxFilePickerWidgetNameStr);
- // used by the GTK callback only
- void UpdatePath(char *gtkpath)
- { m_path = wxString::FromAscii(gtkpath); }
// GtkFileChooserButton does not support GTK_FILE_CHOOSER_CREATE_FOLDER
// thus we must ensure that the wxDD_DIR_MUST_EXIST style was given
return (wxGenericDirButton::GetDialogStyle() | wxDD_DIR_MUST_EXIST);
}
+ virtual void SetPath(const wxString &str);
+
// see macro defined above
FILEDIRBTN_OVERRIDES
protected:
+ // common part of all ctors
+ void Init()
+ {
+ m_dialog = NULL;
+ m_bIgnoreNextChange = false;
+ }
+
wxDialog *m_dialog;
+public: // used by the GTK callback only
+
+ bool m_bIgnoreNextChange;
+
+ void GTKUpdatePath(const char *gtkpath);
+
private:
DECLARE_DYNAMIC_CLASS(wxDirButton)
};