From: Julian Smart Date: Tue, 5 Feb 2002 18:13:03 +0000 (+0000) Subject: First stabs at stripping out Xt/Motif code X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/7eaac9f513554791e1219c7062657624a8a91026 First stabs at stripping out Xt/Motif code git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14017 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/x11/app.h b/include/wx/x11/app.h index d3bc19d40b..66cdcb09a8 100644 --- a/include/wx/x11/app.h +++ b/include/wx/x11/app.h @@ -72,8 +72,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); @@ -97,9 +95,7 @@ public: void DeletePendingObjects(); bool ProcessIdle(); - // Motif-specific - WXAppContext GetAppContext() const { return m_appContext; } - WXWidget GetTopLevelWidget() const { return m_topLevelWidget; } + WXWindow GetTopLevelWidget() const { return m_topLevelWidget; } WXColormap GetMainColormap(WXDisplay* display); WXDisplay* GetInitialDisplay() const { return m_initialDisplay; } long GetMaxRequestSize() const { return m_maxRequestSize; } @@ -114,9 +110,7 @@ public: protected: bool m_keepGoing; - // Motif-specific - WXAppContext m_appContext; - WXWidget m_topLevelWidget; + WXWindow m_topLevelWidget; WXColormap m_mainColormap; WXDisplay* m_initialDisplay; long m_maxRequestSize; diff --git a/src/x11/app.cpp b/src/x11/app.cpp index 8b019fdf6e..7929a5e6ca 100644 --- a/src/x11/app.cpp +++ b/src/x11/app.cpp @@ -13,11 +13,6 @@ #pragma implementation "app.h" #endif -#ifdef __VMS -#define XtParent XTPARENT -#define XtDisplay XTDISPLAY -#endif - #include "wx/frame.h" #include "wx/app.h" #include "wx/utils.h" @@ -47,7 +42,6 @@ #ifdef __VMS__ #pragma message disable nosimpint #endif -#include #include #include #include @@ -56,7 +50,7 @@ #pragma message enable nosimpint #endif -#include "wx/motif/private.h" +#include "wx/x11/private.h" #include @@ -109,15 +103,6 @@ bool wxApp::Initialize() wxInitializeResourceSystem(); #endif - // For PostScript printing -#if wxUSE_POSTSCRIPT - /* Done using wxModule now - wxInitializePrintSetupData(); - wxThePrintPaperDatabase = new wxPrintPaperDatabase; - wxThePrintPaperDatabase->CreateDatabase(); - */ -#endif - wxBitmap::InitStandardHandlers(); wxWidgetHashTable = new wxHashTable(wxKEY_INTEGER); @@ -148,14 +133,6 @@ void wxApp::CleanUp() delete wxTheColourDatabase; wxTheColourDatabase = NULL; -#if wxUSE_POSTSCRIPT - /* Done using wxModule now - wxInitializePrintSetupData(FALSE); - delete wxThePrintPaperDatabase; - wxThePrintPaperDatabase = NULL; - */ -#endif - wxBitmap::CleanUpHandlers(); delete[] wxBuffer; @@ -278,10 +255,8 @@ wxApp::wxApp() argc = 0; argv = NULL; m_exitOnFrameDelete = TRUE; - m_mainColormap = (WXColormap) NULL; - m_appContext = (WXAppContext) NULL; - m_topLevelWidget = (WXWidget) NULL; + m_topLevelWidget = (WXWindow) NULL; m_maxRequestSize = 0; m_initialDisplay = (WXDisplay*) 0; } @@ -305,8 +280,8 @@ int wxApp::MainLoop() * use an Xt-eventhandler. */ - XSelectInput(XtDisplay((Widget) wxTheApp->GetTopLevelWidget()), - XDefaultRootWindow(XtDisplay((Widget) wxTheApp->GetTopLevelWidget())), + XSelectInput(wxGetDisplay(), + XDefaultRootWindow(wxGetDisplay()), PropertyChangeMask); XEvent event; @@ -314,11 +289,11 @@ int wxApp::MainLoop() // Use this flag to allow breaking the loop via wxApp::ExitMainLoop() while (m_keepGoing) { - XtAppNextEvent( (XtAppContext) wxTheApp->GetAppContext(), &event); + XNextEvent(wxGetDisplay(), & event); ProcessXEvent((WXEvent*) & event); - if (XtAppPending( (XtAppContext) wxTheApp->GetAppContext() ) == 0) + if (XtPending(wxGetDisplay()) == 0) { if (!ProcessIdle()) { @@ -341,52 +316,51 @@ int wxApp::MainLoop() void wxApp::ProcessXEvent(WXEvent* _event) { XEvent* event = (XEvent*) _event; - + if (event->type == KeyPress) { -#if 0 // def __WXDEBUG__ - Widget widget = XtWindowToWidget(event->xany.display, event->xany.window); - wxLogDebug("Got key press event for 0x%08x (parent = 0x%08x)", - widget, XtParent(widget)); -#endif // DEBUG - - if (CheckForAccelerator(_event)) - { + if (CheckForAccelerator(_event)) + { // Do nothing! We intercepted and processed the event as an // accelerator. return; - } + } #if 1 // It seemed before that this hack was redundant and // key down events were being generated by wxCanvasInputEvent. // But no longer - why ??? // - else if (CheckForKeyDown(_event)) - { + else if (CheckForKeyDown(_event)) + { // We intercepted and processed the key down event return; - } + } #endif - else - { - XtDispatchEvent(event); - return; - } + else + { + // TODO for X11 implementation -- the equivalent of XtDispatchEvent. + // Presumably, we need to form the wxEvents and + // and send them to the appropriate windows. + // XtDispatchEvent(event); + return; + } } else if (event->type == KeyRelease) { // TODO: work out why we still need this ! -michael // if (CheckForKeyUp(_event)) - { - // We intercepted and processed the key up event - return; - } - else - { - XtDispatchEvent(event); - return; - } + { + // We intercepted and processed the key up event + return; + } + else + { + // TODO: The X equivalent of XtDispatchEvent + // (see above) + // XtDispatchEvent(event); + return; + } } else if (event->type == PropertyNotify) { @@ -395,27 +369,29 @@ void wxApp::ProcessXEvent(WXEvent* _event) } else if (event->type == ResizeRequest) { - /* Terry Gitnick - 1/21/98 - * If resize event, don't resize until the last resize event for this - * window is recieved. Prevents flicker as windows are resized. - */ - - Display *disp = XtDisplay((Widget) wxTheApp->GetTopLevelWidget()); + /* Terry Gitnick - 1/21/98 + * If resize event, don't resize until the last resize event for this + * window is recieved. Prevents flicker as windows are resized. + */ + + Display *disp = wxGetDisplay(); Window win = event->xany.window; XEvent report; - + // to avoid flicker report = * event; while( XCheckTypedWindowEvent (disp, win, ResizeRequest, &report)); - + // TODO: when implementing refresh optimization, we can use // XtAddExposureToRegion to expand the window's paint region. - - XtDispatchEvent(event); + + // TODO: generate resize event + // XtDispatchEvent(event); } else { - XtDispatchEvent(event); + // TODO: generate all other events + // XtDispatchEvent(event); } } @@ -437,20 +413,16 @@ void wxApp::ExitMainLoop() // Is a message/event pending? bool wxApp::Pending() { - XFlush(XtDisplay( (Widget) wxTheApp->GetTopLevelWidget() )); + XFlush(wxGetDisplay()); - // Fix by Doug from STI, to prevent a stall if non-X event - // is found. - return ((XtAppPending( (XtAppContext) GetAppContext() ) & XtIMXEvent) != 0) ; + return (XPending(wxGetDisplay()) > 0); } // Dispatch a message. void wxApp::Dispatch() { - // XtAppProcessEvent( (XtAppContext) wxTheApp->GetAppContext(), XtIMAll); - XEvent event; - XtAppNextEvent((XtAppContext) GetAppContext(), &event); + XNextEvent(wxGetDisplay(), & event); ProcessXEvent((WXEvent*) & event); } @@ -459,7 +431,8 @@ void wxApp::Dispatch() void wxApp::HandlePropertyChange(WXEvent *event) { // by default do nothing special - XtDispatchEvent((XEvent*) event); /* let Motif do the work */ + // TODO: what to do for X11 + // XtDispatchEvent((XEvent*) event); /* let Motif do the work */ } void wxApp::OnIdle(wxIdleEvent& event) @@ -570,39 +543,28 @@ void wxApp::DeletePendingObjects() // Create an application context bool wxApp::OnInitGui() { - XtToolkitInitialize() ; - wxTheApp->m_appContext = (WXAppContext) XtCreateApplicationContext() ; - Display *dpy = XtOpenDisplay((XtAppContext) wxTheApp->m_appContext,(String)NULL,NULL, - (const char*) wxTheApp->GetClassName(), NULL, 0, -# if XtSpecificationRelease < 5 - (Cardinal*) &argc, -# else - &argc, -# endif - argv); + // TODO: parse argv and get display to pass to XOpenDisplay + Display* dpy = XOpenDisplay(NULL); + m_initialDisplay = (WXDisplay*) dpy; if (!dpy) { wxString className(wxTheApp->GetClassName()); wxLogError(_("wxWindows could not open display for '%s': exiting."), - (const char*) className); + (const char*) className); exit(-1); } - m_initialDisplay = (WXDisplay*) dpy; #ifdef __WXDEBUG__ // install the X error handler gs_pfnXErrorHandler = XSetErrorHandler(wxXErrorHandler); #endif // __WXDEBUG__ + // Do we need to create the top-level window initially? +#if 0 wxTheApp->m_topLevelWidget = (WXWidget) XtAppCreateShell((String)NULL, (const char*) wxTheApp->GetClassName(), applicationShellWidgetClass,dpy, NULL,0) ; - - // Add general resize proc - XtActionsRec rec; - rec.string = "resize"; - rec.proc = (XtActionProc)wxWidgetResizeProc; - XtAppAddActions((XtAppContext) wxTheApp->m_appContext, &rec, 1); +#endif GetMainColormap(dpy); m_maxRequestSize = XMaxRequestSize((Display*) dpy); @@ -626,6 +588,17 @@ WXColormap wxApp::GetMainColormap(WXDisplay* display) return (WXColormap) c; } +static Window XGetParent(Window window) +{ + Window parent, root = 0; + unsigned int noChildren = 0; + if (XQueryTree(wxGetDisplay(), window, & root, & parent, + NULL, & noChildren)) + return parent; + else + return (Window) 0; +} + // Returns TRUE if an accelerator has been processed bool wxApp::CheckForAccelerator(WXEvent* event) { @@ -634,18 +607,18 @@ bool wxApp::CheckForAccelerator(WXEvent* event) { // Find a wxWindow for this window // TODO: should get display for the window, not the current display - Widget widget = XtWindowToWidget((Display*) wxGetDisplay(), xEvent->xany.window); + Window window = xEvent->xany.window; wxWindow* win = NULL; // Find the first wxWindow that corresponds to this event window - while (widget && !(win = wxGetWindowFromTable(widget))) - widget = XtParent(widget); + while (window && !(win = wxGetWindowFromTable(window))) + window = XGetParent(window); - if (!widget || !win) + if (!window || !win) return FALSE; wxKeyEvent keyEvent(wxEVT_CHAR); - wxTranslateKeyEvent(keyEvent, win, (Widget) 0, xEvent); + wxTranslateKeyEvent(keyEvent, win, (Window) 0, xEvent); // Now we have a wxKeyEvent and we have a wxWindow. // Go up the hierarchy until we find a matching accelerator, @@ -666,23 +639,22 @@ bool wxApp::CheckForKeyDown(WXEvent* event) XEvent* xEvent = (XEvent*) event; if (xEvent->xany.type == KeyPress) { - Widget widget = XtWindowToWidget((Display*) wxGetDisplay(), - xEvent->xany.window); - wxWindow* win = NULL; - - // Find the first wxWindow that corresponds to this event window - while (widget && !(win = wxGetWindowFromTable(widget))) - widget = XtParent(widget); - - if (!widget || !win) + Window window = xEvent->xany.window; + wxWindow* win = NULL; + + // Find the first wxWindow that corresponds to this event window + while (window && !(win = wxGetWindowFromTable(window))) + window = XGetParent(window); + + if (!window || !win) return FALSE; - - wxKeyEvent keyEvent(wxEVT_KEY_DOWN); - wxTranslateKeyEvent(keyEvent, win, (Widget) 0, xEvent); - - return win->ProcessEvent( keyEvent ); + + wxKeyEvent keyEvent(wxEVT_KEY_DOWN); + wxTranslateKeyEvent(keyEvent, win, (Window) 0, xEvent); + + return win->ProcessEvent( keyEvent ); } - + return FALSE; } @@ -691,20 +663,19 @@ bool wxApp::CheckForKeyUp(WXEvent* event) XEvent* xEvent = (XEvent*) event; if (xEvent->xany.type == KeyRelease) { - Widget widget = XtWindowToWidget((Display*) wxGetDisplay(), - xEvent->xany.window); + Window window = xEvent->xany.window; wxWindow* win = NULL; - + // Find the first wxWindow that corresponds to this event window - while (widget && !(win = wxGetWindowFromTable(widget))) - widget = XtParent(widget); - - if (!widget || !win) - return FALSE; - + while (window && !(win = wxGetWindowFromTable(window))) + window = XGetParent(window); + + if (!window || !win) + return FALSE; + wxKeyEvent keyEvent(wxEVT_KEY_UP); - wxTranslateKeyEvent(keyEvent, win, (Widget) 0, xEvent); - + wxTranslateKeyEvent(keyEvent, win, (Window) 0, xEvent); + return win->ProcessEvent( keyEvent ); } @@ -790,7 +761,9 @@ wxApp::GetStdIcon(int which) const // accessors for C modules // ---------------------------------------------------------------------------- +#if 0 extern "C" XtAppContext wxGetAppContext() { return (XtAppContext)wxTheApp->GetAppContext(); } +#endif \ No newline at end of file diff --git a/src/x11/window.cpp b/src/x11/window.cpp index d0a7035d95..4af73494aa 100644 --- a/src/x11/window.cpp +++ b/src/x11/window.cpp @@ -2745,7 +2745,7 @@ bool wxTranslateMouseEvent(wxMouseEvent& wxevent, wxWindow *win, Widget widget, return FALSE; } -bool wxTranslateKeyEvent(wxKeyEvent& wxevent, wxWindow *win, Widget WXUNUSED(widget), XEvent *xevent) +bool wxTranslateKeyEvent(wxKeyEvent& wxevent, wxWindow *win, Window WXUNUSED(win), XEvent *xevent) { switch (xevent->xany.type) {