server: Allow to send a name instead of an atom when creating a window class.
diff --git a/server/class.c b/server/class.c
index e0cfbbd..ff39dc0 100644
--- a/server/class.c
+++ b/server/class.c
@@ -142,32 +142,45 @@
 DECL_HANDLER(create_class)
 {
     struct window_class *class;
+    atom_t atom;
 
-    class = find_class( current->process, req->atom, req->instance );
+    if (get_req_data_size())
+    {
+        atom = add_global_atom( NULL, get_req_data(), get_req_data_size() / sizeof(WCHAR) );
+        if (!atom) return;
+    }
+    else
+    {
+        atom = req->atom;
+        if (!grab_global_atom( NULL, atom )) return;
+    }
+
+    class = find_class( current->process, atom, req->instance );
     if (class && !class->local == !req->local)
     {
         set_win32_error( ERROR_CLASS_ALREADY_EXISTS );
+        release_global_atom( NULL, atom );
         return;
     }
     if (req->extra < 0 || req->extra > 4096 || req->win_extra < 0 || req->win_extra > 4096)
     {
         /* don't allow stupid values here */
         set_error( STATUS_INVALID_PARAMETER );
+        release_global_atom( NULL, atom );
         return;
     }
 
-    if (!grab_global_atom( NULL, req->atom )) return;
-
     if (!(class = create_class( current->process, req->extra, req->local )))
     {
-        release_global_atom( NULL, req->atom );
+        release_global_atom( NULL, atom );
         return;
     }
-    class->atom       = req->atom;
+    class->atom       = atom;
     class->instance   = req->instance;
     class->style      = req->style;
     class->win_extra  = req->win_extra;
     class->client_ptr = req->client_ptr;
+    reply->atom = atom;
 }
 
 /* destroy a window class */