Leon KUKOVEC <leon.kukovec@xxxxxxxxx> writes: > 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> > --- Thanks, but I prefer not to take patches to gitk-git/ directly; could you prepare a patch against Paul's tree at git://ozlabs.org/~paulus/gitk and send it in that direction (paulus@) instead? > 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 -- 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