summaryrefslogtreecommitdiff
path: root/UMain.pas
diff options
context:
space:
mode:
Diffstat (limited to 'UMain.pas')
-rw-r--r--UMain.pas60
1 files changed, 50 insertions, 10 deletions
diff --git a/UMain.pas b/UMain.pas
index a808667..f7cfea6 100644
--- a/UMain.pas
+++ b/UMain.pas
@@ -103,7 +103,6 @@ type
procedure ListViewKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
procedure ListViewEnter(Sender: TObject; var Accept: boolean);
procedure PathLabelMouseDown(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean);
- procedure PathLabelMouseUp(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean);
procedure PathButtonClick(Sender: TObject);
function CompareFunc(Sender: TObject; var model: PGtkTreeModel; var a, b: PGtkTreeIter): integer;
procedure F5ButtonClick(Sender: TObject);
@@ -113,6 +112,7 @@ type
procedure ListViewDblClick(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean);
procedure ListViewMouseDown(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean);
procedure ListViewMouseUp(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean);
+ procedure ListViewMouseMove(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean);
procedure InplaceEditTimerTimer(Sender: TObject);
procedure ListViewEdited(Sender: TObject; Column: TGTKTreeViewColumn; Item: TGTKListItem; var NewText: string; var AllowChange: boolean; var DataColumn: integer);
procedure ListViewSelectionChanged(Sender: TObject);
@@ -193,6 +193,7 @@ type
LeftPathsHighlight, RightPathsHighlight: TStringList;
LeftTabEngines, RightTabEngines: TList;
LastUsedFilter: string;
+ PanelRightMouseSelMode, PanelRightMouseInProgress: boolean;
procedure ConstructPanels;
procedure ConstructMenu;
procedure ConstructColumns(ListView: TGTKListView);
@@ -276,6 +277,8 @@ begin
QuickFind := False;
LeftTabPopup := True;
LastClick := 0;
+ PanelRightMouseSelMode := True;
+ PanelRightMouseInProgress := False;
LastUsedFilter := '*.*';
RedrawLeftInactive := False;
RedrawRightInactive := False;
@@ -397,8 +400,6 @@ begin
F7Button.CanFocus := False;
F8Button.CanFocus := False;
PanelSeparator.OnMouseUp := PanelSeparatorMouseUp;
- LeftListView.PopupMenu := FilePopupMenu;
- RightListView.PopupMenu := FilePopupMenu;
// Events
OnResize := FormResize;
@@ -412,9 +413,7 @@ begin
LeftListView.OnEnter := ListViewEnter;
RightListView.OnEnter := ListViewEnter;
LeftPathLabelEventBox.OnMouseDown := PathLabelMouseDown;
- LeftPathLabelEventBox.OnMouseUp := PathLabelMouseUp;
RightPathLabelEventBox.OnMouseDown := PathLabelMouseDown;
- RightPathLabelEventBox.OnMouseUp := PathLabelMouseUp;
LeftUpButton.OnClick := PathButtonClick;
LeftRootButton.OnClick := PathButtonClick;
LeftHomeButton.OnClick := PathButtonClick;
@@ -439,6 +438,8 @@ begin
RightListView.OnDblClick := ListViewDblClick;}
LeftListView.OnSelectionChanged := ListViewSelectionChanged;
RightListView.OnSelectionChanged := ListViewSelectionChanged;
+ LeftListView.OnMouseMove := ListViewMouseMove;
+ RightListView.OnMouseMove := ListViewMouseMove;
LeftQuickFindEntry.OnEnter := QuickFindEntryEnter;
RightQuickFindEntry.OnEnter := QuickFindEntryEnter;
LeftPanelNotebook.OnTabSwitched := TabNotebookSwitchPage;
@@ -1299,10 +1300,13 @@ begin
end;
procedure TFMain.PanelSeparatorMouseUp(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean);
+var XLeft, XRight: gint;
begin
if Button = mbRight then begin
Accept := False;
- SplitterPopupMenu.PopUp;
+ gtk_widget_get_pointer(LeftPanelBox.FWidget, @XLeft, nil);
+ gtk_widget_get_pointer(RightPanelBox.FWidget, @XRight, nil);
+ if (XLeft > LeftPanelBox.Width) and (XRight < 0) then SplitterPopupMenu.PopUp;
end;
end;
@@ -1642,10 +1646,6 @@ begin
if Sender = LeftPathLabelEventBox then LeftListView.SetFocus
else if Sender = RightPathLabelEventBox then RightListView.SetFocus;
end;
-end;
-
-procedure TFMain.PathLabelMouseUp(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean);
-begin
if Button = mbRight then begin
Accept := False;
PathBoxPopupMenu.PopUp;
@@ -2733,9 +2733,11 @@ end;
procedure TFMain.ListViewMouseDown(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean);
var Item: TGTKListItem;
Click: TDateTime;
+ Data: PDataItem;
begin
try
InternalLock;
+ PanelRightMouseInProgress := False;
// DebugMsg(['ListViewMouseDown, X = ', X, ', Y = ', Y]);
if Button = mbLeft then begin
Click := Now;
@@ -2767,6 +2769,21 @@ begin
Item.Selected := True;
Item.SetCursor(0, False, not Application.GTKVersion_2_2_0_Up, 0.5, 0);
end;
+
+ // Show file popup menu or start selection mode, depending on ConfRightClickSelect
+ if ConfRightClickSelect then begin
+ if (Item <> nil) and (Item.Data <> nil) then begin
+ Data := PDataItem(Item.Data);
+ if not Data^.UpDir then begin
+ PanelRightMouseSelMode := not Data^.Selected;
+ Data^.Selected := PanelRightMouseSelMode;
+ Item.RedrawRow;
+ UpdatePanelInfoDown(Sender = LeftListView);
+ PanelRightMouseInProgress := True;
+ end;
+ end;
+ end else FilePopupMenu.PopUp;
+ Accept := False;
end;
finally
Application.ProcessMessages;
@@ -2774,6 +2791,27 @@ begin
end;
end;
+procedure TFMain.ListViewMouseMove(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean);
+var Item: TGTKListItem;
+ Data: PDataItem;
+begin
+ Accept := True;
+ if not ((Sender is TGTKListView) and ConfRightClickSelect) then Exit;
+
+ if (Button = mbRight) and PanelRightMouseInProgress then begin
+ Item := (Sender as TGTKListView).GetItemAtPos(X, Y);
+ if (Item <> nil) and (Item.Data <> nil) and (not Item.Selected) then begin
+ Data := PDataItem(Item.Data);
+ if not Data^.UpDir then begin
+ Data^.Selected := PanelRightMouseSelMode;
+ Item.Selected := True;
+ Item.SetCursor(0, False, not Application.GTKVersion_2_2_0_Up, 0.5, 0);
+ UpdatePanelInfoDown(Sender = LeftListView);
+ end;
+ end;
+ end else PanelRightMouseInProgress := False;
+end;
+
procedure TFMain.InplaceEditTimerTimer(Sender: TObject);
var LeftPanel: boolean;
ListView: TGTKListView;
@@ -4400,6 +4438,7 @@ var AListView: TGTKListView;
i, FirstColumn, LastColumn: integer;
LeftLV, b: boolean;
begin
+ PanelRightMouseInProgress := False;
if Button = mbLeft then begin
AListView := Sender as TGTKListView;
LeftLV := AListView = LeftListView;
@@ -4420,6 +4459,7 @@ begin
AListView.Columns[i].FixedWidth := ConfColumnSizes[AListView.Columns[i].Tag];
end;
end;
+ if Button = mbRight then Accept := False;
end;
procedure TFMain.ListViewColumnClicked(Sender: TObject);