[7/8] dinput: Working CANCEL and RESET buttons in ConfigureDevices dialog (try 2)

Lucas Fialho Zawacki lfzawacki at gmail.com
Thu Aug 4 12:23:14 CDT 2011


---
 dlls/dinput/config.c |   20 ++++++++++++++++++++
 1 files changed, 20 insertions(+), 0 deletions(-)

diff --git a/dlls/dinput/config.c b/dlls/dinput/config.c
index fa2a260..464a982 100644
--- a/dlls/dinput/config.c
+++ b/dlls/dinput/config.c
@@ -276,9 +276,22 @@ static void assign_action(HWND dialog, DeviceData* device, LPDIACTIONFORMATW lpd
     lpdiaf->rgoAction[action].dwHow = DIAH_USERCONFIG;
 }
 
+static void copy_actions(LPDIACTIONFORMATW to, LPDIACTIONFORMATW from)
+{
+    int i;
+    for (i=0; i < from->dwNumActions; i++)
+    {
+        to->rgoAction[i].guidInstance = from->rgoAction[i].guidInstance;
+        to->rgoAction[i].dwObjID = from->rgoAction[i].dwObjID;
+        to->rgoAction[i].dwHow = from->rgoAction[i].dwHow;
+        to->rgoAction[i].lptszActionName = from->rgoAction[i].lptszActionName;
+    }
+}
+
 static INT_PTR CALLBACK ConfigureDevicesDlgProc(HWND dialog, UINT uMsg, WPARAM wParam, LPARAM lParam)
 {
     static LPDIACTIONFORMATW lpdiaf;
+    static DIACTIONFORMATW original_diaf;
     static DIDevicesData devices_data;
     static ConfigureDevicesData *conf_data;
     static int display_only = 0;
@@ -290,6 +303,10 @@ static INT_PTR CALLBACK ConfigureDevicesDlgProc(HWND dialog, UINT uMsg, WPARAM w
             conf_data = (ConfigureDevicesData*) lParam;
             lpdiaf = conf_data->params->lprgFormats;
 
+            original_diaf.dwNumActions = lpdiaf->dwNumActions;
+            original_diaf.rgoAction = HeapAlloc(GetProcessHeap(), 0, sizeof(DIACTIONW) * lpdiaf->dwNumActions);
+            copy_actions(&original_diaf, lpdiaf);
+
             if (!(conf_data->flags & DICD_EDIT)) display_only = 1;
 
             init_listview_columns(dialog);
@@ -344,11 +361,14 @@ static INT_PTR CALLBACK ConfigureDevicesDlgProc(HWND dialog, UINT uMsg, WPARAM w
                     break;
 
                 case IDCANCEL:
+                    copy_actions(lpdiaf, &original_diaf);
                     EndDialog(dialog, 0);
                     destroy_devices(&devices_data);
                     break;
 
                 case IDRESET:
+                    copy_actions(lpdiaf, &original_diaf);
+                    fill_device_object_list(dialog, get_cur_device(dialog, &devices_data), lpdiaf);
                     break;
             }
         break;
-- 
1.7.0.4



More information about the wine-patches mailing list