aboutsummaryrefslogtreecommitdiffstats
path: root/widgets
diff options
context:
space:
mode:
Diffstat (limited to 'widgets')
-rw-r--r--widgets/aerc.go9
-rw-r--r--widgets/dialog.go24
2 files changed, 32 insertions, 1 deletions
diff --git a/widgets/aerc.go b/widgets/aerc.go
index 2383973a..1e2a4cdd 100644
--- a/widgets/aerc.go
+++ b/widgets/aerc.go
@@ -187,7 +187,14 @@ func (aerc *Aerc) Draw(ctx *ui.Context) {
aerc.grid.Draw(ctx)
if aerc.dialog != nil {
if w, h := ctx.Width(), ctx.Height(); w > 8 && h > 4 {
- aerc.dialog.Draw(ctx.Subcontext(4, h/2-2, w-8, 4))
+ if d, ok := aerc.dialog.(Dialog); ok {
+ start, height := d.ContextHeight()
+ aerc.dialog.Draw(
+ ctx.Subcontext(4, start(h),
+ w-8, height(h)))
+ } else {
+ aerc.dialog.Draw(ctx.Subcontext(4, h/2-2, w-8, 4))
+ }
}
}
}
diff --git a/widgets/dialog.go b/widgets/dialog.go
new file mode 100644
index 00000000..1af4456a
--- /dev/null
+++ b/widgets/dialog.go
@@ -0,0 +1,24 @@
+package widgets
+
+import (
+ "git.sr.ht/~rjarry/aerc/lib/ui"
+)
+
+type Dialog interface {
+ ui.DrawableInteractive
+ ContextHeight() (func(int) int, func(int) int)
+}
+
+type dialog struct {
+ ui.DrawableInteractive
+ y func(int) int
+ h func(int) int
+}
+
+func (d *dialog) ContextHeight() (func(int) int, func(int) int) {
+ return d.y, d.h
+}
+
+func NewDialog(d ui.DrawableInteractive, y func(int) int, h func(int) int) Dialog {
+ return &dialog{DrawableInteractive: d, y: y, h: h}
+}