* src/hildon-app-menu.c (hildon_app_menu_init): Make the window modal
authorAlberto Garcia <agarcia@igalia.com>
Wed, 11 Jun 2008 18:20:06 +0000 (18:20 +0000)
committerAlberto Garcia <agarcia@igalia.com>
Wed, 11 Jun 2008 18:20:06 +0000 (18:20 +0000)
* src/hildon-note.c (hildon_note_map)
* src/hildon-app-menu.c (hildon_app_menu_map):
Destroy the grab window if we're unable to grab the pointer

ChangeLog
src/hildon-app-menu.c
src/hildon-note.c

index 0ba7d64..3166780 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2008-06-11  Alberto Garcia  <agarcia@igalia.com>
 
+       * src/hildon-app-menu.c (hildon_app_menu_init):
+       Make the window modal
+
+       * src/hildon-note.c (hildon_note_map)
+       * src/hildon-app-menu.c (hildon_app_menu_map):
+       Destroy the grab window if we're unable to grab the pointer
+
        * src/hildon-app-menu-private.h
        * src/hildon-app-menu.c
        (hildon_app_menu_init, hildon_app_menu_finalize)
index dc02fe0..874093a 100644 (file)
@@ -230,14 +230,30 @@ hildon_app_menu_map                             (GtkWidget *widget)
 
     /* Grab pointer and keyboard */
     if (priv->transfer_window == NULL) {
+        gboolean has_grab = FALSE;
+
         priv->transfer_window = grab_transfer_window_get (widget);
-        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_keyboard_grab (priv->transfer_window, TRUE, GDK_CURRENT_TIME);
-        gtk_grab_add (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;
+        }
     }
 }
 
@@ -374,6 +390,8 @@ hildon_app_menu_init                            (HildonAppMenu *menu)
     width = gdk_screen_get_width (screen) - external_border * 2;
     gtk_window_set_default_size (GTK_WINDOW (menu), width, -1);
 
+    gtk_window_set_modal (GTK_WINDOW (menu), TRUE);
+
     gtk_widget_show_all (GTK_WIDGET (priv->vbox));
 }
 
index 821c30f..c513426 100644 (file)
@@ -465,14 +465,30 @@ hildon_note_map                                 (GtkWidget *widget)
     GTK_WIDGET_CLASS (parent_class)->map (widget);
 
     if (priv->transfer_window == NULL && priv->close_if_pressed_outside) {
+        gboolean has_grab = FALSE;
+
         priv->transfer_window = grab_transfer_window_get (widget);
-        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_keyboard_grab (priv->transfer_window, TRUE, GDK_CURRENT_TIME);
-        gtk_grab_add (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;
+        }
     }
 }