/// <summary>
        /// Disposes of this object, its toos, dialogs, shelves and workspaces.
        /// </summary>
        protected override void Dispose(bool disposing)
        {
            base.Dispose(disposing);

            if (disposing)
            {
                if (_desktopTools != null)
                {
                    _desktopTools.Dispose();
                }

                if (_dialogs != null)
                {
                    (_dialogs as IDisposable).Dispose();
                }

                if (_workspaces != null)
                {
                    (_workspaces as IDisposable).Dispose();
                }

                if (_shelves != null)
                {
                    (_shelves as IDisposable).Dispose();
                }

                // These types of objects (particularly tools) can subscribe to each other's events
                // so we set everything to null at the end to allow objects to unsubscribe on disposal.
                _desktopTools = null;
                _dialogs      = null;
                _workspaces   = null;
                _shelves      = null;
            }
        }
        /// <summary>
        /// Constructor.
        /// </summary>
        protected internal DesktopWindow(DesktopWindowCreationArgs args, Application application)
            : base(args)
        {
            _application = application;
            _workspaces  = new WorkspaceCollection(this);
            _shelves     = new ShelfCollection(this);
            _dialogs     = new DialogBoxCollection(this);

            // if no title supplied, create a default title
            _baseTitle = !string.IsNullOrEmpty(args.Title) ? args.Title : DefaultBaseTitle;

            _menuActionSite    = args.MenuSite ?? GlobalMenus;
            _toolbarActionSite = args.ToolbarSite ?? GlobalToolbars;
        }