From 90bd7eaa6436bb7fe7c2ba1ed6d251712c0d404b Mon Sep 17 00:00:00 2001 From: Ged Murphy Date: Wed, 6 Oct 2010 14:13:00 +0000 Subject: [PATCH] - Implement monitor bitmap support for the display dialog - Fix incorrect codepage values - Look for applets in windows dir as well as system dir - Patch by Carlo Bramix See issue #3158 for more details. svn path=/trunk/; revision=49017 --- reactos/dll/cpl/desk/background.c | 221 +++++++++++++++++------------ reactos/dll/cpl/desk/devsett.c | 2 +- reactos/dll/cpl/desk/lang/bg-BG.rc | 4 +- reactos/dll/cpl/desk/lang/cs-CZ.rc | 4 +- reactos/dll/cpl/desk/lang/de-DE.rc | 4 +- reactos/dll/cpl/desk/lang/el-GR.rc | 4 +- reactos/dll/cpl/desk/lang/en-US.rc | 4 +- reactos/dll/cpl/desk/lang/es-ES.rc | 4 +- reactos/dll/cpl/desk/lang/fr-FR.rc | 4 +- reactos/dll/cpl/desk/lang/hu-HU.rc | 4 +- reactos/dll/cpl/desk/lang/id-ID.rc | 4 +- reactos/dll/cpl/desk/lang/it-IT.rc | 8 +- reactos/dll/cpl/desk/lang/ja-JP.rc | 4 +- reactos/dll/cpl/desk/lang/nl-NL.rc | 4 +- reactos/dll/cpl/desk/lang/no-NO.rc | 4 +- reactos/dll/cpl/desk/lang/pl-PL.rc | 4 +- reactos/dll/cpl/desk/lang/ro-RO.rc | 4 +- reactos/dll/cpl/desk/lang/ru-RU.rc | 4 +- reactos/dll/cpl/desk/lang/sk-SK.rc | 4 +- reactos/dll/cpl/desk/lang/sv-SE.rc | 4 +- reactos/dll/cpl/desk/lang/uk-UA.rc | 4 +- reactos/dll/cpl/desk/lang/zh-CN.rc | 4 +- reactos/dll/cpl/desk/screensaver.c | 133 +++++++++++------ 23 files changed, 260 insertions(+), 180 deletions(-) diff --git a/reactos/dll/cpl/desk/background.c b/reactos/dll/cpl/desk/background.c index 32d45c6892c..50d8b46ef2a 100644 --- a/reactos/dll/cpl/desk/background.c +++ b/reactos/dll/cpl/desk/background.c @@ -17,6 +17,18 @@ #define PLACEMENT_STRETCH 1 #define PLACEMENT_TILE 2 +/* The values in these macros are dependant on the + * layout of the monitor image and they must be adjusted + * if that image will be changed. + */ +#define MONITOR_LEFT 18 +#define MONITOR_TOP 18 +#define MONITOR_RIGHT 168 +#define MONITOR_BOTTOM 128 + +#define MONITOR_WIDTH (MONITOR_RIGHT-MONITOR_LEFT) +#define MONITOR_HEIGHT (MONITOR_BOTTOM-MONITOR_TOP) + typedef struct { BOOL bWallpaper; /* Is this background a wallpaper */ @@ -303,7 +315,7 @@ InitBackgroundDialog(HWND hwndDlg, PDATA pData) RegCloseKey(regKey); - pData->hBitmap = (HBITMAP) LoadImage(hApplet, MAKEINTRESOURCE(IDC_MONITOR), IMAGE_BITMAP, 0, 0, LR_LOADTRANSPARENT); + pData->hBitmap = (HBITMAP) LoadImage(hApplet, MAKEINTRESOURCE(IDC_MONITOR), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR); if (pData->hBitmap != NULL) { GetObject(pData->hBitmap, sizeof(BITMAP), &bitmap); @@ -515,93 +527,139 @@ DrawBackgroundPreview(LPDRAWITEMSTRUCT draw, PDATA pData) float scaleY; int scaledWidth; int scaledHeight; - int posX; - int posY; + int posX, desX; + int posY, desY; HBRUSH hBrush; int x; int y; + HDC hDC; + HGDIOBJ hOldObj; + RECT rcItem = { + MONITOR_LEFT, + MONITOR_TOP, + MONITOR_RIGHT, + MONITOR_BOTTOM + }; + + hDC = CreateCompatibleDC(draw->hDC); + hOldObj = SelectObject(hDC, pData->hBitmap); if (pData->backgroundItems[pData->backgroundSelection].bWallpaper == FALSE) { /* update desktop background color image */ hBrush = CreateSolidBrush(g_GlobalData.desktop_color); - FillRect(draw->hDC, &draw->rcItem, hBrush); + FillRect(hDC, &rcItem, hBrush); DeleteObject(hBrush); - return; } - - if (pData->pWallpaperBitmap == NULL) - return; - - scaleX = ((float)GetSystemMetrics(SM_CXSCREEN) - 1) / (float)draw->rcItem.right; - scaleY = ((float)GetSystemMetrics(SM_CYSCREEN) - 1) / (float)draw->rcItem.bottom; - - scaledWidth = pData->pWallpaperBitmap->width / scaleX; - scaledHeight = pData->pWallpaperBitmap->height / scaleY; - - posX = (draw->rcItem.right / 2) - (scaledWidth / 2); - posY = (draw->rcItem.bottom / 2) - (scaledHeight / 2); - - FillRect(draw->hDC, &draw->rcItem, GetSysColorBrush(COLOR_BACKGROUND)); - - SetStretchBltMode(draw->hDC, COLORONCOLOR); - - switch (pData->placementSelection) + else + if (pData->pWallpaperBitmap != NULL) { - case PLACEMENT_CENTER: - StretchDIBits(draw->hDC, - posX, - posY, - scaledWidth, - scaledHeight, - 0, - 0, - pData->pWallpaperBitmap->width, - pData->pWallpaperBitmap->height, - pData->pWallpaperBitmap->bits, - pData->pWallpaperBitmap->info, - DIB_RGB_COLORS, - SRCCOPY); - break; + scaleX = ((float)GetSystemMetrics(SM_CXSCREEN) - 1) / (float)MONITOR_WIDTH; + scaleY = ((float)GetSystemMetrics(SM_CYSCREEN) - 1) / (float)MONITOR_HEIGHT; - case PLACEMENT_STRETCH: - StretchDIBits(draw->hDC, - 0, - 0, - draw->rcItem.right, - draw->rcItem.bottom, - 0, - 0, - pData->pWallpaperBitmap->width, - pData->pWallpaperBitmap->height, - pData->pWallpaperBitmap->bits, - pData->pWallpaperBitmap->info, - DIB_RGB_COLORS, - SRCCOPY); - break; + scaledWidth = (int)(pData->pWallpaperBitmap->width / scaleX); + scaledHeight = (int)(pData->pWallpaperBitmap->height / scaleY); - case PLACEMENT_TILE: - for (y = 0; y < draw->rcItem.bottom; y += scaledHeight) - { - for (x = 0; x < draw->rcItem.right; x += scaledWidth) + FillRect(hDC, &rcItem, GetSysColorBrush(COLOR_BACKGROUND)); + + SetStretchBltMode(hDC, COLORONCOLOR); + + switch (pData->placementSelection) + { + case PLACEMENT_CENTER: + posX = (MONITOR_WIDTH - scaledWidth + 1) / 2; + posY = (MONITOR_HEIGHT - scaledHeight + 1) / 2; + desX = 0; + desY = 0; + + if (posX < 0) { desX = -posX / 2; posX = 0; } + if (posY < 0) { desY = -posY / 2; posY = 0; } + + if (scaledWidth > MONITOR_WIDTH) + scaledWidth = MONITOR_WIDTH; + + if (scaledHeight > MONITOR_HEIGHT) + scaledHeight = MONITOR_HEIGHT; + + StretchDIBits(hDC, + MONITOR_LEFT+posX, + MONITOR_TOP+posY, + scaledWidth, + scaledHeight, + desX, + desY, + pData->pWallpaperBitmap->width - (int)(desX * scaleX), + pData->pWallpaperBitmap->height - (int)(desY * scaleY), + pData->pWallpaperBitmap->bits, + pData->pWallpaperBitmap->info, + DIB_RGB_COLORS, + SRCCOPY); + break; + + case PLACEMENT_STRETCH: + StretchDIBits(hDC, + MONITOR_LEFT, + MONITOR_TOP, + MONITOR_WIDTH, + MONITOR_HEIGHT, + 0, + 0, + pData->pWallpaperBitmap->width, + pData->pWallpaperBitmap->height, + pData->pWallpaperBitmap->bits, + pData->pWallpaperBitmap->info, + DIB_RGB_COLORS, + SRCCOPY); + break; + + case PLACEMENT_TILE: + for (y = 0; y < MONITOR_HEIGHT; y += scaledHeight) { - StretchDIBits(draw->hDC, - x, - y, - scaledWidth, - scaledHeight, - 0, - 0, - pData->pWallpaperBitmap->width, - pData->pWallpaperBitmap->height, - pData->pWallpaperBitmap->bits, - pData->pWallpaperBitmap->info, - DIB_RGB_COLORS, - SRCCOPY); + for (x = 0; x < MONITOR_WIDTH; x += scaledWidth) + { + if ((MONITOR_WIDTH-x) >= scaledWidth) + posX = scaledWidth; + else + posX = MONITOR_WIDTH-x; + + + if ((MONITOR_HEIGHT-y) >= scaledHeight) + posY = scaledHeight; + else + posY = MONITOR_HEIGHT-y; + + StretchDIBits(hDC, + MONITOR_LEFT + x, + MONITOR_TOP + y, + posX, + posY, + 0, + 0, + pData->pWallpaperBitmap->width * posX / scaledWidth, + pData->pWallpaperBitmap->height * posY / scaledHeight, + pData->pWallpaperBitmap->bits, + pData->pWallpaperBitmap->info, + DIB_RGB_COLORS, + SRCCOPY); + } + } - } - break; + + break; + } } + + TransparentBlt(draw->hDC, + draw->rcItem.left, draw->rcItem.top, + draw->rcItem.right-draw->rcItem.left+1, + draw->rcItem.bottom-draw->rcItem.top+1, + hDC, + 0, 0, + pData->cxSource, pData->cySource, + 0xFF00FF); + + SelectObject(hDC, hOldObj); + DeleteDC(hDC); } @@ -724,25 +782,6 @@ BackgroundPageProc(HWND hwndDlg, } } break; - case WM_PAINT: - { - PAINTSTRUCT ps; - HDC hdc, hdcMem; - - hdc = BeginPaint(hwndDlg, &ps); - - hdcMem = CreateCompatibleDC(hdc); - SelectObject(hdcMem, pData->hBitmap); -/* - TransparentBlt(hdc, 98, 0, - pData->cxSource, pData->cySource, hdcMem, 0, 0, - pData->cxSource, pData->cySource, 0xFF80FF); -*/ - DeleteDC(hdcMem); - EndPaint(hwndDlg, &ps); - } - break; - case WM_DRAWITEM: { LPDRAWITEMSTRUCT drawItem; diff --git a/reactos/dll/cpl/desk/devsett.c b/reactos/dll/cpl/desk/devsett.c index 5c6320f5b1d..d175d1a9a6d 100644 --- a/reactos/dll/cpl/desk/devsett.c +++ b/reactos/dll/cpl/desk/devsett.c @@ -86,7 +86,7 @@ pCDevSettings_AllocAndCopyString(const TCHAR *pszSrc) wcscpy(str, pszSrc); #else - MultiByteToWideChar(CP_APC, + MultiByteToWideChar(CP_ACP, 0, pszSrc, -1, diff --git a/reactos/dll/cpl/desk/lang/bg-BG.rc b/reactos/dll/cpl/desk/lang/bg-BG.rc index 66f648a21a8..ad7e006fb9d 100644 --- a/reactos/dll/cpl/desk/lang/bg-BG.rc +++ b/reactos/dll/cpl/desk/lang/bg-BG.rc @@ -8,7 +8,7 @@ CAPTION " FONT 8, "MS Shell Dlg" BEGIN CONTROL "", IDC_BACKGROUND_PREVIEW, "Static", SS_OWNERDRAW, - 70, 10, 105, 70,WS_EX_STATICEDGE + 70, 10, 105, 80, 0 CONTROL "",IDC_BACKGROUND_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 8, 114, 174, 78 @@ -18,7 +18,7 @@ BEGIN PUSHBUTTON "&...", IDC_COLOR_BUTTON, 188, 177, 50, 15 LTEXT ":", IDC_STATIC, 188, 138, 55, 9 COMBOBOX IDC_PLACEMENT_COMBO, 188, 149, 50, 54, - CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP END diff --git a/reactos/dll/cpl/desk/lang/cs-CZ.rc b/reactos/dll/cpl/desk/lang/cs-CZ.rc index 384d954182e..0ca4627f511 100644 --- a/reactos/dll/cpl/desk/lang/cs-CZ.rc +++ b/reactos/dll/cpl/desk/lang/cs-CZ.rc @@ -12,7 +12,7 @@ CAPTION "Pozad FONT 8, "MS Shell Dlg" BEGIN CONTROL "",IDC_BACKGROUND_PREVIEW,"Static",SS_OWNERDRAW, - 70, 10, 105, 70,WS_EX_STATICEDGE + 70, 10, 105, 80, 0 CONTROL "",IDC_BACKGROUND_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,7,99,173,71 @@ -22,7 +22,7 @@ BEGIN PUSHBUTTON "&Barva...",IDC_COLOR_BUTTON,187,155,50,14 LTEXT "Umstn:",IDC_STATIC,187,98,36,8 COMBOBOX IDC_PLACEMENT_COMBO,187,108,50,90,CBS_DROPDOWNLIST | - CBS_SORT | WS_VSCROLL | WS_TABSTOP + WS_VSCROLL | WS_TABSTOP END diff --git a/reactos/dll/cpl/desk/lang/de-DE.rc b/reactos/dll/cpl/desk/lang/de-DE.rc index d0829d9fbc0..55d91d4ac31 100644 --- a/reactos/dll/cpl/desk/lang/de-DE.rc +++ b/reactos/dll/cpl/desk/lang/de-DE.rc @@ -6,7 +6,7 @@ CAPTION "Desktop" FONT 8, "MS Shell Dlg" BEGIN CONTROL "", IDC_BACKGROUND_PREVIEW, "Static", SS_OWNERDRAW, - 70, 10, 105, 70, WS_EX_STATICEDGE + 70, 10, 105, 80, 0 CONTROL "", IDC_BACKGROUND_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 8, 114, 174, 78 @@ -16,7 +16,7 @@ BEGIN PUSHBUTTON "&Farbe...", IDC_COLOR_BUTTON, 188, 177, 55, 15 LTEXT "&Ausrichtung:", IDC_STATIC, 188, 140, 50, 9 COMBOBOX IDC_PLACEMENT_COMBO, 188, 149, 50, 54, - CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP END IDD_SCREENSAVER DIALOGEX 0, 0, 246, 204 diff --git a/reactos/dll/cpl/desk/lang/el-GR.rc b/reactos/dll/cpl/desk/lang/el-GR.rc index b4abca50c6c..e9988ab2b53 100644 --- a/reactos/dll/cpl/desk/lang/el-GR.rc +++ b/reactos/dll/cpl/desk/lang/el-GR.rc @@ -6,7 +6,7 @@ CAPTION " FONT 8, "MS Shell Dlg" BEGIN CONTROL "", IDC_BACKGROUND_PREVIEW, "Static", SS_OWNERDRAW, - 70, 10, 105, 70, WS_EX_STATICEDGE + 70, 10, 105, 80, 0 CONTROL "", IDC_BACKGROUND_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 7, 99, 163, 71 @@ -16,7 +16,7 @@ BEGIN PUSHBUTTON "&...", IDC_COLOR_BUTTON, 177, 155, 64, 14 LTEXT ":", IDC_STATIC, 177, 98, 36, 8 COMBOBOX IDC_PLACEMENT_COMBO, 177, 108, 64, 90, - CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP END IDD_SCREENSAVER DIALOGEX 0, 0, 246, 204 diff --git a/reactos/dll/cpl/desk/lang/en-US.rc b/reactos/dll/cpl/desk/lang/en-US.rc index 8a04cf15668..e955b8eea16 100644 --- a/reactos/dll/cpl/desk/lang/en-US.rc +++ b/reactos/dll/cpl/desk/lang/en-US.rc @@ -6,7 +6,7 @@ CAPTION "Background" FONT 8, "MS Shell Dlg" BEGIN CONTROL "", IDC_BACKGROUND_PREVIEW, "Static", SS_OWNERDRAW, - 70, 10, 105, 70,WS_EX_STATICEDGE + 70, 10, 105, 80, 0 CONTROL "",IDC_BACKGROUND_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 8, 114, 174, 78 @@ -16,7 +16,7 @@ BEGIN PUSHBUTTON "&Color...", IDC_COLOR_BUTTON, 188, 177, 50, 15 LTEXT "Placement:", IDC_STATIC, 188, 138, 36, 9 COMBOBOX IDC_PLACEMENT_COMBO, 188, 149, 50, 54, - CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP END IDD_SCREENSAVER DIALOGEX 0, 0, 246, 204 diff --git a/reactos/dll/cpl/desk/lang/es-ES.rc b/reactos/dll/cpl/desk/lang/es-ES.rc index c6ce2ec5c9c..2d71ca2a120 100644 --- a/reactos/dll/cpl/desk/lang/es-ES.rc +++ b/reactos/dll/cpl/desk/lang/es-ES.rc @@ -14,7 +14,7 @@ CAPTION "Escritorio" FONT 8, "MS Shell Dlg" BEGIN CONTROL "", IDC_BACKGROUND_PREVIEW, "Static", SS_OWNERDRAW, - 70, 10, 105, 70,WS_EX_STATICEDGE + 70, 10, 105, 80, 0 CONTROL "",IDC_BACKGROUND_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 7, 99, 173, 71 @@ -24,7 +24,7 @@ BEGIN PUSHBUTTON "C&olor...", IDC_COLOR_BUTTON, 187, 155, 50, 14 LTEXT "Po&sicin", IDC_STATIC, 187, 98, 36, 8 COMBOBOX IDC_PLACEMENT_COMBO, 187, 108, 50, 90, - CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP END IDD_SCREENSAVER DIALOGEX 0, 0, 246, 204 diff --git a/reactos/dll/cpl/desk/lang/fr-FR.rc b/reactos/dll/cpl/desk/lang/fr-FR.rc index b4dc42fc3e3..1158e2cde64 100644 --- a/reactos/dll/cpl/desk/lang/fr-FR.rc +++ b/reactos/dll/cpl/desk/lang/fr-FR.rc @@ -9,7 +9,7 @@ CAPTION "Fond d' FONT 8, "MS Shell Dlg" BEGIN CONTROL "", IDC_BACKGROUND_PREVIEW,"Static", SS_OWNERDRAW, - 70, 10, 105, 70, WS_EX_STATICEDGE + 70, 10, 105, 80, 0 CONTROL "", IDC_BACKGROUND_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 7, 99, 173, 71 @@ -19,7 +19,7 @@ BEGIN PUSHBUTTON "&Couleur...",IDC_COLOR_BUTTON, 187, 155, 50, 14 LTEXT "Position :",IDC_STATIC, 187, 98, 36, 8 COMBOBOX IDC_PLACEMENT_COMBO, 187, 108, 50, 90, - CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP END IDD_SCREENSAVER DIALOGEX 0, 0, 246, 204 diff --git a/reactos/dll/cpl/desk/lang/hu-HU.rc b/reactos/dll/cpl/desk/lang/hu-HU.rc index 2e8c09c4817..874408398e1 100644 --- a/reactos/dll/cpl/desk/lang/hu-HU.rc +++ b/reactos/dll/cpl/desk/lang/hu-HU.rc @@ -7,7 +7,7 @@ CAPTION "H FONT 8, "MS Shell Dlg" BEGIN CONTROL "", IDC_BACKGROUND_PREVIEW, "Static", SS_OWNERDRAW, - 70, 10, 105, 70, WS_EX_STATICEDGE + 70, 10, 105, 80, 0 CONTROL "", IDC_BACKGROUND_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 7, 99, 173, 71 @@ -17,7 +17,7 @@ BEGIN PUSHBUTTON "&Sznek...", IDC_COLOR_BUTTON, 187, 155, 50, 14 LTEXT "Elrendezs:", IDC_STATIC, 187, 98, 36, 8 COMBOBOX IDC_PLACEMENT_COMBO, 187, 148, 50, 90, - CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP END IDD_SCREENSAVER DIALOGEX 0, 0, 246, 204 diff --git a/reactos/dll/cpl/desk/lang/id-ID.rc b/reactos/dll/cpl/desk/lang/id-ID.rc index 0991114c85f..c081f87009c 100644 --- a/reactos/dll/cpl/desk/lang/id-ID.rc +++ b/reactos/dll/cpl/desk/lang/id-ID.rc @@ -6,7 +6,7 @@ CAPTION "Latar Belakang" FONT 8, "MS Shell Dlg" BEGIN CONTROL "", IDC_BACKGROUND_PREVIEW, "Static", SS_OWNERDRAW, - 70, 10, 105, 70,WS_EX_STATICEDGE + 70, 10, 105, 80, 0 CONTROL "",IDC_BACKGROUND_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 8, 114, 174, 78 @@ -16,7 +16,7 @@ BEGIN PUSHBUTTON "&Warna...", IDC_COLOR_BUTTON, 188, 177, 50, 15 LTEXT "Penempatan:", IDC_STATIC, 188, 138, 36, 9 COMBOBOX IDC_PLACEMENT_COMBO, 188, 149, 50, 54, - CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP END IDD_SCREENSAVER DIALOGEX 0, 0, 246, 204 diff --git a/reactos/dll/cpl/desk/lang/it-IT.rc b/reactos/dll/cpl/desk/lang/it-IT.rc index 61546b26313..7e21fbc95ed 100644 --- a/reactos/dll/cpl/desk/lang/it-IT.rc +++ b/reactos/dll/cpl/desk/lang/it-IT.rc @@ -6,7 +6,7 @@ CAPTION "Sfondo" FONT 8, "MS Shell Dlg" BEGIN CONTROL "", IDC_BACKGROUND_PREVIEW, "Static", SS_OWNERDRAW, - 70, 10, 105, 70, WS_EX_STATICEDGE + 70, 10, 105, 80, 0 CONTROL "", IDC_BACKGROUND_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 8, 122, 174, 78 @@ -16,7 +16,7 @@ BEGIN PUSHBUTTON "&Colore...", IDC_COLOR_BUTTON, 188, 185, 50, 15 LTEXT "Posizione:", IDC_STATIC, 188, 146, 36, 9 COMBOBOX IDC_PLACEMENT_COMBO, 188, 157, 50, 54, - CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP END IDD_SCREENSAVER DIALOGEX 0, 0, 246, 204 @@ -201,8 +201,8 @@ BEGIN IDS_CPLDESCRIPTION "Adatta la visualizzazione del desktop e dello screen saver." IDS_NONE "(Niente)" IDS_CENTER "Al centro" - IDS_STRETCH "Affiancata" - IDS_TILE "Estesa" + IDS_STRETCH "Estesa" + IDS_TILE "Affiancata" END STRINGTABLE DISCARDABLE diff --git a/reactos/dll/cpl/desk/lang/ja-JP.rc b/reactos/dll/cpl/desk/lang/ja-JP.rc index 178ebd960ab..acc45c7ab73 100644 --- a/reactos/dll/cpl/desk/lang/ja-JP.rc +++ b/reactos/dll/cpl/desk/lang/ja-JP.rc @@ -6,7 +6,7 @@ CAPTION " FONT 9, "MS UI Gothic" BEGIN CONTROL "", IDC_BACKGROUND_PREVIEW, "Static", SS_OWNERDRAW, - 70, 10, 105, 70,WS_EX_STATICEDGE + 70, 10, 105, 80, 0 CONTROL "",IDC_BACKGROUND_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 8, 114, 174, 78 @@ -16,7 +16,7 @@ BEGIN PUSHBUTTON "F(&C)...", IDC_COLOR_BUTTON, 188, 177, 50, 15 LTEXT "\\ʒu:", IDC_STATIC, 188, 138, 36, 9 COMBOBOX IDC_PLACEMENT_COMBO, 188, 149, 50, 54, - CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP END IDD_SCREENSAVER DIALOGEX 0, 0, 246, 204 diff --git a/reactos/dll/cpl/desk/lang/nl-NL.rc b/reactos/dll/cpl/desk/lang/nl-NL.rc index feb903cda19..74f1842a013 100644 --- a/reactos/dll/cpl/desk/lang/nl-NL.rc +++ b/reactos/dll/cpl/desk/lang/nl-NL.rc @@ -8,7 +8,7 @@ CAPTION "Achtergrond" FONT 8, "MS Shell Dlg" BEGIN CONTROL "", IDC_BACKGROUND_PREVIEW, "Static",SS_OWNERDRAW, - 70, 10, 105, 70, WS_EX_STATICEDGE + 70, 10, 105, 80, 0 CONTROL "", IDC_BACKGROUND_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 7, 99, 173, 71 @@ -18,7 +18,7 @@ BEGIN PUSHBUTTON "&Kleur...", IDC_COLOR_BUTTON, 187, 155, 50, 14 LTEXT "&Weergave:", IDC_STATIC, 187, 98, 36, 8 COMBOBOX IDC_PLACEMENT_COMBO, 187, 108, 50, 90, - CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP END IDD_SCREENSAVER DIALOGEX 0, 0, 246, 204 diff --git a/reactos/dll/cpl/desk/lang/no-NO.rc b/reactos/dll/cpl/desk/lang/no-NO.rc index b248524805d..61edf39a2fd 100644 --- a/reactos/dll/cpl/desk/lang/no-NO.rc +++ b/reactos/dll/cpl/desk/lang/no-NO.rc @@ -6,7 +6,7 @@ CAPTION "Bakgrunn" FONT 8, "MS Shell Dlg" BEGIN CONTROL "", IDC_BACKGROUND_PREVIEW, "Static", SS_OWNERDRAW, - 70, 10, 105, 70,WS_EX_STATICEDGE + 70, 10, 105, 80, 0 CONTROL "",IDC_BACKGROUND_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 8, 114, 174, 78 @@ -16,7 +16,7 @@ BEGIN PUSHBUTTON "&Farger...", IDC_COLOR_BUTTON, 188, 177, 50, 15 LTEXT "Plassering:", IDC_STATIC, 188, 138, 36, 9 COMBOBOX IDC_PLACEMENT_COMBO, 188, 149, 50, 54, - CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP END diff --git a/reactos/dll/cpl/desk/lang/pl-PL.rc b/reactos/dll/cpl/desk/lang/pl-PL.rc index 01d7c796d70..436b9d40f6c 100644 --- a/reactos/dll/cpl/desk/lang/pl-PL.rc +++ b/reactos/dll/cpl/desk/lang/pl-PL.rc @@ -16,7 +16,7 @@ CAPTION "Pulpit" FONT 8, "MS Shell Dlg" BEGIN CONTROL "", IDC_BACKGROUND_PREVIEW, "Static", SS_OWNERDRAW, - 70, 10, 105, 70, WS_EX_STATICEDGE + 70, 10, 105, 80, 0 CONTROL "", IDC_BACKGROUND_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 7, 99, 173, 71 @@ -26,7 +26,7 @@ BEGIN PUSHBUTTON "&Kolor...", IDC_COLOR_BUTTON, 187, 155, 50, 14 LTEXT "Pooenie:", IDC_STATIC, 187, 98, 36, 8 COMBOBOX IDC_PLACEMENT_COMBO, 187, 108, 50, 90, - CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP END IDD_SCREENSAVER DIALOGEX 0, 0, 246, 204 diff --git a/reactos/dll/cpl/desk/lang/ro-RO.rc b/reactos/dll/cpl/desk/lang/ro-RO.rc index c0a738cc08e..39b0b41c41e 100644 --- a/reactos/dll/cpl/desk/lang/ro-RO.rc +++ b/reactos/dll/cpl/desk/lang/ro-RO.rc @@ -8,7 +8,7 @@ CAPTION "Fundal" FONT 8, "MS Shell Dlg" BEGIN CONTROL "", IDC_BACKGROUND_PREVIEW, "Static", SS_OWNERDRAW, - 70, 10, 105, 70,WS_EX_STATICEDGE + 70, 10, 105, 80, 0 CONTROL "",IDC_BACKGROUND_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 8, 114, 174, 78 @@ -18,7 +18,7 @@ BEGIN PUSHBUTTON "&Culoare...", IDC_COLOR_BUTTON, 188, 177, 50, 15 LTEXT "Poziție:", IDC_STATIC, 188, 138, 36, 9 COMBOBOX IDC_PLACEMENT_COMBO, 188, 149, 50, 54, - CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP END diff --git a/reactos/dll/cpl/desk/lang/ru-RU.rc b/reactos/dll/cpl/desk/lang/ru-RU.rc index ba507026e1a..519da21015f 100644 --- a/reactos/dll/cpl/desk/lang/ru-RU.rc +++ b/reactos/dll/cpl/desk/lang/ru-RU.rc @@ -6,7 +6,7 @@ CAPTION " FONT 8, "MS Shell Dlg" BEGIN CONTROL "", IDC_BACKGROUND_PREVIEW, "Static", SS_OWNERDRAW, - 70, 10, 105, 70, WS_EX_STATICEDGE + 70, 10, 105, 80, 0 CONTROL "", IDC_BACKGROUND_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 8, 114, 174, 78 @@ -16,7 +16,7 @@ BEGIN PUSHBUTTON "&...", IDC_COLOR_BUTTON, 188, 167, 55, 15 LTEXT ":", IDC_STATIC, 188, 138, 55, 9 COMBOBOX IDC_PLACEMENT_COMBO, 188, 149, 55, 54, - CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP END IDD_SCREENSAVER DIALOGEX 0, 0, 246, 204 diff --git a/reactos/dll/cpl/desk/lang/sk-SK.rc b/reactos/dll/cpl/desk/lang/sk-SK.rc index 68ccf0684cc..0743898065c 100644 --- a/reactos/dll/cpl/desk/lang/sk-SK.rc +++ b/reactos/dll/cpl/desk/lang/sk-SK.rc @@ -14,7 +14,7 @@ CAPTION "Pozadie" FONT 8, "MS Shell Dlg" BEGIN CONTROL "", IDC_BACKGROUND_PREVIEW, "Static", SS_OWNERDRAW, - 70, 10, 105, 70,WS_EX_STATICEDGE + 70, 10, 105, 80, 0 CONTROL "",IDC_BACKGROUND_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 8, 114, 174, 78 @@ -24,7 +24,7 @@ BEGIN PUSHBUTTON "&Farba...", IDC_COLOR_BUTTON, 188, 177, 50, 15 LTEXT "&Umiestnenie:", IDC_STATIC, 188, 138, 50, 9 COMBOBOX IDC_PLACEMENT_COMBO, 188, 149, 50, 54, - CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP END diff --git a/reactos/dll/cpl/desk/lang/sv-SE.rc b/reactos/dll/cpl/desk/lang/sv-SE.rc index dd70390010e..49f8c7bda2c 100644 --- a/reactos/dll/cpl/desk/lang/sv-SE.rc +++ b/reactos/dll/cpl/desk/lang/sv-SE.rc @@ -9,7 +9,7 @@ CAPTION "Bakgrund" FONT 8, "MS Shell Dlg" BEGIN CONTROL "",IDC_BACKGROUND_PREVIEW,"Static",SS_OWNERDRAW, - 70, 10, 105, 70,WS_EX_STATICEDGE + 70, 10, 105, 80, 0 CONTROL "",IDC_BACKGROUND_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,7,99,173,71 @@ -19,7 +19,7 @@ BEGIN PUSHBUTTON "&Frg...",IDC_COLOR_BUTTON,187,155,50,14 LTEXT "Placering:",IDC_STATIC,187,98,36,8 COMBOBOX IDC_PLACEMENT_COMBO,187,108,50,90,CBS_DROPDOWNLIST | - CBS_SORT | WS_VSCROLL | WS_TABSTOP + WS_VSCROLL | WS_TABSTOP END IDD_SCREENSAVER DIALOGEX 0, 0, 246, 204 diff --git a/reactos/dll/cpl/desk/lang/uk-UA.rc b/reactos/dll/cpl/desk/lang/uk-UA.rc index e92bdb04380..bcbefe72481 100644 --- a/reactos/dll/cpl/desk/lang/uk-UA.rc +++ b/reactos/dll/cpl/desk/lang/uk-UA.rc @@ -14,7 +14,7 @@ CAPTION " FONT 8, "MS Shell Dlg" BEGIN CONTROL "", IDC_BACKGROUND_PREVIEW, "Static", SS_OWNERDRAW, - 70, 10, 105, 70, WS_EX_STATICEDGE + 70, 10, 105, 80, 0 CONTROL "", IDC_BACKGROUND_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 8, 114, 174, 78 @@ -24,7 +24,7 @@ BEGIN PUSHBUTTON "&...", IDC_COLOR_BUTTON, 188, 177, 50, 15 LTEXT ":", IDC_STATIC, 188, 138, 51, 9 COMBOBOX IDC_PLACEMENT_COMBO, 188, 149, 50, 54, - CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP END IDD_SCREENSAVER DIALOGEX 0, 0, 246, 204 diff --git a/reactos/dll/cpl/desk/lang/zh-CN.rc b/reactos/dll/cpl/desk/lang/zh-CN.rc index 33e46997781..f09d566fa7f 100644 --- a/reactos/dll/cpl/desk/lang/zh-CN.rc +++ b/reactos/dll/cpl/desk/lang/zh-CN.rc @@ -13,7 +13,7 @@ CAPTION " FONT 9, "MS Shell Dlg" BEGIN CONTROL "", IDC_BACKGROUND_PREVIEW, "Static", SS_OWNERDRAW, - 70, 10, 105, 70,WS_EX_STATICEDGE + 70, 10, 105, 80, 0 CONTROL "",IDC_BACKGROUND_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 8, 114, 174, 78 @@ -23,7 +23,7 @@ BEGIN PUSHBUTTON "ɫ(&C)...", IDC_COLOR_BUTTON, 188, 177, 50, 15 LTEXT "λ:", IDC_STATIC, 188, 138, 36, 9 COMBOBOX IDC_PLACEMENT_COMBO, 188, 149, 50, 54, - CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP END diff --git a/reactos/dll/cpl/desk/screensaver.c b/reactos/dll/cpl/desk/screensaver.c index 37b8f0d576e..deeeda6ec73 100644 --- a/reactos/dll/cpl/desk/screensaver.c +++ b/reactos/dll/cpl/desk/screensaver.c @@ -22,9 +22,10 @@ typedef struct typedef struct _DATA { - ScreenSaverItem ScreenSaverItems[MAX_SCREENSAVERS]; + ScreenSaverItem ScreenSaverItems[MAX_SCREENSAVERS]; PROCESS_INFORMATION PrevWindowPi; - int Selection; + int Selection; + UINT ScreenSaverCount; } DATA, *PDATA; @@ -235,7 +236,7 @@ ScreensaverPreview(HWND hwndDlg, PDATA pData) /s Run normal */ - WCHAR szCmdline[2048]; + TCHAR szCmdline[2048]; STARTUPINFO si; PROCESS_INFORMATION pi; @@ -322,59 +323,39 @@ CheckRegScreenSaverIsSecure(HWND hwndDlg) static VOID -AddScreenSavers(HWND hwndDlg, PDATA pData) +SearchScreenSavers(HWND hwndScreenSavers, + LPCTSTR pszSearchPath, + PDATA pData) { - HWND hwndScreenSavers = GetDlgItem(hwndDlg, IDC_SCREENS_LIST); - WIN32_FIND_DATA fd; - HANDLE hFind; - TCHAR szSearchPath[MAX_PATH]; - INT i; - int ScreenSaverCount = 0; - ScreenSaverItem *ScreenSaverItem = NULL; - HANDLE hModule = NULL; + WIN32_FIND_DATA fd; + TCHAR szSearchPath[MAX_PATH]; + HANDLE hFind; + ScreenSaverItem *ScreenSaverItem; + HANDLE hModule; + UINT i, ScreenSaverCount; - /* Add the "None" item */ - ScreenSaverItem = &pData->ScreenSaverItems[ScreenSaverCount]; + ScreenSaverCount = pData->ScreenSaverCount; - ScreenSaverItem->bIsScreenSaver = FALSE; - - LoadString(hApplet, - IDS_NONE, - ScreenSaverItem->szDisplayName, - sizeof(ScreenSaverItem->szDisplayName) / sizeof(TCHAR)); - - i = SendMessage(hwndScreenSavers, - CB_ADDSTRING, - 0, - (LPARAM)ScreenSaverItem->szDisplayName); - - SendMessage(hwndScreenSavers, - CB_SETITEMDATA, - i, - (LPARAM)ScreenSaverCount); - - ScreenSaverCount++; - - /* Add all the screensavers in the C:\ReactOS\System32 directory. */ - - GetSystemDirectory(szSearchPath, MAX_PATH); + _tcscpy(szSearchPath, pszSearchPath); _tcscat(szSearchPath, TEXT("\\*.scr")); hFind = FindFirstFile(szSearchPath, &fd); - while (ScreenSaverCount < MAX_SCREENSAVERS-1 && - hFind != INVALID_HANDLE_VALUE) + + if (hFind == INVALID_HANDLE_VALUE) + return; + + while (ScreenSaverCount < MAX_SCREENSAVERS) { /* Don't add any hidden screensavers */ if ((fd.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) == 0) { TCHAR filename[MAX_PATH]; - GetSystemDirectory(filename, MAX_PATH); - - _tcscat(filename, TEXT("\\")); + _tcscpy(filename, pszSearchPath); + _tcscat(filename, _T("\\")); _tcscat(filename, fd.cFileName); - ScreenSaverItem = &pData->ScreenSaverItems[ScreenSaverCount]; + ScreenSaverItem = pData->ScreenSaverItems + ScreenSaverCount; ScreenSaverItem->bIsScreenSaver = TRUE; @@ -383,11 +364,16 @@ AddScreenSavers(HWND hwndDlg, PDATA pData) DONT_RESOLVE_DLL_REFERENCES | LOAD_LIBRARY_AS_DATAFILE); if (hModule) { - LoadString(hModule, + if (0 == LoadString(hModule, 1, ScreenSaverItem->szDisplayName, - sizeof(ScreenSaverItem->szDisplayName) / sizeof(TCHAR)); - FreeLibrary(hModule); + sizeof(ScreenSaverItem->szDisplayName) / sizeof(TCHAR))) + { + // If the string does not exists, copy the name of the file + _tcscpy(ScreenSaverItem->szDisplayName, fd.cFileName); + ScreenSaverItem->szDisplayName[_tcslen(fd.cFileName)-4] = '\0'; + } + FreeLibrary(hModule); } else { @@ -410,7 +396,62 @@ AddScreenSavers(HWND hwndDlg, PDATA pData) } if (!FindNextFile(hFind, &fd)) - hFind = INVALID_HANDLE_VALUE; + break; + } + + FindClose(hFind); + + pData->ScreenSaverCount = ScreenSaverCount; +} + + +static VOID +AddScreenSavers(HWND hwndDlg, PDATA pData) +{ + HWND hwndScreenSavers = GetDlgItem(hwndDlg, IDC_SCREENS_LIST); + TCHAR szSearchPath[MAX_PATH]; + INT i; + ScreenSaverItem *ScreenSaverItem = NULL; + LPTSTR lpBackSlash; + + /* Add the "None" item */ + ScreenSaverItem = pData->ScreenSaverItems; + + ScreenSaverItem->bIsScreenSaver = FALSE; + + LoadString(hApplet, + IDS_NONE, + ScreenSaverItem->szDisplayName, + sizeof(ScreenSaverItem->szDisplayName) / sizeof(TCHAR)); + + i = SendMessage(hwndScreenSavers, + CB_ADDSTRING, + 0, + (LPARAM)ScreenSaverItem->szDisplayName); + + SendMessage(hwndScreenSavers, + CB_SETITEMDATA, + i, + (LPARAM)0); + + // Initialize number of items into the list + pData->ScreenSaverCount = 1; + + // Add all the screensavers in the C:\ReactOS\System32 directory. + GetSystemDirectory(szSearchPath, MAX_PATH); + SearchScreenSavers(hwndScreenSavers, szSearchPath, pData); + + // Add all the screensavers in the C:\ReactOS directory. + GetWindowsDirectory(szSearchPath, MAX_PATH); + SearchScreenSavers(hwndScreenSavers, szSearchPath, pData); + + // Add all the screensavers where the applet is stored. + GetModuleFileName(hApplet, szSearchPath, MAX_PATH); + lpBackSlash = _tcsrchr(szSearchPath, _T('\\')); + if (lpBackSlash != NULL) + { + lpBackSlash = '\0'; + SearchScreenSavers(hwndScreenSavers, szSearchPath, pData); } }