// Motif-specific
WXAppContext GetAppContext() const { return m_appContext; }
WXWidget GetTopLevelWidget();
+ WXWidget GetTopLevelRealizedWidget();
WXColormap GetMainColormap(WXDisplay* display);
WXDisplay* GetInitialDisplay() const { return m_initialDisplay; }
void SetTopLevelWidget(WXDisplay* display, WXWidget widget);
+ void SetTopLevelRealizedWidget(WXDisplay* display,
+ WXWidget widget);
// This handler is called when a property change event occurs
virtual void HandlePropertyChange(WXEvent *event);
#pragma message disable nosimpint
#endif
#include <Xm/Xm.h>
+#include <Xm/Label.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xresource.h>
struct wxPerDisplayData
{
wxPerDisplayData()
- { m_visualInfo = NULL; m_topLevelWidget = NULL; }
+ {
+ m_visualInfo = NULL;
+ m_topLevelWidget = NULL;
+ m_topLevelRealizedWidget = NULL;
+ }
wxXVisualInfo* m_visualInfo;
- Widget m_topLevelWidget;
+ Widget m_topLevelWidget, m_topLevelRealizedWidget;
};
static void wxTLWidgetDestroyCallback(Widget w, XtPointer clientData,
XtPointer ptr)
{
if( wxTheApp )
+ {
wxTheApp->SetTopLevelWidget( (WXDisplay*)XtDisplay(w),
(WXWidget)NULL );
+ wxTheApp->SetTopLevelRealizedWidget( (WXDisplay*)XtDisplay(w),
+ (WXWidget)NULL );
+ }
}
WXWidget wxCreateTopLevelWidget( WXDisplay* display )
applicationShellWidgetClass,
(Display*)display,
NULL, 0 );
- XtSetMappedWhenManaged( tlw, False );
- XtRealizeWidget( tlw );
+ XtVaSetValues( tlw,
+ XmNoverrideRedirect, True,
+ NULL );
XtAddCallback( tlw, XmNdestroyCallback,
(XtCallbackProc)wxTLWidgetDestroyCallback,
return (WXWidget)tlw;
}
+WXWidget wxCreateTopLevelRealizedWidget( WXDisplay* display )
+{
+ Widget rTlw = XtVaCreateWidget( "dummy_widget", xmLabelWidgetClass,
+ (Widget)wxTheApp->GetTopLevelWidget(),
+ NULL);
+ XtSetMappedWhenManaged( rTlw, False );
+ XtRealizeWidget( rTlw );
+
+ return (WXWidget)rTlw;
+}
+
WXWidget wxApp::GetTopLevelWidget()
{
WXDisplay* display = wxGetDisplay();
return tlw;
}
+WXWidget wxApp::GetTopLevelRealizedWidget()
+{
+ WXDisplay* display = wxGetDisplay();
+ wxPerDisplayDataMap::iterator it = m_perDisplayData->find( display );
+
+ if( it != m_perDisplayData->end() && it->second->m_topLevelRealizedWidget )
+ return (WXWidget)it->second->m_topLevelRealizedWidget;
+
+ WXWidget rTlw = wxCreateTopLevelRealizedWidget( display );
+ SetTopLevelRealizedWidget( display, rTlw );
+
+ return rTlw;
+}
+
void wxApp::SetTopLevelWidget(WXDisplay* display, WXWidget widget)
{
- (*m_perDisplayData)[display]->m_topLevelWidget = (Widget)widget;
+ GetOrCreatePerDisplayData( *m_perDisplayData, display )
+ .m_topLevelWidget = (Widget)widget;
+}
+
+void wxApp::SetTopLevelRealizedWidget(WXDisplay* display, WXWidget widget)
+{
+ GetOrCreatePerDisplayData( *m_perDisplayData, display )
+ .m_topLevelRealizedWidget = (Widget)widget;
}
// Yield to other processes
m_data.Append( data );
Display* xdisplay = wxGlobalDisplay();
- Widget xwidget = (Widget)wxTheApp->GetTopLevelWidget();
+ Widget xwidget = (Widget)wxTheApp->GetTopLevelRealizedWidget();
Window xwindow = XtWindow( xwidget );
wxXmString label( wxTheApp->GetAppName() );
Time timestamp = XtLastTimestampProcessed( xdisplay );
bool wxClipboard::IsSupported(const wxDataFormat& format)
{
Display* xdisplay = wxGlobalDisplay();
- Window xwindow = XtWindow( (Widget)wxTheApp->GetTopLevelWidget() );
+ Window xwindow = XtWindow( (Widget)wxTheApp->GetTopLevelRealizedWidget() );
bool isSupported = false;
int retval, count;
unsigned long max_name_length;
wxCHECK_MSG( m_open, false, "clipboard not open" );
Display* xdisplay = wxGlobalDisplay();
- Window xwindow = XtWindow( (Widget)wxTheApp->GetTopLevelWidget() );
+ Window xwindow = XtWindow( (Widget)wxTheApp->GetTopLevelRealizedWidget() );
Time timestamp = XtLastTimestampProcessed( xdisplay );
wxDataFormat chosenFormat;