diff --git a/eeshow/gui/common.h b/eeshow/gui/common.h index e2be6ee..6f04f86 100644 --- a/eeshow/gui/common.h +++ b/eeshow/gui/common.h @@ -78,10 +78,13 @@ struct gui_ctx { struct overlay *sheet_overlays; struct overlay *hist_overlays; + struct overlay *pop_overlays; /* pop-up dialogs */ struct overlay *pop_underlays; int pop_x, pop_y; int pop_dx, pop_dy; + const void *pop_origin; /* item that created this pop-up */ + struct aoi *aois; /* areas of interest; in canvas coord */ struct gui_sheet delta_a; diff --git a/eeshow/gui/glabel.c b/eeshow/gui/glabel.c index 0f0619e..d4f8d96 100644 --- a/eeshow/gui/glabel.c +++ b/eeshow/gui/glabel.c @@ -69,6 +69,7 @@ void dehover_glabel(struct gui_ctx *ctx) { overlay_remove_all(&ctx->pop_overlays); overlay_remove_all(&ctx->pop_underlays); + ctx->pop_origin = NULL; redraw(ctx); } @@ -194,14 +195,20 @@ static bool hover_glabel(void *user, bool on) dehover_glabel(ctx); return 1; } - if (ctx->pop_underlays) - return 0; + if (ctx->pop_underlays) { + if (ctx->pop_origin == aoi_ctx) + return 0; + dehover_glabel(ctx); + } + GtkAllocation alloc; int sx, sy, ex, ey, mx, my; unsigned n = 0; struct gui_sheet *sheet; + ctx->pop_origin = aoi_ctx; + aoi_dehover(); overlay_remove_all(&ctx->pop_overlays); overlay_remove_all(&ctx->pop_underlays);