public void SetTitle(Gtk.Widget page, Gdk.Pixbuf icon, string label) { this.label = label; this.page = page; if (Child != null) { Gtk.Widget oc = Child; // keep a handle to the Child widget to prevent it from being garbage collected Remove(oc); // remove Child from parent. After this, Child==null oc.Destroy(); // now that no reference from the parent points to the child anymore, destroy it. //oc.Dispose(); // not sure if this is additionally needed to .Destroy() } Gtk.HBox box = new HBox(); box.Spacing = 2; if (icon != null) { tabIcon = new Gtk.Image(icon); tabIcon.Show(); box.PackStart(tabIcon, false, false, 0); } else { tabIcon = null; } if (!string.IsNullOrEmpty(label)) { labelWidget = new ExtendedLabel(label); labelWidget.DropShadowVisible = true; labelWidget.UseMarkup = true; box.PackStart(labelWidget, true, true, 0); } else { labelWidget = null; } btnDock = new ImageButton(); btnDock.Image = pixAutoHide; btnDock.TooltipText = "Minimize"; // previous text "Auto Hide" was misleading btnDock.CanFocus = false; // btnDock.WidthRequest = btnDock.HeightRequest = 17; btnDock.Clicked += OnClickDock; btnDock.ButtonPressEvent += (o, args) => args.RetVal = true; btnDock.WidthRequest = btnDock.SizeRequest().Width; btnClose = new ImageButton(); btnClose.Image = pixClose; btnClose.TooltipText = "Close"; btnClose.CanFocus = false; // btnClose.WidthRequest = btnClose.HeightRequest = 17; btnClose.WidthRequest = btnDock.SizeRequest().Width; btnClose.Clicked += delegate { item.Close(); }; btnClose.ButtonPressEvent += (o, args) => args.RetVal = true; Gtk.Alignment al = new Alignment(0, 0, 1, 1); HBox btnBox = new HBox(false, 3); btnBox.PackStart(btnDock, false, false, 0); btnBox.PackStart(btnClose, false, false, 0); al.Add(btnBox); al.LeftPadding = 3; al.TopPadding = 1; box.PackEnd(al, false, false, 0); Add(box); // Get the required size before setting the ellipsize property, since ellipsized labels // have a width request of 0 box.ShowAll(); Show(); UpdateBehavior(); UpdateVisualStyle(); }