void ShowPlaceholder(DockToolbar bar, bool horz, int x, int y, int w, int h)
        {
            if (orientation != Orientation.Horizontal)
                horz = !horz;

            PanelToWindow (x, y, w, h, out x, out y, out w, out h);

            bool created = false;

            if (placeholder == null || horz != currentPlaceholderHorz) {
                HidePlaceholder ();
                placeholder = new PlaceholderWindow (parentFrame);
                placeholderArrow1 = new ArrowWindow (parentFrame, horz ? ArrowWindow.Direction.Right : ArrowWindow.Direction.Down);
                placeholderArrow2 = new ArrowWindow (parentFrame, horz ? ArrowWindow.Direction.Left : ArrowWindow.Direction.Up);
                currentPlaceholderHorz = horz;
                created = true;
            }

            int sx, sy;
            this.GdkWindow.GetOrigin (out sx, out sy);
            sx += x;
            sy += y;

            int mg = -4;
            placeholder.Move (sx - mg, sy - mg);
            placeholder.Resize (w + mg*2, h + mg * 2);

            if (horz) {
                placeholderArrow1.Move (sx - placeholderArrow1.Width, sy + (h/2) - placeholderArrow1.Height/2);
                placeholderArrow2.Move (sx + w, sy + (h/2) - placeholderArrow1.Height/2);
            } else {
                int px = sx + w/2 - placeholderArrow1.Width/2;
                if (px < 0) px = 0;
                placeholderArrow1.Move (px, sy - placeholderArrow1.Height);
                placeholderArrow2.Move (px, sy + h);
            }

            if (created) {
                placeholder.Show ();
                placeholder.Present ();
                if (bar.FloatingDock != null)
                    bar.FloatingDock.Present ();
                placeholderArrow1.Present ();
                placeholderArrow2.Present ();
            }
        }
        void HidePlaceholder()
        {
            if (placeholder == null) return;
            placeholder.Destroy ();
            placeholder = null;
            placeholderArrow1.Destroy ();
            placeholderArrow1 = null;
            placeholderArrow2.Destroy ();
            placeholderArrow2 = null;

            if (dropRow != -1 && !dropNewRow) {
                RestoreShiftedBars (dropRow);
                dropRow = -1;
            }
        }