diff --git a/.gitignore b/.gitignore index e943b2a..df6ca07 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ -/v0.12.0.tar.gz /v0.13.0.tar.gz /angle-down.png +/v0.14.0.tar.gz diff --git a/0002-Use-higher-quality-neutral-images-for-default-faces.patch b/0002-Use-higher-quality-neutral-images-for-default-faces.patch deleted file mode 100644 index 902482e..0000000 --- a/0002-Use-higher-quality-neutral-images-for-default-faces.patch +++ /dev/null @@ -1,297 +0,0 @@ -From 71a1925151e71d2ade4588f06a39402e87d10ee8 Mon Sep 17 00:00:00 2001 -From: Jerome Leclanche -Date: Thu, 5 Nov 2015 13:10:39 +0200 -Subject: [PATCH 02/34] Use higher quality neutral images for default faces - -Images in the public domain. Root recolored. - -Touches #174 ---- - ChangeLog | 1 + - data/faces/default.face.icon | Bin 1830 -> 4920 bytes - data/faces/root.face.icon | Bin 2138 -> 5111 bytes - 3 files changed, 1 insertion(+) - -diff --git a/data/faces/default.face.icon b/data/faces/default.face.icon -index 3ec0da8ba441fc6bb8cffd44b1d9a4e760149eb9..cd7c4fdeecce8508d39ffd927de81cf89cb334cd 100644 -GIT binary patch -literal 4920 -zcmcgw`8(8o)c$;Dj2KI3@DP=eUG|+&#+IyELnh)uvL+H{h89Z?N%k3gjIxxJMwXFe -zZ<4(%Lou{4GKIpt-v8mf-k;7nzuf0s=f2K;opVwh>@4|^;z$4hpS2an2>@u{g#Z`l -zzVV7A2LK?%w#J-tj{W$9w31C6i@sB`I%OHyqzV@jI;O_Sn*`K#GSnwk4DFn1jvxIQ -zQ|0uO)E{tv@+mj!Z2MuLAY+6bcEeQH#E{B|<$lTU#i;^`5>)YHJGiSq -zpM6sz?{VA@R)+?^oGwA|LpKP?)b^c!>%1zJE{kkgESdYr|0y3v)I%j-qNGgn&S`~) -zFxgT_d~Nn#eY>IPHX&Xla=313#0TG&H1~r^yA01(;C&n<$?B&28s|OdM}aAW7|1em -zShW(IWxShJ7?vosa L!t+oqsnzWk2-9&Ij42SVwfmdmg(aosPbN%U)JM!KGLJC- -zIPjiA0go<6dY{&hSG-AaZE3WI+4ma|6Ui)S@Pxv@`(+)4x91qLBjK}syx}5S_Vjo@ -zj2(23FLOJCwN_%s-izxJIi+-q&dV&iE2^xojl#=rZCVm6Q(4|4B715l(cyZ0tvs#J -z4#7%04d$REn@XMCrIIkHIjyO@o&$61wEa8_T|B^mz>^(BteUFb4*Fc4XM6Q-)ye(NP?9-)I~FV?9d)2)6mzR2p^%I7eW -zO4f;3qTc0j=-h3jskJ`L=m62m#5Jt~K5h2K(O9}st{gmg`(GS7X78lRUeNo^dOWdzpyU?i54`__~h7Oax>z`yYjlz^G{<(FBv4YS8m3UZlAi`l#cs51xfU1_#&{p(|PF~iwmlJZA~1j -z=npsDB!m!HRJ?S;-u$?y6Tbn~4s8}LxHT>12-3b-(=)xd9$p(Vzy#3clV4ma2O$ML -zsYV@Q**`~Q3Ug*{N4e!;NNR4ZKp;o)T9}s+ -zRwVYWo?$7_%KtZY;|tRC*|GowVW*YAr?ovWXM@=t+SJWj@-=lqHNLYE~M!$C0mct0D9Gw -zFeiF%!W`Dt;!Fg8{craB=epu -z1EZPO=~Ar}x6n0C2^oG~1)yD)^NI}(;V68Pft8X@9M+voxmd+d~(H7ClnEH3z3aC1t&16AvcB5l6nt; -zbCD&pw;_b+8YF3{QocKSLS)%ZdX33c3zvi&c(l^> -zqr0lQQTvZJgf#8evr7I-@vl7GcM(w<_g&6OuXrcBPJ>Tb9*p^Bir`V0JiWuE!1-p4 -zbI2}Ep`Y*NIf%@^@n+1v3Opohm-9GCU903;X4^Opj*UI6eT=|Z>&F3X2OUT^`T;ix*ssImmWE6k~GB+CP -zw?FVQg8@~>4*ax`>~NPnfq%STZg1nh?qDIWi1vQ2r7;&osrYp1?N0HjYdrME{eINL -zCy39S1a`#%q7?0A4XN=TGk@wlVf!#6{mc3DP!;SUSIekgz4OFBRAGcEvityXpRI2H -z;KJsdr75UB&}jle3*fTHAH*L>KlD|pmr -zIr@Z39sBOW2$Nq>)Cu^B9F~1#tnB;3PnlE~khf -z`r`6AXUnQ2@rCl>Bt3>ojPe{`(J8Kydicdw0I$M?w6Cljzon5S@_D-|e!hyMr(Qse -z5X5*n9q>$VrgErU0rmvhI*018(=q4Sl89}#_Gz(RdCG&iG|>VmVkZ}-*)oXIV&&?V -zIqF^f^z@l{N{~-W5JH1(Q^|4i=&`P|fNcg}dl2Y*YkHrDTJ_x<)P};X#Ugod^h2pu -z=5($;eJ(I?Ev0I_m#tZR@SfT(+Z1lMI};2Fdy#@%MizVx@ww5O+&d3AMN_q}i^j`% -z6RamrNf&S?+Em_g1cjCdVg>(l>O?cx|7<0U%;84Ted`Yi(r>I=%*zhbwo8Klm}+^0 -zILtP~7@Ie4Djg{JYp)~ne?<)0DMMH3sZe*FvtM75M_^NIFveR?%p7lAsC?^|pa6;( -z%Hdp-$vH{USAPYJtg+j=%0T?saeXrmj(>#-=i4T()3xb&{5^S3#a9Qs;Cqlg&v>d> -zdG}@*D*6Qe*OLdU)QWuZ+Ahu*u`N0DCutv*PBYby+4Z0wP4z4@hvc0(>=qeqX{HJV9EldJ1QY^$T%GU?!?zs~ -za@?tk)Nx=(iE{^qR}atVoR{LMd6B2%*!qhnCJ})p5^1S1@_z6DuD3L;;UR{3`3HLx -z{^?I^;~N_u>MCkF0jZ{QxcAK53rOnkpNL_v^8dt=A_{g6QJ6k&50?nzg`S+PF>{NApW4!+FW5ihXCFDolM9KO>3G)0#ANGZzsM9nLKiYi;wmq7>e=TJ6Rcw`_WXy)|;LwkwiHIXN--v~T??5{XBA4-F=950a}aQ`uA+* -z%NLQnCVdE|V`1+uu7kho=Poto=ikJ!mn`pRZiG3PF~vX^<|YYhhm5jR1O4Gi>zu>t -zFEVcF8KxXtm~FawZE?<)uZ=NlYwT&pj*m6InmRh2qcv|b#E9QZ@Yc7ISZ?tn`Re41 -zcMd3U47dn&Dsofp%B2`1m2eQlze2vRqr7R1u63XtyCE90BsDroBK=W3qm)=kE0mjti&042Xj;%}SyX#y0EAl@{DW~QzCD6RtwU>Kpcz_&q=$4KW=Bj65*V$05zdcO$S5LSP -z?Ikr0#$@aB?jRi7bl+*6N$;#N@;s}XY=~cDyfdl~aZoj95T--w=ZeNR-&}1Dhk&sDB&J)JR3eMSV;9f=1Vyd|k$XuiME2vQ`zpuEd -zpVKv`bIIt*J)MDt=Ua6QI%K>is${iz96#fAWya;`5zb;6WWTG88m%g7!?2mOO1*}p -z!k81hkB0kCtJdLf{9K&8)BY#^(3W(0NV8}8^>Nua^Y$(sVcsiwU{GLqPh+m$&{6`q -zUCY~E7!p@}vg8%6;QBqi>JLFlpedC#@a}%cgGBz#&L)`3{1p=y-=h&^#*u!UQ$tBc -zVv%}J@e4Ch%(?pbJ?3jwfev^4yKx%2cbUQBMh`Ws+I~|cUZ2Y9_*-DGFEA^aEs^v-h0l@^Y!7^=()D3%OXNLEEZ+ -z$4+{IY{E!nj{XXb^XPw~de$2qs#Ee+wxj61! -z`pwt-i0sEqH&>9sNWYBSwWe61u1Q!SHpOd))NQWf67Q4yiDe!Id6cUsR9##^u`~>C -zTVck*y(vU^WL}=xZjSlpS1A9_ja+iaWM|;V*DeGS)zbxqHylwd4%xa?e0J_RZky4g -zwRwiwP_Es??67{oJmMQ(eX3!8gYlX?-RFp;_OUJ=Uv9n?r`Wx&m>l}lmPG$Sq`!)6 -zW~*nptk8$Xx?u06GOFDyz*1C?CpB>Eylcwmx0#hbpTsr7+{86FpHY@G4~dnpRpyL# -zxb$?h7qvh7Ve;;0^c$Jvt4@wY=~mki)rbRqxa60%n_7Y_ibGdyr&gBCRCeNS7Aq_a -zdynOMHB$N{l}klhG6#I8d52DI#&|ZDcD&CNgt};{E|Jb&zbRZgT=`@WS*P^&gjNUeclQrhe_)`8)82vL3Zvt6latYXgm5ZvNvDg(;0u -zANn(c!G`5@E>^TjopaUMzefh2yTn1u2Vw`Wi^_3bPWDYW_vd)>jjyWy-|4=4+fnG~ -zrj`JyhTW;@FN}liSJ{;8wf=v@T4G;`X+?Qo6lnbx;{=0K&EFBcDKF0afHg%${?jc< -ztNbV9>GwfvjRJezrgtB1&B9p8jOT?RYxZMMz5U|rVr!ntlJvEz{969q=81`v+jlcu -z>+7P-TP7+5@bF1_Kf{FX#rU|(gPR3ql9kVwo^1-3=#K9wPZ_&LU3osB3=X}S3PF@g -z7{2{TqBNfxXAgP93HE5|GScN*7YpbZPJalOHB5nS9cc&?-5D5C1ZZht{OJkzVG*iUE=a$dwpaK1 -zfeVn0w?s?(mk+|;vsO=_E3QFjNSvrFWEn`22k3H;k^(!1M&ke90vKK3|1wvOApU~! -fev@uBG_c{q+VdEAc+S@TM+{h-+hOWYW0U>|lk^G) - -literal 1830 -zcmV+>2if?EP)FgQ3kK|w)DNl8&rQCV48VPRouX=!nBad~-phK7cYj*ga= -zmY$xTrlzK@uCBJWw!OW*zP`T4$H&jl&)3)2-{0To=jZS5?}TK|kpKVy0d!JMQvg8b -z*k%9#00Cl4M?@D3)|ig~00q-YL_t&-8I8ehb6ZyxhT;2JYahvOD6#p#G?MlIf0*UK -z4DEEVLTc&kwH}OVcu9%PbtV7lhwbf&U+u1LPJHptKdKVIhrp%j`fZ& -zf<0e+9OjGQu)E{Mes@59;2-Wj+=0!D-5z!EV!z`+9r%^luOWr*Ih6dwCMBTZT+4!V -z&mPr}aB`&=LdCxO(IGa*<$s-@0oY>loBm48rD1}DeAI@jC&Pt{3_fH+}v3&pp -zckRoJX0uV99WEtWMxQ%b!yaRB`DNKomlz}K99e5G+q@^?@pRi57qv-3Ul)~V6R44ep=c~xt!rPR!2+?tJL8N3sDn!W(QqD++EC+R-$`pGH6-> -zA+jp6u_m(GyXx4 -zfvgNNW!GvfW|g8q(QKo~kpcJn33j%T?8s22=I8S){wX$B*V(FQ7pPTIhk$YL -zQ369&K!+vF_4fvcf1%1Jl&?I|MWr9qgKQ4W4O^FRIaqf^QlTq>3^!sO#k -zmn>ltl({_qjc=&SyJ%!=YrFZ=iR5(Kv_c>e8uMqqsp>o0I6`uqAmQ`}l^hUO<~UvW -zwl%NZfNc5wCjvM|VsL}PPrT-_Q%0reId=^1CYHl(DnoPfnmWB7UI`-u0d-jm?1X4t -zc-=3pSllsUEIJI1J56MZPDAs$dD%3}^q}KNz{ephsRM<0%OzC3s1!gP4oIYpOz^fz -zs;0Um7;U7eA_5UQ^9Bl1jE)enyN7F3SM(_T|Mn0!t=5g1oKiB1#~T2Uh)0!YF2|4bOpU9 -zj#-zYGXjJ8w(IvjyPKBO&DBdbiZH -zp@jflCJ^v&l}ysz9`E?3@7&#vi7Y#r>jy|U5Zy-4xZZ5GgXXu!@4MR2!qHL_eRCS@ -z&z95`(N=D+F;9;xUz4!GX$PGSD|{FPJw!Y%@c!-2pdMVIAjpxRe_ -z?d+tHEn`t7LDW1bK_P)L2v=`|uUw3Uoi+$p8G?0fr6JTNmT*6FCSR$i4B?QXL$d3# -zXQWnJQKJdlkuC`NI{BKSgLYO2W<)n)f0>sY?QCNaK!iqGm}fFz0q$}+JVTi867G}J -zdssuQG=v<0Qg*L4{lf0HyW7HrtQL8EB;nJox&{#t&NhlAx_X+fE+j$4-I*@kGdSMW+E9y9#^q$9+6=>- -z2F)Ca-4-Fnuu+V5!hj=pv!X@M+1108DyRSaefwW^{L9a%BJjc-nK&P}cO!O-xVqO-#>B&Q>tdGtx6w -zu(Z@SFx59OR7ft$EH0^Z$gM0c$xPNuE!ImZEy&L+(M!(H1pxGM5`k?PNh1IN05f`2 -zSaefqXKrD1b#i3@0C?IC-|f)j4C@p01w;L7=u6>pmmgtCv0uGhS~xhBbG4{m=OY+P#7c= -zY=UY)ot)j3W7qw@C;z2*nf=SiS_i>LV?UCROwjO@YSf{2e(K3je8hlJh2n -zdRUvaFXT2>NFho$qHy>j0*qus%FF*^Hv~QNO~Eta)H@D!cynTnhF6`NmScpGGTnS# -zVNmQQEh)M*8WQcxm)Hv3_Tki||Ca?em@~Fq4jz;3A;Ei(+E$M#+?y&7bCc)2=e6b$ -z=?Fb;RR6$H2WlO?+0lB5(!AiAaU-CMsgpIn=*}BkZj|xxzOrajv^s(zyDz#pD7)$G -z1Vr{@)MJNYIr{O%H@1R_To1Z!wXV8}vfXD#PWzODZSMALgW1?mk2ClF{PIcs>Y4a( -z^)e?E8`7T$Z5-W^mr&EBJyYnbkp}WK&JGOysB^GYbFJ_Q7?Ke=#pw;j*7he}LeOO| -z7l#>|-7UGndi`z)9Q5k>g4Dd^ym3X)*Sti81^Wl6qB!!~f(=kRze}Rq@KO$wcr?mX -zBH7AR7N*IKvb{uAL+FN)Q^J0eSA(AAS -zblIW!5=fk^YXjELJU_ -zG96=j%7MD6XR!ZHGixeCEsR~I!SZ2>3sxK?nY -zfloo?>H0c@1tfYk-ST4B=WM-YC$yKb<-MwT(2t+CnqPTPJk41+KjKS_pOOJ=AS%b8 -z94HAqpvr{Z+ODe{m;ROX?f#VlY2dCJ<-@Goe;*sN8w!LP8`8$CxKW`)nVW{yBwXb< -zQYeC+8&%z}Yvphf9DWcA6=cFqdf5PfU0Ga{P4ODTCxLa`4#20K`OW&Xw?w)+NQiWW -z%MFmf^3i;`P_R!D8K@74djJo_$6xQDnz>P@Rjil68q&a~kFXHw$Dxg9iRPdi$bYsN -zpQ>p#xW_&>EQfHrKJN(fNAH9}6a2p`#(*^S_7kK5`2{EEgq!`-qV?hSfI!z@5B>d< -zt3Y$E*8H#d$`Xr;wmt_XuN24 -zFFQOLw4P-CZ9;4;MX~+q3?=-aAWw-YzAQh2u~iQUQ9CSfj0I_7;>o1-n<#Okze(J+P+Bn)Se!;tw;sSKmmjBzw1kZAepzVBA={-0J7wohWHQ -zy|3Bh=90ii2}=@d&~8Botb^jSDcWcPdPTZz-b=v`V2HQYzS3L}y`|)9SM!syQBSy0 -zf14i7d~DjYo*py=6?3Cvn;hBTW)&uC^fG`tnmWMHr$H%b{)jTaU^ZfKe?QB^Wr)Vi -zpn%>KIdDJKj@RB&N4)B_5Q;9*>_tS9JR@AEu$Km#Ycjs9gq>`>HdVe-pfd>PhbY(p -ze|9P&sJ`rb0cN0ACUvbsY(Vzz>QoijM!0$!@~rtq&?1MI|93?ya2TB`MfYIH@U>i0+f6r!P<1G-(9{AHOGhY?%G#D=TTLw5-K=J~6 -zfE{m*y#ZgIq`>FT8&DjNwC`ADcT9CZ13Vo@2!mdf0ARh~F7mVdXv-^~gtE$B0M#JI -z=l5N1D3@`g1a`EVBE9)V0wbxqp}TxRRY29NxqnhpAAOqRr=!#XUvk*)&4XA~_K&GL -zP%Ng?1fqEV*+R;5nbuq$lt2ndiW%a=VgZDzottZXxV052fGn?MPF9|`gkpbodhv^_ -z-s2PI93Wm?0#?W`R92%R+-bna{XC8lejWpISuM%WYY>FdT{n~eB>YYfxPB#FOOEk* -zo)W0j(!d%Bs06qPZwR^Jx19(ugvh(9+|C{FGttbrvJ|1;;?)zwLQCbX@e8fu1DRaf -zV6Ks{6V}+61Kn~!jmT6;N14dSS&c*&ktN6>#a$7_tpluFw;xVJKfRDfJz~g|1%`8v -zX6v?8abhAQKOtmOu*Z8xs0zc+E3Gt}Y|pAAlG^N;wsZZxlfNfG;rZ7OyJtI$01L%C4f$E$6c#I~`pO{nw(6IuCCc{}xIlQt^Jo7j~ -zVHQ#W)WK;o0cwgA!!_RoVGu@b%NcMI1Jfm$ke$kl@WxgUYl-8J7v|nxzCBQm3Fu(63$oVT?Ua`Ymu6dCYWppDD-rI4&jykr_z -zDaMrCbm43n`ZNmA1dDjg{eM&Y|G5))XvB740~pJL1;gFv{T72j0}+i1iF8O>q|S>} -zTR>J6>`llcbir8pIdex{GLMACtoD_UDgXy7`Y3=6C`Oy<%VdqF=}_!hlfgE=9Q#=7XZ<63{;i$GOF*PmH@cA~hqU7jtPX(ZMFC{w3lJJ)B -z&QRqI!lkRLY$s;knjoWk#t65+8<*I54WtW+0;$SJA9;w~s=uoq55+z$?=B@6ow%ue -zXcOW1R;e?uNNB-K)d12oS7^RM_&7g6?ai61xAwCfv`rn%gaG$(G7m~m&@ol|(+i8H -zQioLhUaTh@Lb;J^rs%`N_M#Zt%N4YDGI6K_gvQy?dW2vo#^836nB@l}P4%I*futX^ -zD2>&r2de1mae8IA7cjgAikb?vBdqe#O6Z$RC9qny@x1${;74MJU6z7uB~ -zG8FS4`<ImEZ3aHS<8;ZcDrWJ -z-CMic1tY0Kw(ZCg#DebVXt`wD0`HYNHh`~DMOpCf4*iKUdUFT^wxK+krFYdU`Ka1= -za+#oP`W<|BC&0GNUBMJHXkF0P^_TU@CXs12P7_*UAz$Ytr>}Oj0-N~$Cn5JWj8VtL -zK_#IY$mN507zO2Q4n69e#vQz%QM|Hi$@Yg*;(gORZ2F&y$df!d8dXNZ-1nw$_v@He -za83^jjsn%``pZxr -zD`%#&US3jhT#C+-O{P2#WY|Cj%EvxtY)DgU?9^3iLy|m%Quz-di3V>Ej9gAVFFM{} -z`F+Y~SUz^O$nZ@@BImKT=n%}<%aO|ZDDkb`oABB(rgr*cXtw3%Q%`1$WV-gojlixQ -z4|s%kLe|0-DLTz9-=x+KgOT0UkAmo4aUVKM>n}G5;@GklB2D=$kyyX?&9$7b68UX! -z@A&Y@GT1}iKM5_e4@nH5VDS(!n-b;mrWRy6!AiMWGEr=X)4;2brJXF5;NxY`|G-lS3WvN=I& -z7P>1tr0>@)5``ks7ay1kEHiKDA`bnY$c}vuS@gDC`y23j!5VzTkyquYaE_s)#Be)4 -zD&^?RWhE2S1$7NsJz>aKs1JRM3wd^IOC(GWG4NFa>EfLu-k~`xG$!BK63HB>=UPXn -zcRNqqS%2d&N$xP5ocYmPKf!!(FE&oA&&oj+icNd)wM?~e_a}%tg%8=CDVvwKeB1nn -z5=qEH6l-!kM%=zomC%&J2Syu9LSN2|1CF^2Ic8TJqD}6pTL7aNIabHSgE_`9Usbd^GLAB!|@tJr)30>kR3g(Nve4tA4h+wIs-Ohti$UWw0FgZC-Kcke6=_fBfV< -z-;AT-Lvr3fKTT{ndOS=@pzTtE33?q0_CM?hD>7TQb!7ni3#!K9*HO+s17}bHPncA< -z@OrGl2tD(~?-z=D&Yq+^cgc>&aNPBr2Ag*Etwvj%P-3az42!FKuY>^JI&3&sj@7}; -z#-|7WbnW|Xv*KtM4L-zYY-{l(;PK}Jfvxl>Nnl$>pWa=>J)q(3?KG`QlEhX#PGYp+ -z1ZEZ!ejpkuj;z%Xf_JS%nIyFP_27T=l!%X%pYn`5lLI(De_RS~SJ56gJTK0uhbjzv -zP5#zXv{0{Nvfyh>VBhn$xk4D(pah=XeQ6T(#EJtm!HmGBg)id))@yHvG&_#8)8d#F -zC9EF&EX1Fh*7V-IDH5gk@)A6YfTi)Iv#nEJKh>@=8N0Us!_fCz0byLU^N}@rsmgk4 -zpJ>V1j(vg_I3MnXZ=0w&cSxU`p8M`DABt_!LxRw&y!t<@D~PNqm<#D$Ami=coh#zXhVi> -zGYzD5c1sbYh~7OCHxK@s_8!5nNBcJ6rJqby$3$*NTO2A1%je^o?^C=8BSE+G_)w9v -zQ!S3I|LVD5xYs)-u7OKMou(=cyT`L(`tc0$j&iZQcmL#G%|Gj?mOBp}xUc&4SA5)7 -zD{L|N^WuNcoDY6JFI!hQJ#RkLYSjAX6ls9!eA@zP!Sxhzn}^E@?ulO_S|=Wq5~)8d -z5`N|L2kBa@H%u>`ycilaq)^X0xL5Zksk8P(Ljzh9a1{5#&Vj595W{IX`LSc=D)-fq -zW|ymF`SDf?H}xi(M;GPFREY@%8JQxF%S-e -zysKxO?*cjXmczQDJWJed&|*_svl3x;Ez}=^wI8 -za4rQu_Sg66ZGH#CIbL%xqSC-3q8FnyAX)*W{eJ;zfHmp=P|HpbB)uypx?=zS!MUy! -XCj1SXu1eWOLk}=DvNEjK_k8$29Wh(^ - -literal 2138 -zcmV-g2&MOlP)#K|x7LNl{TzSy@?OVPR=$X>oCJd3kw;hK7!g -zj+T~|o}Qkjrlzj0uC}(ey}iA@zP`uD$Is8t*VotI-{0rw=kM?D|NsB8mOm>10004W -zQchC_(k}Hqr63TNTr{{C=O#FR>^a2U(@my1V5t3gJy|mks(m!JC -zPL&|zUZST7CkqPDVNq|pIWRw?b>eT{a`8k-s*uU)V{#L`)#R17Jk%of!dA40ur&`Ng7C>0Q5jkAg^eD2lT5VSSQ -zr`FiX$6`w@u)Fb@z-cITZ{bILaaH)272IG -zjQZfY1`_w7yj|u=fy0tXlrXb4-UV!Jsg!ij7tb2h=gtObD@b-5itrVW=?in(qZR0+ -zDlsfs;JtmcpjhLK0E}$Fi|AnxH}md5Vmu)fca*wdxUq4-YiunrZ@^=jvw-Ag#dVm> -za7r)ptbm3PQ=3DJ4ugCdnx`DZ%|w^k7{JP2Y)A-aqNv2>3{5hW+7?}X5bcbwk}}@0 -z*7=xwW47{ct<^J@;0$DIBY2HBW3H$3)C;~6X>o`T#ucoH^ktt1UN7k(_rqZS&_EtdgjPBG{B` -zXXZJ+sR%tQE$KEaP~!Yp;vJ4V1i!&a-t_%~oa`MzzO7X#w_3H_ry4_9UT)~q~=;25gt;=Po -z-e5628FCVM@32)pJcZAPpWRO>!RXBZ=Y6QP?5M{3sx5erqO3_n&w8*UZfn)(~=%i#%Wbe(2S%ZK;6_aO^C3 -z-Ue4CGWO3KTs1Ng(N+=Mu5VM9q-y~_D9IY=e&nnn0mJET`y#PxQCLz7{nzOkQu2v3 -z67nL8S{+>|qGc$n+3)w5a6Iikzf|?GD&JG9rw95}Gv%x$mmuDI$q;0z*6YfEg=Ure -zT0QDPYb75a=yNN<6G-c151i5-ZH~}rXfgEbHfmr|$jyH}(KI&%V^4^lL_%iWIxMb_ -zKU=w;iOSglYvWS)jyI!6aM!G9*=~W+IarsPH6W0|G?jF?X4Gcyhrt_ -z4eMJjFi0-Id!T3jk9ZRQN0tlaEH7MCvTsBj+4r1pDK+;SJ@s|{TR8uC)b`O+^iP_H -zEcd@0M&{?M-2A^5y$v)6(fvLB0i&Rmm@Aw&bdsAsY -zMFfF1PFeUysvP0bLC9?7-jihoKR@4pG@(b1oOz^Y2j@XETF^7Jmdd;N;d)&U53nKW -zqVsb4P=;Ysj<=G@v|;$_m-Z8I2zqY}x*<8iAfh-FJGxd*b!!vVC@t{I8+XV -zo4$5?+oDklG+>9)cAPhL>9~!NgFfSu)DEwz<2WZpb4)EF62X{Frys{{g%iV*=9fuy -ze`B}njeJ8Z$$>U9T)+vl;-rHz>En)fvyJaZj7Pmqz0npORWibp%sh_Y_d_Z5RxA9U -zx_PaQM_WBKirWDs(p*w8I&#AgsSA9IYHF0?HbRKb`TPfsbMgejbZ!6!%CkUe?fA?KWSXVmh#%ZO%p1roQb0jx=mWf{Q -zTV(G#I$Nm}+KSC^`paJ8<(&eUfdP|E#dC*4gKB&Q>tdGtx6wu(Z@S -zFx59OR7ft$EH0^Z$gM0c$xPNuE!ImZEy&L+(M!(H1pxGM5`k?PNh1IN05f`2Saefq -zXKrD1b#i3@0C?InH%KzEOg1%6G%`#~G)hfQGfc9uG_^=FFf>a`woI}B0Fg!r?!%X) -Q<^TWy07*qoM6N<$f^)ze9{>OV - --- -2.5.0 - diff --git a/0003-Generate-and-install-the-default-sddm.conf-after-sdd.patch b/0003-Generate-and-install-the-default-sddm.conf-after-sdd.patch deleted file mode 100644 index d5b0ca1..0000000 --- a/0003-Generate-and-install-the-default-sddm.conf-after-sdd.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 7efe53000c49fb6ce808286b15283d2da05b0c52 Mon Sep 17 00:00:00 2001 -From: Jerome Leclanche -Date: Thu, 5 Nov 2015 18:55:02 +0200 -Subject: [PATCH 03/34] Generate and install the default sddm.conf after sddm - is built - -Fixes #463 ---- - src/daemon/CMakeLists.txt | 9 +++++++++ - 1 file changed, 9 insertions(+) - -diff --git a/src/daemon/CMakeLists.txt b/src/daemon/CMakeLists.txt -index 07a0a3d..1ae70e1 100644 ---- a/src/daemon/CMakeLists.txt -+++ b/src/daemon/CMakeLists.txt -@@ -45,3 +45,12 @@ if(JOURNALD_FOUND) - endif() - - install(TARGETS sddm DESTINATION "${CMAKE_INSTALL_BINDIR}") -+ -+# Generate and install the default config file -+add_custom_command(COMMAND sddm --example-config > "${CMAKE_BINARY_DIR}/sddm.conf" -+ OUTPUT "${CMAKE_BINARY_DIR}/sddm.conf" -+ COMMENT "Generate default sddm.conf file" -+ DEPENDS sddm -+) -+add_custom_target(generate_config_file ALL DEPENDS "${CMAKE_BINARY_DIR}/sddm.conf") -+install(FILES "${CMAKE_BINARY_DIR}/sddm.conf" DESTINATION "${CMAKE_INSTALL_FULL_SYSCONFDIR}") --- -2.5.0 - diff --git a/0004-Add-a-config-option-to-enable-avatars.patch b/0004-Add-a-config-option-to-enable-avatars.patch deleted file mode 100644 index 4eaa162..0000000 --- a/0004-Add-a-config-option-to-enable-avatars.patch +++ /dev/null @@ -1,82 +0,0 @@ -From 17b3db31d9c75a197b3509f786bc646ab6dce17d Mon Sep 17 00:00:00 2001 -From: Jerome Leclanche -Date: Thu, 5 Nov 2015 17:18:46 +0200 -Subject: [PATCH 04/34] Add a config option to enable avatars - -Closes #281 ---- - ChangeLog | 1 + - data/man/sddm.conf.rst.in | 7 +++++++ - src/common/Configuration.h | 1 + - src/greeter/UserModel.cpp | 25 +++++++++++++++++-------- - 4 files changed, 26 insertions(+), 8 deletions(-) - -diff --git a/data/man/sddm.conf.rst.in b/data/man/sddm.conf.rst.in -index a916e27..18aedf4 100644 ---- a/data/man/sddm.conf.rst.in -+++ b/data/man/sddm.conf.rst.in -@@ -60,6 +60,13 @@ OPTIONS - Name of the cursor theme to be set before starting - the display server. - -+`EnableAvatars=` -+ When enabled, home directories are searched for ".face.icon" images to -+ display as their avatars. This can be slow on some file systems. -+ When disabled, all avatars will be default. Themes may choose to hide -+ them altogether. -+ Default value is true. -+ - [XDisplay] section: - - `ServerPath=` -diff --git a/src/common/Configuration.h b/src/common/Configuration.h -index 069fc16..763b74f 100644 ---- a/src/common/Configuration.h -+++ b/src/common/Configuration.h -@@ -49,6 +49,7 @@ namespace SDDM { - Entry(FacesDir, QString, _S(DATA_INSTALL_DIR "/faces"), _S("Face icon directory\n" - "The files should be in username.face.icon format")); - Entry(CursorTheme, QString, QString(), _S("Cursor theme")); -+ Entry(EnableAvatars, bool, true, _S("Enable display of custom user avatars")); - ); - // TODO: Not absolutely sure if everything belongs here. Xsessions, VT and probably some more seem universal - Section(XDisplay, -diff --git a/src/greeter/UserModel.cpp b/src/greeter/UserModel.cpp -index 5041fab..5c807bc 100644 ---- a/src/greeter/UserModel.cpp -+++ b/src/greeter/UserModel.cpp -@@ -81,14 +81,23 @@ namespace SDDM { - user->needsPassword = strcmp(current_pw->pw_passwd, "") != 0; - - // search for face icon -- QString userFace = QStringLiteral("%1/.face.icon").arg(user->homeDir); -- QString systemFace = QStringLiteral("%1/%2.face.icon").arg(mainConfig.Theme.FacesDir.get()).arg(user->name); -- if (QFile::exists(userFace)) -- user->icon = userFace; -- else if (QFile::exists(systemFace)) -- user->icon = systemFace; -- else -- user->icon = QStringLiteral("%1/default.face.icon").arg(mainConfig.Theme.FacesDir.get()); -+ QString facesDir = mainConfig.Theme.FacesDir.get(); -+ QString defaultFace = QStringLiteral("%1/default.face.icon").arg(facesDir); -+ bool avatarsEnabled = mainConfig.Theme.EnableAvatars.get(); -+ -+ if (avatarsEnabled) { -+ QString userFace = QStringLiteral("%1/.face.icon").arg(user->homeDir); -+ QString systemFace = QStringLiteral("%1/%2.face.icon").arg(facesDir).arg(user->name); -+ -+ if (QFile::exists(userFace)) -+ user->icon = userFace; -+ else if (QFile::exists(systemFace)) -+ user->icon = systemFace; -+ else -+ user->icon = defaultFace; -+ } else { -+ user->icon = defaultFace; -+ } - - // add user - d->users << user; --- -2.5.0 - diff --git a/0005-Use-.face.icon-instead-of-default.face.icon-and-rena.patch b/0005-Use-.face.icon-instead-of-default.face.icon-and-rena.patch deleted file mode 100644 index f685f5c..0000000 --- a/0005-Use-.face.icon-instead-of-default.face.icon-and-rena.patch +++ /dev/null @@ -1,486 +0,0 @@ -From 58b794bb2a2fd407a08b6c4d9eb4f156823b34f1 Mon Sep 17 00:00:00 2001 -From: Jerome Leclanche -Date: Thu, 5 Nov 2015 17:37:35 +0200 -Subject: [PATCH 05/34] Use .face.icon instead of default.face.icon, and rename - the sources to .png - -Touches #174 ---- - data/CMakeLists.txt | 13 ++++++++++++- - data/faces/README | 3 ++- - data/faces/default.face.icon | Bin 4920 -> 0 bytes - data/faces/default.face.icon.png | Bin 0 -> 4920 bytes - data/faces/root.face.icon | Bin 5111 -> 0 bytes - data/faces/root.face.icon.png | Bin 0 -> 5111 bytes - src/greeter/UserModel.cpp | 2 +- - 7 files changed, 15 insertions(+), 3 deletions(-) - delete mode 100644 data/faces/default.face.icon - create mode 100644 data/faces/default.face.icon.png - delete mode 100644 data/faces/root.face.icon - create mode 100644 data/faces/root.face.icon.png - -diff --git a/data/CMakeLists.txt b/data/CMakeLists.txt -index 51f37ab..f3b5781 100644 ---- a/data/CMakeLists.txt -+++ b/data/CMakeLists.txt -@@ -1,4 +1,3 @@ --install(DIRECTORY "faces" DESTINATION "${DATA_INSTALL_DIR}") - install(DIRECTORY "flags" DESTINATION "${DATA_INSTALL_DIR}") - - install(FILES -@@ -8,6 +7,18 @@ install(FILES - ) - - install(FILES -+ "faces/root.face.icon.png" -+ DESTINATION "${DATA_INSTALL_DIR}/faces" -+ RENAME "root.face.icon" -+) -+ -+install(FILES -+ "faces/default.face.icon.png" -+ DESTINATION "${DATA_INSTALL_DIR}/faces" -+ RENAME ".face.icon" -+) -+ -+install(FILES - "scripts/Xsession" - "scripts/Xsetup" - "scripts/Xstop" -diff --git a/data/faces/README b/data/faces/README -index be871e1..85479ad 100644 ---- a/data/faces/README -+++ b/data/faces/README -@@ -1 +1,2 @@ --This files are directly copied from a KDE installation. -\ No newline at end of file -+These are the default avatars. -+They are installed to `.face.icon` and `root.face.icon`. See ../CMakeLists.txt. -diff --git a/data/faces/default.face.icon b/data/faces/default.face.icon -deleted file mode 100644 -index cd7c4fdeecce8508d39ffd927de81cf89cb334cd..0000000000000000000000000000000000000000 -GIT binary patch -literal 0 -HcmV?d00001 - -literal 4920 -zcmcgw`8(8o)c$;Dj2KI3@DP=eUG|+&#+IyELnh)uvL+H{h89Z?N%k3gjIxxJMwXFe -zZ<4(%Lou{4GKIpt-v8mf-k;7nzuf0s=f2K;opVwh>@4|^;z$4hpS2an2>@u{g#Z`l -zzVV7A2LK?%w#J-tj{W$9w31C6i@sB`I%OHyqzV@jI;O_Sn*`K#GSnwk4DFn1jvxIQ -zQ|0uO)E{tv@+mj!Z2MuLAY+6bcEeQH#E{B|<$lTU#i;^`5>)YHJGiSq -zpM6sz?{VA@R)+?^oGwA|LpKP?)b^c!>%1zJE{kkgESdYr|0y3v)I%j-qNGgn&S`~) -zFxgT_d~Nn#eY>IPHX&Xla=313#0TG&H1~r^yA01(;C&n<$?B&28s|OdM}aAW7|1em -zShW(IWxShJ7?vosa L!t+oqsnzWk2-9&Ij42SVwfmdmg(aosPbN%U)JM!KGLJC- -zIPjiA0go<6dY{&hSG-AaZE3WI+4ma|6Ui)S@Pxv@`(+)4x91qLBjK}syx}5S_Vjo@ -zj2(23FLOJCwN_%s-izxJIi+-q&dV&iE2^xojl#=rZCVm6Q(4|4B715l(cyZ0tvs#J -z4#7%04d$REn@XMCrIIkHIjyO@o&$61wEa8_T|B^mz>^(BteUFb4*Fc4XM6Q-)ye(NP?9-)I~FV?9d)2)6mzR2p^%I7eW -zO4f;3qTc0j=-h3jskJ`L=m62m#5Jt~K5h2K(O9}st{gmg`(GS7X78lRUeNo^dOWdzpyU?i54`__~h7Oax>z`yYjlz^G{<(FBv4YS8m3UZlAi`l#cs51xfU1_#&{p(|PF~iwmlJZA~1j -z=npsDB!m!HRJ?S;-u$?y6Tbn~4s8}LxHT>12-3b-(=)xd9$p(Vzy#3clV4ma2O$ML -zsYV@Q**`~Q3Ug*{N4e!;NNR4ZKp;o)T9}s+ -zRwVYWo?$7_%KtZY;|tRC*|GowVW*YAr?ovWXM@=t+SJWj@-=lqHNLYE~M!$C0mct0D9Gw -zFeiF%!W`Dt;!Fg8{craB=epu -z1EZPO=~Ar}x6n0C2^oG~1)yD)^NI}(;V68Pft8X@9M+voxmd+d~(H7ClnEH3z3aC1t&16AvcB5l6nt; -zbCD&pw;_b+8YF3{QocKSLS)%ZdX33c3zvi&c(l^> -zqr0lQQTvZJgf#8evr7I-@vl7GcM(w<_g&6OuXrcBPJ>Tb9*p^Bir`V0JiWuE!1-p4 -zbI2}Ep`Y*NIf%@^@n+1v3Opohm-9GCU903;X4^Opj*UI6eT=|Z>&F3X2OUT^`T;ix*ssImmWE6k~GB+CP -zw?FVQg8@~>4*ax`>~NPnfq%STZg1nh?qDIWi1vQ2r7;&osrYp1?N0HjYdrME{eINL -zCy39S1a`#%q7?0A4XN=TGk@wlVf!#6{mc3DP!;SUSIekgz4OFBRAGcEvityXpRI2H -z;KJsdr75UB&}jle3*fTHAH*L>KlD|pmr -zIr@Z39sBOW2$Nq>)Cu^B9F~1#tnB;3PnlE~khf -z`r`6AXUnQ2@rCl>Bt3>ojPe{`(J8Kydicdw0I$M?w6Cljzon5S@_D-|e!hyMr(Qse -z5X5*n9q>$VrgErU0rmvhI*018(=q4Sl89}#_Gz(RdCG&iG|>VmVkZ}-*)oXIV&&?V -zIqF^f^z@l{N{~-W5JH1(Q^|4i=&`P|fNcg}dl2Y*YkHrDTJ_x<)P};X#Ugod^h2pu -z=5($;eJ(I?Ev0I_m#tZR@SfT(+Z1lMI};2Fdy#@%MizVx@ww5O+&d3AMN_q}i^j`% -z6RamrNf&S?+Em_g1cjCdVg>(l>O?cx|7<0U%;84Ted`Yi(r>I=%*zhbwo8Klm}+^0 -zILtP~7@Ie4Djg{JYp)~ne?<)0DMMH3sZe*FvtM75M_^NIFveR?%p7lAsC?^|pa6;( -z%Hdp-$vH{USAPYJtg+j=%0T?saeXrmj(>#-=i4T()3xb&{5^S3#a9Qs;Cqlg&v>d> -zdG}@*D*6Qe*OLdU)QWuZ+Ahu*u`N0DCutv*PBYby+4Z0wP4z4@hvc0(>=qeqX{HJV9EldJ1QY^$T%GU?!?zs~ -za@?tk)Nx=(iE{^qR}atVoR{LMd6B2%*!qhnCJ})p5^1S1@_z6DuD3L;;UR{3`3HLx -z{^?I^;~N_u>MCkF0jZ{QxcAK53rOnkpNL_v^8dt=A_{g6QJ6k&50?nzg`S+PF>{NApW4!+FW5ihXCFDolM9KO>3G)0#ANGZzsM9nLKiYi;wmq7>e=TJ6Rcw`_WXy)|;LwkwiHIXN--v~T??5{XBA4-F=950a}aQ`uA+* -z%NLQnCVdE|V`1+uu7kho=Poto=ikJ!mn`pRZiG3PF~vX^<|YYhhm5jR1O4Gi>zu>t -zFEVcF8KxXtm~FawZE?<)uZ=NlYwT&pj*m6InmRh2qcv|b#E9QZ@Yc7ISZ?tn`Re41 -zcMd3U47dn&Dsofp%B2`1m2eQlze2vRqr7R1u63XtyCE90BsDroBK=W3qm)=kE0mjti&042Xj;%}SyX#y0EAl@{DW~QzCD6RtwU>Kpcz_&q=$4KW=Bj65*V$05zdcO$S5LSP -z?Ikr0#$@aB?jRi7bl+*6N$;#N@;s}XY=~cDyfdl~aZoj95T--w=ZeNR-&}1Dhk&sDB&J)JR3eMSV;9f=1Vyd|k$XuiME2vQ`zpuEd -zpVKv`bIIt*J)MDt=Ua6QI%K>is${iz96#fAWya;`5zb;6WWTG88m%g7!?2mOO1*}p -z!k81hkB0kCtJdLf{9K&8)BY#^(3W(0NV8}8^>Nua^Y$(sVcsiwU{GLqPh+m$&{6`q -zUCY~E7!p@}vg8%6;QBqi>JLFlpedC#@a}%cgGBz#&L)`3{1p=y-=h&^#*u!UQ$tBc -zVv%}J@e4Ch%(?pbJ?3jwfev^4yKx%2cbUQBMh`Ws+I~|cUZ2Y9_*-DGFEA^aEs^v-h0l@^Y!7^=()D3%OXNLEEZ+ -z$4+{IY{E!nj{XXb^XPw~de$2qs#Ee+wxj61! -z`pwt-i0sEqH&>9sNWYBSwWe61u1Q!SHpOd))NQWf67Q4yiDe!Id6cUsR9##^u`~>C -zTVck*y(vU^WL}=xZjSlpS1A9_ja+iaWM|;V*DeGS)zbxqHylwd4%xa?e0J_RZky4g -zwRwiwP_Es??67{oJmMQ(eX3!8gYlX?-RFp;_OUJ=Uv9n?r`Wx&m>l}lmPG$Sq`!)6 -zW~*nptk8$Xx?u06GOFDyz*1C?CpB>Eylcwmx0#hbpTsr7+{86FpHY@G4~dnpRpyL# -zxb$?h7qvh7Ve;;0^c$Jvt4@wY=~mki)rbRqxa60%n_7Y_ibGdyr&gBCRCeNS7Aq_a -zdynOMHB$N{l}klhG6#I8d52DI#&|ZDcD&CNgt};{E|Jb&zbRZgT=`@WS*P^&gjNUeclQrhe_)`8)82vL3Zvt6latYXgm5ZvNvDg(;0u -zANn(c!G`5@E>^TjopaUMzefh2yTn1u2Vw`Wi^_3bPWDYW_vd)>jjyWy-|4=4+fnG~ -zrj`JyhTW;@FN}liSJ{;8wf=v@T4G;`X+?Qo6lnbx;{=0K&EFBcDKF0afHg%${?jc< -ztNbV9>GwfvjRJezrgtB1&B9p8jOT?RYxZMMz5U|rVr!ntlJvEz{969q=81`v+jlcu -z>+7P-TP7+5@bF1_Kf{FX#rU|(gPR3ql9kVwo^1-3=#K9wPZ_&LU3osB3=X}S3PF@g -z7{2{TqBNfxXAgP93HE5|GScN*7YpbZPJalOHB5nS9cc&?-5D5C1ZZht{OJkzVG*iUE=a$dwpaK1 -zfeVn0w?s?(mk+|;vsO=_E3QFjNSvrFWEn`22k3H;k^(!1M&ke90vKK3|1wvOApU~! -fev@uBG_c{q+VdEAc+S@TM+{h-+hOWYW0U>|lk^G) - -diff --git a/data/faces/default.face.icon.png b/data/faces/default.face.icon.png -new file mode 100644 -index 0000000000000000000000000000000000000000..cd7c4fdeecce8508d39ffd927de81cf89cb334cd -GIT binary patch -literal 4920 -zcmcgw`8(8o)c$;Dj2KI3@DP=eUG|+&#+IyELnh)uvL+H{h89Z?N%k3gjIxxJMwXFe -zZ<4(%Lou{4GKIpt-v8mf-k;7nzuf0s=f2K;opVwh>@4|^;z$4hpS2an2>@u{g#Z`l -zzVV7A2LK?%w#J-tj{W$9w31C6i@sB`I%OHyqzV@jI;O_Sn*`K#GSnwk4DFn1jvxIQ -zQ|0uO)E{tv@+mj!Z2MuLAY+6bcEeQH#E{B|<$lTU#i;^`5>)YHJGiSq -zpM6sz?{VA@R)+?^oGwA|LpKP?)b^c!>%1zJE{kkgESdYr|0y3v)I%j-qNGgn&S`~) -zFxgT_d~Nn#eY>IPHX&Xla=313#0TG&H1~r^yA01(;C&n<$?B&28s|OdM}aAW7|1em -zShW(IWxShJ7?vosa L!t+oqsnzWk2-9&Ij42SVwfmdmg(aosPbN%U)JM!KGLJC- -zIPjiA0go<6dY{&hSG-AaZE3WI+4ma|6Ui)S@Pxv@`(+)4x91qLBjK}syx}5S_Vjo@ -zj2(23FLOJCwN_%s-izxJIi+-q&dV&iE2^xojl#=rZCVm6Q(4|4B715l(cyZ0tvs#J -z4#7%04d$REn@XMCrIIkHIjyO@o&$61wEa8_T|B^mz>^(BteUFb4*Fc4XM6Q-)ye(NP?9-)I~FV?9d)2)6mzR2p^%I7eW -zO4f;3qTc0j=-h3jskJ`L=m62m#5Jt~K5h2K(O9}st{gmg`(GS7X78lRUeNo^dOWdzpyU?i54`__~h7Oax>z`yYjlz^G{<(FBv4YS8m3UZlAi`l#cs51xfU1_#&{p(|PF~iwmlJZA~1j -z=npsDB!m!HRJ?S;-u$?y6Tbn~4s8}LxHT>12-3b-(=)xd9$p(Vzy#3clV4ma2O$ML -zsYV@Q**`~Q3Ug*{N4e!;NNR4ZKp;o)T9}s+ -zRwVYWo?$7_%KtZY;|tRC*|GowVW*YAr?ovWXM@=t+SJWj@-=lqHNLYE~M!$C0mct0D9Gw -zFeiF%!W`Dt;!Fg8{craB=epu -z1EZPO=~Ar}x6n0C2^oG~1)yD)^NI}(;V68Pft8X@9M+voxmd+d~(H7ClnEH3z3aC1t&16AvcB5l6nt; -zbCD&pw;_b+8YF3{QocKSLS)%ZdX33c3zvi&c(l^> -zqr0lQQTvZJgf#8evr7I-@vl7GcM(w<_g&6OuXrcBPJ>Tb9*p^Bir`V0JiWuE!1-p4 -zbI2}Ep`Y*NIf%@^@n+1v3Opohm-9GCU903;X4^Opj*UI6eT=|Z>&F3X2OUT^`T;ix*ssImmWE6k~GB+CP -zw?FVQg8@~>4*ax`>~NPnfq%STZg1nh?qDIWi1vQ2r7;&osrYp1?N0HjYdrME{eINL -zCy39S1a`#%q7?0A4XN=TGk@wlVf!#6{mc3DP!;SUSIekgz4OFBRAGcEvityXpRI2H -z;KJsdr75UB&}jle3*fTHAH*L>KlD|pmr -zIr@Z39sBOW2$Nq>)Cu^B9F~1#tnB;3PnlE~khf -z`r`6AXUnQ2@rCl>Bt3>ojPe{`(J8Kydicdw0I$M?w6Cljzon5S@_D-|e!hyMr(Qse -z5X5*n9q>$VrgErU0rmvhI*018(=q4Sl89}#_Gz(RdCG&iG|>VmVkZ}-*)oXIV&&?V -zIqF^f^z@l{N{~-W5JH1(Q^|4i=&`P|fNcg}dl2Y*YkHrDTJ_x<)P};X#Ugod^h2pu -z=5($;eJ(I?Ev0I_m#tZR@SfT(+Z1lMI};2Fdy#@%MizVx@ww5O+&d3AMN_q}i^j`% -z6RamrNf&S?+Em_g1cjCdVg>(l>O?cx|7<0U%;84Ted`Yi(r>I=%*zhbwo8Klm}+^0 -zILtP~7@Ie4Djg{JYp)~ne?<)0DMMH3sZe*FvtM75M_^NIFveR?%p7lAsC?^|pa6;( -z%Hdp-$vH{USAPYJtg+j=%0T?saeXrmj(>#-=i4T()3xb&{5^S3#a9Qs;Cqlg&v>d> -zdG}@*D*6Qe*OLdU)QWuZ+Ahu*u`N0DCutv*PBYby+4Z0wP4z4@hvc0(>=qeqX{HJV9EldJ1QY^$T%GU?!?zs~ -za@?tk)Nx=(iE{^qR}atVoR{LMd6B2%*!qhnCJ})p5^1S1@_z6DuD3L;;UR{3`3HLx -z{^?I^;~N_u>MCkF0jZ{QxcAK53rOnkpNL_v^8dt=A_{g6QJ6k&50?nzg`S+PF>{NApW4!+FW5ihXCFDolM9KO>3G)0#ANGZzsM9nLKiYi;wmq7>e=TJ6Rcw`_WXy)|;LwkwiHIXN--v~T??5{XBA4-F=950a}aQ`uA+* -z%NLQnCVdE|V`1+uu7kho=Poto=ikJ!mn`pRZiG3PF~vX^<|YYhhm5jR1O4Gi>zu>t -zFEVcF8KxXtm~FawZE?<)uZ=NlYwT&pj*m6InmRh2qcv|b#E9QZ@Yc7ISZ?tn`Re41 -zcMd3U47dn&Dsofp%B2`1m2eQlze2vRqr7R1u63XtyCE90BsDroBK=W3qm)=kE0mjti&042Xj;%}SyX#y0EAl@{DW~QzCD6RtwU>Kpcz_&q=$4KW=Bj65*V$05zdcO$S5LSP -z?Ikr0#$@aB?jRi7bl+*6N$;#N@;s}XY=~cDyfdl~aZoj95T--w=ZeNR-&}1Dhk&sDB&J)JR3eMSV;9f=1Vyd|k$XuiME2vQ`zpuEd -zpVKv`bIIt*J)MDt=Ua6QI%K>is${iz96#fAWya;`5zb;6WWTG88m%g7!?2mOO1*}p -z!k81hkB0kCtJdLf{9K&8)BY#^(3W(0NV8}8^>Nua^Y$(sVcsiwU{GLqPh+m$&{6`q -zUCY~E7!p@}vg8%6;QBqi>JLFlpedC#@a}%cgGBz#&L)`3{1p=y-=h&^#*u!UQ$tBc -zVv%}J@e4Ch%(?pbJ?3jwfev^4yKx%2cbUQBMh`Ws+I~|cUZ2Y9_*-DGFEA^aEs^v-h0l@^Y!7^=()D3%OXNLEEZ+ -z$4+{IY{E!nj{XXb^XPw~de$2qs#Ee+wxj61! -z`pwt-i0sEqH&>9sNWYBSwWe61u1Q!SHpOd))NQWf67Q4yiDe!Id6cUsR9##^u`~>C -zTVck*y(vU^WL}=xZjSlpS1A9_ja+iaWM|;V*DeGS)zbxqHylwd4%xa?e0J_RZky4g -zwRwiwP_Es??67{oJmMQ(eX3!8gYlX?-RFp;_OUJ=Uv9n?r`Wx&m>l}lmPG$Sq`!)6 -zW~*nptk8$Xx?u06GOFDyz*1C?CpB>Eylcwmx0#hbpTsr7+{86FpHY@G4~dnpRpyL# -zxb$?h7qvh7Ve;;0^c$Jvt4@wY=~mki)rbRqxa60%n_7Y_ibGdyr&gBCRCeNS7Aq_a -zdynOMHB$N{l}klhG6#I8d52DI#&|ZDcD&CNgt};{E|Jb&zbRZgT=`@WS*P^&gjNUeclQrhe_)`8)82vL3Zvt6latYXgm5ZvNvDg(;0u -zANn(c!G`5@E>^TjopaUMzefh2yTn1u2Vw`Wi^_3bPWDYW_vd)>jjyWy-|4=4+fnG~ -zrj`JyhTW;@FN}liSJ{;8wf=v@T4G;`X+?Qo6lnbx;{=0K&EFBcDKF0afHg%${?jc< -ztNbV9>GwfvjRJezrgtB1&B9p8jOT?RYxZMMz5U|rVr!ntlJvEz{969q=81`v+jlcu -z>+7P-TP7+5@bF1_Kf{FX#rU|(gPR3ql9kVwo^1-3=#K9wPZ_&LU3osB3=X}S3PF@g -z7{2{TqBNfxXAgP93HE5|GScN*7YpbZPJalOHB5nS9cc&?-5D5C1ZZht{OJkzVG*iUE=a$dwpaK1 -zfeVn0w?s?(mk+|;vsO=_E3QFjNSvrFWEn`22k3H;k^(!1M&ke90vKK3|1wvOApU~! -fev@uBG_c{q+VdEAc+S@TM+{h-+hOWYW0U>|lk^G) - -literal 0 -HcmV?d00001 - -diff --git a/data/faces/root.face.icon b/data/faces/root.face.icon -deleted file mode 100644 -index 308496979d6665a8e87451d273ad14233f821a90..0000000000000000000000000000000000000000 -GIT binary patch -literal 0 -HcmV?d00001 - -literal 5111 -zcmcgw_fyl&*Zm|R^xlOCNC)XnczBS|rT3yzrHIrZEfgWBlpumgl@dY|MWjAL5F|mG -z5;}r_B~(Fap@Ts3<&Svh{bhI0&Y3;;&fVFwbI~?dCM=8si~sC-|f)j4C@p01w;L7=u6>pmmgtCv0uGhS~xhBbG4{m=OY+P#7c= -zY=UY)ot)j3W7qw@C;z2*nf=SiS_i>LV?UCROwjO@YSf{2e(K3je8hlJh2n -zdRUvaFXT2>NFho$qHy>j0*qus%FF*^Hv~QNO~Eta)H@D!cynTnhF6`NmScpGGTnS# -zVNmQQEh)M*8WQcxm)Hv3_Tki||Ca?em@~Fq4jz;3A;Ei(+E$M#+?y&7bCc)2=e6b$ -z=?Fb;RR6$H2WlO?+0lB5(!AiAaU-CMsgpIn=*}BkZj|xxzOrajv^s(zyDz#pD7)$G -z1Vr{@)MJNYIr{O%H@1R_To1Z!wXV8}vfXD#PWzODZSMALgW1?mk2ClF{PIcs>Y4a( -z^)e?E8`7T$Z5-W^mr&EBJyYnbkp}WK&JGOysB^GYbFJ_Q7?Ke=#pw;j*7he}LeOO| -z7l#>|-7UGndi`z)9Q5k>g4Dd^ym3X)*Sti81^Wl6qB!!~f(=kRze}Rq@KO$wcr?mX -zBH7AR7N*IKvb{uAL+FN)Q^J0eSA(AAS -zblIW!5=fk^YXjELJU_ -zG96=j%7MD6XR!ZHGixeCEsR~I!SZ2>3sxK?nY -zfloo?>H0c@1tfYk-ST4B=WM-YC$yKb<-MwT(2t+CnqPTPJk41+KjKS_pOOJ=AS%b8 -z94HAqpvr{Z+ODe{m;ROX?f#VlY2dCJ<-@Goe;*sN8w!LP8`8$CxKW`)nVW{yBwXb< -zQYeC+8&%z}Yvphf9DWcA6=cFqdf5PfU0Ga{P4ODTCxLa`4#20K`OW&Xw?w)+NQiWW -z%MFmf^3i;`P_R!D8K@74djJo_$6xQDnz>P@Rjil68q&a~kFXHw$Dxg9iRPdi$bYsN -zpQ>p#xW_&>EQfHrKJN(fNAH9}6a2p`#(*^S_7kK5`2{EEgq!`-qV?hSfI!z@5B>d< -zt3Y$E*8H#d$`Xr;wmt_XuN24 -zFFQOLw4P-CZ9;4;MX~+q3?=-aAWw-YzAQh2u~iQUQ9CSfj0I_7;>o1-n<#Okze(J+P+Bn)Se!;tw;sSKmmjBzw1kZAepzVBA={-0J7wohWHQ -zy|3Bh=90ii2}=@d&~8Botb^jSDcWcPdPTZz-b=v`V2HQYzS3L}y`|)9SM!syQBSy0 -zf14i7d~DjYo*py=6?3Cvn;hBTW)&uC^fG`tnmWMHr$H%b{)jTaU^ZfKe?QB^Wr)Vi -zpn%>KIdDJKj@RB&N4)B_5Q;9*>_tS9JR@AEu$Km#Ycjs9gq>`>HdVe-pfd>PhbY(p -ze|9P&sJ`rb0cN0ACUvbsY(Vzz>QoijM!0$!@~rtq&?1MI|93?ya2TB`MfYIH@U>i0+f6r!P<1G-(9{AHOGhY?%G#D=TTLw5-K=J~6 -zfE{m*y#ZgIq`>FT8&DjNwC`ADcT9CZ13Vo@2!mdf0ARh~F7mVdXv-^~gtE$B0M#JI -z=l5N1D3@`g1a`EVBE9)V0wbxqp}TxRRY29NxqnhpAAOqRr=!#XUvk*)&4XA~_K&GL -zP%Ng?1fqEV*+R;5nbuq$lt2ndiW%a=VgZDzottZXxV052fGn?MPF9|`gkpbodhv^_ -z-s2PI93Wm?0#?W`R92%R+-bna{XC8lejWpISuM%WYY>FdT{n~eB>YYfxPB#FOOEk* -zo)W0j(!d%Bs06qPZwR^Jx19(ugvh(9+|C{FGttbrvJ|1;;?)zwLQCbX@e8fu1DRaf -zV6Ks{6V}+61Kn~!jmT6;N14dSS&c*&ktN6>#a$7_tpluFw;xVJKfRDfJz~g|1%`8v -zX6v?8abhAQKOtmOu*Z8xs0zc+E3Gt}Y|pAAlG^N;wsZZxlfNfG;rZ7OyJtI$01L%C4f$E$6c#I~`pO{nw(6IuCCc{}xIlQt^Jo7j~ -zVHQ#W)WK;o0cwgA!!_RoVGu@b%NcMI1Jfm$ke$kl@WxgUYl-8J7v|nxzCBQm3Fu(63$oVT?Ua`Ymu6dCYWppDD-rI4&jykr_z -zDaMrCbm43n`ZNmA1dDjg{eM&Y|G5))XvB740~pJL1;gFv{T72j0}+i1iF8O>q|S>} -zTR>J6>`llcbir8pIdex{GLMACtoD_UDgXy7`Y3=6C`Oy<%VdqF=}_!hlfgE=9Q#=7XZ<63{;i$GOF*PmH@cA~hqU7jtPX(ZMFC{w3lJJ)B -z&QRqI!lkRLY$s;knjoWk#t65+8<*I54WtW+0;$SJA9;w~s=uoq55+z$?=B@6ow%ue -zXcOW1R;e?uNNB-K)d12oS7^RM_&7g6?ai61xAwCfv`rn%gaG$(G7m~m&@ol|(+i8H -zQioLhUaTh@Lb;J^rs%`N_M#Zt%N4YDGI6K_gvQy?dW2vo#^836nB@l}P4%I*futX^ -zD2>&r2de1mae8IA7cjgAikb?vBdqe#O6Z$RC9qny@x1${;74MJU6z7uB~ -zG8FS4`<ImEZ3aHS<8;ZcDrWJ -z-CMic1tY0Kw(ZCg#DebVXt`wD0`HYNHh`~DMOpCf4*iKUdUFT^wxK+krFYdU`Ka1= -za+#oP`W<|BC&0GNUBMJHXkF0P^_TU@CXs12P7_*UAz$Ytr>}Oj0-N~$Cn5JWj8VtL -zK_#IY$mN507zO2Q4n69e#vQz%QM|Hi$@Yg*;(gORZ2F&y$df!d8dXNZ-1nw$_v@He -za83^jjsn%``pZxr -zD`%#&US3jhT#C+-O{P2#WY|Cj%EvxtY)DgU?9^3iLy|m%Quz-di3V>Ej9gAVFFM{} -z`F+Y~SUz^O$nZ@@BImKT=n%}<%aO|ZDDkb`oABB(rgr*cXtw3%Q%`1$WV-gojlixQ -z4|s%kLe|0-DLTz9-=x+KgOT0UkAmo4aUVKM>n}G5;@GklB2D=$kyyX?&9$7b68UX! -z@A&Y@GT1}iKM5_e4@nH5VDS(!n-b;mrWRy6!AiMWGEr=X)4;2brJXF5;NxY`|G-lS3WvN=I& -z7P>1tr0>@)5``ks7ay1kEHiKDA`bnY$c}vuS@gDC`y23j!5VzTkyquYaE_s)#Be)4 -zD&^?RWhE2S1$7NsJz>aKs1JRM3wd^IOC(GWG4NFa>EfLu-k~`xG$!BK63HB>=UPXn -zcRNqqS%2d&N$xP5ocYmPKf!!(FE&oA&&oj+icNd)wM?~e_a}%tg%8=CDVvwKeB1nn -z5=qEH6l-!kM%=zomC%&J2Syu9LSN2|1CF^2Ic8TJqD}6pTL7aNIabHSgE_`9Usbd^GLAB!|@tJr)30>kR3g(Nve4tA4h+wIs-Ohti$UWw0FgZC-Kcke6=_fBfV< -z-;AT-Lvr3fKTT{ndOS=@pzTtE33?q0_CM?hD>7TQb!7ni3#!K9*HO+s17}bHPncA< -z@OrGl2tD(~?-z=D&Yq+^cgc>&aNPBr2Ag*Etwvj%P-3az42!FKuY>^JI&3&sj@7}; -z#-|7WbnW|Xv*KtM4L-zYY-{l(;PK}Jfvxl>Nnl$>pWa=>J)q(3?KG`QlEhX#PGYp+ -z1ZEZ!ejpkuj;z%Xf_JS%nIyFP_27T=l!%X%pYn`5lLI(De_RS~SJ56gJTK0uhbjzv -zP5#zXv{0{Nvfyh>VBhn$xk4D(pah=XeQ6T(#EJtm!HmGBg)id))@yHvG&_#8)8d#F -zC9EF&EX1Fh*7V-IDH5gk@)A6YfTi)Iv#nEJKh>@=8N0Us!_fCz0byLU^N}@rsmgk4 -zpJ>V1j(vg_I3MnXZ=0w&cSxU`p8M`DABt_!LxRw&y!t<@D~PNqm<#D$Ami=coh#zXhVi> -zGYzD5c1sbYh~7OCHxK@s_8!5nNBcJ6rJqby$3$*NTO2A1%je^o?^C=8BSE+G_)w9v -zQ!S3I|LVD5xYs)-u7OKMou(=cyT`L(`tc0$j&iZQcmL#G%|Gj?mOBp}xUc&4SA5)7 -zD{L|N^WuNcoDY6JFI!hQJ#RkLYSjAX6ls9!eA@zP!Sxhzn}^E@?ulO_S|=Wq5~)8d -z5`N|L2kBa@H%u>`ycilaq)^X0xL5Zksk8P(Ljzh9a1{5#&Vj595W{IX`LSc=D)-fq -zW|ymF`SDf?H}xi(M;GPFREY@%8JQxF%S-e -zysKxO?*cjXmczQDJWJed&|*_svl3x;Ez}=^wI8 -za4rQu_Sg66ZGH#CIbL%xqSC-3q8FnyAX)*W{eJ;zfHmp=P|HpbB)uypx?=zS!MUy! -XCj1SXu1eWOLk}=DvNEjK_k8$29Wh(^ - -diff --git a/data/faces/root.face.icon.png b/data/faces/root.face.icon.png -new file mode 100644 -index 0000000000000000000000000000000000000000..308496979d6665a8e87451d273ad14233f821a90 -GIT binary patch -literal 5111 -zcmcgw_fyl&*Zm|R^xlOCNC)XnczBS|rT3yzrHIrZEfgWBlpumgl@dY|MWjAL5F|mG -z5;}r_B~(Fap@Ts3<&Svh{bhI0&Y3;;&fVFwbI~?dCM=8si~sC-|f)j4C@p01w;L7=u6>pmmgtCv0uGhS~xhBbG4{m=OY+P#7c= -zY=UY)ot)j3W7qw@C;z2*nf=SiS_i>LV?UCROwjO@YSf{2e(K3je8hlJh2n -zdRUvaFXT2>NFho$qHy>j0*qus%FF*^Hv~QNO~Eta)H@D!cynTnhF6`NmScpGGTnS# -zVNmQQEh)M*8WQcxm)Hv3_Tki||Ca?em@~Fq4jz;3A;Ei(+E$M#+?y&7bCc)2=e6b$ -z=?Fb;RR6$H2WlO?+0lB5(!AiAaU-CMsgpIn=*}BkZj|xxzOrajv^s(zyDz#pD7)$G -z1Vr{@)MJNYIr{O%H@1R_To1Z!wXV8}vfXD#PWzODZSMALgW1?mk2ClF{PIcs>Y4a( -z^)e?E8`7T$Z5-W^mr&EBJyYnbkp}WK&JGOysB^GYbFJ_Q7?Ke=#pw;j*7he}LeOO| -z7l#>|-7UGndi`z)9Q5k>g4Dd^ym3X)*Sti81^Wl6qB!!~f(=kRze}Rq@KO$wcr?mX -zBH7AR7N*IKvb{uAL+FN)Q^J0eSA(AAS -zblIW!5=fk^YXjELJU_ -zG96=j%7MD6XR!ZHGixeCEsR~I!SZ2>3sxK?nY -zfloo?>H0c@1tfYk-ST4B=WM-YC$yKb<-MwT(2t+CnqPTPJk41+KjKS_pOOJ=AS%b8 -z94HAqpvr{Z+ODe{m;ROX?f#VlY2dCJ<-@Goe;*sN8w!LP8`8$CxKW`)nVW{yBwXb< -zQYeC+8&%z}Yvphf9DWcA6=cFqdf5PfU0Ga{P4ODTCxLa`4#20K`OW&Xw?w)+NQiWW -z%MFmf^3i;`P_R!D8K@74djJo_$6xQDnz>P@Rjil68q&a~kFXHw$Dxg9iRPdi$bYsN -zpQ>p#xW_&>EQfHrKJN(fNAH9}6a2p`#(*^S_7kK5`2{EEgq!`-qV?hSfI!z@5B>d< -zt3Y$E*8H#d$`Xr;wmt_XuN24 -zFFQOLw4P-CZ9;4;MX~+q3?=-aAWw-YzAQh2u~iQUQ9CSfj0I_7;>o1-n<#Okze(J+P+Bn)Se!;tw;sSKmmjBzw1kZAepzVBA={-0J7wohWHQ -zy|3Bh=90ii2}=@d&~8Botb^jSDcWcPdPTZz-b=v`V2HQYzS3L}y`|)9SM!syQBSy0 -zf14i7d~DjYo*py=6?3Cvn;hBTW)&uC^fG`tnmWMHr$H%b{)jTaU^ZfKe?QB^Wr)Vi -zpn%>KIdDJKj@RB&N4)B_5Q;9*>_tS9JR@AEu$Km#Ycjs9gq>`>HdVe-pfd>PhbY(p -ze|9P&sJ`rb0cN0ACUvbsY(Vzz>QoijM!0$!@~rtq&?1MI|93?ya2TB`MfYIH@U>i0+f6r!P<1G-(9{AHOGhY?%G#D=TTLw5-K=J~6 -zfE{m*y#ZgIq`>FT8&DjNwC`ADcT9CZ13Vo@2!mdf0ARh~F7mVdXv-^~gtE$B0M#JI -z=l5N1D3@`g1a`EVBE9)V0wbxqp}TxRRY29NxqnhpAAOqRr=!#XUvk*)&4XA~_K&GL -zP%Ng?1fqEV*+R;5nbuq$lt2ndiW%a=VgZDzottZXxV052fGn?MPF9|`gkpbodhv^_ -z-s2PI93Wm?0#?W`R92%R+-bna{XC8lejWpISuM%WYY>FdT{n~eB>YYfxPB#FOOEk* -zo)W0j(!d%Bs06qPZwR^Jx19(ugvh(9+|C{FGttbrvJ|1;;?)zwLQCbX@e8fu1DRaf -zV6Ks{6V}+61Kn~!jmT6;N14dSS&c*&ktN6>#a$7_tpluFw;xVJKfRDfJz~g|1%`8v -zX6v?8abhAQKOtmOu*Z8xs0zc+E3Gt}Y|pAAlG^N;wsZZxlfNfG;rZ7OyJtI$01L%C4f$E$6c#I~`pO{nw(6IuCCc{}xIlQt^Jo7j~ -zVHQ#W)WK;o0cwgA!!_RoVGu@b%NcMI1Jfm$ke$kl@WxgUYl-8J7v|nxzCBQm3Fu(63$oVT?Ua`Ymu6dCYWppDD-rI4&jykr_z -zDaMrCbm43n`ZNmA1dDjg{eM&Y|G5))XvB740~pJL1;gFv{T72j0}+i1iF8O>q|S>} -zTR>J6>`llcbir8pIdex{GLMACtoD_UDgXy7`Y3=6C`Oy<%VdqF=}_!hlfgE=9Q#=7XZ<63{;i$GOF*PmH@cA~hqU7jtPX(ZMFC{w3lJJ)B -z&QRqI!lkRLY$s;knjoWk#t65+8<*I54WtW+0;$SJA9;w~s=uoq55+z$?=B@6ow%ue -zXcOW1R;e?uNNB-K)d12oS7^RM_&7g6?ai61xAwCfv`rn%gaG$(G7m~m&@ol|(+i8H -zQioLhUaTh@Lb;J^rs%`N_M#Zt%N4YDGI6K_gvQy?dW2vo#^836nB@l}P4%I*futX^ -zD2>&r2de1mae8IA7cjgAikb?vBdqe#O6Z$RC9qny@x1${;74MJU6z7uB~ -zG8FS4`<ImEZ3aHS<8;ZcDrWJ -z-CMic1tY0Kw(ZCg#DebVXt`wD0`HYNHh`~DMOpCf4*iKUdUFT^wxK+krFYdU`Ka1= -za+#oP`W<|BC&0GNUBMJHXkF0P^_TU@CXs12P7_*UAz$Ytr>}Oj0-N~$Cn5JWj8VtL -zK_#IY$mN507zO2Q4n69e#vQz%QM|Hi$@Yg*;(gORZ2F&y$df!d8dXNZ-1nw$_v@He -za83^jjsn%``pZxr -zD`%#&US3jhT#C+-O{P2#WY|Cj%EvxtY)DgU?9^3iLy|m%Quz-di3V>Ej9gAVFFM{} -z`F+Y~SUz^O$nZ@@BImKT=n%}<%aO|ZDDkb`oABB(rgr*cXtw3%Q%`1$WV-gojlixQ -z4|s%kLe|0-DLTz9-=x+KgOT0UkAmo4aUVKM>n}G5;@GklB2D=$kyyX?&9$7b68UX! -z@A&Y@GT1}iKM5_e4@nH5VDS(!n-b;mrWRy6!AiMWGEr=X)4;2brJXF5;NxY`|G-lS3WvN=I& -z7P>1tr0>@)5``ks7ay1kEHiKDA`bnY$c}vuS@gDC`y23j!5VzTkyquYaE_s)#Be)4 -zD&^?RWhE2S1$7NsJz>aKs1JRM3wd^IOC(GWG4NFa>EfLu-k~`xG$!BK63HB>=UPXn -zcRNqqS%2d&N$xP5ocYmPKf!!(FE&oA&&oj+icNd)wM?~e_a}%tg%8=CDVvwKeB1nn -z5=qEH6l-!kM%=zomC%&J2Syu9LSN2|1CF^2Ic8TJqD}6pTL7aNIabHSgE_`9Usbd^GLAB!|@tJr)30>kR3g(Nve4tA4h+wIs-Ohti$UWw0FgZC-Kcke6=_fBfV< -z-;AT-Lvr3fKTT{ndOS=@pzTtE33?q0_CM?hD>7TQb!7ni3#!K9*HO+s17}bHPncA< -z@OrGl2tD(~?-z=D&Yq+^cgc>&aNPBr2Ag*Etwvj%P-3az42!FKuY>^JI&3&sj@7}; -z#-|7WbnW|Xv*KtM4L-zYY-{l(;PK}Jfvxl>Nnl$>pWa=>J)q(3?KG`QlEhX#PGYp+ -z1ZEZ!ejpkuj;z%Xf_JS%nIyFP_27T=l!%X%pYn`5lLI(De_RS~SJ56gJTK0uhbjzv -zP5#zXv{0{Nvfyh>VBhn$xk4D(pah=XeQ6T(#EJtm!HmGBg)id))@yHvG&_#8)8d#F -zC9EF&EX1Fh*7V-IDH5gk@)A6YfTi)Iv#nEJKh>@=8N0Us!_fCz0byLU^N}@rsmgk4 -zpJ>V1j(vg_I3MnXZ=0w&cSxU`p8M`DABt_!LxRw&y!t<@D~PNqm<#D$Ami=coh#zXhVi> -zGYzD5c1sbYh~7OCHxK@s_8!5nNBcJ6rJqby$3$*NTO2A1%je^o?^C=8BSE+G_)w9v -zQ!S3I|LVD5xYs)-u7OKMou(=cyT`L(`tc0$j&iZQcmL#G%|Gj?mOBp}xUc&4SA5)7 -zD{L|N^WuNcoDY6JFI!hQJ#RkLYSjAX6ls9!eA@zP!Sxhzn}^E@?ulO_S|=Wq5~)8d -z5`N|L2kBa@H%u>`ycilaq)^X0xL5Zksk8P(Ljzh9a1{5#&Vj595W{IX`LSc=D)-fq -zW|ymF`SDf?H}xi(M;GPFREY@%8JQxF%S-e -zysKxO?*cjXmczQDJWJed&|*_svl3x;Ez}=^wI8 -za4rQu_Sg66ZGH#CIbL%xqSC-3q8FnyAX)*W{eJ;zfHmp=P|HpbB)uypx?=zS!MUy! -XCj1SXu1eWOLk}=DvNEjK_k8$29Wh(^ - -literal 0 -HcmV?d00001 - -diff --git a/src/greeter/UserModel.cpp b/src/greeter/UserModel.cpp -index 5c807bc..66ab6fb 100644 ---- a/src/greeter/UserModel.cpp -+++ b/src/greeter/UserModel.cpp -@@ -82,7 +82,7 @@ namespace SDDM { - - // search for face icon - QString facesDir = mainConfig.Theme.FacesDir.get(); -- QString defaultFace = QStringLiteral("%1/default.face.icon").arg(facesDir); -+ QString defaultFace = QStringLiteral("%1/.face.icon").arg(facesDir); - bool avatarsEnabled = mainConfig.Theme.EnableAvatars.get(); - - if (avatarsEnabled) { --- -2.5.0 - diff --git a/0006-Fix-mixed-indents.patch b/0006-Fix-mixed-indents.patch deleted file mode 100644 index d685f73..0000000 --- a/0006-Fix-mixed-indents.patch +++ /dev/null @@ -1,46 +0,0 @@ -From e646bd39ba743e2540aaa7d22fd4633e5d9a6966 Mon Sep 17 00:00:00 2001 -From: Jerome Leclanche -Date: Thu, 5 Nov 2015 20:03:22 +0200 -Subject: [PATCH 06/34] Fix mixed indents - ---- - data/man/sddm.conf.rst.in | 4 ++-- - src/greeter/UserModel.cpp | 4 ++-- - 2 files changed, 4 insertions(+), 4 deletions(-) - -diff --git a/data/man/sddm.conf.rst.in b/data/man/sddm.conf.rst.in -index 18aedf4..d5263e0 100644 ---- a/data/man/sddm.conf.rst.in -+++ b/data/man/sddm.conf.rst.in -@@ -74,8 +74,8 @@ OPTIONS - Default value is "/usr/bin/X". - - `ServerArguments=` -- Arguments to the X server. -- Default value is "-nolisten tcp". -+ Arguments to the X server. -+ Default value is "-nolisten tcp". - - `XephyrPath=` - Path of the Xephyr. -diff --git a/src/greeter/UserModel.cpp b/src/greeter/UserModel.cpp -index 66ab6fb..f56c67a 100644 ---- a/src/greeter/UserModel.cpp -+++ b/src/greeter/UserModel.cpp -@@ -55,11 +55,11 @@ namespace SDDM { - while ((current_pw = getpwent()) != nullptr) { - - // skip entries with uids smaller than minimum uid -- if ( int(current_pw->pw_uid) < mainConfig.Users.MinimumUid.get()) -+ if (int(current_pw->pw_uid) < mainConfig.Users.MinimumUid.get()) - continue; - - // skip entries with uids greater than maximum uid -- if ( int(current_pw->pw_uid) > mainConfig.Users.MaximumUid.get()) -+ if (int(current_pw->pw_uid) > mainConfig.Users.MaximumUid.get()) - continue; - // skip entries with user names in the hide users list - if (mainConfig.Users.HideUsers.get().contains(QString::fromLocal8Bit(current_pw->pw_name))) --- -2.5.0 - diff --git a/0007-Fall-back-to-regular-login-when-autologin-fails.patch b/0007-Fall-back-to-regular-login-when-autologin-fails.patch deleted file mode 100644 index e2527ec..0000000 --- a/0007-Fall-back-to-regular-login-when-autologin-fails.patch +++ /dev/null @@ -1,88 +0,0 @@ -From cb768895c8e0d21c689d63f69d7ac668fe4e8fa6 Mon Sep 17 00:00:00 2001 -From: Jerome Leclanche -Date: Thu, 5 Nov 2015 21:28:22 +0200 -Subject: [PATCH 07/34] Fall back to regular login when autologin fails - -Fixes #316 ---- - src/daemon/Display.cpp | 42 +++++++++++++++++++++++++----------------- - src/daemon/Display.h | 1 + - 2 files changed, 26 insertions(+), 17 deletions(-) - -diff --git a/src/daemon/Display.cpp b/src/daemon/Display.cpp -index 8de59e5..6bc9965 100644 ---- a/src/daemon/Display.cpp -+++ b/src/daemon/Display.cpp -@@ -103,6 +103,29 @@ namespace SDDM { - m_displayServer->start(); - } - -+ bool Display::attemptAutologin() { -+ Session::Type sessionType = Session::X11Session; -+ -+ // determine session type -+ const QString &autologinSession = mainConfig.Autologin.Session.get(); -+ if (findSessionEntry(mainConfig.XDisplay.SessionDir.get(), autologinSession)) { -+ sessionType = Session::X11Session; -+ } else if (findSessionEntry(mainConfig.WaylandDisplay.SessionDir.get(), autologinSession)) { -+ sessionType = Session::WaylandSession; -+ } else { -+ qCritical() << "Unable to find autologin session entry" << autologinSession; -+ return false; -+ } -+ -+ Session session; -+ session.setTo(sessionType, autologinSession); -+ -+ m_auth->setAutologin(true); -+ startAuth(mainConfig.Autologin.User.get(), QString(), session); -+ -+ return true; -+ } -+ - void Display::displayServerStarted() { - // check flag - if (m_started) -@@ -122,25 +145,10 @@ namespace SDDM { - // set flags - m_started = true; - -- // determine session type -- const QString &autologinSession = mainConfig.Autologin.Session.get(); -- Session session; -- if (findSessionEntry(mainConfig.XDisplay.SessionDir.get(), autologinSession)) { -- session.setTo(Session::X11Session, autologinSession); -- } else if (findSessionEntry(mainConfig.WaylandDisplay.SessionDir.get(), autologinSession)) { -- session.setTo(Session::WaylandSession, autologinSession); -- } else { -- qCritical() << "Unable to find autologin session entry" << autologinSession; -- emit loginFailed(m_socket); -+ bool success = attemptAutologin(); -+ if (success) { - return; - } -- -- // start session -- m_auth->setAutologin(true); -- startAuth(mainConfig.Autologin.User.get(), QString(), session); -- -- // return -- return; - } - - // start socket server -diff --git a/src/daemon/Display.h b/src/daemon/Display.h -index dc46463..3d6d6a5 100644 ---- a/src/daemon/Display.h -+++ b/src/daemon/Display.h -@@ -60,6 +60,7 @@ namespace SDDM { - void login(QLocalSocket *socket, - const QString &user, const QString &password, - const Session &session); -+ bool attemptAutologin(); - void displayServerStarted(); - - signals: --- -2.5.0 - diff --git a/0008-Enable-PrivateTmp-again.patch b/0008-Enable-PrivateTmp-again.patch deleted file mode 100644 index 9a2ec46..0000000 --- a/0008-Enable-PrivateTmp-again.patch +++ /dev/null @@ -1,26 +0,0 @@ -From c7409687ad26b7f47a2cd73eddb8617ef7cd4701 Mon Sep 17 00:00:00 2001 -From: Pier Luigi Fiorini -Date: Thu, 5 Nov 2015 23:29:59 +0100 -Subject: [PATCH 08/34] Enable PrivateTmp again - -Let's see if #225 is still happening. ---- - services/sddm.service.in | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/services/sddm.service.in b/services/sddm.service.in -index b0cea02..c476441 100644 ---- a/services/sddm.service.in -+++ b/services/sddm.service.in -@@ -7,7 +7,7 @@ After=systemd-user-sessions.service getty@tty1.service plymouth-quit.service - [Service] - ExecStart=@CMAKE_INSTALL_FULL_BINDIR@/sddm - Restart=always --#PrivateTmp=yes -+PrivateTmp=yes - - [Install] - Alias=display-manager.service --- -2.5.0 - diff --git a/0009-Improve-config-file-comments.patch b/0009-Improve-config-file-comments.patch deleted file mode 100644 index af9caba..0000000 --- a/0009-Improve-config-file-comments.patch +++ /dev/null @@ -1,115 +0,0 @@ -From f64bd7a92728158a78653dd6e8373703168b11c6 Mon Sep 17 00:00:00 2001 -From: Jerome Leclanche -Date: Thu, 5 Nov 2015 20:44:58 +0200 -Subject: [PATCH 09/34] Improve config file comments - ---- - src/common/Configuration.h | 69 +++++++++++++++++++++++----------------------- - 1 file changed, 35 insertions(+), 34 deletions(-) - -diff --git a/src/common/Configuration.h b/src/common/Configuration.h -index 763b74f..1997fe0 100644 ---- a/src/common/Configuration.h -+++ b/src/common/Configuration.h -@@ -36,63 +36,64 @@ namespace SDDM { - Config(MainConfig, QStringLiteral(CONFIG_FILE), - enum NumState { NUM_NONE, NUM_SET_ON, NUM_SET_OFF }; - -- // Name Type Default value Description -- Entry(HaltCommand, QString, _S(HALT_COMMAND), _S("Halt command")); -- Entry(RebootCommand, QString, _S(REBOOT_COMMAND), _S("Reboot command")); -- Entry(Numlock, NumState, NUM_NONE, _S("Initial NumLock state\n" -- "Valid values: on|off|none\n" -- "If property is set to none, numlock won't be changed")); -- // Name Entries (but it's a regular class again) -+ // Name Type Default value Description -+ Entry(HaltCommand, QString, _S(HALT_COMMAND), _S("Halt command")); -+ Entry(RebootCommand, QString, _S(REBOOT_COMMAND), _S("Reboot command")); -+ Entry(Numlock, NumState, NUM_NONE, _S("Initial NumLock state. Can be on, off or none.\n" -+ "If property is set to none, numlock won't be changed\n" -+ "NOTE: Currently ignored if autologin is enabled.")); -+ // Name Entries (but it's a regular class again) - Section(Theme, - Entry(ThemeDir, QString, _S(DATA_INSTALL_DIR "/themes"), _S("Theme directory path")); - Entry(Current, QString, _S("maui"), _S("Current theme name")); -- Entry(FacesDir, QString, _S(DATA_INSTALL_DIR "/faces"), _S("Face icon directory\n" -- "The files should be in username.face.icon format")); -- Entry(CursorTheme, QString, QString(), _S("Cursor theme")); -+ Entry(FacesDir, QString, _S(DATA_INSTALL_DIR "/faces"), _S("Global directory for user avatars\n" -+ "The files should be named .face.icon")); -+ Entry(CursorTheme, QString, QString(), _S("Cursor theme used in the greeter")); - Entry(EnableAvatars, bool, true, _S("Enable display of custom user avatars")); - ); -+ - // TODO: Not absolutely sure if everything belongs here. Xsessions, VT and probably some more seem universal - Section(XDisplay, -- Entry(ServerPath, QString, _S("/usr/bin/X"), _S("X server path")); -- Entry(ServerArguments, QString, _S("-nolisten tcp"), _S("X server arguments")); -- Entry(XephyrPath, QString, _S("/usr/bin/Xephyr"), _S("Xephyr path")); -- Entry(XauthPath, QString, _S("/usr/bin/xauth"), _S("Xauth path")); -- Entry(SessionDir, QString, _S("/usr/share/xsessions"), _S("Session description directory")); -- Entry(SessionCommand, QString, _S(SESSION_COMMAND), _S("Xsession script path\n" -- "A script to execute when starting the desktop session")); -- Entry(DisplayCommand, QString, _S(DATA_INSTALL_DIR "/scripts/Xsetup"), _S("Xsetup script path\n" -- "A script to execute when starting the display server")); -- Entry(DisplayStopCommand, QString, _S(DATA_INSTALL_DIR "/scripts/Xstop"), _S("Xstop script path\n" -- "A script to execute when stopping the display server")); -- Entry(MinimumVT, int, MINIMUM_VT, _S("Minimum VT\n" -- "The lowest virtual terminal number that will be used.")); -+ Entry(ServerPath, QString, _S("/usr/bin/X"), _S("Path to X server binary")); -+ Entry(ServerArguments, QString, _S("-nolisten tcp"), _S("Arguments passed to the X server invocation")); -+ Entry(XephyrPath, QString, _S("/usr/bin/Xephyr"), _S("Path to Xephyr binary")); -+ Entry(XauthPath, QString, _S("/usr/bin/xauth"), _S("Path to xauth binary")); -+ Entry(SessionDir, QString, _S("/usr/share/xsessions"), _S("Directory containing available X sessions")); -+ Entry(SessionCommand, QString, _S(SESSION_COMMAND), _S("Path to a script to execute when starting the desktop session")); -+ Entry(DisplayCommand, QString, _S(DATA_INSTALL_DIR "/scripts/Xsetup"), _S("Path to a script to execute when starting the display server")); -+ Entry(DisplayStopCommand, QString, _S(DATA_INSTALL_DIR "/scripts/Xstop"), _S("Path to a script to execute when stopping the display server")); -+ Entry(MinimumVT, int, MINIMUM_VT, _S("The lowest virtual terminal number that will be used.")); - ); -+ - Section(WaylandDisplay, -- Entry(SessionDir, QString, _S("/usr/share/wayland-sessions"), _S("Session description directory")); -- Entry(SessionCommand, QString, _S(WAYLAND_SESSION_COMMAND), _S("Wayland session script path\n" -- "A script to execute when starting the desktop session")); -+ Entry(SessionDir, QString, _S("/usr/share/wayland-sessions"), _S("Directory containing available Wayland sessions")); -+ Entry(SessionCommand, QString, _S(WAYLAND_SESSION_COMMAND), _S("Path to a script to execute when starting the desktop session")); - ); -+ - Section(Users, -- Entry(DefaultPath, QString, _S("/bin:/usr/bin:/usr/local/bin"), _S("Default $PATH")); -+ Entry(DefaultPath, QString, _S("/bin:/usr/bin:/usr/local/bin"), _S("Default $PATH for logged in users")); - Entry(MinimumUid, int, UID_MIN, _S("Minimum user id for displayed users")); - Entry(MaximumUid, int, UID_MAX, _S("Maximum user id for displayed users")); -- Entry(HideUsers, QStringList, QStringList(), _S("Hidden users")); -- Entry(HideShells, QStringList, QStringList(), _S("Hidden shells\n" -+ Entry(HideUsers, QStringList, QStringList(), _S("Comma-separated list of users that should not be listed")); -+ Entry(HideShells, QStringList, QStringList(), _S("Comma-separated list of shells.\n" - "Users with these shells as their default won't be listed")); - Entry(RememberLastUser, bool, true, _S("Remember the last successfully logged in user")); - Entry(RememberLastSession, bool, true, _S("Remember the session of the last successfully logged in user")); - ); -+ - Section(Autologin, -- Entry(User, QString, QString(), _S("Autologin user")); -- Entry(Session, QString, QString(), _S("Autologin session")); -- Entry(Relogin, bool, false, _S("Autologin again on session exit")); -+ Entry(User, QString, QString(), _S("Username for autologin session")); -+ Entry(Session, QString, QString(), _S("Name of session file for autologin session")); -+ Entry(Relogin, bool, false, _S("Whether sddm should automatically log back into sessions when they exit")); - ); - ); - - Config(StateConfig, []()->QString{auto tmp = getpwnam("sddm"); return tmp ? QString::fromLocal8Bit(tmp->pw_dir) : QStringLiteral(STATE_DIR);}().append(QStringLiteral("/state.conf")), - Section(Last, -- Entry(Session, QString, QString(), _S("Name of the session file of the last session selected. This session will be preselected when the login screen shows up.")); -- Entry(User, QString, QString(), _S("Name of the last logged-in user. This username will be preselected/shown when the login screen shows up")); -+ Entry(Session, QString, QString(), _S("Name of the session for the last logged-in user.\n" -+ "This session will be preselected when the login screen appears.")); -+ Entry(User, QString, QString(), _S("Name of the last logged-in user.\n" -+ "This user will be preselected when the login screen appears")); - ); - ); - --- -2.5.0 - diff --git a/0010-elarun-Remove-duplicate-session-selector.patch b/0010-elarun-Remove-duplicate-session-selector.patch deleted file mode 100644 index 39f6313..0000000 --- a/0010-elarun-Remove-duplicate-session-selector.patch +++ /dev/null @@ -1,35 +0,0 @@ -From f19e0f3ce5ba9b31c9bc9aa08ec8805b933e5468 Mon Sep 17 00:00:00 2001 -From: Pier Luigi Fiorini -Date: Fri, 6 Nov 2015 08:16:28 +0100 -Subject: [PATCH 10/34] elarun: Remove duplicate session selector - -Closes #521 - -[ChangeLog][Themes] Remove duplicate session selector -from elarun. ---- - data/themes/elarun/Main.qml | 8 -------- - 1 file changed, 8 deletions(-) - -diff --git a/data/themes/elarun/Main.qml b/data/themes/elarun/Main.qml -index 28c0168..a83f0e7 100644 ---- a/data/themes/elarun/Main.qml -+++ b/data/themes/elarun/Main.qml -@@ -165,14 +165,6 @@ Rectangle { - spacing: 8 - - ImageButton { -- id: session_button -- source: "images/session_normal.png" -- onClicked: if (menu_session.state === "visible") menu_session.state = ""; else menu_session.state = "visible" -- -- KeyNavigation.backtab: login_button; KeyNavigation.tab: system_button -- } -- -- ImageButton { - id: system_button - source: "images/system_shutdown.png" - onClicked: sddm.powerOff() --- -2.5.0 - diff --git a/0012-Configurable-user-session-log.patch b/0012-Configurable-user-session-log.patch deleted file mode 100644 index 8c3686f..0000000 --- a/0012-Configurable-user-session-log.patch +++ /dev/null @@ -1,98 +0,0 @@ -From a935425e5f4af229680f0e5bda0a7898020a06c4 Mon Sep 17 00:00:00 2001 -From: Pier Luigi Fiorini -Date: Sat, 17 Oct 2015 18:29:20 +0200 -Subject: [PATCH 12/34] Configurable user session log - -See issue #135. - -[ChangeLog][Configuration] Add SessionLogFile to the XDisplay and -WaylandDisplay sections in order to make user session log location -configurable. ---- - data/man/sddm.conf.rst.in | 8 ++++++++ - src/common/Configuration.h | 2 ++ - src/helper/UserSession.cpp | 15 +++++++++++---- - 3 files changed, 21 insertions(+), 4 deletions(-) - -diff --git a/data/man/sddm.conf.rst.in b/data/man/sddm.conf.rst.in -index d5263e0..edce9cf 100644 ---- a/data/man/sddm.conf.rst.in -+++ b/data/man/sddm.conf.rst.in -@@ -93,6 +93,10 @@ OPTIONS - Path of script to execute when starting the desktop session. - Default value is "@SESSION_COMMAND@". - -+`SessionLogFile=` -+ Path to the user session log file, relative to the home directory. -+ Default value is ".cache/xsession-errors". -+ - `DisplayCommand=` - Path of script to execute when starting the display server. - Default value is "@DATA_INSTALL_DIR@/scripts/Xsetup". -@@ -117,6 +121,10 @@ OPTIONS - Path of script to execute when starting the desktop session. - Default value is "@WAYLAND_SESSION_COMMAND@". - -+`SessionLogFile=` -+ Path to the user session log file, relative to the home directory. -+ Default value is ".cache/wayland-errors". -+ - [Users] section: - - `DefaultPath=` -diff --git a/src/common/Configuration.h b/src/common/Configuration.h -index 1997fe0..89a57db 100644 ---- a/src/common/Configuration.h -+++ b/src/common/Configuration.h -@@ -60,6 +60,7 @@ namespace SDDM { - Entry(XauthPath, QString, _S("/usr/bin/xauth"), _S("Path to xauth binary")); - Entry(SessionDir, QString, _S("/usr/share/xsessions"), _S("Directory containing available X sessions")); - Entry(SessionCommand, QString, _S(SESSION_COMMAND), _S("Path to a script to execute when starting the desktop session")); -+ Entry(SessionLogFile, QString, _S(".cache/xsession-errors"), _S("Path to the user session log file")); - Entry(DisplayCommand, QString, _S(DATA_INSTALL_DIR "/scripts/Xsetup"), _S("Path to a script to execute when starting the display server")); - Entry(DisplayStopCommand, QString, _S(DATA_INSTALL_DIR "/scripts/Xstop"), _S("Path to a script to execute when stopping the display server")); - Entry(MinimumVT, int, MINIMUM_VT, _S("The lowest virtual terminal number that will be used.")); -@@ -68,6 +69,7 @@ namespace SDDM { - Section(WaylandDisplay, - Entry(SessionDir, QString, _S("/usr/share/wayland-sessions"), _S("Directory containing available Wayland sessions")); - Entry(SessionCommand, QString, _S(WAYLAND_SESSION_COMMAND), _S("Path to a script to execute when starting the desktop session")); -+ Entry(SessionLogFile, QString, _S(".cache/wayland-errors"), _S("Path to the user session log file")); - ); - - Section(Users, -diff --git a/src/helper/UserSession.cpp b/src/helper/UserSession.cpp -index 0c0ab2b..bd6d1c5 100644 ---- a/src/helper/UserSession.cpp -+++ b/src/helper/UserSession.cpp -@@ -134,17 +134,24 @@ namespace SDDM { - //we want to redirect after we setuid so that the log file is owned by the user - - // determine stderr log file based on session type -- QString fileName = sessionType == QStringLiteral("x11") -- ? QStringLiteral(".xsession-errors") : QStringLiteral(".wayland-errors"); -+ QString sessionLog = QStringLiteral("%1/%2") -+ .arg(QString::fromLocal8Bit(pw->pw_dir)) -+ .arg(sessionType == QStringLiteral("x11") -+ ? mainConfig.XDisplay.SessionLogFile.get() -+ : mainConfig.WaylandDisplay.SessionLogFile.get()); -+ -+ // create the path -+ QFileInfo finfo(sessionLog); -+ QDir().mkpath(finfo.absolutePath()); - - //swap the stderr pipe of this subprcess into a file -- int fd = ::open(qPrintable(fileName), O_WRONLY | O_CREAT | O_TRUNC, 0600); -+ int fd = ::open(qPrintable(sessionLog), O_WRONLY | O_CREAT | O_TRUNC, 0600); - if (fd >= 0) - { - dup2 (fd, STDERR_FILENO); - ::close(fd); - } else { -- qWarning() << "Could not open stderr to" << fileName; -+ qWarning() << "Could not open stderr to" << sessionLog; - } - - //redirect any stdout to /dev/null --- -2.5.0 - diff --git a/0013-Configurable-Xauthority-file.patch b/0013-Configurable-Xauthority-file.patch deleted file mode 100644 index d2d54ac..0000000 --- a/0013-Configurable-Xauthority-file.patch +++ /dev/null @@ -1,89 +0,0 @@ -From 467027b0168accd55e15303e5ba7348a6bfe95f5 Mon Sep 17 00:00:00 2001 -From: Pier Luigi Fiorini -Date: Sat, 17 Oct 2015 18:49:09 +0200 -Subject: [PATCH 13/34] Configurable Xauthority file - -See issue #135. - -[ChangeLog][Configuration] Add UserAuthFile to the XDisplay section. ---- - data/man/sddm.conf.rst.in | 4 ++++ - src/common/Configuration.h | 1 + - src/helper/Backend.cpp | 10 ++++++++-- - src/helper/UserSession.cpp | 5 +++++ - 4 files changed, 18 insertions(+), 2 deletions(-) - -diff --git a/data/man/sddm.conf.rst.in b/data/man/sddm.conf.rst.in -index edce9cf..8d8a7d4 100644 ---- a/data/man/sddm.conf.rst.in -+++ b/data/man/sddm.conf.rst.in -@@ -97,6 +97,10 @@ OPTIONS - Path to the user session log file, relative to the home directory. - Default value is ".cache/xsession-errors". - -+`UserAuthFile=` -+ Path to the Xauthority file, relative to the home directory. -+ Default value is ".Xauthority". -+ - `DisplayCommand=` - Path of script to execute when starting the display server. - Default value is "@DATA_INSTALL_DIR@/scripts/Xsetup". -diff --git a/src/common/Configuration.h b/src/common/Configuration.h -index 89a57db..5bd5296 100644 ---- a/src/common/Configuration.h -+++ b/src/common/Configuration.h -@@ -61,6 +61,7 @@ namespace SDDM { - Entry(SessionDir, QString, _S("/usr/share/xsessions"), _S("Directory containing available X sessions")); - Entry(SessionCommand, QString, _S(SESSION_COMMAND), _S("Path to a script to execute when starting the desktop session")); - Entry(SessionLogFile, QString, _S(".cache/xsession-errors"), _S("Path to the user session log file")); -+ Entry(UserAuthFile, QString, _S(".Xauthority"), _S("Path to the Xauthority file")); - Entry(DisplayCommand, QString, _S(DATA_INSTALL_DIR "/scripts/Xsetup"), _S("Path to a script to execute when starting the display server")); - Entry(DisplayStopCommand, QString, _S(DATA_INSTALL_DIR "/scripts/Xstop"), _S("Path to a script to execute when stopping the display server")); - Entry(MinimumVT, int, MINIMUM_VT, _S("The lowest virtual terminal number that will be used.")); -diff --git a/src/helper/Backend.cpp b/src/helper/Backend.cpp -index 12facb9..b19e6ed 100644 ---- a/src/helper/Backend.cpp -+++ b/src/helper/Backend.cpp -@@ -23,6 +23,7 @@ - - #include "backend/PamBackend.h" - #include "backend/PasswdBackend.h" -+#include "Configuration.h" - #include "UserSession.h" - - #include -@@ -62,8 +63,13 @@ namespace SDDM { - env.insert(QStringLiteral("SHELL"), QString::fromLocal8Bit(pw->pw_shell)); - env.insert(QStringLiteral("USER"), QString::fromLocal8Bit(pw->pw_name)); - env.insert(QStringLiteral("LOGNAME"), QString::fromLocal8Bit(pw->pw_name)); -- if (env.contains(QStringLiteral("DISPLAY")) && !env.contains(QStringLiteral("XAUTHORITY"))) -- env.insert(QStringLiteral("XAUTHORITY"), QStringLiteral("%1/.Xauthority").arg(QString::fromLocal8Bit(pw->pw_dir))); -+ if (env.contains(QStringLiteral("DISPLAY")) && !env.contains(QStringLiteral("XAUTHORITY"))) { -+ // determine Xauthority path -+ QString value = QStringLiteral("%1/%2") -+ .arg(QString::fromLocal8Bit(pw->pw_dir)) -+ .arg(mainConfig.XDisplay.UserAuthFile.get()); -+ env.insert(QStringLiteral("XAUTHORITY"), value); -+ } - // TODO: I'm fairly sure this shouldn't be done for PAM sessions, investigate! - m_app->session()->setProcessEnvironment(env); - } -diff --git a/src/helper/UserSession.cpp b/src/helper/UserSession.cpp -index bd6d1c5..0b16a9a 100644 ---- a/src/helper/UserSession.cpp -+++ b/src/helper/UserSession.cpp -@@ -173,6 +173,11 @@ namespace SDDM { - QString display = processEnvironment().value(QStringLiteral("DISPLAY")); - qDebug() << "Adding cookie to" << file; - -+ -+ // create the path -+ QFileInfo finfo(file); -+ QDir().mkpath(finfo.absolutePath()); -+ - QFile file_handler(file); - file_handler.open(QIODevice::WriteOnly); - file_handler.close(); --- -2.5.0 - diff --git a/0015-Expose-arrow-background-color.patch b/0015-Expose-arrow-background-color.patch deleted file mode 100644 index 150e452..0000000 --- a/0015-Expose-arrow-background-color.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 5447cc14400c913d385a4f3ed5a06ec3992023ad Mon Sep 17 00:00:00 2001 -From: Pier Luigi Fiorini -Date: Mon, 9 Nov 2015 03:41:04 +0100 -Subject: [PATCH 15/34] Expose arrow background color - -Let themes change the arrow background color. -Closes #542. - -[ChangeLog][Components] ComboBox now exposes the arrow background color -as "arrowColor" property. ---- - components/2.0/ComboBox.qml | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/components/2.0/ComboBox.qml b/components/2.0/ComboBox.qml -index d9989ac..01c1248 100644 ---- a/components/2.0/ComboBox.qml -+++ b/components/2.0/ComboBox.qml -@@ -36,6 +36,7 @@ FocusScope { - property font font - property alias model: listView.model - property int index: 0 -+ property alias arrowColor: arrow.color - property alias arrowIcon: arrowIcon.source - - property Component rowDelegate: defaultRowDelegate --- -2.5.0 - diff --git a/0020-Adds-a-count-property-to-UserModel.patch b/0020-Adds-a-count-property-to-UserModel.patch deleted file mode 100644 index 85b9344..0000000 --- a/0020-Adds-a-count-property-to-UserModel.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 40c981a7b39611ffe6570e37e2e9419c95114cf0 Mon Sep 17 00:00:00 2001 -From: Antonio Larrosa -Date: Wed, 11 Nov 2015 19:04:29 +0100 -Subject: [PATCH 20/34] Adds a "count" property to UserModel - -Adds a count property to UserModel so sddm themes can access the number of users in the system. -The name "count" is to mimic the "count" property in QML's standard ListModel. ---- - src/greeter/UserModel.h | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/greeter/UserModel.h b/src/greeter/UserModel.h -index 99d2770..e089b4d 100644 ---- a/src/greeter/UserModel.h -+++ b/src/greeter/UserModel.h -@@ -32,6 +32,7 @@ namespace SDDM { - Q_DISABLE_COPY(UserModel) - Q_PROPERTY(int lastIndex READ lastIndex CONSTANT) - Q_PROPERTY(QString lastUser READ lastUser CONSTANT) -+ Q_PROPERTY(int count READ rowCount CONSTANT) - public: - enum UserRoles { - NameRole = Qt::UserRole + 1, --- -2.5.0 - diff --git a/0021-Refactored-ConfigReader-is-matches-Default.patch b/0021-Refactored-ConfigReader-is-matches-Default.patch deleted file mode 100644 index ef2ed84..0000000 --- a/0021-Refactored-ConfigReader-is-matches-Default.patch +++ /dev/null @@ -1,104 +0,0 @@ -From 9d16882177a832fa855416c69bc817cee2903622 Mon Sep 17 00:00:00 2001 -From: Antonio Larrosa -Date: Wed, 11 Nov 2015 19:05:08 +0100 -Subject: [PATCH 21/34] Refactored ConfigReader::(is|matches)Default() - -Previously, ConfigReader::isDefault didn't return if the value is -the default value but if it matches the default value. So I renamed the -method to matchesDefault() and created a new isDefault() method -that really returns if the value comes from the default value or -it was read from the config file or set. - -So if the user sets a variable in the config file with the same value -as the default value, then matchesDefault() returns true, but -isDefault() returns false ---- - src/common/ConfigReader.cpp | 6 +++--- - src/common/ConfigReader.h | 12 +++++++++++- - 2 files changed, 14 insertions(+), 4 deletions(-) - -diff --git a/src/common/ConfigReader.cpp b/src/common/ConfigReader.cpp -index bdfd22a..cfc9940 100644 ---- a/src/common/ConfigReader.cpp -+++ b/src/common/ConfigReader.cpp -@@ -186,17 +186,17 @@ namespace SDDM { - * Initialization of the map of nondefault values to be saved - */ - if (section) { -- if (entry && !entry->isDefault()) -+ if (entry && !entry->matchesDefault()) - remainingEntries.insert(section, entry); - else - for (const ConfigEntryBase *b : section->entries().values()) -- if (!b->isDefault()) -+ if (!b->matchesDefault()) - remainingEntries.insert(section, b); - } - else { - for (const ConfigSection *s : m_sections) - for (const ConfigEntryBase *b : s->entries().values()) -- if (!b->isDefault()) -+ if (!b->matchesDefault()) - remainingEntries.insert(s, b); - } - -diff --git a/src/common/ConfigReader.h b/src/common/ConfigReader.h -index 29782be..1fb7fd2 100644 ---- a/src/common/ConfigReader.h -+++ b/src/common/ConfigReader.h -@@ -77,6 +77,7 @@ namespace SDDM { - virtual void setValue(const QString &str) = 0; - virtual QString toConfigShort() const = 0; - virtual QString toConfigFull() const = 0; -+ virtual bool matchesDefault() const = 0; - virtual bool isDefault() const = 0; - }; - -@@ -107,6 +108,7 @@ namespace SDDM { - m_description(description), - m_default(value), - m_value(value), -+ m_isDefault(true), - m_parent(parent) { - m_parent->m_entries[name] = this; - } -@@ -117,13 +119,19 @@ namespace SDDM { - - void set(const T val) { - m_value = val; -+ m_isDefault = false; - } - -- bool isDefault() const { -+ bool matchesDefault() const { - return m_value == m_default; - } - -+ bool isDefault() const { -+ return m_isDefault; -+ } -+ - bool setDefault() { -+ m_isDefault = true; - if (m_value == m_default) - return false; - m_value = m_default; -@@ -147,6 +155,7 @@ namespace SDDM { - - // specialised for QString - void setValue(const QString &str) { -+ m_isDefault = false; - QTextStream in(qPrintable(str)); - in >> m_value; - } -@@ -167,6 +176,7 @@ namespace SDDM { - const QString m_description; - T m_default; - T m_value; -+ bool m_isDefault; - ConfigSection *m_parent; - }; - --- -2.5.0 - diff --git a/0022-Defines-a-users-threshold-to-disable-avatars.patch b/0022-Defines-a-users-threshold-to-disable-avatars.patch deleted file mode 100644 index cc1df18..0000000 --- a/0022-Defines-a-users-threshold-to-disable-avatars.patch +++ /dev/null @@ -1,132 +0,0 @@ -From 668f7c9c08ce4aeee7cc4d2d3386522bfae32cfb Mon Sep 17 00:00:00 2001 -From: Antonio Larrosa -Date: Wed, 11 Nov 2015 19:05:36 +0100 -Subject: [PATCH 22/34] Defines a users threshold to disable avatars - -Defines a new config setting DisableAvatarsThreshold. -If the number of users in the system is greater than -DisableAvatarsThreshold then avatars are disabled unless -explicitly enabled with EnableAvatars. Also, UserModel -adds a new disableAvatarsThreshold property so themes can -decide if using that config setting to do further optimizations -if there's a large number of users (like for example, -not show a user list, but username/password editlines). ---- - src/common/Configuration.h | 3 +++ - src/greeter/UserModel.cpp | 43 +++++++++++++++++++++++++------------------ - src/greeter/UserModel.h | 2 ++ - 3 files changed, 30 insertions(+), 18 deletions(-) - -diff --git a/src/common/Configuration.h b/src/common/Configuration.h -index 5bd5296..10310c3 100644 ---- a/src/common/Configuration.h -+++ b/src/common/Configuration.h -@@ -50,6 +50,9 @@ namespace SDDM { - "The files should be named .face.icon")); - Entry(CursorTheme, QString, QString(), _S("Cursor theme used in the greeter")); - Entry(EnableAvatars, bool, true, _S("Enable display of custom user avatars")); -+ Entry(DisableAvatarsThreshold,int, 7, _S("Number of users to use as threshold\n" -+ "above which avatars are disabled\n" -+ "unless explicitly enabled with EnableAvatars")); - ); - - // TODO: Not absolutely sure if everything belongs here. Xsessions, VT and probably some more seem universal -diff --git a/src/greeter/UserModel.cpp b/src/greeter/UserModel.cpp -index f56c67a..ba2a9db 100644 ---- a/src/greeter/UserModel.cpp -+++ b/src/greeter/UserModel.cpp -@@ -51,6 +51,9 @@ namespace SDDM { - }; - - UserModel::UserModel(QObject *parent) : QAbstractListModel(parent), d(new UserModelPrivate()) { -+ const QString facesDir = mainConfig.Theme.FacesDir.get(); -+ const QString defaultFace = QStringLiteral("%1/.face.icon").arg(facesDir); -+ - struct passwd *current_pw; - while ((current_pw = getpwent()) != nullptr) { - -@@ -81,23 +84,7 @@ namespace SDDM { - user->needsPassword = strcmp(current_pw->pw_passwd, "") != 0; - - // search for face icon -- QString facesDir = mainConfig.Theme.FacesDir.get(); -- QString defaultFace = QStringLiteral("%1/.face.icon").arg(facesDir); -- bool avatarsEnabled = mainConfig.Theme.EnableAvatars.get(); -- -- if (avatarsEnabled) { -- QString userFace = QStringLiteral("%1/.face.icon").arg(user->homeDir); -- QString systemFace = QStringLiteral("%1/%2.face.icon").arg(facesDir).arg(user->name); -- -- if (QFile::exists(userFace)) -- user->icon = userFace; -- else if (QFile::exists(systemFace)) -- user->icon = systemFace; -- else -- user->icon = defaultFace; -- } else { -- user->icon = defaultFace; -- } -+ user->icon = defaultFace; - - // add user - d->users << user; -@@ -108,10 +95,26 @@ namespace SDDM { - // sort users by username - std::sort(d->users.begin(), d->users.end(), [&](const UserPtr &u1, const UserPtr &u2) { return u1->name < u2->name; }); - -+ bool avatarsEnabled = mainConfig.Theme.EnableAvatars.get(); -+ if (avatarsEnabled && mainConfig.Theme.EnableAvatars.isDefault()) { -+ if (d->users.count() > mainConfig.Theme.DisableAvatarsThreshold.get()) avatarsEnabled=false; -+ } -+ - // find out index of the last user - for (int i = 0; i < d->users.size(); ++i) { -- if (d->users.at(i)->name == stateConfig.Last.User.get()) -+ UserPtr user { d->users.at(i) }; -+ if (user->name == stateConfig.Last.User.get()) - d->lastIndex = i; -+ -+ if (avatarsEnabled) { -+ const QString userFace = QStringLiteral("%1/.face.icon").arg(user->homeDir); -+ const QString systemFace = QStringLiteral("%1/%2.face.icon").arg(facesDir).arg(user->name); -+ -+ if (QFile::exists(userFace)) -+ user->icon = userFace; -+ else if (QFile::exists(systemFace)) -+ user->icon = systemFace; -+ } - } - } - -@@ -165,4 +168,8 @@ namespace SDDM { - // return empty value - return QVariant(); - } -+ -+ int UserModel::disableAvatarsThreshold() const { -+ return mainConfig.Theme.DisableAvatarsThreshold.get(); -+ } - } -diff --git a/src/greeter/UserModel.h b/src/greeter/UserModel.h -index e089b4d..1bbf77e 100644 ---- a/src/greeter/UserModel.h -+++ b/src/greeter/UserModel.h -@@ -33,6 +33,7 @@ namespace SDDM { - Q_PROPERTY(int lastIndex READ lastIndex CONSTANT) - Q_PROPERTY(QString lastUser READ lastUser CONSTANT) - Q_PROPERTY(int count READ rowCount CONSTANT) -+ Q_PROPERTY(int disableAvatarsThreshold READ disableAvatarsThreshold CONSTANT) - public: - enum UserRoles { - NameRole = Qt::UserRole + 1, -@@ -53,6 +54,7 @@ namespace SDDM { - int rowCount(const QModelIndex &parent = QModelIndex()) const override; - QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; - -+ int disableAvatarsThreshold() const; - private: - UserModelPrivate *d { nullptr }; - }; --- -2.5.0 - diff --git a/0024-Rename-XDisplay-and-WaylandDisplay-config-sections.patch b/0024-Rename-XDisplay-and-WaylandDisplay-config-sections.patch deleted file mode 100644 index 93ca2f0..0000000 --- a/0024-Rename-XDisplay-and-WaylandDisplay-config-sections.patch +++ /dev/null @@ -1,246 +0,0 @@ -From 98bcb147acb793bf642e8a7bc9f69facb80e469a Mon Sep 17 00:00:00 2001 -From: Pier Luigi Fiorini -Date: Mon, 9 Nov 2015 20:22:07 +0100 -Subject: [PATCH 24/34] Rename XDisplay and WaylandDisplay config sections - -Closes #536 - -[ChangeLog][Configuration] Rename XDisplay section to X11 and -WaylandDisplay to Wayland because the "Display" part is unnecessary. ---- - data/man/sddm.conf.rst.in | 4 ++-- - src/common/Configuration.h | 4 ++-- - src/common/Session.cpp | 4 ++-- - src/daemon/Display.cpp | 4 ++-- - src/daemon/Seat.cpp | 2 +- - src/daemon/XorgDisplayServer.cpp | 14 +++++++------- - src/greeter/SessionModel.cpp | 4 ++-- - src/helper/Backend.cpp | 2 +- - src/helper/UserSession.cpp | 14 +++++++------- - 9 files changed, 26 insertions(+), 26 deletions(-) - -diff --git a/data/man/sddm.conf.rst.in b/data/man/sddm.conf.rst.in -index 8d8a7d4..9263788 100644 ---- a/data/man/sddm.conf.rst.in -+++ b/data/man/sddm.conf.rst.in -@@ -67,7 +67,7 @@ OPTIONS - them altogether. - Default value is true. - --[XDisplay] section: -+[X11] section: - - `ServerPath=` - Path of the X server. -@@ -115,7 +115,7 @@ OPTIONS - increase as new displays added. - Default value is @MINIMUM_VT@. - --[WaylandDisplay] section: -+[Wayland] section: - - `SessionDir=` - Path of the directory containing session files. -diff --git a/src/common/Configuration.h b/src/common/Configuration.h -index 10310c3..bc9ceb2 100644 ---- a/src/common/Configuration.h -+++ b/src/common/Configuration.h -@@ -56,7 +56,7 @@ namespace SDDM { - ); - - // TODO: Not absolutely sure if everything belongs here. Xsessions, VT and probably some more seem universal -- Section(XDisplay, -+ Section(X11, - Entry(ServerPath, QString, _S("/usr/bin/X"), _S("Path to X server binary")); - Entry(ServerArguments, QString, _S("-nolisten tcp"), _S("Arguments passed to the X server invocation")); - Entry(XephyrPath, QString, _S("/usr/bin/Xephyr"), _S("Path to Xephyr binary")); -@@ -70,7 +70,7 @@ namespace SDDM { - Entry(MinimumVT, int, MINIMUM_VT, _S("The lowest virtual terminal number that will be used.")); - ); - -- Section(WaylandDisplay, -+ Section(Wayland, - Entry(SessionDir, QString, _S("/usr/share/wayland-sessions"), _S("Directory containing available Wayland sessions")); - Entry(SessionCommand, QString, _S(WAYLAND_SESSION_COMMAND), _S("Path to a script to execute when starting the desktop session")); - Entry(SessionLogFile, QString, _S(".cache/wayland-errors"), _S("Path to the user session log file")); -diff --git a/src/common/Session.cpp b/src/common/Session.cpp -index 66d73c9..017cff4 100644 ---- a/src/common/Session.cpp -+++ b/src/common/Session.cpp -@@ -108,11 +108,11 @@ namespace SDDM { - - switch (type) { - case X11Session: -- m_dir = QDir(mainConfig.XDisplay.SessionDir.get()); -+ m_dir = QDir(mainConfig.X11.SessionDir.get()); - m_xdgSessionType = QStringLiteral("x11"); - break; - case WaylandSession: -- m_dir = QDir(mainConfig.WaylandDisplay.SessionDir.get()); -+ m_dir = QDir(mainConfig.Wayland.SessionDir.get()); - m_xdgSessionType = QStringLiteral("wayland"); - break; - default: -diff --git a/src/daemon/Display.cpp b/src/daemon/Display.cpp -index 6bc9965..7e35f3f 100644 ---- a/src/daemon/Display.cpp -+++ b/src/daemon/Display.cpp -@@ -108,9 +108,9 @@ namespace SDDM { - - // determine session type - const QString &autologinSession = mainConfig.Autologin.Session.get(); -- if (findSessionEntry(mainConfig.XDisplay.SessionDir.get(), autologinSession)) { -+ if (findSessionEntry(mainConfig.X11.SessionDir.get(), autologinSession)) { - sessionType = Session::X11Session; -- } else if (findSessionEntry(mainConfig.WaylandDisplay.SessionDir.get(), autologinSession)) { -+ } else if (findSessionEntry(mainConfig.Wayland.SessionDir.get(), autologinSession)) { - sessionType = Session::WaylandSession; - } else { - qCritical() << "Unable to find autologin session entry" << autologinSession; -diff --git a/src/daemon/Seat.cpp b/src/daemon/Seat.cpp -index 915d619..3ef1b2f 100644 ---- a/src/daemon/Seat.cpp -+++ b/src/daemon/Seat.cpp -@@ -57,7 +57,7 @@ namespace SDDM { - - if (terminalId == -1) { - // find unused terminal -- terminalId = findUnused(mainConfig.XDisplay.MinimumVT.get(), [&](const int number) { -+ terminalId = findUnused(mainConfig.X11.MinimumVT.get(), [&](const int number) { - return m_terminalIds.contains(number); - }); - } -diff --git a/src/daemon/XorgDisplayServer.cpp b/src/daemon/XorgDisplayServer.cpp -index a7e8436..d06d89a 100644 ---- a/src/daemon/XorgDisplayServer.cpp -+++ b/src/daemon/XorgDisplayServer.cpp -@@ -95,7 +95,7 @@ namespace SDDM { - file_handler.open(QIODevice::WriteOnly); - file_handler.close(); - -- QString cmd = QStringLiteral("%1 -f %2 -q").arg(mainConfig.XDisplay.XauthPath.get()).arg(file); -+ QString cmd = QStringLiteral("%1 -f %2 -q").arg(mainConfig.X11.XauthPath.get()).arg(file); - - // execute xauth - FILE *fp = popen(qPrintable(cmd), "w"); -@@ -128,7 +128,7 @@ namespace SDDM { - if (daemonApp->testing()) { - QStringList args; - args << m_display << QStringLiteral("-ac") << QStringLiteral("-br") << QStringLiteral("-noreset") << QStringLiteral("-screen") << QStringLiteral("800x600"); -- process->start(mainConfig.XDisplay.XephyrPath.get(), args); -+ process->start(mainConfig.X11.XephyrPath.get(), args); - - - // wait for display server to start -@@ -154,16 +154,16 @@ namespace SDDM { - } - - // start display server -- QStringList args = mainConfig.XDisplay.ServerArguments.get().split(QLatin1Char(' '), QString::SkipEmptyParts); -+ QStringList args = mainConfig.X11.ServerArguments.get().split(QLatin1Char(' '), QString::SkipEmptyParts); - args << QStringLiteral("-auth") << m_authPath - << QStringLiteral("-background") << QStringLiteral("none") - << QStringLiteral("-noreset") - << QStringLiteral("-displayfd") << QString::number(pipeFds[1]) - << QStringLiteral("vt%1").arg(displayPtr()->terminalId()); - qDebug() << "Running:" -- << qPrintable(mainConfig.XDisplay.ServerPath.get()) -+ << qPrintable(mainConfig.X11.ServerPath.get()) - << qPrintable(args.join(QLatin1Char(' '))); -- process->start(mainConfig.XDisplay.ServerPath.get(), args); -+ process->start(mainConfig.X11.ServerPath.get(), args); - - // wait for display server to start - if (!process->waitForStarted()) { -@@ -236,7 +236,7 @@ namespace SDDM { - // log message - qDebug() << "Display server stopped."; - -- QString displayStopCommand = mainConfig.XDisplay.DisplayStopCommand.get(); -+ QString displayStopCommand = mainConfig.X11.DisplayStopCommand.get(); - - // create display setup script process - QProcess *displayStopScript = new QProcess(); -@@ -273,7 +273,7 @@ namespace SDDM { - } - - void XorgDisplayServer::setupDisplay() { -- QString displayCommand = mainConfig.XDisplay.DisplayCommand.get(); -+ QString displayCommand = mainConfig.X11.DisplayCommand.get(); - - // create display setup script process - QProcess *displayScript = new QProcess(); -diff --git a/src/greeter/SessionModel.cpp b/src/greeter/SessionModel.cpp -index e34e922..9b33311 100644 ---- a/src/greeter/SessionModel.cpp -+++ b/src/greeter/SessionModel.cpp -@@ -38,8 +38,8 @@ namespace SDDM { - }; - - SessionModel::SessionModel(QObject *parent) : QAbstractListModel(parent), d(new SessionModelPrivate()) { -- populate(Session::X11Session, mainConfig.XDisplay.SessionDir.get()); -- populate(Session::WaylandSession, mainConfig.WaylandDisplay.SessionDir.get()); -+ populate(Session::X11Session, mainConfig.X11.SessionDir.get()); -+ populate(Session::WaylandSession, mainConfig.Wayland.SessionDir.get()); - } - - SessionModel::~SessionModel() { -diff --git a/src/helper/Backend.cpp b/src/helper/Backend.cpp -index b19e6ed..b24b62f 100644 ---- a/src/helper/Backend.cpp -+++ b/src/helper/Backend.cpp -@@ -67,7 +67,7 @@ namespace SDDM { - // determine Xauthority path - QString value = QStringLiteral("%1/%2") - .arg(QString::fromLocal8Bit(pw->pw_dir)) -- .arg(mainConfig.XDisplay.UserAuthFile.get()); -+ .arg(mainConfig.X11.UserAuthFile.get()); - env.insert(QStringLiteral("XAUTHORITY"), value); - } - // TODO: I'm fairly sure this shouldn't be done for PAM sessions, investigate! -diff --git a/src/helper/UserSession.cpp b/src/helper/UserSession.cpp -index 0b16a9a..d541d19 100644 ---- a/src/helper/UserSession.cpp -+++ b/src/helper/UserSession.cpp -@@ -46,14 +46,14 @@ namespace SDDM { - if (env.value(QStringLiteral("XDG_SESSION_CLASS")) == QStringLiteral("greeter")) { - QProcess::start(m_path); - } else if (env.value(QStringLiteral("XDG_SESSION_TYPE")) == QStringLiteral("x11")) { -- qDebug() << "Starting:" << mainConfig.XDisplay.SessionCommand.get() -+ qDebug() << "Starting:" << mainConfig.X11.SessionCommand.get() - << m_path; -- QProcess::start(mainConfig.XDisplay.SessionCommand.get(), -+ QProcess::start(mainConfig.X11.SessionCommand.get(), - QStringList() << m_path); - } else if (env.value(QStringLiteral("XDG_SESSION_TYPE")) == QStringLiteral("wayland")) { -- qDebug() << "Starting:" << mainConfig.WaylandDisplay.SessionCommand.get() -+ qDebug() << "Starting:" << mainConfig.Wayland.SessionCommand.get() - << m_path; -- QProcess::start(mainConfig.WaylandDisplay.SessionCommand.get(), -+ QProcess::start(mainConfig.Wayland.SessionCommand.get(), - QStringList() << m_path); - } else { - qCritical() << "Unable to run user session: unknown session type"; -@@ -137,8 +137,8 @@ namespace SDDM { - QString sessionLog = QStringLiteral("%1/%2") - .arg(QString::fromLocal8Bit(pw->pw_dir)) - .arg(sessionType == QStringLiteral("x11") -- ? mainConfig.XDisplay.SessionLogFile.get() -- : mainConfig.WaylandDisplay.SessionLogFile.get()); -+ ? mainConfig.X11.SessionLogFile.get() -+ : mainConfig.Wayland.SessionLogFile.get()); - - // create the path - QFileInfo finfo(sessionLog); -@@ -182,7 +182,7 @@ namespace SDDM { - file_handler.open(QIODevice::WriteOnly); - file_handler.close(); - -- QString cmd = QStringLiteral("%1 -f %2 -q").arg(mainConfig.XDisplay.XauthPath.get()).arg(file); -+ QString cmd = QStringLiteral("%1 -f %2 -q").arg(mainConfig.X11.XauthPath.get()).arg(file); - - // execute xauth - FILE *fp = popen(qPrintable(cmd), "w"); --- -2.5.0 - diff --git a/0025-Fix-crash-reading-lists-from-configuration.patch b/0025-Fix-crash-reading-lists-from-configuration.patch deleted file mode 100644 index afb8e5b..0000000 --- a/0025-Fix-crash-reading-lists-from-configuration.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 56f64173991204a1eea4bf6789d68555b94e3eae Mon Sep 17 00:00:00 2001 -From: Pier Luigi Fiorini -Date: Wed, 9 Dec 2015 13:20:20 +0100 -Subject: [PATCH 25/34] Fix crash reading lists from configuration - -Check the end of line to avoid taking a string reference from a -null string resulting in a crash. ---- - src/common/ConfigReader.cpp | 13 ++++++++----- - 1 file changed, 8 insertions(+), 5 deletions(-) - -diff --git a/src/common/ConfigReader.cpp b/src/common/ConfigReader.cpp -index cfc9940..acf880f 100644 ---- a/src/common/ConfigReader.cpp -+++ b/src/common/ConfigReader.cpp -@@ -30,11 +30,14 @@ - - QTextStream &operator>>(QTextStream &str, QStringList &list) { - list.clear(); -- foreach(const QStringRef &s, str.readLine().splitRef(QLatin1Char(','))) -- { -- QStringRef trimmed = s.trimmed(); -- if (!trimmed.isEmpty()) -- list.append(trimmed.toString()); -+ QString line = str.readLine(); -+ while (!line.isNull()) { -+ Q_FOREACH (const QStringRef &s, line.splitRef(QLatin1Char(','))) { -+ QStringRef trimmed = s.trimmed(); -+ if (!trimmed.isEmpty()) -+ list.append(trimmed.toString()); -+ } -+ line = str.readLine(); - } - return str; - } --- -2.5.0 - diff --git a/0026-Do-not-read-multiple-lines.patch b/0026-Do-not-read-multiple-lines.patch deleted file mode 100644 index ea11301..0000000 --- a/0026-Do-not-read-multiple-lines.patch +++ /dev/null @@ -1,41 +0,0 @@ -From cdd6552bd8a839f29ecb84abd7b98f1c0fcd2b99 Mon Sep 17 00:00:00 2001 -From: Pier Luigi Fiorini -Date: Sat, 16 Jan 2016 18:55:37 +0100 -Subject: [PATCH 26/34] Do not read multiple lines - -Reading multiple lines wouldn't help here as input comes from a previous -readLine(). ---- - src/common/ConfigReader.cpp | 14 +++++++------- - 1 file changed, 7 insertions(+), 7 deletions(-) - -diff --git a/src/common/ConfigReader.cpp b/src/common/ConfigReader.cpp -index acf880f..07eb30c 100644 ---- a/src/common/ConfigReader.cpp -+++ b/src/common/ConfigReader.cpp -@@ -30,15 +30,15 @@ - - QTextStream &operator>>(QTextStream &str, QStringList &list) { - list.clear(); -+ - QString line = str.readLine(); -- while (!line.isNull()) { -- Q_FOREACH (const QStringRef &s, line.splitRef(QLatin1Char(','))) { -- QStringRef trimmed = s.trimmed(); -- if (!trimmed.isEmpty()) -- list.append(trimmed.toString()); -- } -- line = str.readLine(); -+ -+ Q_FOREACH (const QStringRef &s, line.splitRef(QLatin1Char(','))) { -+ QStringRef trimmed = s.trimmed(); -+ if (!trimmed.isEmpty()) -+ list.append(trimmed.toString()); - } -+ - return str; - } - --- -2.5.0 - diff --git a/0027-Fix-moc-include-name.patch b/0027-Fix-moc-include-name.patch deleted file mode 100644 index 111fba7..0000000 --- a/0027-Fix-moc-include-name.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 1231b5fce8b7f9d99b3a0b8fa17e10d797890c43 Mon Sep 17 00:00:00 2001 -From: Pier Luigi Fiorini -Date: Sat, 16 Jan 2016 18:59:46 +0100 -Subject: [PATCH 27/34] Fix moc include name - ---- - src/greeter/KeyboardModel.cpp | 2 +- - test/ConfigurationTest.cpp | 3 +-- - 2 files changed, 2 insertions(+), 3 deletions(-) - -diff --git a/src/greeter/KeyboardModel.cpp b/src/greeter/KeyboardModel.cpp -index 3f87c9f..7d40441 100644 ---- a/src/greeter/KeyboardModel.cpp -+++ b/src/greeter/KeyboardModel.cpp -@@ -113,4 +113,4 @@ namespace SDDM { - } - } - --#include "KeyboardModel.moc" -+#include "moc_KeyboardModel.cpp" -diff --git a/test/ConfigurationTest.cpp b/test/ConfigurationTest.cpp -index bd07d9f..72bf8c9 100644 ---- a/test/ConfigurationTest.cpp -+++ b/test/ConfigurationTest.cpp -@@ -177,5 +177,4 @@ void ConfigurationTest::FileChanged() - QVERIFY(config->String.get() == QStringLiteral("b")); - } - -- --#include "ConfigurationTest.moc" -+#include "moc_ConfigurationTest.cpp" --- -2.5.0 - diff --git a/0028-Allow-for-overriding-the-text-color-of-PasswordBox.patch b/0028-Allow-for-overriding-the-text-color-of-PasswordBox.patch deleted file mode 100644 index 4f00e36..0000000 --- a/0028-Allow-for-overriding-the-text-color-of-PasswordBox.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 4e2ee766af16d13345cb4a39ff1859a436bfa0e7 Mon Sep 17 00:00:00 2001 -From: Steve Gerbino -Date: Mon, 25 Jan 2016 01:55:33 -0500 -Subject: [PATCH 28/34] Allow for overriding the text color of PasswordBox - -Fixes #590 ---- - components/2.0/PasswordBox.qml | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/components/2.0/PasswordBox.qml b/components/2.0/PasswordBox.qml -index 249ed43..8973eb2 100644 ---- a/components/2.0/PasswordBox.qml -+++ b/components/2.0/PasswordBox.qml -@@ -34,7 +34,7 @@ FocusScope { - property alias hoverColor: txtMain.hoverColor - property alias radius: txtMain.radius - property alias font: txtMain.font -- property alias textColor: txtMain.color -+ property alias textColor: txtMain.textColor - property alias echoMode: txtMain.echoMode - property alias text: txtMain.text - --- -2.5.0 - diff --git a/0031-Add-instructions-on-how-to-change-DPI.patch b/0031-Add-instructions-on-how-to-change-DPI.patch deleted file mode 100644 index 0603667..0000000 --- a/0031-Add-instructions-on-how-to-change-DPI.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 4c1212e0d3aa17cded4db2dd394285365d44e7bc Mon Sep 17 00:00:00 2001 -From: Pier Luigi Fiorini -Date: Thu, 28 Jan 2016 08:04:19 +0100 -Subject: [PATCH 31/34] Add instructions on how to change DPI - -Closes #402 ---- - README.md | 16 ++++++++++++++++ - 1 file changed, 16 insertions(+) - -diff --git a/README.md b/README.md -index 3961e18..9c23bab 100644 ---- a/README.md -+++ b/README.md -@@ -78,3 +78,19 @@ ACLs if your filesystem does support it. - setfacl -m u:sddm:x /home/username - setfacl -m u:sddm:r /home/username/.face.icon - ``` -+ -+### Custom DPI -+ -+In order to set custom DPI for high resolution screens you should configure -+Xorg yourself. An easy way is to pass an additional argument to Xorg. -+ -+Edit ``/etc/sddm.conf``, go to the ``X11`` section and change ``ServerArguments`` like this: -+ -+``` -+ServerArguments="-nolisten tcp -dpi 192" -+``` -+ -+to set DPI to 192. -+ -+As an alternative you can edit Xorg configuration ``xorg.conf``, please refer to the -+Xorg documentation. --- -2.5.0 - diff --git a/0032-Honor-RememberLastUser-and-RememberLastSession-setti.patch b/0032-Honor-RememberLastUser-and-RememberLastSession-setti.patch deleted file mode 100644 index 12d6443..0000000 --- a/0032-Honor-RememberLastUser-and-RememberLastSession-setti.patch +++ /dev/null @@ -1,38 +0,0 @@ -From ef7b3177adb3673a482c68cb62281cd9a5ca8e8d Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?P=C3=A9ter=20Radics?= -Date: Wed, 30 Dec 2015 16:58:15 +0100 -Subject: [PATCH 32/34] Honor RememberLastUser and RememberLastSession - settings. - -Revert to default if RememberLastUser or RememberLastSession is -set to false. - -Fix issue #527. ---- - src/daemon/Display.cpp | 10 ++++++++-- - 1 file changed, 8 insertions(+), 2 deletions(-) - -diff --git a/src/daemon/Display.cpp b/src/daemon/Display.cpp -index 7e35f3f..2e6e123 100644 ---- a/src/daemon/Display.cpp -+++ b/src/daemon/Display.cpp -@@ -304,8 +304,14 @@ namespace SDDM { - m_auth->setCookie(qobject_cast(m_displayServer)->cookie()); - - // save last user and last session -- stateConfig.Last.User.set(m_auth->user()); -- stateConfig.Last.Session.set(m_sessionName); -+ if (mainConfig.Users.RememberLastUser.get()) -+ stateConfig.Last.User.set(m_auth->user()); -+ else -+ stateConfig.Last.User.setDefault(); -+ if (mainConfig.Users.RememberLastSession.get()) -+ stateConfig.Last.Session.set(m_sessionName); -+ else -+ stateConfig.Last.Session.setDefault(); - stateConfig.save(); - - if (m_socket) --- -2.5.0 - diff --git a/0033-Activate-window-for-the-primary-screen.patch b/0033-Activate-window-for-the-primary-screen.patch deleted file mode 100644 index 4fde305..0000000 --- a/0033-Activate-window-for-the-primary-screen.patch +++ /dev/null @@ -1,112 +0,0 @@ -From 6d5b36b28907b16280ff78995fef764bb0c573db Mon Sep 17 00:00:00 2001 -From: Pier Luigi Fiorini -Date: Sat, 16 Jan 2016 19:52:09 +0100 -Subject: [PATCH 33/34] Activate window for the primary screen - -Request activation for the view on the primary screen -otherwise text fields won't get focus. - -Closes #501 - -[ChangeLog][Greeter] Fix text field focus (issue #501) ---- - src/greeter/GreeterApp.cpp | 31 ++++++++++++++++++++++++++++++- - src/greeter/GreeterApp.h | 4 +++- - 2 files changed, 33 insertions(+), 2 deletions(-) - -diff --git a/src/greeter/GreeterApp.cpp b/src/greeter/GreeterApp.cpp -index 06d13c5..8201a4e 100644 ---- a/src/greeter/GreeterApp.cpp -+++ b/src/greeter/GreeterApp.cpp -@@ -1,5 +1,5 @@ - /*************************************************************************** --* Copyright (c) 2015 Pier Luigi Fiorini -+* Copyright (c) 2015-2016 Pier Luigi Fiorini - * Copyright (c) 2013 Abdurrahman AVCI - * - * This program is free software; you can redistribute it and/or modify -@@ -36,6 +36,7 @@ - #include - #include - #include -+#include - #include - - #include -@@ -135,6 +136,11 @@ namespace SDDM { - - // handle screens - connect(this, &GreeterApp::screenAdded, this, &GreeterApp::addViewForScreen); -+#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) -+ connect(this, &GreeterApp::primaryScreenChanged, this, [this](QScreen *) { -+ activatePrimary(); -+ }); -+#endif - } - - void GreeterApp::addViewForScreen(QScreen *screen) { -@@ -144,6 +150,7 @@ namespace SDDM { - view->setResizeMode(QQuickView::SizeRootObjectToView); - //view->setGeometry(QRect(QPoint(0, 0), screen->geometry().size())); - view->setGeometry(screen->geometry()); -+ m_views.append(view); - - // remove the view when the screen is removed, but we - // need to be careful here since Qt will move the view to -@@ -201,11 +208,33 @@ namespace SDDM { - // show - qDebug() << "Adding view for" << screen->name() << screen->geometry(); - view->show(); -+ -+ // activate windows for the primary screen to give focus to text fields -+ if (QGuiApplication::primaryScreen() == screen) -+ view->requestActivate(); - } - - void GreeterApp::removeViewForScreen(QQuickView *view) { -+ // screen is gone, remove the window - m_views.removeOne(view); - view->deleteLater(); -+ -+#if QT_VERSION < QT_VERSION_CHECK(5, 6, 0) -+ // starting from Qt 5.6 we are notified when the primary screen is changed -+ // and we request activation for the view when we get the signal, with -+ // older version we iterate the views and request activation -+ activatePrimary(); -+#endif -+ } -+ -+ void GreeterApp::activatePrimary() { -+ // activate and give focus to the window assigned to the primary screen -+ Q_FOREACH (QQuickView *view, m_views) { -+ if (view->screen() == QGuiApplication::primaryScreen()) { -+ view->requestActivate(); -+ break; -+ } -+ } - } - } - -diff --git a/src/greeter/GreeterApp.h b/src/greeter/GreeterApp.h -index 91fc1a9..1ebd981 100644 ---- a/src/greeter/GreeterApp.h -+++ b/src/greeter/GreeterApp.h -@@ -1,5 +1,5 @@ - /*************************************************************************** --* Copyright (c) 2015 Pier Luigi Fiorini -+* Copyright (c) 2015-2016 Pier Luigi Fiorini - * Copyright (c) 2013 Nikita Mikhaylov - * - * This program is free software; you can redistribute it and/or modify -@@ -65,6 +65,8 @@ namespace SDDM { - UserModel *m_userModel { nullptr }; - GreeterProxy *m_proxy { nullptr }; - KeyboardModel *m_keyboard { nullptr }; -+ -+ void activatePrimary(); - }; - } - --- -2.5.0 - diff --git a/0034-Theme-Maui-Prevent-losing-focus.patch b/0034-Theme-Maui-Prevent-losing-focus.patch deleted file mode 100644 index bfe2427..0000000 --- a/0034-Theme-Maui-Prevent-losing-focus.patch +++ /dev/null @@ -1,44 +0,0 @@ -From c3863ccb276469fd7da8b7397c65d96d57cf2759 Mon Sep 17 00:00:00 2001 -From: Benjamin Robin -Date: Sun, 13 Dec 2015 16:29:45 +0100 -Subject: [PATCH 34/34] Theme Maui: Prevent losing focus - -And word wrap the user text message ---- - data/themes/maui/Main.qml | 11 ++++++++++- - 1 file changed, 10 insertions(+), 1 deletion(-) - -diff --git a/data/themes/maui/Main.qml b/data/themes/maui/Main.qml -index 6d2092d..260ea9b 100644 ---- a/data/themes/maui/Main.qml -+++ b/data/themes/maui/Main.qml -@@ -58,6 +58,13 @@ Rectangle { - source = config.defaultBackground - } - } -+ -+ MouseArea { -+ anchors.fill: parent -+ onClicked: { -+ listView.focus = true; -+ } -+ } - } - - Rectangle { -@@ -164,9 +171,11 @@ Rectangle { - anchors.horizontalCenter: parent.horizontalCenter - color: "white" - text: textConstants.promptSelectUser -- -+ wrapMode: Text.WordWrap -+ width:parent.width - 60 - font.pixelSize: 20 - } -+ - } - } - --- -2.5.0 - diff --git a/sddm-0.13.0-fedora_config.patch b/sddm-0.14.0-fedora_config.patch similarity index 50% rename from sddm-0.13.0-fedora_config.patch rename to sddm-0.14.0-fedora_config.patch index 6cbec34..641fd5f 100644 --- a/sddm-0.13.0-fedora_config.patch +++ b/sddm-0.14.0-fedora_config.patch @@ -1,27 +1,25 @@ -diff -up sddm-0.13.0/src/common/Configuration.h.fedora_config sddm-0.13.0/src/common/Configuration.h ---- sddm-0.13.0/src/common/Configuration.h.fedora_config 2016-03-11 17:00:26.664289307 -0600 -+++ sddm-0.13.0/src/common/Configuration.h 2016-03-11 17:01:03.501586928 -0600 -@@ -45,7 +45,7 @@ namespace SDDM { - // Name Entries (but it's a regular class again) - Section(Theme, - Entry(ThemeDir, QString, _S(DATA_INSTALL_DIR "/themes"), _S("Theme directory path")); -- Entry(Current, QString, _S("maui"), _S("Current theme name")); -+ Entry(Current, QString, _S("01-breeze-fedora"), _S("Current theme name")); - Entry(FacesDir, QString, _S(DATA_INSTALL_DIR "/faces"), _S("Global directory for user avatars\n" - "The files should be named .face.icon")); - Entry(CursorTheme, QString, QString(), _S("Cursor theme used in the greeter")); -@@ -65,8 +65,8 @@ namespace SDDM { +diff -up sddm-0.14.0/src/common/Configuration.h.fedora_config sddm-0.14.0/src/common/Configuration.h +--- sddm-0.14.0/src/common/Configuration.h.fedora_config 2016-08-28 06:54:03.000000000 -0500 ++++ sddm-0.14.0/src/common/Configuration.h 2016-08-28 14:36:45.974795657 -0500 +@@ -64,21 +64,21 @@ namespace SDDM { + Entry(XauthPath, QString, _S("/usr/bin/xauth"), _S("Path to xauth binary")); + Entry(SessionDir, QString, _S("/usr/share/xsessions"), _S("Directory containing available X sessions")); Entry(SessionCommand, QString, _S(SESSION_COMMAND), _S("Path to a script to execute when starting the desktop session")); - Entry(SessionLogFile, QString, _S(".cache/xsession-errors"), _S("Path to the user session log file")); +- Entry(SessionLogFile, QString, _S(".local/share/sddm/xorg-session.log"), _S("Path to the user session log file")); ++ Entry(SessionLogFile, QString, _S(".cache/xsession-errors"), _S("Path to the user session log file")); Entry(UserAuthFile, QString, _S(".Xauthority"), _S("Path to the Xauthority file")); - Entry(DisplayCommand, QString, _S(DATA_INSTALL_DIR "/scripts/Xsetup"), _S("Path to a script to execute when starting the display server")); - Entry(DisplayStopCommand, QString, _S(DATA_INSTALL_DIR "/scripts/Xstop"), _S("Path to a script to execute when stopping the display server")); -+ Entry(DisplayCommand, QString, _S("/etc/sddm/Xsetup"), _S("Path to a script to execute when starting the display server")); -+ Entry(DisplayStopCommand, QString, _S("/etc/sddm/Xstop"), _S("Path to a script to execute when stopping the display server")); ++ Entry(DisplayCommand, QString, _S(SYS_CONFIG_DIR "/sddm/Xsetup"), _S("Path to a script to execute when starting the display server")); ++ Entry(DisplayStopCommand, QString, _S(SYS_CONFIG_DIR "/sddm/Xstop"), _S("Path to a script to execute when stopping the display server")); Entry(MinimumVT, int, MINIMUM_VT, _S("The lowest virtual terminal number that will be used.")); ); -@@ -77,7 +77,7 @@ namespace SDDM { + Section(Wayland, + Entry(SessionDir, QString, _S("/usr/share/wayland-sessions"), _S("Directory containing available Wayland sessions")); + Entry(SessionCommand, QString, _S(WAYLAND_SESSION_COMMAND), _S("Path to a script to execute when starting the desktop session")); +- Entry(SessionLogFile, QString, _S(".local/share/sddm/wayland-session.log"),_S("Path to the user session log file")); ++ Entry(SessionLogFile, QString, _S(".cache/wayland-errors"), _S("Path to the user session log file")); ); Section(Users, diff --git a/sddm.spec b/sddm.spec index 6eb056a..0519ce5 100644 --- a/sddm.spec +++ b/sddm.spec @@ -1,8 +1,8 @@ %global _hardened_build 1 Name: sddm -Version: 0.13.0 -Release: 7%{?dist} +Version: 0.14.0 +Release: 1%{?dist} # code GPLv2+, fedora theme CC-BY-SA License: GPLv2+ and CC-BY-SA Summary: QML based X11 desktop manager @@ -11,37 +11,10 @@ Url: https://github.com/sddm/sddm Source0: https://github.com/sddm/sddm/archive/v%{version}.tar.gz ## upstream patches -BuildRequires: git-core -Patch2: 0002-Use-higher-quality-neutral-images-for-default-faces.patch -Patch3: 0003-Generate-and-install-the-default-sddm.conf-after-sdd.patch -Patch4: 0004-Add-a-config-option-to-enable-avatars.patch -Patch5: 0005-Use-.face.icon-instead-of-default.face.icon-and-rena.patch -Patch6: 0006-Fix-mixed-indents.patch -Patch7: 0007-Fall-back-to-regular-login-when-autologin-fails.patch -# https://github.com/sddm/sddm/issues/225 -# continue to skip, for now -#Patch8: 0008-Enable-PrivateTmp-again.patch -Patch9: 0009-Improve-config-file-comments.patch -Patch10: 0010-elarun-Remove-duplicate-session-selector.patch -Patch12: 0012-Configurable-user-session-log.patch -Patch13: 0013-Configurable-Xauthority-file.patch -Patch15: 0015-Expose-arrow-background-color.patch -Patch20: 0020-Adds-a-count-property-to-UserModel.patch -Patch21: 0021-Refactored-ConfigReader-is-matches-Default.patch -Patch22: 0022-Defines-a-users-threshold-to-disable-avatars.patch -Patch24: 0024-Rename-XDisplay-and-WaylandDisplay-config-sections.patch -Patch25: 0025-Fix-crash-reading-lists-from-configuration.patch -Patch26: 0026-Do-not-read-multiple-lines.patch -Patch27: 0027-Fix-moc-include-name.patch -Patch28: 0028-Allow-for-overriding-the-text-color-of-PasswordBox.patch -Patch31: 0031-Add-instructions-on-how-to-change-DPI.patch -Patch32: 0032-Honor-RememberLastUser-and-RememberLastSession-setti.patch -Patch33: 0033-Activate-window-for-the-primary-screen.patch -Patch34: 0034-Theme-Maui-Prevent-losing-focus.patch +#BuildRequires: git-core ## downstream patches -# downstream fedora-specific configuration -Patch101: sddm-0.13.0-fedora_config.patch +Patch101: sddm-0.14.0-fedora_config.patch # Shamelessly stolen from gdm Source11: sddm.pam @@ -68,9 +41,9 @@ BuildRequires: pam-devel BuildRequires: pkgconfig(libsystemd-journal) BuildRequires: pkgconfig(systemd) BuildRequires: python-docutils -BuildRequires: qt5-qtbase-devel -BuildRequires: qt5-qtdeclarative-devel -BuildRequires: qt5-qttools-devel +BuildRequires: qt5-qtbase-devel >= 5.6 +BuildRequires: qt5-qtdeclarative-devel >= 5.6 +BuildRequires: qt5-qttools-devel >= 5.6 # verify presence to pull defaults from /etc/login.defs BuildRequires: shadow-utils BuildRequires: systemd @@ -81,8 +54,6 @@ Obsoletes: kde-settings-sddm < 20-5 Requires: desktop-backgrounds-compat # for /usr/share/pixmaps/system-logo-white.png Requires: system-logos -Requires: qt5-qtbase-gui -Requires: qt5-qtdeclarative Requires: systemd Requires: xorg-x11-xinit %ifnarch s390 s390x @@ -108,7 +79,9 @@ A collection of sddm themes, including: circles, elarun, maldives, maui. %prep -%autosetup -Sgit +%setup -q + +%patch101 -p1 -b .fedora_config %build @@ -138,6 +111,8 @@ mkdir -p %{buildroot}%{_localstatedir}/lib/sddm mkdir -p %{buildroot}%{_sysconfdir}/sddm/ cp -a %{buildroot}%{_datadir}/sddm/scripts/* \ %{buildroot}%{_sysconfdir}/sddm/ +# we're using /etc/X11/xinit/Xsession (by default) instead +rm -fv %{buildroot}%{_sysconfdir}/sddm/Xsession # install fedora theme install -Dpm 644 %{SOURCE21} %{buildroot}%{_datadir}/sddm/themes/02-fedora/Main.qml @@ -177,7 +152,7 @@ exit 0 %files %{!?_licensedir:%global license %%doc} -%license COPYING +%license LICENSE %doc README.md CONTRIBUTORS %dir %{_sysconfdir}/sddm/ %config(noreplace) %{_sysconfdir}/sddm/* @@ -209,14 +184,26 @@ exit 0 %{_mandir}/man5/sddm.conf.5* %{_mandir}/man5/sddm-state.conf.5* +%post themes +# handle incompatible configuration changes +(grep \ + -e '^Current=circles$' \ + %{_sysconfdir}/sddm.conf > /dev/null && \ + sed -i.rpmsave \ + -e 's|^Current=circles$|#Current=01-breeze-fedora|' \ + %{_sysconfdir}/sddm.conf +) ||: + %files themes -%{_datadir}/sddm/themes/circles/ %{_datadir}/sddm/themes/elarun/ %{_datadir}/sddm/themes/maldives/ -%{_datadir}/sddm/themes/maui/ %changelog +* Sun Aug 28 2016 Rex Dieter - 0.14.0-1 +- sddm-0.14.0 +- -themes: circles theme was removed + * Fri Mar 11 2016 Rex Dieter - 0.13.0-7 - pull in upstream fixes, some new features - The desktop selection drop down list has an empty box (#1222228) diff --git a/sources b/sources index cebb6cb..85ab9b4 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ -ecfd285a463eb6490da1333bb2e304a7 v0.13.0.tar.gz d8d1359a45fd11e05e1f13c8d175fd79 angle-down.png +393fbed2f2e9d030e1717949867e96c8 v0.14.0.tar.gz