diff --git a/Makefile.in b/Makefile.in index b8b4700992..0e81d7b435 100644 --- a/Makefile.in +++ b/Makefile.in @@ -4111,6 +4111,7 @@ COND_USE_GUI_1_ALL_GUI_HEADERS = \ wx/listbox.h \ wx/mdi.h \ wx/menu.h \ + wx/modalhook.h \ wx/mousemanager.h \ wx/msgdlg.h \ wx/nativewin.h \ @@ -4807,6 +4808,7 @@ COND_USE_GUI_1_WXUNIV_0___CORE_SRC_OBJECTS = \ monodll_markupparser.o \ monodll_matrix.o \ monodll_menucmn.o \ + monodll_modalhook.o \ monodll_mousemanager.o \ monodll_nbkbase.o \ monodll_overlaycmn.o \ @@ -5028,6 +5030,7 @@ COND_USE_GUI_1_WXUNIV_1___CORE_SRC_OBJECTS = \ monodll_markupparser.o \ monodll_matrix.o \ monodll_menucmn.o \ + monodll_modalhook.o \ monodll_mousemanager.o \ monodll_nbkbase.o \ monodll_overlaycmn.o \ @@ -7051,6 +7054,7 @@ COND_USE_GUI_1_WXUNIV_0___CORE_SRC_OBJECTS_1 = \ monolib_markupparser.o \ monolib_matrix.o \ monolib_menucmn.o \ + monolib_modalhook.o \ monolib_mousemanager.o \ monolib_nbkbase.o \ monolib_overlaycmn.o \ @@ -7272,6 +7276,7 @@ COND_USE_GUI_1_WXUNIV_1___CORE_SRC_OBJECTS_1 = \ monolib_markupparser.o \ monolib_matrix.o \ monolib_menucmn.o \ + monolib_modalhook.o \ monolib_mousemanager.o \ monolib_nbkbase.o \ monolib_overlaycmn.o \ @@ -9467,6 +9472,7 @@ COND_USE_GUI_1_WXUNIV_0___CORE_SRC_OBJECTS_2 = \ coredll_markupparser.o \ coredll_matrix.o \ coredll_menucmn.o \ + coredll_modalhook.o \ coredll_mousemanager.o \ coredll_nbkbase.o \ coredll_overlaycmn.o \ @@ -9688,6 +9694,7 @@ COND_USE_GUI_1_WXUNIV_1___CORE_SRC_OBJECTS_2 = \ coredll_markupparser.o \ coredll_matrix.o \ coredll_menucmn.o \ + coredll_modalhook.o \ coredll_mousemanager.o \ coredll_nbkbase.o \ coredll_overlaycmn.o \ @@ -11143,6 +11150,7 @@ COND_USE_GUI_1_WXUNIV_0___CORE_SRC_OBJECTS_3 = \ corelib_markupparser.o \ corelib_matrix.o \ corelib_menucmn.o \ + corelib_modalhook.o \ corelib_mousemanager.o \ corelib_nbkbase.o \ corelib_overlaycmn.o \ @@ -11364,6 +11372,7 @@ COND_USE_GUI_1_WXUNIV_1___CORE_SRC_OBJECTS_3 = \ corelib_markupparser.o \ corelib_matrix.o \ corelib_menucmn.o \ + corelib_modalhook.o \ corelib_mousemanager.o \ corelib_nbkbase.o \ corelib_overlaycmn.o \ @@ -21946,6 +21955,9 @@ monodll_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONODLL_ODEP) @COND_USE_GUI_1@monodll_menucmn.o: $(srcdir)/src/common/menucmn.cpp $(MONODLL_ODEP) @COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/menucmn.cpp +@COND_USE_GUI_1@monodll_modalhook.o: $(srcdir)/src/common/modalhook.cpp $(MONODLL_ODEP) +@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/modalhook.cpp + @COND_USE_GUI_1@monodll_mousemanager.o: $(srcdir)/src/common/mousemanager.cpp $(MONODLL_ODEP) @COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/mousemanager.cpp @@ -27802,6 +27814,9 @@ monolib_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONOLIB_ODEP) @COND_USE_GUI_1@monolib_menucmn.o: $(srcdir)/src/common/menucmn.cpp $(MONOLIB_ODEP) @COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/menucmn.cpp +@COND_USE_GUI_1@monolib_modalhook.o: $(srcdir)/src/common/modalhook.cpp $(MONOLIB_ODEP) +@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/modalhook.cpp + @COND_USE_GUI_1@monolib_mousemanager.o: $(srcdir)/src/common/mousemanager.cpp $(MONOLIB_ODEP) @COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/mousemanager.cpp @@ -33814,6 +33829,9 @@ coredll_win32.o: $(srcdir)/src/univ/themes/win32.cpp $(COREDLL_ODEP) @COND_USE_GUI_1@coredll_menucmn.o: $(srcdir)/src/common/menucmn.cpp $(COREDLL_ODEP) @COND_USE_GUI_1@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/common/menucmn.cpp +@COND_USE_GUI_1@coredll_modalhook.o: $(srcdir)/src/common/modalhook.cpp $(COREDLL_ODEP) +@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/common/modalhook.cpp + @COND_USE_GUI_1@coredll_mousemanager.o: $(srcdir)/src/common/mousemanager.cpp $(COREDLL_ODEP) @COND_USE_GUI_1@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/common/mousemanager.cpp @@ -38191,6 +38209,9 @@ corelib_win32.o: $(srcdir)/src/univ/themes/win32.cpp $(CORELIB_ODEP) @COND_USE_GUI_1@corelib_menucmn.o: $(srcdir)/src/common/menucmn.cpp $(CORELIB_ODEP) @COND_USE_GUI_1@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/common/menucmn.cpp +@COND_USE_GUI_1@corelib_modalhook.o: $(srcdir)/src/common/modalhook.cpp $(CORELIB_ODEP) +@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/common/modalhook.cpp + @COND_USE_GUI_1@corelib_mousemanager.o: $(srcdir)/src/common/mousemanager.cpp $(CORELIB_ODEP) @COND_USE_GUI_1@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/common/mousemanager.cpp diff --git a/build/bakefiles/files.bkl b/build/bakefiles/files.bkl index 9a9f452a88..befd8fe351 100644 --- a/build/bakefiles/files.bkl +++ b/build/bakefiles/files.bkl @@ -709,6 +709,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! src/common/markupparser.cpp src/common/matrix.cpp src/common/menucmn.cpp + src/common/modalhook.cpp src/common/mousemanager.cpp src/common/nbkbase.cpp src/common/overlaycmn.cpp @@ -867,6 +868,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! wx/listbox.h wx/mdi.h wx/menu.h + wx/modalhook.h wx/mousemanager.h wx/msgdlg.h wx/nativewin.h diff --git a/build/msw/makefile.bcc b/build/msw/makefile.bcc index b635a8f90f..ebc9778991 100644 --- a/build/msw/makefile.bcc +++ b/build/msw/makefile.bcc @@ -1920,6 +1920,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \ $(OBJS)\monodll_markupparser.obj \ $(OBJS)\monodll_matrix.obj \ $(OBJS)\monodll_menucmn.obj \ + $(OBJS)\monodll_modalhook.obj \ $(OBJS)\monodll_mousemanager.obj \ $(OBJS)\monodll_nbkbase.obj \ $(OBJS)\monodll_overlaycmn.obj \ @@ -2141,6 +2142,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \ $(OBJS)\monodll_markupparser.obj \ $(OBJS)\monodll_matrix.obj \ $(OBJS)\monodll_menucmn.obj \ + $(OBJS)\monodll_modalhook.obj \ $(OBJS)\monodll_mousemanager.obj \ $(OBJS)\monodll_nbkbase.obj \ $(OBJS)\monodll_overlaycmn.obj \ @@ -3310,6 +3312,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \ $(OBJS)\monolib_markupparser.obj \ $(OBJS)\monolib_matrix.obj \ $(OBJS)\monolib_menucmn.obj \ + $(OBJS)\monolib_modalhook.obj \ $(OBJS)\monolib_mousemanager.obj \ $(OBJS)\monolib_nbkbase.obj \ $(OBJS)\monolib_overlaycmn.obj \ @@ -3531,6 +3534,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \ $(OBJS)\monolib_markupparser.obj \ $(OBJS)\monolib_matrix.obj \ $(OBJS)\monolib_menucmn.obj \ + $(OBJS)\monolib_modalhook.obj \ $(OBJS)\monolib_mousemanager.obj \ $(OBJS)\monolib_nbkbase.obj \ $(OBJS)\monolib_overlaycmn.obj \ @@ -4605,6 +4609,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \ $(OBJS)\coredll_markupparser.obj \ $(OBJS)\coredll_matrix.obj \ $(OBJS)\coredll_menucmn.obj \ + $(OBJS)\coredll_modalhook.obj \ $(OBJS)\coredll_mousemanager.obj \ $(OBJS)\coredll_nbkbase.obj \ $(OBJS)\coredll_overlaycmn.obj \ @@ -4826,6 +4831,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \ $(OBJS)\coredll_markupparser.obj \ $(OBJS)\coredll_matrix.obj \ $(OBJS)\coredll_menucmn.obj \ + $(OBJS)\coredll_modalhook.obj \ $(OBJS)\coredll_mousemanager.obj \ $(OBJS)\coredll_nbkbase.obj \ $(OBJS)\coredll_overlaycmn.obj \ @@ -5650,6 +5656,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \ $(OBJS)\corelib_markupparser.obj \ $(OBJS)\corelib_matrix.obj \ $(OBJS)\corelib_menucmn.obj \ + $(OBJS)\corelib_modalhook.obj \ $(OBJS)\corelib_mousemanager.obj \ $(OBJS)\corelib_nbkbase.obj \ $(OBJS)\corelib_overlaycmn.obj \ @@ -5871,6 +5878,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \ $(OBJS)\corelib_markupparser.obj \ $(OBJS)\corelib_matrix.obj \ $(OBJS)\corelib_menucmn.obj \ + $(OBJS)\corelib_modalhook.obj \ $(OBJS)\corelib_mousemanager.obj \ $(OBJS)\corelib_nbkbase.obj \ $(OBJS)\corelib_overlaycmn.obj \ @@ -15107,6 +15115,11 @@ $(OBJS)\monodll_menucmn.obj: ..\..\src\common\menucmn.cpp !endif !if "$(USE_GUI)" == "1" +$(OBJS)\monodll_modalhook.obj: ..\..\src\common\modalhook.cpp + $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\common\modalhook.cpp +!endif + +!if "$(USE_GUI)" == "1" $(OBJS)\monodll_mousemanager.obj: ..\..\src\common\mousemanager.cpp $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\common\mousemanager.cpp !endif @@ -20632,6 +20645,11 @@ $(OBJS)\monolib_menucmn.obj: ..\..\src\common\menucmn.cpp !endif !if "$(USE_GUI)" == "1" +$(OBJS)\monolib_modalhook.obj: ..\..\src\common\modalhook.cpp + $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\modalhook.cpp +!endif + +!if "$(USE_GUI)" == "1" $(OBJS)\monolib_mousemanager.obj: ..\..\src\common\mousemanager.cpp $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\mousemanager.cpp !endif @@ -26154,6 +26172,11 @@ $(OBJS)\coredll_menucmn.obj: ..\..\src\common\menucmn.cpp !endif !if "$(USE_GUI)" == "1" +$(OBJS)\coredll_modalhook.obj: ..\..\src\common\modalhook.cpp + $(CXX) -q -c -P -o$@ $(COREDLL_CXXFLAGS) ..\..\src\common\modalhook.cpp +!endif + +!if "$(USE_GUI)" == "1" $(OBJS)\coredll_mousemanager.obj: ..\..\src\common\mousemanager.cpp $(CXX) -q -c -P -o$@ $(COREDLL_CXXFLAGS) ..\..\src\common\mousemanager.cpp !endif @@ -30243,6 +30266,11 @@ $(OBJS)\corelib_menucmn.obj: ..\..\src\common\menucmn.cpp !endif !if "$(USE_GUI)" == "1" +$(OBJS)\corelib_modalhook.obj: ..\..\src\common\modalhook.cpp + $(CXX) -q -c -P -o$@ $(CORELIB_CXXFLAGS) ..\..\src\common\modalhook.cpp +!endif + +!if "$(USE_GUI)" == "1" $(OBJS)\corelib_mousemanager.obj: ..\..\src\common\mousemanager.cpp $(CXX) -q -c -P -o$@ $(CORELIB_CXXFLAGS) ..\..\src\common\mousemanager.cpp !endif diff --git a/build/msw/makefile.gcc b/build/msw/makefile.gcc index b8678b7f03..d59d6f49d7 100644 --- a/build/msw/makefile.gcc +++ b/build/msw/makefile.gcc @@ -1944,6 +1944,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \ $(OBJS)\monodll_markupparser.o \ $(OBJS)\monodll_matrix.o \ $(OBJS)\monodll_menucmn.o \ + $(OBJS)\monodll_modalhook.o \ $(OBJS)\monodll_mousemanager.o \ $(OBJS)\monodll_nbkbase.o \ $(OBJS)\monodll_overlaycmn.o \ @@ -2167,6 +2168,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \ $(OBJS)\monodll_markupparser.o \ $(OBJS)\monodll_matrix.o \ $(OBJS)\monodll_menucmn.o \ + $(OBJS)\monodll_modalhook.o \ $(OBJS)\monodll_mousemanager.o \ $(OBJS)\monodll_nbkbase.o \ $(OBJS)\monodll_overlaycmn.o \ @@ -3354,6 +3356,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \ $(OBJS)\monolib_markupparser.o \ $(OBJS)\monolib_matrix.o \ $(OBJS)\monolib_menucmn.o \ + $(OBJS)\monolib_modalhook.o \ $(OBJS)\monolib_mousemanager.o \ $(OBJS)\monolib_nbkbase.o \ $(OBJS)\monolib_overlaycmn.o \ @@ -3577,6 +3580,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \ $(OBJS)\monolib_markupparser.o \ $(OBJS)\monolib_matrix.o \ $(OBJS)\monolib_menucmn.o \ + $(OBJS)\monolib_modalhook.o \ $(OBJS)\monolib_mousemanager.o \ $(OBJS)\monolib_nbkbase.o \ $(OBJS)\monolib_overlaycmn.o \ @@ -4679,6 +4683,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \ $(OBJS)\coredll_markupparser.o \ $(OBJS)\coredll_matrix.o \ $(OBJS)\coredll_menucmn.o \ + $(OBJS)\coredll_modalhook.o \ $(OBJS)\coredll_mousemanager.o \ $(OBJS)\coredll_nbkbase.o \ $(OBJS)\coredll_overlaycmn.o \ @@ -4902,6 +4907,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \ $(OBJS)\coredll_markupparser.o \ $(OBJS)\coredll_matrix.o \ $(OBJS)\coredll_menucmn.o \ + $(OBJS)\coredll_modalhook.o \ $(OBJS)\coredll_mousemanager.o \ $(OBJS)\coredll_nbkbase.o \ $(OBJS)\coredll_overlaycmn.o \ @@ -5738,6 +5744,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \ $(OBJS)\corelib_markupparser.o \ $(OBJS)\corelib_matrix.o \ $(OBJS)\corelib_menucmn.o \ + $(OBJS)\corelib_modalhook.o \ $(OBJS)\corelib_mousemanager.o \ $(OBJS)\corelib_nbkbase.o \ $(OBJS)\corelib_overlaycmn.o \ @@ -5961,6 +5968,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \ $(OBJS)\corelib_markupparser.o \ $(OBJS)\corelib_matrix.o \ $(OBJS)\corelib_menucmn.o \ + $(OBJS)\corelib_modalhook.o \ $(OBJS)\corelib_mousemanager.o \ $(OBJS)\corelib_nbkbase.o \ $(OBJS)\corelib_overlaycmn.o \ @@ -16617,6 +16625,11 @@ $(OBJS)\monodll_menucmn.o: ../../src/common/menucmn.cpp endif ifeq ($(USE_GUI),1) +$(OBJS)\monodll_modalhook.o: ../../src/common/modalhook.cpp + $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $< +endif + +ifeq ($(USE_GUI),1) $(OBJS)\monodll_mousemanager.o: ../../src/common/mousemanager.cpp $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $< endif @@ -23586,6 +23599,11 @@ $(OBJS)\monolib_menucmn.o: ../../src/common/menucmn.cpp endif ifeq ($(USE_GUI),1) +$(OBJS)\monolib_modalhook.o: ../../src/common/modalhook.cpp + $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $< +endif + +ifeq ($(USE_GUI),1) $(OBJS)\monolib_mousemanager.o: ../../src/common/mousemanager.cpp $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $< endif @@ -30552,6 +30570,11 @@ $(OBJS)\coredll_menucmn.o: ../../src/common/menucmn.cpp endif ifeq ($(USE_GUI),1) +$(OBJS)\coredll_modalhook.o: ../../src/common/modalhook.cpp + $(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $< +endif + +ifeq ($(USE_GUI),1) $(OBJS)\coredll_mousemanager.o: ../../src/common/mousemanager.cpp $(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $< endif @@ -35859,6 +35882,11 @@ $(OBJS)\corelib_menucmn.o: ../../src/common/menucmn.cpp endif ifeq ($(USE_GUI),1) +$(OBJS)\corelib_modalhook.o: ../../src/common/modalhook.cpp + $(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $< +endif + +ifeq ($(USE_GUI),1) $(OBJS)\corelib_mousemanager.o: ../../src/common/mousemanager.cpp $(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $< endif diff --git a/build/msw/makefile.vc b/build/msw/makefile.vc index 10a0982f74..9208afb5ce 100644 --- a/build/msw/makefile.vc +++ b/build/msw/makefile.vc @@ -2248,6 +2248,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \ $(OBJS)\monodll_markupparser.obj \ $(OBJS)\monodll_matrix.obj \ $(OBJS)\monodll_menucmn.obj \ + $(OBJS)\monodll_modalhook.obj \ $(OBJS)\monodll_mousemanager.obj \ $(OBJS)\monodll_nbkbase.obj \ $(OBJS)\monodll_overlaycmn.obj \ @@ -2469,6 +2470,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \ $(OBJS)\monodll_markupparser.obj \ $(OBJS)\monodll_matrix.obj \ $(OBJS)\monodll_menucmn.obj \ + $(OBJS)\monodll_modalhook.obj \ $(OBJS)\monodll_mousemanager.obj \ $(OBJS)\monodll_nbkbase.obj \ $(OBJS)\monodll_overlaycmn.obj \ @@ -3644,6 +3646,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \ $(OBJS)\monolib_markupparser.obj \ $(OBJS)\monolib_matrix.obj \ $(OBJS)\monolib_menucmn.obj \ + $(OBJS)\monolib_modalhook.obj \ $(OBJS)\monolib_mousemanager.obj \ $(OBJS)\monolib_nbkbase.obj \ $(OBJS)\monolib_overlaycmn.obj \ @@ -3865,6 +3868,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \ $(OBJS)\monolib_markupparser.obj \ $(OBJS)\monolib_matrix.obj \ $(OBJS)\monolib_menucmn.obj \ + $(OBJS)\monolib_modalhook.obj \ $(OBJS)\monolib_mousemanager.obj \ $(OBJS)\monolib_nbkbase.obj \ $(OBJS)\monolib_overlaycmn.obj \ @@ -5005,6 +5009,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \ $(OBJS)\coredll_markupparser.obj \ $(OBJS)\coredll_matrix.obj \ $(OBJS)\coredll_menucmn.obj \ + $(OBJS)\coredll_modalhook.obj \ $(OBJS)\coredll_mousemanager.obj \ $(OBJS)\coredll_nbkbase.obj \ $(OBJS)\coredll_overlaycmn.obj \ @@ -5226,6 +5231,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \ $(OBJS)\coredll_markupparser.obj \ $(OBJS)\coredll_matrix.obj \ $(OBJS)\coredll_menucmn.obj \ + $(OBJS)\coredll_modalhook.obj \ $(OBJS)\coredll_mousemanager.obj \ $(OBJS)\coredll_nbkbase.obj \ $(OBJS)\coredll_overlaycmn.obj \ @@ -6056,6 +6062,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \ $(OBJS)\corelib_markupparser.obj \ $(OBJS)\corelib_matrix.obj \ $(OBJS)\corelib_menucmn.obj \ + $(OBJS)\corelib_modalhook.obj \ $(OBJS)\corelib_mousemanager.obj \ $(OBJS)\corelib_nbkbase.obj \ $(OBJS)\corelib_overlaycmn.obj \ @@ -6277,6 +6284,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \ $(OBJS)\corelib_markupparser.obj \ $(OBJS)\corelib_matrix.obj \ $(OBJS)\corelib_menucmn.obj \ + $(OBJS)\corelib_modalhook.obj \ $(OBJS)\corelib_mousemanager.obj \ $(OBJS)\corelib_nbkbase.obj \ $(OBJS)\corelib_overlaycmn.obj \ @@ -15827,6 +15835,11 @@ $(OBJS)\monodll_menucmn.obj: ..\..\src\common\menucmn.cpp !endif !if "$(USE_GUI)" == "1" +$(OBJS)\monodll_modalhook.obj: ..\..\src\common\modalhook.cpp + $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\common\modalhook.cpp +!endif + +!if "$(USE_GUI)" == "1" $(OBJS)\monodll_mousemanager.obj: ..\..\src\common\mousemanager.cpp $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\common\mousemanager.cpp !endif @@ -21352,6 +21365,11 @@ $(OBJS)\monolib_menucmn.obj: ..\..\src\common\menucmn.cpp !endif !if "$(USE_GUI)" == "1" +$(OBJS)\monolib_modalhook.obj: ..\..\src\common\modalhook.cpp + $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\modalhook.cpp +!endif + +!if "$(USE_GUI)" == "1" $(OBJS)\monolib_mousemanager.obj: ..\..\src\common\mousemanager.cpp $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\mousemanager.cpp !endif @@ -26874,6 +26892,11 @@ $(OBJS)\coredll_menucmn.obj: ..\..\src\common\menucmn.cpp !endif !if "$(USE_GUI)" == "1" +$(OBJS)\coredll_modalhook.obj: ..\..\src\common\modalhook.cpp + $(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) ..\..\src\common\modalhook.cpp +!endif + +!if "$(USE_GUI)" == "1" $(OBJS)\coredll_mousemanager.obj: ..\..\src\common\mousemanager.cpp $(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) ..\..\src\common\mousemanager.cpp !endif @@ -30963,6 +30986,11 @@ $(OBJS)\corelib_menucmn.obj: ..\..\src\common\menucmn.cpp !endif !if "$(USE_GUI)" == "1" +$(OBJS)\corelib_modalhook.obj: ..\..\src\common\modalhook.cpp + $(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) ..\..\src\common\modalhook.cpp +!endif + +!if "$(USE_GUI)" == "1" $(OBJS)\corelib_mousemanager.obj: ..\..\src\common\mousemanager.cpp $(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) ..\..\src\common\mousemanager.cpp !endif diff --git a/build/msw/makefile.wat b/build/msw/makefile.wat index 9646c50062..c43f2ac8e4 100644 --- a/build/msw/makefile.wat +++ b/build/msw/makefile.wat @@ -382,6 +382,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = & $(OBJS)\monodll_markupparser.obj & $(OBJS)\monodll_matrix.obj & $(OBJS)\monodll_menucmn.obj & + $(OBJS)\monodll_modalhook.obj & $(OBJS)\monodll_mousemanager.obj & $(OBJS)\monodll_nbkbase.obj & $(OBJS)\monodll_overlaycmn.obj & @@ -605,6 +606,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = & $(OBJS)\monodll_markupparser.obj & $(OBJS)\monodll_matrix.obj & $(OBJS)\monodll_menucmn.obj & + $(OBJS)\monodll_modalhook.obj & $(OBJS)\monodll_mousemanager.obj & $(OBJS)\monodll_nbkbase.obj & $(OBJS)\monodll_overlaycmn.obj & @@ -1808,6 +1810,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = & $(OBJS)\monolib_markupparser.obj & $(OBJS)\monolib_matrix.obj & $(OBJS)\monolib_menucmn.obj & + $(OBJS)\monolib_modalhook.obj & $(OBJS)\monolib_mousemanager.obj & $(OBJS)\monolib_nbkbase.obj & $(OBJS)\monolib_overlaycmn.obj & @@ -2031,6 +2034,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = & $(OBJS)\monolib_markupparser.obj & $(OBJS)\monolib_matrix.obj & $(OBJS)\monolib_menucmn.obj & + $(OBJS)\monolib_modalhook.obj & $(OBJS)\monolib_mousemanager.obj & $(OBJS)\monolib_nbkbase.obj & $(OBJS)\monolib_overlaycmn.obj & @@ -3159,6 +3163,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = & $(OBJS)\coredll_markupparser.obj & $(OBJS)\coredll_matrix.obj & $(OBJS)\coredll_menucmn.obj & + $(OBJS)\coredll_modalhook.obj & $(OBJS)\coredll_mousemanager.obj & $(OBJS)\coredll_nbkbase.obj & $(OBJS)\coredll_overlaycmn.obj & @@ -3382,6 +3387,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = & $(OBJS)\coredll_markupparser.obj & $(OBJS)\coredll_matrix.obj & $(OBJS)\coredll_menucmn.obj & + $(OBJS)\coredll_modalhook.obj & $(OBJS)\coredll_mousemanager.obj & $(OBJS)\coredll_nbkbase.obj & $(OBJS)\coredll_overlaycmn.obj & @@ -4223,6 +4229,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = & $(OBJS)\corelib_markupparser.obj & $(OBJS)\corelib_matrix.obj & $(OBJS)\corelib_menucmn.obj & + $(OBJS)\corelib_modalhook.obj & $(OBJS)\corelib_mousemanager.obj & $(OBJS)\corelib_nbkbase.obj & $(OBJS)\corelib_overlaycmn.obj & @@ -4446,6 +4453,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = & $(OBJS)\corelib_markupparser.obj & $(OBJS)\corelib_matrix.obj & $(OBJS)\corelib_menucmn.obj & + $(OBJS)\corelib_modalhook.obj & $(OBJS)\corelib_mousemanager.obj & $(OBJS)\corelib_nbkbase.obj & $(OBJS)\corelib_overlaycmn.obj & @@ -16966,6 +16974,11 @@ $(OBJS)\monodll_menucmn.obj : .AUTODEPEND ..\..\src\common\menucmn.cpp !endif !ifeq USE_GUI 1 +$(OBJS)\monodll_modalhook.obj : .AUTODEPEND ..\..\src\common\modalhook.cpp + $(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $< +!endif + +!ifeq USE_GUI 1 $(OBJS)\monodll_mousemanager.obj : .AUTODEPEND ..\..\src\common\mousemanager.cpp $(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $< !endif @@ -23935,6 +23948,11 @@ $(OBJS)\monolib_menucmn.obj : .AUTODEPEND ..\..\src\common\menucmn.cpp !endif !ifeq USE_GUI 1 +$(OBJS)\monolib_modalhook.obj : .AUTODEPEND ..\..\src\common\modalhook.cpp + $(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $< +!endif + +!ifeq USE_GUI 1 $(OBJS)\monolib_mousemanager.obj : .AUTODEPEND ..\..\src\common\mousemanager.cpp $(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $< !endif @@ -30901,6 +30919,11 @@ $(OBJS)\coredll_menucmn.obj : .AUTODEPEND ..\..\src\common\menucmn.cpp !endif !ifeq USE_GUI 1 +$(OBJS)\coredll_modalhook.obj : .AUTODEPEND ..\..\src\common\modalhook.cpp + $(CXX) -bt=nt -zq -fo=$^@ $(COREDLL_CXXFLAGS) $< +!endif + +!ifeq USE_GUI 1 $(OBJS)\coredll_mousemanager.obj : .AUTODEPEND ..\..\src\common\mousemanager.cpp $(CXX) -bt=nt -zq -fo=$^@ $(COREDLL_CXXFLAGS) $< !endif @@ -36208,6 +36231,11 @@ $(OBJS)\corelib_menucmn.obj : .AUTODEPEND ..\..\src\common\menucmn.cpp !endif !ifeq USE_GUI 1 +$(OBJS)\corelib_modalhook.obj : .AUTODEPEND ..\..\src\common\modalhook.cpp + $(CXX) -bt=nt -zq -fo=$^@ $(CORELIB_CXXFLAGS) $< +!endif + +!ifeq USE_GUI 1 $(OBJS)\corelib_mousemanager.obj : .AUTODEPEND ..\..\src\common\mousemanager.cpp $(CXX) -bt=nt -zq -fo=$^@ $(CORELIB_CXXFLAGS) $< !endif diff --git a/build/msw/wx_core.dsp b/build/msw/wx_core.dsp index 32220f5cf9..4b89803d8f 100644 --- a/build/msw/wx_core.dsp +++ b/build/msw/wx_core.dsp @@ -8,21 +8,21 @@ CFG=core - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "wx_core.mak". -!MESSAGE +!MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE +!MESSAGE !MESSAGE NMAKE /f "wx_core.mak" CFG="core - Win32 Debug" -!MESSAGE +!MESSAGE !MESSAGE Possible choices for configuration are: -!MESSAGE +!MESSAGE !MESSAGE "core - Win32 DLL Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "core - Win32 DLL Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "core - Win32 Release" (based on "Win32 (x86) Static Library") !MESSAGE "core - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE +!MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 @@ -478,6 +478,10 @@ SOURCE=..\..\src\common\menucmn.cpp # End Source File # Begin Source File +SOURCE=..\..\src\common\modalhook.cpp +# End Source File +# Begin Source File + SOURCE=..\..\src\common\mousemanager.cpp # End Source File # Begin Source File @@ -1362,25 +1366,25 @@ SOURCE=..\..\include\wx\univ\setup.h !IF "$(CFG)" == "core - Win32 DLL Release" -# Begin Custom Build - +# Begin Custom Build - # End Custom Build !ELSEIF "$(CFG)" == "core - Win32 DLL Debug" -# Begin Custom Build - +# Begin Custom Build - # End Custom Build !ELSEIF "$(CFG)" == "core - Win32 Release" -# Begin Custom Build - +# Begin Custom Build - # End Custom Build !ELSEIF "$(CFG)" == "core - Win32 Debug" -# Begin Custom Build - +# Begin Custom Build - # End Custom Build @@ -2800,6 +2804,10 @@ SOURCE=..\..\include\wx\minifram.h # End Source File # Begin Source File +SOURCE=..\..\include\wx\modalhook.h +# End Source File +# Begin Source File + SOURCE=..\..\include\wx\mousemanager.h # End Source File # Begin Source File @@ -3605,4 +3613,3 @@ SOURCE=..\..\src\xrc\xmlreshandler.cpp # End Group # End Target # End Project - diff --git a/build/msw/wx_vc7_core.vcproj b/build/msw/wx_vc7_core.vcproj index 7d826c8034..b8c6091d38 100644 --- a/build/msw/wx_vc7_core.vcproj +++ b/build/msw/wx_vc7_core.vcproj @@ -552,6 +552,9 @@ + + @@ -2285,6 +2288,9 @@ + + diff --git a/build/msw/wx_vc8_core.vcproj b/build/msw/wx_vc8_core.vcproj index b81afc8128..3ec17d668a 100644 --- a/build/msw/wx_vc8_core.vcproj +++ b/build/msw/wx_vc8_core.vcproj @@ -752,6 +752,10 @@ RelativePath="..\..\src\common\menucmn.cpp" > + + @@ -3055,6 +3059,10 @@ RelativePath="..\..\include\wx\minifram.h" > + + diff --git a/build/msw/wx_vc9_core.vcproj b/build/msw/wx_vc9_core.vcproj index 13aebbf490..128f72bc8d 100644 --- a/build/msw/wx_vc9_core.vcproj +++ b/build/msw/wx_vc9_core.vcproj @@ -750,6 +750,10 @@ RelativePath="..\..\src\common\menucmn.cpp" > + + @@ -3053,6 +3057,10 @@ RelativePath="..\..\include\wx\minifram.h" > + + diff --git a/docs/changes.txt b/docs/changes.txt index 8b4fcddbaa..adc9b79eb5 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -601,6 +601,7 @@ All (GUI): - Add support for wxRibbonBar and related controls to XRC (Armel Asselin). - Add wxBITMAP_PNG() macro similar to wxBITMAP() but for PNG files. - Add new wxSimplebook class. +- Implement possibility to hook all modal dialog calls. - Support hexadecimal numbers in wxSpinCtrl. - Respect window max size in wxBoxSizer (Nathan Ridge). - Add support for searching in wxWebView for MSW and GTK (Allonii). diff --git a/include/wx/modalhook.h b/include/wx/modalhook.h new file mode 100644 index 0000000000..bb7b37b66b --- /dev/null +++ b/include/wx/modalhook.h @@ -0,0 +1,105 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/modalhook.h +// Purpose: Allows to hook into showing modal dialogs. +// Author: Vadim Zeitlin +// Created: 2013-05-19 +// RCS-ID: $Id$ +// Copyright: (c) 2013 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_MODALHOOK_H_ +#define _WX_MODALHOOK_H_ + +#include "wx/vector.h" + +class WXDLLIMPEXP_FWD_CORE wxDialog; + +// ---------------------------------------------------------------------------- +// Class allowing to be notified about any modal dialog calls. +// ---------------------------------------------------------------------------- + +// To be notified about entering and exiting modal dialogs and possibly to +// replace them with something else (e.g. just return a predefined value for +// testing), define an object of this class, override its Enter() and +// possibly Exit() methods and call Register() on it. +class WXDLLIMPEXP_CORE wxModalDialogHook +{ +public: + // Default ctor doesn't do anything, call Register() to activate the hook. + wxModalDialogHook() { } + + // Dtor unregisters the hook if it had been registered. + virtual ~wxModalDialogHook() { DoUnregister(); } + + // Register this hook as being active, i.e. its Enter() and Exit() methods + // will be called. + // + // Notice that the order of registration matters: the last hook registered + // is called first, and if its Enter() returns something != wxID_NONE, the + // subsequent hooks are skipped. + void Register(); + + // Unregister this hook. Notice that is done automatically from the dtor. + void Unregister(); + + // Called from wxWidgets code before showing any modal dialogs and calls + // Enter() for every registered hook. + static int CallEnter(wxDialog* dialog); + + // Called from wxWidgets code after dismissing the dialog and calls Exit() + // for every registered hook. + static void CallExit(wxDialog* dialog); + +protected: + // Called by wxWidgets before showing any modal dialogs, override this to + // be notified about this and return anything but wxID_NONE to skip showing + // the modal dialog entirely and just return the specified result. + virtual int Enter(wxDialog* dialog) = 0; + + // Called by wxWidgets after dismissing the modal dialog. Notice that it + // won't be called if Enter() hadn't been. + virtual void Exit(wxDialog* WXUNUSED(dialog)) { } + +private: + // Unregister the given hook, return true if it was done or false if the + // hook wasn't found. + bool DoUnregister(); + + // All the hooks in reverse registration order (i.e. in call order). + typedef wxVector Hooks; + static Hooks ms_hooks; + + wxDECLARE_NO_COPY_CLASS(wxModalDialogHook); +}; + +// Helper object used by WX_MODAL_DIALOG_HOOK below to ensure that CallExit() +// is called on scope exit. +class wxModalDialogHookExitGuard +{ +public: + wxEXPLICIT wxModalDialogHookExitGuard(wxDialog* dialog) + : m_dialog(dialog) + { + } + + ~wxModalDialogHookExitGuard() + { + wxModalDialogHook::CallExit(m_dialog); + } + +private: + wxDialog* const m_dialog; + + wxDECLARE_NO_COPY_CLASS(wxModalDialogHookExitGuard); +}; + +// This macro needs to be used at the top of every implementation of +// ShowModal() in order for wxModalDialogHook to work. +#define WX_HOOK_MODAL_DIALOG() \ + const int modalDialogHookRC = wxModalDialogHook::CallEnter(this); \ + if ( modalDialogHookRC != wxID_NONE ) \ + return modalDialogHookRC; \ + wxModalDialogHookExitGuard modalDialogHookExit(this) + +#endif // _WX_MODALHOOK_H_ diff --git a/include/wx/testing.h b/include/wx/testing.h index fce2c508ba..dc1bd5ec33 100644 --- a/include/wx/testing.h +++ b/include/wx/testing.h @@ -13,56 +13,11 @@ #include "wx/debug.h" #include "wx/string.h" +#include "wx/modalhook.h" -class WXDLLIMPEXP_FWD_CORE wxDialog; class WXDLLIMPEXP_FWD_CORE wxMessageDialogBase; class WXDLLIMPEXP_FWD_CORE wxFileDialogBase; -// ---------------------------------------------------------------------------- -// implementation helpers -// ---------------------------------------------------------------------------- - -// Helper hook class used to redirect ShowModal() to testing code. -// Instead of showing a dialog modally, hook code is called to simulate what -// the user would do and return appropriate ID from ShowModal(). -class WXDLLIMPEXP_CORE wxModalDialogHook -{ -public: - wxModalDialogHook() {} - virtual ~wxModalDialogHook() {} - - /// Returns currently active hook object or NULL. - static wxModalDialogHook *Get() { return ms_instance; } - - /// Set the hook and returns the previously set one. - static wxModalDialogHook *Set(wxModalDialogHook *hook) - { - wxModalDialogHook *old = ms_instance; - ms_instance = hook; - return old; - } - - /// Entry point that is called from ShowModal(). - virtual int Invoke(wxDialog *dlg) = 0; - -private: - static wxModalDialogHook *ms_instance; - - wxDECLARE_NO_COPY_CLASS(wxModalDialogHook); -}; - -// This macro needs to be used at the top of every implementation of -// ShowModal() in order for the above modal dialogs testing code to work. -#define WX_TESTING_SHOW_MODAL_HOOK() \ - if ( wxModalDialogHook::Get() ) \ - { \ - int rc = wxModalDialogHook::Get()->Invoke(this); \ - if ( rc != wxID_NONE ) \ - return rc; \ - } \ - struct wxDummyTestingStruct /* just to force a semicolon */ - - // ---------------------------------------------------------------------------- // testing API // ---------------------------------------------------------------------------- @@ -233,15 +188,42 @@ class wxTestingModalHook : public wxModalDialogHook public: wxTestingModalHook() { - m_prevHook = wxModalDialogHook::Set(this); + Register(); } - virtual ~wxTestingModalHook() + // Called to verify that all expectations were met. This cannot be done in + // the destructor, because ReportFailure() may throw (either because it's + // overriden or because wx's assertions handling is, globally). And + // throwing from the destructor would introduce all sort of problems, + // including messing up the order of errors in some cases. + void CheckUnmetExpectations() { - wxModalDialogHook::Set(m_prevHook); + while ( !m_expectations.empty() ) + { + const wxModalExpectation *expect = m_expectations.front(); + m_expectations.pop(); + if ( expect->IsOptional() ) + continue; + + ReportFailure + ( + wxString::Format + ( + "Expected %s dialog was not shown.", + expect->GetDescription() + ) + ); + break; + } } - virtual int Invoke(wxDialog *dlg) + void AddExpectation(const wxModalExpectation& e) + { + m_expectations.push(&e); + } + +protected: + virtual int Enter(wxDialog *dlg) { while ( !m_expectations.empty() ) { @@ -281,37 +263,6 @@ public: return wxID_NONE; } - // Called to verify that all expectations were met. This cannot be done in - // the destructor, because ReportFailure() may throw (either because it's - // overriden or because wx's assertions handling is, globally). And - // throwing from the destructor would introduce all sort of problems, - // including messing up the order of errors in some cases. - void CheckUnmetExpectations() - { - while ( !m_expectations.empty() ) - { - const wxModalExpectation *expect = m_expectations.front(); - m_expectations.pop(); - if ( expect->IsOptional() ) - continue; - - ReportFailure - ( - wxString::Format - ( - "Expected %s dialog was not shown.", - expect->GetDescription() - ) - ); - break; - } - } - - void AddExpectation(const wxModalExpectation& e) - { - m_expectations.push(&e); - } - protected: virtual void ReportFailure(const wxString& msg) { @@ -319,7 +270,6 @@ protected: } private: - wxModalDialogHook *m_prevHook; std::queue m_expectations; wxDECLARE_NO_COPY_CLASS(wxTestingModalHook); diff --git a/interface/wx/modalhook.h b/interface/wx/modalhook.h new file mode 100644 index 0000000000..16df4bc18b --- /dev/null +++ b/interface/wx/modalhook.h @@ -0,0 +1,149 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: wx/modalhook.h +// Purpose: Public interface of wxModalDialogHook class. +// Author: Vadim Zeitlin +// Copyright: (c) 2013 Vadim Zeitlin +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +/** + Allows to intercept all modal dialog calls. + + This class can be used to hook into normal modal dialog handling for some + special needs. One of the most common use cases is for testing: as + automatic tests can't continue if a modal dialog is shown while they run, + this class can be used to avoid showing the modal dialogs during unattended + execution. wxModalDialogHook can also be used for disabling some background + operation while a modal dialog is shown. + + To install a modal dialog hook, you need to derive your own class from this + one and implement its pure virtual Enter() method. Then simply create an + object of your class and call Register() on it to start receiving calls to + your overridden Enter() (and possibly Exit()) methods: + @code + class MyModalDialogHook : public wxModalDialogHook + { + protected: + virtual int Enter(wxDialog* dialog) + { + // Just for demonstration purposes, intercept all uses of + // wxFileDialog. Notice that this doesn't provide any real + // sandboxing, of course, the program can still read and write + // files by not using wxFileDialog to ask the user for their + // names. + if ( wxDynamicCast(dialog, wxFileDialog) ) + { + wxLogError("Access to file system disallowed."); + + // Skip showing the file dialog entirely. + return wxID_CANCEL; + } + + m_lastEnter = wxDateTime::Now(); + + // Allow the dialog to be shown as usual. + return wxID_NONE; + } + + virtual void Exit(wxDialog* dialog) + { + // Again, just for demonstration purposes, show how long did + // the user take to dismiss the dialog. Notice that we + // shouldn't use wxLogMessage() here as this would result in + // another modal dialog call and hence infinite recursion. In + // general, the hooks should be as unintrusive as possible. + wxLogDebug("%s dialog took %s to be dismissed", + dialog->GetClassInfo()->GetClassName(), + (wxDateTime::Now() - m_lastEnter).Format()); + } + }; + + class MyApp : public wxApp + { + public: + virtual bool OnInit() + { + ... + m_myHook.Register(); + ... + } + + private: + MyModalDialogHook m_myHook; + }; + @endcode + + @since 2.9.5 + */ +class wxModalDialogHook +{ +public: + /** + Default and trivial constructor. + + The constructor doesn't do anything, call Register() to make this hook + active. + */ + wxModalDialogHook(); + + /** + Destructor unregisters the hook if it's currently active. + */ + virtual ~wxModalDialogHook(); + + /** + Register this hook as being active. + + After registering the hook, its Enter() and Exit() methods will be + called whenever a modal dialog is shown. + + Notice that the order of registration matters: the last hook registered + is called first, and if its Enter() returns a value different from + ::wxID_NONE, the subsequent hooks are skipped. + + It is an error to register the same hook twice. + */ + void Register(); + + /** + Unregister this hook. + + Notice that is done automatically from the destructor, so usually + calling this method explicitly is unnecessary. + + The hook must be currently registered. + */ + void Unregister(); + +protected: + /** + Called by wxWidgets before showing any modal dialogs. + + Override this to be notified whenever a modal dialog is about to be + shown. + + If the return value of this method is ::wxID_NONE, the dialog is shown + as usual and Exit() will be called when it is dismissed. If the return + value is anything else, the dialog is not shown at all and its + wxDialog::ShowModal() simply returns with the given result. In this + case, Exit() won't be called neither. + + @param dialog The dialog about to be shown, never @NULL. + @return wxID_NONE to continue with showing the dialog or anything else + to skip showing the dialog and just return this value from its + ShowModal(). + */ + virtual int Enter(wxDialog* dialog) = 0; + + /** + Called by wxWidgets after dismissing the modal dialog. + + Notice that it won't be called if Enter() hadn't been called because + another modal hook, registered after this one, intercepted the dialog + or if our Enter() was called but returned a value different from + ::wxID_NONE. + + @param dialog The dialog that was shown and dismissed, never @NULL. + */ + virtual void Exit(wxDialog* dialog); +}; diff --git a/samples/dialogs/dialogs.cpp b/samples/dialogs/dialogs.cpp index 679838a4dd..11a4bc4388 100644 --- a/samples/dialogs/dialogs.cpp +++ b/samples/dialogs/dialogs.cpp @@ -32,6 +32,7 @@ #include "wx/minifram.h" #include "wx/sysopt.h" #include "wx/notifmsg.h" +#include "wx/modalhook.h" #if wxUSE_RICHMSGDLG #include "wx/richmsgdlg.h" @@ -249,6 +250,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(DIALOGS_STANDARD_BUTTON_SIZER_DIALOG, MyFrame::OnStandardButtonsSizerDialog) EVT_MENU(DIALOGS_TEST_DEFAULT_ACTION, MyFrame::OnTestDefaultActionDialog) + EVT_MENU(DIALOGS_MODAL_HOOK, MyFrame::OnModalHook) EVT_MENU(DIALOGS_REQUEST, MyFrame::OnRequestUserAttention) #if wxUSE_NOTIFICATION_MESSAGE @@ -538,6 +540,7 @@ bool MyApp::OnInit() menuDlg->Append(DIALOGS_STANDARD_BUTTON_SIZER_DIALOG, wxT("&Standard Buttons Sizer Dialog")); menuDlg->Append(DIALOGS_TEST_DEFAULT_ACTION, wxT("&Test dialog default action")); + menuDlg->AppendCheckItem(DIALOGS_MODAL_HOOK, "Enable modal dialog hook"); menuDlg->AppendSeparator(); menuDlg->Append(wxID_EXIT, wxT("E&xit\tAlt-X")); @@ -2105,6 +2108,32 @@ void MyFrame::OnTestDefaultActionDialog(wxCommandEvent& WXUNUSED(event)) dialog.ShowModal(); } +void MyFrame::OnModalHook(wxCommandEvent& event) +{ + class TestModalHook : public wxModalDialogHook + { + protected: + virtual int Enter(wxDialog* dialog) + { + wxLogStatus("Showing %s modal dialog", + dialog->GetClassInfo()->GetClassName()); + return wxID_NONE; + } + + virtual void Exit(wxDialog* dialog) + { + wxLogStatus("Leaving %s modal dialog", + dialog->GetClassInfo()->GetClassName()); + } + }; + + static TestModalHook s_hook; + if ( event.IsChecked() ) + s_hook.Register(); + else + s_hook.Unregister(); +} + void MyFrame::OnExit(wxCommandEvent& WXUNUSED(event) ) { Close(true); diff --git a/samples/dialogs/dialogs.h b/samples/dialogs/dialogs.h index f92379f33f..3d866d9a40 100644 --- a/samples/dialogs/dialogs.h +++ b/samples/dialogs/dialogs.h @@ -475,6 +475,7 @@ public: void OnStandardButtonsSizerDialog(wxCommandEvent& event); void OnTestDefaultActionDialog(wxCommandEvent& event); + void OnModalHook(wxCommandEvent& event); void OnExit(wxCommandEvent& event); @@ -588,7 +589,8 @@ enum DIALOGS_PROPERTY_SHEET_TOOLBOOK, DIALOGS_PROPERTY_SHEET_BUTTONTOOLBOOK, DIALOGS_STANDARD_BUTTON_SIZER_DIALOG, - DIALOGS_TEST_DEFAULT_ACTION + DIALOGS_TEST_DEFAULT_ACTION, + DIALOGS_MODAL_HOOK }; #endif diff --git a/src/cocoa/dialog.mm b/src/cocoa/dialog.mm index fbc8bbe18d..72a380243c 100644 --- a/src/cocoa/dialog.mm +++ b/src/cocoa/dialog.mm @@ -19,7 +19,7 @@ #include "wx/settings.h" #endif //WX_PRECOMP -#include "wx/testing.h" +#include "wx/modalhook.h" #include "wx/cocoa/autorelease.h" #include "wx/cocoa/string.h" @@ -128,7 +128,7 @@ bool wxDialog::Show(bool show) // is stopped (via EndModal()) it returns the exit code. int wxDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); wxCHECK_MSG(!IsModal(),GetReturnCode(),wxT("wxDialog::ShowModal called within its own modal loop")); diff --git a/src/cocoa/dirdlg.mm b/src/cocoa/dirdlg.mm index bc4613aa22..2f2ce30012 100644 --- a/src/cocoa/dirdlg.mm +++ b/src/cocoa/dirdlg.mm @@ -31,7 +31,7 @@ #endif #include "wx/filename.h" -#include "wx/testing.h" +#include "wx/modalhook.h" #include "wx/cocoa/autorelease.h" #include "wx/cocoa/string.h" @@ -105,7 +105,7 @@ wxDirDialog::~wxDirDialog() int wxDirDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); wxAutoNSAutoreleasePool thePool; diff --git a/src/cocoa/filedlg.mm b/src/cocoa/filedlg.mm index 613f75bfea..e953896a7b 100644 --- a/src/cocoa/filedlg.mm +++ b/src/cocoa/filedlg.mm @@ -33,7 +33,7 @@ #include "wx/cocoa/autorelease.h" #include "wx/cocoa/string.h" -#include "wx/testing.h" +#include "wx/modalhook.h" #import #import @@ -197,7 +197,7 @@ void wxFileDialog::SetPath(const wxString& path) int wxFileDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); wxAutoNSAutoreleasePool thePool; diff --git a/src/cocoa/msgdlg.mm b/src/cocoa/msgdlg.mm index 0d6072a226..b14a70ba61 100644 --- a/src/cocoa/msgdlg.mm +++ b/src/cocoa/msgdlg.mm @@ -31,7 +31,7 @@ #include "wx/cocoa/autorelease.h" #include "wx/cocoa/string.h" -#include "wx/testing.h" +#include "wx/modalhook.h" #import // ============================================================================ @@ -73,7 +73,7 @@ void wxCocoaMessageDialog::DoSetCustomLabel(wxString& var, const ButtonLabel& va int wxCocoaMessageDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); wxAutoNSAutoreleasePool thePool; diff --git a/src/common/dlgcmn.cpp b/src/common/dlgcmn.cpp index 1bc4d72667..4c52be1cee 100644 --- a/src/common/dlgcmn.cpp +++ b/src/common/dlgcmn.cpp @@ -43,7 +43,7 @@ #include "wx/bookctrl.h" #include "wx/scrolwin.h" #include "wx/textwrapper.h" -#include "wx/testing.h" +#include "wx/modalhook.h" #if wxUSE_DISPLAY #include "wx/display.h" @@ -51,8 +51,6 @@ extern WXDLLEXPORT_DATA(const char) wxDialogNameStr[] = "dialog"; -wxModalDialogHook *wxModalDialogHook::ms_instance = NULL; - // ---------------------------------------------------------------------------- // XTI // ---------------------------------------------------------------------------- diff --git a/src/common/modalhook.cpp b/src/common/modalhook.cpp new file mode 100644 index 0000000000..0bba44934e --- /dev/null +++ b/src/common/modalhook.cpp @@ -0,0 +1,120 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: src/common/modalhook.cpp +// Purpose: wxModalDialogHook implementation +// Author: Vadim Zeitlin +// Created: 2013-05-19 +// RCS-ID: $Id$ +// Copyright: (c) 2013 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +// ============================================================================ +// declarations +// ============================================================================ + +// ---------------------------------------------------------------------------- +// headers +// ---------------------------------------------------------------------------- + +// for compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ + #pragma hdrstop +#endif + +#include "wx/modalhook.h" + +#ifndef WX_PRECOMP +#endif // WX_PRECOMP + +wxModalDialogHook::Hooks wxModalDialogHook::ms_hooks; + +// ============================================================================ +// wxModalDialogHook implementation +// ============================================================================ + +// ---------------------------------------------------------------------------- +// Hooks management +// ---------------------------------------------------------------------------- + +void wxModalDialogHook::Register() +{ +#if wxDEBUG_LEVEL + for ( Hooks::const_iterator it = ms_hooks.begin(); + it != ms_hooks.end(); + ++it) + { + if ( *it == this ) + { + wxFAIL_MSG( wxS("Registering already registered hook?") ); + return; + } + } +#endif // wxDEBUG_LEVEL + + ms_hooks.insert(ms_hooks.begin(), this); +} + +void wxModalDialogHook::Unregister() +{ + if ( !DoUnregister() ) + { + wxFAIL_MSG( wxS("Unregistering not registered hook?") ); + } +} + +bool wxModalDialogHook::DoUnregister() +{ + for ( Hooks::iterator it = ms_hooks.begin(); + it != ms_hooks.end(); + ++it ) + { + if ( *it == this ) + { + ms_hooks.erase(it); + return true; + } + } + + return false; +} + +// ---------------------------------------------------------------------------- +// Invoking hooks methods +// ---------------------------------------------------------------------------- + +/* static */ +int wxModalDialogHook::CallEnter(wxDialog* dialog) +{ + // Make a copy of the hooks list to avoid problems if it's modified while + // we're iterating over it: this is unlikely to happen in our case, but + // quite possible in CallExit() as the hooks may remove themselves after + // the call to their Exit(), so do it here for symmetry as well. + const Hooks hooks = ms_hooks; + + for ( Hooks::const_iterator it = hooks.begin(); it != hooks.end(); ++it ) + { + const int rc = (*it)->Enter(dialog); + if ( rc != wxID_NONE ) + { + // Skip calling all the rest of the hooks if one of them preempts + // showing the dialog completely. + return rc; + } + } + + return wxID_NONE; +} + +/* static */ +void wxModalDialogHook::CallExit(wxDialog* dialog) +{ + // See comment in CallEnter() for the reasons for making a copy here. + const Hooks hooks = ms_hooks; + + for ( Hooks::const_iterator it = hooks.begin(); it != hooks.end(); ++it ) + { + (*it)->Exit(dialog); + } +} diff --git a/src/generic/filedlgg.cpp b/src/generic/filedlgg.cpp index cd2e4da73f..96ad05137f 100644 --- a/src/generic/filedlgg.cpp +++ b/src/generic/filedlgg.cpp @@ -49,7 +49,7 @@ #include "wx/filectrl.h" #include "wx/generic/filedlgg.h" #include "wx/debug.h" -#include "wx/testing.h" +#include "wx/modalhook.h" #if wxUSE_TOOLTIPS #include "wx/tooltip.h" @@ -309,7 +309,7 @@ wxBitmapButton* wxGenericFileDialog::AddBitmapButton( wxWindowID winId, int wxGenericFileDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); if (CreateExtraControl()) { diff --git a/src/generic/msgdlgg.cpp b/src/generic/msgdlgg.cpp index 8a16ab3d9c..4050fcaee8 100644 --- a/src/generic/msgdlgg.cpp +++ b/src/generic/msgdlgg.cpp @@ -39,7 +39,7 @@ #include "wx/msgdlg.h" #include "wx/artprov.h" #include "wx/textwrapper.h" -#include "wx/testing.h" +#include "wx/modalhook.h" #if wxUSE_STATLINE #include "wx/statline.h" @@ -267,7 +267,7 @@ void wxGenericMessageDialog::OnCancel(wxCommandEvent& WXUNUSED(event)) int wxGenericMessageDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); if ( !m_created ) { diff --git a/src/gtk/colordlg.cpp b/src/gtk/colordlg.cpp index b3a806d5b2..ff47456e79 100644 --- a/src/gtk/colordlg.cpp +++ b/src/gtk/colordlg.cpp @@ -19,7 +19,7 @@ #if wxUSE_COLOURDLG #include "wx/colordlg.h" -#include "wx/testing.h" +#include "wx/modalhook.h" #ifndef WX_PRECOMP #include "wx/intl.h" @@ -84,7 +84,7 @@ bool wxColourDialog::Create(wxWindow *parent, wxColourData *data) int wxColourDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); ColourDataToDialog(); diff --git a/src/gtk/dialog.cpp b/src/gtk/dialog.cpp index a79ee902e2..5d397cfe2f 100644 --- a/src/gtk/dialog.cpp +++ b/src/gtk/dialog.cpp @@ -19,7 +19,7 @@ #include "wx/evtloop.h" #include "wx/scopedptr.h" -#include "wx/testing.h" +#include "wx/modalhook.h" #include #include "wx/gtk/private/gtk2-compat.h" @@ -133,7 +133,7 @@ realize_hook(GSignalInvocationHint*, unsigned, const GValue* param_values, void* int wxDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); wxASSERT_MSG( !IsModal(), "ShowModal() can't be called twice" ); diff --git a/src/gtk/filedlg.cpp b/src/gtk/filedlg.cpp index aa00e8c421..ce8c9db6cf 100644 --- a/src/gtk/filedlg.cpp +++ b/src/gtk/filedlg.cpp @@ -29,7 +29,7 @@ #include "wx/filename.h" // wxFilename #include "wx/tokenzr.h" // wxStringTokenizer #include "wx/filefn.h" // ::wxGetCwd -#include "wx/testing.h" +#include "wx/modalhook.h" extern "C" { @@ -320,7 +320,7 @@ void wxFileDialog::GTKOnCancel() int wxFileDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); CreateExtraControl(); diff --git a/src/gtk/gnome/gprint.cpp b/src/gtk/gnome/gprint.cpp index 767c3c2f48..e4fe6daf81 100644 --- a/src/gtk/gnome/gprint.cpp +++ b/src/gtk/gnome/gprint.cpp @@ -34,7 +34,7 @@ #include "wx/dynlib.h" #include "wx/paper.h" #include "wx/dcprint.h" -#include "wx/testing.h" +#include "wx/modalhook.h" #include #include @@ -592,7 +592,7 @@ wxGnomePrintDialog::~wxGnomePrintDialog() int wxGnomePrintDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); int response = gtk_dialog_run (GTK_DIALOG (m_widget)); @@ -739,7 +739,7 @@ wxPageSetupDialogData& wxGnomePageSetupDialog::GetPageSetupDialogData() int wxGnomePageSetupDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); wxGnomePrintNativeData *native = (wxGnomePrintNativeData*) m_pageDialogData.GetPrintData().GetNativeData(); diff --git a/src/gtk/msgdlg.cpp b/src/gtk/msgdlg.cpp index 2c561dfca3..6d1104ae62 100644 --- a/src/gtk/msgdlg.cpp +++ b/src/gtk/msgdlg.cpp @@ -24,7 +24,7 @@ #include "wx/intl.h" #endif -#include "wx/testing.h" +#include "wx/modalhook.h" #include #include "wx/gtk/private.h" @@ -276,7 +276,7 @@ void wxMessageDialog::GTKCreateMsgDialog() int wxMessageDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); // break the mouse capture as it would interfere with modal dialog (see // wxDialog::ShowModal) diff --git a/src/gtk/print.cpp b/src/gtk/print.cpp index 6076ef552f..9b7e7a2ca0 100644 --- a/src/gtk/print.cpp +++ b/src/gtk/print.cpp @@ -34,7 +34,7 @@ #include "wx/dynlib.h" #include "wx/paper.h" #include "wx/scopeguard.h" -#include "wx/testing.h" +#include "wx/modalhook.h" #include @@ -624,7 +624,7 @@ wxGtkPrintDialog::~wxGtkPrintDialog() // This is called even if we actually don't want the dialog to appear. int wxGtkPrintDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); // We need to restore the settings given in the constructor. wxPrintData data = m_printDialogData.GetPrintData(); @@ -750,7 +750,7 @@ wxGtkPageSetupDialog::~wxGtkPageSetupDialog() int wxGtkPageSetupDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); // Get the config. m_pageDialogData.GetPrintData().ConvertToNative(); diff --git a/src/gtk1/dialog.cpp b/src/gtk1/dialog.cpp index 041d74275b..c760fe0de2 100644 --- a/src/gtk1/dialog.cpp +++ b/src/gtk1/dialog.cpp @@ -19,7 +19,7 @@ #endif // WX_PRECOMP #include "wx/evtloop.h" -#include "wx/testing.h" +#include "wx/modalhook.h" #include #include @@ -183,7 +183,7 @@ void wxDialog::SetModal( bool WXUNUSED(flag) ) int wxDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); if (IsModal()) { diff --git a/src/gtk1/filedlg.cpp b/src/gtk1/filedlg.cpp index 59f8824386..efebaebf2a 100644 --- a/src/gtk1/filedlg.cpp +++ b/src/gtk1/filedlg.cpp @@ -13,7 +13,7 @@ #if wxUSE_FILEDLG #include "wx/filedlg.h" -#include "wx/testing.h" +#include "wx/modalhook.h" //----------------------------------------------------------------------------- @@ -50,7 +50,7 @@ void wxFileDialog::OnFakeOk( wxCommandEvent &event ) int wxFileDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); return wxGenericFileDialog::ShowModal(); } diff --git a/src/motif/dialog.cpp b/src/motif/dialog.cpp index a63aca7d3f..25515e450a 100644 --- a/src/motif/dialog.cpp +++ b/src/motif/dialog.cpp @@ -21,7 +21,7 @@ #endif #include "wx/evtloop.h" -#include "wx/testing.h" +#include "wx/modalhook.h" #ifdef __VMS__ #pragma message disable nosimpint @@ -289,7 +289,7 @@ bool wxDialog::Show( bool show ) // Shows a dialog modally, returning a return code int wxDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); Show(true); diff --git a/src/motif/filedlg.cpp b/src/motif/filedlg.cpp index f1f2970e52..5cee8fdb59 100644 --- a/src/motif/filedlg.cpp +++ b/src/motif/filedlg.cpp @@ -23,7 +23,7 @@ #include "wx/tokenzr.h" #include "wx/stockitem.h" -#include "wx/testing.h" +#include "wx/modalhook.h" #ifdef __VMS__ #pragma message disable nosimpint @@ -152,7 +152,7 @@ static void wxChangeListBoxColours(wxWindow* WXUNUSED(win), Widget widget) int wxFileDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); wxBeginBusyCursor(); diff --git a/src/motif/msgdlg.cpp b/src/motif/msgdlg.cpp index 091d430d9d..c4b5576dd8 100644 --- a/src/motif/msgdlg.cpp +++ b/src/motif/msgdlg.cpp @@ -40,7 +40,7 @@ #include "wx/settings.h" #endif -#include "wx/testing.h" +#include "wx/modalhook.h" #include "wx/motif/private.h" // ---------------------------------------------------------------------------- @@ -106,7 +106,7 @@ extern "C" int wxMessageDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); const long style = GetMessageDialogStyle(); diff --git a/src/msw/colordlg.cpp b/src/msw/colordlg.cpp index 688ca17380..8be79f3bc8 100644 --- a/src/msw/colordlg.cpp +++ b/src/msw/colordlg.cpp @@ -27,7 +27,7 @@ #if wxUSE_COLOURDLG && !(defined(__SMARTPHONE__) && defined(__WXWINCE__)) #include "wx/colordlg.h" -#include "wx/testing.h" +#include "wx/modalhook.h" #ifndef WX_PRECOMP #include "wx/msw/wrapcdlg.h" @@ -115,7 +115,7 @@ bool wxColourDialog::Create(wxWindow *parent, wxColourData *data) int wxColourDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); // initialize the struct used by Windows CHOOSECOLOR chooseColorStruct; diff --git a/src/msw/dialog.cpp b/src/msw/dialog.cpp index ccab43d45e..b8b73d2525 100644 --- a/src/msw/dialog.cpp +++ b/src/msw/dialog.cpp @@ -25,7 +25,7 @@ #endif #include "wx/dialog.h" -#include "wx/testing.h" +#include "wx/modalhook.h" #ifndef WX_PRECOMP #include "wx/msw/wrapcdlg.h" @@ -198,7 +198,7 @@ bool wxDialog::Show(bool show) // show dialog modally int wxDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); wxASSERT_MSG( !IsModal(), wxT("ShowModal() can't be called twice") ); diff --git a/src/msw/dirdlg.cpp b/src/msw/dirdlg.cpp index 1760eb8d91..314299db91 100644 --- a/src/msw/dirdlg.cpp +++ b/src/msw/dirdlg.cpp @@ -30,7 +30,7 @@ (defined(__HANDHELDPC__) && (_WIN32_WCE >= 500))) #include "wx/dirdlg.h" -#include "wx/testing.h" +#include "wx/modalhook.h" #ifndef WX_PRECOMP #include "wx/utils.h" @@ -221,7 +221,7 @@ void wxDirDialog::SetPath(const wxString& path) int wxDirDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); wxWindow* const parent = GetParent(); WXHWND hWndParent = parent ? GetHwndOf(parent) : NULL; diff --git a/src/msw/filedlg.cpp b/src/msw/filedlg.cpp index 27dfd888e5..e1f5287021 100644 --- a/src/msw/filedlg.cpp +++ b/src/msw/filedlg.cpp @@ -47,7 +47,7 @@ #include "wx/filename.h" #include "wx/scopeguard.h" #include "wx/tokenzr.h" -#include "wx/testing.h" +#include "wx/modalhook.h" // ---------------------------------------------------------------------------- // constants @@ -450,7 +450,7 @@ void wxFileDialog::MSWOnInitDialogHook(WXHWND hwnd) int wxFileDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); HWND hWnd = 0; if (m_parent) hWnd = (HWND) m_parent->GetHWND(); diff --git a/src/msw/fontdlg.cpp b/src/msw/fontdlg.cpp index 848dd4f514..f800b51c11 100644 --- a/src/msw/fontdlg.cpp +++ b/src/msw/fontdlg.cpp @@ -27,7 +27,7 @@ #if wxUSE_FONTDLG #include "wx/fontdlg.h" -#include "wx/testing.h" +#include "wx/modalhook.h" #ifndef WX_PRECOMP #include "wx/msw/wrapcdlg.h" @@ -56,7 +56,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxFontDialog, wxDialog) int wxFontDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); // It should be OK to always use GDI simulations DWORD flags = CF_SCREENFONTS /* | CF_NOSIMULATIONS */ ; diff --git a/src/msw/msgdlg.cpp b/src/msw/msgdlg.cpp index e9b25735a9..56c2885867 100644 --- a/src/msw/msgdlg.cpp +++ b/src/msw/msgdlg.cpp @@ -42,7 +42,7 @@ #include "wx/msw/private/button.h" #include "wx/msw/private/metrics.h" #include "wx/msw/private/msgdlg.h" -#include "wx/testing.h" +#include "wx/modalhook.h" #if wxUSE_MSGBOX_HOOK #include "wx/fontutil.h" @@ -592,7 +592,7 @@ int wxMessageDialog::ShowMessageBox() int wxMessageDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); #ifdef wxHAS_MSW_TASKDIALOG if ( HasNativeTaskDialog() ) diff --git a/src/msw/printdlg.cpp b/src/msw/printdlg.cpp index a3da80615a..e91ddf2e31 100644 --- a/src/msw/printdlg.cpp +++ b/src/msw/printdlg.cpp @@ -39,7 +39,7 @@ #include "wx/msw/printdlg.h" #include "wx/msw/dcprint.h" #include "wx/paper.h" -#include "wx/testing.h" +#include "wx/modalhook.h" #include @@ -739,7 +739,7 @@ wxWindowsPrintDialog::~wxWindowsPrintDialog() int wxWindowsPrintDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); ConvertToNative( m_printDialogData ); @@ -960,7 +960,7 @@ wxWindowsPageSetupDialog::~wxWindowsPageSetupDialog() int wxWindowsPageSetupDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); ConvertToNative( m_pageSetupData ); diff --git a/src/msw/richmsgdlg.cpp b/src/msw/richmsgdlg.cpp index 67a827e21b..58bb7cf68d 100644 --- a/src/msw/richmsgdlg.cpp +++ b/src/msw/richmsgdlg.cpp @@ -18,7 +18,7 @@ #if wxUSE_RICHMSGDLG #include "wx/richmsgdlg.h" -#include "wx/testing.h" +#include "wx/modalhook.h" #ifndef WX_PRECOMP #include "wx/msw/private.h" @@ -34,7 +34,7 @@ int wxRichMessageDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); #ifdef wxHAS_MSW_TASKDIALOG using namespace wxMSWMessageDialog; diff --git a/src/msw/wince/filedlgwce.cpp b/src/msw/wince/filedlgwce.cpp index 5a7ff8a7a9..66abfd1629 100644 --- a/src/msw/wince/filedlgwce.cpp +++ b/src/msw/wince/filedlgwce.cpp @@ -47,7 +47,7 @@ #include #include "wx/filename.h" -#include "wx/testing.h" +#include "wx/modalhook.h" // ============================================================================ // implementation @@ -113,7 +113,7 @@ void wxFileDialog::SetPath(const wxString& path) int wxFileDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); wxWindow* parentWindow = GetParent(); if (!parentWindow) diff --git a/src/os2/dialog.cpp b/src/os2/dialog.cpp index 7b1b0d0ce1..c6520d9698 100644 --- a/src/os2/dialog.cpp +++ b/src/os2/dialog.cpp @@ -26,7 +26,7 @@ #include "wx/os2/private.h" #include "wx/evtloop.h" #include "wx/scopedptr.h" -#include "wx/testing.h" +#include "wx/modalhook.h" #define wxDIALOG_DEFAULT_X 300 #define wxDIALOG_DEFAULT_Y 300 @@ -220,7 +220,7 @@ bool wxDialog::Show( bool bShow ) // int wxDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); wxASSERT_MSG( !IsModal(), wxT("wxDialog::ShowModal() reentered?") ); diff --git a/src/os2/dirdlg.cpp b/src/os2/dirdlg.cpp index 5ae4e61dd6..eef18aa525 100644 --- a/src/os2/dirdlg.cpp +++ b/src/os2/dirdlg.cpp @@ -13,7 +13,7 @@ #include "wx/wxprec.h" #include "wx/dirdlg.h" -#include "wx/testing.h" +#include "wx/modalhook.h" #ifndef WX_PRECOMP #include @@ -43,7 +43,7 @@ wxDirDialog::wxDirDialog(wxWindow *parent, const wxString& message, int wxDirDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); // TODO return wxID_CANCEL; diff --git a/src/os2/filedlg.cpp b/src/os2/filedlg.cpp index 65c8c59df4..d6d93809f3 100644 --- a/src/os2/filedlg.cpp +++ b/src/os2/filedlg.cpp @@ -39,7 +39,7 @@ #include #include "wx/tokenzr.h" -#include "wx/testing.h" +#include "wx/modalhook.h" #define wxMAXPATH 1024 #define wxMAXFILE 1024 @@ -105,7 +105,7 @@ void wxFileDialog::GetPaths ( int wxFileDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); wxString sTheFilter; wxString sFilterBuffer; diff --git a/src/os2/fontdlg.cpp b/src/os2/fontdlg.cpp index fe9cc27b15..a94cc91247 100644 --- a/src/os2/fontdlg.cpp +++ b/src/os2/fontdlg.cpp @@ -23,7 +23,7 @@ #endif #include "wx/fontutil.h" -#include "wx/testing.h" +#include "wx/modalhook.h" #define INCL_PM #include @@ -37,7 +37,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxFontDialog, wxDialog) int wxFontDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); FONTDLG vFontDlg; char zCurrentFont[FACESIZE]; diff --git a/src/os2/msgdlg.cpp b/src/os2/msgdlg.cpp index 81dc82639f..0fb64437af 100644 --- a/src/os2/msgdlg.cpp +++ b/src/os2/msgdlg.cpp @@ -22,7 +22,7 @@ #include "wx/math.h" #endif -#include "wx/testing.h" +#include "wx/modalhook.h" #include "wx/os2/private.h" #include @@ -35,7 +35,7 @@ IMPLEMENT_CLASS(wxMessageDialog, wxDialog) int wxMessageDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); HWND hWnd = 0; ULONG ulStyle = MB_OK; diff --git a/src/osx/carbon/colordlg.cpp b/src/osx/carbon/colordlg.cpp index 18c4af745a..c5a7b1c47f 100644 --- a/src/osx/carbon/colordlg.cpp +++ b/src/osx/carbon/colordlg.cpp @@ -14,7 +14,7 @@ #include "wx/colordlg.h" #include "wx/fontdlg.h" -#include "wx/testing.h" +#include "wx/modalhook.h" #if !USE_NATIVE_FONT_DIALOG_FOR_MACOSX @@ -48,7 +48,7 @@ bool wxColourDialog::Create(wxWindow *parent, wxColourData *data) int wxColourDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); RGBColor currentColor ; diff --git a/src/osx/carbon/colordlgosx.mm b/src/osx/carbon/colordlgosx.mm index 4f12861d3d..278f9ec9cd 100644 --- a/src/osx/carbon/colordlgosx.mm +++ b/src/osx/carbon/colordlgosx.mm @@ -22,7 +22,7 @@ #include "wx/colordlg.h" #include "wx/fontdlg.h" -#include "wx/testing.h" +#include "wx/modalhook.h" // ============================================================================ // implementation @@ -124,7 +124,7 @@ bool wxColourDialog::Create(wxWindow *parent, wxColourData *data) } int wxColourDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); //Start the pool. Required for carbon interaction //(For those curious, the only thing that happens diff --git a/src/osx/carbon/dirdlg.cpp b/src/osx/carbon/dirdlg.cpp index 4f98aa02da..9ff1c075e7 100644 --- a/src/osx/carbon/dirdlg.cpp +++ b/src/osx/carbon/dirdlg.cpp @@ -21,7 +21,7 @@ #endif // WX_PRECOMP #include "wx/filename.h" -#include "wx/testing.h" +#include "wx/modalhook.h" #include "wx/osx/private.h" @@ -73,7 +73,7 @@ wxDirDialog::wxDirDialog(wxWindow *parent, int wxDirDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); NavDialogRef dialog = NULL; NavDialogCreationOptions options; diff --git a/src/osx/carbon/filedlg.cpp b/src/osx/carbon/filedlg.cpp index d04dfb1923..b0a4e7b51b 100644 --- a/src/osx/carbon/filedlg.cpp +++ b/src/osx/carbon/filedlg.cpp @@ -26,7 +26,7 @@ #include "wx/filename.h" #include "wx/osx/private.h" -#include "wx/testing.h" +#include "wx/modalhook.h" #ifndef __DARWIN__ #include @@ -477,7 +477,7 @@ void wxFileDialog::SetupExtraControls(WXWindow nativeWindow) int wxFileDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); m_paths.Empty(); m_fileNames.Empty(); diff --git a/src/osx/carbon/fontdlg.cpp b/src/osx/carbon/fontdlg.cpp index 2aa22e63ec..b1ae442c78 100644 --- a/src/osx/carbon/fontdlg.cpp +++ b/src/osx/carbon/fontdlg.cpp @@ -42,7 +42,7 @@ #include "wx/fontdlg.h" #include "wx/fontutil.h" -#include "wx/testing.h" +#include "wx/modalhook.h" #if wxOSX_USE_EXPERIMENTAL_FONTDIALOG @@ -230,7 +230,7 @@ bool wxFontDialog::Create(wxWindow *parent, const wxFontData& data) int wxFontDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); #if wxOSX_USE_CARBON diff --git a/src/osx/carbon/fontdlgosx.mm b/src/osx/carbon/fontdlgosx.mm index b1389b39bc..0ac8bd7d55 100644 --- a/src/osx/carbon/fontdlgosx.mm +++ b/src/osx/carbon/fontdlgosx.mm @@ -28,7 +28,7 @@ #endif #include "wx/fontutil.h" -#include "wx/testing.h" +#include "wx/modalhook.h" // ============================================================================ // implementation @@ -435,7 +435,7 @@ bool wxFontDialog::Create(wxWindow *parent) int wxFontDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); //Start the pool. Required for carbon interaction //(For those curious, the only thing that happens diff --git a/src/osx/carbon/msgdlg.cpp b/src/osx/carbon/msgdlg.cpp index 808fbcc385..6ce68371d1 100644 --- a/src/osx/carbon/msgdlg.cpp +++ b/src/osx/carbon/msgdlg.cpp @@ -19,7 +19,7 @@ #endif #include "wx/thread.h" -#include "wx/testing.h" +#include "wx/modalhook.h" #include "wx/osx/uma.h" @@ -37,7 +37,7 @@ wxMessageDialog::wxMessageDialog(wxWindow *parent, int wxMessageDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); int resultbutton = wxID_CANCEL; diff --git a/src/osx/carbon/printdlg.cpp b/src/osx/carbon/printdlg.cpp index 2a9c234ec7..0729a4770a 100644 --- a/src/osx/carbon/printdlg.cpp +++ b/src/osx/carbon/printdlg.cpp @@ -28,11 +28,11 @@ #include "wx/osx/private/print.h" #include "wx/osx/private.h" #include "wx/statline.h" -#include "wx/testing.h" +#include "wx/modalhook.h" int wxMacPrintDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); m_printDialogData.GetPrintData().ConvertToNative(); ((wxOSXPrintData*)m_printDialogData.GetPrintData().GetNativeData())->TransferFrom( &m_printDialogData ); @@ -77,7 +77,7 @@ int wxMacPrintDialog::ShowModal() int wxMacPageSetupDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); m_pageSetupData.GetPrintData().ConvertToNative(); wxOSXPrintData* nativeData = (wxOSXPrintData*)m_pageSetupData.GetPrintData().GetNativeData(); diff --git a/src/osx/cocoa/dirdlg.mm b/src/osx/cocoa/dirdlg.mm index ad757e2adc..02f92f94f8 100644 --- a/src/osx/cocoa/dirdlg.mm +++ b/src/osx/cocoa/dirdlg.mm @@ -32,7 +32,7 @@ #include "wx/filename.h" #include "wx/evtloop.h" -#include "wx/testing.h" +#include "wx/modalhook.h" #include "wx/osx/private.h" @@ -95,7 +95,7 @@ void wxDirDialog::ShowWindowModal() int wxDirDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); wxCFEventLoopPauseIdleEvents pause; diff --git a/src/osx/cocoa/filedlg.mm b/src/osx/cocoa/filedlg.mm index 1d162848ea..49e8680f06 100644 --- a/src/osx/cocoa/filedlg.mm +++ b/src/osx/cocoa/filedlg.mm @@ -38,7 +38,7 @@ #include "wx/osx/private.h" #include "wx/sysopt.h" -#include "wx/testing.h" +#include "wx/modalhook.h" #include @@ -501,7 +501,7 @@ void wxFileDialog::SetupExtraControls(WXWindow nativeWindow) int wxFileDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); wxCFEventLoopPauseIdleEvents pause; diff --git a/src/osx/cocoa/msgdlg.mm b/src/osx/cocoa/msgdlg.mm index 8218fc7e87..40ed938450 100644 --- a/src/osx/cocoa/msgdlg.mm +++ b/src/osx/cocoa/msgdlg.mm @@ -21,7 +21,7 @@ #include "wx/control.h" #include "wx/thread.h" #include "wx/evtloop.h" -#include "wx/testing.h" +#include "wx/modalhook.h" #include "wx/osx/private.h" @@ -63,7 +63,7 @@ wxMessageDialog::~wxMessageDialog() int wxMessageDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); wxCFEventLoopPauseIdleEvents pause; diff --git a/src/osx/cocoa/printdlg.mm b/src/osx/cocoa/printdlg.mm index ef9268b377..f453778334 100644 --- a/src/osx/cocoa/printdlg.mm +++ b/src/osx/cocoa/printdlg.mm @@ -14,7 +14,7 @@ #if wxUSE_PRINTING_ARCHITECTURE #include "wx/printdlg.h" -#include "wx/testing.h" +#include "wx/modalhook.h" #ifndef WX_PRECOMP #include "wx/object.h" @@ -60,7 +60,7 @@ void wxOSXCocoaPrintData::UpdateToPMState() int wxMacPrintDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); m_printDialogData.GetPrintData().ConvertToNative(); @@ -85,7 +85,7 @@ int wxMacPrintDialog::ShowModal() int wxMacPageSetupDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); m_pageSetupData.GetPrintData().ConvertToNative(); ((wxOSXCocoaPrintData*)m_pageSetupData.GetPrintData().GetNativeData())->TransferFrom( &m_pageSetupData ); diff --git a/src/osx/dialog_osx.cpp b/src/osx/dialog_osx.cpp index 8bb543ff75..cb127f323b 100644 --- a/src/osx/dialog_osx.cpp +++ b/src/osx/dialog_osx.cpp @@ -13,7 +13,7 @@ #include "wx/dialog.h" #include "wx/evtloop.h" -#include "wx/testing.h" +#include "wx/modalhook.h" #ifndef WX_PRECOMP #include "wx/app.h" @@ -138,7 +138,7 @@ bool wxDialog::Show(bool show) // Replacement for Show(true) for modal dialogs - returns return code int wxDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); m_modality = wxDIALOG_MODALITY_APP_MODAL; diff --git a/src/osx/iphone/msgdlg.mm b/src/osx/iphone/msgdlg.mm index 9d11768149..c6b4021a88 100644 --- a/src/osx/iphone/msgdlg.mm +++ b/src/osx/iphone/msgdlg.mm @@ -20,7 +20,7 @@ #include "wx/thread.h" #include "wx/osx/private.h" -#include "wx/testing.h" +#include "wx/modalhook.h" IMPLEMENT_CLASS(wxMessageDialog, wxDialog) @@ -37,7 +37,7 @@ wxMessageDialog::wxMessageDialog(wxWindow *parent, int wxMessageDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); int resultbutton = wxID_CANCEL; diff --git a/src/univ/dialog.cpp b/src/univ/dialog.cpp index bb1c941125..4c9609f097 100644 --- a/src/univ/dialog.cpp +++ b/src/univ/dialog.cpp @@ -29,7 +29,7 @@ #endif #include "wx/evtloop.h" -#include "wx/testing.h" +#include "wx/modalhook.h" //----------------------------------------------------------------------------- // wxDialog @@ -166,7 +166,7 @@ bool wxDialog::IsModal() const int wxDialog::ShowModal() { - WX_TESTING_SHOW_MODAL_HOOK(); + WX_HOOK_MODAL_DIALOG(); if ( IsModal() ) {