summaryrefslogtreecommitdiffstats
path: root/pkg/gui/files_panel.go
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2019-11-10 16:20:35 +1100
committerJesse Duffield <jessedduffield@gmail.com>2019-11-10 22:32:13 +1100
commite85310c0a92a89167530241bdc3fc5f66a48706d (patch)
treef7989a8b002d2d5aa847460cae112aac9f64b669 /pkg/gui/files_panel.go
parentcd17b46b55e312b3ba4e3ab9d3d96a8eeb20fded (diff)
add mouse support
Diffstat (limited to 'pkg/gui/files_panel.go')
-rw-r--r--pkg/gui/files_panel.go36
1 files changed, 22 insertions, 14 deletions
diff --git a/pkg/gui/files_panel.go b/pkg/gui/files_panel.go
index f73d84cdb..6b8847e8c 100644
--- a/pkg/gui/files_panel.go
+++ b/pkg/gui/files_panel.go
@@ -27,24 +27,21 @@ func (gui *Gui) getSelectedFile(g *gocui.Gui) (*commands.File, error) {
return gui.State.Files[selectedLine], nil
}
-func (gui *Gui) handleFilesFocus(g *gocui.Gui, v *gocui.View) error {
+func (gui *Gui) handleFilesClick(g *gocui.Gui, v *gocui.View) error {
if gui.popupPanelFocused() {
return nil
}
- cx, cy := v.Cursor()
- _, oy := v.Origin()
+ prevSelectedLineIdx := gui.State.Panels.Files.SelectedLine
+ newSelectedLineIdx := v.SelectedLineIdx()
- prevSelectedLine := gui.State.Panels.Files.SelectedLine
- newSelectedLine := cy - oy
-
- if newSelectedLine > len(gui.State.Files)-1 || len(utils.Decolorise(gui.State.Files[newSelectedLine].DisplayString)) < cx {
+ if newSelectedLineIdx > len(gui.State.Files)-1 {
return gui.handleFileSelect(gui.g, v, false)
}
- gui.State.Panels.Files.SelectedLine = newSelectedLine
+ gui.State.Panels.Files.SelectedLine = newSelectedLineIdx
- if prevSelectedLine == newSelectedLine && gui.currentViewName() == v.Name() {
+ if prevSelectedLineIdx == newSelectedLineIdx && gui.currentViewName() == v.Name() {
return gui.handleFilePress(gui.g, v)
} else {
return gui.handleFileSelect(gui.g, v, true)
@@ -77,12 +74,16 @@ func (gui *Gui) handleFileSelect(g *gocui.Gui, v *gocui.View, alreadySelected bo
leftContent := content
if file.HasStagedChanges && file.HasUnstagedChanges {
gui.State.SplitMainPanel = true
+ gui.getMainView().Title = gui.Tr.SLocalize("UnstagedChanges")
+ gui.getSecondaryView().Title = gui.Tr.SLocalize("StagedChanges")
} else {
gui.State.SplitMainPanel = false
if file.HasUnstagedChanges {
leftContent = content
+ gui.getMainView().Title = gui.Tr.SLocalize("UnstagedChanges")
} else {
leftContent = contentCached
+ gui.getMainView().Title = gui.Tr.SLocalize("StagedChanges")
}
}
@@ -189,7 +190,11 @@ func (gui *Gui) stageSelectedFile(g *gocui.Gui) error {
}
func (gui *Gui) handleEnterFile(g *gocui.Gui, v *gocui.View) error {
- file, err := gui.getSelectedFile(g)
+ return gui.enterFile(false, -1)
+}
+
+func (gui *Gui) enterFile(forceSecondaryFocused bool, selectedLineIdx int) error {
+ file, err := gui.getSelectedFile(gui.g)
if err != nil {
if err != gui.Errors.ErrNoFiles {
return err
@@ -197,18 +202,21 @@ func (gui *Gui) handleEnterFile(g *gocui.Gui, v *gocui.View) error {
return nil
}
if file.HasInlineMergeConflicts {
- return gui.handleSwitchToMerge(g, v)
+ return gui.handleSwitchToMerge(gui.g, gui.getFilesView())
}
if file.HasMergeConflicts {
- return gui.createErrorPanel(g, gui.Tr.SLocalize("FileStagingRequirements"))
+ return gui.createErrorPanel(gui.g, gui.Tr.SLocalize("FileStagingRequirements"))
}
if err := gui.changeContext("main", "staging"); err != nil {
return err
}
- if err := gui.switchFocus(g, v, gui.getMainView()); err != nil {
+ if err := gui.changeContext("secondary", "staging"); err != nil {
+ return err
+ }
+ if err := gui.switchFocus(gui.g, gui.getFilesView(), gui.getMainView()); err != nil {
return err
}
- return gui.refreshStagingPanel()
+ return gui.refreshStagingPanel(forceSecondaryFocused, selectedLineIdx)
}
func (gui *Gui) handleFilePress(g *gocui.Gui, v *gocui.View) error {