forked from AuroraMiddleware/gtk
combobox: popdown() the menu during unmap()
combo_box_popdown() of course doesn’t popdown our menu if it is NULL. But the required call to this at end-of-life was in destroy(), by which point dispose() already NULLed the menu, so Menu::popdown() would never run, even if it should. Fix this by trying popdown() earlier in unmap(). Also, add a converse assurance that we don’t popup() while not mapped.
This commit is contained in:
parent
4a5cd127ff
commit
7401794de6
@ -275,6 +275,7 @@ static void gtk_combo_box_cell_editable_init (GtkCellEditableIface *iface)
|
|||||||
static void gtk_combo_box_constructed (GObject *object);
|
static void gtk_combo_box_constructed (GObject *object);
|
||||||
static void gtk_combo_box_dispose (GObject *object);
|
static void gtk_combo_box_dispose (GObject *object);
|
||||||
static void gtk_combo_box_finalize (GObject *object);
|
static void gtk_combo_box_finalize (GObject *object);
|
||||||
|
static void gtk_combo_box_unmap (GtkWidget *widget);
|
||||||
static void gtk_combo_box_destroy (GtkWidget *widget);
|
static void gtk_combo_box_destroy (GtkWidget *widget);
|
||||||
|
|
||||||
static void gtk_combo_box_set_property (GObject *object,
|
static void gtk_combo_box_set_property (GObject *object,
|
||||||
@ -688,6 +689,7 @@ gtk_combo_box_class_init (GtkComboBoxClass *klass)
|
|||||||
widget_class->get_preferred_height = gtk_combo_box_get_preferred_height;
|
widget_class->get_preferred_height = gtk_combo_box_get_preferred_height;
|
||||||
widget_class->get_preferred_height_for_width = gtk_combo_box_get_preferred_height_for_width;
|
widget_class->get_preferred_height_for_width = gtk_combo_box_get_preferred_height_for_width;
|
||||||
widget_class->get_preferred_width_for_height = gtk_combo_box_get_preferred_width_for_height;
|
widget_class->get_preferred_width_for_height = gtk_combo_box_get_preferred_width_for_height;
|
||||||
|
widget_class->unmap = gtk_combo_box_unmap;
|
||||||
widget_class->destroy = gtk_combo_box_destroy;
|
widget_class->destroy = gtk_combo_box_destroy;
|
||||||
widget_class->compute_expand = gtk_combo_box_compute_expand;
|
widget_class->compute_expand = gtk_combo_box_compute_expand;
|
||||||
|
|
||||||
@ -2274,6 +2276,8 @@ gtk_combo_box_grab_broken_event (GtkWidget *widget,
|
|||||||
* This function is mostly intended for use by accessibility technologies;
|
* This function is mostly intended for use by accessibility technologies;
|
||||||
* applications should have little use for it.
|
* applications should have little use for it.
|
||||||
*
|
*
|
||||||
|
* Before calling this, @combo_box must be mapped, or nothing will happen.
|
||||||
|
*
|
||||||
* Since: 2.4
|
* Since: 2.4
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
@ -2281,7 +2285,8 @@ gtk_combo_box_popup (GtkComboBox *combo_box)
|
|||||||
{
|
{
|
||||||
g_return_if_fail (GTK_IS_COMBO_BOX (combo_box));
|
g_return_if_fail (GTK_IS_COMBO_BOX (combo_box));
|
||||||
|
|
||||||
g_signal_emit (combo_box, combo_box_signals[POPUP], 0);
|
if (gtk_widget_get_mapped (GTK_WIDGET (combo_box)))
|
||||||
|
g_signal_emit (combo_box, combo_box_signals[POPUP], 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -4160,6 +4165,14 @@ gtk_combo_box_grab_focus (GtkWidget *widget)
|
|||||||
gtk_widget_grab_focus (combo_box->priv->button);
|
gtk_widget_grab_focus (combo_box->priv->button);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gtk_combo_box_unmap (GtkWidget *widget)
|
||||||
|
{
|
||||||
|
gtk_combo_box_popdown (GTK_COMBO_BOX (widget));
|
||||||
|
|
||||||
|
GTK_WIDGET_CLASS (gtk_combo_box_parent_class)->unmap (widget);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gtk_combo_box_destroy (GtkWidget *widget)
|
gtk_combo_box_destroy (GtkWidget *widget)
|
||||||
{
|
{
|
||||||
@ -4187,8 +4200,6 @@ gtk_combo_box_destroy (GtkWidget *widget)
|
|||||||
_gtk_bin_set_child (GTK_BIN (combo_box), NULL);
|
_gtk_bin_set_child (GTK_BIN (combo_box), NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
gtk_combo_box_popdown (combo_box);
|
|
||||||
|
|
||||||
if (priv->row_separator_destroy)
|
if (priv->row_separator_destroy)
|
||||||
priv->row_separator_destroy (priv->row_separator_data);
|
priv->row_separator_destroy (priv->row_separator_data);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user