Implemented wxEventLoop for wxMotif, and used it in wxDialog::ShowModal,
wxWindow::DoPopupMenu and for the application main loop. Implemented wxWakeUpIdle. Fixed crash when a popup menu entry is used to close/destroy the parent window of the menu. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@19078 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -20,7 +20,6 @@
|
||||
// headers
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
#include "wx/gdicmn.h"
|
||||
#include "wx/event.h"
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
@@ -32,6 +31,7 @@ class WXDLLEXPORT wxWindow;
|
||||
class WXDLLEXPORT wxApp;
|
||||
class WXDLLEXPORT wxKeyEvent;
|
||||
class WXDLLEXPORT wxLog;
|
||||
class WXDLLEXPORT wxEventLoop;
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// the wxApp class for Motif - see wxAppBase for more details
|
||||
@@ -43,7 +43,7 @@ class WXDLLEXPORT wxApp : public wxAppBase
|
||||
|
||||
public:
|
||||
wxApp();
|
||||
~wxApp() {}
|
||||
virtual ~wxApp();
|
||||
|
||||
// override base class (pure) virtuals
|
||||
// -----------------------------------
|
||||
@@ -71,20 +71,6 @@ public:
|
||||
// Returns TRUE if more idle time is requested.
|
||||
bool SendIdleEvents(wxWindow* win);
|
||||
|
||||
// Motif implementation.
|
||||
|
||||
// Processes an X event.
|
||||
virtual void ProcessXEvent(WXEvent* event);
|
||||
|
||||
// Returns TRUE if an accelerator has been processed
|
||||
virtual bool CheckForAccelerator(WXEvent* event);
|
||||
|
||||
// Returns TRUE if a key down event has been processed
|
||||
virtual bool CheckForKeyDown(WXEvent* event);
|
||||
|
||||
// Returns TRUE if a key up event has been processed
|
||||
virtual bool CheckForKeyUp(WXEvent* event);
|
||||
|
||||
protected:
|
||||
bool m_showOnInit;
|
||||
|
||||
@@ -105,12 +91,11 @@ public:
|
||||
// This handler is called when a property change event occurs
|
||||
virtual void HandlePropertyChange(WXEvent *event);
|
||||
|
||||
public:
|
||||
private:
|
||||
static long sm_lastMessageTime;
|
||||
int m_nCmdShow;
|
||||
|
||||
protected:
|
||||
bool m_keepGoing;
|
||||
|
||||
wxEventLoop* m_eventLoop;
|
||||
|
||||
// Motif-specific
|
||||
WXAppContext m_appContext;
|
||||
|
@@ -18,6 +18,8 @@
|
||||
|
||||
WXDLLEXPORT_DATA(extern const char*) wxDialogNameStr;
|
||||
|
||||
class WXDLLEXPORT wxEventLoop;
|
||||
|
||||
// Dialog boxes
|
||||
class WXDLLEXPORT wxDialog : public wxDialogBase
|
||||
{
|
||||
@@ -102,6 +104,7 @@ private:
|
||||
|
||||
//// Motif-specific
|
||||
bool m_modalShowing;
|
||||
wxEventLoop* m_eventLoop;
|
||||
|
||||
protected:
|
||||
virtual void DoSetSize(int x, int y,
|
||||
|
@@ -93,7 +93,8 @@ public:
|
||||
WXWidget GetHandle() const { return m_menuWidget; }
|
||||
|
||||
bool IsTearOff() const { return (m_style & wxMENU_TEAROFF) != 0; }
|
||||
|
||||
|
||||
void DestroyWidgetAndDetach();
|
||||
public:
|
||||
// Motif-specific data
|
||||
int m_numColumns;
|
||||
|
@@ -25,10 +25,12 @@
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// All widgets should have this as their resize proc.
|
||||
extern void wxWidgetResizeProc(Widget w, XConfigureEvent *event, String args[], int *num_args);
|
||||
extern void wxWidgetResizeProc(Widget w, XConfigureEvent *event,
|
||||
String args[], int *num_args);
|
||||
|
||||
// For repainting arbitrary windows
|
||||
void wxUniversalRepaintProc(Widget w, XtPointer WXUNUSED(c_data), XEvent *event, char *);
|
||||
void wxUniversalRepaintProc(Widget w, XtPointer WXUNUSED(c_data),
|
||||
XEvent *event, char *);
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// we maintain a hash table which contains the mapping from Widget to wxWindow
|
||||
@@ -51,11 +53,17 @@ extern XmString wxFindAcceleratorText (const char *s);
|
||||
// ----------------------------------------------------------------------------
|
||||
// TranslateXXXEvent() functions - translate Motif event to wxWindow one
|
||||
// ----------------------------------------------------------------------------
|
||||
extern bool wxTranslateMouseEvent(wxMouseEvent& wxevent, wxWindow *win, Widget widget, XEvent *xevent);
|
||||
extern bool wxTranslateKeyEvent(wxKeyEvent& wxevent, wxWindow *win, Widget widget, XEvent *xevent);
|
||||
|
||||
extern void wxDoChangeForegroundColour(WXWidget widget, wxColour& foregroundColour);
|
||||
extern void wxDoChangeBackgroundColour(WXWidget widget, wxColour& backgroundColour, bool changeArmColour = FALSE);
|
||||
extern bool wxTranslateMouseEvent(wxMouseEvent& wxevent, wxWindow *win,
|
||||
Widget widget, XEvent *xevent);
|
||||
extern bool wxTranslateKeyEvent(wxKeyEvent& wxevent, wxWindow *win,
|
||||
Widget widget, XEvent *xevent);
|
||||
|
||||
extern void wxDoChangeForegroundColour(WXWidget widget,
|
||||
wxColour& foregroundColour);
|
||||
extern void wxDoChangeBackgroundColour(WXWidget widget,
|
||||
wxColour& backgroundColour,
|
||||
bool changeArmColour = FALSE);
|
||||
|
||||
#define wxNO_COLORS 0x00
|
||||
#define wxBACK_COLORS 0x01
|
||||
@@ -78,6 +86,11 @@ extern XColor itemColors[5] ;
|
||||
class wxXmString
|
||||
{
|
||||
public:
|
||||
wxXmString(const char* str)
|
||||
{
|
||||
m_string = XmStringCreateLtoR((char *)str, XmSTRING_DEFAULT_CHARSET);
|
||||
}
|
||||
|
||||
wxXmString(const wxString& str)
|
||||
{
|
||||
m_string = XmStringCreateLtoR((char *)str.c_str(),
|
||||
@@ -94,6 +107,15 @@ private:
|
||||
XmString m_string;
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// executes one main loop iteration (implemented in src/motif/evtloop.cpp)
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
class wxEventLoop;
|
||||
|
||||
// returns true if the loop should be exited
|
||||
bool wxDoEventLoopIteration( wxEventLoop& evtLoop );
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// macros to avoid casting WXFOO to Foo all the time
|
||||
// ----------------------------------------------------------------------------
|
||||
|
Reference in New Issue
Block a user