return TRUE;
}
+static gboolean
+gtk_combo_box_grab_broken_event (GtkWidget *widget,
+ GdkEventGrabBroken *event,
+ gpointer user_data)
+{
+ GtkComboBox *combo_box = GTK_COMBO_BOX (user_data);
+
+ if (event->grab_window == NULL)
+ gtk_combo_box_popdown (combo_box);
+
+ return TRUE;
+}
+
/**
* gtk_combo_box_popup:
* @combo_box: a #GtkComboBox
gtk_device_grab_add (priv->popup_window, pointer, TRUE);
priv->grab_pointer = pointer;
priv->grab_keyboard = keyboard;
+
+ g_signal_connect (priv->popup_window,
+ "grab-broken-event",
+ G_CALLBACK (gtk_combo_box_grab_broken_event),
+ combo_box);
}
static void
if (!gtk_widget_get_realized (GTK_WIDGET (combo_box)))
return;
+ if (priv->grab_keyboard)
+ gdk_device_ungrab (priv->grab_keyboard, GDK_CURRENT_TIME);
+ gdk_device_ungrab (priv->grab_pointer, GDK_CURRENT_TIME);
+
gtk_device_grab_remove (priv->popup_window, priv->grab_pointer);
gtk_widget_hide (priv->popup_window);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->button),