shell: Make sure we have seat->pointer and seat->touch before dereferencing

Either of these may not be available when we handle wl_shell_surface.move,
and we need to not crash when that's the case.

https://bugs.freedesktop.org/show_bug.cgi?id=68649
diff --git a/src/shell.c b/src/shell.c
index 564d5be..cd94aa5 100644
--- a/src/shell.c
+++ b/src/shell.c
@@ -1226,13 +1226,15 @@
 	struct shell_surface *shsurf = wl_resource_get_user_data(resource);
 	struct weston_surface *surface;
 
-	surface = weston_surface_get_main_surface(seat->pointer->focus);
-	if (seat->pointer->button_count > 0 && seat->pointer->grab_serial == serial) {
+	if (seat->pointer &&
+	    seat->pointer->button_count > 0 &&
+	    seat->pointer->grab_serial == serial) {
 		surface = weston_surface_get_main_surface(seat->pointer->focus);
 		if ((surface == shsurf->surface) && 
 		    (surface_move(shsurf, seat) < 0))
 			wl_resource_post_no_memory(resource);
-	} else if (seat->touch->grab_serial == serial) {
+	} else if (seat->touch &&
+		   seat->touch->grab_serial == serial) {
 		surface = weston_surface_get_main_surface(seat->touch->focus);
 		if ((surface == shsurf->surface) && 
 		    (surface_touch_move(shsurf, seat) < 0))