refresh available drive bar buttons after connecting to network drives
or activating manual refresh
Modified: trunk/reactos/subsys/system/winefile/winefile.c
_____
Modified: trunk/reactos/subsys/system/winefile/winefile.c
--- trunk/reactos/subsys/system/winefile/winefile.c 2005-05-15
12:06:12 UTC (rev 15306)
+++ trunk/reactos/subsys/system/winefile/winefile.c 2005-05-15
12:13:17 UTC (rev 15307)
@@ -200,6 +200,7 @@
static void read_directory(Entry* dir, LPCTSTR path, SORT_ORDER
sortOrder, HWND hwnd);
static void set_curdir(ChildWnd* child, Entry* entry, int idx, HWND
hwnd);
static void refresh_child(ChildWnd* child);
+static void refresh_drives();
static void get_path(Entry* dir, PTSTR path);
LRESULT CALLBACK FrameWndProc(HWND hwnd, UINT nmsg, WPARAM wparam,
LPARAM lparam);
@@ -1937,6 +1938,10 @@
free(child);
break;}
+ case ID_REFRESH:
+ refresh_drives();
+ break;
+
case ID_WINDOW_CASCADE:
SendMessage(Globals.hmdiclient,
WM_MDICASCADE, 0, 0);
break;
@@ -2029,7 +2034,9 @@
case ID_CONNECT_NETWORK_DRIVE: {
DWORD ret =
WNetConnectionDialog(hwnd, RESOURCETYPE_DISK);
- if (ret!=NO_ERROR &&
ret!=(DWORD)-1) {
+ if (ret == NO_ERROR)
+ refresh_drives();
+ else if (ret != (DWORD)-1) {
if (ret ==
ERROR_EXTENDED_ERROR)
display_network_error(hwnd);
else
@@ -2039,7 +2046,9 @@
case ID_DISCONNECT_NETWORK_DRIVE: {
DWORD ret =
WNetDisconnectDialog(hwnd, RESOURCETYPE_DISK);
- if (ret!=NO_ERROR &&
ret!=(DWORD)-1) {
+ if (ret == NO_ERROR)
+ refresh_drives();
+ else if (ret != (DWORD)-1) {
if (ret ==
ERROR_EXTENDED_ERROR)
display_network_error(hwnd);
else
@@ -3385,6 +3394,87 @@
}
+static void create_drive_bar()
+{
+ TBBUTTON drivebarBtn = {0, 0, TBSTATE_ENABLED, BTNS_BUTTON, {0,
0}, 0, 0};
+ TCHAR b1[BUFFER_LEN];
+ int btn = 1;
+ PTSTR p;
+
+ GetLogicalDriveStrings(BUFFER_LEN, Globals.drives);
+
+ Globals.hdrivebar = CreateToolbarEx(Globals.hMainWnd,
WS_CHILD|WS_VISIBLE|CCS_NOMOVEY|TBSTYLE_LIST,
+ IDW_DRIVEBAR, 2, Globals.hInstance,
IDB_DRIVEBAR, &drivebarBtn,
+ 1, 16, 13, 16, 13, sizeof(TBBUTTON));
+
+#ifndef _NO_EXTENSIONS
+#ifdef __WINE__
+ /* insert unix file system button */
+ b1[0] = '/';
+ b1[1] = '\0';
+ b1[2] = '\0';
+ SendMessage(Globals.hdrivebar, TB_ADDSTRING, 0, (LPARAM)b1);
+
+ drivebarBtn.idCommand = ID_DRIVE_UNIX_FS;
+ SendMessage(Globals.hdrivebar, TB_INSERTBUTTON, btn++,
(LPARAM)&drivebarBtn);
+ drivebarBtn.iString++;
+#endif
+#ifdef _SHELL_FOLDERS
+ /* insert shell namespace button */
+ load_string(b1, IDS_SHELL);
+ b1[lstrlen(b1)+1] = '\0';
+ SendMessage(Globals.hdrivebar, TB_ADDSTRING, 0, (LPARAM)b1);
+
+ drivebarBtn.idCommand = ID_DRIVE_SHELL_NS;
+ SendMessage(Globals.hdrivebar, TB_INSERTBUTTON, btn++,
(LPARAM)&drivebarBtn);
+ drivebarBtn.iString++;
+#endif
+
+ /* register windows drive root strings */
+ SendMessage(Globals.hdrivebar, TB_ADDSTRING, 0,
(LPARAM)Globals.drives);
+#endif
+
+ drivebarBtn.idCommand = ID_DRIVE_FIRST;
+
+ for(p=Globals.drives; *p; ) {
+#ifdef _NO_EXTENSIONS
+ /* insert drive letter */
+ TCHAR b[3] = {tolower(*p)};
+ SendMessage(Globals.hdrivebar, TB_ADDSTRING, 0,
(LPARAM)b);
+#endif
+ switch(GetDriveType(p)) {
+ case DRIVE_REMOVABLE: drivebarBtn.iBitmap = 1;
break;
+ case DRIVE_CDROM:
drivebarBtn.iBitmap = 3; break;
+ case DRIVE_REMOTE:
drivebarBtn.iBitmap = 4; break;
+ case DRIVE_RAMDISK:
drivebarBtn.iBitmap = 5; break;
+ default:/*DRIVE_FIXED*/ drivebarBtn.iBitmap = 2;
+ }
+
+ SendMessage(Globals.hdrivebar, TB_INSERTBUTTON, btn++,
(LPARAM)&drivebarBtn);
+ drivebarBtn.idCommand++;
+ drivebarBtn.iString++;
+
+ while(*p++);
+ }
+}
+
+static void refresh_drives()
+{
+ RECT rect;
+
+ /* destroy drive bar */
+ DestroyWindow(Globals.hdrivebar);
+ Globals.hdrivebar = 0;
+
+ /* re-create drive bar */
+ create_drive_bar();
+
+ /* update window layout */
+ GetClientRect(Globals.hMainWnd, &rect);
+ SendMessage(Globals.hMainWnd, WM_SIZE, 0, MAKELONG(rect.right,
rect.bottom));
+}
+
+
BOOL launch_file(HWND hwnd, LPCTSTR cmd, UINT nCmdShow)
{
HINSTANCE hinst = ShellExecute(hwnd, NULL/*operation*/, cmd,
NULL/*parameters*/, NULL/*dir*/, nCmdShow);
@@ -3845,6 +3935,7 @@
break;}
case ID_REFRESH:
+ refresh_drives();
refresh_child(child);
break;
@@ -4153,6 +4244,7 @@
TCHAR path[MAX_PATH], b1[BUFFER_LEN];
ChildWnd* child;
HMENU hMenuFrame, hMenuWindow;
+ TBBUTTON drivebarBtn = {0, 0, TBSTATE_ENABLED, BTNS_SEP, {0, 0},
0, 0};
CLIENTCREATESTRUCT ccs;
@@ -4184,71 +4276,10 @@
Globals.hMainWnd, 0,
Globals.hInstance, &ccs);
- {
- TBBUTTON drivebarBtn = {0, 0, TBSTATE_ENABLED, BTNS_SEP,
{0, 0}, 0, 0};
- int btn = 1;
- PTSTR p;
+ CheckMenuItem(Globals.hMenuOptions, ID_VIEW_DRIVE_BAR,
MF_BYCOMMAND|MF_CHECKED);
- Globals.hdrivebar = CreateToolbarEx(Globals.hMainWnd,
WS_CHILD|WS_VISIBLE|CCS_NOMOVEY|TBSTYLE_LIST,
- IDW_DRIVEBAR, 2,
Globals.hInstance, IDB_DRIVEBAR, &drivebarBtn,
- 1, 16, 13, 16, 13,
sizeof(TBBUTTON));
- CheckMenuItem(Globals.hMenuOptions, ID_VIEW_DRIVE_BAR,
MF_BYCOMMAND|MF_CHECKED);
+ create_drive_bar();
- GetLogicalDriveStrings(BUFFER_LEN, Globals.drives);
-
- drivebarBtn.fsStyle = BTNS_BUTTON;
-
-#ifndef _NO_EXTENSIONS
-#ifdef __WINE__
- /* insert unix file system button */
- b1[0] = '/';
- b1[1] = '\0';
- b1[2] = '\0';
- SendMessage(Globals.hdrivebar, TB_ADDSTRING, 0,
(LPARAM)b1);
-
- drivebarBtn.idCommand = ID_DRIVE_UNIX_FS;
- SendMessage(Globals.hdrivebar, TB_INSERTBUTTON, btn++,
(LPARAM)&drivebarBtn);
- drivebarBtn.iString++;
-#endif
-#ifdef _SHELL_FOLDERS
- /* insert shell namespace button */
- load_string(b1, IDS_SHELL);
- b1[lstrlen(b1)+1] = '\0';
- SendMessage(Globals.hdrivebar, TB_ADDSTRING, 0,
(LPARAM)b1);
-
- drivebarBtn.idCommand = ID_DRIVE_SHELL_NS;
- SendMessage(Globals.hdrivebar, TB_INSERTBUTTON, btn++,
(LPARAM)&drivebarBtn);
- drivebarBtn.iString++;
-#endif
-
- /* register windows drive root strings */
- SendMessage(Globals.hdrivebar, TB_ADDSTRING, 0,
(LPARAM)Globals.drives);
-#endif
-
- drivebarBtn.idCommand = ID_DRIVE_FIRST;
-
- for(p=Globals.drives; *p; ) {
-#ifdef _NO_EXTENSIONS
- /* insert drive letter */
- TCHAR b[3] = {tolower(*p)};
- SendMessage(Globals.hdrivebar, TB_ADDSTRING, 0,
(LPARAM)b);
-#endif
- switch(GetDriveType(p)) {
- case DRIVE_REMOVABLE:
drivebarBtn.iBitmap = 1; break;
- case DRIVE_CDROM:
drivebarBtn.iBitmap = 3; break;
- case DRIVE_REMOTE:
drivebarBtn.iBitmap = 4; break;
- case DRIVE_RAMDISK:
drivebarBtn.iBitmap = 5; break;
- default:/*DRIVE_FIXED*/
drivebarBtn.iBitmap = 2;
- }
-
- SendMessage(Globals.hdrivebar, TB_INSERTBUTTON,
btn++, (LPARAM)&drivebarBtn);
- drivebarBtn.idCommand++;
- drivebarBtn.iString++;
-
- while(*p++);
- }
- }
-
{
TBBUTTON toolbarBtns[] = {
{0, 0, 0, BTNS_SEP, {0, 0}, 0, 0},