git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH QGit 4/4] Create a separate submenu for tags

From
Markus Heidelberg <markus.heidelberg@web.de>
Date
Jun 6, 2009, 11:57 UTC
Message-ID
<1244289471-698-5-git-send-email-markus.heidelberg@web.de>

It is more logical and hierarchical correct not to begin listing tags in the existing submenu. The remaining space of the main context menu is halved for the branches and tags to be displayed before the submenu has to be created.

A little downside is that now you can get 2 "More..." submenus for branches and tags instead of only 1.

Signed-off-by: Markus Heidelberg <markus.heidelberg@web.de>
---
 src/mainimpl.cpp |   38 ++++++++++++++++++++++++++------------
 1 files changed, 26 insertions(+), 12 deletions(-)
diff --git a/src/mainimpl.cpp b/src/mainimpl.cpp
index 38bbfbe..9613fac 100644
--- a/src/mainimpl.cpp
+++ b/src/mainimpl.cpp
@@ -1138,7 +1138,8 @@ static int cntMenuEntries(const QMenu& menu) {
 void MainImpl::doContexPopup(SCRef sha) {
 
 	QMenu contextMenu(this);
-	QMenu contextSubMenu("More...", this);
+	QMenu contextBrnMenu("More branches...", this);
+	QMenu contextTagMenu("More tags...", this);
 	QMenu contextRmtMenu("Remote branches", this);
 
 	connect(&contextMenu, SIGNAL(triggered(QAction*)), this, SLOT(goRef_triggered(QAction*)));
@@ -1193,35 +1194,48 @@ void MainImpl::doContexPopup(SCRef sha) {
 		if (!contextRmtMenu.isEmpty())
 			contextMenu.addMenu(&contextRmtMenu);
 
+		// halve the possible remaining entries for branches and tags
+		int remainingEntries = (MAX_MENU_ENTRIES - cntMenuEntries(contextMenu));
+		int tagEntries = remainingEntries / 2;
+		int brnEntries = remainingEntries - tagEntries;
+
+		// display more branches, if there are few tags
+		if (tagEntries > tn.count())
+			tagEntries = tn.count();
+
+		// one branch less because of the "More branches..." submenu
+		if ((bn.count() > brnEntries) && tagEntries)
+			tagEntries++;
+
 		if (!bn.empty())
 			contextMenu.addSeparator();
 
 		FOREACH_SL (it, bn) {
-			if (cntMenuEntries(contextMenu) < MAX_MENU_ENTRIES
-					|| (*it == bn.last() && contextSubMenu.isEmpty() && tn.empty()))
+			if (cntMenuEntries(contextMenu) < MAX_MENU_ENTRIES - tagEntries
+					|| (*it == bn.last() && contextBrnMenu.isEmpty()))
 				act = contextMenu.addAction(*it);
 			else
-				act = contextSubMenu.addAction(*it);
+				act = contextBrnMenu.addAction(*it);
 
 			act->setData("Ref");
 		}
+		if (!contextBrnMenu.isEmpty())
+			contextMenu.addMenu(&contextBrnMenu);
+
 		if (!tn.empty())
-			if (!contextSubMenu.isEmpty())
-				contextSubMenu.addSeparator();
-			else
-				contextMenu.addSeparator();
+			contextMenu.addSeparator();
 
 		FOREACH_SL (it, tn) {
 			if (cntMenuEntries(contextMenu) < MAX_MENU_ENTRIES
-					|| (*it == tn.last() && contextSubMenu.isEmpty()))
+					|| (*it == tn.last() && contextTagMenu.isEmpty()))
 				act = contextMenu.addAction(*it);
 			else
-				act = contextSubMenu.addAction(*it);
+				act = contextTagMenu.addAction(*it);
 
 			act->setData("Ref");
 		}
-		if (!contextSubMenu.isEmpty())
-			contextMenu.addMenu(&contextSubMenu);
+		if (!contextTagMenu.isEmpty())
+			contextMenu.addMenu(&contextTagMenu);
 	}
 	contextMenu.exec(QCursor::pos());
 }
-- 
1.6.3.2.213.g30b07
Message 1 of 1 in “Create a separate submenu for tags”
  1. 4/4 Create a separate submenu for tagsMarkus Heidelberg, Jun 6, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.