107 _imageSearchEngine = None |
107 _imageSearchEngine = None |
108 _autoScroller = None |
108 _autoScroller = None |
109 _tabManager = None |
109 _tabManager = None |
110 _sessionManager = None |
110 _sessionManager = None |
111 |
111 |
|
112 _performingShutdown = False |
|
113 |
112 def __init__(self, home, path, parent, name, fromEric=False, |
114 def __init__(self, home, path, parent, name, fromEric=False, |
113 initShortcutsOnly=False, searchWord=None, |
115 initShortcutsOnly=False, searchWord=None, |
114 private=False, qthelp=False, settingsDir=""): |
116 private=False, qthelp=False, settingsDir=""): |
115 """ |
117 """ |
116 Constructor |
118 Constructor |
408 self.__virusTotal.urlScanReport.connect( |
410 self.__virusTotal.urlScanReport.connect( |
409 self.__virusTotalUrlScanReport) |
411 self.__virusTotalUrlScanReport) |
410 self.__virusTotal.fileScanReport.connect( |
412 self.__virusTotal.fileScanReport.connect( |
411 self.__virusTotalFileScanReport) |
413 self.__virusTotalFileScanReport) |
412 |
414 |
413 self.__shutdownCalled = False |
|
414 |
|
415 self.flashCookieManager() |
415 self.flashCookieManager() |
416 |
416 |
417 if WebBrowserWindow._useQtHelp: |
417 if WebBrowserWindow._useQtHelp: |
418 QTimer.singleShot(0, self.__lookForNewDocumentation) |
418 QTimer.singleShot(0, self.__lookForNewDocumentation) |
419 if self.__searchWord is not None: |
419 if self.__searchWord is not None: |
887 )) |
887 )) |
888 if not self.__initShortcutsOnly: |
888 if not self.__initShortcutsOnly: |
889 if self.__fromEric: |
889 if self.__fromEric: |
890 self.exitAct.triggered.connect(self.close) |
890 self.exitAct.triggered.connect(self.close) |
891 else: |
891 else: |
892 self.exitAct.triggered.connect(self.__closeAllWindows) |
892 self.exitAct.triggered.connect(self.shutdown) |
893 self.__actions.append(self.exitAct) |
893 self.__actions.append(self.exitAct) |
894 |
894 |
895 self.backAct = E5Action( |
895 self.backAct = E5Action( |
896 self.tr('Backward'), |
896 self.tr('Backward'), |
897 UI.PixmapCache.getIcon("back.png"), |
897 UI.PixmapCache.getIcon("back.png"), |
2686 It opens the search dialog in order to perform the various |
2686 It opens the search dialog in order to perform the various |
2687 search actions and to collect the various search info. |
2687 search actions and to collect the various search info. |
2688 """ |
2688 """ |
2689 self.__searchWidget.showFind() |
2689 self.__searchWidget.showFind() |
2690 |
2690 |
2691 def __closeAllWindows(self): |
|
2692 """ |
|
2693 Private slot to close all windows. |
|
2694 """ |
|
2695 for browser in WebBrowserWindow.BrowserWindows: |
|
2696 if browser != self: |
|
2697 browser.close() |
|
2698 self.close() |
|
2699 |
|
2700 def closeEvent(self, e): |
2691 def closeEvent(self, e): |
2701 """ |
2692 """ |
2702 Protected event handler for the close event. |
2693 Protected event handler for the close event. |
2703 |
2694 |
2704 @param e the close event (QCloseEvent) |
2695 @param e the close event (QCloseEvent) |
2705 <br />This event is simply accepted after the history has been |
2696 <br />This event is simply accepted after the history has been |
2706 saved and all window references have been deleted. |
2697 saved and all window references have been deleted. |
2707 """ |
2698 """ |
2708 if not self.__shutdownCalled: |
2699 res = self.__shutdownWindow() |
2709 res = self.shutdown() |
2700 |
2710 |
2701 if res: |
2711 if res: |
2702 e.accept() |
2712 e.accept() |
2703 self.webBrowserWindowClosed.emit(self) |
2713 self.webBrowserWindowClosed.emit(self) |
|
2714 else: |
|
2715 e.ignore() |
|
2716 else: |
2704 else: |
2717 e.accept() |
2705 e.ignore() |
2718 |
2706 |
2719 def shutdown(self): |
2707 def __shutdownWindow(self): |
2720 """ |
2708 """ |
2721 Public method to shut down the web browser. |
2709 Private method to shut down a web browser window. |
2722 |
2710 |
2723 @return flag indicating successful shutdown (boolean) |
2711 @return flag indicating successful shutdown (boolean) |
2724 """ |
2712 """ |
2725 if not self.__tabWidget.shallShutDown(): |
2713 if not WebBrowserWindow._performingShutdown: |
2726 return False |
2714 if not self.__tabWidget.shallShutDown(): |
2727 |
2715 return False |
2728 if not self.downloadManager().allowQuit(): |
|
2729 return False |
|
2730 |
|
2731 self.downloadManager().shutdown() |
|
2732 |
|
2733 self.cookieJar().close() |
|
2734 |
2716 |
2735 self.__bookmarksToolBar.setModel(None) |
2717 self.__bookmarksToolBar.setModel(None) |
2736 self.bookmarksManager().close() |
|
2737 |
|
2738 self.historyManager().close() |
|
2739 |
|
2740 self.passwordManager().close() |
|
2741 |
|
2742 self.adBlockManager().close() |
|
2743 |
|
2744 self.userAgentsManager().close() |
|
2745 |
|
2746 self.speedDial().close() |
|
2747 |
|
2748 self.syncManager().close() |
|
2749 |
|
2750 ZoomManager.instance().close() |
|
2751 |
|
2752 WebIconProvider.instance().close() |
|
2753 |
2718 |
2754 self.__virusTotal.close() |
2719 self.__virusTotal.close() |
2755 |
2720 |
2756 self.flashCookieManager().shutdown() |
|
2757 |
|
2758 self.__navigationBar.searchEdit().openSearchManager().close() |
2721 self.__navigationBar.searchEdit().openSearchManager().close() |
2759 |
|
2760 if len(WebBrowserWindow.BrowserWindows) == 1: |
|
2761 # it is the last window |
|
2762 self.tabManager().close() |
|
2763 |
2722 |
2764 if WebBrowserWindow._useQtHelp: |
2723 if WebBrowserWindow._useQtHelp: |
2765 self.__searchEngine.cancelIndexing() |
2724 self.__searchEngine.cancelIndexing() |
2766 self.__searchEngine.cancelSearching() |
2725 self.__searchEngine.cancelSearching() |
2767 |
2726 |
2787 del WebBrowserWindow.BrowserWindows[ |
2746 del WebBrowserWindow.BrowserWindows[ |
2788 WebBrowserWindow.BrowserWindows.index(self)] |
2747 WebBrowserWindow.BrowserWindows.index(self)] |
2789 except ValueError: |
2748 except ValueError: |
2790 pass |
2749 pass |
2791 |
2750 |
2792 self.networkManager().shutdown() |
|
2793 |
|
2794 if not self.__fromEric: |
2751 if not self.__fromEric: |
2795 Preferences.syncPreferences() |
2752 Preferences.syncPreferences() |
2796 |
2753 if not WebBrowserWindow._performingShutdown and \ |
2797 self.__shutdownCalled = True |
2754 len(WebBrowserWindow.BrowserWindows) == 0: |
|
2755 # shut down the browser in case the last window was |
|
2756 # simply closed |
|
2757 self.shutdown() |
|
2758 |
|
2759 return True |
|
2760 |
|
2761 def __shallShutDown(self): |
|
2762 """ |
|
2763 Private method to check, if the application should be shut down. |
|
2764 |
|
2765 @return flag indicating a shut down |
|
2766 @rtype bool |
|
2767 """ |
|
2768 if Preferences.getWebBrowser("WarnOnMultipleClose"): |
|
2769 windowCount = len(WebBrowserWindow.BrowserWindows) |
|
2770 tabCount = 0 |
|
2771 for browser in WebBrowserWindow.BrowserWindows: |
|
2772 tabCount += browser.tabWidget().count() |
|
2773 |
|
2774 if windowCount > 1 or tabCount > 1: |
|
2775 mb = E5MessageBox.E5MessageBox( |
|
2776 E5MessageBox.Information, |
|
2777 self.tr("Are you sure you want to close the web browser?"), |
|
2778 self.tr("""Are you sure you want to close the web""" |
|
2779 """ browser?\n""" |
|
2780 """You have {0} windows with {1} tabs open.""") |
|
2781 .format(windowCount, tabCount), |
|
2782 modal=True, |
|
2783 parent=self) |
|
2784 if self.fromEric: |
|
2785 quitButton = mb.addButton( |
|
2786 self.tr("&Close"), E5MessageBox.AcceptRole) |
|
2787 quitButton.setIcon(UI.PixmapCache.getIcon("close.png")) |
|
2788 else: |
|
2789 quitButton = mb.addButton( |
|
2790 self.tr("&Quit"), E5MessageBox.AcceptRole) |
|
2791 quitButton.setIcon(UI.PixmapCache.getIcon("exit.png")) |
|
2792 mb.addButton(E5MessageBox.Cancel) |
|
2793 mb.exec_() |
|
2794 return mb.clickedButton() == quitButton |
|
2795 |
|
2796 return True |
|
2797 |
|
2798 def shutdown(self): |
|
2799 """ |
|
2800 Public method to shut down the web browser. |
|
2801 |
|
2802 @return flag indicating successful shutdown (boolean) |
|
2803 """ |
|
2804 if not self.__shallShutDown(): |
|
2805 return False |
|
2806 |
|
2807 if not self.downloadManager().allowQuit(): |
|
2808 return False |
|
2809 |
|
2810 WebBrowserWindow._performingShutdown = True |
|
2811 |
|
2812 self.sessionManager().shutdown() |
|
2813 |
|
2814 self.downloadManager().shutdown() |
|
2815 |
|
2816 self.cookieJar().close() |
|
2817 |
|
2818 self.bookmarksManager().close() |
|
2819 |
|
2820 self.historyManager().close() |
|
2821 |
|
2822 self.passwordManager().close() |
|
2823 |
|
2824 self.adBlockManager().close() |
|
2825 |
|
2826 self.userAgentsManager().close() |
|
2827 |
|
2828 self.speedDial().close() |
|
2829 |
|
2830 self.syncManager().close() |
|
2831 |
|
2832 ZoomManager.instance().close() |
|
2833 |
|
2834 WebIconProvider.instance().close() |
|
2835 |
|
2836 self.flashCookieManager().shutdown() |
|
2837 |
|
2838 if len(WebBrowserWindow.BrowserWindows) == 1: |
|
2839 # it is the last window |
|
2840 self.tabManager().close() |
|
2841 |
|
2842 self.networkManager().shutdown() |
|
2843 |
|
2844 |
|
2845 for browser in WebBrowserWindow.BrowserWindows: |
|
2846 if browser != self: |
|
2847 browser.close() |
|
2848 self.close() |
|
2849 |
2798 return True |
2850 return True |
2799 |
2851 |
2800 def __backward(self): |
2852 def __backward(self): |
2801 """ |
2853 """ |
2802 Private slot called to handle the backward action. |
2854 Private slot called to handle the backward action. |