From f1a573079a6a0b6cf19a57bb744ebe88399f48b0 Mon Sep 17 00:00:00 2001
From: adelikat <adelikat@users.sf.net>
Date: Fri, 15 May 2009 15:40:09 +0000
Subject: [PATCH] Win32 - applied patch from Hicoder ID: 2780499, Menu option
 for window always on top.

---
 desmume/src/windows/main.cpp     | 19 +++++++++++++++
 desmume/src/windows/resource.h   |  1 +
 desmume/src/windows/resources.rc | 42 ++++++++++++++++++--------------
 3 files changed, 44 insertions(+), 18 deletions(-)

diff --git a/desmume/src/windows/main.cpp b/desmume/src/windows/main.cpp
index cf9200d05..82b16f5af 100644
--- a/desmume/src/windows/main.cpp
+++ b/desmume/src/windows/main.cpp
@@ -3479,6 +3479,25 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM
 				ScaleScreen(1);
 			}
 			break;
+		case IDM_ALWAYS_ON_TOP:
+			{
+				LONG exStyle = GetWindowLong(MainWindow->getHWnd(), GWL_EXSTYLE);
+				UINT menuCheck = MF_BYCOMMAND;
+				HWND insertAfter = HWND_TOPMOST;
+
+	
+				if(exStyle & WS_EX_TOPMOST)
+				{
+					menuCheck |= MF_UNCHECKED;
+					insertAfter = HWND_NOTOPMOST;
+				}
+				else
+					menuCheck |= MF_CHECKED;
+				
+				CheckMenuItem(mainMenu, IDM_ALWAYS_ON_TOP, menuCheck);
+				SetWindowPos(MainWindow->getHWnd(), insertAfter, 0,0,0,0, SWP_NOMOVE | SWP_NOSIZE);
+			}
+			return 0;
 
 		}
 	}
diff --git a/desmume/src/windows/resource.h b/desmume/src/windows/resource.h
index 6e0148b88..ffd6c0695 100644
--- a/desmume/src/windows/resource.h
+++ b/desmume/src/windows/resource.h
@@ -492,6 +492,7 @@
 #define IDC_FRAMELIMIT                          40005
 #define IDC_WINDOW1_5X                          40006
 #define IDM_WIFISETTINGS                        40007
+#define IDM_ALWAYS_ON_TOP                       40008
 #define ID_VIEW_FRAMECOUNTER                    40009
 #define ID_VIEW_DISPLAYFPS                      40010
 #define ID_VIEW_DISPLAYINPUT                    40011
diff --git a/desmume/src/windows/resources.rc b/desmume/src/windows/resources.rc
index 747b542de..64687d4f9 100644
--- a/desmume/src/windows/resources.rc
+++ b/desmume/src/windows/resources.rc
@@ -101,6 +101,8 @@ MENU_PRINCIPAL MENU
             MENUITEM "2x", IDC_WINDOW2X
             MENUITEM "3x", IDC_WINDOW3X
             MENUITEM "4x", IDC_WINDOW4X
+            MENUITEM SEPARATOR
+            MENUITEM "Always On Top", IDM_ALWAYS_ON_TOP
         }
         POPUP "Screen separation"
         {
@@ -277,6 +279,8 @@ MENU_PRINCIPAL MENU
             MENUITEM "2x", IDC_WINDOW2X
             MENUITEM "3x", IDC_WINDOW3X
             MENUITEM "4x", IDC_WINDOW4X
+            MENUITEM SEPARATOR
+            MENUITEM "Always On Top", IDM_ALWAYS_ON_TOP
         }
         POPUP "Screen separation"
         {
@@ -450,6 +454,8 @@ MENU_PRINCIPAL MENU
             MENUITEM "2x", IDC_WINDOW2X
             MENUITEM "3x", IDC_WINDOW3X
             MENUITEM "4x", IDC_WINDOW4X
+            MENUITEM SEPARATOR
+            MENUITEM "Always On Top", IDM_ALWAYS_ON_TOP
         }
         POPUP "S�paration �crans"
         {
@@ -3068,8 +3074,8 @@ CAPTION "OAM Fremviser"
 FONT 8, "MS Sans Serif", 0, 0, 1
 {
     COMBOBOX        IDC_SCR_SELECT, 4, 4, 90, 14, WS_TABSTOP | WS_TABSTOP | CBS_DROPDOWNLIST
-    SCROLLBAR       IDC_SCROLLER, 48, 20, 20, 14, NOT WS_VISIBLE | NOT WS_VISIBLE
-    LTEXT           "Mode :", IDC_STATIC, 4, 36, 45, 8, SS_LEFT
+	SCROLLBAR       IDC_SCROLLER, 48, 20, 20, 14, NOT WS_VISIBLE
+	LTEXT           "Mode :", IDC_STATIC, 4, 36, 45, 8, SS_LEFT
     LTEXT           "Tile :", IDC_STATIC, 4, 46, 45, 8, SS_LEFT
     LTEXT           "Palette :", IDC_STATIC, 4, 56, 45, 8, SS_LEFT
     LTEXT           "Prio :", IDC_STATIC, 4, 66, 45, 8, SS_LEFT
@@ -3104,8 +3110,8 @@ CAPTION "OAM Viewer"
 FONT 8, "MS Sans Serif", 0, 0, 1
 {
     COMBOBOX        IDC_SCR_SELECT, 4, 4, 90, 14, WS_TABSTOP | WS_TABSTOP | CBS_DROPDOWNLIST
-    SCROLLBAR       IDC_SCROLLER, 48, 20, 20, 14, NOT WS_VISIBLE | NOT WS_VISIBLE
-    LTEXT           "Mode :", IDC_STATIC, 4, 36, 45, 8, SS_LEFT
+	SCROLLBAR       IDC_SCROLLER, 48, 20, 20, 14, NOT WS_VISIBLE
+	LTEXT           "Mode :", IDC_STATIC, 4, 36, 45, 8, SS_LEFT
     LTEXT           "Tile :", IDC_STATIC, 4, 46, 45, 8, SS_LEFT
     LTEXT           "Palette :", IDC_STATIC, 4, 56, 45, 8, SS_LEFT
     LTEXT           "Prio :", IDC_STATIC, 4, 66, 45, 8, SS_LEFT
@@ -3140,8 +3146,8 @@ CAPTION "OAM Viewer"
 FONT 8, "MS Sans Serif", 0, 0, 1
 {
     COMBOBOX        IDC_SCR_SELECT, 4, 4, 90, 14, WS_TABSTOP | WS_TABSTOP | CBS_DROPDOWNLIST
-    SCROLLBAR       IDC_SCROLLER, 48, 20, 20, 14, NOT WS_VISIBLE | NOT WS_VISIBLE
-    LTEXT           "Mode :", IDC_STATIC, 4, 36, 45, 8, SS_LEFT
+	SCROLLBAR       IDC_SCROLLER, 48, 20, 20, 14, NOT WS_VISIBLE
+	LTEXT           "Mode :", IDC_STATIC, 4, 36, 45, 8, SS_LEFT
     LTEXT           "Tile :", IDC_STATIC, 4, 46, 45, 8, SS_LEFT
     LTEXT           "Palette :", IDC_STATIC, 4, 56, 45, 8, SS_LEFT
     LTEXT           "Prio :", IDC_STATIC, 4, 66, 45, 8, SS_LEFT
@@ -3177,8 +3183,8 @@ FONT 8, "MS Sans Serif", 0, 0, 1
 {
     COMBOBOX        IDC_PAL_SELECT, 15, 3, 90, 14, WS_TABSTOP | WS_TABSTOP | CBS_DROPDOWN
     LTEXT           "Pal : 0", IDC_PALNUM, 3, 21, 25, 8, SS_LEFT
-    SCROLLBAR       IDC_SCROLLER, 30, 18, 20, 14, NOT WS_VISIBLE | NOT WS_VISIBLE
-    PUSHBUTTON      "&Luk", IDC_FERMER, 35, 169, 50, 14, BS_PUSHBUTTON
+	SCROLLBAR       IDC_SCROLLER, 30, 18, 20, 14, NOT WS_VISIBLE
+	PUSHBUTTON      "&Luk", IDC_FERMER, 35, 169, 50, 14, BS_PUSHBUTTON
     AUTOCHECKBOX    "&Auto-update", IDC_AUTO_UPDATE, 13, 150, 54, 14, BS_AUTOCHECKBOX
     EDITTEXT        IDC_AUTO_UPDATE_SECS, 68, 151, 12, 14, WS_DISABLED | ES_AUTOHSCROLL | ES_READONLY
     CONTROL         "", IDC_AUTO_UPDATE_SPIN, UPDOWN_CLASS, WS_DISABLED | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_SETBUDDYINT, 80, 151, 11, 14
@@ -3195,8 +3201,8 @@ FONT 8, "MS Sans Serif", 0, 0, 1
 {
     COMBOBOX        IDC_PAL_SELECT, 15, 3, 90, 14, WS_TABSTOP | WS_TABSTOP | CBS_DROPDOWN
     LTEXT           "Pal : 0", IDC_PALNUM, 3, 21, 25, 8, SS_LEFT
-    SCROLLBAR       IDC_SCROLLER, 30, 18, 20, 14, NOT WS_VISIBLE | NOT WS_VISIBLE
-    PUSHBUTTON      "&Close", IDC_FERMER, 35, 169, 50, 14, BS_PUSHBUTTON
+	SCROLLBAR       IDC_SCROLLER, 30, 18, 20, 14, NOT WS_VISIBLE
+	PUSHBUTTON      "&Close", IDC_FERMER, 35, 169, 50, 14, BS_PUSHBUTTON
     AUTOCHECKBOX    "&Auto-update", IDC_AUTO_UPDATE, 13, 150, 54, 14, BS_AUTOCHECKBOX
     EDITTEXT        IDC_AUTO_UPDATE_SECS, 68, 151, 12, 14, WS_DISABLED | ES_AUTOHSCROLL | ES_READONLY
     CONTROL         "", IDC_AUTO_UPDATE_SPIN, UPDOWN_CLASS, WS_DISABLED | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_SETBUDDYINT, 80, 151, 11, 14
@@ -3213,8 +3219,8 @@ FONT 8, "MS Sans Serif", 0, 0, 1
 {
     COMBOBOX        IDC_PAL_SELECT, 15, 3, 90, 14, WS_TABSTOP | WS_TABSTOP | CBS_DROPDOWN
     LTEXT           "Pal : 0", IDC_PALNUM, 3, 21, 25, 8, SS_LEFT
-    SCROLLBAR       IDC_SCROLLER, 30, 18, 20, 14, NOT WS_VISIBLE | NOT WS_VISIBLE
-    PUSHBUTTON      "&Fermer", IDC_FERMER, 35, 169, 50, 14, BS_PUSHBUTTON
+	SCROLLBAR       IDC_SCROLLER, 30, 18, 20, 14, NOT WS_VISIBLE
+	PUSHBUTTON      "&Fermer", IDC_FERMER, 35, 169, 50, 14, BS_PUSHBUTTON
     AUTOCHECKBOX    "&Auto-update", IDC_AUTO_UPDATE, 13, 150, 54, 14, BS_AUTOCHECKBOX
     EDITTEXT        IDC_AUTO_UPDATE_SECS, 68, 151, 12, 14, WS_DISABLED | ES_AUTOHSCROLL | ES_READONLY
     CONTROL         "", IDC_AUTO_UPDATE_SPIN, UPDOWN_CLASS, WS_DISABLED | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_SETBUDDYINT, 80, 151, 11, 14
@@ -3398,8 +3404,8 @@ FONT 8, "MS Sans Serif", 0, 0, 1
 {
     COMBOBOX        IDC_PAL_SELECT, 4, 13, 90, 14, WS_TABSTOP | WS_TABSTOP | CBS_DROPDOWN
     LTEXT           "Pal : 0", IDC_PALNUM, 4, 31, 25, 8, SS_LEFT
-    SCROLLBAR       IDC_SCROLLER, 30, 28, 20, 14, NOT WS_VISIBLE | NOT WS_VISIBLE
-    COMBOBOX        IDC_MEM_SELECT, 4, 50, 90, 14, WS_TABSTOP | WS_TABSTOP | CBS_DROPDOWN
+	SCROLLBAR       IDC_SCROLLER, 30, 28, 20, 14, NOT WS_VISIBLE
+	COMBOBOX        IDC_MEM_SELECT, 4, 50, 90, 14, WS_TABSTOP | WS_TABSTOP | CBS_DROPDOWN
     AUTORADIOBUTTON "Bitmap", IDC_BITMAP, 4, 68, 35, 10, WS_GROUP | WS_TABSTOP | BS_AUTORADIOBUTTON
     AUTORADIOBUTTON "256 Farver", IDC_256COUL, 4, 80, 55, 10, WS_TABSTOP | BS_AUTORADIOBUTTON
     AUTORADIOBUTTON "16 Farver", IDC_16COUL, 4, 92, 50, 10, WS_TABSTOP | BS_AUTORADIOBUTTON
@@ -3423,8 +3429,8 @@ FONT 8, "MS Sans Serif", 0, 0, 1
 {
     COMBOBOX        IDC_PAL_SELECT, 4, 13, 90, 14, WS_TABSTOP | WS_TABSTOP | CBS_DROPDOWN
     LTEXT           "Pal : 0", IDC_PALNUM, 4, 31, 25, 8, SS_LEFT
-    SCROLLBAR       IDC_SCROLLER, 30, 28, 20, 14, NOT WS_VISIBLE | NOT WS_VISIBLE
-    COMBOBOX        IDC_MEM_SELECT, 4, 50, 90, 14, WS_TABSTOP | WS_TABSTOP | CBS_DROPDOWN
+	SCROLLBAR       IDC_SCROLLER, 30, 28, 20, 14, NOT WS_VISIBLE
+	COMBOBOX        IDC_MEM_SELECT, 4, 50, 90, 14, WS_TABSTOP | WS_TABSTOP | CBS_DROPDOWN
     AUTORADIOBUTTON "Bitmap", IDC_BITMAP, 4, 68, 35, 10, WS_GROUP | WS_TABSTOP | BS_AUTORADIOBUTTON
     AUTORADIOBUTTON "256 colors", IDC_256COUL, 4, 80, 55, 10, WS_TABSTOP | BS_AUTORADIOBUTTON
     AUTORADIOBUTTON "16 colors", IDC_16COUL, 4, 92, 50, 10, WS_TABSTOP | BS_AUTORADIOBUTTON
@@ -3448,8 +3454,8 @@ FONT 8, "MS Sans Serif", 0, 0, 1
 {
     COMBOBOX        IDC_PAL_SELECT, 4, 13, 90, 14, WS_TABSTOP | WS_TABSTOP | CBS_DROPDOWN
     LTEXT           "Pal : 0", IDC_PALNUM, 4, 31, 25, 8, SS_LEFT
-    SCROLLBAR       IDC_SCROLLER, 30, 28, 20, 14, NOT WS_VISIBLE | NOT WS_VISIBLE
-    COMBOBOX        IDC_MEM_SELECT, 4, 50, 90, 14, WS_TABSTOP | WS_TABSTOP | CBS_DROPDOWN
+	SCROLLBAR       IDC_SCROLLER, 30, 28, 20, 14, NOT WS_VISIBLE
+	COMBOBOX        IDC_MEM_SELECT, 4, 50, 90, 14, WS_TABSTOP | WS_TABSTOP | CBS_DROPDOWN
     AUTORADIOBUTTON "Bitmap", IDC_BITMAP, 4, 68, 35, 10, WS_GROUP | WS_TABSTOP | BS_AUTORADIOBUTTON
     AUTORADIOBUTTON "256 couleurs", IDC_256COUL, 4, 80, 55, 10, WS_TABSTOP | BS_AUTORADIOBUTTON
     AUTORADIOBUTTON "16 couleurs", IDC_16COUL, 4, 92, 50, 10, WS_TABSTOP | BS_AUTORADIOBUTTON