[KSPROXY]
[reactos.git] / reactos / dll / cpl / desk / background.c
index 5869ea0..fe4362a 100644 (file)
@@ -4,7 +4,7 @@
  * PROJECT:         ReactOS Display Control Panel
  * FILE:            lib/cpl/desk/background.c
  * PURPOSE:         Background property page
- * 
+ *
  * PROGRAMMERS:     Trevor McCort (lycan359@gmail.com)
  *                  Alexey Minnekhanov (minlexx@rambler.ru)
  */
@@ -63,6 +63,7 @@ AddListViewItems(HWND hwndDlg, PGLOBAL_DATA pGlobalData)
     HIMAGELIST himl;
     TCHAR wallpaperFilename[MAX_PATH];
     DWORD bufferSize = sizeof(wallpaperFilename);
+    TCHAR buffer[MAX_PATH];
     DWORD varType = REG_SZ;
     LONG result;
     UINT i = 0;
@@ -70,6 +71,7 @@ AddListViewItems(HWND hwndDlg, PGLOBAL_DATA pGlobalData)
     TCHAR separators[] = TEXT(";");
     TCHAR *token;
     HWND hwndBackgroundList;
+    TCHAR *p;
 
     hwndBackgroundList = GetDlgItem(hwndDlg, IDC_BACKGROUND_LIST);
 
@@ -80,7 +82,7 @@ AddListViewItems(HWND hwndDlg, PGLOBAL_DATA pGlobalData)
     dummy.mask      = LVCF_SUBITEM | LVCF_WIDTH;
     dummy.iSubItem  = 0;
     dummy.cx        = (clientRect.right - clientRect.left) - GetSystemMetrics(SM_CXVSCROLL);
-    ListView_InsertColumn(hwndBackgroundList, 0, &dummy);
+    (void)ListView_InsertColumn(hwndBackgroundList, 0, &dummy);
 
     /* Add the "None" item */
     backgroundItem = &pGlobalData->backgroundItems[pGlobalData->listViewItemCount];
@@ -98,7 +100,7 @@ AddListViewItems(HWND hwndDlg, PGLOBAL_DATA pGlobalData)
     listItem.iItem      = pGlobalData->listViewItemCount;
     listItem.lParam     = pGlobalData->listViewItemCount;
 
-    ListView_InsertItem(hwndBackgroundList, &listItem);
+    (void)ListView_InsertItem(hwndBackgroundList, &listItem);
     ListView_SetItemState(hwndBackgroundList, pGlobalData->listViewItemCount, LVIS_SELECTED, LVIS_SELECTED);
 
     pGlobalData->listViewItemCount++;
@@ -109,6 +111,12 @@ AddListViewItems(HWND hwndDlg, PGLOBAL_DATA pGlobalData)
     result = RegQueryValueEx(regKey, TEXT("Wallpaper"), 0, &varType, (LPBYTE)wallpaperFilename, &bufferSize);
     if ((result == ERROR_SUCCESS) && (_tcslen(wallpaperFilename) > 0))
     {
+        /* Allow environment variables in file name */
+        if (ExpandEnvironmentStrings(wallpaperFilename, buffer, MAX_PATH))
+        {
+            _tcscpy(wallpaperFilename, buffer);
+        }
+        
         himl = (HIMAGELIST)SHGetFileInfo(wallpaperFilename,
                                          0,
                                          &sfi,
@@ -120,7 +128,7 @@ AddListViewItems(HWND hwndDlg, PGLOBAL_DATA pGlobalData)
         {
             if (i++ == 0)
             {
-                ListView_SetImageList(hwndBackgroundList, himl, LVSIL_SMALL);
+                (void)ListView_SetImageList(hwndBackgroundList, himl, LVSIL_SMALL);
             }
 
             backgroundItem = &pGlobalData->backgroundItems[pGlobalData->listViewItemCount];
@@ -128,6 +136,9 @@ AddListViewItems(HWND hwndDlg, PGLOBAL_DATA pGlobalData)
             backgroundItem->bWallpaper = TRUE;
 
             _tcscpy(backgroundItem->szDisplayName, sfi.szDisplayName);
+            p = _tcsrchr(backgroundItem->szDisplayName, _T('.'));
+            if (p)
+                *p = (TCHAR)0;
             _tcscpy(backgroundItem->szFilename, wallpaperFilename);
 
             ZeroMemory(&listItem, sizeof(LV_ITEM));
@@ -138,7 +149,7 @@ AddListViewItems(HWND hwndDlg, PGLOBAL_DATA pGlobalData)
             listItem.iItem      = pGlobalData->listViewItemCount;
             listItem.lParam     = pGlobalData->listViewItemCount;
 
-            ListView_InsertItem(hwndBackgroundList, &listItem);
+            (void)ListView_InsertItem(hwndBackgroundList, &listItem);
             ListView_SetItemState(hwndBackgroundList, pGlobalData->listViewItemCount, LVIS_SELECTED, LVIS_SELECTED);
 
             pGlobalData->listViewItemCount++;
@@ -161,16 +172,16 @@ AddListViewItems(HWND hwndDlg, PGLOBAL_DATA pGlobalData)
         hFind = FindFirstFile(szSearchPath, &fd);
         while (hFind != INVALID_HANDLE_VALUE)
         {
-            /* Don't add any hidden bitmaps */
-            if ((fd.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) == 0)
-            {
-                TCHAR filename[MAX_PATH];
+            TCHAR filename[MAX_PATH];
 
-                GetWindowsDirectory(filename, MAX_PATH);
+            GetWindowsDirectory(filename, MAX_PATH);
 
-                _tcscat(filename, TEXT("\\"));
-                _tcscat(filename, fd.cFileName);
+            _tcscat(filename, TEXT("\\"));
+            _tcscat(filename, fd.cFileName);
 
+            /* Don't add any hidden bitmaps. Also don't add current wallpaper once more. */
+            if (((fd.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) == 0) && (_tcscmp(wallpaperFilename, filename) != 0))
+            {
                 himl = (HIMAGELIST)SHGetFileInfo(filename,
                                                 0,
                                                 &sfi,
@@ -183,7 +194,7 @@ AddListViewItems(HWND hwndDlg, PGLOBAL_DATA pGlobalData)
 
                 if (i++ == 0)
                 {
-                    ListView_SetImageList(hwndBackgroundList, himl, LVSIL_SMALL);
+                    (void)ListView_SetImageList(hwndBackgroundList, himl, LVSIL_SMALL);
                 }
 
                 backgroundItem = &pGlobalData->backgroundItems[pGlobalData->listViewItemCount];
@@ -191,6 +202,9 @@ AddListViewItems(HWND hwndDlg, PGLOBAL_DATA pGlobalData)
                 backgroundItem->bWallpaper = TRUE;
 
                 _tcscpy(backgroundItem->szDisplayName, sfi.szDisplayName);
+                p = _tcsrchr(backgroundItem->szDisplayName, _T('.'));
+                if (p)
+                    *p = (TCHAR)0;
                 _tcscpy(backgroundItem->szFilename, filename);
 
                 ZeroMemory(&listItem, sizeof(LV_ITEM));
@@ -201,7 +215,7 @@ AddListViewItems(HWND hwndDlg, PGLOBAL_DATA pGlobalData)
                 listItem.iItem      = pGlobalData->listViewItemCount;
                 listItem.lParam     = pGlobalData->listViewItemCount;
 
-                ListView_InsertItem(hwndBackgroundList, &listItem);
+                (void)ListView_InsertItem(hwndBackgroundList, &listItem);
 
                 pGlobalData->listViewItemCount++;
             }
@@ -260,7 +274,7 @@ InitBackgroundDialog(HWND hwndDlg, PGLOBAL_DATA pGlobalData)
             SendDlgItemMessage(hwndDlg, IDC_PLACEMENT_COMBO, CB_SETCURSEL, PLACEMENT_CENTER, 0);
             pGlobalData->placementSelection = PLACEMENT_CENTER;
         }
-        
+
         if (_ttoi(szBuffer) == 2)
         {
             SendDlgItemMessage(hwndDlg, IDC_PLACEMENT_COMBO, CB_SETCURSEL, PLACEMENT_STRETCH, 0);
@@ -285,7 +299,7 @@ InitBackgroundDialog(HWND hwndDlg, PGLOBAL_DATA pGlobalData)
 
     RegCloseKey(regKey);
 
-    pGlobalData->hBitmap = LoadImage(hApplet, MAKEINTRESOURCE(IDC_MONITOR), IMAGE_BITMAP, 0, 0, LR_LOADTRANSPARENT);
+    pGlobalData->hBitmap = (HBITMAP) LoadImage(hApplet, MAKEINTRESOURCE(IDC_MONITOR), IMAGE_BITMAP, 0, 0, LR_LOADTRANSPARENT);
     if (pGlobalData->hBitmap != NULL)
     {
         GetObject(pGlobalData->hBitmap, sizeof(BITMAP), &bitmap);
@@ -336,13 +350,13 @@ OnColorButton(HWND hwndDlg, PGLOBAL_DATA pGlobalData)
         /* Save selected color to var */
         pGlobalData->backgroundDesktopColor = cc.rgbResult;
 
-        /* Allpy buuton will be activated */
+        /* Apply button will be activated */
         PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
 
         /* Window will be updated :) */
         InvalidateRect(GetDlgItem(hwndDlg, IDC_BACKGROUND_PREVIEW), NULL, TRUE);
 
-        /* Save custom colors to reg. To this moment key must be ceated already. See above */
+        /* Save custom colors to reg. To this moment key must be created already. See above */
         res = RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("Control Panel\\Appearance"), 0,
             KEY_WRITE, &hKey);
         if (res == ERROR_SUCCESS)
@@ -390,6 +404,7 @@ OnBrowseButton(HWND hwndDlg, PGLOBAL_DATA pGlobalData)
     SHFILEINFO sfi;
     LV_ITEM listItem;
     HWND hwndBackgroundList;
+    TCHAR *p;
 
     hwndBackgroundList = GetDlgItem(hwndDlg, IDC_BACKGROUND_LIST);
 
@@ -401,7 +416,7 @@ OnBrowseButton(HWND hwndDlg, PGLOBAL_DATA pGlobalData)
 
     LoadString(hApplet, IDS_BACKGROUND_COMDLG_FILTER, filter, sizeof(filter) / sizeof(TCHAR));
 
-    /* Set lpstrFile[0] to '\0' so that GetOpenFileName does not 
+    /* Set lpstrFile[0] to '\0' so that GetOpenFileName does not
      * use the contents of szFile to initialize itself */
     ofn.lpstrFile[0] = TEXT('\0');
     ofn.nMaxFile = MAX_PATH;
@@ -432,17 +447,21 @@ OnBrowseButton(HWND hwndDlg, PGLOBAL_DATA pGlobalData)
         backgroundItem->bWallpaper = TRUE;
 
         _tcscpy(backgroundItem->szDisplayName, sfi.szDisplayName);
+        p = _tcsrchr(backgroundItem->szDisplayName, _T('.'));
+        if (p)
+            *p = (TCHAR)0;
         _tcscpy(backgroundItem->szFilename, filename);
 
         ZeroMemory(&listItem, sizeof(LV_ITEM));
         listItem.mask       = LVIF_TEXT | LVIF_PARAM | LVIF_STATE | LVIF_IMAGE;
-        listItem.state      = 0;
+        listItem.state      = LVIS_SELECTED;
         listItem.pszText    = backgroundItem->szDisplayName;
         listItem.iImage     = sfi.iIcon;
         listItem.iItem      = pGlobalData->listViewItemCount;
         listItem.lParam     = pGlobalData->listViewItemCount;
 
-        ListView_InsertItem(hwndBackgroundList, &listItem);
+        (void)ListView_InsertItem(hwndBackgroundList, &listItem);
+        SendMessage(hwndBackgroundList, WM_VSCROLL, SB_BOTTOM, 0);
 
         pGlobalData->listViewItemCount++;
     }
@@ -474,8 +493,6 @@ ListViewItemChanged(HWND hwndDlg, PGLOBAL_DATA pGlobalData, int itemIndex)
     InvalidateRect(GetDlgItem(hwndDlg, IDC_BACKGROUND_PREVIEW),
                    NULL, TRUE);
 
-    EnableWindow(GetDlgItem(hwndDlg, IDC_COLOR_BUTTON),
-                 (backgroundItem->bWallpaper == FALSE ? TRUE : FALSE));
     EnableWindow(GetDlgItem(hwndDlg, IDC_PLACEMENT_COMBO),
                  backgroundItem->bWallpaper);
 
@@ -616,7 +633,7 @@ SetWallpaper(PGLOBAL_DATA pGlobalData)
     }
     else
     {
-        SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, TEXT(""), SPIF_UPDATEINIFILE);
+        SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (void*) TEXT(""), SPIF_UPDATEINIFILE);
     }
 }
 
@@ -641,7 +658,7 @@ SetDesktopBackColor(HWND hwndDlg, PGLOBAL_DATA pGlobalData)
     if( result != ERROR_SUCCESS )
     {
         /* Key open failed; maybe it does not exist? create it! */
-        result = RegCreateKeyEx( HKEY_CURRENT_USER, TEXT("Control Panel\\Colors"), 0, NULL, 0, 
+        result = RegCreateKeyEx( HKEY_CURRENT_USER, TEXT("Control Panel\\Colors"), 0, NULL, 0,
             KEY_ALL_ACCESS, NULL, &hKey, NULL );
         /* Now key must be created and opened and hKey must point at newly created key */
         /* On error result will not contain ERROR_SUCCESS. I don't know how to handle */
@@ -669,7 +686,7 @@ BackgroundPageProc(HWND hwndDlg,
     switch (uMsg)
     {
         case WM_INITDIALOG:
-            pGlobalData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(GLOBAL_DATA));
+            pGlobalData = (GLOBAL_DATA*) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(GLOBAL_DATA));
             SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData);
             InitBackgroundDialog(hwndDlg, pGlobalData);
             break;
@@ -713,11 +730,11 @@ BackgroundPageProc(HWND hwndDlg,
 
                 hdcMem = CreateCompatibleDC(hdc);
                 SelectObject(hdcMem, pGlobalData->hBitmap);
-
+/*
                 TransparentBlt(hdc, 98, 0,
                                pGlobalData->cxSource, pGlobalData->cySource, hdcMem, 0, 0,
                                pGlobalData->cxSource, pGlobalData->cySource, 0xFF80FF);
-
+*/
                 DeleteDC(hdcMem);
                 EndPaint(hwndDlg, &ps);
             }
@@ -773,3 +790,4 @@ BackgroundPageProc(HWND hwndDlg,
     return FALSE;
 }
 
+