1
0
mirror of git://projects.qi-hardware.com/eda-tools.git synced 2024-11-23 02:30:36 +02:00

eeshow/gui/: bring back scrolling of the history

Now it's more usable than before, since clicking between commits won't
close the history.
This commit is contained in:
Werner Almesberger 2016-08-18 02:05:43 -03:00
parent 547e7059ae
commit fc1fbece43
2 changed files with 39 additions and 15 deletions

View File

@ -390,6 +390,8 @@ static void do_revision_overlays(struct gui_ctx *ctx);
static void hide_history(struct gui_ctx *ctx) static void hide_history(struct gui_ctx *ctx)
{ {
input_pop();
ctx->showing_history = 0; ctx->showing_history = 0;
do_revision_overlays(ctx); do_revision_overlays(ctx);
redraw(ctx); redraw(ctx);
@ -515,16 +517,6 @@ static void click_history(void *user)
} }
static void drag_overlay(void *user, int dx, int dy)
{
const struct gui_hist *h = user;
struct gui_ctx *ctx = h->ctx;
ctx->hist_y_offset += dy;
redraw(ctx);
}
static void ignore_click(void *user) static void ignore_click(void *user)
{ {
} }
@ -549,7 +541,6 @@ static struct gui_hist *skip_history(struct gui_ctx *ctx, struct gui_hist *h)
h->over = overlay_add(&ctx->hist_overlays, &ctx->aois, h->over = overlay_add(&ctx->hist_overlays, &ctx->aois,
NULL, ignore_click, h); NULL, ignore_click, h);
overlay_draggable(h->over, drag_overlay);
overlay_text(h->over, "<small>%u commits without changes</small>", n); overlay_text(h->over, "<small>%u commits without changes</small>", n);
style.width = 0; style.width = 0;
@ -561,10 +552,15 @@ static struct gui_hist *skip_history(struct gui_ctx *ctx, struct gui_hist *h)
} }
static const struct input_ops history_input_ops;
static void show_history(struct gui_ctx *ctx, enum selecting sel) static void show_history(struct gui_ctx *ctx, enum selecting sel)
{ {
struct gui_hist *h = ctx->hist; struct gui_hist *h = ctx->hist;
input_push(&history_input_ops, ctx);
ctx->showing_history = 1; ctx->showing_history = 1;
ctx->hist_y_offset = 0; ctx->hist_y_offset = 0;
ctx->selecting = sel; ctx->selecting = sel;
@ -573,7 +569,6 @@ static void show_history(struct gui_ctx *ctx, enum selecting sel)
h = skip_history(ctx, h); h = skip_history(ctx, h);
h->over = overlay_add(&ctx->hist_overlays, &ctx->aois, h->over = overlay_add(&ctx->hist_overlays, &ctx->aois,
hover_history, click_history, h); hover_history, click_history, h);
overlay_draggable(h->over, drag_overlay);
hover_history(h, 0); hover_history(h, 0);
set_history_style(h, 0); set_history_style(h, 0);
} }
@ -897,7 +892,7 @@ static void sheet_key(void *user, int x, int y, int keyval)
} }
static const struct input_ops input_sheet_ops = { static const struct input_ops sheet_input_ops = {
.click = sheet_click, .click = sheet_click,
.hover_begin = sheet_hover_update, .hover_begin = sheet_hover_update,
.hover_update = sheet_hover_update, .hover_update = sheet_hover_update,
@ -910,6 +905,34 @@ static const struct input_ops input_sheet_ops = {
}; };
/* ----- Input: history ---------------------------------------------------- */
static void history_drag_move(void *user, int dx, int dy)
{
struct gui_ctx *ctx = user;
ctx->hist_y_offset += dy;
redraw(ctx);
}
/* @@@ under construction */
static const struct input_ops history_input_ops = {
.click = sheet_click,
.hover_begin = sheet_hover_update,
.hover_update = sheet_hover_update,
.hover_click = sheet_click,
.hover_end = sheet_hover_end,
.scroll = sheet_scroll,
.drag_begin = input_accept,
.drag_move = history_drag_move,
.key = sheet_key,
};
/* ----- Event handlers ---------------------------------------------------- */ /* ----- Event handlers ---------------------------------------------------- */
@ -1451,7 +1474,7 @@ int gui(unsigned n_args, char **args, bool recurse, int limit)
go_to_sheet(&ctx, ctx.new_hist->sheets); go_to_sheet(&ctx, ctx.new_hist->sheets);
gtk_widget_show_all(window); gtk_widget_show_all(window);
input_push(&input_sheet_ops, &ctx); input_push(&sheet_input_ops, &ctx);
/* for performance testing, use -N-depth */ /* for performance testing, use -N-depth */
if (limit >= 0) if (limit >= 0)

View File

@ -147,7 +147,8 @@ static gboolean button_release_event(GtkWidget *widget, GdkEventButton *event,
switch (sp->state) { switch (sp->state) {
case input_normal: case input_normal:
abort(); /* hover_click changed the input configuration */
break;
case input_clicking: case input_clicking:
sp->state = input_normal; sp->state = input_normal;
if (sp->ops->click) if (sp->ops->click)