Skip to content

Commit 1a4f949

Browse files
committed
[OSX] Close button to hide and dock icon to show
1 parent 509a782 commit 1a4f949

File tree

1 file changed

+26
-8
lines changed

1 file changed

+26
-8
lines changed

ldoce5viewer/qtgui/main.py

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,13 @@
1313
pass
1414
import webbrowser
1515

16+
try:
17+
import objc
18+
import Cocoa
19+
import Foundation
20+
except ImportError:
21+
objc = None
22+
1623
from PyQt4.QtCore import *
1724
from PyQt4.QtGui import *
1825
from PyQt4.QtNetwork import *
@@ -73,7 +80,7 @@ class MainWindow(QMainWindow):
7380
def __init__(self):
7481
super(MainWindow, self).__init__()
7582

76-
#self._okToClose = False
83+
self._okToClose = False
7784
#systray = QSystemTrayIcon(self)
7885
#systray.setIcon(QIcon(":/icons/icon.png"))
7986
#systray.show()
@@ -94,7 +101,6 @@ def __init__(self):
94101
# Lazy-loaded objects
95102
self._lazy = {}
96103

97-
98104
# Setup
99105
self._setup_ui()
100106
self._restore_from_config()
@@ -138,25 +144,37 @@ def _makeSingleShotTimer(slot):
138144
# Show
139145
self.show()
140146

147+
# Click on the dock icon (OS X)
148+
if objc:
149+
def applicationShouldHandleReopen_hasVisibleWindows_(s, a, f):
150+
self.show()
151+
152+
objc.classAddMethods(
153+
Cocoa.NSApplication.sharedApplication().delegate().class__(),
154+
[applicationShouldHandleReopen_hasVisibleWindows_])
155+
141156

142157
def close(self):
143-
#self._okToClose = True
158+
self._okToClose = True
144159
super(MainWindow, self).close()
145160

146161

147162
def closeEvent(self, event):
148-
lazy = self._lazy
149-
#if self._okToClose:
163+
if not objc:
164+
self._okToClose = True
165+
166+
lazy = self._lazy
167+
if self._okToClose:
150168
if _LAZY_ADVSEARCH_WINDOW in lazy:
151169
lazy[_LAZY_ADVSEARCH_WINDOW].close()
152170
self._save_to_configfile()
153171
self._unload_searchers()
154172
if _LAZY_SOUNDPLAYER in lazy:
155173
lazy[_LAZY_SOUNDPLAYER].close()
156174
super(MainWindow, self).closeEvent(event)
157-
#else:
158-
# self.hide()
159-
# event.ignore()
175+
else:
176+
self.hide()
177+
event.ignore()
160178

161179

162180
def resizeEvent(self, event):

0 commit comments

Comments
 (0)