Fix returned value for SPI_SETMOUSEBUTTONSWAP.

diff --git a/dlls/user/sysparams.c b/dlls/user/sysparams.c
index 66bf52b..9d283ad 100644
--- a/dlls/user/sysparams.c
+++ b/dlls/user/sysparams.c
@@ -1522,18 +1522,18 @@
     {
         WCHAR buf[5];
         spi_idx = SPI_SETMOUSEBUTTONSWAP_IDX;
-
         wsprintfW(buf, CSu, uiParam);
+        /* MSDN says it returns previous state of swapbutton always */
+	ret = sysMetrics[SM_SWAPBUTTON];
         if (SYSPARAMS_Save( SPI_SETMOUSEBUTTONSWAP_REGKEY,
                             SPI_SETMOUSEBUTTONSWAP_VALNAME,
                             buf, fWinIni ))
         {
             sysMetrics[SM_SWAPBUTTON] = uiParam;
             spi_loaded[spi_idx] = TRUE;
+            SYSPARAMS_NotifyChange( uiAction, fWinIni );
         }
-        else
-            ret = FALSE;
-        break;
+        return ret;
     }
 
     WINE_SPI_FIXME(SPI_SETICONTITLELOGFONT);	/*     34 */
diff --git a/dlls/user/tests/sysparams.c b/dlls/user/tests/sysparams.c
index 9d6411f..6746b7c 100644
--- a/dlls/user/tests/sysparams.c
+++ b/dlls/user/tests/sysparams.c
@@ -1010,7 +1010,7 @@
         SetLastError(0xdeadbeef);
         rc=SystemParametersInfoA( SPI_SETMOUSEBUTTONSWAP, vals[i], 0,
                                   SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
-        if (!test_error_msg(rc,"SPI_{GET,SET}MOUSEBUTTONSWAP"))
+        if (!test_error_msg(rc!=vals[i],"SPI_{GET,SET}MOUSEBUTTONSWAP"))
             return;
             
         test_change_message( SPI_SETMOUSEBUTTONSWAP, 0 );
@@ -1023,7 +1023,7 @@
 
     rc=SystemParametersInfoA( SPI_SETMOUSEBUTTONSWAP, old_b, 0,
                               SPIF_UPDATEINIFILE );
-    ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
+    ok(!rc,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
 }
 
 static void test_SPI_SETFASTTASKSWITCH( void )         /*     36 */