diff --git a/reactos/dll/cpl/desk/de.rc b/reactos/dll/cpl/desk/de.rc index cd6e3c8f11a..8ca1b4afba7 100644 --- a/reactos/dll/cpl/desk/de.rc +++ b/reactos/dll/cpl/desk/de.rc @@ -55,6 +55,18 @@ BEGIN 90,112,8 END +IDR_POPUP_MENU MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Konfigurieren", ID_MENU_CONFIG + MENUITEM "&Vorschau", ID_MENU_PREVIEW + MENUITEM SEPARATOR + MENUITEM "&Hinzufügen", ID_MENU_ADD + MENUITEM "&Löschen\tDel", ID_MENU_DELETE + END +END + IDD_SETTINGS DIALOGEX DISCARDABLE 0, 0, 246, 188 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Einstellungen" diff --git a/reactos/dll/cpl/desk/en.rc b/reactos/dll/cpl/desk/en.rc index 3b8d95bfaf6..93c9f1eac90 100644 --- a/reactos/dll/cpl/desk/en.rc +++ b/reactos/dll/cpl/desk/en.rc @@ -76,6 +76,18 @@ BEGIN PUSHBUTTON "Ad&vanced...",IDC_SETTINGS_ADVANCED,306,165,56,14 END +IDR_POPUP_MENU MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Configure", ID_MENU_CONFIG + MENUITEM "&Preview", ID_MENU_PREVIEW + MENUITEM SEPARATOR + MENUITEM "&Add", ID_MENU_ADD + MENUITEM "&Delete\tDel", ID_MENU_DELETE + END +END + STRINGTABLE BEGIN IDS_CPLNAME "Display" diff --git a/reactos/dll/cpl/desk/resource.h b/reactos/dll/cpl/desk/resource.h index fe54dc47486..8907226baeb 100644 --- a/reactos/dll/cpl/desk/resource.h +++ b/reactos/dll/cpl/desk/resource.h @@ -62,6 +62,13 @@ #define IDC_SETTINGS_RESOLUTION_TEXT 204 #define IDC_SETTINGS_ADVANCED 205 +#define IDR_POPUP_MENU 2010 +#define ID_MENU_CONFIG 2011 +#define ID_MENU_PREVIEW 2012 +#define ID_MENU_ADD 2013 +#define ID_MENU_DELETE 2014 + + /* Settings Page */ #define IDS_PIXEL 2301 diff --git a/reactos/dll/cpl/desk/screensaver.c b/reactos/dll/cpl/desk/screensaver.c index c75e96a82c4..86d852547ed 100644 --- a/reactos/dll/cpl/desk/screensaver.c +++ b/reactos/dll/cpl/desk/screensaver.c @@ -27,6 +27,7 @@ ScreenSaverItem g_ScreenSaverItems[MAX_SCREENSAVERS]; HWND g_hScreenBackgroundPage = NULL; HWND g_hScreengroundList = NULL; HWND ControlScreenSaverIsSecure = NULL; +HMENU g_hPopupMenu = NULL; void ListViewItemAreChanged(int itemIndex) { @@ -38,6 +39,57 @@ void ListViewItemAreChanged(int itemIndex) PropSheet_Changed(GetParent(g_hScreenBackgroundPage), g_hScreenBackgroundPage); } +void +ScreensaverConfig () +{ + /* + /p: Run in preview + /s Run normal + /c: Run configuration, hwnd is handle of calling window + /a Run change password + + */ + + WCHAR szCmdline[2048]; + STARTUPINFO si; + PROCESS_INFORMATION pi; + swprintf(szCmdline, L"%s /c",g_ScreenSaverItems[ImageListSelection].szFilename); + + ZeroMemory( &si, sizeof(si) ); + si.cb = sizeof(si); + ZeroMemory( &pi, sizeof(pi) ); + if(CreateProcess( NULL, szCmdline, NULL, NULL, FALSE, 0, NULL,NULL,&si, &pi )) + { + CloseHandle( pi.hProcess ); + CloseHandle( pi.hThread ); + } +} + +void +ScreensaverPreview () +{ + /* + /p: Run in preview + /s Run normal + /c: Run configuration, hwnd is handle of calling window + /a Run change password + */ + + WCHAR szCmdline[2048]; + STARTUPINFO si; + PROCESS_INFORMATION pi; + swprintf(szCmdline, L"%s /p",g_ScreenSaverItems[ImageListSelection].szFilename); + + ZeroMemory( &si, sizeof(si) ); + si.cb = sizeof(si); + ZeroMemory( &pi, sizeof(pi) ); + if(CreateProcess( NULL, szCmdline, NULL, NULL, FALSE, 0, NULL,NULL,&si, &pi )) + { + CloseHandle( pi.hProcess ); + CloseHandle( pi.hThread ); + } + } + INT_PTR CALLBACK ScreenSaverPageProc(HWND hwndDlg, @@ -48,13 +100,23 @@ ScreenSaverPageProc(HWND hwndDlg, g_hScreenBackgroundPage = hwndDlg; switch(uMsg) { + case WM_DESTROY: + { + DestroyMenu(g_hPopupMenu); + break; + } case WM_INITDIALOG: { g_hScreengroundList = GetDlgItem(g_hScreenBackgroundPage, IDC_SCREENS_CHOICES); SendMessage(GetDlgItem(g_hScreenBackgroundPage, IDC_SCREENS_TIME), UDM_SETRANGE, 0, MAKELONG ((short) 240, (short) 0)); AddListViewItems2(); + + g_hPopupMenu = LoadMenu(hApplet, MAKEINTRESOURCE(IDR_POPUP_MENU)); + g_hPopupMenu = GetSubMenu(g_hPopupMenu, 0); + CheckRegScreenSaverIsSecure(); } break; + case WM_COMMAND: { DWORD controlId = LOWORD(wParam); @@ -69,65 +131,40 @@ ScreenSaverPageProc(HWND hwndDlg, case IDC_SCREENS_TESTSC: // Screensaver Preview { if(command == BN_CLICKED) - { - /* - /p: Run in preview - /s Run normal - /c: Run configuration, hwnd is handle of calling window - /a Run change password - */ - - WCHAR szCmdline[2048]; - STARTUPINFO si; - PROCESS_INFORMATION pi; - swprintf(szCmdline, L"%s /p",g_ScreenSaverItems[ImageListSelection].szFilename); - - ZeroMemory( &si, sizeof(si) ); - si.cb = sizeof(si); - ZeroMemory( &pi, sizeof(pi) ); - if(CreateProcess( NULL, szCmdline, NULL, NULL, FALSE, 0, NULL,NULL,&si, &pi )) - { - CloseHandle( pi.hProcess ); - CloseHandle( pi.hThread ); - } - } - - } break; - /* case IDC_SCREENS_DELETE: // Delete Screensaver + ScreensaverPreview(); + break; + } + case ID_MENU_PREVIEW: { + ScreensaverPreview(); + break; + } + case ID_MENU_CONFIG: + { + ScreensaverConfig(); + break; + } + case ID_MENU_DELETE: // Delete Screensaver + { + LPSHFILEOPSTRUCT fos; + if(command == BN_CLICKED) { - if (ImageListSelection == 0) // Can NOT delete None sry:-) + if (ImageListSelection == 0) // Can NOT delete anything :-) return FALSE; - DeleteFileW(g_ScreenSaverItems[ImageListSelection].szFilename); + + fos->hwnd = hwndDlg; + fos->wFunc = FO_DELETE; + fos->fFlags = 0; + fos->pFrom = g_ScreenSaverItems[ImageListSelection].szFilename; + SHFileOperationW(fos); } - } break; */ + } break; case IDC_SCREENS_SETTINGS: // Screensaver Settings { if(command == BN_CLICKED) - { - /* - /p: Run in preview - /s Run normal - /c: Run configuration, hwnd is handle of calling window - /a Run change password - - */ - - WCHAR szCmdline[2048]; - STARTUPINFO si; - PROCESS_INFORMATION pi; - swprintf(szCmdline, L"%s /c",g_ScreenSaverItems[ImageListSelection].szFilename); - - ZeroMemory( &si, sizeof(si) ); - si.cb = sizeof(si); - ZeroMemory( &pi, sizeof(pi) ); - if(CreateProcess( NULL, szCmdline, NULL, NULL, FALSE, 0, NULL,NULL,&si, &pi )) - { - CloseHandle( pi.hProcess ); - CloseHandle( pi.hThread ); - } - } - } break; + ScreensaverConfig(); + break; + } case IDC_SCREENS_USEPASSCHK: // Screensaver Is Secure { if(command == BN_CLICKED) @@ -143,12 +180,21 @@ ScreenSaverPageProc(HWND hwndDlg, case WM_NOTIFY: { LPNMHDR lpnm = (LPNMHDR)lParam; - + LPNMITEMACTIVATE nmia = (LPNMITEMACTIVATE) lParam; + RECT rc; + switch(lpnm->code) { case PSN_APPLY: { return TRUE; } break; + case NM_RCLICK: + { + GetWindowRect(g_hScreengroundList, &rc); + TrackPopupMenuEx(g_hPopupMenu, TPM_RIGHTBUTTON, + rc.left + nmia->ptAction.x, rc.top + nmia->ptAction.y, hwndDlg, NULL); + break; + } case LVN_ITEMCHANGED: { LPNMLISTVIEW nm = (LPNMLISTVIEW)lParam;