View Issue Details

IDProjectCategoryView StatusLast Update
0001456Double CommanderGraphical user interfacepublic2020-11-30 07:44
Reportercordylus Assigned ToAlexx2000  
PrioritynormalSeveritytrivialReproducibilityalways
Status closedResolutionfixed 
ProjectionnoneETAnone 
Product Version0.7.3 
Target Version0.8.0Fixed in Version0.8.0 
Summary0001456: Не исчезает подсвеченный мышкой каталог в адресной строке
Description1. При переходе в другой каталог клавиатурой (демонстрация на гифке)
2. Навести, чтобы подсветилось, затем переключиться в другое перекрывающее местоположение мышки окно Alt+Tab-ом, находясь в другом окне увести мышку за границы окна DC, вернуться Alt+Tab-ом в DC, подсвеченный элемент остается висеть, пока мышка не побывает над окном DC снова.
TagsNo tags attached.
Attached Files
bug.gif (24,117 bytes)   
bug.gif (24,117 bytes)   
bug1456.patch (2,918 bytes)   
Index: src/fileviews/ufileviewheader.pas
===================================================================
--- src/fileviews/ufileviewheader.pas	(revision 7570)
+++ src/fileviews/ufileviewheader.pas	(working copy)
@@ -134,7 +134,7 @@
 
 procedure TFileViewHeader.PathLabelClick(Sender: TObject);
 var
-  walkPath, dirNameToSelect: String;
+  walkPath, selectedDir, dirNameToSelect: String;
 begin
   FFileView.SetFocus;
 
@@ -142,9 +142,10 @@
   begin
     // User clicked on a subdirectory of the path.
     walkPath := FFileView.CurrentPath;
-    FFileView.CurrentPath := FPathLabel.SelectedDir;
+    selectedDir := FPathLabel.SelectedDir;
+    FFileView.CurrentPath := selectedDir;
 
-    while (Length(walkPath) > Length(FPathLabel.SelectedDir) + 1) do
+    while (Length(walkPath) > Length(selectedDir) + 1) do
     begin
       dirNameToSelect := ExtractFileName(ExcludeTrailingPathDelimiter(walkPath));
       walkPath := FFileView.FileSource.GetParentDir(walkPath);
Index: src/upathlabel.pas
===================================================================
--- src/upathlabel.pas	(revision 7570)
+++ src/upathlabel.pas	(working copy)
@@ -38,6 +38,7 @@
     FAllowHighlight: Boolean;
     FHighlightStartPos: Integer;
     FHighlightText: String;
+    FMousePos: Integer;
     {en
        How much space to leave between the text and left border.
     }
@@ -53,10 +54,12 @@
        If a mouse if over some parent directory of the currently displayed path,
        it is highlighted, so that user can click on it.
     }
-    procedure Highlight(MousePosX, MousePosY: Integer);
+    procedure Highlight;
 
   protected
 
+    procedure TextChanged; override;
+
     procedure MouseEnter; override;
     procedure MouseMove(Shift: TShiftState; X,Y: Integer); override;
     procedure MouseLeave; override;
@@ -138,7 +141,7 @@
   end;
 end;
 
-procedure TPathLabel.Highlight(MousePosX, MousePosY: Integer);
+procedure TPathLabel.Highlight;
 var
   PartText: String;
   StartPos, CurPos: Integer;
@@ -170,7 +173,7 @@
       PartWidth := Canvas.TextWidth(PartText);
 
       // If mouse is over this part of the path - highlight it.
-      if InRange(MousePosX, CurrentHighlightPos, CurrentHighlightPos + PartWidth) then
+      if InRange(FMousePos, CurrentHighlightPos, CurrentHighlightPos + PartWidth) then
       begin
         NewHighlightPos := CurrentHighlightPos;
         Break;
@@ -210,6 +213,12 @@
   end;
 end;
 
+procedure TPathLabel.TextChanged;
+begin
+  inherited TextChanged;
+  if FAllowHighlight and MouseEntered then Highlight;
+end;
+
 procedure TPathLabel.MouseEnter;
 begin
   inherited MouseEnter;
@@ -223,7 +232,8 @@
 procedure TPathLabel.MouseMove(Shift: TShiftState; X,Y: Integer);
 begin
   inherited MouseMove(Shift, X, Y);
-  if FAllowHighlight then Highlight(X, Y);
+  FMousePos := X;
+  if FAllowHighlight then Highlight;
 end;
 
 procedure TPathLabel.MouseLeave;
bug1456.patch (2,918 bytes)   
Fixed in Revision7656
Operating system
Widgetset
Architecture

Activities

cordylus

2016-12-28 13:15

developer   ~0002040

Описанная в п.2 проблема наблюдается и на кнопках, они остаются подсвеченными, несколько секунд даже остается висеть всплывающая подсказка. Не обязательно переключать окна, достаточно резко выдернуть мышку с подсвеченного элемента за пределы окна, чтобы не сработал MouseMove на другом элементе формы. А когда кнопка прижата вплотную к краю (нижний ряд кнопок при развернутом на весь экран DC) - даже выдёргивать не нужно, достаточно просто вывести мышь с подсвеченного элемента за окно (перевести на панель задач). Это проблема Lazarus, он не посылает MouseLeave при покидании окна мышью?

cordylus

2017-05-23 05:09

developer   ~0002249

Проблема из п.2 - баг Lazarus
https://bugs.freepascal.org/view.php?id=31510 под Windows уже исправлен,
https://bugs.freepascal.org/view.php?id=31511 под GTK - пока нет.

cordylus

2017-05-23 08:07

developer   ~0002250

Патч для решения п.1

Alexx2000

2017-08-20 12:03

administrator   ~0002331

Так как п.2 баг Lazarus, то его в контексте DC можно считать закрытым.

Issue History

Date Modified Username Field Change
2016-07-06 21:09 cordylus New Issue
2016-07-06 21:09 cordylus File Added: bug.gif
2016-12-28 13:15 cordylus Note Added: 0002040
2017-05-23 05:09 cordylus Note Added: 0002249
2017-05-23 08:05 cordylus File Added: bug1456.patch
2017-05-23 08:07 cordylus Note Added: 0002250
2017-06-12 11:02 Alexx2000 Status new => acknowledged
2017-06-12 11:02 Alexx2000 Target Version => 0.8.0
2017-06-27 19:23 Alexx2000 Fixed in Revision => 7656
2017-08-20 12:03 Alexx2000 Note Added: 0002331
2017-08-20 12:03 Alexx2000 Status acknowledged => resolved
2017-08-20 12:03 Alexx2000 Fixed in Version => 0.8.0
2017-08-20 12:03 Alexx2000 Resolution open => fixed
2017-08-20 12:03 Alexx2000 Assigned To => Alexx2000
2020-11-30 07:44 Alexx2000 Status resolved => closed