From 6ee81a0625eee1bdf6e3c6a79031f56f8461d28d Mon Sep 17 00:00:00 2001
From: Steven Edwards <winehacker@gmail.com>
Date: Tue, 22 Jul 2008 23:00:49 -0400
Subject: [PATCH] Started work on autorun. Nowhere near ready yet.

---
 programs/winecfg/En.rc      |   11 +++++++----
 programs/winecfg/drive.c    |    1 +
 programs/winecfg/driveui.c  |   40 ++++++++++++++++++++++++++++++++++++++++
 programs/winecfg/resource.h |    6 ++++++
 4 files changed, 54 insertions(+), 4 deletions(-)

diff --git a/programs/winecfg/En.rc b/programs/winecfg/En.rc
index 1a07d71..944a2ab 100644
--- a/programs/winecfg/En.rc
+++ b/programs/winecfg/En.rc
@@ -150,10 +150,13 @@ BEGIN
     CONTROL         "&Manually Assign:",IDC_RADIO_ASSIGN,"Button",
                     BS_AUTORADIOBUTTON,15,195,69,10
 
-    LTEXT           "&Label:",IDC_STATIC_LABEL,33,208,29,12
-    EDITTEXT        IDC_EDIT_LABEL,63,205,78,13,ES_AUTOHSCROLL | WS_TABSTOP
-    LTEXT           "S&erial:",IDC_STATIC_SERIAL,33,225,29,12
-    EDITTEXT        IDC_EDIT_SERIAL,63,221,78,13,ES_AUTOHSCROLL | WS_TABSTOP
+    LTEXT           "&Label:",IDC_STATIC_LABEL,15,208,29,12
+    EDITTEXT        IDC_EDIT_LABEL,48,205,78,13,ES_AUTOHSCROLL | WS_TABSTOP
+    LTEXT           "S&erial:",IDC_STATIC_SERIAL,15,225,29,12
+    EDITTEXT        IDC_EDIT_SERIAL,48,221,78,13,ES_AUTOHSCROLL | WS_TABSTOP
+
+    LTEXT	    "&Autorun Policy: ",IDC_STATIC_AUTORUN,130,195,90,10
+    COMBOBOX	    IDC_AUTORUN_VAR,130,205,110,70,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
 
     CONTROL         "Show &dot files",IDC_SHOW_DOT_FILES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,260,230,8
 END
diff --git a/programs/winecfg/drive.c b/programs/winecfg/drive.c
index dd3befd..acbc188 100644
--- a/programs/winecfg/drive.c
+++ b/programs/winecfg/drive.c
@@ -524,3 +524,4 @@ void apply_drive_changes(void)
         set_drive_type( drives[i].letter, drives[i].type );
     }
 }
+
diff --git a/programs/winecfg/driveui.c b/programs/winecfg/driveui.c
index 8c313c1..d68ebe9 100644
--- a/programs/winecfg/driveui.c
+++ b/programs/winecfg/driveui.c
@@ -40,6 +40,18 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(winecfg);
 
+static struct AUTORUN
+{
+  UINT displayID;
+  const char* settingStr;
+} const AutoRun_Var_Accels[] = {
+  {IDS_AUTORUN_ALL,     "all removeable drives"},
+  {IDS_AUTORUN_OPTICAL, "only optical drives"},
+  {IDS_AUTORUN_FLASH,   "only flash drives"},
+  {IDS_AUTORUN_NONE,    "No autorun"},
+  {0, 0}
+};
+
 #define BOX_MODE_CD_ASSIGN 1
 #define BOX_MODE_CD_AUTODETECT 2
 #define BOX_MODE_NONE 3
@@ -132,6 +144,8 @@ static void set_advanced(HWND dialog)
         LoadStringW(GetModuleHandle(NULL), IDS_SHOW_ADVANCED, text, 256);
     }
 
+    ShowWindow(GetDlgItem(dialog, IDC_AUTORUN_VAR), state);
+    ShowWindow(GetDlgItem(dialog, IDC_STATIC_AUTORUN), state);
     ShowWindow(GetDlgItem(dialog, IDC_RADIO_AUTODETECT), state);
     ShowWindow(GetDlgItem(dialog, IDC_RADIO_ASSIGN), state);
     ShowWindow(GetDlgItem(dialog, IDC_EDIT_LABEL), state);
@@ -663,6 +677,31 @@ static void load_drive_options(HWND dialog)
         CheckDlgButton(dialog, IDC_SHOW_DOT_FILES, BST_CHECKED);
 }
 
+static void detect_autorun_var(HWND dialog)
+{
+    int i;
+    char* buf = NULL;
+
+    SendDlgItemMessage(dialog, IDC_DSOUND_HW_ACCEL, CB_RESETCONTENT, 0, 0);
+    for (i = 0; 0 != AutoRun_Var_Accels[i].displayID; ++i) {
+      WCHAR accelStr[64];
+      LoadStringW (GetModuleHandle (NULL), AutoRun_Var_Accels[i].displayID, accelStr,
+          sizeof(accelStr)/sizeof(accelStr[0]));
+      SendDlgItemMessageW (dialog, IDC_DSOUND_HW_ACCEL, CB_ADDSTRING, 0, (LPARAM)accelStr);
+    }
+    buf = get_reg_key(config_key, keypath("DirectSound"), "NoDriveTypeAutoRun", "0xb5");
+    for (i = 0; NULL != AutoRun_Var_Accels[i].settingStr; ++i) {
+      if (strcmp(buf, AutoRun_Var_Accels[i].settingStr) == 0) {
+	SendDlgItemMessage(dialog, IDC_DSOUND_HW_ACCEL, CB_SETCURSEL, i, 0);
+	break ;
+      }
+    }
+    if (NULL == AutoRun_Var_Accels[i].settingStr) {
+      WINE_ERR("Invalid Direct Sound HW Accel read from registry (%s)\n", buf);
+    }
+    HeapFree(GetProcessHeap(), 0, buf);
+}
+
 INT_PTR CALLBACK
 DriveDlgProc (HWND dialog, UINT msg, WPARAM wParam, LPARAM lParam)
 {
@@ -682,6 +721,7 @@ DriveDlgProc (HWND dialog, UINT msg, WPARAM wParam, LPARAM lParam)
             fill_drives_list(dialog);
             update_controls(dialog);
             /* put in non-advanced mode by default  */
+            detect_autorun_var(dialog);
             set_advanced(dialog);
             break;
 
diff --git a/programs/winecfg/resource.h b/programs/winecfg/resource.h
index 2182c29..258f457 100644
--- a/programs/winecfg/resource.h
+++ b/programs/winecfg/resource.h
@@ -90,6 +90,8 @@
 #define IDS_SELECT_EXECUTABLE           8020
 
 /* drive editing */
+#define IDC_STATIC_AUTORUN              1040
+#define IDC_AUTORUN_VAR                 1041
 #define IDC_LIST_DRIVES                 1042
 #define IDC_BUTTON_ADD                  1043
 #define IDC_BUTTON_REMOVE               1044
@@ -140,6 +142,10 @@
 #define IDS_COL_DRIVELETTER             8208
 #define IDS_COL_DRIVEMAPPING            8209
 #define IDS_NO_DRIVE_C                  8210
+#define IDS_AUTORUN_ALL                 8211
+#define IDS_AUTORUN_OPTICAL             8212
+#define IDS_AUTORUN_FLASH               8213
+#define IDS_AUTORUN_NONE                8214
 
 /* graphics */
 #define IDC_ENABLE_MANAGED              1100
-- 
1.5.4.3

