From 39746ba269087b30d753b9422fcd88e0bd3f56de Mon Sep 17 00:00:00 2001 From: Johnny Baird Date: Mon, 13 Mar 2023 18:16:18 -0400 Subject: [PATCH] Remove unnecessary options. Bump to version 1.5. --- Swift Quit.xcodeproj/project.pbxproj | 6 +- .../UserInterfaceState.xcuserstate | Bin 62866 -> 61493 bytes Swift Quit/AppDelegate.swift | 44 ++--- Swift Quit/Base.lproj/Main.storyboard | 160 ++++++------------ Swift Quit/SwiftQuit.swift | 112 +----------- Swift Quit/ViewController.swift | 57 ------- 6 files changed, 89 insertions(+), 290 deletions(-) diff --git a/Swift Quit.xcodeproj/project.pbxproj b/Swift Quit.xcodeproj/project.pbxproj index 8cea0de..a3cc077 100644 --- a/Swift Quit.xcodeproj/project.pbxproj +++ b/Swift Quit.xcodeproj/project.pbxproj @@ -327,6 +327,7 @@ ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = "Swift-Quit-Info.plist"; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.productivity"; INFOPLIST_KEY_NSHumanReadableCopyright = ""; INFOPLIST_KEY_NSMainStoryboardFile = Main; INFOPLIST_KEY_NSPrincipalClass = NSApplication; @@ -335,7 +336,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 11.0; - MARKETING_VERSION = 1.4; + MARKETING_VERSION = 1.5; PRODUCT_BUNDLE_IDENTIFIER = "onebadidea.Swift-Quit"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; @@ -357,6 +358,7 @@ ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = "Swift-Quit-Info.plist"; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.productivity"; INFOPLIST_KEY_NSHumanReadableCopyright = ""; INFOPLIST_KEY_NSMainStoryboardFile = Main; INFOPLIST_KEY_NSPrincipalClass = NSApplication; @@ -365,7 +367,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 11.0; - MARKETING_VERSION = 1.4; + MARKETING_VERSION = 1.5; PRODUCT_BUNDLE_IDENTIFIER = "onebadidea.Swift-Quit"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; diff --git a/Swift Quit.xcodeproj/project.xcworkspace/xcuserdata/johnny.xcuserdatad/UserInterfaceState.xcuserstate b/Swift Quit.xcodeproj/project.xcworkspace/xcuserdata/johnny.xcuserdatad/UserInterfaceState.xcuserstate index f0037be2af5b7b77ab683dc28d31933279f27af9..d3a94c8f9d7160687a766604703f788420373ed7 100644 GIT binary patch delta 29979 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 zΝ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 delta 30514 zcmb4r1$-69`u5pbJ?p!HIK+r2#NAy8?ixY}PJ#rdWCt$}3lv%kBzSNrEfjYvPH~D= zp-?DLN{f86=j1?o>Ak=I2kc4Mo!Nb!d3D~IJ=<>Ma~|Ncim?5gyP2_yrC23ag)PID zW2><>*g9-Iwh7yeZNau=O1Jb_=_W{e}IF zy~18&Z?Lz(1TX*q4hTR3GZ26XBv1!50N%g{_yRxR4+20Shyalw3M7C=pe<+zx`6H# zpak>={Xr=h1O|fYo$xCAbPE8r@)2JV7;;Ct``_zgS;Pr&csDR=?i;wBu!0nXwa&f@|u;u0?7 z3SJklk5_o(fp`cWiihD*cpM&&C*vu22HqL(f*0al@glq%UW|9gOYk0ePrMi24E)w4ow}{)s z9pWzWBk_p%jd(%)NxURp6K_b7v?m=%N79w_CWFXuGMbDb6UY=YmCPiw$UL%$>_!%o z-N_QN2icSCMfN89kbTKAaws{B98QiQE67RYWb$Kj3OSY3$+_e_av`~hTv0);Be#%W zl3$a1$i3u2@;Z5gyh(mX-Xd?4cgVZsJ@R|<2l5y4G5H7if_zJvD26gqGUY(IP;QhL za-&eVRT)pQX>y=jjXdP5L|f7JZw(L;pZOq#x10(U0jr z>6i3h^xyO=#>8NZnPC}@smIi3+!%MpgYjg%ml}TeV znJgxc$!D4|&6yTVOQs`J$aH18GbKzJGk_V$3}S{dBbbrQcxD1Kk(tCyWo9rlnNOI{ zm_^J|rjl91R5NRtjm%ffc4h~&n>olFWsd2myE{}oVxBWEnZL}yjGGB_syWk~WzI9_ zo12)Mnp>J%ncJD$n>(Akn7f&a%{|S%%>B&$%>&JY%tOt?%%jYs&6*jSCzvOirfSeA#@(eARrd z!hGF)!+g{Ho%xpep83A{f%#YSGxKxvAFRkqtjsE`%G$AY*t)De>%cm)uB;c^fc0j5 z*oJHf8_MRgd2Bx0h%I0nvrX8hY%{hw+k$Pwc4oVh$`pX^Go=pd?jDSFXNZKVqdYJ*k3Fa%ftcVKyi>bSS%NZh$BQzgyL9nia1rACN39O zh%3ca;%ae?SS_v<*NN-J4dNDYhxoO)vqIb@?iLS=N5rGzE%CN^N4zWE6TcUK5PuYZ z5`Pwd5g&@rh;Z?__*#4;*-H+RqvRwxOD>YDR8Oiexk>I)11V4nlftEVDM3nMoT?J*1veUulpuTpA%kX{!kJ425F09Zc^ho+mdMrJWewUs~&!p$lAJPlyZyCtA z%*nhg$lkJ#>?`}p{&IjECGazi;pj*#Q!R5?w~lk?>ka!a|d+)wT=m&#@G0C`}A zJV+iam&-%s5wa#vmOqxK$W`((dAYnoUMa7VSIcYUYI&`^PTnMcC2yDa$@}F4@(KC0 zd`A9B{#pJ-zArzJf0ZA~kL2Iv$MO^Tx%^6gt&j?((2ASlu6QV(ikH$r@m72kU&T-H zSAvyDB}z$Bl9f!QqLb2D>7o=WU6mrGn^LTFS4xx~N*`sQGC~=tj8euala$HIG-bN7 zQ2A8(Oj)FSt}IrTD9e;JO0}|9*{Xb@Y*W5ezEXB6`;-&PN#z^mlyXkFq+C{RDYun7 z%3bB2@{{sVd7}KTQYx)7s##@KPUTfW6)RLlt)tde?Nw*hUG-4CRUg$?4OGL_a5X}0 zq!y@+)h23FwVB#nZK1YQTdA$pHfme7o!VaQpmtO{slC+RY9F<)+E4ATma1jy5Vb

Kb*Ox?bI^ex>eI_oye;Gpck}y{LYxURAHD->J9M zd-^6W8320gV{R)3h^1Rs2#qlxlSXK?qDitzBQ-@4ayH7UkFTG9KwwaCbYfC+W}||} z&06X%QZVMK=Skjn%}qm0y-nq&hNi)$Vd%FWrgD9%)IK;Os%?{&4f~di7~BE% zq_})=n+C=GiUtp^4A+>-NR8Lz3o)^waq$WIR5^?^YpllU`{k&_l+?8J4%VinMg2?K zS${1V+@(p&mc@fgN=gfgMwAUHuS&~k*Q8}r%dIbFWrybEdgSHnb(OB9s7acjk5nQ8 zQ&O8WMcvx=F6~}6tfpI&jPog}&0BP8(lWDmae42u(xO2ls+wo$SCmc_gRv3V0&FpM z6?+8gf?$*{CxRT%1T+IJKr7G&WzB^sNuG(4V;v>OyTEaj{$53C?-TG0yv8Zq56?r{ zYEQg3-WO%4pQC(qGs;DGpgi=r$?^wa)}N+UH9u>9;8!&1yh%T*j;-rwYNgS0mm)iu35ow2R<>rly?vJ{^!H7+^vLL0Klf}As(N`e`*R?j?KqDK?AW+ z8?Q~!CTf$GW1nG*On%s6ZL&5M;hCld70PwHGDu(Y4?)u`ee^QJ=U{z z^YbRrBw;JCRh8IE?PG09hnB;7_b7L7KBRZ~c~hJz9;?RIqVaD$q`atGzmk?E<;$>Y z(;icDrZ=B{6Zaq1KyhFdbN`CFz5`{iLnfHd8<)_Jua968ln{tyg;o`F(9V zum;XdE*x6w9oZt zzCjXp8M|f*sKTybSG6VDQa!}4pai>vJv0TZ#qMJFu05p>{qQy zTc$17R%k1=RoZH8jaIF#)z+=W9+|FTkFh7{?^Em<_8j{Idx8C_t=Dq3joK#kcQeGU zL+pEqy@J?l2&k>M{TgB%1!$9GI%>KH7~Ltr&uN2YZ~zOqj!jzTp%ES4tf;(K72x#_ z0Uk|c(}60W09D%pv3Xk31(RTmGE!4lQ@~1K4;+9aa01T2Mcb-

5N?)V|WTuLSi# zec*;ZJxmR>9op9r>#Oa6*j)X1K)E|^yGalTLF0fFzM-~L+f@ZZO>4B>TC!f677`7j zF^6R!2E>9mZ4bmSh=pnGt{}rm0?8l+AxH&jART0YOppb#k-6l8Jdm&74&3N}P&=<( z(Dp*iq`lS7YHu!q0?-&VL4BGclWLBPswFb3)~0KEfL9;$ac#f$jdn)cr|%Dnk8W=~ zwFBq~I%x;A!`e};-34TPT~Xf*(;86RA+LK$X?gD+y-NnQwhWbaP)pVh>F&XG%+_J- z0eb4g8o1$ApqD?q$pjbPCM02Q?TH5YiX1RLogRAA}xkJEEFiam6?8KbV zPHLt?IbUzy+f7e7Ddg9tDM-J0_b zjJp7)AxzUvFOWMLYB<|&MT1L_-ZUIk(yyqz_s|l}q@B}FSbNU_dg~@FTem2v0(10p z4c$A>2USSP!6#q=SO`7^pMgc-bFdgJ0ZT!pc2WCQyQE##u4q@aYua_~hIUi?ZY@}5 zYGC{YtH5fo22`Wp)|vdYTbf|`dr$jCyRSV&zdzE8GS2JxWH&t`GeeJU>91cH=bjFB zVh)vHmv&ogXR&Os7jsw+_JRGzq21B$T8?%ojo@usc?_H|*;j(&+V_>bR-(!H#BNPnah1tq0D%X@X~*SoaDq8TNF6{dq% zs;kxM*=~Lvd}rL}2Dqs`(0;ALL~sG!egzM;-?gXOYb~ftUV5`ZB}03c3~O0j)UTvamfxLdQBvG{K*?a8 zZ{-o|mGan%$T}R)jNy5%Jwtk4W7&U#zYT;h!C%^Q?T;$(3cS`{Xn*P-wTg7aahyUI zaRMi`m)c)dIE^#f-`XqvRI6mOSISxIo%K;+p}~c+N6~-*{dyN8ttcza?A<-PcWLjz zy$Xtklot0w`sh~}?{Co(T*dA5ePK>`9i(FW!W=3-Fml`;Wa5sv6Uf0`a95BIF;Y7Z zF#%!#**L^PA;$lQmE&%>JE*a8h_MjEtv0UZT4>`w$jotH6gd4MMnH^)7-O^aeiCkv z2ZLht6o^sUp+Z@*#1SKmG#qS16q&NwZ7r*=IfX|XrVKIjzuPjN0EU@fK#a4Ra&9eC zHq4pS-TLws?<@>YFsuo+u8|F%i8n*`gJeMVR=*M- z0Wmj=Vc{R)nxSsz@CxlGh`A$+z{hHBA?ERcX(?{mUa3C+FeiL6KGo=b1D~QjfLMe7 z(OceQ12PAnk1Pq-@wxcCM2Pu942^+5vL<{1zEJxeVgV2f`M=szq*b4m7-O;&VuA1M z2w#S;G@#k+2w#P-hFB29g0*6OZ~OW#_&R(eYEavjHfw)FtRcGoV=M29cjnaoo%(%f z8DHVsQJ(iTvW#8$ZXCtQ-VjTHSSrNAEvA9Qlnk+6|A>J2K72oTXB%h)BK~O`M-6cv z^TUthC-9RHi-cG-#Nr?pZ?g~yKW$a=C_~Bh{;|&etWgfXfL}C}KL%p47Q<;=)Vs9d z;PSFTBf6Cp4eBlv|HE)@TJM?gUkvB2)o_xulltS>4(fXwxofqNB)wByWGMbC{sbkG z_(S{={u}-nVrdXdhgb&0GMD4OSB*ts;D7i10PUvbA;{ z2A9MI7nKDM%rCD|8UiB-l&TPbz#*0kvAimRG)yO7Zx)}D#}jo-0jmgs5DAHp358Gz zWPAk>YYed_5JRTf3}Ve8)?yV=7d#*w2uH$+a5go7SW83SiXhevVrbmD>vvi&3n#oW zhn0j6;Y;`t{zL!~2(eZWLnhH4VjUsY8DfP<5=29jM1&BbL>LjSZ%A;YT0^XjjOzmu z>s$RQ5k*9!0Ntjj-;k0jBFdC(>k?~pfml1#Uaw5_sIcBB(R#K6I$J2ajv5sl85=70g8T}s}GOZoDSUNbP4$)DO zLGBUZvEjxe{-r~%wL{l;9bzI7rtr8>eScf~E<^#**c7mIsTSmAbqXd^mr=oCad8d9 z5!C4DsE;gyC0Za~PqZXj5om-;Al3t7J&}mp^~eeC*E~3GSZ0S_rNe@Uw+Rj%S=u2z zHZwT1NpRG#mU@?@mSKf*oy^{Y2lOi%;oi8UbV#?NLGF3QWu?~pb}=2OBnlzcPfI#a zbVJf8Cc5hFUhnW7MsiGi8^dfryM-UqVvC{t*#E3FtzE%B)}4iSs-HpEgR4iU=? zV}iCgG|m!-Ce?(YkN+(UWf5DDy%Jj?Hnt`V5nuk-Fl58Mo7js&5P{s}_)20Q#3mRa z$eB1q97T?pI1Eszorsb%UXZ#h)xpt>I>c6KtcX~@w z|9eVDGNjoyrGwafi0!e=>5$ZdYDSopNENwBQYKLf@(IKiRFQV3YYw~`tOqhlH_{#Cke;NMk>o8llDriV`^;h=yCJsxKaxDshx7&S0$CNr7X8CM z$Y5k2WJ5B9429U|D7#q#v8C@~7+DXSWW=h)+E^o0)zMF<+oxM+dLL$WWTMqbD*xR` z$TVwkT84tttn^mz6F4%>8l0Bd#wVX_Z3?I+8<7QMW3ma^lx#*eCtHv$N#x;ILTnYp zP?E3)V$~2^3$b+&TMw}f5ZhQywz1j_*@5gxb}}^}yBHR;$!0NMKx_xZzBaP9o!ZuJ z8LhC~e#T%USG2jtKF9&cKFEROAmf187KkC^F+Ne6)?RkEAsj)DLN-DoyWLhvBD?(( z*@$n2MvgPo?;JVS$kM(-Hb71=vb60VW@#=dUa57g4q48(-E|r{)98PLoMG6|uK&>= z1)uI#ms{g;4ToFNs;p2l1 zbqr$r|EprHBv-vxtfRAU#o-x$tFnNSLN**JRlPAcNoO{tWlpUhWcEvsn56X)#vKgqKwv9=8uNhmY0v%tsy#LtKOvC^ zsw97h*riJH8N@Cdn&b2*X_-!*BmXiq=gND@8{V^m!YIO`7!+Ca3g3wYbWk=Pa>O$-$#J+>rEr{KICnem)7=9FvLJgC)P2T=7 z@%!(xqZ(LccjrIc!8K4$`BMQ@AQfbis9-RJYDk6P33w#nGv-^H! z)~R(?X>pm+1)Z|?EkG5Bcek@V23@Uv^8M|aS?^bd{2(Vw5W6P}n#t~M%^ypspkk=l zLfHY8idvNnFVD0UJ8B-jjEbY;P08;X=si0y;$y5rJ3b7v`_9MiQ z7W}-NN~cggjY5g|FA#gAB}447zArD;xqxbJbZJaAp_)?7Aa);ONG(vPd#F3-&*3^z zT~HyF>I|{p^sn;0lwzvH_&+lJCzTXR?0(lD{Z?d)nB|)Cu#crMxM%4YPtb$8pPgIQZpd-)&g&i0Z*sqLSTXbe-G~y z>a%})3@U(Aiy^?!V*t<#3hFgjMy>j{hO1G-Y6u9UA*oL<@b=$GZL%iFHYQuC-KKyw z)ECq?>PzY?YCE-q`kLBF?b5@VxCE~;HK6uV`>6fY0qP)ih&oIiLGc7AkQ@)mNswF! z$t{rF3dwDd{8IO7{G{)B>LzkW)CKAy^(}RYx=dZ6u2R>i>(mVhR0!-Kr~^S=2<#zn zfWQ#~CkPNYmul)e>K1jIxLmmo5cr}T(S5}gb|7z7CrBtd|FPt&`$t7?!< z=c7E9&Y^SZJP5)eh=3px<*{@D-5BMuAPRzL{qL5o8n!ZqrZogH@3K?69o^CJ;lAXFa7t!6(^;*d(-2)}3Al{Ok2AcaAckBy6qVC)}#CZTc*cgg|^dJaQ zAV{q;`4OaHWchmg4v~2y>9J_CO^>2S(;v}e=n7h+Aq43VWI&J!K^6qr5ad9RyNVu% z&`%&7=}GitG}#7u28}kxWE-@FpdFfQFOSjDT$`Rt&!gwlpU?~Fg%D+)pa6m<5Hy3J z1q7`SOY2;lUSye$f<|aMs_$x3U$IP_>7~}Qjg7Mp+PKx6U2Z*#rv7bom$vRTXIER# zHaE@|wDqVtyUu#HrEzvlTd$h4o2+MB8)vt)^})ZOx9Qj0I@|3)xd+{s-bwF50|r5R z2s-FYJNLN#^if0l2k3+JA^I?V1cFWwATe}-pb&ztE9hhNary{-lKuvQA_xYca}b~* z9%7OHMf!>%{cq_@^koRp2o*!n-H`q@`noY}B@pzmNdK-Ot9uZjIdqLzp?{=*LDHpv zqJM^<7X-bl==<~o2>L+K7gdd;T%OR+jO)MCPa)_BLH{cHIgJds6oN8TIL?fHZQSw= z1OxxA^1=XyMC!oc3<1Gl2+IGV4iWhb<rQMqornVq`{PR0cVop%4s%U^oOLAQ%b3 zCpgLB$uwi7|>V;3I?B6pKDgg?#TUkh@n!rNe)+4T7-{ zjE7(%1e4z>1k=zeB9uj-nu)anf(jau5wW#OCXrE5?@A_2xU~Z`WI7sd7G ztyPd=;;m;g!BIiRD6mv8*-VZ#exTgK zsI0`=Dk}|ZYAZ}5q>M}f)0jc_G97{$5X}5P)K+Q~hiS#MHALH*X#>G*2=pqZ9fS0F z9t4Y!)3bl?&zUY(uQ#VqF0yz%qg1}KbDg^H%79F zC)11R4Z(Z}K7nAtGE8LpG5ygb1|XyVOi%36Umc8=j+t@@KGmjJq5v~Y-`T~x!6>G} z=s%kIh(WsWIRuL#SYq^tj8UovOChMT^q*|>{}`gRteXDQjQ)|c7~P;bo0$W_atKyd zF>@KjaWw?%{^8r1PpuqQ6v|OG9PAxxMKxxL_4=wpS+B*B*9*HAJ6AC)jE5{^&=b}` zP>nKaW|e_%EsAR4LFnXaLH)n>KKCT6SAVKcJ@g7pw=Fgk2AI&3sL#C`oihdsEt#!V_TxG7Au9+GzH_?0r?5UZrfPD}x z-sKwE$pJK7X@%J_4-j1DR|xjj%vYG-^jlM0E0{l+7bbgDBP{mXTeI$EQ@+2MH%835 z!MsK@4{#9CH=7Llhd!8j$Tw^Hm`O8=-y3CDGi9dD49GLHX3or;1+!?D%(7WAt7bcM z9dli?J??6DG&@z8oy{(0S93jcebUS9ZuWox`Q>8}oY2lffE@8@2+%L*A-D*^B?zuS za1DYR5PS#0Z3yl{@I6}Fg5XC8eum&a1c>1y2p&U#W?4wk&mj22fa7IuVD>iqn0?KD zW`A>lInW$r4mLM5SA>{D&0*$nbA&n49A%C+$CzWyaprh)f;rKgWKM?QPl&S+uLtpP zh!;S-5TYdq6-f%qzj?}GSQh~I|z3rH}KaDhZHB+?+!0TTTnp+RCcBvwG;Ye<}d z#BE4Cg(O~ED}nG~&y@Xl-imWXz=qbG_Yjx~lJ^gK=oK*vW(Sv(SwL12-wz#Y}>0Ml_;{faFtA+BE zceqmfsI@u{v9`EgV?uQhC`muvt9Fx-)+RS~X-{L@f?=&^R9G+HDwMNpSW)_jzEZ6g zKZwNO=ATRha? zmM*IGyj9lIzZJ@}-?0rCP@CyGYl|nS<4n(?XdVAw9>3Yz=4qi^_3kd(z<^rM`O@0r zd7=FAyB2YSlv*uzT3fs*l-r^fhQ7&q)gagId(6j?i!|>w?=$Z=A21&@A2J^{A2A;_ zBQNn1g1;a@iSjE5UPJH(g0~PiK^%iPs5YOlxk&RFGb-<({U?49$KSh1oP;=qd?Zd= zeWdv|@{#5{5GQJUr1^W~BkSsm%k7*Vnjc%7q4_uD3~|PAhQA|ch@15j<*vmqSYTlM z)BMu>m-%n=EAwmf8}nP%#3CRZ#CeFLr-%@jATC2(fw&5BJBZh*W^o%vs~cxI17qFy z7;D@(?reeBk~J#CtTV*zYap`qP$7q{&$^+*1L6)4ceH#up`s-xXUl~(o|*M!11tns ze}jMvBESY21YGsULtRSPFg6h}V8hu6Hj<5EquCfXmW^ZM*#wB!hqxQW-64)1;0bXr zh&O<^H^hA)?pw_!*%+|tY=)@;n`JQYd(Qw5hIm6`ltU~OD%h3=g;o&vw^3+oP-w@t zM@L792S7Z~@)@MHQ?OjQfgI?SDqHKN3TE41#TK(Ytb9rgKA{GmUIw4A52BNj(#AFj z{n-(H(ZUQ{%9gPM*n#XIb}(Dc4q=DV2iV~dkAQe2#G@b{4e=O=$3i>~;_(nqFs2H4 z;#zj3l`A_2pjv{l)rK9%j)!|km%c2asj5U_e+2v?a22Z!_ zxM5doKSMl2@A8>_1&i_-qn2--`LY{Xl*|0f?1kONeultmkb{(WAf72BYl zVJ#bnZm{PJK{l#lSAz?Ph4!;i|14pzu=fnbyvkloiqm~Tzjj058BHAEAAAj|6GmCDpq@WX0&a16&;6p~{N9-Wawa)P0dUGy6t zxwvpDR}b;v?6^8yUCy3!;2b$8&Y5%JT=j;UTL4$zhL&(N@;T1OK-=d%TCAHTpTqlE zeH9mpz;Z}c`__QvVlDX`m%^o6VWb%_`WrAZ4H%^#+6CF!hCPpKWq`})8gT_&W3CC; zlxxN{=UQ-RJO@C0AjAhjd@#hzAwC4+Lm@s4;>cb`RCBFuu-SC3qp5)l*V({5@;z?D z{40!6)-1qVbA1iq{UAQd2D}W7GB$jWWB z!3`SRDhzI8b+@suh2y!I28jvWL~ar{nfsWV!cFC-anrdO5JyHj0pb%OJ_+KJA^tJM zr$Brv#HT@gdNnu8MuP0f%|~Ouz~C_BJqNUOgzH;RjqiX}tTfQ0#1GBlEJngr8|c?^ z>(H?Q;9*H=t*_djU^U!yn|4DeO8z}G0w@*2gtV=zF*v&_ce2Sah3 zxnH^8tl%CQ;8qymo*3X(>SYsMi~ry;1H}vOPwpl67xy>!ihIqy;okBn+OCH98i-dz zd@aP+L3};L(MW8B_$G*NuI7OiA5U2$9M2l~w$$Lm(G15rQNh2q;LGM65kB4t;%M2; zGQzwo8ezU3e$hA}ju!HeUp79Ge%RFv65oLLK|YfAhWMA2yf2a#T;uD+2l5RKO6T}s zw6ub6N0j(bgOa{~jh&bMYFpWt5XYiSP z7N5=M@VO8bBhj8Bd@scJL3}^N4?rAw!$S~14Dln?e0~k}CRWk#Eez^MZPbsW!iv?V zPg_O9cQvRNLHwAFdUqt6dP-luzd;V!%!x|A6yhf>0e~OG53#ZJEb?C z>gqI_udtFDV~{#i>nbAU!cX958KfrillaN}$NUt2DnE^%&d=ay>X)Xw2h6r9mH7<+ ziKzj<&_I6uy;2#e(@n#wzq3GZ#;-D*r4{5h1LQ3Pvc@1R zzMtR4ql#TMznkB~@8$RL`}qU>LH-bbm_GvXI}k@od=KK^L;MGb{|Iq32tPyo7l_}l z=8x5k{5Sk5{xrgW*1-S3Hu8@k{uJWR4E)b6_;dL04E(ns{;Lf?D&sBZ?~#Ly1L6;j z#bC=P(z+=&`1ko=4Z$Gjzg6-NA^zAZm?ykZ&O>VV)DX-QW9a`d1oON8dZw?_Yr$mY z{MO+7N3E-dwh5G=AkG3UFoIcN1y0}vK@bH=kRkpj#9u=EFNmWc^$McBSoj-=zlDSe z5?HmM+GJ)mG{G5hCct}{)fgHHP*xrF&6wGf!8n=f)HaNnA>0+kRTvF$NGsF zyVfukB83e$eCH_(>|J&Xeqbs=GI{X~8kgvovi@Uw9!6$V;43@|u285{;19GpM&!rilNorVkJ z3}z#Qk-{ipv{2_GVT@3Lc34AUEF@eZQ4bRJ_1p9722~5=ZE`?Vf)SNz1{I%wQXvc~ z0TwFFJ~gO(1_@sqmBj{?B|Vg6PA|&E$@Gl$iuLxJsaUBxzkVvq6CL;JP<@)Fy zwZ=9IcZDCU6uvhoq!<)_GAN|#=N7nD{3`s3a&_UM@JRSgcq}{-eixn!&xGgn0pSHC z(jk!niA+djK_VLxIgrSOL>?s2>O?0kvd z(ZtxvOSFJQJLBCM=aywd1{IfNlyxuBH;vt2J9*EyL?cl~bVa1Ijce$Nbr9Wu-`rb6 zQ*;sQAvYl+EooXQ)`vth!%et|o}#zG{+!qVxe1~^2l9SSC4nM(_v2qu zb}>v0M=3ke5)!TcGi4W}4RkS(X#Fl_7vsew^q5*HyO=DdK%xyK(B^z&qiw2~A!Zv* z{%!r?U7jvB5}R0rB{nvM)&4)=I=2!Fk-~|s#WrGFv7Ojn>>zd&JBgjeE_%{pcmJ+7 ztpcmX9!M6w46Q18r&Zc7kmzLyqPN8#SBPlqUZpq;5nGAG zMs~Cf^*C{&732g1WFMqa;$%ak`hIBJ+;Ur|>EZ$d`V4WVI7^%@&JlG{oGZ=~=Zl{} zqCX@`_5Mp8J*vfpHV)!qaS7s3X>b_!j>Fb6HaL4kV~z!Gi2DoJa~#Ixc#@jN6TB#@UH2Z`~Jm;i~1keCFC$&mOM5>u+hi|=S%717K? zykXFq`i>SPrb7ZH!;qM1kxd&B?R2RW5wvMGijNH01S8*z4vV)!z8Co{RHN`pwU9HJ zY&icAUs}oiX^@*$%WEN>FMcbrh=pX5FbPPwL`bAWNwmaBW=PC|gbsx*rv7O~92!A|l(93)Rjd|tyr@;0(yRSJ?& z%2+7{Lt;s#guLWZ!&aM05mK}P`wuH8FR7*Khu9PR`OO2!gsj<{VYAQ8@#7ao4g2ZY_tbs%|B-TP=9VFI60tM!c z)l!QZvTfL3B;?p6<0S>cw$+W;0`U%z_{xyj_8PXm47R-?VcY5^^|P`aETI&#QYweU z)=Ft8B)+gDFw#iLGS50EjW*bBGk_cOEaFQ&ZdHA!3DRUMtw{#09ks3+6Lx8ag!aBx zOEaZe(rjstq)T(9dD4986A6h61)p7z*bUJRQ(`YfJ4}iFkT?K|gOE5>Eqz);3+;N9 zmLghcArlgZZ8AKH{52%LF=(Btp|#1NwHXpeY(o6PN^7UI+n|LWb*xfCk2-G9YAzj+ z4qJtI$e?w?0Djb?n;1_?*6pp5vAvZz{l1%3jF+T42H(rl73r#UO}Z}K zkZwxfNw=iikT?s8bC5t5cmWb9M1Bj2OOUt>i7Sw}S}onR86JO1`Wf-PZ}7eL-tbV8 zO58B`-mKyKr@{9nB(B@|zCwKKddUtoP-Q}sqjV+rUw>4ufk2G}5S%&g>>rjtF zLrr4FP)|fdO#*%YCfDMrGJ1ukTAn6PmuJW`-bLDxEBp^vbl7b`+Nd}T; zNV1URAjv~gsFpvmDTOtQmzSXNM{iDBUgm@E*Y!xn0yL zRLeJPl*x`VvI+TngRvatH#nn}G%p+HKMXU_`)%VK-zb=cnPM`S z`5jeD zjta61#nk{7VFjl3HB5nwGH^v(?NbRrz?48pM%DmR8d~ks+4kIMCC&;j)_@oD&st}N zlA@%c1!PoIz>+JKbV$abfwdNJl`I9l*jBA%D>+K8lBeV=jg$hVvC>3o3dwj#CO|R~ zl1Y$EhGYsPQz4lKNpy#dYNff2gjJ!G_6CW}cO+_Ng=Ds|E4n3Sr}Q*P^nzrTjYMBV z;a!wLily9eLn$|~=OFCLFvI-FT>aLL`eCCLvwlW8jh;1`SHiu-3<;q-T zo-$wg1d=Tw+8s`|hGe0>^Xo_9OAP{*kZhy1yQnNjuLq<3!paI|rLsy{-F|RMKlGIc z=!Hv2wufXpNFwFvf}r$tS*L6?2&`9-HFbbw$0}u$vKf+{AlX^}GbM^pwktdIuv8C9 z`C8eD-UrK6X#@BfNS4$FeqOntOjTAxvL_^aK(aA{>xI5qAmz%mY{~ZM zD+)5QD&?wj4U$N5y{nWPpbsSbXh#roZ~g1t^Ht1)V<8mGpq32LI6q#|>f49SlnIR%naAvq0_(;+znk~1MW z3zD;|)l@ajtZ%bHWnmFP5jJj})o#cZ)GlhF+EqpB^eH4igXAJee!g5SR=cYuD$l`fe(XAB(=1Y9cBiPeH}w8R+||mZ0yZT86%tY8AhRU(2sY z1>7G5S!gZ{Mqd+EEgTdMp)Y{?7KwY5I$oWrE>KsZFT?pl-L0NbZ=&zMxuf1we^7r? ze^DQ(57pl)?0_9%N7*rUtQ~JB+R1jRT^&1nJAb=GyJmL9cEjw(+kI-c-fpMeF1zD) zSM09Y-LU)4?zY`syYKCOw0my%!tSNr-*&I<-qykD;C0A4PIUt7G^*3P&a^t!b&l8h zwa&}BL|v*bQF}e&uMSTf{&M)+ z;k6^>Sl7|jv4NwHV^W1A2Bx zv*T9BZH`|#?r=Qs_{8zGlj>B*Daa|zDc`A;Qx~URPJ^AsIB8B}oyIv$aGK=wvD2qc zTby<}?Q=Tdbjaz5(;26$PS>68Iz4cD?Myfe&i2j?ogk8L>uBTkjx}JCa*7dUMRo7>( zuj@J2bFEju{>Az?-6%J~E!yofx7BXj+`e+#;kMIlx7%K~{cfk-&bpmpi~o*zWPQ$1aaO9{W75 zc)alp_iX9e$+OV2$g|k9)N`2Uc+aVx3p^`5t2~!`?({t5dCv2q=Oxdpp4UBZdSPCy zS3NH`FApy-FK;hjFMqEV4h& zruQxHKfM3+{>%H7_ZuIR5AY#<7$43@^ih25e4>4deTMjGJ~Mq*`JD2(=S%rI`zHD3 z`&M-E9q2pQceL+h-|4;!eV6;L^xf$Dh3}WXJA8Ng9`pUy_p}7z-EY6& zF~1Xjr~J-;zPZ}Q*bf71Uu|Azr& zfMY;pKy*NCKzu-AKypB8z@UIp0b>Kk2TTl@955x|lYpv#)dAH3>jE|e90)iWa6jO; zKrzrIuwI~BphsX(U|e8AU{YX8V18iRz~aFEfn|XM0|y803p^fpEAackzk=`}F-Q(l zg9?IL2NeZX^avUhG%9Fi(AuC&LHB|l1ic7)8T5D1>tHIF4_1PGgCm0*1vd_E8r(d% zWpL}@w!!U#I|g?SE(|UT9v(b0cy#cXU@drT@c7_~!IOih1WyZ|5j-n+eegHIj~l8D zqZ@W=II7{2hI<av|hu$j>47 zLtccu2{na+P$HBI6+)#@CDbm|Gc+o+O=w|guh71s{X@$_M~A}DaiJ4Jr-V)moe?@K zbbjda(4C>jLQjQOoC!S_dMWfu=(W%rp?5~h$(u$y7G!|sLs81{2G7EXlI;pT8ITnLxK9mCziJ;S}j{lWvnW5VOZlfqNNn}@dy z?;74MynA?$@WJ6j!-t2D44)7_CwyM`C*cdjzYl*B{xtk~_@5DEMTBdFTZCtXcZ6R= zU_`@+u!zWrn27j@q=;4#Z6n%8bd2a6(KVttqDMsUh`te}5d$IyMa+!Y5OF@@S)^lR za%AU77`Zg^c;t_fzeWBY`8@JPlqt#_#Yag|YE<1QhbX5gmngrez^H~%VNsD$(NQg< zx<-{m^^EEhRTeccsywP-Je9CbeGYSfLW zTTyqTeu;Vz^(g8|)Km10Om(B9qf?^OqqCxOqFY6`kM0=VIl5bPNp!F1KG86GMzkJ1 zFZz?{MbV3+E2Ec1AB#R0eLebB^xGH^L&h*MT#Oi_#MFrijtPy4h>5C*iHV7eNr=ge zX&lomre#c3t%m;*6~V$Q`}jJXtZ zCFWktv|8yfd<+|sx;abLzAjyo22GVXNT zxwwmQm*cL*{Sxf8{#*|e-Zyx z{MYfjLj=(cqBAT2up}eXqnJ8p*W#O!i0o53G)&b zR3viieq~S>; zlSU_vNt%>2BWZTh+@w#E7ACDsT9dRcX+zS^q}@psdz1DjolZKJbRp^6q}xdklO8Ai zp7bmkOLk0lNv@ylk=!8JH#s0VI5{*qA~`xaF1cB9%jDL{ZIjz4cSQOcr}!zp)D9;7@f+R;sT)&w zr5;Q@l6pM#o74-b-=HX-(5wq_s-x zn>IY{qqK@Nm^LwOa@y3i>1kWicBUOlyODM$?PWTb?wIbKUg4YWpB|VVoF0-MmY$rR znx2uKot~TCD7|rd)AUa1Md{tsd#3kGFH0YoJ~(}H`e*6O(^sWer>{#tm3}t;eEPTP zSJJPif0uqI{a*U3^tTxxgUFyVm<%?P(6`j=~Yed$9tZi9) zvi4^k$~uyDChJPp^{nr*?qq$R^<&o0S@*MEWc`)(I@^?uXOr2U*%cw#k=fDNaoNe) zso5FXS=p_!+h%vo?v`DaU7kHOdqnn_Y%P0S_Jr)Y*;})BW$(>CkbNloRQB2I3)#=I zUu3_`ewF<;2fb9C!{o3zUO7HF{yBj;!8sv0VL96+6& zrz~e+&fpv^XI##NoJl!zDsq-;YHJ@fnI_s<`YKRAC#{@DBp`IGWL z&Yz#ZFn>}0;{3Jw>+?6}Z_eM7zd!$A{^9(y`7ayEjl3JhH7aOS*r>eGZ=- z(VRwe8-3nrWutwKjyAf}=tTihAQZ?I1$G7Y1x^K?1>OaI1px)Y1tA5o1?dHi3rY$G z6^tqvQveIb7fdRcRWPUE|Fv-6e@QRi1IOEY?_p-U?AGlzY~Q-oZ8Hi4WQd4@+cXgo z;T<9(f(Q~JLl6-`1QA385d}r86usTX?RM+7_qgqKyY=ny_*(d9A3;+=;h;sJrJxm{RiM?NU7({N2y3rh-p_Ip7j7A6y1jfVJRSumNlW+rSR66YK_iz&+pr@L%9N;QQc5;HTi% z;CJ8;;LqSMkV%l)kfo4ikmZn-kWG+-kRuQ<n* z5H6$?QU(!0Dj@ZcAmk$C33LJUN9a*#ER+TJ3$zK^40S@?&;jTL z=q2bM&}+~e&|A>E&6b^__`z;D6t!tcXh z!{5T+!#_pGMW;vSMbo31(X8mAXl`^xv^2UBh*n0cqqWhx=>F(O(O(dY5!(?55fH?2 zL^J}0z#|BV1Oyq8jL1XC5oSaSq66Va1Q0>QMZ{IaHNR0_HdHt2H`GPc71W=o>!_Qk zJE(i8SE#qB4>8kYB4U=rERWe61C4>jAYyW2STRL0+?cwU<``#;JLX!XH#cs1+{(DfxHWNEam+YQTuB^1P8cVRlf^0Gs^T

tpLiMhl)Vm^^e6cEda6+{_PPE--q#5UqtfOvs;iFk#0m3W`{ zi1?KFg7}K~CSgdzu!Io_qZ6P&T~%}ZO6wkmCP+S)Wv+S#=8Y5i$~=}Xgr zpVBv^Z%W^iemY&7u1nXa8`EEPadIiWgHf1=@pioVt>_n!1j6m1J_8|?t?C=E!XEeztJwzuF$U1{-WKW-K2fVpP#=g zpODYVZ^$3ae?gx}kECy)N71*^x6}90L3Ah`Mn}+N=ooq|J&qnvPo-zj>GV_dLOO?D zN*B<}>0){{T}N-C_tMYPL-gP17wK2%f6}khft&O@^!xNj^lt^j3Pu!+Di~8RzF=a( zf zdgdnPX6A0@A?8sggn5h^%Oo;M%w%Q;GmDwS%w?7_6-*7YhN)+om=nu6)*}I3rqke1Ji(+z#L#c5DqK?mI7OW9l+1PZeS1aD{v4v0)PN0 za2$XGS%3&|09Sy|r+|o4`%V$R>ra~Rq;kWl#_wLT`+w%|`R|y_z;`+L&+iKDqwl@T zKi`ej58uJlFQ>k;CbFim7O>W{HnFy_wzGa_{lePEI>0*20C$XoqXR_z8=do9@e_(HAgW1Q}a5j>SX5-j#Y$BV)PG+aES?nTqF}s9a z$}VGz*b=ssUCCCkRctr=D*H=Oc+sAsq#{94L(%!7hea=o-W0tr`p6l|8ONE(nZlXQ z0cLULaOQEsIN_WK&Kk~o&PL8=&JNDcoL@M5ImbECoOlkElh0vrPI1_rVh)cZ;FNPJ zI8u&@W8qjiHcm6g$#HYqIUO87r<>Emxl=r}cvUfzD*A>I)loQLD#c?2Gjm&haYa(FZzoyX*{c^qB|4=Clyc`9B#uY>331$e!@ z^Slu6H{M0w72cn`>%3RIx4iefkG#*k|4N6H4l5l|I=Xah>G;x>r3Xq=OUp`arGJ$E z%b&;J%17|={CIvMpUgkOr|}E;0KbsW;dA*s{u#cUui|U?HT+t>pFhCA$iK|L%D=(C z$-l$D2k_tU-wTEd#t6m69@!Cfk+?`NCh&1LvT^>p=@s1&N5;dx2&$Lr|eGI)3O(3ugcz(eG!fn zjuws;ju%c8P8Nm<7YY{(mkC!2BZUWq09+U�X=BL}8*ZNthy}2@8Zgp-?CiN`#d{ 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 diff --git a/Swift Quit/AppDelegate.swift b/Swift Quit/AppDelegate.swift index e916cf5..465b3f0 100644 --- a/Swift Quit/AppDelegate.swift +++ b/Swift Quit/AppDelegate.swift @@ -26,38 +26,29 @@ class AppDelegate: NSObject, NSApplicationDelegate { func applicationDidFinishLaunching(_ aNotification: Notification) { - guard AXSwift.checkIsProcessTrusted(prompt: true) else { print("Not trusted as an AX process; please authorize and re-launch") NSApp.terminate(self) return } - Swindler.initialize().done { state in swindler = state + SwiftQuit.activateAutomaticAppClosing() + + self.loadMenu() + + if(swiftQuitSettings["menubarIconEnabled"] == "false"){ + self.openSettings(); + SwiftQuit.hideMenu() + } + }.catch { error in print("Fatal error: failed to initialize Swindler: \(error)") NSApp.terminate(self) } - SwiftQuit.loadMenu() - - if(swiftQuitSettings["menubarIconEnabled"] == "true"){ - - } - else{ - openSettings(); - SwiftQuit.hideMenu() - } - - - - } - - func applicationWillEnterForeground(_ aNotification: Notification) { - //openSettings(); } func applicationWillTerminate(_ aNotification: Notification) { @@ -72,13 +63,26 @@ class AppDelegate: NSObject, NSApplicationDelegate { return true } + @objc func loadMenu(){ + statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength) + if let button = statusItem.button { + button.image = #imageLiteral(resourceName: "MenuIcon") + button.image?.size = NSSize(width: 18.0, height: 18.0) + button.image?.isTemplate = true + } + statusItem.isVisible = true + let openSettings = NSMenuItem(title: "Settings...", action: #selector(openSettings) , keyEquivalent: ",") + menu.addItem(openSettings) + menu.addItem(NSMenuItem(title: "Quit", action: #selector(NSApplication.terminate(_:)), keyEquivalent: "q")) + statusItem.menu = menu + } @objc func openSettings() { settingsWindow.showWindow(self) settingsWindow.shouldCloseDocument = true NSApp.activate(ignoringOtherApps: true) } - - + + } diff --git a/Swift Quit/Base.lproj/Main.storyboard b/Swift Quit/Base.lproj/Main.storyboard index e035535..3c4f583 100644 --- a/Swift Quit/Base.lproj/Main.storyboard +++ b/Swift Quit/Base.lproj/Main.storyboard @@ -706,27 +706,11 @@ - + - - - - - - - - - - - - - - - - - + @@ -734,7 +718,7 @@ - + @@ -743,21 +727,63 @@ - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ + + + + + + + + + - + @@ -788,7 +814,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -903,16 +852,13 @@ - - - - + diff --git a/Swift Quit/SwiftQuit.swift b/Swift Quit/SwiftQuit.swift index 1358fad..e5d1d8f 100644 --- a/Swift Quit/SwiftQuit.swift +++ b/Swift Quit/SwiftQuit.swift @@ -18,7 +18,7 @@ class SwiftQuit { */ @objc class func getSettings() -> [String:String] { - return userDefaults.object(forKey: "SwiftQuitSettings") as? [String:String] ?? ["automaticQuitEnabled":"true","quitWhen":"lastWindowClosed","launchAtLogin":"false","menubarIconEnabled":"true"] + return userDefaults.object(forKey: "SwiftQuitSettings") as? [String:String] ?? ["launchAtLogin":"false","menubarIconEnabled":"true","excludeBehaviour":"excludeApps"] } @objc class func updateSettings(){ @@ -43,15 +43,6 @@ class SwiftQuit { updateSettings() } - @objc class func enableAutomaticQuit(){ - swiftQuitSettings["automaticQuitEnabled"] = "true" - updateSettings() - } - @objc class func disableAutomaticQuit(){ - swiftQuitSettings["automaticQuitEnabled"] = "false" - updateSettings() - } - @objc class func enableMenubarIcon(){ swiftQuitSettings["menubarIconEnabled"] = "true" updateSettings() @@ -70,65 +61,6 @@ class SwiftQuit { updateSettings() } - - @objc class func enableQuitOnLastWindow(){ - swiftQuitSettings["quitWhen"] = "lastWindowClosed" - updateSettings() - } - @objc class func enableQuitOnAnyWindow(){ - swiftQuitSettings["quitWhen"] = "anyWindowClosed" - updateSettings() - } - - @objc class func closeWindowlessApps(){ - let runningApplications = NSWorkspace.shared.runningApplications - let finderBundleIdentifier = "com.apple.finder" - - let myAppPid = ProcessInfo.processInfo.processIdentifier - - - runningApplications.filter { - $0 != NSRunningApplication.current - && $0.activationPolicy == .regular - && $0.bundleIdentifier != finderBundleIdentifier - } - .forEach { - app in - - let applicationPID = app.processIdentifier - - if(myAppPid != applicationPID){ - - var applicationName = app.bundleURL!.absoluteString - applicationName.remove(at: applicationName.index(before: applicationName.endIndex)) - applicationName = applicationName.replacingOccurrences(of: "file://", with: "") - applicationName = applicationName.replacingOccurrences(of: "%20", with: " ") - - - if (shouldCloseApplication(applicationName: applicationName)) { - - var closeApp = true as Bool - - if let windowList = CGWindowListCopyWindowInfo(.optionOnScreenOnly, kCGNullWindowID) as? [[ String : Any]]{ - - for window in windowList { - if let windowName = window[kCGWindowOwnerName as String] as? String { - if windowName == app.localizedName!{ - closeApp = false - } - } - } - } - - if (closeApp == true){ - terminateApplication(app: app) - } - - } - } - } - } - @objc class func activateAutomaticAppClosing(){ swindler.on { (event: WindowDestroyedEvent) in if !event.window.application.knownWindows.isEmpty { @@ -150,8 +82,6 @@ class SwiftQuit { print(app.isFinishedLaunching); if(app.isFinishedLaunching){ - if(swiftQuitSettings["automaticQuitEnabled"] == "true"){ - applicationName.remove(at: applicationName.index(before: applicationName.endIndex)) applicationName = applicationName.replacingOccurrences(of: "file://", with: "") applicationName = applicationName.replacingOccurrences(of: "%20", with: " ") @@ -159,32 +89,23 @@ class SwiftQuit { if(myAppPid != pid){ let excludedServices:[String] = ["/System/Library/CoreServices/Spotlight.app","/System/Library/CoreServices/Finder.app"]; - + if(!excludedServices.contains(applicationName)){ if (shouldCloseApplication(applicationName: applicationName)) { - - print(applicationName) - - - if(swiftQuitSettings["quitWhen"] == "anyWindowClosed"){ - terminateApplication(app: app) - } - else { + + print(applicationName) + DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(2)) { if eventApp.knownWindows.isEmpty { terminateApplication(app: app) } } } - - - } } } - - } } + } class func shouldCloseApplication(applicationName:String) -> Bool { @@ -196,30 +117,13 @@ class SwiftQuit { app.terminate() } - class func loadMenu(){ - statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength) - if let button = statusItem.button { - button.image = #imageLiteral(resourceName: "MenuIcon") - button.image?.size = NSSize(width: 18.0, height: 18.0) - button.image?.isTemplate = true - } - statusItem.isVisible = true - let openSettings = NSMenuItem(title: "Settings...", action: #selector(openSettings) , keyEquivalent: ",") - menu.addItem(openSettings) - menu.addItem(NSMenuItem(title: "Quit", action: #selector(NSApplication.terminate(_:)), keyEquivalent: "q")) - statusItem.menu = menu - } class func hideMenu(){ statusItem.isVisible = false } + class func showMenu(){ statusItem.isVisible = true } - @objc func openSettings() { - settingsWindow.showWindow(self) - settingsWindow.shouldCloseDocument = true - NSApp.activate(ignoringOtherApps: true) - } - + } diff --git a/Swift Quit/ViewController.swift b/Swift Quit/ViewController.swift index 503255b..2f13017 100644 --- a/Swift Quit/ViewController.swift +++ b/Swift Quit/ViewController.swift @@ -11,18 +11,11 @@ import LaunchAtLogin class ViewController: NSViewController, NSTableViewDelegate, NSWindowDelegate { @objc dynamic var launchAtLogin = LaunchAtLogin.kvo - @IBOutlet weak var quitAppsAutomaticallySwitchOutlet: NSSwitch! - @IBOutlet weak var quitAppsWhenPopupOutlet: NSPopUpButton! - @IBOutlet weak var quitAppsWhenLabelOutlet: NSTextField! - @IBOutlet weak var displayMenubarIcon: NSSwitch! - @IBOutlet weak var excludeBehaviourPopupOutlet: NSPopUpButton! @IBOutlet weak var excludeBehaviourLabelOutlet: NSTextField! - @IBOutlet weak var excludedAppsTableView: NSTableView! @IBOutlet weak var removeExcludedAppButtonOutlet: NSButton! - @IBOutlet weak var launchAtLoginSwitch: NSSwitch! override func viewDidLoad() { @@ -30,34 +23,21 @@ class ViewController: NSViewController, NSTableViewDelegate, NSWindowDelegate { NSApp.activate(ignoringOtherApps: true) view.window?.delegate = self - setupViews() } override var representedObject: Any? { didSet { // Update the view, if already loaded. - } } func setupViews() { - if(swiftQuitSettings["automaticQuitEnabled"] == "true"){ - quitAppsAutomaticallySwitchOutlet.state = NSControl.StateValue.on - showQuitAppsWhen() - } if(swiftQuitSettings["menubarIconEnabled"] == "true"){ displayMenubarIcon.state = NSControl.StateValue.on } - if(swiftQuitSettings["quitWhen"] == "lastWindowClosed"){ - quitAppsWhenPopupOutlet.title = "Last Window Is Closed" - } - else{ - quitAppsWhenPopupOutlet.title = "Any Window Is Closed" - } - excludeBehaviourLabelOutlet.textColor = .labelColor if(swiftQuitSettings["excludeBehaviour"] == "excludeApps"){ @@ -96,43 +76,6 @@ class ViewController: NSViewController, NSTableViewDelegate, NSWindowDelegate { } - - - @IBAction func automaticallyQuitApps(_ sender: Any) { - - if quitAppsAutomaticallySwitchOutlet.state == NSControl.StateValue.on { - showQuitAppsWhen() - SwiftQuit.enableAutomaticQuit() - SwiftQuit.activateAutomaticAppClosing() - } - else{ - hideQuitAppsWhen() - SwiftQuit.disableAutomaticQuit() - } - - } - - func showQuitAppsWhen(){ - quitAppsWhenPopupOutlet.isEnabled = true - quitAppsWhenLabelOutlet.textColor = .labelColor - } - - func hideQuitAppsWhen(){ - quitAppsWhenPopupOutlet.isEnabled = false - quitAppsWhenLabelOutlet.textColor = .systemGray - } - - @IBAction func changeQuitOn(_ sender: Any) { - - if(quitAppsWhenPopupOutlet.title == "Last Window Is Closed"){ - SwiftQuit.enableQuitOnLastWindow() - } - else{ - swiftQuitSettings["quitWhen"] = "anyWindowClosed" - SwiftQuit.enableQuitOnAnyWindow() - } - } - @IBAction func changeExcludeBehaviour(_ sender: Any) { if(excludeBehaviourPopupOutlet.title == "All Apps Except The Following"){