GTK+ 3: fix problem with sizing initially unshown items

This repair is especially aimed at avoiding missing toolbar
buttons in DrRacket.
This commit is contained in:
Matthew Flatt 2016-08-20 09:26:03 -06:00
parent c700e32c17
commit 6b2f4a72ae
3 changed files with 14 additions and 3 deletions

View File

@ -237,6 +237,8 @@
(define/override (set-child-size child-gtk x y w h)
(gtk_fixed_move panel-gtk child-gtk (->screen x) (->screen y))
;; gtk3: we expect a panel in a frame to be always visible, so
;; this size erquest should work
(gtk_widget_set_size_request child-gtk (->screen w) (->screen h)))
(define/public (on-close) #t)

View File

@ -28,6 +28,7 @@
(define-gtk gtk_event_box_set_visible_window (_fun _GtkWidget _gboolean -> _void))
(define-gtk gtk_fixed_move (_fun _GtkWidget _GtkWidget _int _int -> _void))
(define-gtk gtk_widget_get_visible (_fun _GtkWidget -> _gboolean))
(define-gtk gtk_container_set_border_width (_fun _GtkWidget _int -> _void))
@ -137,7 +138,15 @@
(super-new)
(define/override (set-child-size child-gtk x y w h)
(gtk_fixed_move (get-container-gtk) child-gtk (->screen x) (->screen y))
(gtk_widget_set_size_request child-gtk (->screen w) (->screen h)))))
(define re-hide?
(and gtk3?
(not (gtk_widget_get_visible child-gtk))
(begin
(gtk_widget_show child-gtk)
#t)))
(gtk_widget_set_size_request child-gtk (->screen w) (->screen h))
(when re-hide?
(gtk_widget_hide child-gtk)))))
(define panel%
(class (panel-container-mixin (panel-mixin window%))

View File

@ -614,7 +614,7 @@
(set! client-delta-h (->normal
(- (GtkRequisition-height req)
(GtkRequisition-height creq)))))
(when gtk3? (gtk_widget_show gtk))))
(when gtk3? (gtk_widget_hide gtk))))
(define/public (set-auto-size [dw 0] [dh 0])
(let ([req (make-GtkRequisition 0 0)])
@ -633,7 +633,7 @@
(define/public (direct-show on?)
;; atomic mode
(if on?
(gtk_widget_show gtk)
(gtk_widget_show gtk)
(gtk_widget_hide gtk))
(set! shown? (and on? #t))
(register-child-in-parent on?)