diff --git a/gdk/directfb/gdkkeys-directfb.c b/gdk/directfb/gdkkeys-directfb.c
--- a/gdk/directfb/gdkkeys-directfb.c
+++ b/gdk/directfb/gdkkeys-directfb.c
@@ -1935,7 +1935,7 @@ gdk_keymap_translate_keyboard_state (Gdk
 			if (level)
 				*level = i;
 
-			if (i && directfb_keymap[index + 2 * *effective_group] != *keyval)
+			if (i && directfb_keymap[index + (effective_group ? 2 * *effective_group : 0)] != *keyval)
                 if(consumed_modifiers)
 				    *consumed_modifiers |= GDK_SHIFT_MASK;
 
diff --git a/gdk/directfb/gdkwindow-directfb.c b/gdk/directfb/gdkwindow-directfb.c
--- a/gdk/directfb/gdkwindow-directfb.c
+++ b/gdk/directfb/gdkwindow-directfb.c
@@ -130,7 +130,13 @@ gdk_window_directfb_process_all_updates 
   tmp_list = old_update_windows;
   while (tmp_list)
     {
-      GdkWindowObject *top = GDK_WINDOW_OBJECT( gdk_window_get_toplevel( win ) );
+      GdkWindow *win = tmp_list->data;
+      GdkWindowObject *top;
+
+      if (GDK_WINDOW_DESTROYED(win))
+        goto NEXT;
+
+      top = GDK_WINDOW_OBJECT( gdk_window_get_toplevel( win ) );
 
       if (top)
         {
@@ -152,6 +158,7 @@ gdk_window_directfb_process_all_updates 
       else
         D_DEBUG_AT( GDKDFB_Updates, "  -> %p has no top level window!\n", tmp_list->data );
 
+NEXT:
       g_object_unref (tmp_list->data);
       tmp_list = tmp_list->next;
     }
