+static gboolean
+hildon_app_menu_button_release (GtkWidget *widget,
+ GdkEventButton *event)
+{
+ HildonAppMenuPrivate *priv = HILDON_APP_MENU_GET_PRIVATE(widget);
+
+ if (priv->pressed_outside) {
+ int x, y;
+ gboolean released_outside;
+
+ gdk_window_get_position (widget->window, &x, &y);
+
+ /* Whether the button has been released outside the widget */
+ released_outside = (event->x_root < x || event->x_root > x + widget->allocation.width ||
+ event->y_root < y || event->y_root > y + widget->allocation.height);
+
+ if (released_outside) {
+ gtk_widget_hide (widget);
+ }
+
+ priv->pressed_outside = FALSE; /* Always reset pressed_outside to FALSE */
+ }
+
+ if (GTK_WIDGET_CLASS (hildon_app_menu_parent_class)->button_release_event) {
+ return GTK_WIDGET_CLASS (hildon_app_menu_parent_class)->button_release_event (widget, event);
+ } else {
+ return FALSE;
+ }
+}
+