From 5ea0c93e0f8b26c9febcb49b274d39fd926306e0 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Tue, 28 Dec 2010 14:57:36 -0700 Subject: [PATCH] gtk: combo-field% fixes Closes PR 11569 --- collects/mred/private/wx/gtk/canvas.rkt | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/collects/mred/private/wx/gtk/canvas.rkt b/collects/mred/private/wx/gtk/canvas.rkt index b0beb092bc..3961758faf 100644 --- a/collects/mred/private/wx/gtk/canvas.rkt +++ b/collects/mred/private/wx/gtk/canvas.rkt @@ -129,6 +129,8 @@ (define-gtk gtk_combo_box_set_active (_fun _GtkWidget _int -> _void)) (define-gtk gtk_combo_box_get_active (_fun _GtkWidget -> _int)) +(define-gtk gtk_combo_box_set_button_sensitivity (_fun _GtkWidget _int -> _void)) +(define GTK_SENSITIVITY_ON 1) (define-signal-handler connect-expose "expose-event" (_fun _GtkWidget _GdkEventExpose-pointer -> _gboolean) @@ -257,6 +259,7 @@ [is-combo? (let* ([gtk (as-gtk-allocation (gtk_combo_box_entry_new_text))] [orig-entry (gtk_bin_get_child gtk)]) + (gtk_combo_box_set_button_sensitivity gtk GTK_SENSITIVITY_ON) (values orig-entry gtk #f #f #f #f #f (extract-combo-button gtk) 0))] [has-border? (let ([client-gtk (gtk_drawing_area_new)] @@ -571,10 +574,22 @@ (define/public (combo-maybe-clicked) (let ([i (gtk_combo_box_get_active gtk)]) (when (i . > . -1) - (gtk_combo_box_set_active gtk -1) + (set-no-active-item) (queue-window-event this (lambda () (on-combo-select i)))))) (define/public (on-combo-select i) (void)) + (define/private (set-no-active-item) + ;; (gtk_combo_box_set_active gtk -1) should work, + ;; or using (.._iter #f) should work, but neither + ;; causes the "changed" signal to be emitted when the + ;; currently active item is re-selected, so we + ;; hack around the problem by adding an item, making + ;; it active, then removing it + (atomically + (gtk_combo_box_append_text gtk "dummy") + (gtk_combo_box_set_active gtk combo-count) + (gtk_combo_box_remove_text gtk combo-count))) + (define/public (set-combo-text t) (void)) (define/public (do-scroll direction)