diff options
| -rw-r--r-- | UMain.pas | 36 |
1 files changed, 21 insertions, 15 deletions
@@ -1052,30 +1052,35 @@ end; procedure ListViewColumnResized(gobject: PGObject; pspec: PGParamSpec; user_data: gpointer); cdecl; var AListView: TGTKListView; i, FirstColumn, LastColumn: integer; - LeftLV, b: boolean; + LeftLV: boolean; + HandlerID: gulong; begin AListView := TGTKListView(user_data); LeftLV := AListView = FMain.LeftListView; GetFirstLastPanelColumn(FirstColumn, LastColumn); - b := True; + // Find which column trigerred the signal for i := 0 to AListView.Columns.Count - 1 do - if (AListView.Columns[i].Tag <> LastColumn) or (FirstColumn = LastColumn) then - b := b and (ConfColumnSizes[AListView.Columns[i].Tag] = AListView.Columns[i].Width); - if not b then begin - DebugMsg(['*** ListViewColumnResized']); - for i := 0 to AListView.Columns.Count - 1 do + if (AListView.Columns[i].FColumn = PGtkTreeViewColumn(gobject)) and + // Last column will always change if other one is being resized + (AListView.Columns[i].Tag <> LastColumn) and (FirstColumn <> LastColumn) and + (ConfColumnSizes[AListView.Columns[i].Tag] <> AListView.Columns[i].Width) then + begin + DebugMsg(['LeftLV = ', LeftLV, ', i = ', i, ', Tag = ', AListView.Columns[i].Tag, ', Old size = ', ConfColumnSizes[AListView.Columns[i].Tag], ', New size = ', AListView.Columns[i].Width]); ConfColumnSizes[AListView.Columns[i].Tag] := AListView.Columns[i].Width; - if LeftLV then AListView := FMain.RightListView - else AListView := FMain.LeftListView; - // Change target widths - for i := 0 to AListView.Columns.Count - 1 do - if ConfColumnSizes[AListView.Columns[i].Tag] <> AListView.Columns[i].Width then - AListView.Columns[i].FixedWidth := ConfColumnSizes[AListView.Columns[i].Tag]; - end; + // Apply on the other side + if LeftLV then AListView := FMain.RightListView + else AListView := FMain.LeftListView; + HandlerID := gulong(g_object_get_data(G_OBJECT(AListView.Columns[i].FColumn), 'Width_Notify_Handler')); + g_signal_handler_block(AListView.Columns[i].FColumn, HandlerID); + AListView.Columns[i].FixedWidth := ConfColumnSizes[AListView.Columns[i].Tag]; + g_signal_handler_unblock(AListView.Columns[i].FColumn, HandlerID); + break; + end; end; procedure TFMain.ConstructColumns(ListView: TGTKListView); var i, FirstColumn, LastColumn: integer; + HandlerID: gulong; Column: TGTKTreeViewColumn; FontDesc: PPangoFontDescription; begin @@ -1128,7 +1133,8 @@ begin end; if Application.GTKVersion_2_4_0_Up then Column.SetProperty('single-paragraph-mode', 1); Column.OnClicked := ListViewColumnClicked; - g_signal_connect(Column.FColumn, 'notify::width', G_CALLBACK(@ListViewColumnResized), ListView); + 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)); end; // Set the list font |
