m_fsStyle = 0;
m_fsIsMaximized = FALSE;
m_fsIsShowing = FALSE;
+
+ m_focusWidget = NULL;
}
bool wxTopLevelWindowX11::Create(wxWindow *parent,
Window xparent = RootWindow( xdisplay, xscreen );
Colormap cm = DefaultColormap( xdisplay, xscreen );
- // TODO: For dialogs, this should be wxSYS_COLOUR_3DFACE
- m_backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE);
+ if (GetExtraStyle() & wxTOPLEVEL_EX_DIALOG)
+ m_backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE);
+ else
+ m_backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE);
m_backgroundColour.CalcPixel( (WXColormap) cm );
m_hasBgCol = TRUE;
+#if !wxUSE_NANOX
XSetWindowAttributes xattributes;
XSizeHints size_hints;
- XWMHints wm_hints;
long xattributes_mask =
CWOverrideRedirect |
CWBorderPixel | CWBackPixel;
+
xattributes.background_pixel = m_backgroundColour.GetPixel();
xattributes.border_pixel = BlackPixel( xdisplay, xscreen );
// TODO: if we want no border, caption etc.,
// I think we set this to True to remove decorations
+ // No. RR.
xattributes.override_redirect = False;
+#endif
wxSize size2(size);
if (size2.x == -1)
if (pos2.y == -1)
pos2.y = 100;
+#if wxUSE_NANOX
+ long backColor, foreColor;
+ backColor = GR_RGB(m_backgroundColour.Red(), m_backgroundColour.Green(), m_backgroundColour.Blue());
+ foreColor = GR_RGB(m_foregroundColour.Red(), m_foregroundColour.Green(), m_foregroundColour.Blue());
+
+ Window xwindow = XCreateWindowWithColor( xdisplay, xparent, pos2.x, pos2.y, size2.x, size2.y,
+ 0, 0, InputOutput, xvisual, backColor, foreColor);
+#else
Window xwindow = XCreateWindow( xdisplay, xparent, pos2.x, pos2.y, size2.x, size2.y,
- 0, DefaultDepth(xdisplay,xscreen), InputOutput, xvisual, xattributes_mask, &xattributes );
+ 0, DefaultDepth(xdisplay,xscreen), InputOutput, xvisual, xattributes_mask, &xattributes );
+#endif
m_mainWidget = (WXWindow) xwindow;
+ int extraFlags = 0;
+#if wxUSE_NANOX
+ extraFlags |= GR_EVENT_MASK_CLOSE_REQ;
+#endif
+
XSelectInput( xdisplay, xwindow,
- ExposureMask | KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask |
+ extraFlags | ExposureMask | KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask |
ButtonMotionMask | EnterWindowMask | LeaveWindowMask | PointerMotionMask |
KeymapStateMask | FocusChangeMask | ColormapChangeMask | StructureNotifyMask |
PropertyChangeMask );
// background completely.
XSetWindowBackgroundPixmap( xdisplay, xwindow, None );
- // Messes up window management
- // XSetTransientForHint( xdisplay, xwindow, xparent );
+#if !wxUSE_NANOX
+ if (GetExtraStyle() & wxTOPLEVEL_EX_DIALOG)
+ {
+ if (GetParent() && GetParent()->GetMainWindow())
+ {
+ Window xparentwindow = (Window) GetParent()->GetMainWindow();
+ XSetTransientForHint( xdisplay, xwindow, xparentwindow );
+ }
+ }
- size_hints.flags = PSize;
+ size_hints.flags = PSize | PPosition;
+ size_hints.x = pos2.x;
+ size_hints.y = pos2.y;
size_hints.width = size2.x;
size_hints.height = size2.y;
XSetWMNormalHints( xdisplay, xwindow, &size_hints);
+ XWMHints wm_hints;
wm_hints.flags = InputHint | StateHint /* | WindowGroupHint */;
wm_hints.input = True;
wm_hints.initial_state = NormalState;
XSetWMHints( xdisplay, xwindow, &wm_hints);
+
+ Atom wm_protocols[2];
+ wm_protocols[0] = XInternAtom( xdisplay, "WM_DELETE_WINDOW", False );
+ wm_protocols[1] = XInternAtom( xdisplay, "WM_TAKE_FOCUS", False );
+ XSetWMProtocols( xdisplay, xwindow, wm_protocols, 2);
+#endif
- Atom wm_delete_window = XInternAtom( xdisplay, "WM_DELETE_WINDOW", False);
- XSetWMProtocols( xdisplay, xwindow, &wm_delete_window, 1);
-
- wxSetWMDecorations((Window) GetMainWindow(), style);
+ wxSetWMDecorations( xwindow, style);
SetTitle(title);
if (icon.Ok() && GetMainWindow())
{
+#if wxUSE_NANOX
+#else
XWMHints *wmHints = XAllocWMHints();
wmHints->icon_pixmap = (Pixmap) icon.GetPixmap();
XSetWMHints(wxGlobalDisplay(), (Window) GetMainWindow(), wmHints);
XFree(wmHints);
+#endif
}
}
// given wxWindows style
bool wxSetWMDecorations(Window w, long style)
{
+#if wxUSE_NANOX
+ GR_WM_PROPERTIES wmProp;
+
+ wmProp.flags = 0;
+
+ if (style & wxRESIZE_BORDER)
+ {
+ wmProp.props |= GR_WM_PROPS_APPFRAME ;
+ wmProp.flags |= GR_WM_FLAGS_PROPS ;
+ }
+
+ if (style & wxSYSTEM_MENU)
+ {
+ wmProp.props |= GR_WM_PROPS_CLOSEBOX ;
+ wmProp.flags |= GR_WM_FLAGS_PROPS ;
+ }
+
+ if ((style & wxCAPTION) ||
+ (style & wxTINY_CAPTION_HORIZ) ||
+ (style & wxTINY_CAPTION_VERT))
+ {
+ wmProp.props |= GR_WM_PROPS_CAPTION ;
+ wmProp.flags |= GR_WM_FLAGS_PROPS ;
+ }
+
+ if (style & wxTHICK_FRAME)
+ {
+ wmProp.props |= GR_WM_PROPS_APPFRAME ;
+ wmProp.flags |= GR_WM_FLAGS_PROPS ;
+ }
+
+ if (style & wxSIMPLE_BORDER)
+ {
+ wmProp.props |= GR_WM_PROPS_BORDER ;
+ wmProp.flags |= GR_WM_FLAGS_PROPS ;
+ }
+
+ if (style & wxMINIMIZE_BOX)
+ {
+ }
+
+ if (style & wxMAXIMIZE_BOX)
+ {
+ wmProp.props |= GR_WM_PROPS_MAXIMIZE ;
+ wmProp.flags |= GR_WM_FLAGS_PROPS ;
+ }
+
+ if (((style & wxBORDER) != wxBORDER) && ((style & wxTHICK_FRAME) != wxTHICK_FRAME)
+ && ((style & wxRESIZE_BORDER) != wxRESIZE_BORDER))
+ {
+ wmProp.props |= GR_WM_PROPS_NODECORATE ;
+ wmProp.flags |= GR_WM_FLAGS_PROPS ;
+ }
+
+ GrSetWMProperties(w, & wmProp);
+
+#else
if (!wxMWMIsRunning(w))
return FALSE;
32, PropModeReplace,
(unsigned char *) &hints, PROP_MOTIF_WM_HINTS_ELEMENTS);
+#endif
return TRUE;
}
bool wxMWMIsRunning(Window w)
{
+#if wxUSE_NANOX
+ return FALSE;
+#else
Display *dpy = (Display*)wxGetDisplay();
Atom motifWmInfo = XInternAtom(dpy, "_MOTIF_WM_INFO", False);
&type, &format, &length, &bytesafter, &ptr);
return (ret == Success);
+#endif
}
// For implementation purposes - sometimes decorations make the client area
int offsetX = 0;
int offsetY = 0;
+#if !wxUSE_NANOX
wxLogDebug("Translating...");
Window childWindow;
XTranslateCoordinates(wxGlobalDisplay(), window, XDefaultRootWindow(wxGlobalDisplay()),
wxString msg;
msg.Printf("Offset: %d, %d", offsetX, offsetY);
wxLogDebug(msg);
+#endif
XWindowAttributes attr;
Status status = XGetWindowAttributes(wxGlobalDisplay(), window, & attr);