From 20a65d96df8cfb27ebd8af3f6c5f23c5503432c5 Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Fri, 22 Aug 2014 10:52:51 -0400 Subject: [PATCH] Wrapped GTK+ Areas in a GtkOverlay in preparation for adding OpenTextFieldAt(). --- redo/area_unix.go | 2 +- redo/control_unix.go | 27 +++++++++++++++++++++++---- redo/table_unix.go | 2 +- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/redo/area_unix.go b/redo/area_unix.go index 60de5f0..7cee97b 100644 --- a/redo/area_unix.go +++ b/redo/area_unix.go @@ -50,7 +50,7 @@ func newArea(ab *areabase) Area { areabase: ab, _widget: widget, drawingarea: (*C.GtkDrawingArea)(unsafe.Pointer(widget)), - scroller: newScroller(widget, false, false), // not natively scrollable, no border + scroller: newScroller(widget, false, false, true), // not natively scrollable; no border; have an overlay for OpenTextFieldAt() clickCounter: new(clickCounter), } for _, c := range areaCallbacks { diff --git a/redo/control_unix.go b/redo/control_unix.go index fad5c35..10193e8 100644 --- a/redo/control_unix.go +++ b/redo/control_unix.go @@ -69,14 +69,28 @@ type scroller struct { scrollwidget *C.GtkWidget scrollcontainer *C.GtkContainer scrollwindow *C.GtkScrolledWindow + + overlaywidget *C.GtkWidget + overlaycontainer *C.GtkContainer + overlay *C.GtkOverlay + + addShowWhich *C.GtkWidget } -func newScroller(widget *C.GtkWidget, native bool, bordered bool) *scroller { +func newScroller(widget *C.GtkWidget, native bool, bordered bool, overlay bool) *scroller { + var o *C.GtkWidget + scrollwidget := C.gtk_scrolled_window_new(nil, nil) + if overlay { + o = C.gtk_overlay_new() + } s := &scroller{ scrollwidget: scrollwidget, scrollcontainer: (*C.GtkContainer)(unsafe.Pointer(scrollwidget)), scrollwindow: (*C.GtkScrolledWindow)(unsafe.Pointer(scrollwidget)), + overlaywidget: o, + overlaycontainer: (*C.GtkContainer)(unsafe.Pointer(o)), + overlay: (*C.GtkOverlay)(unsafe.Pointer(o)), } // give the scrolled window a border (thanks to jlindgren in irc.gimp.net/#gtk+) if bordered { @@ -87,15 +101,20 @@ func newScroller(widget *C.GtkWidget, native bool, bordered bool) *scroller { } else { C.gtk_scrolled_window_add_with_viewport(s.scrollwindow, widget) } + s.addShowWhich = s.scrollwidget + if overlay { + C.gtk_container_add(s.overlaycontainer, s.scrollwidget) + s.addShowWhich = s.overlaywidget + } return s } func (s *scroller) setParent(p *controlParent) { - C.gtk_container_add(p.c, s.scrollwidget) + C.gtk_container_add(p.c, s.addShowWhich) // see basesetParent() above for why we call gtk_widget_show_all() - C.gtk_widget_show_all(s.scrollwidget) + C.gtk_widget_show_all(s.addShowWhich) } func (s *scroller) commitResize(c *allocation, d *sizing) { - dobasecommitResize(s.scrollwidget, c, d) + dobasecommitResize(s.addShowWhich, c, d) } diff --git a/redo/table_unix.go b/redo/table_unix.go index 8fa18bc..3566c87 100644 --- a/redo/table_unix.go +++ b/redo/table_unix.go @@ -46,7 +46,7 @@ var ( func finishNewTable(b *tablebase, ty reflect.Type) Table { widget := C.gtk_tree_view_new() t := &table{ - scroller: newScroller(widget, true, true), // natively scrollable; has a border + scroller: newScroller(widget, true, true, false), // natively scrollable; has a border; no overlay tablebase: b, _widget: widget, treeview: (*C.GtkTreeView)(unsafe.Pointer(widget)),