Fixed wxMotif's wxExecute again, added OnPaint capability to wxFrame,
removed old focus code from wxGTK's ~wxWindow git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1725 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
0492c5a094
commit
2e35f56f6d
@ -17,10 +17,12 @@ wxMSW:
|
||||
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:
|
||||
|
||||
|
@ -32,6 +32,8 @@ High Priority
|
||||
|
||||
- Use wxImage to load other formats into wxBitmaps, such as PNG, BMP.
|
||||
|
||||
- Allow wxFrame and other widgets to have mouse event handlers.
|
||||
|
||||
Low Priority
|
||||
------------
|
||||
|
||||
|
@ -41,6 +41,9 @@ extern int wxComputeColours (Display *display, wxColour * back, wxColour * fore)
|
||||
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
|
||||
|
@ -1526,14 +1526,6 @@ bool wxWindow::Create( wxWindow *parent, wxWindowID id,
|
||||
|
||||
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
|
||||
|
@ -1526,14 +1526,6 @@ bool wxWindow::Create( wxWindow *parent, wxWindowID id,
|
||||
|
||||
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
|
||||
|
@ -42,7 +42,6 @@
|
||||
#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,
|
||||
@ -231,7 +230,7 @@ bool wxDialog::Create(wxWindow *parent, wxWindowID id,
|
||||
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,
|
||||
@ -259,6 +258,10 @@ void wxDialog::SetModal(bool flag)
|
||||
|
||||
wxDialog::~wxDialog()
|
||||
{
|
||||
if (m_mainWidget)
|
||||
XtRemoveEventHandler((Widget) m_mainWidget, ExposureMask, FALSE,
|
||||
wxUniversalRepaintProc, (XtPointer) this);
|
||||
|
||||
m_modalShowing = FALSE;
|
||||
if (!wxUSE_INVISIBLE_RESIZE && m_mainWidget)
|
||||
{
|
||||
@ -615,45 +618,7 @@ static void wxCloseDialogCallback( Widget WXUNUSED(widget), XtPointer client_dat
|
||||
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)
|
||||
|
@ -44,7 +44,6 @@
|
||||
#include <Xm/AtomMgr.h>
|
||||
#include <Xm/LabelG.h>
|
||||
#include <Xm/Frame.h>
|
||||
#include <Xm/DrawingA.h>
|
||||
#if XmVersion > 1000
|
||||
#include <Xm/Protocols.h>
|
||||
#endif
|
||||
@ -57,10 +56,6 @@ void wxFrameFocusProc(Widget workArea, XtPointer clientData,
|
||||
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;
|
||||
|
||||
@ -194,10 +189,10 @@ bool wxFrame::Create(wxWindow *parent,
|
||||
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);
|
||||
@ -294,12 +289,13 @@ bool wxFrame::Create(wxWindow *parent,
|
||||
|
||||
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();
|
||||
|
@ -25,7 +25,6 @@
|
||||
#include <Xm/CascadeBG.h>
|
||||
#include <Xm/Text.h>
|
||||
#include <Xm/PushBG.h>
|
||||
#include <Xm/DrawingA.h>
|
||||
#include <Xm/AtomMgr.h>
|
||||
#include <Xm/Protocols.h>
|
||||
|
||||
@ -37,10 +36,6 @@ extern wxList wxModelessWindows;
|
||||
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
|
||||
@ -345,9 +340,10 @@ bool wxMDIChildFrame::Create(wxMDIParentFrame *parent,
|
||||
*/
|
||||
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);
|
||||
|
||||
@ -370,8 +366,10 @@ bool wxMDIChildFrame::Create(wxMDIParentFrame *parent,
|
||||
|
||||
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();
|
||||
|
@ -109,11 +109,13 @@ void xt_notify_end_process(XtPointer client, int *fid,
|
||||
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)
|
||||
@ -183,11 +185,9 @@ 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
|
||||
|
@ -144,14 +144,6 @@ wxWindow::wxWindow()
|
||||
// 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())
|
||||
@ -3588,3 +3580,40 @@ bool wxNoOptimize::CanOptimize()
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user