Right clicking on a tag pops up a menu, which allows tag to be renamed or deleted. Signed-off-by: Leon KUKOVEC <leon.kukovec@xxxxxxxxx> --- gitk-git/gitk | 154 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) diff --git a/gitk-git/gitk b/gitk-git/gitk index d93bd99..38cc233 100755 --- a/gitk-git/gitk +++ b/gitk-git/gitk @@ -2032,6 +2032,7 @@ proc makewindow {} { global have_tk85 use_ttk NS global git_version global worddiff + global tagctxmenu # The "mc" arguments here are purely so that xgettext # sees the following string as needing to be translated @@ -2581,6 +2582,13 @@ proc makewindow {} { {mc "Run git gui blame on this line" command {external_blame_diff}} } $diff_menu configure -tearoff 0 + + set tagctxmenu .tagctxmenu + makemenu $tagctxmenu { + {mc "Rename this tag" command mvtag} + {mc "Delete this tag" command rmtag} + } + $tagctxmenu configure -tearoff 0 } # Windows sends all mouse wheel events to the current focused window, not @@ -6400,6 +6408,7 @@ proc drawtags {id x xt y1} { -font $font -tags [list tag.$id text]] if {$ntags >= 0} { $canv bind $t <1> [list showtag $tag_quoted 1] + $canv bind $t $ctxbut [list showtagmenu %X %Y $id $tag_quoted] } elseif {$nheads >= 0} { $canv bind $t $ctxbut [list headmenu %X %Y $id $tag_quoted] } @@ -8931,6 +8940,113 @@ proc domktag {} { return 1 } +proc mvtag {} { + global mvtagtop + global tagmenuid tagmenutag tagctxmenu maintag NS + global mvtagtag + + set mvtagtag $tagmenutag + set top .movetag + set mvtagtop $top + catch {destroy $top} + ttk_toplevel $top + make_transient $top . + + ${NS}::label $top.msg -text [mc "Enter a new tag name:"] + ${NS}::entry $top.tag -width 60 -textvariable mvtagtag + + grid $top.msg -sticky w -row 0 -column 0 + grid $top.tag -sticky w -row 0 -column 1 + + ${NS}::frame $top.buts + ${NS}::button $top.buts.gen -text [mc "Rename"] -command mvtaggo + ${NS}::button $top.buts.can -text [mc "Cancel"] -command mvtagcan + bind $top <Key-Return> mvtaggo + bind $top <Key-Escape> mvtagcan + grid $top.buts.gen $top.buts.can + grid columnconfigure $top.buts 0 -weight 1 -uniform a + grid columnconfigure $top.buts 1 -weight 1 -uniform a + grid $top.buts - -pady 10 -sticky ew +} + +proc domvtag {} { + global mvtagtop env tagids idtags tagmenutag tagmenuid mvtagtag + + set tag $mvtagtag + set id $tagmenuid + + # add tag + # XXX: reuse domktag including keeping comment from the original tag. + if {[catch { + exec git tag $tag $id + } err]} { + error_popup "[mc "Error renaming tag:"] $err" $mvtagtop + return 0 + } + + # delete old tag, content stored in $tagmenutag and $tagmenuid + dormtag + + set tagids($tag) $id + lappend idtags($id) $tag + redrawtags $id + addedtag $id + dispneartags 0 + run refill_reflist + return 1 +} + +proc rmtag {} { + global rmtagtop + global tagmenuid tagmenutag tagctxmenu maintag NS + + set top .maketag + set rmtagtop $top + catch {destroy $top} + ttk_toplevel $top + make_transient $top . + ${NS}::label $top.title -text [mc "Delete tag"] + grid $top.title - -pady 10 + + ${NS}::label $top.msg -text [mc "You are about to delete a tag"] + ${NS}::label $top.tagname -foreground Red -text [mc "$tagmenutag"] + grid $top.msg -sticky w -row 0 -column 0 + grid $top.tagname -sticky w -row 0 -column 1 + + ${NS}::frame $top.buts + ${NS}::button $top.buts.gen -text [mc "Delete"] -command rmtaggo + ${NS}::button $top.buts.can -text [mc "Cancel"] -command rmtagcan + bind $top <Key-Return> rmtaggo + bind $top <Key-Escape> rmtagcan + grid $top.buts.gen $top.buts.can + grid columnconfigure $top.buts 0 -weight 1 -uniform a + grid columnconfigure $top.buts 1 -weight 1 -uniform a + grid $top.buts - -pady 10 -sticky ew +} + +proc dormtag {} { + global rmtagtop env tagids idtags tagmenutag tagmenuid + + set tag $tagmenutag + set id $tagmenuid + + if {[catch { + exec git tag -d $tag + } err]} { + error_popup "[mc "Error deleting tag:"] $err" $rmtagtop + return 0 + } + + unset tagids($tag) + set idx [lsearch $idtags($id) $tag] + set idtags($id) [lreplace $idtags($id) $idx $idx] + + redrawtags $id + dispneartags 0 + run refill_reflist + return 1 +} + proc redrawtags {id} { global canv linehtag idpos currentid curview cmitlisted markedid global canvxmax iddrawn circleitem mainheadid circlecolors @@ -8974,6 +9090,30 @@ proc mktaggo {} { mktagcan } +proc rmtagcan {} { + global rmtagtop + + catch {destroy $rmtagtop} + unset rmtagtop +} + +proc rmtaggo {} { + if {![dormtag]} return + rmtagcan +} + +proc mvtagcan {} { + global mvtagtop + + catch {destroy $mvtagtop} + unset mvtagtop +} + +proc mvtaggo {} { + if {![domvtag]} return + mvtagcan +} + proc writecommit {} { global rowmenuid wrcomtop commitinfo wrcomcmd NS @@ -9288,6 +9428,20 @@ proc headmenu {x y id head} { tk_popup $headctxmenu $x $y } +# context menu for a tag +proc showtagmenu {x y id tag} { + global tagmenuid tagmenutag tagctxmenu maintag + + stopfinding + set tagmenuid $id + set tagmenutag $tag + set state normal + + $tagctxmenu entryconfigure 0 -state normal + $tagctxmenu entryconfigure 1 -state normal + tk_popup $tagctxmenu $x $y +} + proc cobranch {} { global headmenuid headmenuhead headids global showlocalchanges -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html