Lucas Fialho Zawacki : dinput: Added display of available actions to ConfigureDevices dialog.
Alexandre Julliard
julliard at winehq.org
Tue Sep 6 11:35:51 CDT 2011
Module: wine
Branch: master
Commit: 914969186566284435c20c80cfb7c54121f1c6eb
URL: http://source.winehq.org/git/wine.git/?a=commit;h=914969186566284435c20c80cfb7c54121f1c6eb
Author: Lucas Fialho Zawacki <lfzawacki at gmail.com>
Date: Thu Sep 1 15:34:38 2011 -0300
dinput: Added display of available actions to ConfigureDevices dialog.
---
dlls/dinput/config.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 48 insertions(+), 0 deletions(-)
diff --git a/dlls/dinput/config.c b/dlls/dinput/config.c
index 086ee14..d3c604a 100644
--- a/dlls/dinput/config.c
+++ b/dlls/dinput/config.c
@@ -110,6 +110,11 @@ static void init_listview_columns(HWND dialog)
SendDlgItemMessageW(dialog, IDC_DEVICEOBJECTSLIST, LVM_INSERTCOLUMNW, 1, (LPARAM) &listColumn);
}
+static int lv_get_cur_item(HWND dialog)
+{
+ return SendDlgItemMessageW(dialog, IDC_DEVICEOBJECTSLIST, LVM_GETNEXTITEM, -1, LVNI_SELECTED);
+}
+
static void lv_set_action(HWND dialog, int item, int action, LPDIACTIONFORMATW lpdiaf)
{
static const WCHAR no_action[] = {'-','\0'};
@@ -225,6 +230,37 @@ static void fill_device_object_list(HWND dialog)
}
}
+static void show_suitable_actions(HWND dialog)
+{
+ DeviceData *device = get_cur_device(dialog);
+ LPDIACTIONFORMATW lpdiaf = get_cur_lpdiaf(dialog);
+ int i, added = 0;
+ int obj = lv_get_cur_item(dialog);
+
+ if (obj < 0) return;
+
+ SendDlgItemMessageW(dialog, IDC_ACTIONLIST, LB_RESETCONTENT, 0, 0);
+
+ for (i=0; i < lpdiaf->dwNumActions; i++)
+ {
+ /* Skip keyboard actions for non keyboards */
+ if (GET_DIDEVICE_TYPE(device->ddi.dwDevType) != DI8DEVTYPE_KEYBOARD &&
+ (lpdiaf->rgoAction[i].dwSemantic & DIKEYBOARD_MASK) == DIKEYBOARD_MASK) continue;
+
+ /* Skip mouse actions for non mouses */
+ if (GET_DIDEVICE_TYPE(device->ddi.dwDevType) != DI8DEVTYPE_MOUSE &&
+ (lpdiaf->rgoAction[i].dwSemantic & DIMOUSE_MASK) == DIMOUSE_MASK) continue;
+
+ /* Add action string and index in the action format to the list entry */
+ if (DIDFT_GETINSTANCE(lpdiaf->rgoAction[i].dwSemantic) & DIDFT_GETTYPE(device->ddo[obj].dwType))
+ {
+ SendDlgItemMessageW(dialog, IDC_ACTIONLIST, LB_ADDSTRING, 0, (LPARAM)lpdiaf->rgoAction[i].lptszActionName);
+ SendDlgItemMessageW(dialog, IDC_ACTIONLIST, LB_SETITEMDATA, added, (LPARAM) i);
+ added++;
+ }
+ }
+}
+
static INT_PTR CALLBACK ConfigureDevicesDlgProc(HWND dialog, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
@@ -243,6 +279,18 @@ static INT_PTR CALLBACK ConfigureDevicesDlgProc(HWND dialog, UINT uMsg, WPARAM w
break;
}
+
+ case WM_NOTIFY:
+
+ switch (((LPNMHDR)lParam)->code)
+ {
+ case LVN_ITEMCHANGED:
+ show_suitable_actions(dialog);
+ break;
+ }
+ break;
+
+
case WM_COMMAND:
switch(LOWORD(wParam))
More information about the wine-cvs
mailing list