예제 #1
0
        //destroy everything but our tray icon, main window, and our notification bubble
        private void DestroyMostlyEverything()
        {
            if (hbox != null)
            {
                hbox.Destroy();
            }

            if (vbox != null)
            {
                vbox.Destroy();
            }

            if (newi != null)
            {
                newi.Destroy();
            }

            if (menuBar != null)
            {
                menuBar.Destroy();
            }

            if (filemenu != null)
            {
                filemenu.Destroy();
            }

            if (file != null)
            {
                file.Destroy();
            }

            if (sep != null)
            {
                sep.Destroy();
            }

            if (exit != null)
            {
                exit.Destroy();
            }

            if (uploadButton != null)
            {
                uploadButton.Destroy();
            }

            if (toCropBox != null)
            {
                toCropBox.Destroy();
            }

            if (agr != null)
            {
                agr.Dispose();
            }
        }
예제 #2
0
		internal void ShowDockPopupMenu (uint time)
		{
			Menu menu = new Menu ();
			
			// Hide menuitem
			if ((Behavior & DockItemBehavior.CantClose) == 0) {
				MenuItem mitem = new MenuItem (Catalog.GetString("Hide"));
				mitem.Activated += delegate { Visible = false; };
				menu.Append (mitem);
			}

			MenuItem citem;

			// Auto Hide menuitem
			if ((Behavior & DockItemBehavior.CantAutoHide) == 0 && Status != DockItemStatus.AutoHide) {
				citem = new MenuItem (Catalog.GetString("Minimize"));
				citem.Activated += delegate { Status = DockItemStatus.AutoHide; };
				menu.Append (citem);
			}

			if (Status != DockItemStatus.Dockable) {
				// Dockable menuitem
				citem = new MenuItem (Catalog.GetString("Dock"));
				citem.Activated += delegate { Status = DockItemStatus.Dockable; };
				menu.Append (citem);
			}

			// Floating menuitem
			if ((Behavior & DockItemBehavior.NeverFloating) == 0 && Status != DockItemStatus.Floating) {
				citem = new MenuItem (Catalog.GetString("Undock"));
				citem.Activated += delegate { Status = DockItemStatus.Floating; };
				menu.Append (citem);
			}

			if (menu.Children.Length == 0) {
				menu.Destroy ();
				return;
			}

			ShowingContextMemu = true;

			menu.ShowAll ();
			menu.Hidden += (o,e) => {
				ShowingContextMemu = false;
			};
			menu.Popup (null, null, null, 3, time);
		}
예제 #3
0
		public Menu CreateOptionsMenu ()
		{
			Menu menu = new Menu ();
			
			MenuItem searchInMenu = new MenuItem (GettextCatalog.GetString ("_Search in"));
			Menu sub = new Menu ();
			searchInMenu.Submenu = sub;
			Gtk.RadioMenuItem  original = null, translated = null, both = null;
			GLib.SList group = new GLib.SList (IntPtr.Zero);
			original = new Gtk.RadioMenuItem (group, GettextCatalog.GetString ("_Original"));
			group = original.Group;
			original.ButtonPressEvent += delegate { original.Activate (); };
			sub.Append (original);
			
			translated = new Gtk.RadioMenuItem (group, GettextCatalog.GetString ("_Translated"));
			translated.ButtonPressEvent += delegate { translated.Activate (); };
			group = translated.Group;
			sub.Append (translated);
			
			both = new Gtk.RadioMenuItem (group, GettextCatalog.GetString ("_Both"));
			both.ButtonPressEvent += delegate { both.Activate (); };
			sub.Append (both);
			switch (DoSearchIn) {
			case SearchIn.Both:
				both.Activate ();
				break;
			case SearchIn.Original:
				original.Activate ();
				break;
			case SearchIn.Translated:
				translated.Activate ();
				break;
			}
			menu.Append (searchInMenu);
			both.Activated += delegate {
				if (DoSearchIn != SearchIn.Both) {
					DoSearchIn = SearchIn.Both;
					UpdateFromCatalog ();
					menu.Destroy ();
				}
			};
			original.Activated += delegate {
				if (DoSearchIn != SearchIn.Original) {
					DoSearchIn = SearchIn.Original;
					UpdateFromCatalog ();
					menu.Destroy ();
				}
			};
			translated.Activated += delegate {
				if (DoSearchIn != SearchIn.Translated) {
					DoSearchIn = SearchIn.Translated;
					UpdateFromCatalog ();
					menu.Destroy ();
				}
			};
			
			Gtk.CheckMenuItem regexSearch = new Gtk.CheckMenuItem (MonoDevelop.Core.GettextCatalog.GetString ("_Regex search"));
			regexSearch.Active = RegexSearch;
			regexSearch.ButtonPressEvent += delegate { 
				RegexSearch = !RegexSearch;
				UpdateFromCatalog ();
			};
			menu.Append (regexSearch);
			
			Gtk.CheckMenuItem caseSensitive = new Gtk.CheckMenuItem (MonoDevelop.Core.GettextCatalog.GetString ("_Case sensitive"));
			caseSensitive.Active = IsCaseSensitive;
			caseSensitive.ButtonPressEvent += delegate { 
				IsCaseSensitive = !IsCaseSensitive;
				UpdateFromCatalog ();
			};
			menu.Append (caseSensitive);
			
			Gtk.CheckMenuItem wholeWordsOnly = new Gtk.CheckMenuItem (MonoDevelop.Core.GettextCatalog.GetString ("_Whole words only"));
			wholeWordsOnly.Active = IsWholeWordOnly;
			wholeWordsOnly.Sensitive = !RegexSearch;
			wholeWordsOnly.ButtonPressEvent += delegate {
				IsWholeWordOnly = !IsWholeWordOnly;
				UpdateFromCatalog ();
			};
			menu.Append (wholeWordsOnly);
			menu.ShowAll ();
			return menu;
		}
		void PopupQuickFixMenu (Gdk.EventButton evt, Action<Gtk.Menu> menuAction)
		{
			var menu = new Gtk.Menu ();
			menu.Events |= Gdk.EventMask.AllEventsMask;
			Gtk.Menu fixMenu = menu;
			ResolveResult resolveResult;
			ICSharpCode.NRefactory.CSharp.AstNode node;
			int items = 0;
			if (ResolveCommandHandler.ResolveAt (document, out resolveResult, out node)) {
				var possibleNamespaces = MonoDevelop.Refactoring.ResolveCommandHandler.GetPossibleNamespaces (
					document,
					node,
					ref resolveResult
				);

				foreach (var t in possibleNamespaces.Where (tp => tp.OnlyAddReference)) {
					var menuItem = new Gtk.MenuItem (t.GetImportText ());
					menuItem.Activated += delegate {
						new ResolveCommandHandler.AddImport (document, resolveResult, null, t.Reference, true, node).Run ();
						menu.Destroy ();
					};
					menu.Add (menuItem);
					items++;
				}

				bool addUsing = !(resolveResult is AmbiguousTypeResolveResult);
				if (addUsing) {
					foreach (var t in possibleNamespaces.Where (tp => tp.IsAccessibleWithGlobalUsing)) {
						string ns = t.Namespace;
						var reference = t.Reference;
						var menuItem = new Gtk.MenuItem (t.GetImportText ());
						menuItem.Activated += delegate {
							new ResolveCommandHandler.AddImport (document, resolveResult, ns, reference, true, node).Run ();
							menu.Destroy ();
						};
						menu.Add (menuItem);
						items++;
					}
				}

				bool resolveDirect = !(resolveResult is UnknownMemberResolveResult);
				if (resolveDirect) {
					foreach (var t in possibleNamespaces) {
						string ns = t.Namespace;
						var reference = t.Reference;
						var menuItem = new Gtk.MenuItem (t.GetInsertNamespaceText (document.Editor.GetTextBetween (node.StartLocation, node.EndLocation)));
						menuItem.Activated += delegate {
							new ResolveCommandHandler.AddImport (document, resolveResult, ns, reference, false, node).Run ();
							menu.Destroy ();
						};
						menu.Add (menuItem);
						items++;
					}
				}

				if (menu.Children.Any () && Fixes.Any ()) {
					fixMenu = new Gtk.Menu ();
					var menuItem = new Gtk.MenuItem (GettextCatalog.GetString ("Quick Fixes"));
					menuItem.Submenu = fixMenu;
					menu.Add (menuItem);
					items++;
				}
			}

			PopulateFixes (fixMenu, ref items);
			if (items == 0) {
				menu.Destroy ();
				return;
			}
			document.Editor.SuppressTooltips = true;
			document.Editor.Parent.HideTooltip ();
			if (menuAction != null)
				menuAction (menu);
			menu.ShowAll ();
			menu.SelectFirst (true);
			menu.Hidden += delegate {
				document.Editor.SuppressTooltips = false;
			};
			var container = document.Editor.Parent;

			var p = container.LocationToPoint (currentSmartTagBegin);
			var rect = new Gdk.Rectangle (
				p.X + container.Allocation.X , 
				p.Y + (int)document.Editor.LineHeight + container.Allocation.Y, 0, 0);
			GtkWorkarounds.ShowContextMenu (menu, document.Editor.Parent, null, rect);
		}
        public void PopulateFixes(Gtk.Menu menu, ref int items)
        {
            int  mnemonic = 1;
            bool gotImportantFix = false, addedSeparator = false;
            var  fixesAdded = new List <string> ();

            foreach (var fix_ in Fixes.OrderByDescending(i => Tuple.Create(IsAnalysisOrErrorFix(i), (int)i.Severity, GetUsage(i.IdString))))
            {
                // filter out code actions that are already resolutions of a code issue
                if (fixesAdded.Any(f => fix_.IdString.IndexOf(f, StringComparison.Ordinal) >= 0))
                {
                    continue;
                }
                fixesAdded.Add(fix_.IdString);
                if (IsAnalysisOrErrorFix(fix_))
                {
                    gotImportantFix = true;
                }
                if (!addedSeparator && gotImportantFix && !IsAnalysisOrErrorFix(fix_))
                {
                    menu.Add(new Gtk.SeparatorMenuItem());
                    addedSeparator = true;
                }

                var fix          = fix_;
                var escapedLabel = fix.Title.Replace("_", "__");
                var label        = (mnemonic <= 10)
                                        ? "_" + (mnemonic++ % 10).ToString() + " " + escapedLabel
                                        : "  " + escapedLabel;
                var thisInstanceMenuItem = new MenuItem(label);
                thisInstanceMenuItem.Activated += new ContextActionRunner(fix, document, currentSmartTagBegin).Run;
                thisInstanceMenuItem.Activated += delegate {
                    ConfirmUsage(fix.IdString);
                    menu.Destroy();
                };
                menu.Add(thisInstanceMenuItem);
                items++;
            }

            bool first             = true;
            var  settingsMenuFixes = Fixes
                                     .OfType <AnalysisContextActionProvider.AnalysisCodeAction> ()
                                     .Where(f => f.Result is InspectorResults)
                                     .GroupBy(f => ((InspectorResults)f.Result).Inspector);

            foreach (var analysisFixGroup_ in settingsMenuFixes)
            {
                var analysisFixGroup    = analysisFixGroup_;
                var arbitraryFixInGroup = analysisFixGroup.First();
                var ir = (InspectorResults)arbitraryFixInGroup.Result;

                if (first)
                {
                    menu.Add(new Gtk.SeparatorMenuItem());
                    first = false;
                }

                var subMenu = new Gtk.Menu();
                foreach (var analysisFix_ in analysisFixGroup)
                {
                    var analysisFix = analysisFix_;
                    if (analysisFix.SupportsBatchRunning)
                    {
                        var batchRunMenuItem = new Gtk.MenuItem(string.Format(GettextCatalog.GetString("Apply in file: {0}"), analysisFix.Title));
                        batchRunMenuItem.Activated += delegate {
                            ConfirmUsage(analysisFix.IdString);
                            menu.Destroy();
                        };
                        batchRunMenuItem.Activated += new ContextActionRunner(analysisFix, document, this.currentSmartTagBegin).BatchRun;
                        subMenu.Add(batchRunMenuItem);
                        subMenu.Add(new Gtk.SeparatorMenuItem());
                    }
                }

                var inspector = ir.Inspector;
                if (inspector.CanSuppressWithAttribute)
                {
                    var menuItem = new Gtk.MenuItem(GettextCatalog.GetString("_Suppress with attribute"));
                    menuItem.Activated += delegate {
                        inspector.SuppressWithAttribute(document, arbitraryFixInGroup.DocumentRegion);
                    };
                    subMenu.Add(menuItem);
                }

                if (inspector.CanDisableWithPragma)
                {
                    var menuItem = new Gtk.MenuItem(GettextCatalog.GetString("_Suppress with #pragma"));
                    menuItem.Activated += delegate {
                        inspector.DisableWithPragma(document, arbitraryFixInGroup.DocumentRegion);
                    };
                    subMenu.Add(menuItem);
                }

                if (inspector.CanDisableOnce)
                {
                    var menuItem = new Gtk.MenuItem(GettextCatalog.GetString("_Disable Once"));
                    menuItem.Activated += delegate {
                        inspector.DisableOnce(document, arbitraryFixInGroup.DocumentRegion);
                    };
                    subMenu.Add(menuItem);
                }

                if (inspector.CanDisableAndRestore)
                {
                    var menuItem = new Gtk.MenuItem(GettextCatalog.GetString("Disable _and Restore"));
                    menuItem.Activated += delegate {
                        inspector.DisableAndRestore(document, arbitraryFixInGroup.DocumentRegion);
                    };
                    subMenu.Add(menuItem);
                }
                var label       = GettextCatalog.GetString("_Options for \"{0}\"", InspectorResults.GetTitle(ir.Inspector));
                var subMenuItem = new Gtk.MenuItem(label);

                var optionsMenuItem = new Gtk.MenuItem(GettextCatalog.GetString("_Configure Rule"));
                optionsMenuItem.Activated += arbitraryFixInGroup.ShowOptions;

                optionsMenuItem.Activated += delegate {
                    menu.Destroy();
                };
                subMenu.Add(optionsMenuItem);
                subMenuItem.Submenu = subMenu;
                menu.Add(subMenuItem);
                items++;
            }
        }
        void PopupQuickFixMenu(Gdk.EventButton evt, Action <Gtk.Menu> menuAction)
        {
            var menu = new Gtk.Menu();

            menu.Events |= Gdk.EventMask.AllEventsMask;
            Gtk.Menu      fixMenu = menu;
            ResolveResult resolveResult;

            ICSharpCode.NRefactory.CSharp.AstNode node;
            int items = 0;

            if (ResolveCommandHandler.ResolveAt(document, out resolveResult, out node))
            {
                var possibleNamespaces = MonoDevelop.Refactoring.ResolveCommandHandler.GetPossibleNamespaces(
                    document,
                    node,
                    ref resolveResult
                    );

                foreach (var t in possibleNamespaces.Where(tp => tp.OnlyAddReference))
                {
                    var menuItem = new Gtk.MenuItem(t.GetImportText());
                    menuItem.Activated += delegate {
                        new ResolveCommandHandler.AddImport(document, resolveResult, null, t.Reference, true, node).Run();
                        menu.Destroy();
                    };
                    menu.Add(menuItem);
                    items++;
                }

                bool addUsing = !(resolveResult is AmbiguousTypeResolveResult);
                if (addUsing)
                {
                    foreach (var t in possibleNamespaces.Where(tp => tp.IsAccessibleWithGlobalUsing))
                    {
                        string ns        = t.Namespace;
                        var    reference = t.Reference;
                        var    menuItem  = new Gtk.MenuItem(t.GetImportText());
                        menuItem.Activated += delegate {
                            new ResolveCommandHandler.AddImport(document, resolveResult, ns, reference, true, node).Run();
                            menu.Destroy();
                        };
                        menu.Add(menuItem);
                        items++;
                    }
                }

                bool resolveDirect = !(resolveResult is UnknownMemberResolveResult);
                if (resolveDirect)
                {
                    foreach (var t in possibleNamespaces)
                    {
                        string ns        = t.Namespace;
                        var    reference = t.Reference;
                        var    menuItem  = new Gtk.MenuItem(t.GetInsertNamespaceText(document.Editor.GetTextBetween(node.StartLocation, node.EndLocation)));
                        menuItem.Activated += delegate {
                            new ResolveCommandHandler.AddImport(document, resolveResult, ns, reference, false, node).Run();
                            menu.Destroy();
                        };
                        menu.Add(menuItem);
                        items++;
                    }
                }

                if (menu.Children.Any() && Fixes.Any())
                {
                    fixMenu = new Gtk.Menu();
                    var menuItem = new Gtk.MenuItem(GettextCatalog.GetString("Quick Fixes"));
                    menuItem.Submenu = fixMenu;
                    menu.Add(menuItem);
                    items++;
                }
            }

            PopulateFixes(fixMenu, ref items);
            if (items == 0)
            {
                menu.Destroy();
                return;
            }
            document.Editor.SuppressTooltips = true;
            document.Editor.Parent.HideTooltip();
            if (menuAction != null)
            {
                menuAction(menu);
            }
            menu.ShowAll();
            menu.SelectFirst(true);
            menu.Hidden += delegate {
                document.Editor.SuppressTooltips = false;
            };
            var container = document.Editor.Parent;

            var p    = container.LocationToPoint(currentSmartTagBegin);
            var rect = new Gdk.Rectangle(
                p.X + container.Allocation.X,
                p.Y + (int)document.Editor.LineHeight + container.Allocation.Y, 0, 0);

            GtkWorkarounds.ShowContextMenu(menu, document.Editor.Parent, null, rect);
        }
        // options menu for filterSearchEntry
        public Menu CreateOptionsMenu()
        {
            Menu menu = new Menu ();

            MenuItem searchInMenu = new MenuItem (GettextCatalog.GetString ("_Search in"));
            Menu sub = new Menu ();
            searchInMenu.Submenu = sub;

            Gtk.RadioMenuItem  name = null, baseValue = null, value =null, comment = null, all = null;
            GLib.SList group = new GLib.SList (IntPtr.Zero);

            name = new Gtk.RadioMenuItem (group, GettextCatalog.GetString ("_Name"));
            group = name.Group;
            name.ButtonPressEvent += delegate { name.Activate (); };
            sub.Append (name);

            baseValue = new Gtk.RadioMenuItem (group, GettextCatalog.GetString ("_Base Value"));
            baseValue.ButtonPressEvent += delegate { baseValue.Activate (); };
            group = baseValue.Group;
            sub.Append (baseValue);

            value = new Gtk.RadioMenuItem (group, GettextCatalog.GetString ("_Value"));
            value.ButtonPressEvent += delegate { value.Activate (); };
            group = value.Group;
            sub.Append (value);

            comment = new Gtk.RadioMenuItem (group, GettextCatalog.GetString ("_Comment"));
            comment.ButtonPressEvent += delegate { comment.Activate (); };
            group = comment.Group;
            sub.Append (comment);

            all = new Gtk.RadioMenuItem (group, GettextCatalog.GetString ("_All"));
            all.ButtonPressEvent += delegate { all.Activate (); };
            sub.Append (all);

            switch (DoSearchIn) {
            case SearchIn.All:
                all.Activate ();
                break;
            case SearchIn.BaseValue:
                baseValue.Activate ();
                break;
            case SearchIn.Value:
                value.Activate ();
                break;
            case SearchIn.Name:
                name.Activate ();
                break;
            case SearchIn.Comment:
                comment.Activate ();
                break;
            }
            menu.Append (searchInMenu);
            all.Activated += delegate {
                if (DoSearchIn != SearchIn.All) {
                    DoSearchIn = SearchIn.All;
                    Refresh ();
                    menu.Destroy ();
                }
            };
            baseValue.Activated += delegate {
                if (DoSearchIn != SearchIn.BaseValue) {
                    DoSearchIn = SearchIn.BaseValue;
                    Refresh ();
                    menu.Destroy ();
                }
            };
            value.Activated += delegate {
                if (DoSearchIn != SearchIn.Value) {
                    DoSearchIn = SearchIn.Value;
                    Refresh ();
                    menu.Destroy ();
                }
            };
            name.Activated += delegate {
                if (DoSearchIn != SearchIn.Name) {
                    DoSearchIn = SearchIn.Name;
                    Refresh ();
                    menu.Destroy ();
                }
            };
            comment.Activated += delegate {
                if (DoSearchIn != SearchIn.Comment) {
                    DoSearchIn = SearchIn.Comment;
                    Refresh ();
                    menu.Destroy ();
                }
            };

            Gtk.CheckMenuItem regexSearch = new Gtk.CheckMenuItem (MonoDevelop.Core.GettextCatalog.GetString ("_Regex search"));
            regexSearch.Active = RegexSearch;
            regexSearch.ButtonPressEvent += delegate {
                RegexSearch = !RegexSearch;
                Refresh ();
            };
            menu.Append (regexSearch);

            Gtk.CheckMenuItem caseSensitive = new Gtk.CheckMenuItem (MonoDevelop.Core.GettextCatalog.GetString ("_Case sensitive"));
            caseSensitive.Active = IsCaseSensitive;
            caseSensitive.ButtonPressEvent += delegate {
                IsCaseSensitive = !IsCaseSensitive;
                Refresh ();
            };
            menu.Append (caseSensitive);

            Gtk.CheckMenuItem wholeWordsOnly = new Gtk.CheckMenuItem (MonoDevelop.Core.GettextCatalog.GetString ("_Whole words only"));
            wholeWordsOnly.Active = IsWholeWordOnly;
            wholeWordsOnly.Sensitive = !RegexSearch;
            wholeWordsOnly.ButtonPressEvent += delegate {
                IsWholeWordOnly = !IsWholeWordOnly;
                Refresh ();
            };
            menu.Append (wholeWordsOnly);
            menu.ShowAll ();
            return menu;
        }
예제 #8
0
        //literally, destroy all our gui stuff
        private void DestroyEverything()
        {
            if (hbox != null)
            {
                hbox.Destroy();
            }

            if (vbox != null)
            {
                vbox.Destroy();
            }

            if (newi != null)
            {
                newi.Destroy();
            }

            if (menuBar != null)
            {
                menuBar.Destroy();
            }

            if (filemenu != null)
            {
                filemenu.Destroy();
            }

            if (file != null)
            {
                file.Destroy();
            }

            if (sep != null)
            {
                sep.Destroy();
            }

            if (exit != null)
            {
                exit.Destroy();
            }

            if (uploadButton != null)
            {
                uploadButton.Destroy();
            }

            if (toCropBox != null)
            {
                toCropBox.Destroy();
            }

            if (appimg != null)
            {
                appimg.Destroy();
            }

            if (menuItemQuit != null)
            {
                menuItemQuit.Destroy();
            }

            if (popupMenu != null)
            {
                popupMenu.Destroy();
            }

            if (notificationMessage != null)
            {
                notificationMessage.Destroy();
            }

            if (notificationEventBox != null)
            {
                notificationEventBox.Destroy();
            }

            if (mainWindowTracker != null)
            {
                mainWindowTracker.Destroy();
            }

            if (trayIcon != null)
            {
                trayIcon.Dispose();
            }

            if (agr != null)
            {
                agr.Dispose();
            }
        }
예제 #9
0
        internal void ShowDockPopupMenu(uint time, TabStrip tabstrip = null)
        {
            Menu menu = new Menu();

             MenuItem citem;

             // Close menuitem
             if ((Behavior & DockItemBehavior.CantClose) == 0)
             {
            citem = new MenuItem(Catalog.GetString("Close"));
            citem.Activated += delegate { Close(); };
            menu.Append(citem);
             }

             {
            citem = new MenuItem(this.Status==DockItemStatus.AutoHide
                                 ? Catalog.GetString("Restore" )
                                 : Catalog.GetString("Minimize"));
            citem.Activated += (o, e) =>
            {
               TitleTab.OnClickDock(o, e);
               if(this.Status==DockItemStatus.AutoHide)
                  (o as MenuItem).Name = this.Status==DockItemStatus.AutoHide
                                       ? Catalog.GetString("Restore" )
                                       : Catalog.GetString("Minimize");
            };
            menu.Append(citem);
             }

            #if false
             // Hide menuitem
             if ((Behavior & DockItemBehavior.CantClose) == 0
                && (Behavior & DockItemBehavior.CloseOnHide) == 0)
            {
            citem = new MenuItem (Catalog.GetString("Hide"));
            citem.Activated += delegate { Visible = false; };
            menu.Append (citem);
             }

             // Auto Hide menuitem
             if ((Behavior & DockItemBehavior.CantAutoHide) == 0 && Status != DockItemStatus.AutoHide) {
            citem = new MenuItem (Catalog.GetString("Minimize"));
            citem.Activated += delegate { Status = DockItemStatus.AutoHide; };
            menu.Append (citem);
             }
            #endif

             if (Status != DockItemStatus.Dockable)
             {
            // Dockable menuitem
            citem = new MenuItem(Catalog.GetString("Dock"));
            citem.Activated += delegate { Status = DockItemStatus.Dockable; };
            menu.Append(citem);
             }

             // Floating menuitem
             if ((Behavior & DockItemBehavior.NeverFloating) == 0 && Status != DockItemStatus.Floating)
             {
            citem = new MenuItem(Catalog.GetString("Undock"));
            citem.Activated += delegate { Status = DockItemStatus.Floating; };
            menu.Append(citem);
             }

             // flip tab menuitem
             if (tabstrip != null && (Behavior & DockItemBehavior.NeverFloating) == 0 && Status != DockItemStatus.Floating
            && (Status == DockItemStatus.Dockable || Status == DockItemStatus.AutoHide))
             {
            citem = new MenuItem(Catalog.GetString("Toggle Horizontal/Vertical Tab Layout"));
            citem.Activated += (o, e) =>
            {
               tabstrip.Flip();
            };
            menu.Append(citem);
             }

             if (menu.Children.Length == 0)
             {
            menu.Destroy();
            return;
             }

             ShowingContextMemu = true;

             menu.ShowAll();
             menu.Hidden += (o, e) =>
             {
            ShowingContextMemu = false;
             };
             menu.Popup(null, null, null, 3, time);
        }