with names wx.lib, wx_d.lib, wx200.lib(dll), wx200_d.lib(dll).
- Added BC++ 5 IDE files and instructions.
- Fixed wxChoice, wxComboBox constructor bugs (m_noStrings initialisation).
+- Fixed focus-related crash.
wxMotif:
- Cured asynchronous wxExecute crash.
+- Added repaint event handlers to wxFrame, wxMDIChildFrame.
General:
- Use wxImage to load other formats into wxBitmaps, such as PNG, BMP.
+- Allow wxFrame and other widgets to have mouse event handlers.
+
Low Priority
------------
extern void wxDoChangeForegroundColour(WXWidget widget, wxColour& foregroundColour);
extern void wxDoChangeBackgroundColour(WXWidget widget, wxColour& backgroundColour, bool changeArmColour = FALSE);
+// For repainting arbitrary windows
+void wxUniversalRepaintProc(Widget w, XtPointer WXUNUSED(c_data), XEvent *event, char *);
+
#define wxNO_COLORS 0x00
#define wxBACK_COLORS 0x01
#define wxFORE_COLORS 0x02
wxWindow::~wxWindow()
{
- // Remove potential dangling pointer
- if (GetParent() && GetParent()->IsKindOf(CLASSINFO(wxPanel)))
- {
- wxPanel* panel = (wxPanel*) GetParent();
- if (panel->GetLastFocus() == this)
- panel->SetLastFocus((wxWindow*) NULL);
- }
-
m_hasVMT = FALSE;
#if wxUSE_DRAG_AND_DROP
wxWindow::~wxWindow()
{
- // Remove potential dangling pointer
- if (GetParent() && GetParent()->IsKindOf(CLASSINFO(wxPanel)))
- {
- wxPanel* panel = (wxPanel*) GetParent();
- if (panel->GetLastFocus() == this)
- panel->SetLastFocus((wxWindow*) NULL);
- }
-
m_hasVMT = FALSE;
#if wxUSE_DRAG_AND_DROP
#include "wx/motif/private.h"
static void wxCloseDialogCallback(Widget widget, XtPointer client_data, XmAnyCallbackStruct *cbs);
-static void wxDialogBoxRepaintProc(Widget w, XtPointer c_data, XEvent *event, char *);
static void wxDialogBoxEventHandler (Widget wid,
XtPointer client_data,
XEvent* event,
SetSize(pos.x, pos.y, size.x, size.y);
}
XtAddEventHandler(dialogShell,ExposureMask,FALSE,
- wxDialogBoxRepaintProc, (XtPointer) this);
+ wxUniversalRepaintProc, (XtPointer) this);
XtAddEventHandler(dialogShell,
ButtonPressMask | ButtonReleaseMask | PointerMotionMask | KeyPressMask,
wxDialog::~wxDialog()
{
+ if (m_mainWidget)
+ XtRemoveEventHandler((Widget) m_mainWidget, ExposureMask, FALSE,
+ wxUniversalRepaintProc, (XtPointer) this);
+
m_modalShowing = FALSE;
if (!wxUSE_INVISIBLE_RESIZE && m_mainWidget)
{
dialog->GetEventHandler()->ProcessEvent(closeEvent);
}
-// TODO: Preferably, we should have a universal repaint proc.
-// Meanwhile, use a special one for dialogs.
-static void wxDialogBoxRepaintProc(Widget w, XtPointer WXUNUSED(c_data), XEvent *event, char *)
-{
- Window window;
- Display *display;
-
- wxWindow* win = (wxWindow *)wxWidgetHashTable->Get((long)w);
- if (!win)
- return;
-
- switch(event -> type)
- {
- case Expose :
- {
- window = (Window) win -> GetXWindow();
- display = (Display *) win -> GetXDisplay();
-
- wxRect* rect = new wxRect(event->xexpose.x, event->xexpose.y,
- event->xexpose.width, event->xexpose.height);
- win->m_updateRects.Append((wxObject*) rect);
-
- if (event -> xexpose.count == 0)
- {
- win->DoPaint();
-
- win->ClearUpdateRects();
- }
- break;
- }
- default :
- {
- cout << "\n\nNew Event ! is = " << event -> type << "\n";
- break;
- }
- }
-}
-
-static void wxDialogBoxEventHandler (Widget wid,
+void wxDialogBoxEventHandler (Widget wid,
XtPointer WXUNUSED(client_data),
XEvent* event,
Boolean *continueToDispatch)
#include <Xm/AtomMgr.h>
#include <Xm/LabelG.h>
#include <Xm/Frame.h>
-#include <Xm/DrawingA.h>
#if XmVersion > 1000
#include <Xm/Protocols.h>
#endif
static void wxFrameMapProc(Widget frameShell, XtPointer clientData,
XCrossingEvent * event);
-// From wxWindow
-extern void wxCanvasRepaintProc (Widget, XtPointer, XmDrawingAreaCallbackStruct * cbs);
-extern void wxCanvasInputEvent (Widget drawingArea, XtPointer data, XmDrawingAreaCallbackStruct * cbs);
-
extern wxList wxModelessWindows;
extern wxList wxPendingDelete;
XmNbottomAttachment, XmATTACH_FORM,
// XmNresizePolicy, XmRESIZE_ANY,
NULL);
-
- XtAddCallback ((Widget) m_clientArea, XmNexposeCallback, (XtCallbackProc) wxCanvasRepaintProc, (XtPointer) this);
- XtAddCallback ((Widget) m_clientArea, XmNinputCallback, (XtCallbackProc) wxCanvasInputEvent, (XtPointer) this);
+ XtAddEventHandler((Widget) m_clientArea, ExposureMask,FALSE,
+ wxUniversalRepaintProc, (XtPointer) this);
+
XtVaSetValues((Widget) m_frameWidget,
XmNworkWindow, (Widget) m_workArea,
NULL);
wxFrame::~wxFrame()
{
+ if (m_clientArea)
+ XtRemoveEventHandler((Widget) m_clientArea, ExposureMask, FALSE,
+ wxUniversalRepaintProc, (XtPointer) this);
+
if (GetMainWidget())
Show(FALSE);
- XtRemoveCallback ((Widget) m_clientArea, XmNexposeCallback, (XtCallbackProc) wxCanvasRepaintProc, (XtPointer) this);
- XtRemoveCallback ((Widget) m_clientArea, XmNinputCallback, (XtCallbackProc) wxCanvasInputEvent, (XtPointer) this);
-
if (m_frameMenuBar)
{
m_frameMenuBar->DestroyMenuBar();
#include <Xm/CascadeBG.h>
#include <Xm/Text.h>
#include <Xm/PushBG.h>
-#include <Xm/DrawingA.h>
#include <Xm/AtomMgr.h>
#include <Xm/Protocols.h>
extern void wxFrameFocusProc(Widget workArea, XtPointer clientData,
XmAnyCallbackStruct *cbs);
-// From wxWindow
-extern void wxCanvasRepaintProc (Widget, XtPointer, XmDrawingAreaCallbackStruct * cbs);
-extern void wxCanvasInputEvent (Widget drawingArea, XtPointer data, XmDrawingAreaCallbackStruct * cbs);
-
#define wxID_NOTEBOOK_CLIENT_AREA wxID_HIGHEST + 100
#if !USE_SHARED_LIBRARY
*/
XmNresizePolicy, XmRESIZE_NONE,
NULL);
-
- XtAddCallback ((Widget) m_mainWidget, XmNexposeCallback, (XtCallbackProc) wxCanvasRepaintProc, (XtPointer) this);
+ XtAddEventHandler((Widget) m_mainWidget, ExposureMask,FALSE,
+ wxUniversalRepaintProc, (XtPointer) this);
+
SetCanAddEventHandler(TRUE);
AttachWidget (parent, m_mainWidget, (WXWidget) NULL, pos.x, pos.y, size.x, size.y);
wxMDIChildFrame::~wxMDIChildFrame()
{
- XtRemoveCallback ((Widget) m_mainWidget, XmNexposeCallback, (XtCallbackProc) wxCanvasRepaintProc, (XtPointer) this);
-
+ if (m_mainWidget)
+ XtRemoveEventHandler((Widget) m_mainWidget, ExposureMask,FALSE,
+ wxUniversalRepaintProc, (XtPointer) this);
+
if (GetMDIParentFrame())
{
wxMDIParentFrame* parentFrame = GetMDIParentFrame();
process_data->process->OnTerminate(process_data->pid, 0); // What should 'status' be?
process_data->end_process = TRUE;
-
+ /*
if (process_data->pid > 0) // synchronous
delete process_data;
else
process_data->pid = 0;
+ */
+ delete process_data;
}
long wxExecute(char **argv, bool sync, wxProcess *handler)
if (WIFEXITED(process_data->end_process) != 0)
{
-// delete process_data; // Double deletion
return WEXITSTATUS(process_data->end_process);
}
}
- delete process_data;
return pid;
#endif
// Destructor
wxWindow::~wxWindow()
{
- // Remove potential dangling pointer
- if (GetParent() && GetParent()->IsKindOf(CLASSINFO(wxPanel)))
- {
- wxPanel* panel = (wxPanel*) GetParent();
- if (panel->GetLastFocus() == this)
- panel->SetLastFocus((wxWindow*) NULL);
- }
-
//// Motif-specific
if (GetMainWidget())
return (m_count == 0);
}
+// For repainting arbitrary windows
+void wxUniversalRepaintProc(Widget w, XtPointer WXUNUSED(c_data), XEvent *event, char *)
+{
+ Window window;
+ Display *display;
+
+ wxWindow* win = (wxWindow *)wxWidgetHashTable->Get((long)w);
+ if (!win)
+ return;
+
+ switch(event -> type)
+ {
+ case Expose :
+ {
+ window = (Window) win -> GetXWindow();
+ display = (Display *) win -> GetXDisplay();
+
+ wxRect* rect = new wxRect(event->xexpose.x, event->xexpose.y,
+ event->xexpose.width, event->xexpose.height);
+ win->m_updateRects.Append((wxObject*) rect);
+
+ if (event -> xexpose.count == 0)
+ {
+ win->DoPaint();
+
+ win->ClearUpdateRects();
+ }
+ break;
+ }
+ default :
+ {
+ cout << "\n\nNew Event ! is = " << event -> type << "\n";
+ break;
+ }
+ }
+}
+