/// <summary> Dispose by parent. </summary> public override void DisposeByParent() { // Free shared ressources. if (_gc != IntPtr.Zero) { X11lib.XFreeGC(_display, _gc); _gc = IntPtr.Zero; } base.DisposeByParent(); }
/// <summary> Initialize local ressources for all constructors. </summary> /// <param name="assignedPosition"> The position of the top left top corner assigned by the window manager (for shell widgets) or geometry management (by non-shell widgets). Passed as reference to avoid structure copy constructor calls. <see cref="TPoint"/> </param> public void InitializeTransientShellResources(ref TPoint offset) { /* Get the colors black and white. */ TPixel black = X11lib.XBlackPixel(_display, _screenNumber); /* get color black */ TPixel white = X11lib.XWhitePixel(_display, _screenNumber); /* get color white */ /* Once the display is initialized, create the window. * It will have the foreground white and background black */ _window = X11lib.XCreateSimpleWindow(_display, X11lib.XDefaultRootWindow(_display), (TInt)offset.X, (TInt)offset.Y, (TUint)_assignedSize.Width, (TUint)_assignedSize.Height, 0, 0, black); if (_window == IntPtr.Zero) { Console.WriteLine(CLASS_NAME + "::InitializeTransientShellResources () ERROR. Can not create transient shell."); return; } X11lib.XSelectInput(_display, _window, EventMask.StructureNotifyMask | EventMask.ExposureMask | EventMask.ButtonPressMask | EventMask.ButtonReleaseMask | EventMask.EnterWindowMask | EventMask.LeaveWindowMask | EventMask.PointerMotionMask | EventMask.FocusChangeMask | EventMask.KeyPressMask | EventMask.KeyReleaseMask | EventMask.SubstructureNotifyMask); _hasOwnWindow = true; /* Hook the closing event from windows manager. */ _wmDeleteMessage = X11lib.XInternAtom(_display, "WM_DELETE_WINDOW", false); if (X11lib.XSetWMProtocols(_display, _window, ref _wmDeleteMessage, (X11.TInt) 1) == 0) { Console.WriteLine(CLASS_NAME + "::InitializeTransientShellResources () WARNING: Failed to register 'WM_DELETE_WINDOW' event."); } X11lib.XSetTransientForHint(_display, _window, Parent.Window); /* Recreate the foreground Graphics Context with. */ if (_gc != IntPtr.Zero) { if (XrwApplicationSettings.VERBOSE_OUTPUT_TO_CONSOLE) { Console.WriteLine(CLASS_NAME + "::InitializeTransientShellResources () Replace the foreground GC."); } X11lib.XFreeGC(_display, _gc); _gc = IntPtr.Zero; } _gc = X11lib.XCreateGC(_display, _window, 0, IntPtr.Zero); X11lib.XSetForeground(_display, _gc, white); }
/// <summary> Initialize local ressources for all constructors. </summary> /// <param name="assignedPosition"> The position of the top left top corner assigned by the window manager (for shell widgets) or geometry management (by non-shell widgets). Passed as reference to avoid structure copy constructor calls. <see cref="TPoint"/> </param> public void InitializeOverrideShellResources(ref TPoint assignedPosition) { TInt depth = X11lib.XDefaultDepth(_display, _screenNumber); X11lib.WindowAttributeMask mask = X11lib.WindowAttributeMask.CWOverrideRedirect | X11lib.WindowAttributeMask.CWSaveUnder; X11lib.XSetWindowAttributes attributes = new X11lib.XSetWindowAttributes(); attributes.override_redirect = (TBoolean)1; attributes.save_under = (TBoolean)1; _window = X11lib.XCreateWindow(_display, X11lib.XDefaultRootWindow(_display), (TInt)assignedPosition.X, (TInt)assignedPosition.Y, (TUint)_assignedSize.Width, (TUint)_assignedSize.Height, 0, depth, (TUint)X11lib.WindowClass.InputOutput, IntPtr.Zero, mask, ref attributes); if (_window == IntPtr.Zero) { Console.WriteLine(CLASS_NAME + "::InitializeOverrideShellResources () ERROR. Can not create menu shell."); return; } _hasOwnWindow = true; X11lib.XSelectInput(_display, _window, EventMask.ExposureMask | EventMask.ButtonPressMask | EventMask.ButtonReleaseMask | EventMask.EnterWindowMask | EventMask.LeaveWindowMask | EventMask.PointerMotionMask | EventMask.FocusChangeMask | EventMask.KeyPressMask | EventMask.KeyReleaseMask | EventMask.SubstructureNotifyMask); /* Create the foreground Graphics Context. */ if (_gc != IntPtr.Zero) { if (XrwApplicationSettings.VERBOSE_OUTPUT_TO_CONSOLE) { Console.WriteLine(CLASS_NAME + "::InitializeOverrideShellResources () Replace the foreground GC."); } X11lib.XFreeGC(_display, _gc); _gc = IntPtr.Zero; } _gc = X11lib.XCreateGC(_display, _window, 0, IntPtr.Zero); }