[KBSWITCH] Re-register the systray icon after explorer restart. By Joachim Henze...
[reactos.git] / reactos / base / applications / kbswitch / kbswitch.c
index 9448931..6d58da0 100644 (file)
@@ -113,7 +113,7 @@ AddTrayIcon(HWND hwnd)
     tnid.uCallbackMessage = WM_NOTIFYICONMSG;
     tnid.hIcon = CreateTrayIcon(szLCID);
 
-    lstrcpyn(tnid.szTip, szName, sizeof(tnid.szTip));
+    lstrcpyn(tnid.szTip, szName, sizeof(tnid.szTip) / sizeof(TCHAR));
 
     Shell_NotifyIcon(NIM_ADD, &tnid);
 }
@@ -142,7 +142,7 @@ UpdateTrayIcon(HWND hwnd, LPTSTR szLCID, LPTSTR szName)
     tnid.uCallbackMessage = WM_NOTIFYICONMSG;
     tnid.hIcon = CreateTrayIcon(szLCID);
 
-    lstrcpyn(tnid.szTip, szName, sizeof(tnid.szTip));
+    lstrcpyn(tnid.szTip, szName, sizeof(tnid.szTip) / sizeof(TCHAR));
 
     Shell_NotifyIcon(NIM_MODIFY, &tnid);
 }
@@ -390,6 +390,7 @@ WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
 {
     static HMENU hRightPopupMenu;
     static TCHAR szLCID[MAX_PATH], szLangName[MAX_PATH];
+    static UINT s_uTaskbarRestart;
 
     switch (Message)
     {
@@ -400,6 +401,7 @@ WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
             hRightPopupMenu = GetSubMenu(LoadMenu(hInst, MAKEINTRESOURCE(IDR_POPUP)), 0);
 
             ActivateLayout(hwnd, ulCurrentLayoutNum);
+            s_uTaskbarRestart = RegisterWindowMessage(TEXT("TaskbarCreated"));
 
             return 0;
         }
@@ -506,6 +508,11 @@ WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
 
             return 0;
         }
+
+        default:
+            if(Message == s_uTaskbarRestart)
+                AddTrayIcon(hwnd);
+            break;
     }
 
     return DefWindowProc(hwnd, Message, wParam, lParam);
@@ -541,7 +548,7 @@ _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPTSTR lpCmdLine, INT nCmdSh
     hProcessHeap = GetProcessHeap();
 
     WndClass.style = 0;
-    WndClass.lpfnWndProc   = (WNDPROC)WndProc;
+    WndClass.lpfnWndProc   = WndProc;
     WndClass.cbClsExtra    = 0;
     WndClass.cbWndExtra    = 0;
     WndClass.hInstance     = hInstance;