diff --git a/windows/x11drv/keyboard.c b/windows/x11drv/keyboard.c
index 1ac70b1350b120f9c57c5824d5738b7f028afb20..50aa6e89c574f0b06e2457bfabdc155f29444325 100644
--- a/windows/x11drv/keyboard.c
+++ b/windows/x11drv/keyboard.c
@@ -127,6 +127,16 @@ static const char main_key_CF[MAIN_LEN][4] =
  "zZ","xX","cC","vV","bB","nN","mM",",'_",".","éÉ'"
 };
 
+/*** Portuguese keyboard layout */
+static const char main_key_PT[MAIN_LEN][4] =
+{
+ "\\¦","1!","2\"@","3#£","4$§","5%","6&","7/{","8([","9)]","0=}","'?","«»",
+ "qQ",  "wW","eE",  "rR", "tT", "yY", "uU", "iI", "oO", "pP", "+*\\¨","\\'\\`",
+ "aA",  "sS","dD",  "fF", "gG", "hH", "jJ", "kK", "lL", "çÇ", "ºª", "\\~\\^",
+ "zZ",  "xX","cC",  "vV", "bB", "nN", "mM", ",;", ".:", "-_",
+ "<>"
+};
+
 /*** Layout table. Add your keyboard mappings to this list */
 static struct {
  WORD lang, ansi_codepage, oem_codepage;
@@ -139,6 +149,7 @@ static struct {
  {MAKELANGID(LANG_NORWEGIAN,SUBLANG_DEFAULT),  1252, 865, &main_key_NO},
  {MAKELANGID(LANG_DANISH,SUBLANG_DEFAULT),     1252, 865, &main_key_DA},
  {MAKELANGID(LANG_FRENCH,SUBLANG_FRENCH_CANADIAN),1252,863,&main_key_CF},
+ {MAKELANGID(LANG_PORTUGUESE,SUBLANG_DEFAULT), 1252, 860, &main_key_PT},
 
  {0} /* sentinel */
 };