From 585635371a182d2b3cd5400f6d26d8e20ade6dbd Mon Sep 17 00:00:00 2001 From: Tomas Bzatek Date: Mon, 23 Dec 2024 12:09:37 +0100 Subject: Drop Application.GTKVersion_2_xxx_Up ...and related quirks along with it. Assume latest gtk2 release. --- UMain.pas | 234 +++++++++++--------------------------------------------------- 1 file changed, 42 insertions(+), 192 deletions(-) (limited to 'UMain.pas') diff --git a/UMain.pas b/UMain.pas index bce9d75..359397f 100644 --- a/UMain.pas +++ b/UMain.pas @@ -127,9 +127,6 @@ type procedure miFileTypesClick(Sender: TObject); procedure CommandLineComboKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean); procedure FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean); - procedure InactiveItemsTimerTimer(Sender: TObject); - function OldGTKConvertToSorted(Sender: TObject; const Index: integer): integer; - function OldGTKConvertFromSorted(Sender: TObject; const Index: integer): integer; procedure SplitterPopupMenuClick(Sender: TObject); procedure miChangePermissionsClick(Sender: TObject); procedure miChangeOwnerClick(Sender: TObject); @@ -189,7 +186,7 @@ type private LeftLastFocused, Editing, QuickFind, RedrawLeftInactive, RedrawRightInactive, StartUp, LeftTabPopup: boolean; LastWidth, RunningEscSensitive: integer; - InplaceEditTimer, InactiveItemsTimer, RebuildListViewsTimer, RightMouseSelectPopupTimer: TGTKTimer; + InplaceEditTimer, RebuildListViewsTimer, RightMouseSelectPopupTimer: TGTKTimer; InplaceEditItem: TGTKListItem; SavedCmdLine: string; LastMounterButton: TGTKButton; @@ -280,7 +277,6 @@ function form_event_handler(widget: PGtkWidget; event: PGdkEvent; user_data: gpo procedure TFMain.FormCreate(Sender: TObject); begin - ReportGTKVersion; SetupAppIcon; StartUp := True; RunningEscSensitive := 0; @@ -314,10 +310,6 @@ begin InplaceEditTimer := TGTKTimer.Create(Self); InplaceEditTimer.Enabled := False; InplaceEditTimer.OnTimer := InplaceEditTimerTimer; - InactiveItemsTimer := TGTKTimer.Create(Self); - InactiveItemsTimer.Enabled := False; - InactiveItemsTimer.Interval := ConfInactiveTimerDelay; - if not Application.GTKVersion_2_6_0_Up then InactiveItemsTimer.OnTimer := InactiveItemsTimerTimer; RebuildListViewsTimer := TGTKTimer.Create(Self); RebuildListViewsTimer.Enabled := False; RebuildListViewsTimer.OnTimer := RebuildListViewsTimerTimer; @@ -511,12 +503,6 @@ begin RightScrolledWindow := TGTKScrolledWindow.Create(Self); LeftListView := TGTKListView.CreateTyped(Self, True, [lcPointer]); RightListView := TGTKListView.CreateTyped(Self, True, [lcPointer]); - if not Application.GTKVersion_2_0_5_Up then begin - LeftListView.FromSortedCoversionFunc := OldGTKConvertFromSorted; - LeftListView.ToSortedCoversionFunc := OldGTKConvertToSorted; - RightListView.FromSortedCoversionFunc := OldGTKConvertFromSorted; - RightListView.ToSortedCoversionFunc := OldGTKConvertToSorted; - end; LeftStatusLine := TGTKLabel.Create(Self); RightStatusLine := TGTKLabel.Create(Self); LeftQuickFindVBox := TGTKVBox.Create(Self); @@ -1088,8 +1074,7 @@ begin GetFirstLastPanelColumn(FirstColumn, LastColumn); // Temporarily disable the fixed height mode to be able to add columns the Pascal way - if Application.GTKVersion_2_12_0_Up then - g_object_set(ListView.FWidget, 'fixed_height_mode', 0, nil); + g_object_set(ListView.FWidget, 'fixed_height_mode', 0, nil); for i := 1 to ConstNumPanelColumns do if ConfColumnVisible[i] then begin @@ -1129,13 +1114,13 @@ begin gtk_cell_renderer_set_fixed_size(PGtkCellRenderer(Column.FRenderer), ConfColumnSizes[i], ConfRowHeight); } if ConfColumnIDs[i] < 3 then begin // Filename column Column.OnEdited := ListViewEdited; - if Application.GTKVersion_2_6_0_Up then Column.SetProperty('ellipsize', 3); + Column.SetProperty('ellipsize', 3); end; if ConfColumnIDs[i] in [4, 8, 9] then begin Column.SetProperty('xalign', 1); Column.Alignment := 1; end; - if Application.GTKVersion_2_4_0_Up then Column.SetProperty('single-paragraph-mode', 1); + Column.SetProperty('single-paragraph-mode', 1); Column.OnClicked := ListViewColumnClicked; HandlerID := g_signal_connect(Column.FColumn, 'notify::width', G_CALLBACK(@ListViewColumnResized), ListView); g_object_set_data(G_OBJECT(Column.FColumn), 'Width_Notify_Handler', Pointer(HandlerID)); @@ -1146,10 +1131,7 @@ begin FontDesc := pango_font_description_from_string(PChar(ConfPanelFont)); gtk_widget_modify_font(ListView.FWidget, FontDesc); end else gtk_widget_modify_font(ListView.FWidget, nil); - - // Set the fixed row height - there were some issues with custom drawing in the past, now with 2.18 it looks all fine - if Application.GTKVersion_2_12_0_Up then - g_object_set(ListView.FWidget, 'fixed_height_mode', 1, nil); + g_object_set(ListView.FWidget, 'fixed_height_mode', 1, nil); end; procedure TFMain.FormDestroy(Sender: TObject); @@ -1754,8 +1736,7 @@ begin AListView := RightListView; end; DeactivateQuickFind(LeftPanel); - if Application.GTKVersion_2_0_5_Up then Data := DataList[ItemIndex] - else Data := AListView.Items[ItemIndex].AsPointer(0); + Data := DataList[ItemIndex]; DebugMsg(['Selected:', Data^.FDisplayName]); if not Assigned(Data) then Exit; if Data^.UpDir then ChangingDir(LeftPanel, '..') else @@ -1913,7 +1894,7 @@ begin if (not b) and ((Engine.Path = '/') or (NewPath = '/')) and (HiliString1 = '') and (HiliString2 = '') then Sel := ListView.ConvertFromSorted(0); ListView.Items[Sel].Selected := True; // Application.ProcessMessages; - ListView.Items[Sel].SetCursor(0, False, not Application.GTKVersion_2_2_0_Up, 0.5, 0); + ListView.Items[Sel].SetCursor(0, False, False, 0.5, 0); // Application.ProcessMessages; end; UpdatePanelInfo; @@ -2098,21 +2079,16 @@ var Data1, Data2: PDataItem; DataList: TList; begin Result := 0; - if not Application.GTKVersion_2_0_5_Up then begin - gtk_tree_model_get(model, a, 0, @Data1, -1); - gtk_tree_model_get(model, b, 0, @Data2, -1); - end else begin - if Sender = LeftListView then DataList := LeftPanelData - else DataList := RightPanelData; - Path := gtk_tree_model_get_path(model, a); - if not Assigned(Path) then Exit; - Data1 := DataList[gtk_tree_path_get_indices(Path)^]; - gtk_tree_path_free(Path); - Path := gtk_tree_model_get_path(model, b); - if not Assigned(Path) then Exit; - Data2 := DataList[gtk_tree_path_get_indices(Path)^]; - gtk_tree_path_free(Path); - end; + if Sender = LeftListView then DataList := LeftPanelData + else DataList := RightPanelData; + Path := gtk_tree_model_get_path(model, a); + if not Assigned(Path) then Exit; + Data1 := DataList[gtk_tree_path_get_indices(Path)^]; + gtk_tree_path_free(Path); + Path := gtk_tree_model_get_path(model, b); + if not Assigned(Path) then Exit; + Data2 := DataList[gtk_tree_path_get_indices(Path)^]; + gtk_tree_path_free(Path); Result := LVCompareItems(Data1, Data2, (Sender as TGTKView).SortOrder = soAscending, FMain.ColumnSortIDs[(Sender as TGTKView).SortColumnID + 1]); end; @@ -2290,29 +2266,18 @@ var s: PChar; AFGColor, ABGColor: PGdkColor; { Rect, VisibleRect: TGdkRectangle; } begin - if Application.GTKVersion_2_0_5_Up then ColumnIdx := gtk_tree_view_column_get_sort_column_id(tree_column) else - begin - ColumnIdx := 0; - for i := 0 to (Sender as TGTKListView).Columns.Count - 1 do - if (cell = (Sender as TGTKListView).Columns[i].FRenderer) or (cell = (Sender as TGTKListView).Columns[i].FPixbufRenderer) then begin - ColumnIdx := i; - Break; - end; - end; + ColumnIdx := gtk_tree_view_column_get_sort_column_id(tree_column); ColumnID := ColumnSortIDs[ColumnIdx + 1] - 1; ImageCol := False; if ColumnIdx = 0 then ImageCol := GTK_IS_CELL_RENDERER_PIXBUF(cell); Data := nil; - if not Application.GTKVersion_2_0_5_Up then gtk_tree_model_get(tree_model, iter, 0, @Data, -1) - else begin - if Sender = LeftListView then DataList := LeftPanelData - else DataList := RightPanelData; - TreePath := gtk_tree_model_get_path(tree_model, iter); - if not Assigned(TreePath) then Exit; - (Sender as TGTKListView).ConvertPathToChild(TreePath); - Data := DataList[gtk_tree_path_get_indices(TreePath)^]; - gtk_tree_path_free(TreePath); - end; + if Sender = LeftListView then DataList := LeftPanelData + else DataList := RightPanelData; + TreePath := gtk_tree_model_get_path(tree_model, iter); + if not Assigned(TreePath) then Exit; + (Sender as TGTKListView).ConvertPathToChild(TreePath); + Data := DataList[gtk_tree_path_get_indices(TreePath)^]; + gtk_tree_path_free(TreePath); (* gtk_tree_view_get_cell_area(tree_view, TreePath, nil, @Rect); gtk_tree_view_get_visible_rect(tree_view, @VisibleRect); if (Rect.height = 0) or (Rect.height <> ConfRowHeight) or (Rect.y = 0) or (Rect.y > VisibleRect.y + VisibleRect.height) then Exit; *) @@ -2342,26 +2307,21 @@ begin then begin if (ColumnID = 0) or (ColumnID = 1) then s := FDisplayName else s := nil; g_object_set(cell, 'text', s, 'foreground-gdk', AFGColor, nil); - if Application.GTKVersion_2_2_0_Up or (not ConfUseFileTypeIcons) then - g_object_set(cell, 'background-gdk', ABGColor, nil); + g_object_set(cell, 'background-gdk', ABGColor, nil); end else begin // not editing if ConfDirsInBold then begin if IsDir or UpDir then g_object_set(cell, 'markup', PChar(Format('%s', [QuoteMarkupStr(ColumnData[ColumnID])])), 'foreground-gdk', AFGColor, nil) else g_object_set(cell, 'markup', PChar(QuoteMarkupStr(ColumnData[ColumnID])), 'foreground-gdk', AFGColor, nil); end else g_object_set(cell, 'text', ColumnData[ColumnID], 'foreground-gdk', AFGColor, nil); - if Application.GTKVersion_2_2_0_Up or (not ConfUseFileTypeIcons) then - g_object_set(cell, 'background-gdk', ABGColor, nil); // Older versions have bug in color filling + g_object_set(cell, 'background-gdk', ABGColor, nil); end; end else // this is the image column if ConfUseFileTypeIcons then begin // Assign icons - if Application.GTKVersion_2_2_0_Up then - g_object_set(cell, 'cell-background-gdk', ABGColor, nil); // Older versions don't have this property - if Sel and (not (Sender as TGTKView).Focused) and Application.GTKVersion_2_2_0_Up then begin - if InactiveItemsTimer.Enabled then InactiveItemsTimer.Enabled := False; + g_object_set(cell, 'cell-background-gdk', ABGColor, nil); + if Sel and (not (Sender as TGTKView).Focused) then begin if Sender = LeftListView then RedrawLeftInactive := True else RedrawRightInactive := True; - InactiveItemsTimer.Enabled := not Application.GTKVersion_2_6_0_Up; end; if Icon <> nil then g_object_set(cell, 'pixbuf', Icon, nil); end; @@ -2758,7 +2718,7 @@ begin Item := (Sender as TGTKListView).GetItemAtPos(X, Y); if Assigned(Item) then begin Item.Selected := True; - Item.SetCursor(0, False, not Application.GTKVersion_2_2_0_Up, 0.5, 0); + Item.SetCursor(0, False, False, 0.5, 0); end; // Show file popup menu or start selection mode, depending on ConfRightClickSelect @@ -2784,7 +2744,7 @@ begin Item := (Sender as TGTKListView).GetItemAtPos(X, Y); if Assigned(Item) then begin Item.Selected := True; - Item.SetCursor(0, False, not Application.GTKVersion_2_2_0_Up, 0.5, 0); + Item.SetCursor(0, False, False, 0.5, 0); end; // Open directory in background tab @@ -2818,7 +2778,7 @@ begin RightMouseSelectPopupTimer.Enabled := False; Data^.Selected := PanelRightMouseSelMode; Item.Selected := True; - Item.SetCursor(0, False, not Application.GTKVersion_2_2_0_Up, 0.5, 0); + Item.SetCursor(0, False, False, 0.5, 0); UpdatePanelInfoDown(Sender = LeftListView); end; end; @@ -2947,7 +2907,6 @@ end; procedure TFMain.ListViewSelectionChanged(Sender: TObject); var i: integer; -// AListView: TGTKListView; begin if Editing and ((Sender as TGTKListView).Selected <> InplaceEditItem) then begin Editing := False; @@ -2959,11 +2918,6 @@ begin end; if QuickFind then DeactivateQuickFind(Sender = LeftListView); SaveCursorPositionTabbed(Sender = LeftListView); -{ if Application.GTKVersion_2_6_0_Up then begin - AListView := Sender as TGTKListView; - if Assigned(AListView) and Assigned(AListView.Selected) and Assigned(AListView.Selected.Data) and Assigned(PDataItem(AListView.Selected.Data)^.ItemColor) - then gtk_widget_modify_text(AListView.FWidget, GTK_STATE_SELECTED, PDataItem(AListView.Selected.Data)^.ItemColor); - end; } end; procedure TFMain.SaveCursorPositionTabbed(LeftPanel: boolean); @@ -3842,103 +3796,6 @@ begin end; end; -procedure TFMain.InactiveItemsTimerTimer(Sender: TObject); - - procedure Redraw(AListView: TGTKListView; tree_view: PGtkTreeView); - var TreePath: PGtkTreePath; - Iter: TGtkTreeIter; - Rect: TGdkRectangle; - PixBuf, Icon: PGdkPixbuf; - cell_width, cell_height: integer; - begin - if (csDestroying in ComponentState) or (AListView = nil) or (AListView.FSelection = nil) then Exit; - if not gtk_tree_selection_get_selected(AListView.FSelection, nil, @Iter) then Exit; - TreePath := gtk_tree_model_get_path(gtk_tree_view_get_model(tree_view), @Iter); - if not Assigned(TreePath) then Exit; - gtk_tree_view_get_background_area(tree_view, TreePath, AListView.Columns[0].FColumn, @Rect); - gtk_tree_path_free(TreePath); - gtk_cell_renderer_get_size(AListView.Columns[0].FPixbufRenderer, PGtkWidget(tree_view), nil, nil, nil, @cell_width, @cell_height); - Icon := PDataItem(AListView.Selected.Data)^.Icon; - Rect.width := Rect.x + cell_width + AListView.Columns[0].FRenderer^.xpad * 2 + 1; - PixBuf := gdk_pixbuf_new(GDK_COLORSPACE_RGB, True, 8, Rect.width, Rect.height); - gdk_pixbuf_fill(PixBuf, InactiveItemBGColorNum); - gdk_pixbuf_render_to_drawable_alpha(PixBuf, PGdkDrawable(gtk_tree_view_get_bin_window(tree_view)), 0, 0, Rect.x, Rect.y, - Rect.width, Rect.height, GDK_PIXBUF_ALPHA_FULL, 0, GDK_RGB_DITHER_NORMAL, 0, 0); - gdk_pixbuf_unref(PixBuf); - gdk_pixbuf_render_to_drawable_alpha(Icon, PGdkDrawable(gtk_tree_view_get_bin_window(tree_view)), 0, 0, - Rect.x + AListView.Columns[0].FRenderer^.xpad, Rect.y + Rect.height div 2 - (16 div 2), - 16, 16, GDK_PIXBUF_ALPHA_FULL, 0, GDK_RGB_DITHER_NORMAL, 0, 0); - end; - - -begin - if Assigned(Sender) and Assigned(InactiveItemsTimer) and Assigned(LeftListView) and Assigned(RightListView) and - (not (csDestroying in ComponentState)) then - try - InactiveItemsTimer.Enabled := False; - if RedrawLeftInactive and (not LeftListView.Focused) // and (not ConfInactiveItemDefaultColors) - then Redraw(LeftListView, PGtkTreeView(LeftListView.FWidget)); - if RedrawRightInactive and (not RightListView.Focused) // and (not ConfInactiveItemDefaultColors) - then Redraw(RightListView, PGtkTreeView(RightListView.FWidget)); - RedrawLeftInactive := False; - RedrawRightInactive := False; - except end; -end; - - -(********************************************************************************************************************************) -function TFMain.OldGTKConvertToSorted(Sender: TObject; const Index: integer): integer; -var DataList, List: TList; - i: integer; - AListView: TGTKListView; -begin - Result := -1; - if Sender = LeftListView then begin - DataList := LeftPanelData; - AListView := LeftListView; - end else begin - DataList := RightPanelData; - AListView := RightListView; - end; - List := nil; // Silent compiler warnings - if Assigned(DataList) and (DataList.Count > 0) then - try - List := TList.Create; - for i := 0 to DataList.Count - 1 do List.Add(DataList[i]); - if (List.Count > 1) and (AListView.SortOrder <> soNone) then - SortDataList(List, AListView.SortOrder = soAscending, AListView.SortColumnID); - Result := List.IndexOf(DataList[Index]); - finally - List.Free; - end; -end; - -function TFMain.OldGTKConvertFromSorted(Sender: TObject; const Index: integer): integer; -var DataList, List: TList; - i: integer; - AListView: TGTKListView; -begin - Result := -1; - if Sender = LeftListView then begin - DataList := LeftPanelData; - AListView := LeftListView; - end else begin - DataList := RightPanelData; - AListView := RightListView; - end; - List := nil; // Silent compiler warnings - if Assigned(DataList) and (DataList.Count > 0) then - try - List := TList.Create; - for i := 0 to DataList.Count - 1 do List.Add(DataList[i]); - if (List.Count > 1) and (AListView.SortOrder <> soNone) then - SortDataList(List, AListView.SortOrder = soAscending, AListView.SortColumnID); - Result := DataList.IndexOf(List[Index]); - finally - List.Free; - end; -end; - (********************************************************************************************************************************) procedure TFMain.SplitterPopupMenuClick(Sender: TObject); begin @@ -4509,8 +4366,6 @@ end; procedure TFMain.ApplySettings(RebuildListViews, RebuildIcons, Startup: boolean); var i: integer; begin - InactiveItemsTimer.Enabled := False; - ButtonsBox.Visible := ConfShowFuncButtons; ButtonBoxSeparator.Visible := ConfShowFuncButtons; ButtonBoxSpace.Visible := not ConfShowFuncButtons; @@ -4531,7 +4386,6 @@ begin // Rebuild ListViews if RebuildListViews then FMain.RebuildListViews(False); - InactiveItemsTimer.Enabled := False; // Colors Section SetupColors; @@ -4539,17 +4393,15 @@ begin gtk_widget_modify_base(RightListView.FWidget, GTK_STATE_NORMAL, NormalItemGDKBackground); gtk_widget_modify_base(LeftListView.FWidget, GTK_STATE_SELECTED, ActiveItemGDKBackground); gtk_widget_modify_base(RightListView.FWidget, GTK_STATE_SELECTED, ActiveItemGDKBackground); -// if Application.GTKVersion_2_6_0_Up then begin - gtk_widget_modify_base(LeftListView.FWidget, GTK_STATE_ACTIVE, InactiveItemGDKBackground); - gtk_widget_modify_base(RightListView.FWidget, GTK_STATE_ACTIVE, InactiveItemGDKBackground); - - gtk_widget_modify_text(LeftListView.FWidget, GTK_STATE_NORMAL, NormalItemGDKColor); - gtk_widget_modify_text(RightListView.FWidget, GTK_STATE_NORMAL, NormalItemGDKColor); - gtk_widget_modify_text(LeftListView.FWidget, GTK_STATE_SELECTED, ActiveItemGDKColor); - gtk_widget_modify_text(RightListView.FWidget, GTK_STATE_SELECTED, ActiveItemGDKColor); - gtk_widget_modify_text(LeftListView.FWidget, GTK_STATE_ACTIVE, InactiveItemGDKColor); - gtk_widget_modify_text(RightListView.FWidget, GTK_STATE_ACTIVE, InactiveItemGDKColor); -// end; + gtk_widget_modify_base(LeftListView.FWidget, GTK_STATE_ACTIVE, InactiveItemGDKBackground); + gtk_widget_modify_base(RightListView.FWidget, GTK_STATE_ACTIVE, InactiveItemGDKBackground); + + gtk_widget_modify_text(LeftListView.FWidget, GTK_STATE_NORMAL, NormalItemGDKColor); + gtk_widget_modify_text(RightListView.FWidget, GTK_STATE_NORMAL, NormalItemGDKColor); + gtk_widget_modify_text(LeftListView.FWidget, GTK_STATE_SELECTED, ActiveItemGDKColor); + gtk_widget_modify_text(RightListView.FWidget, GTK_STATE_SELECTED, ActiveItemGDKColor); + gtk_widget_modify_text(LeftListView.FWidget, GTK_STATE_ACTIVE, InactiveItemGDKColor); + gtk_widget_modify_text(RightListView.FWidget, GTK_STATE_ACTIVE, InactiveItemGDKColor); // Resize commandline history if ConfNumHistoryItems < CommandLineHistory.Count then begin @@ -4815,7 +4667,6 @@ begin if LeftPanel then AListView := LeftListView else AListView := RightListView; FilePopupMenuPopup(AListView); - if not Application.GTKVersion_2_0_5_Up then FilePopupMenu.PopUp else gtk_menu_popup(PGtkMenu(FilePopupMenu.FMenu), nil, nil, file_popup_position_cb, AListView, 0, gtk_get_current_event_time()); end; @@ -5223,7 +5074,6 @@ begin RightListView.Columns.Clear; ConstructColumns(LeftListView); ConstructColumns(RightListView); - InactiveItemsTimer.Enabled := False; if DoRefresh then begin Application.ProcessMessages; FMain.DoRefresh(True, True, True); @@ -6095,7 +5945,7 @@ begin for i := 0 to DataList.Count - 1 do if WideCompareText(string(PDataItem(DataList[i])^.FName), ExtractFileName(FSearch.GoToFile)) = 0 then begin AListView.Items[i].Selected := True; - AListView.Items[i].SetCursor(0, False, not Application.GTKVersion_2_2_0_Up, 0.5, 0); + AListView.Items[i].SetCursor(0, False, False, 0.5, 0); Break; end; end; -- cgit v1.2.3