]> git.sur5r.net Git - bacula/bacula/commitdiff
kes Add code to handle tray monitor separated from Win32 FD.
authorKern Sibbald <kern@sibbald.com>
Sat, 22 Sep 2007 09:08:48 +0000 (09:08 +0000)
committerKern Sibbald <kern@sibbald.com>
Sat, 22 Sep 2007 09:08:48 +0000 (09:08 +0000)
kes  Fix display of Win32 tray monitor after reboot. Fixes bug #952.

git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@5623 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/src/win32/libwin32/main.cpp
bacula/src/win32/libwin32/trayMonitor.cpp
bacula/src/win32/libwin32/trayMonitor.h
bacula/technotes-2.3

index 8f309c078a95c05eca074fed2ba8824276af8d50..f7451ac97d07597920f10487155e93bf897503f0 100644 (file)
@@ -244,6 +244,19 @@ int WINAPI WinMain(HINSTANCE Instance, HINSTANCE /*PrevInstance*/, PSTR CmdLine,
    return BaculaAppMain();
 }
 
+#ifndef HAVE_TRAY_MONITOR
+/* Minimalist winproc when don't have tray monitor */
+LRESULT CALLBACK bacWinProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
+{
+   switch (iMsg) {
+   case WM_DESTROY:
+      PostQuitMessage(0);
+      return 0;
+   }
+   return DefWindowProc(hwnd, iMsg, wParam, lParam);
+}
+#endif
+
 
 /*
  * Called as a thread from BaculaAppMain()
@@ -268,6 +281,31 @@ void *Main_Msg_Loop(LPVOID lpwThreadParam)
    if (monitor == NULL) {
       PostQuitMessage(0);
    }
+
+#else
+   /* Create a window to handle Windows messages */
+   WNDCLASSEX baclass;
+
+   baclass.cbSize         = sizeof(baclass);
+   baclass.style          = 0;
+   baclass.lpfnWndProc    = bacWinProc;
+   baclass.cbClsExtra     = 0;
+   baclass.cbWndExtra     = 0;
+   baclass.hInstance      = appInstance;
+   baclass.hIcon          = NULL;
+   baclass.hCursor        = NULL;
+   baclass.hbrBackground  = NULL;
+   baclass.lpszMenuName   = NULL;
+   baclass.lpszClassName  = APP_NAME;
+   baclass.hIconSm        = NULL;
+
+   RegisterClassEx(&baclass);
+
+   if (CreateWindow(APP_NAME, APP_NAME, WS_OVERLAPPEDWINDOW,
+                CW_USEDEFAULT, CW_USEDEFAULT, 0, 0,
+                NULL, NULL, appInstance, NULL) == NULL) {
+      PostQuitMessage(0);
+   }
 #endif
 
    /* Now enter the Windows message handling loop until told to quit! */
index d6e4ce23860cbea0db5701b9a0961e568120c612..5124b3b615c8625a7e26f67bc64abcb5471b8c32 100644 (file)
@@ -43,6 +43,9 @@
 
 trayMonitor::trayMonitor()
 {
+
+// m_tbcreated_msg = RegisterWindowMessage("TaskbarCreated");
+   
    /* Create a window to handle tray icon messages */
    WNDCLASSEX trayclass;
 
@@ -72,8 +75,6 @@ trayMonitor::trayMonitor()
    /* Save our class pointer */
    SetWindowLong(m_hwnd, GWL_USERDATA, (LONG)this);
 
-   /* Timer to trigger icon updating */
-   SetTimer(m_hwnd, 1, 5000, NULL);
 
    // Load the icons for the tray
    m_idle_icon    = LoadIcon(appInstance, MAKEINTRESOURCE(IDI_IDLE));
@@ -84,9 +85,13 @@ trayMonitor::trayMonitor()
    /* Load the menu */
    m_hmenu = LoadMenu(appInstance, MAKEINTRESOURCE(IDR_TRAYMENU));
    m_visible = false;
+   m_installed = false;
 
    /* Install the icon in the tray */
    install();
+
+   /* Timer to trigger icon updating */
+   SetTimer(m_hwnd, 1, 5000, NULL);
 }
 
 trayMonitor::~trayMonitor()
@@ -102,8 +107,8 @@ trayMonitor::~trayMonitor()
 
 void trayMonitor::install()
 {
-   sendMessage(NIM_ADD, bacstat);
    m_installed = true;
+   sendMessage(NIM_ADD, bacstat);
 }
 
 void trayMonitor::update(int bacstat)
@@ -179,9 +184,10 @@ LRESULT CALLBACK trayMonitor::trayWinProc(HWND hwnd, UINT iMsg, WPARAM wParam, L
    /* Every five seconds, a timer message causes the icon to update */
    case WM_TIMER:
       if (isAService()) {
-         mon->update(bacstat);
+         mon->install();
       }
-     break;
+      mon->update(bacstat);
+      break;
 
    case WM_CREATE:
       return 0;
@@ -255,6 +261,13 @@ LRESULT CALLBACK trayMonitor::trayWinProc(HWND hwnd, UINT iMsg, WPARAM wParam, L
          return TRUE;
       }
       return TRUE;
+
+    default:
+       /* Need to redraw tray icon */
+//     if (iMsg == mon->m_tbcreated_msg) {
+//        mon->install();    
+//     }
+       break;
    }
 
    return DefWindowProc(hwnd, iMsg, wParam, lParam);
index 77bc2031ae300e94ea8a380c239a4158fcbf5167..96b6c16813d3f541a968b64d19e4d2350278f051 100644 (file)
@@ -52,6 +52,7 @@ public:
 
    bool m_visible;
    bool m_installed;
+   UINT m_tbcreated_msg;
 
    aboutDialog m_about;
    statusDialog m_status;
index be9f6dfd24c5237b1000b82e5435ff46d232826c..af73dc21129acfa8adf385d9a1ef57f7d482e5a9 100644 (file)
@@ -1,6 +1,9 @@
               Technical notes on version 2.3
 
 General:
+22Sep07 
+kes  Add code to handle tray monitor separated from Win32 FD.
+kes  Fix display of Win32 tray monitor after reboot. Fixes bug #952.
 20Sep07
 kes  Add missed return in fixing verify bug -- trunk only.
 ebl  Fix a command parser issue causing a director segfault.