Add wxPowerResourceBlocker for power management.

Add functions to acquire/release power resources, preventing/allowing back the
system to go to sleep or turn off the screen and a class wrapping them in a
safe way.

This patch implements the functions for MSW and OSX, adds documentation and
updates the sample to demonstrate the new functionality.

Closes #16413.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77511 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2014-08-29 23:22:15 +00:00
parent a704ab9cc0
commit 51d715e46d
12 changed files with 534 additions and 15 deletions

View File

@@ -883,6 +883,7 @@ ALL_BASE_SOURCES = \
src/osx/carbon/utils.cpp \ src/osx/carbon/utils.cpp \
src/osx/carbon/uma.cpp \ src/osx/carbon/uma.cpp \
src/osx/cocoa/utils.mm \ src/osx/cocoa/utils.mm \
src/osx/cocoa/power.mm \
src/msw/main.cpp \ src/msw/main.cpp \
src/msw/volume.cpp \ src/msw/volume.cpp \
src/common/fs_inet.cpp \ src/common/fs_inet.cpp \
@@ -4519,7 +4520,7 @@ COND_PLATFORM_WIN32_1___BASE_PLATFORM_SRC_OBJECTS = \
monodll_dlmsw.o \ monodll_dlmsw.o \
monodll_evtloopconsole.o \ monodll_evtloopconsole.o \
monodll_msw_mimetype.o \ monodll_msw_mimetype.o \
monodll_power.o \ monodll_msw_power.o \
monodll_regconf.o \ monodll_regconf.o \
monodll_registry.o \ monodll_registry.o \
monodll_msw_snglinst.o \ monodll_msw_snglinst.o \
@@ -4539,7 +4540,7 @@ COND_PLATFORM_WIN32_1___BASE_PLATFORM_SRC_OBJECTS = \
@COND_TOOLKIT_OSX_CARBON@__BASE_AND_GUI_TOOLKIT_SRC_OBJECTS \ @COND_TOOLKIT_OSX_CARBON@__BASE_AND_GUI_TOOLKIT_SRC_OBJECTS \
@COND_TOOLKIT_OSX_CARBON@ = monodll_carbon_utils.o monodll_uma.o @COND_TOOLKIT_OSX_CARBON@ = monodll_carbon_utils.o monodll_uma.o
@COND_TOOLKIT_OSX_COCOA@__BASE_AND_GUI_TOOLKIT_SRC_OBJECTS \ @COND_TOOLKIT_OSX_COCOA@__BASE_AND_GUI_TOOLKIT_SRC_OBJECTS \
@COND_TOOLKIT_OSX_COCOA@ = monodll_osx_cocoa_utils.o @COND_TOOLKIT_OSX_COCOA@ = monodll_osx_cocoa_utils.o monodll_cocoa_power.o
@COND_PLATFORM_MACOSX_1@__NET_PLATFORM_SRC_OBJECTS \ @COND_PLATFORM_MACOSX_1@__NET_PLATFORM_SRC_OBJECTS \
@COND_PLATFORM_MACOSX_1@ = monodll_socketiohandler.o monodll_sockunix.o \ @COND_PLATFORM_MACOSX_1@ = monodll_socketiohandler.o monodll_sockunix.o \
@COND_PLATFORM_MACOSX_1@ monodll_sockosx.o @COND_PLATFORM_MACOSX_1@ monodll_sockosx.o
@@ -6867,7 +6868,7 @@ COND_PLATFORM_WIN32_1___BASE_PLATFORM_SRC_OBJECTS_1 = \
monolib_dlmsw.o \ monolib_dlmsw.o \
monolib_evtloopconsole.o \ monolib_evtloopconsole.o \
monolib_msw_mimetype.o \ monolib_msw_mimetype.o \
monolib_power.o \ monolib_msw_power.o \
monolib_regconf.o \ monolib_regconf.o \
monolib_registry.o \ monolib_registry.o \
monolib_msw_snglinst.o \ monolib_msw_snglinst.o \
@@ -6887,7 +6888,7 @@ COND_PLATFORM_WIN32_1___BASE_PLATFORM_SRC_OBJECTS_1 = \
@COND_TOOLKIT_OSX_CARBON@__BASE_AND_GUI_TOOLKIT_SRC_OBJECTS_1 \ @COND_TOOLKIT_OSX_CARBON@__BASE_AND_GUI_TOOLKIT_SRC_OBJECTS_1 \
@COND_TOOLKIT_OSX_CARBON@ = monolib_carbon_utils.o monolib_uma.o @COND_TOOLKIT_OSX_CARBON@ = monolib_carbon_utils.o monolib_uma.o
@COND_TOOLKIT_OSX_COCOA@__BASE_AND_GUI_TOOLKIT_SRC_OBJECTS_1 \ @COND_TOOLKIT_OSX_COCOA@__BASE_AND_GUI_TOOLKIT_SRC_OBJECTS_1 \
@COND_TOOLKIT_OSX_COCOA@ = monolib_osx_cocoa_utils.o @COND_TOOLKIT_OSX_COCOA@ = monolib_osx_cocoa_utils.o monolib_cocoa_power.o
@COND_PLATFORM_MACOSX_1@__NET_PLATFORM_SRC_OBJECTS_1 \ @COND_PLATFORM_MACOSX_1@__NET_PLATFORM_SRC_OBJECTS_1 \
@COND_PLATFORM_MACOSX_1@ = monolib_socketiohandler.o monolib_sockunix.o \ @COND_PLATFORM_MACOSX_1@ = monolib_socketiohandler.o monolib_sockunix.o \
@COND_PLATFORM_MACOSX_1@ monolib_sockosx.o @COND_PLATFORM_MACOSX_1@ monolib_sockosx.o
@@ -9268,7 +9269,7 @@ COND_PLATFORM_WIN32_1___BASE_PLATFORM_SRC_OBJECTS_2 = \
basedll_dlmsw.o \ basedll_dlmsw.o \
basedll_evtloopconsole.o \ basedll_evtloopconsole.o \
basedll_msw_mimetype.o \ basedll_msw_mimetype.o \
basedll_power.o \ basedll_msw_power.o \
basedll_regconf.o \ basedll_regconf.o \
basedll_registry.o \ basedll_registry.o \
basedll_msw_snglinst.o \ basedll_msw_snglinst.o \
@@ -9288,7 +9289,7 @@ COND_PLATFORM_WIN32_1___BASE_PLATFORM_SRC_OBJECTS_2 = \
@COND_TOOLKIT_OSX_CARBON@__BASE_AND_GUI_TOOLKIT_SRC_OBJECTS_2 \ @COND_TOOLKIT_OSX_CARBON@__BASE_AND_GUI_TOOLKIT_SRC_OBJECTS_2 \
@COND_TOOLKIT_OSX_CARBON@ = basedll_carbon_utils.o basedll_uma.o @COND_TOOLKIT_OSX_CARBON@ = basedll_carbon_utils.o basedll_uma.o
@COND_TOOLKIT_OSX_COCOA@__BASE_AND_GUI_TOOLKIT_SRC_OBJECTS_2 \ @COND_TOOLKIT_OSX_COCOA@__BASE_AND_GUI_TOOLKIT_SRC_OBJECTS_2 \
@COND_TOOLKIT_OSX_COCOA@ = basedll_cocoa_utils.o @COND_TOOLKIT_OSX_COCOA@ = basedll_cocoa_utils.o basedll_cocoa_power.o
COND_MONOLITHIC_0_SHARED_0___baselib___depname = \ COND_MONOLITHIC_0_SHARED_0___baselib___depname = \
$(LIBDIRNAME)/$(LIBPREFIX)wx_base$(WXBASEPORT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX)$(LIBEXT) $(LIBDIRNAME)/$(LIBPREFIX)wx_base$(WXBASEPORT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX)$(LIBEXT)
@COND_MONOLITHIC_0_SHARED_0@__baselib___depname = $(COND_MONOLITHIC_0_SHARED_0___baselib___depname) @COND_MONOLITHIC_0_SHARED_0@__baselib___depname = $(COND_MONOLITHIC_0_SHARED_0___baselib___depname)
@@ -9356,7 +9357,7 @@ COND_PLATFORM_WIN32_1___BASE_PLATFORM_SRC_OBJECTS_3 = \
baselib_dlmsw.o \ baselib_dlmsw.o \
baselib_evtloopconsole.o \ baselib_evtloopconsole.o \
baselib_msw_mimetype.o \ baselib_msw_mimetype.o \
baselib_power.o \ baselib_msw_power.o \
baselib_regconf.o \ baselib_regconf.o \
baselib_registry.o \ baselib_registry.o \
baselib_msw_snglinst.o \ baselib_msw_snglinst.o \
@@ -9376,7 +9377,7 @@ COND_PLATFORM_WIN32_1___BASE_PLATFORM_SRC_OBJECTS_3 = \
@COND_TOOLKIT_OSX_CARBON@__BASE_AND_GUI_TOOLKIT_SRC_OBJECTS_3 \ @COND_TOOLKIT_OSX_CARBON@__BASE_AND_GUI_TOOLKIT_SRC_OBJECTS_3 \
@COND_TOOLKIT_OSX_CARBON@ = baselib_carbon_utils.o baselib_uma.o @COND_TOOLKIT_OSX_CARBON@ = baselib_carbon_utils.o baselib_uma.o
@COND_TOOLKIT_OSX_COCOA@__BASE_AND_GUI_TOOLKIT_SRC_OBJECTS_3 \ @COND_TOOLKIT_OSX_COCOA@__BASE_AND_GUI_TOOLKIT_SRC_OBJECTS_3 \
@COND_TOOLKIT_OSX_COCOA@ = baselib_cocoa_utils.o @COND_TOOLKIT_OSX_COCOA@ = baselib_cocoa_utils.o baselib_cocoa_power.o
@COND_SHARED_1@____wxbase_namedll_DEP = $(__basedll___depname) @COND_SHARED_1@____wxbase_namedll_DEP = $(__basedll___depname)
@COND_SHARED_0@____wxbase_namelib_DEP = $(__baselib___depname) @COND_SHARED_0@____wxbase_namelib_DEP = $(__baselib___depname)
COND_MONOLITHIC_0_SHARED_1___netdll___depname = \ COND_MONOLITHIC_0_SHARED_1___netdll___depname = \
@@ -9548,7 +9549,7 @@ COND_USE_SOVERSOLARIS_1___coredll___so_symlinks_uninst_cmd = rm -f \
@COND_TOOLKIT_OSX_CARBON@__BASE_AND_GUI_TOOLKIT_SRC_OBJECTS_4 \ @COND_TOOLKIT_OSX_CARBON@__BASE_AND_GUI_TOOLKIT_SRC_OBJECTS_4 \
@COND_TOOLKIT_OSX_CARBON@ = coredll_carbon_utils.o coredll_uma.o @COND_TOOLKIT_OSX_CARBON@ = coredll_carbon_utils.o coredll_uma.o
@COND_TOOLKIT_OSX_COCOA@__BASE_AND_GUI_TOOLKIT_SRC_OBJECTS_4 \ @COND_TOOLKIT_OSX_COCOA@__BASE_AND_GUI_TOOLKIT_SRC_OBJECTS_4 \
@COND_TOOLKIT_OSX_COCOA@ = coredll_osx_cocoa_utils.o @COND_TOOLKIT_OSX_COCOA@ = coredll_osx_cocoa_utils.o coredll_power.o
COND_USE_GUI_1_WXUNIV_0___CORE_SRC_OBJECTS_2 = \ COND_USE_GUI_1_WXUNIV_0___CORE_SRC_OBJECTS_2 = \
$(__LOWLEVEL_SRC_OBJECTS_4) \ $(__LOWLEVEL_SRC_OBJECTS_4) \
$(__PLATFORM_SRC_OBJECTS_8) \ $(__PLATFORM_SRC_OBJECTS_8) \
@@ -11317,7 +11318,7 @@ COND_MONOLITHIC_0_SHARED_0_USE_GUI_1___corelib___depname = \
@COND_TOOLKIT_OSX_CARBON@__BASE_AND_GUI_TOOLKIT_SRC_OBJECTS_5 \ @COND_TOOLKIT_OSX_CARBON@__BASE_AND_GUI_TOOLKIT_SRC_OBJECTS_5 \
@COND_TOOLKIT_OSX_CARBON@ = corelib_carbon_utils.o corelib_uma.o @COND_TOOLKIT_OSX_CARBON@ = corelib_carbon_utils.o corelib_uma.o
@COND_TOOLKIT_OSX_COCOA@__BASE_AND_GUI_TOOLKIT_SRC_OBJECTS_5 \ @COND_TOOLKIT_OSX_COCOA@__BASE_AND_GUI_TOOLKIT_SRC_OBJECTS_5 \
@COND_TOOLKIT_OSX_COCOA@ = corelib_osx_cocoa_utils.o @COND_TOOLKIT_OSX_COCOA@ = corelib_osx_cocoa_utils.o corelib_power.o
COND_USE_GUI_1_WXUNIV_0___CORE_SRC_OBJECTS_3 = \ COND_USE_GUI_1_WXUNIV_0___CORE_SRC_OBJECTS_3 = \
$(__LOWLEVEL_SRC_OBJECTS_6) \ $(__LOWLEVEL_SRC_OBJECTS_6) \
$(__PLATFORM_SRC_OBJECTS_9) \ $(__PLATFORM_SRC_OBJECTS_9) \
@@ -17552,7 +17553,7 @@ monodll_evtloopconsole.o: $(srcdir)/src/msw/evtloopconsole.cpp $(MONODLL_ODEP)
monodll_msw_mimetype.o: $(srcdir)/src/msw/mimetype.cpp $(MONODLL_ODEP) monodll_msw_mimetype.o: $(srcdir)/src/msw/mimetype.cpp $(MONODLL_ODEP)
$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/msw/mimetype.cpp $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/msw/mimetype.cpp
monodll_power.o: $(srcdir)/src/msw/power.cpp $(MONODLL_ODEP) monodll_msw_power.o: $(srcdir)/src/msw/power.cpp $(MONODLL_ODEP)
$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/msw/power.cpp $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/msw/power.cpp
monodll_regconf.o: $(srcdir)/src/msw/regconf.cpp $(MONODLL_ODEP) monodll_regconf.o: $(srcdir)/src/msw/regconf.cpp $(MONODLL_ODEP)
@@ -17642,6 +17643,9 @@ monodll_uma.o: $(srcdir)/src/osx/carbon/uma.cpp $(MONODLL_ODEP)
monodll_osx_cocoa_utils.o: $(srcdir)/src/osx/cocoa/utils.mm $(MONODLL_ODEP) monodll_osx_cocoa_utils.o: $(srcdir)/src/osx/cocoa/utils.mm $(MONODLL_ODEP)
$(CXXC) -c -o $@ $(MONODLL_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/utils.mm $(CXXC) -c -o $@ $(MONODLL_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/utils.mm
monodll_cocoa_power.o: $(srcdir)/src/osx/cocoa/power.mm $(MONODLL_ODEP)
$(CXXC) -c -o $@ $(MONODLL_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/power.mm
monodll_fs_inet.o: $(srcdir)/src/common/fs_inet.cpp $(MONODLL_ODEP) monodll_fs_inet.o: $(srcdir)/src/common/fs_inet.cpp $(MONODLL_ODEP)
$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/fs_inet.cpp $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/fs_inet.cpp
@@ -23414,7 +23418,7 @@ monolib_evtloopconsole.o: $(srcdir)/src/msw/evtloopconsole.cpp $(MONOLIB_ODEP)
monolib_msw_mimetype.o: $(srcdir)/src/msw/mimetype.cpp $(MONOLIB_ODEP) monolib_msw_mimetype.o: $(srcdir)/src/msw/mimetype.cpp $(MONOLIB_ODEP)
$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/msw/mimetype.cpp $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/msw/mimetype.cpp
monolib_power.o: $(srcdir)/src/msw/power.cpp $(MONOLIB_ODEP) monolib_msw_power.o: $(srcdir)/src/msw/power.cpp $(MONOLIB_ODEP)
$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/msw/power.cpp $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/msw/power.cpp
monolib_regconf.o: $(srcdir)/src/msw/regconf.cpp $(MONOLIB_ODEP) monolib_regconf.o: $(srcdir)/src/msw/regconf.cpp $(MONOLIB_ODEP)
@@ -23504,6 +23508,9 @@ monolib_uma.o: $(srcdir)/src/osx/carbon/uma.cpp $(MONOLIB_ODEP)
monolib_osx_cocoa_utils.o: $(srcdir)/src/osx/cocoa/utils.mm $(MONOLIB_ODEP) monolib_osx_cocoa_utils.o: $(srcdir)/src/osx/cocoa/utils.mm $(MONOLIB_ODEP)
$(CXXC) -c -o $@ $(MONOLIB_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/utils.mm $(CXXC) -c -o $@ $(MONOLIB_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/utils.mm
monolib_cocoa_power.o: $(srcdir)/src/osx/cocoa/power.mm $(MONOLIB_ODEP)
$(CXXC) -c -o $@ $(MONOLIB_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/power.mm
monolib_fs_inet.o: $(srcdir)/src/common/fs_inet.cpp $(MONOLIB_ODEP) monolib_fs_inet.o: $(srcdir)/src/common/fs_inet.cpp $(MONOLIB_ODEP)
$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/fs_inet.cpp $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/fs_inet.cpp
@@ -29276,7 +29283,7 @@ basedll_evtloopconsole.o: $(srcdir)/src/msw/evtloopconsole.cpp $(BASEDLL_ODEP)
basedll_msw_mimetype.o: $(srcdir)/src/msw/mimetype.cpp $(BASEDLL_ODEP) basedll_msw_mimetype.o: $(srcdir)/src/msw/mimetype.cpp $(BASEDLL_ODEP)
$(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/msw/mimetype.cpp $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/msw/mimetype.cpp
basedll_power.o: $(srcdir)/src/msw/power.cpp $(BASEDLL_ODEP) basedll_msw_power.o: $(srcdir)/src/msw/power.cpp $(BASEDLL_ODEP)
$(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/msw/power.cpp $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/msw/power.cpp
basedll_regconf.o: $(srcdir)/src/msw/regconf.cpp $(BASEDLL_ODEP) basedll_regconf.o: $(srcdir)/src/msw/regconf.cpp $(BASEDLL_ODEP)
@@ -29366,6 +29373,9 @@ basedll_uma.o: $(srcdir)/src/osx/carbon/uma.cpp $(BASEDLL_ODEP)
basedll_cocoa_utils.o: $(srcdir)/src/osx/cocoa/utils.mm $(BASEDLL_ODEP) basedll_cocoa_utils.o: $(srcdir)/src/osx/cocoa/utils.mm $(BASEDLL_ODEP)
$(CXXC) -c -o $@ $(BASEDLL_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/utils.mm $(CXXC) -c -o $@ $(BASEDLL_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/utils.mm
basedll_cocoa_power.o: $(srcdir)/src/osx/cocoa/power.mm $(BASEDLL_ODEP)
$(CXXC) -c -o $@ $(BASEDLL_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/power.mm
@COND_PLATFORM_UNIX_1@basedll_fdiodispatcher.o: $(srcdir)/src/common/fdiodispatcher.cpp $(BASEDLL_ODEP) @COND_PLATFORM_UNIX_1@basedll_fdiodispatcher.o: $(srcdir)/src/common/fdiodispatcher.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/common/fdiodispatcher.cpp @COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/common/fdiodispatcher.cpp
@@ -29753,7 +29763,7 @@ baselib_evtloopconsole.o: $(srcdir)/src/msw/evtloopconsole.cpp $(BASELIB_ODEP)
baselib_msw_mimetype.o: $(srcdir)/src/msw/mimetype.cpp $(BASELIB_ODEP) baselib_msw_mimetype.o: $(srcdir)/src/msw/mimetype.cpp $(BASELIB_ODEP)
$(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/msw/mimetype.cpp $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/msw/mimetype.cpp
baselib_power.o: $(srcdir)/src/msw/power.cpp $(BASELIB_ODEP) baselib_msw_power.o: $(srcdir)/src/msw/power.cpp $(BASELIB_ODEP)
$(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/msw/power.cpp $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/msw/power.cpp
baselib_regconf.o: $(srcdir)/src/msw/regconf.cpp $(BASELIB_ODEP) baselib_regconf.o: $(srcdir)/src/msw/regconf.cpp $(BASELIB_ODEP)
@@ -29843,6 +29853,9 @@ baselib_uma.o: $(srcdir)/src/osx/carbon/uma.cpp $(BASELIB_ODEP)
baselib_cocoa_utils.o: $(srcdir)/src/osx/cocoa/utils.mm $(BASELIB_ODEP) baselib_cocoa_utils.o: $(srcdir)/src/osx/cocoa/utils.mm $(BASELIB_ODEP)
$(CXXC) -c -o $@ $(BASELIB_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/utils.mm $(CXXC) -c -o $@ $(BASELIB_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/utils.mm
baselib_cocoa_power.o: $(srcdir)/src/osx/cocoa/power.mm $(BASELIB_ODEP)
$(CXXC) -c -o $@ $(BASELIB_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/power.mm
@COND_PLATFORM_UNIX_1@baselib_fdiodispatcher.o: $(srcdir)/src/common/fdiodispatcher.cpp $(BASELIB_ODEP) @COND_PLATFORM_UNIX_1@baselib_fdiodispatcher.o: $(srcdir)/src/common/fdiodispatcher.cpp $(BASELIB_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/common/fdiodispatcher.cpp @COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/common/fdiodispatcher.cpp
@@ -30080,6 +30093,9 @@ coredll_uma.o: $(srcdir)/src/osx/carbon/uma.cpp $(COREDLL_ODEP)
coredll_osx_cocoa_utils.o: $(srcdir)/src/osx/cocoa/utils.mm $(COREDLL_ODEP) coredll_osx_cocoa_utils.o: $(srcdir)/src/osx/cocoa/utils.mm $(COREDLL_ODEP)
$(CXXC) -c -o $@ $(COREDLL_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/utils.mm $(CXXC) -c -o $@ $(COREDLL_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/utils.mm
coredll_power.o: $(srcdir)/src/osx/cocoa/power.mm $(COREDLL_ODEP)
$(CXXC) -c -o $@ $(COREDLL_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/power.mm
coredll_gtk1_bmpbuttn.o: $(srcdir)/src/gtk1/bmpbuttn.cpp $(COREDLL_ODEP) coredll_gtk1_bmpbuttn.o: $(srcdir)/src/gtk1/bmpbuttn.cpp $(COREDLL_ODEP)
$(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/gtk1/bmpbuttn.cpp $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/gtk1/bmpbuttn.cpp
@@ -34454,6 +34470,9 @@ corelib_uma.o: $(srcdir)/src/osx/carbon/uma.cpp $(CORELIB_ODEP)
corelib_osx_cocoa_utils.o: $(srcdir)/src/osx/cocoa/utils.mm $(CORELIB_ODEP) corelib_osx_cocoa_utils.o: $(srcdir)/src/osx/cocoa/utils.mm $(CORELIB_ODEP)
$(CXXC) -c -o $@ $(CORELIB_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/utils.mm $(CXXC) -c -o $@ $(CORELIB_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/utils.mm
corelib_power.o: $(srcdir)/src/osx/cocoa/power.mm $(CORELIB_ODEP)
$(CXXC) -c -o $@ $(CORELIB_OBJCXXFLAGS) $(srcdir)/src/osx/cocoa/power.mm
corelib_gtk1_bmpbuttn.o: $(srcdir)/src/gtk1/bmpbuttn.cpp $(CORELIB_ODEP) corelib_gtk1_bmpbuttn.o: $(srcdir)/src/gtk1/bmpbuttn.cpp $(CORELIB_ODEP)
$(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/gtk1/bmpbuttn.cpp $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/gtk1/bmpbuttn.cpp

View File

@@ -223,6 +223,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
<set var="BASE_AND_GUI_OSX_COCOA_SRC" hints="files"> <set var="BASE_AND_GUI_OSX_COCOA_SRC" hints="files">
src/osx/cocoa/utils.mm src/osx/cocoa/utils.mm
src/osx/cocoa/power.mm
</set> </set>
<set var="BASE_AND_GUI_OSX_IPHONE_SRC" hints="files"> <set var="BASE_AND_GUI_OSX_IPHONE_SRC" hints="files">

View File

@@ -165,6 +165,7 @@ BASE_AND_GUI_OSX_CARBON_SRC =
BASE_AND_GUI_OSX_COCOA_SRC = BASE_AND_GUI_OSX_COCOA_SRC =
src/osx/cocoa/utils.mm src/osx/cocoa/utils.mm
src/osx/cocoa/power.mm
BASE_AND_GUI_OSX_IPHONE_SRC = BASE_AND_GUI_OSX_IPHONE_SRC =
src/osx/iphone/utils.mm src/osx/iphone/utils.mm

View File

@@ -1768,6 +1768,10 @@
A1A7B833061C35B4AABD093C /* preferencesg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D8F06DEA1AA339ED819B3812 /* preferencesg.cpp */; }; A1A7B833061C35B4AABD093C /* preferencesg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D8F06DEA1AA339ED819B3812 /* preferencesg.cpp */; };
A1A7B833061C35B4AABD093D /* preferencesg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D8F06DEA1AA339ED819B3812 /* preferencesg.cpp */; }; A1A7B833061C35B4AABD093D /* preferencesg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D8F06DEA1AA339ED819B3812 /* preferencesg.cpp */; };
A1A7B833061C35B4AABD093E /* preferencesg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D8F06DEA1AA339ED819B3812 /* preferencesg.cpp */; }; A1A7B833061C35B4AABD093E /* preferencesg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D8F06DEA1AA339ED819B3812 /* preferencesg.cpp */; };
A1A7C58E276F6F2B247F0813 /* power.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0714536835B5227019E29D06 /* power.mm */; };
A1A7C58E276F6F2B247F0814 /* power.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0714536835B5227019E29D06 /* power.mm */; };
A1A7C58E276F6F2B247F0815 /* power.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0714536835B5227019E29D06 /* power.mm */; };
A1A7C58E276F6F2B247F0816 /* power.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0714536835B5227019E29D06 /* power.mm */; };
A1A7D793B034398B8696EF33 /* utils.mm in Sources */ = {isa = PBXBuildFile; fileRef = 789F45D14FF23E248FCFB5FA /* utils.mm */; }; A1A7D793B034398B8696EF33 /* utils.mm in Sources */ = {isa = PBXBuildFile; fileRef = 789F45D14FF23E248FCFB5FA /* utils.mm */; };
A1A7D793B034398B8696EF34 /* utils.mm in Sources */ = {isa = PBXBuildFile; fileRef = 789F45D14FF23E248FCFB5FA /* utils.mm */; }; A1A7D793B034398B8696EF34 /* utils.mm in Sources */ = {isa = PBXBuildFile; fileRef = 789F45D14FF23E248FCFB5FA /* utils.mm */; };
A1A7D793B034398B8696EF35 /* utils.mm in Sources */ = {isa = PBXBuildFile; fileRef = 789F45D14FF23E248FCFB5FA /* utils.mm */; }; A1A7D793B034398B8696EF35 /* utils.mm in Sources */ = {isa = PBXBuildFile; fileRef = 789F45D14FF23E248FCFB5FA /* utils.mm */; };
@@ -4201,6 +4205,7 @@
777385D10CCC350C90F02824 /* textentry_osx.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = textentry_osx.cpp; path = ../../src/osx/textentry_osx.cpp; sourceTree = "<group>"; }; 777385D10CCC350C90F02824 /* textentry_osx.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = textentry_osx.cpp; path = ../../src/osx/textentry_osx.cpp; sourceTree = "<group>"; };
77D6E66F72443765A2FBE263 /* aboutdlgg.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = aboutdlgg.cpp; path = ../../src/generic/aboutdlgg.cpp; sourceTree = "<group>"; }; 77D6E66F72443765A2FBE263 /* aboutdlgg.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = aboutdlgg.cpp; path = ../../src/generic/aboutdlgg.cpp; sourceTree = "<group>"; };
77F5E7BCD9B2307D8DBCC052 /* font.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = font.cpp; path = ../../src/osx/carbon/font.cpp; sourceTree = "<group>"; }; 77F5E7BCD9B2307D8DBCC052 /* font.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = font.cpp; path = ../../src/osx/carbon/font.cpp; sourceTree = "<group>"; };
0714536835B5227019E29D06 /* power.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = power.mm; path = ../../src/osx/cocoa/power.mm; sourceTree = "<group>"; };
789F45D14FF23E248FCFB5FA /* utils.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = utils.mm; path = ../../src/osx/cocoa/utils.mm; sourceTree = "<group>"; }; 789F45D14FF23E248FCFB5FA /* utils.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = utils.mm; path = ../../src/osx/cocoa/utils.mm; sourceTree = "<group>"; };
78D7866F95C73A28BB540606 /* LexBash.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = LexBash.cxx; path = ../../src/stc/scintilla/lexers/LexBash.cxx; sourceTree = "<group>"; }; 78D7866F95C73A28BB540606 /* LexBash.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = LexBash.cxx; path = ../../src/stc/scintilla/lexers/LexBash.cxx; sourceTree = "<group>"; };
7906BD74118A3B4DAC515BC2 /* odcombo.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = odcombo.cpp; path = ../../src/generic/odcombo.cpp; sourceTree = "<group>"; }; 7906BD74118A3B4DAC515BC2 /* odcombo.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = odcombo.cpp; path = ../../src/generic/odcombo.cpp; sourceTree = "<group>"; };
@@ -5943,6 +5948,7 @@
C9A305CEC03B3085B159B617 /* fs_mem.cpp */, C9A305CEC03B3085B159B617 /* fs_mem.cpp */,
E968913A9A593B258BD8EACB /* msgout.cpp */, E968913A9A593B258BD8EACB /* msgout.cpp */,
4188821BBA833CCAA678B234 /* utilscmn.cpp */, 4188821BBA833CCAA678B234 /* utilscmn.cpp */,
0714536835B5227019E29D06 /* power.mm */,
789F45D14FF23E248FCFB5FA /* utils.mm */, 789F45D14FF23E248FCFB5FA /* utils.mm */,
); );
name = base; name = base;
@@ -7343,6 +7349,7 @@
131B879180AE3FB481F81CC9 /* fs_mem.cpp in Sources */, 131B879180AE3FB481F81CC9 /* fs_mem.cpp in Sources */,
05814571E7A83F5DBFB6E4C6 /* msgout.cpp in Sources */, 05814571E7A83F5DBFB6E4C6 /* msgout.cpp in Sources */,
80665EEAE8613DF8A93A7986 /* utilscmn.cpp in Sources */, 80665EEAE8613DF8A93A7986 /* utilscmn.cpp in Sources */,
A1A7C58E276F6F2B247F0815 /* power.mm in Sources */,
A1A7D793B034398B8696EF35 /* utils.mm in Sources */, A1A7D793B034398B8696EF35 /* utils.mm in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
@@ -7375,6 +7382,7 @@
131B879180AE3FB481F81CCA /* fs_mem.cpp in Sources */, 131B879180AE3FB481F81CCA /* fs_mem.cpp in Sources */,
05814571E7A83F5DBFB6E4C7 /* msgout.cpp in Sources */, 05814571E7A83F5DBFB6E4C7 /* msgout.cpp in Sources */,
80665EEAE8613DF8A93A7987 /* utilscmn.cpp in Sources */, 80665EEAE8613DF8A93A7987 /* utilscmn.cpp in Sources */,
A1A7C58E276F6F2B247F0816 /* power.mm in Sources */,
A1A7D793B034398B8696EF36 /* utils.mm in Sources */, A1A7D793B034398B8696EF36 /* utils.mm in Sources */,
F4C0CEADEDC23610BF6983D8 /* artmac.cpp in Sources */, F4C0CEADEDC23610BF6983D8 /* artmac.cpp in Sources */,
296692A7A3783E3A83D005C8 /* brush.cpp in Sources */, 296692A7A3783E3A83D005C8 /* brush.cpp in Sources */,
@@ -8040,6 +8048,7 @@
131B879180AE3FB481F81CC8 /* fs_mem.cpp in Sources */, 131B879180AE3FB481F81CC8 /* fs_mem.cpp in Sources */,
05814571E7A83F5DBFB6E4C5 /* msgout.cpp in Sources */, 05814571E7A83F5DBFB6E4C5 /* msgout.cpp in Sources */,
80665EEAE8613DF8A93A7985 /* utilscmn.cpp in Sources */, 80665EEAE8613DF8A93A7985 /* utilscmn.cpp in Sources */,
A1A7C58E276F6F2B247F0814 /* power.mm in Sources */,
A1A7D793B034398B8696EF34 /* utils.mm in Sources */, A1A7D793B034398B8696EF34 /* utils.mm in Sources */,
F4C0CEADEDC23610BF6983D7 /* artmac.cpp in Sources */, F4C0CEADEDC23610BF6983D7 /* artmac.cpp in Sources */,
296692A7A3783E3A83D005C7 /* brush.cpp in Sources */, 296692A7A3783E3A83D005C7 /* brush.cpp in Sources */,
@@ -9225,6 +9234,7 @@
131B879180AE3FB481F81CC7 /* fs_mem.cpp in Sources */, 131B879180AE3FB481F81CC7 /* fs_mem.cpp in Sources */,
05814571E7A83F5DBFB6E4C4 /* msgout.cpp in Sources */, 05814571E7A83F5DBFB6E4C4 /* msgout.cpp in Sources */,
80665EEAE8613DF8A93A7984 /* utilscmn.cpp in Sources */, 80665EEAE8613DF8A93A7984 /* utilscmn.cpp in Sources */,
A1A7C58E276F6F2B247F0813 /* power.mm in Sources */,
A1A7D793B034398B8696EF33 /* utils.mm in Sources */, A1A7D793B034398B8696EF33 /* utils.mm in Sources */,
F4C0CEADEDC23610BF6983D6 /* artmac.cpp in Sources */, F4C0CEADEDC23610BF6983D6 /* artmac.cpp in Sources */,
296692A7A3783E3A83D005C6 /* brush.cpp in Sources */, 296692A7A3783E3A83D005C6 /* brush.cpp in Sources */,

View File

@@ -7517,7 +7517,7 @@ if test "$wxUSE_GUI" = "yes"; then
dnl TODO some samples are never built so far: mfc (requires VC++) dnl TODO some samples are never built so far: mfc (requires VC++)
SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS artprov controls dialogs drawing \ SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS artprov controls dialogs drawing \
erase event exec font image minimal render \ erase event exec font image minimal power render \
shaped svg taborder vscroll widgets wrapsizer" shaped svg taborder vscroll widgets wrapsizer"
if test "$wxUSE_MONOLITHIC" != "yes"; then if test "$wxUSE_MONOLITHIC" != "yes"; then

View File

@@ -32,6 +32,7 @@ Changes in behaviour which may result in build errors
All: All:
- Add wxPowerResourceBlocker (Tobias Taschner).
- Add wxApp::StoreCurrentException() and RethrowStoredException() and implement - Add wxApp::StoreCurrentException() and RethrowStoredException() and implement
their functionality by default when using C++11 compiler. their functionality by default when using C++11 compiler.
- Allow iterating over wxCmdLineParser arguments in order (Armel Asselin). - Allow iterating over wxCmdLineParser arguments in order (Armel Asselin).

View File

@@ -95,6 +95,49 @@ typedef void (wxEvtHandler::*wxPowerEventFunction)(wxPowerEvent&);
#undef wxHAS_POWER_EVENTS #undef wxHAS_POWER_EVENTS
#endif // support for power events/no support #endif // support for power events/no support
// ----------------------------------------------------------------------------
// wxPowerResourceBlocker
// ----------------------------------------------------------------------------
enum wxPowerResourceKind
{
wxPOWER_RESOURCE_SCREEN,
wxPOWER_RESOURCE_SYSTEM
};
class WXDLLIMPEXP_BASE wxPowerResource
{
public:
static bool Acquire(wxPowerResourceKind kind,
const wxString& reason = wxString());
static void Release(wxPowerResourceKind kind);
};
class wxPowerResourceBlocker
{
public:
explicit wxPowerResourceBlocker(wxPowerResourceKind kind,
const wxString& reason = wxString())
: m_kind(kind),
m_acquired(wxPowerResource::Acquire(kind, reason))
{
}
bool IsInEffect() const { return m_acquired; }
~wxPowerResourceBlocker()
{
if ( m_acquired )
wxPowerResource::Release(m_kind);
}
private:
const wxPowerResourceKind m_kind;
const bool m_acquired;
wxDECLARE_NO_COPY_CLASS(wxPowerResourceBlocker);
};
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// power management functions // power management functions
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View File

@@ -21,6 +21,19 @@ enum wxBatteryState
wxBATTERY_UNKNOWN_STATE wxBATTERY_UNKNOWN_STATE
}; };
/**
Possible power resources that can be locked by wxPowerResourceBlocker.
@since 3.1.0
*/
enum wxPowerResourceKind
{
/// Use to prevent automatic display power off.
wxPOWER_RESOURCE_SCREEN,
/// Use to prevent automatic system suspend.
wxPOWER_RESOURCE_SYSTEM
};
/** /**
@class wxPowerEvent @class wxPowerEvent
@@ -38,6 +51,11 @@ enum wxBatteryState
@beginEventTable{wxPowerEvent} @beginEventTable{wxPowerEvent}
@event{EVT_POWER_SUSPENDING(func)} @event{EVT_POWER_SUSPENDING(func)}
@warning This event and the possibility to veto suspend was removed
from MSW systems starting from Windows Vista. wxPowerResourceBlocker
can be used to prevent the system from suspending under both XP and
later systems, use it instead of handling this event.
System is about to be suspended, this event can be vetoed to prevent System is about to be suspended, this event can be vetoed to prevent
suspend from taking place. suspend from taking place.
@event{EVT_POWER_SUSPENDED(func)} @event{EVT_POWER_SUSPENDED(func)}
@@ -80,4 +98,126 @@ wxEventType wxEVT_POWER_SUSPENDED;
wxEventType wxEVT_POWER_SUSPEND_CANCEL; wxEventType wxEVT_POWER_SUSPEND_CANCEL;
wxEventType wxEVT_POWER_RESUME; wxEventType wxEVT_POWER_RESUME;
/**
Helper functions for acquiring and releasing the given power resource.
If an application performs a long running task without user interaction it
is often necessary to prevent the system from automatically suspending or
powering off the screen and Acquire() method can be used to do this.
Notice that currently this functionality is only implemented for MSW and
OSX and on the latter only ::wxPOWER_RESOURCE_SYSTEM is supported for
versions earlier than 10.9.
If possible, use wxPowerResourceBlocker class to ensure that Release() is
called instead of calling it manually.
@since 3.1.0
@library{wxbase}
@category{misc}
@see wxPowerResourceBlocker
*/
class wxPowerResource
{
public:
/**
Acquire a power resource for the application.
If successful, the system will not automatically power of the screen or
suspend until Release() is called.
Every call to Acquire @b must be matched by a corresponding call to
Release() or the system will not suspend until the application ends, use
wxPowerResourceBlocker to ensure that this happens.
@param kind Power resource required, either ::wxPOWER_RESOURCE_SCREEN
or ::wxPOWER_RESOURCE_SYSTEM.
@param reason Optional reason may be specified which might be used on
some platforms to inform the user what is preventing power saving.
It should usually describe the operation requiring the resource and
specifying it is strongly recommended.
@return Returns true if the acquisition was successful.
@see Release()
*/
static bool Acquire(wxPowerResourceKind kind,
const wxString& reason = wxString());
/**
Release a previously acquired power resource.
Release @b must be called for every Acquire() call made to restore
normal power saving behaviour
@param kind Power resource to be released.
@see Acquire()
*/
static void Release(wxPowerResourceKind kind);
};
/**
Helper RAII class ensuring that power resources are released.
A wxPowerResourceBlocker object acquires a power resource in the
constructor and releases it in the destructor making it impossible to to
forget to release the power resource (which would prevent suspending or
screen power off until the application ends).
Example:
@code
void MyWindow::DoSomething()
{
wxPowerResourceBlocker
blocker(wxPOWER_RESOURCE_SYSTEM, "Downloading something important");
if ( !blocker.IsInEffect() )
{
// If the resource could not be acquired, tell the user that he has
// to keep the system alive
wxLogMessage("Warning: system may suspend while downloading.");
}
// Run an important download and the system will not suspend while downloading
for ( int i = 0; i < download.size(); ++i )
download.readByte();
// wxPOWER_RESOURCE_SYSTEM automatically released here.
}
@endcode
@since 3.1.0
@library{wxbase}
@category{misc}
@see wxPowerResource
*/
class wxPowerResourceBlocker
{
public:
/**
Acquires the power resource.
Uses the same parameters as wxPowerResource::Acquire().
*/
explicit wxPowerResourceBlocker(wxPowerResourceKind kind,
const wxString& reason = wxString());
/**
Returns whether the power resource could be acquired.
This can be used to inform the user that the application will not
prevent automatic suspending.
@see wxPowerResource::Acquire()
*/
bool IsInEffect() const;
/**
Releases the power resource.
@see wxPowerResource::Release()
*/
~wxPowerResourceBlocker();
};

View File

@@ -29,6 +29,8 @@
#include "wx/textctrl.h" #include "wx/textctrl.h"
#include "wx/msgdlg.h" #include "wx/msgdlg.h"
#include "wx/menu.h"
#include "wx/timer.h"
#include "wx/power.h" #include "wx/power.h"
@@ -47,6 +49,16 @@ public:
: wxFrame(NULL, wxID_ANY, wxT("wxWidgets Power Management Sample"), : wxFrame(NULL, wxID_ANY, wxT("wxWidgets Power Management Sample"),
wxDefaultPosition, wxSize(500, 200)) wxDefaultPosition, wxSize(500, 200))
{ {
m_powerResourceBlocker = NULL;
wxMenu *fileMenu = new wxMenu;
fileMenu->Append(wxID_NEW, "Start long running task\tCtrl-S");
fileMenu->Append(wxID_ABORT, "Stop long running task");
wxMenuBar* menuBar = new wxMenuBar();
menuBar->Append(fileMenu, wxT("&Task"));
SetMenuBar(menuBar);
wxTextCtrl *text = new wxTextCtrl(this, wxID_ANY, wxT(""), wxTextCtrl *text = new wxTextCtrl(this, wxID_ANY, wxT(""),
wxDefaultPosition, wxDefaultSize, wxDefaultPosition, wxDefaultSize,
wxTE_MULTILINE | wxTE_READONLY); wxTE_MULTILINE | wxTE_READONLY);
@@ -58,11 +70,20 @@ public:
UpdatePowerSettings(wxPOWER_UNKNOWN, wxBATTERY_UNKNOWN_STATE); UpdatePowerSettings(wxPOWER_UNKNOWN, wxBATTERY_UNKNOWN_STATE);
StopLongTask();
Bind(wxEVT_COMMAND_MENU_SELECTED,
&MyFrame::OnStartTaskClicked, this, wxID_NEW);
Bind(wxEVT_COMMAND_MENU_SELECTED,
&MyFrame::OnStopTaskClicked, this, wxID_ABORT);
m_taskTimer.Bind(wxEVT_TIMER, &MyFrame::OnTaskTimer, this);
Show(); Show();
} }
virtual ~MyFrame() virtual ~MyFrame()
{ {
delete m_powerResourceBlocker;
delete wxLog::SetActiveTarget(m_logOld); delete wxLog::SetActiveTarget(m_logOld);
} }
@@ -162,10 +183,67 @@ private:
batteryStr.c_str())); batteryStr.c_str()));
} }
void OnStartTaskClicked( wxCommandEvent& WXUNUSED(event) )
{
wxLogMessage("Starting long running task "
"(screen should keep powered on while running)...");
StartLongTask();
}
void OnStopTaskClicked(wxCommandEvent& WXUNUSED(event))
{
StopLongTask();
wxLogMessage("Stopped long running task");
}
void OnTaskTimer(wxTimerEvent& WXUNUSED(event))
{
++m_taskProgress;
if ( m_taskProgress == 100 )
{
StopLongTask();
wxLogMessage("Long running task finished");
}
else
{
wxLogMessage("Long running task at %d%%...", m_taskProgress);
}
}
void StartLongTask()
{
m_taskProgress = 0;
m_taskTimer.Start(12000);
GetMenuBar()->Enable(wxID_NEW, false);
GetMenuBar()->Enable(wxID_ABORT, true);
m_powerResourceBlocker
= new wxPowerResourceBlocker(wxPOWER_RESOURCE_SYSTEM);
if ( !m_powerResourceBlocker->IsInEffect() )
{
wxLogMessage("Power resource could not be acquired, "
"user input is required to prevent system standby");
}
}
void StopLongTask()
{
GetMenuBar()->Enable(wxID_NEW, true);
GetMenuBar()->Enable(wxID_ABORT, false);
m_taskTimer.Stop();
wxDELETE(m_powerResourceBlocker);
}
wxPowerType m_powerType; wxPowerType m_powerType;
wxBatteryState m_batteryState; wxBatteryState m_batteryState;
wxLog *m_logOld; wxLog *m_logOld;
wxTimer m_taskTimer;
wxPowerResourceBlocker *m_powerResourceBlocker;
int m_taskProgress;
wxDECLARE_EVENT_TABLE(); wxDECLARE_EVENT_TABLE();
}; };

View File

@@ -41,6 +41,23 @@
IMPLEMENT_DYNAMIC_CLASS(wxPowerEvent, wxEvent) IMPLEMENT_DYNAMIC_CLASS(wxPowerEvent, wxEvent)
#endif #endif
// Provide stubs for systems without power resource management functions
#if !defined(__WINDOWS__) && !defined(__APPLE__)
bool
wxPowerResource::Acquire(wxPowerResourceKind kind,
const wxString& WXUNUSED(reason))
{
return false;
}
void wxPowerResource::Release(wxPowerResourceKind kind)
{
}
#endif // !(__WINDOWS__ || __APPLE__)
// provide stubs for the systems not implementing these functions // provide stubs for the systems not implementing these functions
#if !defined(__WINDOWS__) #if !defined(__WINDOWS__)

View File

@@ -27,6 +27,7 @@
#endif //WX_PRECOMP #endif //WX_PRECOMP
#include "wx/power.h" #include "wx/power.h"
#include "wx/atomic.h"
#include "wx/msw/private.h" #include "wx/msw/private.h"
#if !defined(__WINCE_STANDARDSDK__) #if !defined(__WINCE_STANDARDSDK__)
@@ -39,6 +40,85 @@
} }
#endif #endif
// ----------------------------------------------------------------------------
// wxPowerResource
// ----------------------------------------------------------------------------
namespace
{
wxAtomicInt g_powerResourceScreenRefCount = 0;
wxAtomicInt g_powerResourceSystemRefCount = 0;
bool UpdatePowerResourceExecutionState()
{
EXECUTION_STATE executionState = ES_CONTINUOUS;
if ( g_powerResourceScreenRefCount > 0 )
executionState |= ES_DISPLAY_REQUIRED;
if ( g_powerResourceSystemRefCount > 0 )
executionState |= ES_SYSTEM_REQUIRED;
if ( ::SetThreadExecutionState(executionState) == NULL )
{
wxLogLastError(wxT("SetThreadExecutionState()"));
return false;
}
return true;
}
} // anonymous namespace
bool
wxPowerResource::Acquire(wxPowerResourceKind kind,
const wxString& WXUNUSED(reason))
{
switch ( kind )
{
case wxPOWER_RESOURCE_SCREEN:
wxAtomicInc(g_powerResourceScreenRefCount);
break;
case wxPOWER_RESOURCE_SYSTEM:
wxAtomicInc(g_powerResourceSystemRefCount);
break;
}
return UpdatePowerResourceExecutionState();
}
void wxPowerResource::Release(wxPowerResourceKind kind)
{
switch ( kind )
{
case wxPOWER_RESOURCE_SCREEN:
if ( g_powerResourceScreenRefCount > 0 )
{
wxAtomicDec(g_powerResourceScreenRefCount);
}
else
{
wxFAIL_MSG( "Screen power resource was not acquired" );
}
break;
case wxPOWER_RESOURCE_SYSTEM:
if ( g_powerResourceSystemRefCount > 0 )
{
wxAtomicDec(g_powerResourceSystemRefCount);
}
else
{
wxFAIL_MSG( "System power resource was not acquired" );
}
break;
}
UpdatePowerResourceExecutionState();
}
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// helper functions // helper functions
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

129
src/osx/cocoa/power.mm Normal file
View File

@@ -0,0 +1,129 @@
/////////////////////////////////////////////////////////////////////////////
// Name: src/osx/cocoa/power.mm
// Purpose: wxPowerResource implementation for OSX
// Author: Tobias Taschner
// Created: 2014-08-09
// Copyright: (c) wxWidgets team
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
#include "wx/wxprec.h"
#include "wx/power.h"
#include "wx/atomic.h"
#include "wx/osx/private.h"
#include <IOKit/pwr_mgt/IOPMLib.h>
// ----------------------------------------------------------------------------
// wxPowerResource
// ----------------------------------------------------------------------------
wxAtomicInt g_powerResourceSystemRefCount = 0;
IOPMAssertionID g_pmAssertionID = 0;
NSObject* g_processInfoActivity = nil;
bool UpdatePowerResourceUsage(wxPowerResourceKind kind, const wxString& reason)
{
if ( g_powerResourceSystemRefCount >= 1 )
{
wxCFStringRef cfreason(reason);
if( reason.IsEmpty())
cfreason = wxString("User Activity");
if ( UMAGetSystemVersion() >= 0x1090 )
{
// Use NSProcessInfo for 10.9 and newer
if ( !g_processInfoActivity )
{
NSActivityOptions
options = NSActivityUserInitiated |
NSActivityIdleSystemSleepDisabled;
if ( kind == wxPOWER_RESOURCE_SCREEN )
options |= NSActivityIdleDisplaySleepDisabled;
g_processInfoActivity = [[NSProcessInfo processInfo]
beginActivityWithOptions:options
reason:cfreason.AsNSString()];
[g_processInfoActivity retain];
return true;
}
}
else if ( !g_pmAssertionID )
{
// Use power manager API for < 10.9 systems
IOReturn success = IOPMAssertionCreateWithName
(
kIOPMAssertionTypeNoIdleSleep,
kIOPMAssertionLevelOn,
cfreason,
&g_pmAssertionID
);
if ( success == kIOReturnSuccess )
return true;
}
}
else if ( g_powerResourceSystemRefCount == 0 )
{
// Release power assertion
if ( UMAGetSystemVersion() >= 0x1090 )
{
// Use NSProcessInfo for 10.9 and newer
if ( g_processInfoActivity )
{
[[NSProcessInfo processInfo]
endActivity:(id)g_processInfoActivity];
g_processInfoActivity = nil;
return true;
}
}
else if ( g_pmAssertionID )
{
// Use power manager API for < 10.9 systems
IOReturn success = IOPMAssertionRelease(g_pmAssertionID);
g_pmAssertionID = 0;
if (success == kIOReturnSuccess)
return true;
}
}
return true;
}
bool wxPowerResource::Acquire(wxPowerResourceKind kind, const wxString& reason)
{
wxAtomicInc(g_powerResourceSystemRefCount);
bool success = UpdatePowerResourceUsage(kind, reason);
if (!success)
wxAtomicDec(g_powerResourceSystemRefCount);
return success;
}
void wxPowerResource::Release(wxPowerResourceKind kind)
{
switch ( kind )
{
case wxPOWER_RESOURCE_SCREEN:
case wxPOWER_RESOURCE_SYSTEM:
if ( g_powerResourceSystemRefCount > 0 )
{
wxAtomicDec(g_powerResourceSystemRefCount);
}
else
{
wxFAIL_MSG("Power resource was not acquired");
}
UpdatePowerResourceUsage(kind, "");
break;
}
}