From ba79e58d58a22e2051b5640f3c004b64be2e5278 Mon Sep 17 00:00:00 2001 From: Rom Walton Date: Tue, 14 Dec 2004 02:50:16 +0000 Subject: [PATCH] *** empty log message *** svn path=/trunk/boinc/; revision=4841 --- checkin_notes | 11 ++++++ clientgui/BOINCGUIApp.cpp | 62 ++++++++++++++++++++++++++++++++ clientgui/BOINCGUIApp.h | 7 ++++ win_build/installerv2/BOINC.ism | Bin 204376 -> 202876 bytes 4 files changed, 80 insertions(+) diff --git a/checkin_notes b/checkin_notes index a91bb9afe7..17ba7bdcec 100755 --- a/checkin_notes +++ b/checkin_notes @@ -21228,3 +21228,14 @@ David 13 Dec 2004 assimilator.C transitioner.C validator.C + +Rom 13 Dec 2004 + - Bug Fix: BOINC Manager needs to initialize the System Idle Tracker + in order for BOINC to detect if the system is idle. + - BOINC Setup for Windows - The UI is now complete for the Single, + Shared, and Service install types. + + clientgui/ + BOINCGUIApp.cpp, .h + win_build/installerv2/ + BOINC.ism diff --git a/clientgui/BOINCGUIApp.cpp b/clientgui/BOINCGUIApp.cpp index 77b0e8764b..59c53736ee 100644 --- a/clientgui/BOINCGUIApp.cpp +++ b/clientgui/BOINCGUIApp.cpp @@ -31,6 +31,10 @@ #include "MainDocument.h" +typedef BOOL (CALLBACK* IdleTrackerInit)(); +typedef void (CALLBACK* IdleTrackerTerm)(); + + IMPLEMENT_APP(CBOINCGUIApp) IMPLEMENT_DYNAMIC_CLASS(CBOINCGUIApp, wxApp) @@ -99,6 +103,9 @@ bool CBOINCGUIApp::OnInit() DetectDefaultWindowStation(); DetectDefaultDesktop(); + // Startup the System Idle Detection code + StartupSystemIdleDetection(); + // Detect if we need to start the BOINC Core Client due to configuration StartupBOINCCore(); @@ -116,6 +123,9 @@ int CBOINCGUIApp::OnExit() // Detect if we need to stop the BOINC Core Client due to configuration ShutdownBOINCCore(); + // Shutdown the System Idle Detection code + ShutdownSystemIdleDetection(); + #ifndef NOTASKBAR if (m_pTaskBarIcon) delete m_pTaskBarIcon; @@ -321,6 +331,58 @@ void CBOINCGUIApp::ShutdownBOINCCore() } +wxInt32 CBOINCGUIApp::StartupSystemIdleDetection() +{ +#ifdef __WXMSW__ + // load dll and start idle detection + m_hIdleDll = LoadLibrary("boinc.dll"); + if(m_hIdleDll) + { + IdleTrackerInit fn; + fn = (IdleTrackerInit)GetProcAddress(m_hIdleDll, wxT("IdleTrackerInit")); + if(!fn) + { + FreeLibrary(m_hIdleDll); + m_hIdleDll = NULL; + return -1; + } + else + { + if(!fn()) + { + FreeLibrary(m_hIdleDll); + m_hIdleDll = NULL; + return -1; + } + } + } +#endif + return 0; +} + + +wxInt32 CBOINCGUIApp::ShutdownSystemIdleDetection() +{ +#ifdef __WXMSW__ + if(m_hIdleDll) { + IdleTrackerTerm fn; + fn = (IdleTrackerTerm)GetProcAddress(m_hIdleDll, wxT("IdleTrackerTerm")); + if(fn) + { + fn(); + } + else + { + return -1; + } + FreeLibrary(m_hIdleDll); + m_hIdleDll = NULL; + } +#endif + return 0; +} + + #ifdef __GNUC__ static volatile const char __attribute__((unused)) *BOINCrcsid="$Id$"; #else diff --git a/clientgui/BOINCGUIApp.h b/clientgui/BOINCGUIApp.h index f42e36187a..cc1aca0c0f 100644 --- a/clientgui/BOINCGUIApp.h +++ b/clientgui/BOINCGUIApp.h @@ -53,6 +53,9 @@ protected: void StartupBOINCCore(); void ShutdownBOINCCore(); + wxInt32 StartupSystemIdleDetection(); + wxInt32 ShutdownSystemIdleDetection(); + wxLocale* m_pLocale; wxConfig* m_pConfig; @@ -67,6 +70,10 @@ protected: long m_lBOINCCoreProccessId; +#ifdef __WXMSW__ + HINSTANCE m_hIdleDll; +#endif + wxString m_strDefaultWindowStation; wxString m_strDefaultDesktop; diff --git a/win_build/installerv2/BOINC.ism b/win_build/installerv2/BOINC.ism index 75d659a2bbbd5f16fd9e7e728b35f34abad8e28b..d78b68d1a76f2445912afd22505e98520c493030 100644 GIT binary patch delta 15710 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 DTC_cC delta 15743 zcmc(Gdwdi{*7j7@B-1lVPwwPKV911U4J3qwfFR@s1VR#%a8VXxNCt?6gq?)zis^_7 zYP_~k0d&2-yXtyDf<$+{psuT{uZX&f_gzHA6+u7(0&@AD(>*gu5PZMy{pXwdJzb~j zoH})?y1M#w_n9+WLqC2obn9cBjggNpU?c5gEfz}-aE1OQADK}IYBDedmpep;EP7ueE+ zeuLt8eU*Kh*|Ggb{;AMcJBrMrW496ufdT&3K{Sgi^;03HcylO*KqE@=3+P>;WlA8rP6Iy!XMnT7k&fdrA<83_m3*6PYn=Yz_z6mW-#PE{R4#%jTFMHTr|3-hN>E-f!BFD;mvUpcd^Ah)uxqT}(2UxiP0yNe1cs)|Y~ zDszjAE2b6|78g`ObVhDvWnqEao#(A?sI6;Qm~j!gZtkd#wz3nvqjJ`hY+HRLm#;?f zIDK=)0{!ZWVEM0TuE>eeJh&rz&JC<@QA1O6b$$KhMz7mlP`|Ley0)%yinnpu(n`-t zz5kU7a`jvur9Xb<9Nl$gd~`;(+nu{~X?QUe$*;a4$bFbJ&Fza+z}`y$Y)}C zWSrY=j3%#f;W2wA3x7@$T8lQ-+gmv>?p+0;8&jAZDkrq1k6CT1af>D#}yiNZ0Bg6pvxe6nCie1!- zdcP)5ElnFH+1KP^(nU3m4Lvow-PAQnmUx<1GBiaL z^C}+%qkTgp!Gh}M>iN}8f%QlyA%ALa$&^C>DXHo$Qq_C?nwDHB)4NG;O|gOA0<8+_ za3yp+d)3B}u>3`yn#EYeGndw4;+yo0h0*#;3vKf0k9lMaT|8jp8uqbi1RX64YFI#S z=SMs&!tFNs#4fID@QezuFN2z2uroWfMWeBeG+-OKuaa|5t$x?ySlMqT5AFEm+CgmF z(#u(kf1AT8@{PHu$y}|gmU?E?HDFJv%EkU-UVK>C)PM{y7xJ$)%U{&kh%?aL5?cqg z?AcEuwvq0R%ohIc<U8*I=f;~;|kw0_0)E} zyxhk0&sXH=d$m}7*UG+n-$i5fFSR~IcSNsTACwW;9?V_CoUXYSm^2T!j@-Q5io$}T z@{ZTntYN8vE?lMMt_!4H6I{ur9^KP2ER9CeEuLFa@C*6zm-`zecRb(n6q|4ng_t

(+w%>Q` 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