- /* Grab pointer and keyboard */
- if (priv->transfer_window == NULL) {
- gboolean has_grab = FALSE;
-
- priv->transfer_window = grab_transfer_window_get (widget);
-
- if (gdk_pointer_grab (priv->transfer_window, TRUE,
- GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
- GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK |
- GDK_POINTER_MOTION_MASK, NULL, NULL,
- GDK_CURRENT_TIME) == GDK_GRAB_SUCCESS) {
- if (gdk_keyboard_grab (priv->transfer_window, TRUE,
- GDK_CURRENT_TIME) == GDK_GRAB_SUCCESS) {
- has_grab = TRUE;
- } else {
- gdk_display_pointer_ungrab (gtk_widget_get_display (widget),
- GDK_CURRENT_TIME);
- }
- }
-
- if (has_grab) {
- gtk_grab_add (widget);
- } else {
- gdk_window_destroy (priv->transfer_window);
- priv->transfer_window = NULL;
- }
- }
-
- /* Make the menu temporary when it's mapped, so it's closed if a
- * new window appears */
- gtk_window_set_is_temporary (GTK_WINDOW (widget), TRUE);
-
- priv->find_intruder_idle_id = gdk_threads_add_idle (hildon_app_menu_find_intruder, widget);
-}
-
-static void
-hildon_app_menu_unmap (GtkWidget *widget)
-{
- HildonAppMenuPrivate *priv = HILDON_APP_MENU_GET_PRIVATE(widget);
-
- /* Remove the grab */
- if (priv->transfer_window != NULL) {
- gdk_display_pointer_ungrab (gtk_widget_get_display (widget),
- GDK_CURRENT_TIME);
- gtk_grab_remove (widget);
-
- gdk_window_destroy (priv->transfer_window);
- priv->transfer_window = NULL;
- }
-
- GTK_WIDGET_CLASS (hildon_app_menu_parent_class)->unmap (widget);
-
- gtk_window_set_is_temporary (GTK_WINDOW (widget), FALSE);