Author: ssawant
Date: Fri Jul 28 17:33:38 2017
New Revision: 75431

URL: http://svn.reactos.org/svn/reactos?rev=75431&view=rev
Log:
[STOBJECT]
-Added hotplug.cpp for handling removable devices notification icon.
-Modified CMakeLists.txt et al to plugin this hotplug to stobject.
-Added basic code to test the hotplug icon and integrate it with stobject.
-Tested in xpvm, needs further testing.

Added:
    branches/GSoC_2017/shellext/reactos/dll/shellext/stobject/hotplug.cpp   
(with props)
Modified:
    branches/GSoC_2017/shellext/reactos/dll/shellext/stobject/CMakeLists.txt
    branches/GSoC_2017/shellext/reactos/dll/shellext/stobject/csystray.cpp
    branches/GSoC_2017/shellext/reactos/dll/shellext/stobject/precomp.h

Modified: 
branches/GSoC_2017/shellext/reactos/dll/shellext/stobject/CMakeLists.txt
URL: 
http://svn.reactos.org/svn/reactos/branches/GSoC_2017/shellext/reactos/dll/shellext/stobject/CMakeLists.txt?rev=75431&r1=75430&r2=75431&view=diff
==============================================================================
--- branches/GSoC_2017/shellext/reactos/dll/shellext/stobject/CMakeLists.txt    
[iso-8859-1] (original)
+++ branches/GSoC_2017/shellext/reactos/dll/shellext/stobject/CMakeLists.txt    
[iso-8859-1] Fri Jul 28 17:33:38 2017
@@ -23,6 +23,7 @@
     stobject.rc
     power.cpp
     volume.cpp
+    hotplug.cpp
     ${CMAKE_CURRENT_BINARY_DIR}/stobject.def)
 
 set_module_type(stobject win32dll UNICODE)

Modified: branches/GSoC_2017/shellext/reactos/dll/shellext/stobject/csystray.cpp
URL: 
http://svn.reactos.org/svn/reactos/branches/GSoC_2017/shellext/reactos/dll/shellext/stobject/csystray.cpp?rev=75431&r1=75430&r2=75431&view=diff
==============================================================================
--- branches/GSoC_2017/shellext/reactos/dll/shellext/stobject/csystray.cpp      
[iso-8859-1] (original)
+++ branches/GSoC_2017/shellext/reactos/dll/shellext/stobject/csystray.cpp      
[iso-8859-1] Fri Jul 28 17:33:38 2017
@@ -12,7 +12,8 @@
 
 SysTrayIconHandlers_t g_IconHandlers [] = {
         { Volume_Init, Volume_Shutdown, Volume_Update, Volume_Message },
-        { Power_Init, Power_Shutdown, Power_Update, Power_Message }
+        { Power_Init, Power_Shutdown, Power_Update, Power_Message },
+        { Hotplug_Init, Hotplug_Shutdown, Hotplug_Update, Hotplug_Message }
 };
 const int g_NumIcons = _countof(g_IconHandlers);
 

Added: branches/GSoC_2017/shellext/reactos/dll/shellext/stobject/hotplug.cpp
URL: 
http://svn.reactos.org/svn/reactos/branches/GSoC_2017/shellext/reactos/dll/shellext/stobject/hotplug.cpp?rev=75431
==============================================================================
--- branches/GSoC_2017/shellext/reactos/dll/shellext/stobject/hotplug.cpp       
(added)
+++ branches/GSoC_2017/shellext/reactos/dll/shellext/stobject/hotplug.cpp       
[iso-8859-1] Fri Jul 28 17:33:38 2017
@@ -0,0 +1,137 @@
+/*
+ * PROJECT:     ReactOS system libraries
+ * LICENSE:     GPL - See COPYING in the top level directory
+ * FILE:        dll/shellext/stobject/hotplug.cpp
+ * PURPOSE:     Removable devices notification icon handler
+ * PROGRAMMERS: Shriraj Sawant a.k.a SR13 <[email protected]> 
+ */
+
+#include "precomp.h"
+#include <mmsystem.h>
+#include <mmddk.h>
+#include <atlstr.h>
+
+WINE_DEFAULT_DEBUG_CHANNEL(stobject);
+
+static HICON g_hIconHotplug = NULL;
+static LPWSTR g_strTooltip = L"Safely Remove Hardware and Eject Media";
+static BOOL g_IsRunning = FALSE;
+
+HRESULT STDMETHODCALLTYPE Hotplug_Init(_In_ CSysTray * pSysTray)
+{ 
+    TRACE("Hotplug_Init\n");
+    g_hIconHotplug = LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_EXTRACT));
+    g_IsRunning = TRUE;
+    
+    return pSysTray->NotifyIcon(NIM_ADD, ID_ICON_HOTPLUG, g_hIconHotplug, 
g_strTooltip);
+}
+
+HRESULT STDMETHODCALLTYPE Hotplug_Update(_In_ CSysTray * pSysTray)
+{
+    TRACE("Hotplug_Update\n");    
+    //g_hIconHotplug = DynamicLoadIcon(g_hInstance);    
+
+    return pSysTray->NotifyIcon(NIM_MODIFY, ID_ICON_HOTPLUG, g_hIconHotplug, 
g_strTooltip);
+}
+
+HRESULT STDMETHODCALLTYPE Hotplug_Shutdown(_In_ CSysTray * pSysTray)
+{
+    TRACE("Hotplug_Shutdown\n");
+    g_IsRunning = FALSE;
+
+    return pSysTray->NotifyIcon(NIM_DELETE, ID_ICON_HOTPLUG, NULL, NULL);
+}
+
+static void _RunHotplug()
+{
+    ShellExecuteW(NULL, NULL, L"hotplug.cpl", NULL, NULL, SW_SHOWNORMAL);
+}
+
+static void _ShowContextMenu(CSysTray * pSysTray)
+{
+    CString strOpen((LPCSTR)IDS_HOTPLUG_REMOVE_2);
+    HMENU hPopup = CreatePopupMenu();      
+    AppendMenuW(hPopup, MF_STRING, IDS_HOTPLUG_REMOVE_2, strOpen);    
+    
+    SetForegroundWindow(pSysTray->GetHWnd());
+    DWORD flags = TPM_RETURNCMD | TPM_NONOTIFY | TPM_RIGHTALIGN | 
TPM_BOTTOMALIGN;
+    POINT pt;
+    GetCursorPos(&pt);
+    
+    DWORD id = TrackPopupMenuEx(hPopup, flags,
+        pt.x, pt.y,
+        pSysTray->GetHWnd(), NULL);  
+
+    switch (id)
+    {
+        case IDS_HOTPLUG_REMOVE_2:
+            _RunHotplug();
+            break;
+    }
+    DestroyMenu(hPopup);
+}
+
+HRESULT STDMETHODCALLTYPE Hotplug_Message(_In_ CSysTray * pSysTray, UINT uMsg, 
WPARAM wParam, LPARAM lParam, LRESULT &lResult)
+{
+    TRACE("Hotplug_Message uMsg=%d, wParam=%x, lParam=%x\n", uMsg, wParam, 
lParam);
+
+    switch (uMsg)
+    {
+        case WM_USER + 220:
+            TRACE("Hotplug_Message: WM_USER+220\n");
+            if (wParam == 1)
+            {
+                if (lParam == FALSE)
+                    return Hotplug_Init(pSysTray);
+                else
+                    return Hotplug_Shutdown(pSysTray);
+            }
+            return S_FALSE;
+
+        case WM_USER + 221:
+            TRACE("Hotplug_Message: WM_USER+221\n");
+            if (wParam == 1)
+            {
+                lResult = (LRESULT)g_IsRunning;
+                return S_OK;
+            }
+            return S_FALSE;
+
+        case ID_ICON_HOTPLUG:
+            Hotplug_Update(pSysTray);
+
+            switch (lParam)
+            {
+                case WM_LBUTTONDOWN:
+                    break;
+
+                case WM_LBUTTONUP:
+                MessageBox(0, L"Safely Remove Hardware", L"Test", MB_OKCANCEL 
| MB_ICONINFORMATION);                    
+                    break;
+
+                case WM_LBUTTONDBLCLK:
+                    _RunHotplug();
+                    break;
+
+                case WM_RBUTTONDOWN:
+                    break;
+
+                case WM_RBUTTONUP:
+                    _ShowContextMenu(pSysTray);                    
+                    break;
+
+                case WM_RBUTTONDBLCLK:
+                    break;
+
+                case WM_MOUSEMOVE:
+                    break;
+            }
+            return S_OK;
+
+        default:
+            TRACE("Hotplug_Message received for unknown ID %d, ignoring.\n");
+            return S_FALSE;
+    }
+
+    return S_FALSE;
+}

Propchange: 
branches/GSoC_2017/shellext/reactos/dll/shellext/stobject/hotplug.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: branches/GSoC_2017/shellext/reactos/dll/shellext/stobject/precomp.h
URL: 
http://svn.reactos.org/svn/reactos/branches/GSoC_2017/shellext/reactos/dll/shellext/stobject/precomp.h?rev=75431&r1=75430&r2=75431&view=diff
==============================================================================
--- branches/GSoC_2017/shellext/reactos/dll/shellext/stobject/precomp.h 
[iso-8859-1] (original)
+++ branches/GSoC_2017/shellext/reactos/dll/shellext/stobject/precomp.h 
[iso-8859-1] Fri Jul 28 17:33:38 2017
@@ -40,6 +40,7 @@
 
 #define ID_ICON_VOLUME (WM_APP + 0x4CB)
 #define ID_ICON_POWER  (WM_APP + 0x4CC)
+#define ID_ICON_HOTPLUG (WM_APP + 0x4CD)
 
 #include "csystray.h"
 
@@ -70,3 +71,8 @@
 extern HRESULT STDMETHODCALLTYPE Power_Shutdown(_In_ CSysTray * pSysTray);
 extern HRESULT STDMETHODCALLTYPE Power_Update(_In_ CSysTray * pSysTray);
 extern HRESULT STDMETHODCALLTYPE Power_Message(_In_ CSysTray * pSysTray, UINT 
uMsg, WPARAM wParam, LPARAM lParam, LRESULT &lResult);
+
+extern HRESULT STDMETHODCALLTYPE Hotplug_Init(_In_ CSysTray * pSysTray);
+extern HRESULT STDMETHODCALLTYPE Hotplug_Shutdown(_In_ CSysTray * pSysTray);
+extern HRESULT STDMETHODCALLTYPE Hotplug_Update(_In_ CSysTray * pSysTray);
+extern HRESULT STDMETHODCALLTYPE Hotplug_Message(_In_ CSysTray * pSysTray, 
UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT &lResult);


Reply via email to