summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gui/gui.c23
-rw-r--r--gui/sheet.c8
2 files changed, 26 insertions, 5 deletions
diff --git a/gui/gui.c b/gui/gui.c
index 49d2016..3a66c9a 100644
--- a/gui/gui.c
+++ b/gui/gui.c
@@ -85,12 +85,25 @@ static void select_subsheet(void *user)
if (!obj->u.sheet.sheet)
return;
- for (sheet = ctx->new_hist->sheets; sheet; sheet = sheet->next)
- if (sheet->sch == obj->u.sheet.sheet) {
- go_to_sheet(ctx, sheet);
- return;
- }
+
+ if (!ctx->old_hist || ctx->diff_mode != diff_old) {
+ for (sheet = ctx->new_hist->sheets; sheet; sheet = sheet->next)
+ if (sheet->sch == obj->u.sheet.sheet) {
+ go_to_sheet(ctx, sheet);
+ return;
+ }
+ abort();
+ }
+
+ for (sheet = ctx->old_hist->sheets; sheet; sheet = sheet->next)
+ if (sheet->sch == obj->u.sheet.sheet)
+ goto found;
abort();
+
+found:
+ sheet = find_corresponding_sheet(ctx->new_hist->sheets,
+ ctx->old_hist->sheets, sheet);
+ go_to_sheet(ctx, sheet);
}
diff --git a/gui/sheet.c b/gui/sheet.c
index 5385850..9736bf4 100644
--- a/gui/sheet.c
+++ b/gui/sheet.c
@@ -367,6 +367,10 @@ static bool sheet_click(void *user, int x, int y)
canvas_coord(ctx, x, y, &ex, &ey);
+ if (ctx->old_hist && ctx->diff_mode == diff_old)
+ curr_sheet = find_corresponding_sheet(ctx->old_hist->sheets,
+ ctx->new_hist->sheets, ctx->curr_sheet);
+
if (aoi_click(ctx->aois, x, y))
return 1;
if (aoi_click(curr_sheet->aois,
@@ -388,6 +392,10 @@ static bool sheet_hover_update(void *user, int x, int y)
canvas_coord(ctx, x, y, &ex, &ey);
+ if (ctx->old_hist && ctx->diff_mode == diff_old)
+ curr_sheet = find_corresponding_sheet(ctx->old_hist->sheets,
+ ctx->new_hist->sheets, ctx->curr_sheet);
+
if (aoi_hover(ctx->aois, x, y))
return 1;
return aoi_hover(curr_sheet->aois,