Skip to content

Commit

Permalink
[HOTPLUG] **WIP** Implement confirm devices list
Browse files Browse the repository at this point in the history
  • Loading branch information
TAN-Gaming committed Oct 28, 2023
1 parent ba889e1 commit 7133a4b
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 21 deletions.
69 changes: 66 additions & 3 deletions dll/cpl/hotplug/eject.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,55 @@

#include "hotplug.h"

static
HTREEITEM
GetTopLevelItemOfSelectedDevice(
_In_ HWND hwndDeviceTree)
{
HTREEITEM hTreeItem;

hTreeItem = TreeView_GetSelection(hwndDeviceTree);
if (!hTreeItem)
return NULL;

while (TreeView_GetParent(hwndDeviceTree, hTreeItem))
{
hTreeItem = TreeView_GetParent(hwndDeviceTree, hTreeItem);
}

return hTreeItem;
}

static
VOID
FillConfirmDeviceList(
_In_ HWND hwndDeviceTree,
_In_ HWND hwndCfmDeviceList)
{

}

static
DEVINST
GetDeviceInstForRemoval(
_In_ HWND hwndDeviceTree)
{
HTREEITEM hTreeItem;
TVITEMW item;

hTreeItem = GetTopLevelItemOfSelectedDevice(hwndDeviceTree);
if (!hTreeItem)
return 0;

ZeroMemory(&item, sizeof(item));
item.mask = TVIF_PARAM;
item.hItem = hTreeItem;

TreeView_GetItem(hwndDeviceTree, &item);

return item.lParam;
}

static
VOID
SafeRemoveDevice(
Expand All @@ -32,20 +81,30 @@ ConfirmRemovalDlgProc(
WPARAM wParam,
LPARAM lParam)
{
static DEVINST selectedDev;
PHOTPLUG_DATA pHotplugData;

pHotplugData = (PHOTPLUG_DATA)GetWindowLongPtrW(hwndDlg, DWLP_USER);

switch (uMsg)
{
case WM_INITDIALOG:
selectedDev = lParam;
{
pHotplugData = (PHOTPLUG_DATA)lParam;
SetWindowLongPtrW(hwndDlg, DWLP_USER, (LONG_PTR)pHotplugData);

ListView_SetImageList(GetDlgItem(hwndDlg, IDC_CONFIRM_STOP_DEVICE_LIST),
pHotplugData->ImageListData.ImageList,
LVSIL_NORMAL);

return TRUE;
}

case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case IDOK:
SafeRemoveDevice(selectedDev);
SafeRemoveDevice(GetDeviceInstForRemoval(pHotplugData->hwndDeviceTree));
EndDialog(hwndDlg, TRUE);
break;

Expand All @@ -56,6 +115,10 @@ ConfirmRemovalDlgProc(

break;
}

case WM_DESTROY:
SetWindowLongPtrW(hwndDlg, DWLP_USER, (LONG_PTR)NULL);
break;
}

return FALSE;
Expand Down
28 changes: 10 additions & 18 deletions dll/cpl/hotplug/hotplug.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,6 @@
#define NDEBUG
#include <debug.h>


typedef struct _HOTPLUG_DATA
{
HICON hIcon;
HICON hIconSm;
SP_CLASSIMAGELIST_DATA ImageListData;
HMENU hPopupMenu;
DWORD dwFlags;
} HOTPLUG_DATA, *PHOTPLUG_DATA;


// globals
HINSTANCE hApplet = 0;

Expand Down Expand Up @@ -456,7 +445,7 @@ SafeRemovalDlgProc(
SetupDiGetClassImageList(&pHotplugData->ImageListData);

pHotplugData->hPopupMenu = LoadMenu(hApplet, MAKEINTRESOURCE(IDM_POPUP_DEVICE_TREE));

pHotplugData->hwndDeviceTree = GetDlgItem(hwndDlg, IDC_SAFE_REMOVE_DEVICE_TREE);
pHotplugData->dwFlags = GetHotPlugFlags();

if (pHotplugData->dwFlags & HOTPLUG_DISPLAY_DEVICE_COMPONENTS)
Expand Down Expand Up @@ -509,12 +498,15 @@ SafeRemovalDlgProc(
case IDC_SAFE_REMOVE_STOP:
case IDM_STOP:
{
HWND hwndDevTree = GetDlgItem(hwndDlg, IDC_SAFE_REMOVE_DEVICE_TREE);
DialogBoxParamW(hApplet,
MAKEINTRESOURCEW(IDD_CONFIRM_STOP_HARDWARE_DIALOG),
hwndDlg,
ConfirmRemovalDlgProc,
(LPARAM)GetSelectedDeviceInst(hwndDevTree));
if (pHotplugData != NULL)
{
DialogBoxParamW(hApplet,
MAKEINTRESOURCEW(IDD_CONFIRM_STOP_HARDWARE_DIALOG),
hwndDlg,
ConfirmRemovalDlgProc,
(LPARAM)pHotplugData);
}

break;
}
}
Expand Down
9 changes: 9 additions & 0 deletions dll/cpl/hotplug/hotplug.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,15 @@ typedef struct
APPLET_PROC AppletProc;
}APPLET, *PAPPLET;

typedef struct _HOTPLUG_DATA
{
HICON hIcon;
HICON hIconSm;
SP_CLASSIMAGELIST_DATA ImageListData;
HMENU hPopupMenu;
HWND hwndDeviceTree;
DWORD dwFlags;
} HOTPLUG_DATA, *PHOTPLUG_DATA;

// eject.c
INT_PTR
Expand Down

0 comments on commit 7133a4b

Please sign in to comment.