diff --git a/eeshow/gui.c b/eeshow/gui.c index 3d50f23..dc4f23d 100644 --- a/eeshow/gui.c +++ b/eeshow/gui.c @@ -56,7 +56,8 @@ struct gui_sheet { struct gui_hist { struct gui_ctx *ctx; /* back link */ struct hist *hist; - struct overlay *over; /* current overlay */ + struct overlay *sheet_over; /* current overlay, on sheet */ + struct overlay *history_over; /* current overlay, in history */ struct gui_sheet *sheets; /* NULL if failed */ struct gui_hist *next; }; @@ -301,6 +302,25 @@ static struct gui_sheet *find_corresponding_sheet(struct gui_ctx *ctx, } +static bool hover_history(void *user, bool on) +{ + struct gui_hist *h = user; + struct gui_ctx *ctx = h->ctx; + char *s; + + if (on) { + s = vcs_git_long_for_pango(h->hist); + overlay_text_raw(h->history_over, s); + free(s); + } else { + overlay_text(h->history_over, "%s", + vcs_git_summary(h->hist)); + } + redraw(ctx); + return 1; +} + + static void click_history(void *user) { struct gui_hist *h = user; @@ -320,15 +340,13 @@ static void click_history(void *user) static void show_history(struct gui_ctx *ctx) { struct gui_hist *h = ctx->hist; - struct overlay *over; overlay_remove_all(&ctx->vcs_overlays); for (h = ctx->hist; h; h = h->next) { - over = overlay_add(&ctx->vcs_overlays, &ctx->aois, - NULL, click_history, h); - overlay_text(over, "%s", - vcs_git_summary(h->hist)); - overlay_style(over, + h->history_over = overlay_add(&ctx->vcs_overlays, &ctx->aois, + hover_history, click_history, h); + hover_history(h, 0); + overlay_style(h->history_over, h == ctx->curr_hist ? &style_dense_selected : &style_dense); } @@ -364,15 +382,14 @@ static bool show_history_details(void *user, bool on) { struct gui_hist *h = user; struct gui_ctx *ctx = h->ctx; - char *s; if (on) { s = vcs_git_long_for_pango(h->hist); - overlay_text_raw(h->over, s); + overlay_text_raw(h->sheet_over, s); free(s); } else { - overlay_text(h->over, "%.40s", vcs_git_summary(h->hist)); + overlay_text(h->sheet_over, "%.40s", vcs_git_summary(h->hist)); } redraw(ctx); return 1; @@ -390,7 +407,7 @@ static void go_to_sheet(struct gui_ctx *ctx, struct gui_sheet *sheet) ctx->curr_sheet = sheet; overlay_remove_all(&ctx->sheet_overlays); if (ctx->curr_hist) { - ctx->curr_hist->over = overlay_add(&ctx->sheet_overlays, + ctx->curr_hist->sheet_over = overlay_add(&ctx->sheet_overlays, &ctx->aois, show_history_details, show_history_cb, ctx->curr_hist); show_history_details(ctx->curr_hist, 0);