summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--UMain.pas36
1 files changed, 21 insertions, 15 deletions
diff --git a/UMain.pas b/UMain.pas
index d7c23a9..9f624ad 100644
--- a/UMain.pas
+++ b/UMain.pas
@@ -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