diff --git a/Makefile.in b/Makefile.in index f3d26522cf..5394eb0c22 100644 --- a/Makefile.in +++ b/Makefile.in @@ -410,6 +410,7 @@ preinstall: $(build_libdir)/@WX_TARGET_LIBRARY@ $(top_builddir)/wx@TOOLCHAIN_NAM $(INSTALL) -d $(libdir)/wx $(INSTALL) -d $(libdir)/wx/include + $(INSTALL) -d $(libdir)/wx/include/univ $(INSTALL) -d $(libdir)/wx/include/@TOOLCHAIN_NAME@ $(INSTALL) -d $(libdir)/wx/include/@TOOLCHAIN_NAME@/wx $(INSTALL_DATA) $(build_libdir)/wx/include/@TOOLCHAIN_NAME@/wx/setup.h \ @@ -420,6 +421,7 @@ preinstall: $(build_libdir)/@WX_TARGET_LIBRARY@ $(top_builddir)/wx@TOOLCHAIN_NAM @if test "$(USE_GUI)" = 1; then $(INSTALL) -d $(includedir)/wx/@TOOLKIT_DIR@; fi @if test "$(USE_GUI)" = 1; then $(INSTALL) -d $(includedir)/wx/html; fi @if test "$(USE_GUI)" = 1; then $(INSTALL) -d $(includedir)/wx/generic; fi + @if test "$(USE_GUI)" = 1; then $(INSTALL) -d $(includedir)/wx/univ; fi @if test "@TOOLKIT_DIR@" = "msw"; then $(INSTALL) -d $(includedir)/wx/msw/ole; fi @# always install msw headers for wxBase, it's much simpler @@ -510,6 +512,7 @@ uninstall: @if test -d $(includedir)/wx/msw; then rmdir $(includedir)/wx/msw; fi @if test -d $(includedir)/wx/html; then rmdir $(includedir)/wx/html; fi @if test -d $(includedir)/wx/unix; then rmdir $(includedir)/wx/unix; fi + @if test -d $(includedir)/wx/univ; then rmdir $(includedir)/wx/univ; fi @if test -d $(includedir)/wx/generic; then rmdir $(includedir)/wx/generic; fi @if test -d $(includedir)/wx/protocol; then rmdir $(includedir)/wx/protocol; fi @if test -d $(includedir)/wx; then rmdir $(includedir)/wx; fi diff --git a/src/x11/toplevel.cpp b/src/x11/toplevel.cpp index be70734bf3..779bb40699 100644 --- a/src/x11/toplevel.cpp +++ b/src/x11/toplevel.cpp @@ -108,24 +108,56 @@ bool wxTopLevelWindowX11::Create(wxWindow *parent, m_windowId = id == -1 ? NewControlId() : id; wxTopLevelWindows.Append(this); - - Atom wm_delete_window = XInternAtom(wxGlobalDisplay(), "WM_DELETE_WINDOW", False); + + Display *xdisplay = wxGlobalDisplay(); + int xscreen = DefaultScreen( xdisplay ); + Visual *xvisual = DefaultVisual( xdisplay, xscreen ); + Window xparent = RootWindow( xdisplay, xscreen ); + + XSetWindowAttributes xattributes; + XSizeHints size_hints; + XWMHints wm_hints; + + long xattributes_mask = + CWEventMask | + CWBorderPixel | CWBackPixel; + xattributes.background_pixel = BlackPixel( xdisplay, xscreen ); + xattributes.border_pixel = BlackPixel( xdisplay, xscreen ); + xattributes.override_redirect = False; + + Window xwindow = XCreateWindow( xdisplay, xparent, pos.x, pos.y, size.x, size.y, + 0, DefaultDepth(xdisplay,xscreen), InputOutput, xvisual, xattributes_mask, &xattributes ); + + XSelectInput( xdisplay, xwindow, + ExposureMask | KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask | + ButtonMotionMask | EnterWindowMask | LeaveWindowMask | PointerMotionMask | + KeymapStateMask | FocusChangeMask | ColormapChangeMask | StructureNotifyMask | + PropertyChangeMask ); - XSetWMProtocols(wxGlobalDisplay(), (Window) GetMainWindow(), &wm_delete_window, 1); + wxAddWindowToTable( xwindow, (wxWindow*) this ); + + XSetTransientForHint( xdisplay, xwindow, xparent ); + + size_hints.flags = PSize; + size_hints.width = size.x; + size_hints.height = size.y; + XSetWMNormalHints( xdisplay, xwindow, &size_hints); + + wm_hints.flags = InputHint | StateHint /* | WindowGroupHint */; + wm_hints.input = True; + wm_hints.initial_state = NormalState; + XSetWMHints( xdisplay, xwindow, &wm_hints); + + Atom wm_delete_window = XInternAtom( xdisplay, "WM_DELETE_WINDOW", False); + XSetWMProtocols( xdisplay, xwindow, &wm_delete_window, 1); + #if 0 SetWMDecorations((Window) GetMainWindow(), style); #endif SetTitle(title); - - if ( GetExtraStyle() & wxTOPLEVEL_EX_DIALOG ) - { - return CreateDialog(title, pos, size); - } - else // !dialog - { - return CreateFrame(title, pos, size); - } + + return TRUE; } wxTopLevelWindowX11::~wxTopLevelWindowX11()