aboutsummaryrefslogtreecommitdiffstats
path: root/modules/windows-sens
diff options
context:
space:
mode:
Diffstat (limited to 'modules/windows-sens')
-rw-r--r--modules/windows-sens/evolution-windows-sens.cxx37
1 files changed, 30 insertions, 7 deletions
diff --git a/modules/windows-sens/evolution-windows-sens.cxx b/modules/windows-sens/evolution-windows-sens.cxx
index b6328e9c28..0748b64c6d 100644
--- a/modules/windows-sens/evolution-windows-sens.cxx
+++ b/modules/windows-sens/evolution-windows-sens.cxx
@@ -30,6 +30,8 @@ extern "C" {
#include <shell/e-shell.h>
#include <e-util/e-extension.h>
+#define NUM_ELEMENTS(x) (sizeof((x)) / sizeof((x)[0]))
+
/* Standard GObject macros */
#define E_TYPE_WINDOWS_SENS \
(e_windows_sens_get_type ())
@@ -67,7 +69,7 @@ windows_sens_get_shell (EWindowsSENS *extension)
return E_SHELL (extensible);
}
-class MySensNetwork : public IDispatch
+class MySensNetwork : public ISensNetwork
{
private:
long ref;
@@ -122,7 +124,7 @@ public:
}
// ISensNetwork methods:
- virtual HRESULT WINAPI ConnectionMade (BSTR, ULONG ulType, LPSENS_QOCINFO*)
+ virtual HRESULT WINAPI ConnectionMade (BSTR, ULONG ulType, LPSENS_QOCINFO)
{
if (ulType) {
EShell *shell = windows_sens_get_shell (mpEWS);
@@ -145,6 +147,20 @@ public:
}
return S_OK;
}
+
+ virtual HRESULT WINAPI DestinationReachable(BSTR, BSTR , ULONG ulType, LPSENS_QOCINFO)
+ {
+ if (ulType) {
+ EShell *shell = windows_sens_get_shell (mpEWS);
+ e_shell_set_network_available (shell, TRUE);
+ }
+ return S_OK;
+ }
+
+ virtual HRESULT WINAPI DestinationReachableNoQOCInfo(BSTR bstrDestination,BSTR bstrConnection,ULONG ulType)
+ {
+ return S_OK;
+ }
};
/* 4E14FB9F-2E22-11D1-9964-00C04FBBB345 */
@@ -169,10 +185,10 @@ windows_sens_constructed (GObject *object)
static IEventSubscription* pIEventSubscription = 0;
WCHAR buffer[64];
static const char* eventclassid="{D5978620-5B9F-11D1-8DD2-00AA004ABD5E}";
- static const char* methods[]={"ConnectionMade","ConnectionMadeNoQOCInfo","ConnectionLost"};
- static const char* names[]={"EWS_ConnectionMade","EWS_ConnectionMadeNoQOCInfo","EWS_ConnectionLost"};
- static const char* subids[]={"{cd1dcbd6-a14d-4823-a0d2-8473afde360f}","{a82f0e80-1305-400c-ba56-375ae04264a1}",
- "{45233130-b6c3-44fb-a6af-487c47cee611}"};
+ static const char* methods[]={"ConnectionMade","ConnectionMadeNoQOCInfo","ConnectionLost","DestinationReachable","DestinationReachableNoQOCInfo"};
+ static const char* names[]={"EWS_ConnectionMade","EWS_ConnectionMadeNoQOCInfo","EWS_ConnectionLost","EWS_DestinationReachable","EWS_DestinationReachableNoQOCInfo"};
+ static const char* subids[]={"{cd1dcbd6-a14d-4823-a0d2-8473afde360f}","{a82f0e80-1305-400c-ba56-375ae04264a1}","{45233130-b6c3-44fb-a6af-487c47cee611}",
+ "{51377df7-1d29-49eb-af32-4fff77b059fb}","{d16830d3-7a3a-4240-994b-a1fa344385dd}"};
EWindowsSENS *extension = (E_WINDOWS_SENS (object));
static MySensNetwork *pISensNetwork = new MySensNetwork (extension);
@@ -181,7 +197,7 @@ windows_sens_constructed (GObject *object)
HRESULT res=CoCreateInstance (CLSID_CEventSystem, 0,CLSCTX_SERVER,IID_IEventSystem,(void**)&pIEventSystem);
- for (int i=0; i<3; i++)
+ for (unsigned i=0; i<NUM_ELEMENTS(methods); i++)
{
res=CoCreateInstance (CLSID_CEventSubscription, 0, CLSCTX_SERVER, IID_IEventSubscription, (LPVOID*)&pIEventSubscription);
MultiByteToWideChar (0, 0, eventclassid, -1, buffer, 64);
@@ -193,6 +209,13 @@ windows_sens_constructed (GObject *object)
res=pIEventSubscription->put_SubscriptionName (buffer);
MultiByteToWideChar (0, 0, subids[i], -1, buffer, 64);
res=pIEventSubscription->put_SubscriptionID (buffer);
+
+ /* Make the subscription receive the event only if the ownerof the subscription
+ * is logged on to the same computer as the publisher. This makes this module
+ * work on Windows Vista and Windows 7 with normal user account.
+ */
+ res=pIEventSubscription->put_PerUser(TRUE);
+
res=pIEventSystem->Store (PROGID_EventSubscription, (IUnknown*)pIEventSubscription);
pIEventSubscription->Release ();
pIEventSubscription=0;