From a927af03d37dd470fc3ee0b729606a72e6b6a97f Mon Sep 17 00:00:00 2001 From: Debarshi Ray Date: Mon, 10 Jun 2013 13:30:10 +0200 Subject: [PATCH 01/30] Add hi-res icons (http://sourceforge.net/p/xchat/bugs/1504/) --- hicolor_apps_16x16_xchat.png | Bin 0 -> 1064 bytes hicolor_apps_22x22_xchat.png | Bin 0 -> 1536 bytes hicolor_apps_24x24_xchat.png | Bin 0 -> 1724 bytes hicolor_apps_256x256_xchat.png | Bin 0 -> 28634 bytes hicolor_apps_32x32_xchat.png | Bin 0 -> 2418 bytes hicolor_apps_48x48_xchat.png | Bin 0 -> 4018 bytes xchat-2.8.8-hires-icons.patch | 85 ++ xchat.spec | 51 +- xchat.svg | 1802 ++++++++++++++++++++++++++++++++ 9 files changed, 1924 insertions(+), 14 deletions(-) create mode 100644 hicolor_apps_16x16_xchat.png create mode 100644 hicolor_apps_22x22_xchat.png create mode 100644 hicolor_apps_24x24_xchat.png create mode 100644 hicolor_apps_256x256_xchat.png create mode 100644 hicolor_apps_32x32_xchat.png create mode 100644 hicolor_apps_48x48_xchat.png create mode 100644 xchat-2.8.8-hires-icons.patch create mode 100644 xchat.svg diff --git a/hicolor_apps_16x16_xchat.png b/hicolor_apps_16x16_xchat.png new file mode 100644 index 0000000000000000000000000000000000000000..b29fc17a74f5a070fe1d0bb5a124dfd3056ceb68 GIT binary patch literal 1064 zcmV+@1lRkCP)P{QzDxiB02FjZSad;kbZBpK07_wN zbz&e>bY*F7Wpd{G_b&hd03mcmSaefwb#h~60BCe{a5^t9YH4k4VPh_Bb#rNBXklz@ zE@OIWX5(G}00TftL_t(Ijg3=ZOj~srJ@-%Py#?E~6qp5Z!;Yqd5eka3IH#ET1GA}1 z_9si0xEYiApnLH_j4!Ce?a2pBj4m-gXd(pNP_vBd07a5Ei#SKKO2ILyFe-(6xwkF7 zx8?T!e3%-tWXVo)lJ7j6^X1Ez!w^CM0B84)bZu>ZbttbU7Uh}Y$KSa^Ru3x6>Ey`lLw{iOeg3)BuV*%Bs*lnsfzo&*wX_L(^YW?X z;U0K~d*GS-;q;27O;9>rPw7+%rKyjoI{TS9cCM80He1cdUU8O3ydR(i05`y-PhfjX zU!_$PW*C;kw&o5m6F&|Zi97dbZ^G$l;#}Ug^UT+8?>t++>)GxVE&$!M<9@)i7JNbq ztFe(jUJbnA72MU<{-+5m3MKayP%K&)9Ur5a+NuDb&8{D*+Y@5dToGzczo&`brR#Py zF|pWh9c*rW{hO=dv4WP?P_*bhX>FQUR+bT-xMCWHG011s)wj~=b$xm|deSNu#k)6G zxm|ev@F`pzI1g1*0RSa7n_^MsOEYivGK3JcrzKDD$B@Q#fwIQsWDC0WSV)5RTX_hOPSF8odCRm3cx5ur1&81m9F-`J97Q2UlbeNwXF#s z$PrlSEatX%;Z|CNrsyV@m(|NR*^*a+iY&5^gy2|Qf|M8OhwxP=Y{w^$ucb^w4t2*JN?6`m=> zK!3nxeP3Tj54a#Vh^QrmfCqq>j)fe}g}T>rgNB9hwLH2BA;y27AcPo_B)zQ7Ye|8{ i?j*(GKMgF@0Qd(|vyx5+2zDX>0000jqIBM literal 0 HcmV?d00001 diff --git a/hicolor_apps_22x22_xchat.png b/hicolor_apps_22x22_xchat.png new file mode 100644 index 0000000000000000000000000000000000000000..5f4a083e4cbfc08cd1065d318e8b854dcbd1c7f8 GIT binary patch literal 1536 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 Q004mYBZG&v>UI(T1MHQDWB>pF literal 0 HcmV?d00001 diff --git a/hicolor_apps_32x32_xchat.png b/hicolor_apps_32x32_xchat.png new file mode 100644 index 0000000000000000000000000000000000000000..59b1850da79c97f4c114e5e65fb71d1c2f1870b5 GIT binary patch literal 2418 zcmV-&361uNP)P{QzDxiB02FjZSad;kbZBpK07_wN zbz&e>bY*F7Wpd{G_b&hd03mcmSaefwb#h~60BCe{a5^t9YH4k4VPh_Bb#rNBXklz@ zE@OIWX5(G}00@dnL_t(og{7Bya8>mc$3OSpw`6-SI|M?2#0TbOE2JVp5M-N+GB{HQ zTw3W$>s0Gfp+&K^ELx@2PPGf8*6JuSqK+dJY#v$%kmW%kA_)?K7m}AimY4PI@7=9` z4OZKv$FyiqeM}F0|A{?v{Z|Hl zjs4+P*Yy@_?yHvZWix|K2mV;`h`wprGT9gzCw>+9nWe66`Od`~o%igum8{x6%WBGW zZ(QVZUMu;=MJ}h5l6U<2yLQYiTJ}Q9)cL=9qUL$=pVieaVN3y=7rC}gEMLAR_ogS! zc)yFNouqW-Tj|NRyrUbgLBxhdE@x_bfxBeoTXrG(2{bIhK5en7aQ>sKk8QnL#4rKB zz1g*G@{I4S89(PC6D>c1Xf3pFMu>kx#htIGr=}FR*UkHS5$oo;oT+Jr?y@^yw+oTI z(D4kY9pGI}=JmHo(-%E@@8PG1ix?E}Se0vA(T%It&})iyvNnV3YXjfC$Oq zaIm)WqbIK`{q`dTbAMpQyA~qNpfTJ7ClDloyvp^~&Wkmx%TwIDj<-8H0UrF8%bAf^ z?7rci7wux-4rqV%YP=Ez|3Oj;e=9NV`8D_}{fy(F}xPTD9%%rMy*2yLFtzyed(E9JOaVn_HsOQ^g?(|1mQY}eKrcKC`B(>-2gEZ1Z?GS7oJ5B>NX(qc5cdP%X_O9Li8Sepo zvMlS8!{NZ;a2OtsCw9?CQ+HpeB_+wabb9_2Ns9WeDYLO$OPaw4?jH5!>ZV^;*Rd1m z0yKxifoaI`&{nKi;a{-$CTlpu*8R3<9Z$;GXKE}|5r}U7B22F!BFq2Q*!0_lFZ$m|Ri#!J)OCfI2`vOaMSEuH0W* zRF-T_$>ef(WN`e+y&A5fSA@2h=Fg7x#G!f%0nI$$}ys&E3s#QPp`~AZ@;;>%e z_Xo-|GRL7A2AbaQXHMa73eeB=&0Vj`rdbp=2Ja1&ourtuy z-1^smzh`OtW$z-vWD>rq0J|-n@BMTgu08MI`LY&401Ta!-e#r*&Q}zw?Zq|L;Ww*c z0&Yt^J;7$ntDI#Og-i7(FvhBZARq_=hOPrpZ!X}^zwcnl@;j+Nd5DE=`^dK_+?Z`3 z6-~1Jts(trrQbED#(qV_;1-nlT#l^V@yG8kcVuQY9UePfQG(Qr{%5Ec)Ho3ho@>kD zSY{;#0uPu@bDO1g5YlBC&tIBDy}?j$PF+sF2yuWs-Jb2fzi?t^)|ZDN%IL0`!8(qh zIF4x44E8BN8p#Sgp4Exm=|l5SfT&yEcpyI~ zJFBw=RLkh(ss)nA;a5}HRC`%_>Ow#Zb%!BmI#{wX#o!lqKX-Q?!KB1!j-?F2ni;RF z+?OV0n&ZL_0LkO=2n!0*UsxFGv@`_mWID?cyE-7IUfong3nXXKqnOz2=~mva_y4`N zBX-%vG|Lc@{AJ&7;AIUmZWpu1j`a!k}S&% zyO03AjWKHDk;n~xOH$TyBOn92`e!j34g`2ugOfnFEXx`s{tFU|42oz{s0+na=fN;}yMjjGc*JiaAGJqjA%vxE|<#$WC3L&l<3e4 z)Fd*G$g-@DBp-nv*p4Z{OcAnm_yVW{x@1{ahsF<9U`Qr4lu87F kR-+%^2=tM-2M)FW0e&)V?#+JwU;qFB07*qoM6N<$f}rZ4O8@`> literal 0 HcmV?d00001 diff --git a/hicolor_apps_48x48_xchat.png b/hicolor_apps_48x48_xchat.png new file mode 100644 index 0000000000000000000000000000000000000000..47db53ed11fba5c5eede305e5fabbe8c33c8d89b GIT binary patch literal 4018 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 0.60, dbus-glib-devel >= 0.60 @@ -48,6 +61,8 @@ BuildRequires: desktop-file-utils >= 0.10 BuildRequires: libnotify-devel # For xchat-2.8.8-link-against-libnotify.patch BuildRequires: autoconf +BuildRequires: automake + # For gconftool-2: Requires(post): GConf2 >= %{gconf_version} Requires(preun): GConf2 >= %{gconf_version} @@ -91,9 +106,18 @@ This package contains the X-Chat plugin providing the Tcl scripting interface. %patch52 -p1 -b .libnotify07 %patch53 -p1 -b .link-against-libnotify %patch54 -p0 -b .glib +%patch55 -p1 -b .hires-icons sed -i -e 's/#define GTK_DISABLE_DEPRECATED//g' src/fe-gtk/*.c +cp -p %{SOURCE1} icons/ +cp -p %{SOURCE2} icons/ +cp -p %{SOURCE3} icons/ +cp -p %{SOURCE4} icons/ +cp -p %{SOURCE5} icons/ +cp -p %{SOURCE6} icons/ +cp -p %{SOURCE7} icons/ + %build # Remove CVS files from source dirs so they're not installed into doc dirs. find . -name CVS -type d | xargs rm -rf @@ -102,8 +126,7 @@ export CFLAGS="$RPM_OPT_FLAGS $(perl -MExtUtils::Embed -e ccopts)" export LDFLAGS=$(perl -MExtUtils::Embed -e ldopts) # For xchat-2.8.8-link-against-libnotify.patch -autoconf -autoheader +./autogen.sh %configure --disable-textfe \ --enable-gtkfe \ @@ -152,18 +175,14 @@ EOF export GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source` gconftool-2 --makefile-install-rule /etc/gconf/schemas/apps_xchat_url_handler.schemas >& /dev/null || : - -%pre -if [ "$1" -gt 1 ]; then - export GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source` - gconftool-2 --makefile-uninstall-rule /etc/gconf/schemas/apps_xchat_url_handler.schemas >& /dev/null || : +%postun +if [ $1 -eq 0 ] ; then + /bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null + /usr/bin/gtk-update-icon-cache -f %{_datadir}/icons/hicolor &>/dev/null || : fi -%preun -if [ "$1" -eq 0 ]; then - export GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source` - gconftool-2 --makefile-uninstall-rule /etc/gconf/schemas/apps_xchat_url_handler.schemas >& /dev/null || : -fi +%posttrans +/usr/bin/gtk-update-icon-cache -f %{_datadir}/icons/hicolor &>/dev/null || : %clean %{__rm} -rf $RPM_BUILD_ROOT @@ -178,6 +197,7 @@ fi %{_libdir}/xchat/plugins/perl.so %{_libdir}/xchat/plugins/python.so %{_datadir}/applications/xchat.desktop +%{_datadir}/icons/hicolor/*/apps/xchat.png %{_datadir}/pixmaps/* %{_sysconfdir}/gconf/schemas/apps_xchat_url_handler.schemas %{_datadir}/dbus-1/services/org.xchat.service.service @@ -187,6 +207,9 @@ fi %{_libdir}/xchat/plugins/tcl.so %changelog +* Fri Jun 07 2013 Debarshi Ray - 1:2.8.8-18 +- Add hi-res icons (http://sourceforge.net/p/xchat/bugs/1504/) + * Fri Feb 15 2013 Fedora Release Engineering - 1:2.8.8-17 - Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild diff --git a/xchat.svg b/xchat.svg new file mode 100644 index 0000000..c7055d8 --- /dev/null +++ b/xchat.svg @@ -0,0 +1,1802 @@ + + + + + Pidgin + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Jakub Steiner + + + http://jimmac.musichall.cz + + Pidgin + + + pidgin + im + instant + messaging + + + + + + + + + + + + + + + + + + + + + Hylke Bons, Lapo Calamandrei + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 8a46bfc1e5085353de15c8f79955663e8f478ed1 Mon Sep 17 00:00:00 2001 From: Debarshi Ray Date: Mon, 10 Jun 2013 13:38:19 +0200 Subject: [PATCH 02/30] Add BR on gettext-devel --- xchat.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xchat.spec b/xchat.spec index 3120802..ee26d1a 100644 --- a/xchat.spec +++ b/xchat.spec @@ -53,7 +53,7 @@ BuildRequires: perl perl(ExtUtils::Embed) python-devel openssl-devel pkgconfig, BuildRequires: GConf2-devel BuildRequires: dbus-devel >= 0.60, dbus-glib-devel >= 0.60 BuildRequires: glib2-devel >= 2.10.0, gtk2-devel >= 2.10.0, bison >= 1.35 -BuildRequires: gettext /bin/sed +BuildRequires: gettext-devel /bin/sed BuildRequires: libtool BuildRequires: libntlm-devel BuildRequires: libsexy-devel From 3a9424b4ae9ac84c5aaafb81161fe078220b0dce Mon Sep 17 00:00:00 2001 From: Debarshi Ray Date: Mon, 10 Jun 2013 13:30:10 +0200 Subject: [PATCH 03/30] Add hi-res icons (http://sourceforge.net/p/xchat/bugs/1504/) --- hicolor_apps_16x16_xchat.png | Bin 0 -> 1064 bytes hicolor_apps_22x22_xchat.png | Bin 0 -> 1536 bytes hicolor_apps_24x24_xchat.png | Bin 0 -> 1724 bytes hicolor_apps_256x256_xchat.png | Bin 0 -> 28634 bytes hicolor_apps_32x32_xchat.png | Bin 0 -> 2418 bytes hicolor_apps_48x48_xchat.png | Bin 0 -> 4018 bytes xchat-2.8.8-hires-icons.patch | 85 ++ xchat.spec | 51 +- xchat.svg | 1802 ++++++++++++++++++++++++++++++++ 9 files changed, 1924 insertions(+), 14 deletions(-) create mode 100644 hicolor_apps_16x16_xchat.png create mode 100644 hicolor_apps_22x22_xchat.png create mode 100644 hicolor_apps_24x24_xchat.png create mode 100644 hicolor_apps_256x256_xchat.png create mode 100644 hicolor_apps_32x32_xchat.png create mode 100644 hicolor_apps_48x48_xchat.png create mode 100644 xchat-2.8.8-hires-icons.patch create mode 100644 xchat.svg diff --git a/hicolor_apps_16x16_xchat.png b/hicolor_apps_16x16_xchat.png new file mode 100644 index 0000000000000000000000000000000000000000..b29fc17a74f5a070fe1d0bb5a124dfd3056ceb68 GIT binary patch literal 1064 zcmV+@1lRkCP)P{QzDxiB02FjZSad;kbZBpK07_wN zbz&e>bY*F7Wpd{G_b&hd03mcmSaefwb#h~60BCe{a5^t9YH4k4VPh_Bb#rNBXklz@ zE@OIWX5(G}00TftL_t(Ijg3=ZOj~srJ@-%Py#?E~6qp5Z!;Yqd5eka3IH#ET1GA}1 z_9si0xEYiApnLH_j4!Ce?a2pBj4m-gXd(pNP_vBd07a5Ei#SKKO2ILyFe-(6xwkF7 zx8?T!e3%-tWXVo)lJ7j6^X1Ez!w^CM0B84)bZu>ZbttbU7Uh}Y$KSa^Ru3x6>Ey`lLw{iOeg3)BuV*%Bs*lnsfzo&*wX_L(^YW?X z;U0K~d*GS-;q;27O;9>rPw7+%rKyjoI{TS9cCM80He1cdUU8O3ydR(i05`y-PhfjX zU!_$PW*C;kw&o5m6F&|Zi97dbZ^G$l;#}Ug^UT+8?>t++>)GxVE&$!M<9@)i7JNbq ztFe(jUJbnA72MU<{-+5m3MKayP%K&)9Ur5a+NuDb&8{D*+Y@5dToGzczo&`brR#Py zF|pWh9c*rW{hO=dv4WP?P_*bhX>FQUR+bT-xMCWHG011s)wj~=b$xm|deSNu#k)6G zxm|ev@F`pzI1g1*0RSa7n_^MsOEYivGK3JcrzKDD$B@Q#fwIQsWDC0WSV)5RTX_hOPSF8odCRm3cx5ur1&81m9F-`J97Q2UlbeNwXF#s z$PrlSEatX%;Z|CNrsyV@m(|NR*^*a+iY&5^gy2|Qf|M8OhwxP=Y{w^$ucb^w4t2*JN?6`m=> zK!3nxeP3Tj54a#Vh^QrmfCqq>j)fe}g}T>rgNB9hwLH2BA;y27AcPo_B)zQ7Ye|8{ i?j*(GKMgF@0Qd(|vyx5+2zDX>0000jqIBM literal 0 HcmV?d00001 diff --git a/hicolor_apps_22x22_xchat.png b/hicolor_apps_22x22_xchat.png new file mode 100644 index 0000000000000000000000000000000000000000..5f4a083e4cbfc08cd1065d318e8b854dcbd1c7f8 GIT binary patch literal 1536 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 Q004mYBZG&v>UI(T1MHQDWB>pF literal 0 HcmV?d00001 diff --git a/hicolor_apps_32x32_xchat.png b/hicolor_apps_32x32_xchat.png new file mode 100644 index 0000000000000000000000000000000000000000..59b1850da79c97f4c114e5e65fb71d1c2f1870b5 GIT binary patch literal 2418 zcmV-&361uNP)P{QzDxiB02FjZSad;kbZBpK07_wN zbz&e>bY*F7Wpd{G_b&hd03mcmSaefwb#h~60BCe{a5^t9YH4k4VPh_Bb#rNBXklz@ zE@OIWX5(G}00@dnL_t(og{7Bya8>mc$3OSpw`6-SI|M?2#0TbOE2JVp5M-N+GB{HQ zTw3W$>s0Gfp+&K^ELx@2PPGf8*6JuSqK+dJY#v$%kmW%kA_)?K7m}AimY4PI@7=9` z4OZKv$FyiqeM}F0|A{?v{Z|Hl zjs4+P*Yy@_?yHvZWix|K2mV;`h`wprGT9gzCw>+9nWe66`Od`~o%igum8{x6%WBGW zZ(QVZUMu;=MJ}h5l6U<2yLQYiTJ}Q9)cL=9qUL$=pVieaVN3y=7rC}gEMLAR_ogS! zc)yFNouqW-Tj|NRyrUbgLBxhdE@x_bfxBeoTXrG(2{bIhK5en7aQ>sKk8QnL#4rKB zz1g*G@{I4S89(PC6D>c1Xf3pFMu>kx#htIGr=}FR*UkHS5$oo;oT+Jr?y@^yw+oTI z(D4kY9pGI}=JmHo(-%E@@8PG1ix?E}Se0vA(T%It&})iyvNnV3YXjfC$Oq zaIm)WqbIK`{q`dTbAMpQyA~qNpfTJ7ClDloyvp^~&Wkmx%TwIDj<-8H0UrF8%bAf^ z?7rci7wux-4rqV%YP=Ez|3Oj;e=9NV`8D_}{fy(F}xPTD9%%rMy*2yLFtzyed(E9JOaVn_HsOQ^g?(|1mQY}eKrcKC`B(>-2gEZ1Z?GS7oJ5B>NX(qc5cdP%X_O9Li8Sepo zvMlS8!{NZ;a2OtsCw9?CQ+HpeB_+wabb9_2Ns9WeDYLO$OPaw4?jH5!>ZV^;*Rd1m z0yKxifoaI`&{nKi;a{-$CTlpu*8R3<9Z$;GXKE}|5r}U7B22F!BFq2Q*!0_lFZ$m|Ri#!J)OCfI2`vOaMSEuH0W* zRF-T_$>ef(WN`e+y&A5fSA@2h=Fg7x#G!f%0nI$$}ys&E3s#QPp`~AZ@;;>%e z_Xo-|GRL7A2AbaQXHMa73eeB=&0Vj`rdbp=2Ja1&ourtuy z-1^smzh`OtW$z-vWD>rq0J|-n@BMTgu08MI`LY&401Ta!-e#r*&Q}zw?Zq|L;Ww*c z0&Yt^J;7$ntDI#Og-i7(FvhBZARq_=hOPrpZ!X}^zwcnl@;j+Nd5DE=`^dK_+?Z`3 z6-~1Jts(trrQbED#(qV_;1-nlT#l^V@yG8kcVuQY9UePfQG(Qr{%5Ec)Ho3ho@>kD zSY{;#0uPu@bDO1g5YlBC&tIBDy}?j$PF+sF2yuWs-Jb2fzi?t^)|ZDN%IL0`!8(qh zIF4x44E8BN8p#Sgp4Exm=|l5SfT&yEcpyI~ zJFBw=RLkh(ss)nA;a5}HRC`%_>Ow#Zb%!BmI#{wX#o!lqKX-Q?!KB1!j-?F2ni;RF z+?OV0n&ZL_0LkO=2n!0*UsxFGv@`_mWID?cyE-7IUfong3nXXKqnOz2=~mva_y4`N zBX-%vG|Lc@{AJ&7;AIUmZWpu1j`a!k}S&% zyO03AjWKHDk;n~xOH$TyBOn92`e!j34g`2ugOfnFEXx`s{tFU|42oz{s0+na=fN;}yMjjGc*JiaAGJqjA%vxE|<#$WC3L&l<3e4 z)Fd*G$g-@DBp-nv*p4Z{OcAnm_yVW{x@1{ahsF<9U`Qr4lu87F kR-+%^2=tM-2M)FW0e&)V?#+JwU;qFB07*qoM6N<$f}rZ4O8@`> literal 0 HcmV?d00001 diff --git a/hicolor_apps_48x48_xchat.png b/hicolor_apps_48x48_xchat.png new file mode 100644 index 0000000000000000000000000000000000000000..47db53ed11fba5c5eede305e5fabbe8c33c8d89b GIT binary patch literal 4018 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 0.60, dbus-glib-devel >= 0.60 @@ -48,6 +61,8 @@ BuildRequires: desktop-file-utils >= 0.10 BuildRequires: libnotify-devel # For xchat-2.8.8-link-against-libnotify.patch BuildRequires: autoconf +BuildRequires: automake + # For gconftool-2: Requires(post): GConf2 >= %{gconf_version} Requires(preun): GConf2 >= %{gconf_version} @@ -91,9 +106,18 @@ This package contains the X-Chat plugin providing the Tcl scripting interface. %patch52 -p1 -b .libnotify07 %patch53 -p1 -b .link-against-libnotify %patch54 -p0 -b .glib +%patch55 -p1 -b .hires-icons sed -i -e 's/#define GTK_DISABLE_DEPRECATED//g' src/fe-gtk/*.c +cp -p %{SOURCE1} icons/ +cp -p %{SOURCE2} icons/ +cp -p %{SOURCE3} icons/ +cp -p %{SOURCE4} icons/ +cp -p %{SOURCE5} icons/ +cp -p %{SOURCE6} icons/ +cp -p %{SOURCE7} icons/ + %build # Remove CVS files from source dirs so they're not installed into doc dirs. find . -name CVS -type d | xargs rm -rf @@ -102,8 +126,7 @@ export CFLAGS="$RPM_OPT_FLAGS $(perl -MExtUtils::Embed -e ccopts)" export LDFLAGS=$(perl -MExtUtils::Embed -e ldopts) # For xchat-2.8.8-link-against-libnotify.patch -autoconf -autoheader +./autogen.sh %configure --disable-textfe \ --enable-gtkfe \ @@ -152,18 +175,14 @@ EOF export GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source` gconftool-2 --makefile-install-rule /etc/gconf/schemas/apps_xchat_url_handler.schemas >& /dev/null || : - -%pre -if [ "$1" -gt 1 ]; then - export GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source` - gconftool-2 --makefile-uninstall-rule /etc/gconf/schemas/apps_xchat_url_handler.schemas >& /dev/null || : +%postun +if [ $1 -eq 0 ] ; then + /bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null + /usr/bin/gtk-update-icon-cache -f %{_datadir}/icons/hicolor &>/dev/null || : fi -%preun -if [ "$1" -eq 0 ]; then - export GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source` - gconftool-2 --makefile-uninstall-rule /etc/gconf/schemas/apps_xchat_url_handler.schemas >& /dev/null || : -fi +%posttrans +/usr/bin/gtk-update-icon-cache -f %{_datadir}/icons/hicolor &>/dev/null || : %clean %{__rm} -rf $RPM_BUILD_ROOT @@ -178,6 +197,7 @@ fi %{_libdir}/xchat/plugins/perl.so %{_libdir}/xchat/plugins/python.so %{_datadir}/applications/xchat.desktop +%{_datadir}/icons/hicolor/*/apps/xchat.png %{_datadir}/pixmaps/* %{_sysconfdir}/gconf/schemas/apps_xchat_url_handler.schemas %{_datadir}/dbus-1/services/org.xchat.service.service @@ -187,6 +207,9 @@ fi %{_libdir}/xchat/plugins/tcl.so %changelog +* Fri Jun 07 2013 Debarshi Ray - 1:2.8.8-18 +- Add hi-res icons (http://sourceforge.net/p/xchat/bugs/1504/) + * Fri Feb 15 2013 Fedora Release Engineering - 1:2.8.8-17 - Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild diff --git a/xchat.svg b/xchat.svg new file mode 100644 index 0000000..c7055d8 --- /dev/null +++ b/xchat.svg @@ -0,0 +1,1802 @@ + + + + + Pidgin + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Jakub Steiner + + + http://jimmac.musichall.cz + + Pidgin + + + pidgin + im + instant + messaging + + + + + + + + + + + + + + + + + + + + + Hylke Bons, Lapo Calamandrei + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From a9a3f193bba0c2ae4c850fab7dc778c2991d9bfa Mon Sep 17 00:00:00 2001 From: Debarshi Ray Date: Mon, 10 Jun 2013 13:38:19 +0200 Subject: [PATCH 04/30] Add BR on gettext-devel --- xchat.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xchat.spec b/xchat.spec index 3120802..ee26d1a 100644 --- a/xchat.spec +++ b/xchat.spec @@ -53,7 +53,7 @@ BuildRequires: perl perl(ExtUtils::Embed) python-devel openssl-devel pkgconfig, BuildRequires: GConf2-devel BuildRequires: dbus-devel >= 0.60, dbus-glib-devel >= 0.60 BuildRequires: glib2-devel >= 2.10.0, gtk2-devel >= 2.10.0, bison >= 1.35 -BuildRequires: gettext /bin/sed +BuildRequires: gettext-devel /bin/sed BuildRequires: libtool BuildRequires: libntlm-devel BuildRequires: libsexy-devel From 0bc4fc5696a938735820486dbbc2e642d687ee7d Mon Sep 17 00:00:00 2001 From: Debarshi Ray Date: Mon, 10 Jun 2013 14:48:29 +0200 Subject: [PATCH 05/30] Use XDG_CONFIG_HOME instead of home for config files (http://sourceforge.net/p/xchat/bugs/1506/) - Use name and generic name correctly in desktop file (http://sourceforge.net/p/xchat/bugs/1397/) --- xchat-2.8.8-desktop-file-name.patch | 13 + xchat-2.8.8-xdg-dirs.patch | 1224 +++++++++++++++++++++++++++ xchat.spec | 14 +- 3 files changed, 1250 insertions(+), 1 deletion(-) create mode 100644 xchat-2.8.8-desktop-file-name.patch create mode 100644 xchat-2.8.8-xdg-dirs.patch diff --git a/xchat-2.8.8-desktop-file-name.patch b/xchat-2.8.8-desktop-file-name.patch new file mode 100644 index 0000000..2d6044a --- /dev/null +++ b/xchat-2.8.8-desktop-file-name.patch @@ -0,0 +1,13 @@ +diff -urNp xchat-2.8.8.orig/xchat.desktop xchat-2.8.8/xchat.desktop +--- xchat-2.8.8.orig/xchat.desktop 2013-06-10 14:01:07.408432973 +0200 ++++ xchat-2.8.8/xchat.desktop 2013-06-10 14:12:56.044209785 +0200 +@@ -1,7 +1,8 @@ + [Desktop Entry] + Encoding=UTF-8 +-Name=XChat IRC ++Name=XChat + Name[zh_TW]=網路清談 ++GenericName=IRC Client + Comment[de]=IRC-Client + Comment[es]=Aplicación de IRC + Comment[fi]=IRC-sovellus diff --git a/xchat-2.8.8-xdg-dirs.patch b/xchat-2.8.8-xdg-dirs.patch new file mode 100644 index 0000000..5530085 --- /dev/null +++ b/xchat-2.8.8-xdg-dirs.patch @@ -0,0 +1,1224 @@ +diff -urNp xchat-2.8.8.orig/src/common/cfgfiles.c xchat-2.8.8/src/common/cfgfiles.c +--- xchat-2.8.8.orig/src/common/cfgfiles.c 2013-06-10 14:01:07.402432963 +0200 ++++ xchat-2.8.8/src/common/cfgfiles.c 2013-06-10 14:27:09.668464169 +0200 +@@ -1,3 +1,4 @@ ++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ + /* X-Chat + * Copyright (C) 1998 Peter Zelezny. + * +@@ -34,7 +35,8 @@ + #ifdef WIN32 + #define XCHAT_DIR "X-Chat 2" + #else +-#define XCHAT_DIR ".xchat2" ++#define XCHAT_DIR "xchat2" ++#define OLD_XCHAT_DIR ".xchat2" + #endif + #define DEF_FONT "Monospace 9" + +@@ -318,17 +320,68 @@ get_xdir_fs (void) + return xdir_fs; + } + ++void ++maybe_migrate_xdg_config (void) ++{ ++} ++ + #else + + char * + get_xdir_fs (void) + { + if (!xdir_fs) +- xdir_fs = g_strdup_printf ("%s/" XCHAT_DIR, g_get_home_dir ()); ++ xdir_fs = g_strdup_printf ("%s/" XCHAT_DIR, g_get_user_config_dir ()); + + return xdir_fs; + } + ++void ++maybe_migrate_xdg_config (void) ++{ ++ char *old_dir; ++ char *new_dir; ++ GFile *source; ++ GFile *dest; ++ GError *error; ++ gboolean res; ++ ++ new_dir = g_strdup_printf ("%s/" XCHAT_DIR, g_get_user_config_dir ()); ++ ++ /* already migrated */ ++ if (g_file_test (new_dir, G_FILE_TEST_IS_DIR)) ++ { ++ g_free (new_dir); ++ return; ++ } ++ ++ /* nothing to migrate */ ++ old_dir = g_strdup_printf ("%s/" OLD_XCHAT_DIR, g_get_home_dir ()); ++ if (!g_file_test (old_dir, G_FILE_TEST_IS_DIR)) ++ { ++ g_free (old_dir); ++ g_free (new_dir); ++ return; ++ } ++ ++ source = g_file_new_for_path (old_dir); ++ dest = g_file_new_for_path (new_dir); ++ ++ g_message (_("Migrating data from %s to %s"), old_dir, new_dir); ++ error = NULL; ++ res = g_file_move (source, dest, G_FILE_COPY_NONE, NULL, NULL, NULL, &error); ++ if (error != NULL) ++ { ++ g_warning (_("Error migrating data: %s"), error->message); ++ g_error_free (error); ++ } ++ ++ g_free (old_dir); ++ g_free (new_dir); ++ g_object_unref (source); ++ g_object_unref (dest); ++} ++ + #endif /* !WIN32 */ + + char * +@@ -351,7 +404,7 @@ check_prefs_dir (void) + #else + if (mkdir (dir, S_IRUSR | S_IWUSR | S_IXUSR) != 0) + #endif +- fe_message (_("Cannot create ~/.xchat2"), FE_MSG_ERROR); ++ fe_message (_("Cannot create configuration directory"), FE_MSG_ERROR); + } + } + +@@ -593,6 +646,7 @@ load_config (void) + const char *username, *realname; + int res, val, i, fh; + ++ maybe_migrate_xdg_config (); + check_prefs_dir (); + username = g_get_user_name (); + if (!username) +diff -urNp xchat-2.8.8.orig/src/common/cfgfiles.c.orig xchat-2.8.8/src/common/cfgfiles.c.orig +--- xchat-2.8.8.orig/src/common/cfgfiles.c.orig 1970-01-01 01:00:00.000000000 +0100 ++++ xchat-2.8.8/src/common/cfgfiles.c.orig 2013-06-10 14:26:18.219319628 +0200 +@@ -0,0 +1,1104 @@ ++/* X-Chat ++ * Copyright (C) 1998 Peter Zelezny. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "xchat.h" ++#include "cfgfiles.h" ++#include "util.h" ++#include "fe.h" ++#include "text.h" ++#include "xchatc.h" ++ ++#ifdef WIN32 ++#define XCHAT_DIR "X-Chat 2" ++#else ++#define XCHAT_DIR ".xchat2" ++#endif ++#define DEF_FONT "Monospace 9" ++ ++void ++list_addentry (GSList ** list, char *cmd, char *name) ++{ ++ struct popup *pop; ++ int cmd_len = 1, name_len; ++ ++ /* remove <2.8.0 stuff */ ++ if (!strcmp (cmd, "away") && !strcmp (name, "BACK")) ++ return; ++ ++ if (cmd) ++ cmd_len = strlen (cmd) + 1; ++ name_len = strlen (name) + 1; ++ ++ pop = malloc (sizeof (struct popup) + cmd_len + name_len); ++ pop->name = (char *) pop + sizeof (struct popup); ++ pop->cmd = pop->name + name_len; ++ ++ memcpy (pop->name, name, name_len); ++ if (cmd) ++ memcpy (pop->cmd, cmd, cmd_len); ++ else ++ pop->cmd[0] = 0; ++ ++ *list = g_slist_append (*list, pop); ++} ++ ++/* read it in from a buffer to our linked list */ ++ ++static void ++list_load_from_data (GSList ** list, char *ibuf, int size) ++{ ++ char cmd[384]; ++ char name[128]; ++ char *buf; ++ int pnt = 0; ++ ++ cmd[0] = 0; ++ name[0] = 0; ++ ++ while (buf_get_line (ibuf, &buf, &pnt, size)) ++ { ++ if (*buf != '#') ++ { ++ if (!strncasecmp (buf, "NAME ", 5)) ++ { ++ safe_strcpy (name, buf + 5, sizeof (name)); ++ } ++ else if (!strncasecmp (buf, "CMD ", 4)) ++ { ++ safe_strcpy (cmd, buf + 4, sizeof (cmd)); ++ if (*name) ++ { ++ list_addentry (list, cmd, name); ++ cmd[0] = 0; ++ name[0] = 0; ++ } ++ } ++ } ++ } ++} ++ ++void ++list_loadconf (char *file, GSList ** list, char *defaultconf) ++{ ++ char filebuf[256]; ++ char *ibuf; ++ int fh; ++ struct stat st; ++ ++ snprintf (filebuf, sizeof (filebuf), "%s/%s", get_xdir_fs (), file); ++ fh = open (filebuf, O_RDONLY | OFLAGS); ++ if (fh == -1) ++ { ++ if (defaultconf) ++ list_load_from_data (list, defaultconf, strlen (defaultconf)); ++ return; ++ } ++ if (fstat (fh, &st) != 0) ++ { ++ perror ("fstat"); ++ abort (); ++ } ++ ++ ibuf = malloc (st.st_size); ++ read (fh, ibuf, st.st_size); ++ close (fh); ++ ++ list_load_from_data (list, ibuf, st.st_size); ++ ++ free (ibuf); ++} ++ ++void ++list_free (GSList ** list) ++{ ++ void *data; ++ while (*list) ++ { ++ data = (void *) (*list)->data; ++ free (data); ++ *list = g_slist_remove (*list, data); ++ } ++} ++ ++int ++list_delentry (GSList ** list, char *name) ++{ ++ struct popup *pop; ++ GSList *alist = *list; ++ ++ while (alist) ++ { ++ pop = (struct popup *) alist->data; ++ if (!strcasecmp (name, pop->name)) ++ { ++ *list = g_slist_remove (*list, pop); ++ free (pop); ++ return 1; ++ } ++ alist = alist->next; ++ } ++ return 0; ++} ++ ++char * ++cfg_get_str (char *cfg, char *var, char *dest, int dest_len) ++{ ++ while (1) ++ { ++ if (!strncasecmp (var, cfg, strlen (var))) ++ { ++ char *value, t; ++ cfg += strlen (var); ++ while (*cfg == ' ') ++ cfg++; ++ if (*cfg == '=') ++ cfg++; ++ while (*cfg == ' ') ++ cfg++; ++ /*while (*cfg == ' ' || *cfg == '=') ++ cfg++; */ ++ value = cfg; ++ while (*cfg != 0 && *cfg != '\n') ++ cfg++; ++ t = *cfg; ++ *cfg = 0; ++ safe_strcpy (dest, value, dest_len); ++ *cfg = t; ++ return cfg; ++ } ++ while (*cfg != 0 && *cfg != '\n') ++ cfg++; ++ if (*cfg == 0) ++ return 0; ++ cfg++; ++ if (*cfg == 0) ++ return 0; ++ } ++} ++ ++static int ++cfg_put_str (int fh, char *var, char *value) ++{ ++ char buf[512]; ++ int len; ++ ++ snprintf (buf, sizeof buf, "%s = %s\n", var, value); ++ len = strlen (buf); ++ return (write (fh, buf, len) == len); ++} ++ ++int ++cfg_put_color (int fh, int r, int g, int b, char *var) ++{ ++ char buf[400]; ++ int len; ++ ++ snprintf (buf, sizeof buf, "%s = %04x %04x %04x\n", var, r, g, b); ++ len = strlen (buf); ++ return (write (fh, buf, len) == len); ++} ++ ++int ++cfg_put_int (int fh, int value, char *var) ++{ ++ char buf[400]; ++ int len; ++ ++ if (value == -1) ++ value = 1; ++ ++ snprintf (buf, sizeof buf, "%s = %d\n", var, value); ++ len = strlen (buf); ++ return (write (fh, buf, len) == len); ++} ++ ++int ++cfg_get_color (char *cfg, char *var, int *r, int *g, int *b) ++{ ++ char str[128]; ++ ++ if (!cfg_get_str (cfg, var, str, sizeof (str))) ++ return 0; ++ ++ sscanf (str, "%04x %04x %04x", r, g, b); ++ return 1; ++} ++ ++int ++cfg_get_int_with_result (char *cfg, char *var, int *result) ++{ ++ char str[128]; ++ ++ if (!cfg_get_str (cfg, var, str, sizeof (str))) ++ { ++ *result = 0; ++ return 0; ++ } ++ ++ *result = 1; ++ return atoi (str); ++} ++ ++int ++cfg_get_int (char *cfg, char *var) ++{ ++ char str[128]; ++ ++ if (!cfg_get_str (cfg, var, str, sizeof (str))) ++ return 0; ++ ++ return atoi (str); ++} ++ ++char *xdir_fs = NULL; /* file system encoding */ ++char *xdir_utf = NULL; /* utf-8 encoding */ ++ ++#ifdef WIN32 ++ ++#include ++ ++static gboolean ++get_reg_str (const char *sub, const char *name, char *out, DWORD len) ++{ ++ HKEY hKey; ++ DWORD t; ++ ++ if (RegOpenKeyEx (HKEY_CURRENT_USER, sub, 0, KEY_READ, &hKey) == ++ ERROR_SUCCESS) ++ { ++ if (RegQueryValueEx (hKey, name, NULL, &t, out, &len) != ERROR_SUCCESS || ++ t != REG_SZ) ++ { ++ RegCloseKey (hKey); ++ return FALSE; ++ } ++ out[len-1] = 0; ++ RegCloseKey (hKey); ++ return TRUE; ++ } ++ ++ return FALSE; ++} ++ ++char * ++get_xdir_fs (void) ++{ ++ if (!xdir_fs) ++ { ++ char out[256]; ++ ++ if (!get_reg_str ("Software\\Microsoft\\Windows\\CurrentVersion\\" ++ "Explorer\\Shell Folders", "AppData", out, sizeof (out))) ++ return "./config"; ++ xdir_fs = g_strdup_printf ("%s\\" XCHAT_DIR, out); ++ } ++ return xdir_fs; ++} ++ ++#else ++ ++char * ++get_xdir_fs (void) ++{ ++ if (!xdir_fs) ++ xdir_fs = g_strdup_printf ("%s/" XCHAT_DIR, g_get_home_dir ()); ++ ++ return xdir_fs; ++} ++ ++#endif /* !WIN32 */ ++ ++char * ++get_xdir_utf8 (void) ++{ ++ if (!xdir_utf) /* never free this, keep it for program life time */ ++ xdir_utf = xchat_filename_to_utf8 (get_xdir_fs (), -1, 0, 0, 0); ++ ++ return xdir_utf; ++} ++ ++static void ++check_prefs_dir (void) ++{ ++ char *dir = get_xdir_fs (); ++ if (access (dir, F_OK) != 0) ++ { ++#ifdef WIN32 ++ if (mkdir (dir) != 0) ++#else ++ if (mkdir (dir, S_IRUSR | S_IWUSR | S_IXUSR) != 0) ++#endif ++ fe_message (_("Cannot create ~/.xchat2"), FE_MSG_ERROR); ++ } ++} ++ ++static char * ++default_file (void) ++{ ++ static char *dfile = 0; ++ ++ if (!dfile) ++ { ++ dfile = malloc (strlen (get_xdir_fs ()) + 12); ++ sprintf (dfile, "%s/xchat.conf", get_xdir_fs ()); ++ } ++ return dfile; ++} ++ ++/* Keep these sorted!! */ ++ ++const struct prefs vars[] = { ++ {"auto_save", P_OFFINT (autosave), TYPE_BOOL}, ++ {"auto_save_url", P_OFFINT (autosave_url), TYPE_BOOL}, ++ ++ {"away_auto_unmark", P_OFFINT (auto_unmark_away), TYPE_BOOL}, ++ {"away_reason", P_OFFSET (awayreason), TYPE_STR}, ++ {"away_show_message", P_OFFINT (show_away_message), TYPE_BOOL}, ++ {"away_show_once", P_OFFINT (show_away_once), TYPE_BOOL}, ++ {"away_size_max", P_OFFINT (away_size_max), TYPE_INT}, ++ {"away_timeout", P_OFFINT (away_timeout), TYPE_INT}, ++ {"away_track", P_OFFINT (away_track), TYPE_BOOL}, ++ ++ {"completion_amount", P_OFFINT (completion_amount), TYPE_INT}, ++ {"completion_auto", P_OFFINT (nickcompletion), TYPE_BOOL}, ++ {"completion_sort", P_OFFINT (completion_sort), TYPE_INT}, ++ {"completion_suffix", P_OFFSET (nick_suffix), TYPE_STR}, ++ ++ {"dcc_auto_chat", P_OFFINT (autodccchat), TYPE_INT}, ++ {"dcc_auto_resume", P_OFFINT (autoresume), TYPE_BOOL}, ++ {"dcc_auto_send", P_OFFINT (autodccsend), TYPE_INT}, ++ {"dcc_blocksize", P_OFFINT (dcc_blocksize), TYPE_INT}, ++ {"dcc_completed_dir", P_OFFSET (dcc_completed_dir), TYPE_STR}, ++ {"dcc_dir", P_OFFSET (dccdir), TYPE_STR}, ++ {"dcc_fast_send", P_OFFINT (fastdccsend), TYPE_BOOL}, ++ {"dcc_global_max_get_cps", P_OFFINT (dcc_global_max_get_cps), TYPE_INT}, ++ {"dcc_global_max_send_cps", P_OFFINT (dcc_global_max_send_cps), TYPE_INT}, ++ {"dcc_ip", P_OFFSET (dcc_ip_str), TYPE_STR}, ++ {"dcc_ip_from_server", P_OFFINT (ip_from_server), TYPE_BOOL}, ++ {"dcc_max_get_cps", P_OFFINT (dcc_max_get_cps), TYPE_INT}, ++ {"dcc_max_send_cps", P_OFFINT (dcc_max_send_cps), TYPE_INT}, ++ {"dcc_permissions", P_OFFINT (dccpermissions), TYPE_INT}, ++ {"dcc_port_first", P_OFFINT (first_dcc_send_port), TYPE_INT}, ++ {"dcc_port_last", P_OFFINT (last_dcc_send_port), TYPE_INT}, ++ {"dcc_remove", P_OFFINT (dcc_remove), TYPE_BOOL}, ++ {"dcc_save_nick", P_OFFINT (dccwithnick), TYPE_BOOL}, ++ {"dcc_send_fillspaces", P_OFFINT (dcc_send_fillspaces), TYPE_BOOL}, ++ {"dcc_stall_timeout", P_OFFINT (dccstalltimeout), TYPE_INT}, ++ {"dcc_timeout", P_OFFINT (dcctimeout), TYPE_INT}, ++ ++ {"dnsprogram", P_OFFSET (dnsprogram), TYPE_STR}, ++ ++ {"flood_ctcp_num", P_OFFINT (ctcp_number_limit), TYPE_INT}, ++ {"flood_ctcp_time", P_OFFINT (ctcp_time_limit), TYPE_INT}, ++ {"flood_msg_num", P_OFFINT (msg_number_limit), TYPE_INT}, ++ {"flood_msg_time", P_OFFINT (msg_time_limit), TYPE_INT}, ++ ++ {"gui_auto_open_chat", P_OFFINT (autoopendccchatwindow), TYPE_BOOL}, ++ {"gui_auto_open_dialog", P_OFFINT (autodialog), TYPE_BOOL}, ++ {"gui_auto_open_recv", P_OFFINT (autoopendccrecvwindow), TYPE_BOOL}, ++ {"gui_auto_open_send", P_OFFINT (autoopendccsendwindow), TYPE_BOOL}, ++ {"gui_dialog_height", P_OFFINT (dialog_height), TYPE_INT}, ++ {"gui_dialog_left", P_OFFINT (dialog_left), TYPE_INT}, ++ {"gui_dialog_top", P_OFFINT (dialog_top), TYPE_INT}, ++ {"gui_dialog_width", P_OFFINT (dialog_width), TYPE_INT}, ++ {"gui_hide_menu", P_OFFINT (hidemenu), TYPE_BOOL}, ++ {"gui_input_spell", P_OFFINT (gui_input_spell), TYPE_BOOL}, ++ {"gui_input_style", P_OFFINT (style_inputbox), TYPE_BOOL}, ++ {"gui_join_dialog", P_OFFINT (gui_join_dialog), TYPE_BOOL}, ++ {"gui_lagometer", P_OFFINT (lagometer), TYPE_INT}, ++ {"gui_mode_buttons", P_OFFINT (chanmodebuttons), TYPE_BOOL}, ++ {"gui_pane_left_size", P_OFFINT (gui_pane_left_size), TYPE_INT}, ++ {"gui_pane_right_size", P_OFFINT (gui_pane_right_size), TYPE_INT}, ++ {"gui_quit_dialog", P_OFFINT (gui_quit_dialog), TYPE_BOOL}, ++ {"gui_slist_select", P_OFFINT (slist_select), TYPE_INT}, ++ {"gui_slist_skip", P_OFFINT (slist_skip), TYPE_BOOL}, ++ {"gui_throttlemeter", P_OFFINT (throttlemeter), TYPE_INT}, ++ {"gui_topicbar", P_OFFINT (topicbar), TYPE_BOOL}, ++ {"gui_tray", P_OFFINT (gui_tray), TYPE_BOOL}, ++ {"gui_tray_flags", P_OFFINT (gui_tray_flags), TYPE_INT}, ++ {"gui_tweaks", P_OFFINT (gui_tweaks), TYPE_INT}, ++ {"gui_ulist_buttons", P_OFFINT (userlistbuttons), TYPE_BOOL}, ++ {"gui_ulist_doubleclick", P_OFFSET (doubleclickuser), TYPE_STR}, ++ {"gui_ulist_hide", P_OFFINT (hideuserlist), TYPE_BOOL}, ++ {"gui_ulist_left", P_OFFINT (_gui_ulist_left), TYPE_BOOL}, /* obsolete */ ++ {"gui_ulist_pos", P_OFFINT (gui_ulist_pos), TYPE_INT}, ++ {"gui_ulist_resizable", P_OFFINT (paned_userlist), TYPE_BOOL}, ++ {"gui_ulist_show_hosts", P_OFFINT(showhostname_in_userlist), TYPE_BOOL}, ++ {"gui_ulist_sort", P_OFFINT (userlist_sort), TYPE_INT}, ++ {"gui_ulist_style", P_OFFINT (style_namelistgad), TYPE_BOOL}, ++ {"gui_url_mod", P_OFFINT (gui_url_mod), TYPE_INT}, ++ {"gui_usermenu", P_OFFINT (gui_usermenu), TYPE_BOOL}, ++ {"gui_win_height", P_OFFINT (mainwindow_height), TYPE_INT}, ++ {"gui_win_left", P_OFFINT (mainwindow_left), TYPE_INT}, ++ {"gui_win_save", P_OFFINT (mainwindow_save), TYPE_BOOL}, ++ {"gui_win_state", P_OFFINT (gui_win_state), TYPE_INT}, ++ {"gui_win_top", P_OFFINT (mainwindow_top), TYPE_INT}, ++ {"gui_win_width", P_OFFINT (mainwindow_width), TYPE_INT}, ++ ++#ifdef WIN32 ++ {"identd", P_OFFINT (identd), TYPE_BOOL}, ++#endif ++ {"input_balloon_chans", P_OFFINT (input_balloon_chans), TYPE_BOOL}, ++ {"input_balloon_hilight", P_OFFINT (input_balloon_hilight), TYPE_BOOL}, ++ {"input_balloon_priv", P_OFFINT (input_balloon_priv), TYPE_BOOL}, ++ {"input_balloon_time", P_OFFINT (input_balloon_time), TYPE_INT}, ++ {"input_beep_chans", P_OFFINT (input_beep_chans), TYPE_BOOL}, ++ {"input_beep_hilight", P_OFFINT (input_beep_hilight), TYPE_BOOL}, ++ {"input_beep_msg", P_OFFINT (input_beep_priv), TYPE_BOOL}, ++ {"input_command_char", P_OFFSET (cmdchar), TYPE_STR}, ++ {"input_filter_beep", P_OFFINT (filterbeep), TYPE_BOOL}, ++ {"input_flash_chans", P_OFFINT (input_flash_chans), TYPE_BOOL}, ++ {"input_flash_hilight", P_OFFINT (input_flash_hilight), TYPE_BOOL}, ++ {"input_flash_priv", P_OFFINT (input_flash_priv), TYPE_BOOL}, ++ {"input_perc_ascii", P_OFFINT (perc_ascii), TYPE_BOOL}, ++ {"input_perc_color", P_OFFINT (perc_color), TYPE_BOOL}, ++ {"input_tray_chans", P_OFFINT (input_tray_chans), TYPE_BOOL}, ++ {"input_tray_hilight", P_OFFINT (input_tray_hilight), TYPE_BOOL}, ++ {"input_tray_priv", P_OFFINT (input_tray_priv), TYPE_BOOL}, ++ ++ {"irc_auto_rejoin", P_OFFINT (autorejoin), TYPE_BOOL}, ++ {"irc_ban_type", P_OFFINT (bantype), TYPE_INT}, ++ {"irc_conf_mode", P_OFFINT (confmode), TYPE_BOOL}, ++ {"irc_extra_hilight", P_OFFSET (irc_extra_hilight), TYPE_STR}, ++ {"irc_hide_version", P_OFFINT (hidever), TYPE_BOOL}, ++ {"irc_id_ntext", P_OFFSET (irc_id_ntext), TYPE_STR}, ++ {"irc_id_ytext", P_OFFSET (irc_id_ytext), TYPE_STR}, ++ {"irc_invisible", P_OFFINT (invisible), TYPE_BOOL}, ++ {"irc_join_delay", P_OFFINT (irc_join_delay), TYPE_INT}, ++ {"irc_logging", P_OFFINT (logging), TYPE_BOOL}, ++ {"irc_logmask", P_OFFSET (logmask), TYPE_STR}, ++ {"irc_nick1", P_OFFSET (nick1), TYPE_STR}, ++ {"irc_nick2", P_OFFSET (nick2), TYPE_STR}, ++ {"irc_nick3", P_OFFSET (nick3), TYPE_STR}, ++ {"irc_nick_hilight", P_OFFSET (irc_nick_hilight), TYPE_STR}, ++ {"irc_no_hilight", P_OFFSET (irc_no_hilight), TYPE_STR}, ++ {"irc_part_reason", P_OFFSET (partreason), TYPE_STR}, ++ {"irc_quit_reason", P_OFFSET (quitreason), TYPE_STR}, ++ {"irc_raw_modes", P_OFFINT (raw_modes), TYPE_BOOL}, ++ {"irc_real_name", P_OFFSET (realname), TYPE_STR}, ++ {"irc_servernotice", P_OFFINT (servernotice), TYPE_BOOL}, ++ {"irc_skip_motd", P_OFFINT (skipmotd), TYPE_BOOL}, ++ {"irc_user_name", P_OFFSET (username), TYPE_STR}, ++ {"irc_wallops", P_OFFINT (wallops), TYPE_BOOL}, ++ {"irc_who_join", P_OFFINT (userhost), TYPE_BOOL}, ++ {"irc_whois_front", P_OFFINT (irc_whois_front), TYPE_BOOL}, ++ ++ {"net_auto_reconnect", P_OFFINT (autoreconnect), TYPE_BOOL}, ++ {"net_auto_reconnectonfail", P_OFFINT (autoreconnectonfail), TYPE_BOOL}, ++ {"net_bind_host", P_OFFSET (hostname), TYPE_STR}, ++ {"net_ping_timeout", P_OFFINT (pingtimeout), TYPE_INT}, ++ {"net_proxy_auth", P_OFFINT (proxy_auth), TYPE_BOOL}, ++ {"net_proxy_host", P_OFFSET (proxy_host), TYPE_STR}, ++ {"net_proxy_pass", P_OFFSET (proxy_pass), TYPE_STR}, ++ {"net_proxy_port", P_OFFINT (proxy_port), TYPE_INT}, ++ {"net_proxy_type", P_OFFINT (proxy_type), TYPE_INT}, ++ {"net_proxy_use", P_OFFINT (proxy_use), TYPE_INT}, ++ {"net_proxy_user", P_OFFSET (proxy_user), TYPE_STR}, ++ ++ {"net_reconnect_delay", P_OFFINT (recon_delay), TYPE_INT}, ++ {"net_throttle", P_OFFINT (throttle), TYPE_BOOL}, ++ ++ {"notify_timeout", P_OFFINT (notify_timeout), TYPE_INT}, ++ {"notify_whois_online", P_OFFINT (whois_on_notifyonline), TYPE_BOOL}, ++ ++ {"perl_warnings", P_OFFINT (perlwarnings), TYPE_BOOL}, ++ ++ {"sound_command", P_OFFSET (soundcmd), TYPE_STR}, ++ {"sound_dir", P_OFFSET (sounddir), TYPE_STR}, ++ {"stamp_log", P_OFFINT (timestamp_logs), TYPE_BOOL}, ++ {"stamp_log_format", P_OFFSET (timestamp_log_format), TYPE_STR}, ++ {"stamp_text", P_OFFINT (timestamp), TYPE_BOOL}, ++ {"stamp_text_format", P_OFFSET (stamp_format), TYPE_STR}, ++ ++ {"tab_chans", P_OFFINT (tabchannels), TYPE_BOOL}, ++ {"tab_dialogs", P_OFFINT (privmsgtab), TYPE_BOOL}, ++ {"tab_layout", P_OFFINT (tab_layout), TYPE_INT}, ++ {"tab_new_to_front", P_OFFINT (newtabstofront), TYPE_INT}, ++ {"tab_notices", P_OFFINT (notices_tabs), TYPE_BOOL}, ++ {"tab_pos", P_OFFINT (tab_pos), TYPE_INT}, ++ {"tab_position", P_OFFINT (_tabs_position), TYPE_INT}, /* obsolete */ ++ {"tab_server", P_OFFINT (use_server_tab), TYPE_BOOL}, ++ {"tab_small", P_OFFINT (tab_small), TYPE_INT}, ++ {"tab_sort", P_OFFINT (tab_sort), TYPE_BOOL}, ++ {"tab_trunc", P_OFFINT (truncchans), TYPE_INT}, ++ {"tab_utils", P_OFFINT (windows_as_tabs), TYPE_BOOL}, ++ ++ {"text_background", P_OFFSET (background), TYPE_STR}, ++ {"text_color_nicks", P_OFFINT (colorednicks), TYPE_BOOL}, ++ {"text_font", P_OFFSET (font_normal), TYPE_STR}, ++ {"text_indent", P_OFFINT (indent_nicks), TYPE_BOOL}, ++ {"text_max_indent", P_OFFINT (max_auto_indent), TYPE_INT}, ++ {"text_max_lines", P_OFFINT (max_lines), TYPE_INT}, ++ {"text_replay", P_OFFINT (text_replay), TYPE_BOOL}, ++ {"text_show_marker", P_OFFINT (show_marker), TYPE_BOOL}, ++ {"text_show_sep", P_OFFINT (show_separator), TYPE_BOOL}, ++ {"text_stripcolor", P_OFFINT (stripcolor), TYPE_BOOL}, ++ {"text_thin_sep", P_OFFINT (thin_separator), TYPE_BOOL}, ++ {"text_tint_blue", P_OFFINT (tint_blue), TYPE_INT}, ++ {"text_tint_green", P_OFFINT (tint_green), TYPE_INT}, ++ {"text_tint_red", P_OFFINT (tint_red), TYPE_INT}, ++ {"text_transparent", P_OFFINT (transparent), TYPE_BOOL}, ++ {"text_wordwrap", P_OFFINT (wordwrap), TYPE_BOOL}, ++ ++ {0, 0, 0}, ++}; ++ ++static char * ++convert_with_fallback (const char *str, const char *fallback) ++{ ++ char *utf; ++ ++ utf = g_locale_to_utf8 (str, -1, 0, 0, 0); ++ if (!utf) ++ { ++ /* this can happen if CHARSET envvar is set wrong */ ++ /* maybe it's already utf8 (breakage!) */ ++ if (!g_utf8_validate (str, -1, NULL)) ++ utf = g_strdup (fallback); ++ else ++ utf = g_strdup (str); ++ } ++ ++ return utf; ++} ++ ++void ++load_config (void) ++{ ++ struct stat st; ++ char *cfg, *sp; ++ const char *username, *realname; ++ int res, val, i, fh; ++ ++ check_prefs_dir (); ++ username = g_get_user_name (); ++ if (!username) ++ username = "root"; ++ ++ realname = g_get_real_name (); ++ if ((realname && realname[0] == 0) || !realname) ++ realname = username; ++ ++ username = convert_with_fallback (username, "username"); ++ realname = convert_with_fallback (realname, "realname"); ++ ++ memset (&prefs, 0, sizeof (struct xchatprefs)); ++ ++ /* put in default values, anything left out is automatically zero */ ++ prefs.local_ip = 0xffffffff; ++ prefs.irc_join_delay = 3; ++ prefs.show_marker = 1; ++ prefs.newtabstofront = 2; ++ prefs.completion_amount = 5; ++ prefs.away_timeout = 60; ++ prefs.away_size_max = 300; ++ prefs.away_track = 1; ++ prefs.timestamp_logs = 1; ++ prefs.truncchans = 20; ++ prefs.autoresume = 1; ++ prefs.show_away_once = 1; ++ prefs.indent_nicks = 1; ++ prefs.thin_separator = 1; ++ prefs._tabs_position = 2; /* 2 = left */ ++ prefs.fastdccsend = 1; ++ prefs.wordwrap = 1; ++ prefs.autosave = 1; ++ prefs.autodialog = 1; ++ prefs.gui_input_spell = 1; ++ prefs.autoreconnect = 1; ++ prefs.recon_delay = 10; ++ prefs.text_replay = 1; ++ prefs.tabchannels = 1; ++ prefs.tab_layout = 2; /* 0=Tabs 1=Reserved 2=Tree */ ++ prefs.tab_sort = 1; ++ prefs.paned_userlist = 1; ++ prefs.newtabstofront = 2; ++ prefs.use_server_tab = 1; ++ prefs.privmsgtab = 1; ++ /*prefs.style_inputbox = 1;*/ ++ prefs.dccpermissions = 0600; ++ prefs.max_lines = 500; ++ prefs.mainwindow_width = 640; ++ prefs.mainwindow_height = 400; ++ prefs.dialog_width = 500; ++ prefs.dialog_height = 256; ++ prefs.gui_join_dialog = 1; ++ prefs.gui_quit_dialog = 1; ++ prefs.dcctimeout = 180; ++ prefs.dccstalltimeout = 60; ++ prefs.notify_timeout = 15; ++ prefs.tint_red = ++ prefs.tint_green = ++ prefs.tint_blue = 195; ++ prefs.auto_indent = 1; ++ prefs.max_auto_indent = 256; ++ prefs.show_separator = 1; ++ prefs.dcc_blocksize = 1024; ++ prefs.throttle = 1; ++ /*FIXME*/ prefs.msg_time_limit = 30; ++ prefs.msg_number_limit = 5; ++ prefs.ctcp_time_limit = 30; ++ prefs.ctcp_number_limit = 5; ++ prefs.topicbar = 1; ++ prefs.lagometer = 1; ++ prefs.throttlemeter = 1; ++ prefs.autoopendccrecvwindow = 1; ++ prefs.autoopendccsendwindow = 1; ++ prefs.autoopendccchatwindow = 1; ++ prefs.userhost = 1; ++ prefs.gui_url_mod = 4; /* ctrl */ ++ prefs.gui_tray = 1; ++ prefs.gui_pane_left_size = 100; ++ prefs.gui_pane_right_size = 100; ++ prefs.mainwindow_save = 1; ++ prefs.bantype = 2; ++ prefs.input_balloon_time = 20; ++ prefs.input_flash_priv = prefs.input_flash_hilight = 1; ++ prefs.input_tray_priv = prefs.input_tray_hilight = 1; ++ prefs.autodccsend = 2; /* browse mode */ ++#ifdef WIN32 ++ prefs.identd = 1; ++#endif ++ strcpy (prefs.stamp_format, "[%H:%M] "); ++ strcpy (prefs.timestamp_log_format, "%b %d %H:%M:%S "); ++ strcpy (prefs.logmask, "%n-%c.log"); ++ strcpy (prefs.nick_suffix, ","); ++ strcpy (prefs.cmdchar, "/"); ++ strcpy (prefs.nick1, username); ++ strcpy (prefs.nick2, username); ++ strcat (prefs.nick2, "_"); ++ strcpy (prefs.nick3, username); ++ strcat (prefs.nick3, "__"); ++ strcpy (prefs.realname, realname); ++ strcpy (prefs.username, username); ++#ifdef WIN32 ++ strcpy (prefs.sounddir, "./sounds"); ++ { ++ char out[256]; ++ ++ if (get_reg_str ("Software\\Microsoft\\Windows\\CurrentVersion\\" ++ "Explorer\\Shell Folders", "Personal", out, sizeof (out))) ++ snprintf (prefs.dccdir, sizeof (prefs.dccdir), "%s\\Downloads", out); ++ else ++ snprintf (prefs.dccdir, sizeof (prefs.dccdir), "%s\\Downloads", get_xdir_utf8 ()); ++ } ++#else ++ snprintf (prefs.sounddir, sizeof (prefs.sounddir), "%s/sounds", get_xdir_utf8 ()); ++ snprintf (prefs.dccdir, sizeof (prefs.dccdir), "%s/downloads", get_xdir_utf8 ()); ++#endif ++ strcpy (prefs.doubleclickuser, "QUOTE WHOIS %s %s"); ++ strcpy (prefs.awayreason, _("I'm busy")); ++ strcpy (prefs.quitreason, _("Leaving")); ++ strcpy (prefs.partreason, prefs.quitreason); ++ strcpy (prefs.font_normal, DEF_FONT); ++ strcpy (prefs.dnsprogram, "host"); ++ strcpy (prefs.irc_no_hilight, "NickServ,ChanServ"); ++ ++ g_free ((char *)username); ++ g_free ((char *)realname); ++ ++ fh = open (default_file (), OFLAGS | O_RDONLY); ++ if (fh != -1) ++ { ++ fstat (fh, &st); ++ cfg = malloc (st.st_size + 1); ++ cfg[0] = '\0'; ++ i = read (fh, cfg, st.st_size); ++ if (i >= 0) ++ cfg[i] = '\0'; /* make sure cfg is NULL terminated */ ++ close (fh); ++ i = 0; ++ do ++ { ++ switch (vars[i].type) ++ { ++ case TYPE_STR: ++ cfg_get_str (cfg, vars[i].name, (char *) &prefs + vars[i].offset, ++ vars[i].len); ++ break; ++ case TYPE_BOOL: ++ case TYPE_INT: ++ val = cfg_get_int_with_result (cfg, vars[i].name, &res); ++ if (res) ++ *((int *) &prefs + vars[i].offset) = val; ++ break; ++ } ++ i++; ++ } ++ while (vars[i].name); ++ ++ free (cfg); ++ ++ } else ++ { ++#ifndef WIN32 ++#ifndef __EMX__ ++ /* OS/2 uses UID 0 all the time */ ++ if (getuid () == 0) ++ fe_message (_("* Running IRC as root is stupid! You should\n" ++ " create a User Account and use that to login.\n"), FE_MSG_WARN|FE_MSG_WAIT); ++#endif ++#endif /* !WIN32 */ ++ ++ mkdir_utf8 (prefs.dccdir); ++ mkdir_utf8 (prefs.dcc_completed_dir); ++ } ++ if (prefs.mainwindow_height < 138) ++ prefs.mainwindow_height = 138; ++ if (prefs.mainwindow_width < 106) ++ prefs.mainwindow_width = 106; ++ ++ sp = strchr (prefs.username, ' '); ++ if (sp) ++ sp[0] = 0; /* spaces in username would break the login */ ++ ++ /* try to make sense of old ulist/tree position settings */ ++ if (prefs.gui_ulist_pos == 0) ++ { ++ prefs.gui_ulist_pos = 3; /* top right */ ++ if (prefs._gui_ulist_left) ++ prefs.gui_ulist_pos = 2; /* bottom left */ ++ ++ switch (prefs._tabs_position) ++ { ++ case 0: ++ prefs.tab_pos = 6; /* bottom */ ++ break; ++ case 1: ++ prefs.tab_pos = 5; /* top */ ++ break; ++ case 2: ++ prefs.tab_pos = 1; /* left */ ++ break; ++ case 3: ++ prefs.tab_pos = 4; /* right */ ++ break; ++ case 4: ++ prefs.tab_pos = 1; /* (hidden)left */ ++ break; ++ case 5: ++ if (prefs._gui_ulist_left) ++ { ++ prefs.tab_pos = 1; /* above ulist left */ ++ prefs.gui_ulist_pos = 2; ++ } ++ else ++ { ++ prefs.tab_pos = 3; /* above ulist right */ ++ prefs.gui_ulist_pos = 4; ++ } ++ break; ++ } ++ } ++} ++ ++int ++save_config (void) ++{ ++ int fh, i; ++ char *new_config, *config; ++ ++ check_prefs_dir (); ++ ++ config = default_file (); ++ new_config = malloc (strlen (config) + 5); ++ strcpy (new_config, config); ++ strcat (new_config, ".new"); ++ ++ fh = open (new_config, OFLAGS | O_TRUNC | O_WRONLY | O_CREAT, 0600); ++ if (fh == -1) ++ { ++ free (new_config); ++ return 0; ++ } ++ ++ if (!cfg_put_str (fh, "version", PACKAGE_VERSION)) ++ { ++ free (new_config); ++ return 0; ++ } ++ ++ i = 0; ++ do ++ { ++ switch (vars[i].type) ++ { ++ case TYPE_STR: ++ if (!cfg_put_str (fh, vars[i].name, (char *) &prefs + vars[i].offset)) ++ { ++ free (new_config); ++ return 0; ++ } ++ break; ++ case TYPE_INT: ++ case TYPE_BOOL: ++ if (!cfg_put_int (fh, *((int *) &prefs + vars[i].offset), vars[i].name)) ++ { ++ free (new_config); ++ return 0; ++ } ++ } ++ i++; ++ } ++ while (vars[i].name); ++ ++ if (close (fh) == -1) ++ { ++ free (new_config); ++ return 0; ++ } ++ ++#ifdef WIN32 ++ unlink (config); /* win32 can't rename to an existing file */ ++#endif ++ if (rename (new_config, config) == -1) ++ { ++ free (new_config); ++ return 0; ++ } ++ free (new_config); ++ ++ return 1; ++} ++ ++static void ++set_showval (session *sess, const struct prefs *var, char *tbuf) ++{ ++ int len, dots, j; ++ ++ len = strlen (var->name); ++ memcpy (tbuf, var->name, len); ++ dots = 29 - len; ++ if (dots < 0) ++ dots = 0; ++ tbuf[len++] = '\003'; ++ tbuf[len++] = '2'; ++ for (j=0;jtype) ++ { ++ case TYPE_STR: ++ sprintf (tbuf + len, "\0033:\017 %s\n", ++ (char *) &prefs + var->offset); ++ break; ++ case TYPE_INT: ++ sprintf (tbuf + len, "\0033:\017 %d\n", ++ *((int *) &prefs + var->offset)); ++ break; ++ case TYPE_BOOL: ++ if (*((int *) &prefs + var->offset)) ++ sprintf (tbuf + len, "\0033:\017 %s\n", "ON"); ++ else ++ sprintf (tbuf + len, "\0033:\017 %s\n", "OFF"); ++ break; ++ } ++ PrintText (sess, tbuf); ++} ++ ++static void ++set_list (session * sess, char *tbuf) ++{ ++ int i; ++ ++ i = 0; ++ do ++ { ++ set_showval (sess, &vars[i], tbuf); ++ i++; ++ } ++ while (vars[i].name); ++} ++ ++int ++cfg_get_bool (char *var) ++{ ++ int i = 0; ++ ++ do ++ { ++ if (!strcasecmp (var, vars[i].name)) ++ { ++ return *((int *) &prefs + vars[i].offset); ++ } ++ i++; ++ } ++ while (vars[i].name); ++ ++ return -1; ++} ++ ++int ++cmd_set (struct session *sess, char *tbuf, char *word[], char *word_eol[]) ++{ ++ int wild = FALSE; ++ int or = FALSE; ++ int off = FALSE; ++ int quiet = FALSE; ++ int erase = FALSE; ++ int i = 0, finds = 0, found; ++ int idx = 2; ++ char *var, *val; ++ ++ if (strcasecmp (word[2], "-e") == 0) ++ { ++ idx++; ++ erase = TRUE; ++ } ++ ++ /* turn a bit OFF */ ++ if (strcasecmp (word[idx], "-off") == 0) ++ { ++ idx++; ++ off = TRUE; ++ } ++ ++ /* turn a bit ON */ ++ if (strcasecmp (word[idx], "-or") == 0 || strcasecmp (word[idx], "-on") == 0) ++ { ++ idx++; ++ or = TRUE; ++ } ++ ++ if (strcasecmp (word[idx], "-quiet") == 0) ++ { ++ idx++; ++ quiet = TRUE; ++ } ++ ++ var = word[idx]; ++ val = word_eol[idx+1]; ++ ++ if (!*var) ++ { ++ set_list (sess, tbuf); ++ return TRUE; ++ } ++ ++ if ((strchr (var, '*') || strchr (var, '?')) && !*val) ++ wild = TRUE; ++ ++ if (*val == '=') ++ val++; ++ ++ do ++ { ++ if (wild) ++ found = !match (var, vars[i].name); ++ else ++ found = strcasecmp (var, vars[i].name); ++ ++ if (found == 0) ++ { ++ finds++; ++ switch (vars[i].type) ++ { ++ case TYPE_STR: ++ if (erase || *val) ++ { ++ strncpy ((char *) &prefs + vars[i].offset, val, vars[i].len); ++ ((char *) &prefs)[vars[i].offset + vars[i].len - 1] = 0; ++ if (!quiet) ++ PrintTextf (sess, "%s set to: %s\n", var, (char *) &prefs + vars[i].offset); ++ } else ++ { ++ set_showval (sess, &vars[i], tbuf); ++ } ++ break; ++ case TYPE_INT: ++ case TYPE_BOOL: ++ if (*val) ++ { ++ if (vars[i].type == TYPE_BOOL) ++ { ++ if (atoi (val)) ++ *((int *) &prefs + vars[i].offset) = 1; ++ else ++ *((int *) &prefs + vars[i].offset) = 0; ++ if (!strcasecmp (val, "YES") || !strcasecmp (val, "ON")) ++ *((int *) &prefs + vars[i].offset) = 1; ++ if (!strcasecmp (val, "NO") || !strcasecmp (val, "OFF")) ++ *((int *) &prefs + vars[i].offset) = 0; ++ } else ++ { ++ if (or) ++ *((int *) &prefs + vars[i].offset) |= atoi (val); ++ else if (off) ++ *((int *) &prefs + vars[i].offset) &= ~(atoi (val)); ++ else ++ *((int *) &prefs + vars[i].offset) = atoi (val); ++ } ++ if (!quiet) ++ PrintTextf (sess, "%s set to: %d\n", var, ++ *((int *) &prefs + vars[i].offset)); ++ } else ++ { ++ set_showval (sess, &vars[i], tbuf); ++ } ++ break; ++ } ++ } ++ i++; ++ } ++ while (vars[i].name); ++ ++ if (!finds && !quiet) ++ PrintText (sess, "No such variable.\n"); ++ ++ return TRUE; ++} ++ ++int ++xchat_open_file (char *file, int flags, int mode, int xof_flags) ++{ ++ char buf[1024]; ++ ++ if (xof_flags & XOF_FULLPATH) ++ { ++ if (xof_flags & XOF_DOMODE) ++ return open (file, flags | OFLAGS, mode); ++ else ++ return open (file, flags | OFLAGS); ++ } ++ ++ snprintf (buf, sizeof (buf), "%s/%s", get_xdir_fs (), file); ++ if (xof_flags & XOF_DOMODE) ++ return open (buf, flags | OFLAGS, mode); ++ else ++ return open (buf, flags | OFLAGS); ++} ++ ++FILE * ++xchat_fopen_file (const char *file, const char *mode, int xof_flags) ++{ ++ char buf[1024]; ++ ++ if (xof_flags & XOF_FULLPATH) ++ return fopen (file, mode); ++ ++ snprintf (buf, sizeof (buf), "%s/%s", get_xdir_fs (), file); ++ return fopen (buf, mode); ++} +diff -urNp xchat-2.8.8.orig/src/common/xchat.h xchat-2.8.8/src/common/xchat.h +--- xchat-2.8.8.orig/src/common/xchat.h 2013-06-10 14:26:55.885425482 +0200 ++++ xchat-2.8.8/src/common/xchat.h 2013-06-10 14:27:23.748503597 +0200 +@@ -1,6 +1,7 @@ + #include "../../config.h" + + #include ++#include + #include /* need time_t */ + + #ifndef XCHAT_H diff --git a/xchat.spec b/xchat.spec index ee26d1a..cc3dfc6 100644 --- a/xchat.spec +++ b/xchat.spec @@ -4,7 +4,7 @@ Summary: A popular and easy to use graphical IRC (chat) client Name: xchat Version: 2.8.8 -Release: 18%{?dist} +Release: 19%{?dist} Epoch: 1 Group: Applications/Internet License: GPLv2+ @@ -48,6 +48,10 @@ Patch53: xchat-2.8.8-link-against-libnotify.patch Patch54: xchat-2.8.8-glib.patch # http://sourceforge.net/p/xchat/bugs/1504/ Patch55: xchat-2.8.8-hires-icons.patch +# http://sourceforge.net/p/xchat/bugs/1506/ +Patch56: xchat-2.8.8-xdg-dirs.patch +# http://sourceforge.net/p/xchat/bugs/1397/ +Patch57: xchat-2.8.8-desktop-file-name.patch BuildRequires: perl perl(ExtUtils::Embed) python-devel openssl-devel pkgconfig, tcl-devel BuildRequires: GConf2-devel @@ -107,6 +111,8 @@ This package contains the X-Chat plugin providing the Tcl scripting interface. %patch53 -p1 -b .link-against-libnotify %patch54 -p0 -b .glib %patch55 -p1 -b .hires-icons +%patch56 -p1 -b .xdg-dirs +%patch57 -p1 -b .desktop-file-name sed -i -e 's/#define GTK_DISABLE_DEPRECATED//g' src/fe-gtk/*.c @@ -207,6 +213,12 @@ fi %{_libdir}/xchat/plugins/tcl.so %changelog +* Mon Jun 10 2013 Debarshi Ray - 1:2.8.8-19 +- Use XDG_CONFIG_HOME instead of home for config files + (http://sourceforge.net/p/xchat/bugs/1506/) +- Use name and generic name correctly in desktop file + (http://sourceforge.net/p/xchat/bugs/1397/) + * Fri Jun 07 2013 Debarshi Ray - 1:2.8.8-18 - Add hi-res icons (http://sourceforge.net/p/xchat/bugs/1504/) From 5a2942098d3ca955f4accdd58882f268a615db3a Mon Sep 17 00:00:00 2001 From: Debarshi Ray Date: Mon, 10 Jun 2013 14:48:29 +0200 Subject: [PATCH 06/30] Use XDG_CONFIG_HOME instead of home for config files (http://sourceforge.net/p/xchat/bugs/1506/) - Use name and generic name correctly in desktop file (http://sourceforge.net/p/xchat/bugs/1397/) --- xchat-2.8.8-desktop-file-name.patch | 13 + xchat-2.8.8-xdg-dirs.patch | 1224 +++++++++++++++++++++++++++ xchat.spec | 14 +- 3 files changed, 1250 insertions(+), 1 deletion(-) create mode 100644 xchat-2.8.8-desktop-file-name.patch create mode 100644 xchat-2.8.8-xdg-dirs.patch diff --git a/xchat-2.8.8-desktop-file-name.patch b/xchat-2.8.8-desktop-file-name.patch new file mode 100644 index 0000000..2d6044a --- /dev/null +++ b/xchat-2.8.8-desktop-file-name.patch @@ -0,0 +1,13 @@ +diff -urNp xchat-2.8.8.orig/xchat.desktop xchat-2.8.8/xchat.desktop +--- xchat-2.8.8.orig/xchat.desktop 2013-06-10 14:01:07.408432973 +0200 ++++ xchat-2.8.8/xchat.desktop 2013-06-10 14:12:56.044209785 +0200 +@@ -1,7 +1,8 @@ + [Desktop Entry] + Encoding=UTF-8 +-Name=XChat IRC ++Name=XChat + Name[zh_TW]=網路清談 ++GenericName=IRC Client + Comment[de]=IRC-Client + Comment[es]=Aplicación de IRC + Comment[fi]=IRC-sovellus diff --git a/xchat-2.8.8-xdg-dirs.patch b/xchat-2.8.8-xdg-dirs.patch new file mode 100644 index 0000000..5530085 --- /dev/null +++ b/xchat-2.8.8-xdg-dirs.patch @@ -0,0 +1,1224 @@ +diff -urNp xchat-2.8.8.orig/src/common/cfgfiles.c xchat-2.8.8/src/common/cfgfiles.c +--- xchat-2.8.8.orig/src/common/cfgfiles.c 2013-06-10 14:01:07.402432963 +0200 ++++ xchat-2.8.8/src/common/cfgfiles.c 2013-06-10 14:27:09.668464169 +0200 +@@ -1,3 +1,4 @@ ++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ + /* X-Chat + * Copyright (C) 1998 Peter Zelezny. + * +@@ -34,7 +35,8 @@ + #ifdef WIN32 + #define XCHAT_DIR "X-Chat 2" + #else +-#define XCHAT_DIR ".xchat2" ++#define XCHAT_DIR "xchat2" ++#define OLD_XCHAT_DIR ".xchat2" + #endif + #define DEF_FONT "Monospace 9" + +@@ -318,17 +320,68 @@ get_xdir_fs (void) + return xdir_fs; + } + ++void ++maybe_migrate_xdg_config (void) ++{ ++} ++ + #else + + char * + get_xdir_fs (void) + { + if (!xdir_fs) +- xdir_fs = g_strdup_printf ("%s/" XCHAT_DIR, g_get_home_dir ()); ++ xdir_fs = g_strdup_printf ("%s/" XCHAT_DIR, g_get_user_config_dir ()); + + return xdir_fs; + } + ++void ++maybe_migrate_xdg_config (void) ++{ ++ char *old_dir; ++ char *new_dir; ++ GFile *source; ++ GFile *dest; ++ GError *error; ++ gboolean res; ++ ++ new_dir = g_strdup_printf ("%s/" XCHAT_DIR, g_get_user_config_dir ()); ++ ++ /* already migrated */ ++ if (g_file_test (new_dir, G_FILE_TEST_IS_DIR)) ++ { ++ g_free (new_dir); ++ return; ++ } ++ ++ /* nothing to migrate */ ++ old_dir = g_strdup_printf ("%s/" OLD_XCHAT_DIR, g_get_home_dir ()); ++ if (!g_file_test (old_dir, G_FILE_TEST_IS_DIR)) ++ { ++ g_free (old_dir); ++ g_free (new_dir); ++ return; ++ } ++ ++ source = g_file_new_for_path (old_dir); ++ dest = g_file_new_for_path (new_dir); ++ ++ g_message (_("Migrating data from %s to %s"), old_dir, new_dir); ++ error = NULL; ++ res = g_file_move (source, dest, G_FILE_COPY_NONE, NULL, NULL, NULL, &error); ++ if (error != NULL) ++ { ++ g_warning (_("Error migrating data: %s"), error->message); ++ g_error_free (error); ++ } ++ ++ g_free (old_dir); ++ g_free (new_dir); ++ g_object_unref (source); ++ g_object_unref (dest); ++} ++ + #endif /* !WIN32 */ + + char * +@@ -351,7 +404,7 @@ check_prefs_dir (void) + #else + if (mkdir (dir, S_IRUSR | S_IWUSR | S_IXUSR) != 0) + #endif +- fe_message (_("Cannot create ~/.xchat2"), FE_MSG_ERROR); ++ fe_message (_("Cannot create configuration directory"), FE_MSG_ERROR); + } + } + +@@ -593,6 +646,7 @@ load_config (void) + const char *username, *realname; + int res, val, i, fh; + ++ maybe_migrate_xdg_config (); + check_prefs_dir (); + username = g_get_user_name (); + if (!username) +diff -urNp xchat-2.8.8.orig/src/common/cfgfiles.c.orig xchat-2.8.8/src/common/cfgfiles.c.orig +--- xchat-2.8.8.orig/src/common/cfgfiles.c.orig 1970-01-01 01:00:00.000000000 +0100 ++++ xchat-2.8.8/src/common/cfgfiles.c.orig 2013-06-10 14:26:18.219319628 +0200 +@@ -0,0 +1,1104 @@ ++/* X-Chat ++ * Copyright (C) 1998 Peter Zelezny. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "xchat.h" ++#include "cfgfiles.h" ++#include "util.h" ++#include "fe.h" ++#include "text.h" ++#include "xchatc.h" ++ ++#ifdef WIN32 ++#define XCHAT_DIR "X-Chat 2" ++#else ++#define XCHAT_DIR ".xchat2" ++#endif ++#define DEF_FONT "Monospace 9" ++ ++void ++list_addentry (GSList ** list, char *cmd, char *name) ++{ ++ struct popup *pop; ++ int cmd_len = 1, name_len; ++ ++ /* remove <2.8.0 stuff */ ++ if (!strcmp (cmd, "away") && !strcmp (name, "BACK")) ++ return; ++ ++ if (cmd) ++ cmd_len = strlen (cmd) + 1; ++ name_len = strlen (name) + 1; ++ ++ pop = malloc (sizeof (struct popup) + cmd_len + name_len); ++ pop->name = (char *) pop + sizeof (struct popup); ++ pop->cmd = pop->name + name_len; ++ ++ memcpy (pop->name, name, name_len); ++ if (cmd) ++ memcpy (pop->cmd, cmd, cmd_len); ++ else ++ pop->cmd[0] = 0; ++ ++ *list = g_slist_append (*list, pop); ++} ++ ++/* read it in from a buffer to our linked list */ ++ ++static void ++list_load_from_data (GSList ** list, char *ibuf, int size) ++{ ++ char cmd[384]; ++ char name[128]; ++ char *buf; ++ int pnt = 0; ++ ++ cmd[0] = 0; ++ name[0] = 0; ++ ++ while (buf_get_line (ibuf, &buf, &pnt, size)) ++ { ++ if (*buf != '#') ++ { ++ if (!strncasecmp (buf, "NAME ", 5)) ++ { ++ safe_strcpy (name, buf + 5, sizeof (name)); ++ } ++ else if (!strncasecmp (buf, "CMD ", 4)) ++ { ++ safe_strcpy (cmd, buf + 4, sizeof (cmd)); ++ if (*name) ++ { ++ list_addentry (list, cmd, name); ++ cmd[0] = 0; ++ name[0] = 0; ++ } ++ } ++ } ++ } ++} ++ ++void ++list_loadconf (char *file, GSList ** list, char *defaultconf) ++{ ++ char filebuf[256]; ++ char *ibuf; ++ int fh; ++ struct stat st; ++ ++ snprintf (filebuf, sizeof (filebuf), "%s/%s", get_xdir_fs (), file); ++ fh = open (filebuf, O_RDONLY | OFLAGS); ++ if (fh == -1) ++ { ++ if (defaultconf) ++ list_load_from_data (list, defaultconf, strlen (defaultconf)); ++ return; ++ } ++ if (fstat (fh, &st) != 0) ++ { ++ perror ("fstat"); ++ abort (); ++ } ++ ++ ibuf = malloc (st.st_size); ++ read (fh, ibuf, st.st_size); ++ close (fh); ++ ++ list_load_from_data (list, ibuf, st.st_size); ++ ++ free (ibuf); ++} ++ ++void ++list_free (GSList ** list) ++{ ++ void *data; ++ while (*list) ++ { ++ data = (void *) (*list)->data; ++ free (data); ++ *list = g_slist_remove (*list, data); ++ } ++} ++ ++int ++list_delentry (GSList ** list, char *name) ++{ ++ struct popup *pop; ++ GSList *alist = *list; ++ ++ while (alist) ++ { ++ pop = (struct popup *) alist->data; ++ if (!strcasecmp (name, pop->name)) ++ { ++ *list = g_slist_remove (*list, pop); ++ free (pop); ++ return 1; ++ } ++ alist = alist->next; ++ } ++ return 0; ++} ++ ++char * ++cfg_get_str (char *cfg, char *var, char *dest, int dest_len) ++{ ++ while (1) ++ { ++ if (!strncasecmp (var, cfg, strlen (var))) ++ { ++ char *value, t; ++ cfg += strlen (var); ++ while (*cfg == ' ') ++ cfg++; ++ if (*cfg == '=') ++ cfg++; ++ while (*cfg == ' ') ++ cfg++; ++ /*while (*cfg == ' ' || *cfg == '=') ++ cfg++; */ ++ value = cfg; ++ while (*cfg != 0 && *cfg != '\n') ++ cfg++; ++ t = *cfg; ++ *cfg = 0; ++ safe_strcpy (dest, value, dest_len); ++ *cfg = t; ++ return cfg; ++ } ++ while (*cfg != 0 && *cfg != '\n') ++ cfg++; ++ if (*cfg == 0) ++ return 0; ++ cfg++; ++ if (*cfg == 0) ++ return 0; ++ } ++} ++ ++static int ++cfg_put_str (int fh, char *var, char *value) ++{ ++ char buf[512]; ++ int len; ++ ++ snprintf (buf, sizeof buf, "%s = %s\n", var, value); ++ len = strlen (buf); ++ return (write (fh, buf, len) == len); ++} ++ ++int ++cfg_put_color (int fh, int r, int g, int b, char *var) ++{ ++ char buf[400]; ++ int len; ++ ++ snprintf (buf, sizeof buf, "%s = %04x %04x %04x\n", var, r, g, b); ++ len = strlen (buf); ++ return (write (fh, buf, len) == len); ++} ++ ++int ++cfg_put_int (int fh, int value, char *var) ++{ ++ char buf[400]; ++ int len; ++ ++ if (value == -1) ++ value = 1; ++ ++ snprintf (buf, sizeof buf, "%s = %d\n", var, value); ++ len = strlen (buf); ++ return (write (fh, buf, len) == len); ++} ++ ++int ++cfg_get_color (char *cfg, char *var, int *r, int *g, int *b) ++{ ++ char str[128]; ++ ++ if (!cfg_get_str (cfg, var, str, sizeof (str))) ++ return 0; ++ ++ sscanf (str, "%04x %04x %04x", r, g, b); ++ return 1; ++} ++ ++int ++cfg_get_int_with_result (char *cfg, char *var, int *result) ++{ ++ char str[128]; ++ ++ if (!cfg_get_str (cfg, var, str, sizeof (str))) ++ { ++ *result = 0; ++ return 0; ++ } ++ ++ *result = 1; ++ return atoi (str); ++} ++ ++int ++cfg_get_int (char *cfg, char *var) ++{ ++ char str[128]; ++ ++ if (!cfg_get_str (cfg, var, str, sizeof (str))) ++ return 0; ++ ++ return atoi (str); ++} ++ ++char *xdir_fs = NULL; /* file system encoding */ ++char *xdir_utf = NULL; /* utf-8 encoding */ ++ ++#ifdef WIN32 ++ ++#include ++ ++static gboolean ++get_reg_str (const char *sub, const char *name, char *out, DWORD len) ++{ ++ HKEY hKey; ++ DWORD t; ++ ++ if (RegOpenKeyEx (HKEY_CURRENT_USER, sub, 0, KEY_READ, &hKey) == ++ ERROR_SUCCESS) ++ { ++ if (RegQueryValueEx (hKey, name, NULL, &t, out, &len) != ERROR_SUCCESS || ++ t != REG_SZ) ++ { ++ RegCloseKey (hKey); ++ return FALSE; ++ } ++ out[len-1] = 0; ++ RegCloseKey (hKey); ++ return TRUE; ++ } ++ ++ return FALSE; ++} ++ ++char * ++get_xdir_fs (void) ++{ ++ if (!xdir_fs) ++ { ++ char out[256]; ++ ++ if (!get_reg_str ("Software\\Microsoft\\Windows\\CurrentVersion\\" ++ "Explorer\\Shell Folders", "AppData", out, sizeof (out))) ++ return "./config"; ++ xdir_fs = g_strdup_printf ("%s\\" XCHAT_DIR, out); ++ } ++ return xdir_fs; ++} ++ ++#else ++ ++char * ++get_xdir_fs (void) ++{ ++ if (!xdir_fs) ++ xdir_fs = g_strdup_printf ("%s/" XCHAT_DIR, g_get_home_dir ()); ++ ++ return xdir_fs; ++} ++ ++#endif /* !WIN32 */ ++ ++char * ++get_xdir_utf8 (void) ++{ ++ if (!xdir_utf) /* never free this, keep it for program life time */ ++ xdir_utf = xchat_filename_to_utf8 (get_xdir_fs (), -1, 0, 0, 0); ++ ++ return xdir_utf; ++} ++ ++static void ++check_prefs_dir (void) ++{ ++ char *dir = get_xdir_fs (); ++ if (access (dir, F_OK) != 0) ++ { ++#ifdef WIN32 ++ if (mkdir (dir) != 0) ++#else ++ if (mkdir (dir, S_IRUSR | S_IWUSR | S_IXUSR) != 0) ++#endif ++ fe_message (_("Cannot create ~/.xchat2"), FE_MSG_ERROR); ++ } ++} ++ ++static char * ++default_file (void) ++{ ++ static char *dfile = 0; ++ ++ if (!dfile) ++ { ++ dfile = malloc (strlen (get_xdir_fs ()) + 12); ++ sprintf (dfile, "%s/xchat.conf", get_xdir_fs ()); ++ } ++ return dfile; ++} ++ ++/* Keep these sorted!! */ ++ ++const struct prefs vars[] = { ++ {"auto_save", P_OFFINT (autosave), TYPE_BOOL}, ++ {"auto_save_url", P_OFFINT (autosave_url), TYPE_BOOL}, ++ ++ {"away_auto_unmark", P_OFFINT (auto_unmark_away), TYPE_BOOL}, ++ {"away_reason", P_OFFSET (awayreason), TYPE_STR}, ++ {"away_show_message", P_OFFINT (show_away_message), TYPE_BOOL}, ++ {"away_show_once", P_OFFINT (show_away_once), TYPE_BOOL}, ++ {"away_size_max", P_OFFINT (away_size_max), TYPE_INT}, ++ {"away_timeout", P_OFFINT (away_timeout), TYPE_INT}, ++ {"away_track", P_OFFINT (away_track), TYPE_BOOL}, ++ ++ {"completion_amount", P_OFFINT (completion_amount), TYPE_INT}, ++ {"completion_auto", P_OFFINT (nickcompletion), TYPE_BOOL}, ++ {"completion_sort", P_OFFINT (completion_sort), TYPE_INT}, ++ {"completion_suffix", P_OFFSET (nick_suffix), TYPE_STR}, ++ ++ {"dcc_auto_chat", P_OFFINT (autodccchat), TYPE_INT}, ++ {"dcc_auto_resume", P_OFFINT (autoresume), TYPE_BOOL}, ++ {"dcc_auto_send", P_OFFINT (autodccsend), TYPE_INT}, ++ {"dcc_blocksize", P_OFFINT (dcc_blocksize), TYPE_INT}, ++ {"dcc_completed_dir", P_OFFSET (dcc_completed_dir), TYPE_STR}, ++ {"dcc_dir", P_OFFSET (dccdir), TYPE_STR}, ++ {"dcc_fast_send", P_OFFINT (fastdccsend), TYPE_BOOL}, ++ {"dcc_global_max_get_cps", P_OFFINT (dcc_global_max_get_cps), TYPE_INT}, ++ {"dcc_global_max_send_cps", P_OFFINT (dcc_global_max_send_cps), TYPE_INT}, ++ {"dcc_ip", P_OFFSET (dcc_ip_str), TYPE_STR}, ++ {"dcc_ip_from_server", P_OFFINT (ip_from_server), TYPE_BOOL}, ++ {"dcc_max_get_cps", P_OFFINT (dcc_max_get_cps), TYPE_INT}, ++ {"dcc_max_send_cps", P_OFFINT (dcc_max_send_cps), TYPE_INT}, ++ {"dcc_permissions", P_OFFINT (dccpermissions), TYPE_INT}, ++ {"dcc_port_first", P_OFFINT (first_dcc_send_port), TYPE_INT}, ++ {"dcc_port_last", P_OFFINT (last_dcc_send_port), TYPE_INT}, ++ {"dcc_remove", P_OFFINT (dcc_remove), TYPE_BOOL}, ++ {"dcc_save_nick", P_OFFINT (dccwithnick), TYPE_BOOL}, ++ {"dcc_send_fillspaces", P_OFFINT (dcc_send_fillspaces), TYPE_BOOL}, ++ {"dcc_stall_timeout", P_OFFINT (dccstalltimeout), TYPE_INT}, ++ {"dcc_timeout", P_OFFINT (dcctimeout), TYPE_INT}, ++ ++ {"dnsprogram", P_OFFSET (dnsprogram), TYPE_STR}, ++ ++ {"flood_ctcp_num", P_OFFINT (ctcp_number_limit), TYPE_INT}, ++ {"flood_ctcp_time", P_OFFINT (ctcp_time_limit), TYPE_INT}, ++ {"flood_msg_num", P_OFFINT (msg_number_limit), TYPE_INT}, ++ {"flood_msg_time", P_OFFINT (msg_time_limit), TYPE_INT}, ++ ++ {"gui_auto_open_chat", P_OFFINT (autoopendccchatwindow), TYPE_BOOL}, ++ {"gui_auto_open_dialog", P_OFFINT (autodialog), TYPE_BOOL}, ++ {"gui_auto_open_recv", P_OFFINT (autoopendccrecvwindow), TYPE_BOOL}, ++ {"gui_auto_open_send", P_OFFINT (autoopendccsendwindow), TYPE_BOOL}, ++ {"gui_dialog_height", P_OFFINT (dialog_height), TYPE_INT}, ++ {"gui_dialog_left", P_OFFINT (dialog_left), TYPE_INT}, ++ {"gui_dialog_top", P_OFFINT (dialog_top), TYPE_INT}, ++ {"gui_dialog_width", P_OFFINT (dialog_width), TYPE_INT}, ++ {"gui_hide_menu", P_OFFINT (hidemenu), TYPE_BOOL}, ++ {"gui_input_spell", P_OFFINT (gui_input_spell), TYPE_BOOL}, ++ {"gui_input_style", P_OFFINT (style_inputbox), TYPE_BOOL}, ++ {"gui_join_dialog", P_OFFINT (gui_join_dialog), TYPE_BOOL}, ++ {"gui_lagometer", P_OFFINT (lagometer), TYPE_INT}, ++ {"gui_mode_buttons", P_OFFINT (chanmodebuttons), TYPE_BOOL}, ++ {"gui_pane_left_size", P_OFFINT (gui_pane_left_size), TYPE_INT}, ++ {"gui_pane_right_size", P_OFFINT (gui_pane_right_size), TYPE_INT}, ++ {"gui_quit_dialog", P_OFFINT (gui_quit_dialog), TYPE_BOOL}, ++ {"gui_slist_select", P_OFFINT (slist_select), TYPE_INT}, ++ {"gui_slist_skip", P_OFFINT (slist_skip), TYPE_BOOL}, ++ {"gui_throttlemeter", P_OFFINT (throttlemeter), TYPE_INT}, ++ {"gui_topicbar", P_OFFINT (topicbar), TYPE_BOOL}, ++ {"gui_tray", P_OFFINT (gui_tray), TYPE_BOOL}, ++ {"gui_tray_flags", P_OFFINT (gui_tray_flags), TYPE_INT}, ++ {"gui_tweaks", P_OFFINT (gui_tweaks), TYPE_INT}, ++ {"gui_ulist_buttons", P_OFFINT (userlistbuttons), TYPE_BOOL}, ++ {"gui_ulist_doubleclick", P_OFFSET (doubleclickuser), TYPE_STR}, ++ {"gui_ulist_hide", P_OFFINT (hideuserlist), TYPE_BOOL}, ++ {"gui_ulist_left", P_OFFINT (_gui_ulist_left), TYPE_BOOL}, /* obsolete */ ++ {"gui_ulist_pos", P_OFFINT (gui_ulist_pos), TYPE_INT}, ++ {"gui_ulist_resizable", P_OFFINT (paned_userlist), TYPE_BOOL}, ++ {"gui_ulist_show_hosts", P_OFFINT(showhostname_in_userlist), TYPE_BOOL}, ++ {"gui_ulist_sort", P_OFFINT (userlist_sort), TYPE_INT}, ++ {"gui_ulist_style", P_OFFINT (style_namelistgad), TYPE_BOOL}, ++ {"gui_url_mod", P_OFFINT (gui_url_mod), TYPE_INT}, ++ {"gui_usermenu", P_OFFINT (gui_usermenu), TYPE_BOOL}, ++ {"gui_win_height", P_OFFINT (mainwindow_height), TYPE_INT}, ++ {"gui_win_left", P_OFFINT (mainwindow_left), TYPE_INT}, ++ {"gui_win_save", P_OFFINT (mainwindow_save), TYPE_BOOL}, ++ {"gui_win_state", P_OFFINT (gui_win_state), TYPE_INT}, ++ {"gui_win_top", P_OFFINT (mainwindow_top), TYPE_INT}, ++ {"gui_win_width", P_OFFINT (mainwindow_width), TYPE_INT}, ++ ++#ifdef WIN32 ++ {"identd", P_OFFINT (identd), TYPE_BOOL}, ++#endif ++ {"input_balloon_chans", P_OFFINT (input_balloon_chans), TYPE_BOOL}, ++ {"input_balloon_hilight", P_OFFINT (input_balloon_hilight), TYPE_BOOL}, ++ {"input_balloon_priv", P_OFFINT (input_balloon_priv), TYPE_BOOL}, ++ {"input_balloon_time", P_OFFINT (input_balloon_time), TYPE_INT}, ++ {"input_beep_chans", P_OFFINT (input_beep_chans), TYPE_BOOL}, ++ {"input_beep_hilight", P_OFFINT (input_beep_hilight), TYPE_BOOL}, ++ {"input_beep_msg", P_OFFINT (input_beep_priv), TYPE_BOOL}, ++ {"input_command_char", P_OFFSET (cmdchar), TYPE_STR}, ++ {"input_filter_beep", P_OFFINT (filterbeep), TYPE_BOOL}, ++ {"input_flash_chans", P_OFFINT (input_flash_chans), TYPE_BOOL}, ++ {"input_flash_hilight", P_OFFINT (input_flash_hilight), TYPE_BOOL}, ++ {"input_flash_priv", P_OFFINT (input_flash_priv), TYPE_BOOL}, ++ {"input_perc_ascii", P_OFFINT (perc_ascii), TYPE_BOOL}, ++ {"input_perc_color", P_OFFINT (perc_color), TYPE_BOOL}, ++ {"input_tray_chans", P_OFFINT (input_tray_chans), TYPE_BOOL}, ++ {"input_tray_hilight", P_OFFINT (input_tray_hilight), TYPE_BOOL}, ++ {"input_tray_priv", P_OFFINT (input_tray_priv), TYPE_BOOL}, ++ ++ {"irc_auto_rejoin", P_OFFINT (autorejoin), TYPE_BOOL}, ++ {"irc_ban_type", P_OFFINT (bantype), TYPE_INT}, ++ {"irc_conf_mode", P_OFFINT (confmode), TYPE_BOOL}, ++ {"irc_extra_hilight", P_OFFSET (irc_extra_hilight), TYPE_STR}, ++ {"irc_hide_version", P_OFFINT (hidever), TYPE_BOOL}, ++ {"irc_id_ntext", P_OFFSET (irc_id_ntext), TYPE_STR}, ++ {"irc_id_ytext", P_OFFSET (irc_id_ytext), TYPE_STR}, ++ {"irc_invisible", P_OFFINT (invisible), TYPE_BOOL}, ++ {"irc_join_delay", P_OFFINT (irc_join_delay), TYPE_INT}, ++ {"irc_logging", P_OFFINT (logging), TYPE_BOOL}, ++ {"irc_logmask", P_OFFSET (logmask), TYPE_STR}, ++ {"irc_nick1", P_OFFSET (nick1), TYPE_STR}, ++ {"irc_nick2", P_OFFSET (nick2), TYPE_STR}, ++ {"irc_nick3", P_OFFSET (nick3), TYPE_STR}, ++ {"irc_nick_hilight", P_OFFSET (irc_nick_hilight), TYPE_STR}, ++ {"irc_no_hilight", P_OFFSET (irc_no_hilight), TYPE_STR}, ++ {"irc_part_reason", P_OFFSET (partreason), TYPE_STR}, ++ {"irc_quit_reason", P_OFFSET (quitreason), TYPE_STR}, ++ {"irc_raw_modes", P_OFFINT (raw_modes), TYPE_BOOL}, ++ {"irc_real_name", P_OFFSET (realname), TYPE_STR}, ++ {"irc_servernotice", P_OFFINT (servernotice), TYPE_BOOL}, ++ {"irc_skip_motd", P_OFFINT (skipmotd), TYPE_BOOL}, ++ {"irc_user_name", P_OFFSET (username), TYPE_STR}, ++ {"irc_wallops", P_OFFINT (wallops), TYPE_BOOL}, ++ {"irc_who_join", P_OFFINT (userhost), TYPE_BOOL}, ++ {"irc_whois_front", P_OFFINT (irc_whois_front), TYPE_BOOL}, ++ ++ {"net_auto_reconnect", P_OFFINT (autoreconnect), TYPE_BOOL}, ++ {"net_auto_reconnectonfail", P_OFFINT (autoreconnectonfail), TYPE_BOOL}, ++ {"net_bind_host", P_OFFSET (hostname), TYPE_STR}, ++ {"net_ping_timeout", P_OFFINT (pingtimeout), TYPE_INT}, ++ {"net_proxy_auth", P_OFFINT (proxy_auth), TYPE_BOOL}, ++ {"net_proxy_host", P_OFFSET (proxy_host), TYPE_STR}, ++ {"net_proxy_pass", P_OFFSET (proxy_pass), TYPE_STR}, ++ {"net_proxy_port", P_OFFINT (proxy_port), TYPE_INT}, ++ {"net_proxy_type", P_OFFINT (proxy_type), TYPE_INT}, ++ {"net_proxy_use", P_OFFINT (proxy_use), TYPE_INT}, ++ {"net_proxy_user", P_OFFSET (proxy_user), TYPE_STR}, ++ ++ {"net_reconnect_delay", P_OFFINT (recon_delay), TYPE_INT}, ++ {"net_throttle", P_OFFINT (throttle), TYPE_BOOL}, ++ ++ {"notify_timeout", P_OFFINT (notify_timeout), TYPE_INT}, ++ {"notify_whois_online", P_OFFINT (whois_on_notifyonline), TYPE_BOOL}, ++ ++ {"perl_warnings", P_OFFINT (perlwarnings), TYPE_BOOL}, ++ ++ {"sound_command", P_OFFSET (soundcmd), TYPE_STR}, ++ {"sound_dir", P_OFFSET (sounddir), TYPE_STR}, ++ {"stamp_log", P_OFFINT (timestamp_logs), TYPE_BOOL}, ++ {"stamp_log_format", P_OFFSET (timestamp_log_format), TYPE_STR}, ++ {"stamp_text", P_OFFINT (timestamp), TYPE_BOOL}, ++ {"stamp_text_format", P_OFFSET (stamp_format), TYPE_STR}, ++ ++ {"tab_chans", P_OFFINT (tabchannels), TYPE_BOOL}, ++ {"tab_dialogs", P_OFFINT (privmsgtab), TYPE_BOOL}, ++ {"tab_layout", P_OFFINT (tab_layout), TYPE_INT}, ++ {"tab_new_to_front", P_OFFINT (newtabstofront), TYPE_INT}, ++ {"tab_notices", P_OFFINT (notices_tabs), TYPE_BOOL}, ++ {"tab_pos", P_OFFINT (tab_pos), TYPE_INT}, ++ {"tab_position", P_OFFINT (_tabs_position), TYPE_INT}, /* obsolete */ ++ {"tab_server", P_OFFINT (use_server_tab), TYPE_BOOL}, ++ {"tab_small", P_OFFINT (tab_small), TYPE_INT}, ++ {"tab_sort", P_OFFINT (tab_sort), TYPE_BOOL}, ++ {"tab_trunc", P_OFFINT (truncchans), TYPE_INT}, ++ {"tab_utils", P_OFFINT (windows_as_tabs), TYPE_BOOL}, ++ ++ {"text_background", P_OFFSET (background), TYPE_STR}, ++ {"text_color_nicks", P_OFFINT (colorednicks), TYPE_BOOL}, ++ {"text_font", P_OFFSET (font_normal), TYPE_STR}, ++ {"text_indent", P_OFFINT (indent_nicks), TYPE_BOOL}, ++ {"text_max_indent", P_OFFINT (max_auto_indent), TYPE_INT}, ++ {"text_max_lines", P_OFFINT (max_lines), TYPE_INT}, ++ {"text_replay", P_OFFINT (text_replay), TYPE_BOOL}, ++ {"text_show_marker", P_OFFINT (show_marker), TYPE_BOOL}, ++ {"text_show_sep", P_OFFINT (show_separator), TYPE_BOOL}, ++ {"text_stripcolor", P_OFFINT (stripcolor), TYPE_BOOL}, ++ {"text_thin_sep", P_OFFINT (thin_separator), TYPE_BOOL}, ++ {"text_tint_blue", P_OFFINT (tint_blue), TYPE_INT}, ++ {"text_tint_green", P_OFFINT (tint_green), TYPE_INT}, ++ {"text_tint_red", P_OFFINT (tint_red), TYPE_INT}, ++ {"text_transparent", P_OFFINT (transparent), TYPE_BOOL}, ++ {"text_wordwrap", P_OFFINT (wordwrap), TYPE_BOOL}, ++ ++ {0, 0, 0}, ++}; ++ ++static char * ++convert_with_fallback (const char *str, const char *fallback) ++{ ++ char *utf; ++ ++ utf = g_locale_to_utf8 (str, -1, 0, 0, 0); ++ if (!utf) ++ { ++ /* this can happen if CHARSET envvar is set wrong */ ++ /* maybe it's already utf8 (breakage!) */ ++ if (!g_utf8_validate (str, -1, NULL)) ++ utf = g_strdup (fallback); ++ else ++ utf = g_strdup (str); ++ } ++ ++ return utf; ++} ++ ++void ++load_config (void) ++{ ++ struct stat st; ++ char *cfg, *sp; ++ const char *username, *realname; ++ int res, val, i, fh; ++ ++ check_prefs_dir (); ++ username = g_get_user_name (); ++ if (!username) ++ username = "root"; ++ ++ realname = g_get_real_name (); ++ if ((realname && realname[0] == 0) || !realname) ++ realname = username; ++ ++ username = convert_with_fallback (username, "username"); ++ realname = convert_with_fallback (realname, "realname"); ++ ++ memset (&prefs, 0, sizeof (struct xchatprefs)); ++ ++ /* put in default values, anything left out is automatically zero */ ++ prefs.local_ip = 0xffffffff; ++ prefs.irc_join_delay = 3; ++ prefs.show_marker = 1; ++ prefs.newtabstofront = 2; ++ prefs.completion_amount = 5; ++ prefs.away_timeout = 60; ++ prefs.away_size_max = 300; ++ prefs.away_track = 1; ++ prefs.timestamp_logs = 1; ++ prefs.truncchans = 20; ++ prefs.autoresume = 1; ++ prefs.show_away_once = 1; ++ prefs.indent_nicks = 1; ++ prefs.thin_separator = 1; ++ prefs._tabs_position = 2; /* 2 = left */ ++ prefs.fastdccsend = 1; ++ prefs.wordwrap = 1; ++ prefs.autosave = 1; ++ prefs.autodialog = 1; ++ prefs.gui_input_spell = 1; ++ prefs.autoreconnect = 1; ++ prefs.recon_delay = 10; ++ prefs.text_replay = 1; ++ prefs.tabchannels = 1; ++ prefs.tab_layout = 2; /* 0=Tabs 1=Reserved 2=Tree */ ++ prefs.tab_sort = 1; ++ prefs.paned_userlist = 1; ++ prefs.newtabstofront = 2; ++ prefs.use_server_tab = 1; ++ prefs.privmsgtab = 1; ++ /*prefs.style_inputbox = 1;*/ ++ prefs.dccpermissions = 0600; ++ prefs.max_lines = 500; ++ prefs.mainwindow_width = 640; ++ prefs.mainwindow_height = 400; ++ prefs.dialog_width = 500; ++ prefs.dialog_height = 256; ++ prefs.gui_join_dialog = 1; ++ prefs.gui_quit_dialog = 1; ++ prefs.dcctimeout = 180; ++ prefs.dccstalltimeout = 60; ++ prefs.notify_timeout = 15; ++ prefs.tint_red = ++ prefs.tint_green = ++ prefs.tint_blue = 195; ++ prefs.auto_indent = 1; ++ prefs.max_auto_indent = 256; ++ prefs.show_separator = 1; ++ prefs.dcc_blocksize = 1024; ++ prefs.throttle = 1; ++ /*FIXME*/ prefs.msg_time_limit = 30; ++ prefs.msg_number_limit = 5; ++ prefs.ctcp_time_limit = 30; ++ prefs.ctcp_number_limit = 5; ++ prefs.topicbar = 1; ++ prefs.lagometer = 1; ++ prefs.throttlemeter = 1; ++ prefs.autoopendccrecvwindow = 1; ++ prefs.autoopendccsendwindow = 1; ++ prefs.autoopendccchatwindow = 1; ++ prefs.userhost = 1; ++ prefs.gui_url_mod = 4; /* ctrl */ ++ prefs.gui_tray = 1; ++ prefs.gui_pane_left_size = 100; ++ prefs.gui_pane_right_size = 100; ++ prefs.mainwindow_save = 1; ++ prefs.bantype = 2; ++ prefs.input_balloon_time = 20; ++ prefs.input_flash_priv = prefs.input_flash_hilight = 1; ++ prefs.input_tray_priv = prefs.input_tray_hilight = 1; ++ prefs.autodccsend = 2; /* browse mode */ ++#ifdef WIN32 ++ prefs.identd = 1; ++#endif ++ strcpy (prefs.stamp_format, "[%H:%M] "); ++ strcpy (prefs.timestamp_log_format, "%b %d %H:%M:%S "); ++ strcpy (prefs.logmask, "%n-%c.log"); ++ strcpy (prefs.nick_suffix, ","); ++ strcpy (prefs.cmdchar, "/"); ++ strcpy (prefs.nick1, username); ++ strcpy (prefs.nick2, username); ++ strcat (prefs.nick2, "_"); ++ strcpy (prefs.nick3, username); ++ strcat (prefs.nick3, "__"); ++ strcpy (prefs.realname, realname); ++ strcpy (prefs.username, username); ++#ifdef WIN32 ++ strcpy (prefs.sounddir, "./sounds"); ++ { ++ char out[256]; ++ ++ if (get_reg_str ("Software\\Microsoft\\Windows\\CurrentVersion\\" ++ "Explorer\\Shell Folders", "Personal", out, sizeof (out))) ++ snprintf (prefs.dccdir, sizeof (prefs.dccdir), "%s\\Downloads", out); ++ else ++ snprintf (prefs.dccdir, sizeof (prefs.dccdir), "%s\\Downloads", get_xdir_utf8 ()); ++ } ++#else ++ snprintf (prefs.sounddir, sizeof (prefs.sounddir), "%s/sounds", get_xdir_utf8 ()); ++ snprintf (prefs.dccdir, sizeof (prefs.dccdir), "%s/downloads", get_xdir_utf8 ()); ++#endif ++ strcpy (prefs.doubleclickuser, "QUOTE WHOIS %s %s"); ++ strcpy (prefs.awayreason, _("I'm busy")); ++ strcpy (prefs.quitreason, _("Leaving")); ++ strcpy (prefs.partreason, prefs.quitreason); ++ strcpy (prefs.font_normal, DEF_FONT); ++ strcpy (prefs.dnsprogram, "host"); ++ strcpy (prefs.irc_no_hilight, "NickServ,ChanServ"); ++ ++ g_free ((char *)username); ++ g_free ((char *)realname); ++ ++ fh = open (default_file (), OFLAGS | O_RDONLY); ++ if (fh != -1) ++ { ++ fstat (fh, &st); ++ cfg = malloc (st.st_size + 1); ++ cfg[0] = '\0'; ++ i = read (fh, cfg, st.st_size); ++ if (i >= 0) ++ cfg[i] = '\0'; /* make sure cfg is NULL terminated */ ++ close (fh); ++ i = 0; ++ do ++ { ++ switch (vars[i].type) ++ { ++ case TYPE_STR: ++ cfg_get_str (cfg, vars[i].name, (char *) &prefs + vars[i].offset, ++ vars[i].len); ++ break; ++ case TYPE_BOOL: ++ case TYPE_INT: ++ val = cfg_get_int_with_result (cfg, vars[i].name, &res); ++ if (res) ++ *((int *) &prefs + vars[i].offset) = val; ++ break; ++ } ++ i++; ++ } ++ while (vars[i].name); ++ ++ free (cfg); ++ ++ } else ++ { ++#ifndef WIN32 ++#ifndef __EMX__ ++ /* OS/2 uses UID 0 all the time */ ++ if (getuid () == 0) ++ fe_message (_("* Running IRC as root is stupid! You should\n" ++ " create a User Account and use that to login.\n"), FE_MSG_WARN|FE_MSG_WAIT); ++#endif ++#endif /* !WIN32 */ ++ ++ mkdir_utf8 (prefs.dccdir); ++ mkdir_utf8 (prefs.dcc_completed_dir); ++ } ++ if (prefs.mainwindow_height < 138) ++ prefs.mainwindow_height = 138; ++ if (prefs.mainwindow_width < 106) ++ prefs.mainwindow_width = 106; ++ ++ sp = strchr (prefs.username, ' '); ++ if (sp) ++ sp[0] = 0; /* spaces in username would break the login */ ++ ++ /* try to make sense of old ulist/tree position settings */ ++ if (prefs.gui_ulist_pos == 0) ++ { ++ prefs.gui_ulist_pos = 3; /* top right */ ++ if (prefs._gui_ulist_left) ++ prefs.gui_ulist_pos = 2; /* bottom left */ ++ ++ switch (prefs._tabs_position) ++ { ++ case 0: ++ prefs.tab_pos = 6; /* bottom */ ++ break; ++ case 1: ++ prefs.tab_pos = 5; /* top */ ++ break; ++ case 2: ++ prefs.tab_pos = 1; /* left */ ++ break; ++ case 3: ++ prefs.tab_pos = 4; /* right */ ++ break; ++ case 4: ++ prefs.tab_pos = 1; /* (hidden)left */ ++ break; ++ case 5: ++ if (prefs._gui_ulist_left) ++ { ++ prefs.tab_pos = 1; /* above ulist left */ ++ prefs.gui_ulist_pos = 2; ++ } ++ else ++ { ++ prefs.tab_pos = 3; /* above ulist right */ ++ prefs.gui_ulist_pos = 4; ++ } ++ break; ++ } ++ } ++} ++ ++int ++save_config (void) ++{ ++ int fh, i; ++ char *new_config, *config; ++ ++ check_prefs_dir (); ++ ++ config = default_file (); ++ new_config = malloc (strlen (config) + 5); ++ strcpy (new_config, config); ++ strcat (new_config, ".new"); ++ ++ fh = open (new_config, OFLAGS | O_TRUNC | O_WRONLY | O_CREAT, 0600); ++ if (fh == -1) ++ { ++ free (new_config); ++ return 0; ++ } ++ ++ if (!cfg_put_str (fh, "version", PACKAGE_VERSION)) ++ { ++ free (new_config); ++ return 0; ++ } ++ ++ i = 0; ++ do ++ { ++ switch (vars[i].type) ++ { ++ case TYPE_STR: ++ if (!cfg_put_str (fh, vars[i].name, (char *) &prefs + vars[i].offset)) ++ { ++ free (new_config); ++ return 0; ++ } ++ break; ++ case TYPE_INT: ++ case TYPE_BOOL: ++ if (!cfg_put_int (fh, *((int *) &prefs + vars[i].offset), vars[i].name)) ++ { ++ free (new_config); ++ return 0; ++ } ++ } ++ i++; ++ } ++ while (vars[i].name); ++ ++ if (close (fh) == -1) ++ { ++ free (new_config); ++ return 0; ++ } ++ ++#ifdef WIN32 ++ unlink (config); /* win32 can't rename to an existing file */ ++#endif ++ if (rename (new_config, config) == -1) ++ { ++ free (new_config); ++ return 0; ++ } ++ free (new_config); ++ ++ return 1; ++} ++ ++static void ++set_showval (session *sess, const struct prefs *var, char *tbuf) ++{ ++ int len, dots, j; ++ ++ len = strlen (var->name); ++ memcpy (tbuf, var->name, len); ++ dots = 29 - len; ++ if (dots < 0) ++ dots = 0; ++ tbuf[len++] = '\003'; ++ tbuf[len++] = '2'; ++ for (j=0;jtype) ++ { ++ case TYPE_STR: ++ sprintf (tbuf + len, "\0033:\017 %s\n", ++ (char *) &prefs + var->offset); ++ break; ++ case TYPE_INT: ++ sprintf (tbuf + len, "\0033:\017 %d\n", ++ *((int *) &prefs + var->offset)); ++ break; ++ case TYPE_BOOL: ++ if (*((int *) &prefs + var->offset)) ++ sprintf (tbuf + len, "\0033:\017 %s\n", "ON"); ++ else ++ sprintf (tbuf + len, "\0033:\017 %s\n", "OFF"); ++ break; ++ } ++ PrintText (sess, tbuf); ++} ++ ++static void ++set_list (session * sess, char *tbuf) ++{ ++ int i; ++ ++ i = 0; ++ do ++ { ++ set_showval (sess, &vars[i], tbuf); ++ i++; ++ } ++ while (vars[i].name); ++} ++ ++int ++cfg_get_bool (char *var) ++{ ++ int i = 0; ++ ++ do ++ { ++ if (!strcasecmp (var, vars[i].name)) ++ { ++ return *((int *) &prefs + vars[i].offset); ++ } ++ i++; ++ } ++ while (vars[i].name); ++ ++ return -1; ++} ++ ++int ++cmd_set (struct session *sess, char *tbuf, char *word[], char *word_eol[]) ++{ ++ int wild = FALSE; ++ int or = FALSE; ++ int off = FALSE; ++ int quiet = FALSE; ++ int erase = FALSE; ++ int i = 0, finds = 0, found; ++ int idx = 2; ++ char *var, *val; ++ ++ if (strcasecmp (word[2], "-e") == 0) ++ { ++ idx++; ++ erase = TRUE; ++ } ++ ++ /* turn a bit OFF */ ++ if (strcasecmp (word[idx], "-off") == 0) ++ { ++ idx++; ++ off = TRUE; ++ } ++ ++ /* turn a bit ON */ ++ if (strcasecmp (word[idx], "-or") == 0 || strcasecmp (word[idx], "-on") == 0) ++ { ++ idx++; ++ or = TRUE; ++ } ++ ++ if (strcasecmp (word[idx], "-quiet") == 0) ++ { ++ idx++; ++ quiet = TRUE; ++ } ++ ++ var = word[idx]; ++ val = word_eol[idx+1]; ++ ++ if (!*var) ++ { ++ set_list (sess, tbuf); ++ return TRUE; ++ } ++ ++ if ((strchr (var, '*') || strchr (var, '?')) && !*val) ++ wild = TRUE; ++ ++ if (*val == '=') ++ val++; ++ ++ do ++ { ++ if (wild) ++ found = !match (var, vars[i].name); ++ else ++ found = strcasecmp (var, vars[i].name); ++ ++ if (found == 0) ++ { ++ finds++; ++ switch (vars[i].type) ++ { ++ case TYPE_STR: ++ if (erase || *val) ++ { ++ strncpy ((char *) &prefs + vars[i].offset, val, vars[i].len); ++ ((char *) &prefs)[vars[i].offset + vars[i].len - 1] = 0; ++ if (!quiet) ++ PrintTextf (sess, "%s set to: %s\n", var, (char *) &prefs + vars[i].offset); ++ } else ++ { ++ set_showval (sess, &vars[i], tbuf); ++ } ++ break; ++ case TYPE_INT: ++ case TYPE_BOOL: ++ if (*val) ++ { ++ if (vars[i].type == TYPE_BOOL) ++ { ++ if (atoi (val)) ++ *((int *) &prefs + vars[i].offset) = 1; ++ else ++ *((int *) &prefs + vars[i].offset) = 0; ++ if (!strcasecmp (val, "YES") || !strcasecmp (val, "ON")) ++ *((int *) &prefs + vars[i].offset) = 1; ++ if (!strcasecmp (val, "NO") || !strcasecmp (val, "OFF")) ++ *((int *) &prefs + vars[i].offset) = 0; ++ } else ++ { ++ if (or) ++ *((int *) &prefs + vars[i].offset) |= atoi (val); ++ else if (off) ++ *((int *) &prefs + vars[i].offset) &= ~(atoi (val)); ++ else ++ *((int *) &prefs + vars[i].offset) = atoi (val); ++ } ++ if (!quiet) ++ PrintTextf (sess, "%s set to: %d\n", var, ++ *((int *) &prefs + vars[i].offset)); ++ } else ++ { ++ set_showval (sess, &vars[i], tbuf); ++ } ++ break; ++ } ++ } ++ i++; ++ } ++ while (vars[i].name); ++ ++ if (!finds && !quiet) ++ PrintText (sess, "No such variable.\n"); ++ ++ return TRUE; ++} ++ ++int ++xchat_open_file (char *file, int flags, int mode, int xof_flags) ++{ ++ char buf[1024]; ++ ++ if (xof_flags & XOF_FULLPATH) ++ { ++ if (xof_flags & XOF_DOMODE) ++ return open (file, flags | OFLAGS, mode); ++ else ++ return open (file, flags | OFLAGS); ++ } ++ ++ snprintf (buf, sizeof (buf), "%s/%s", get_xdir_fs (), file); ++ if (xof_flags & XOF_DOMODE) ++ return open (buf, flags | OFLAGS, mode); ++ else ++ return open (buf, flags | OFLAGS); ++} ++ ++FILE * ++xchat_fopen_file (const char *file, const char *mode, int xof_flags) ++{ ++ char buf[1024]; ++ ++ if (xof_flags & XOF_FULLPATH) ++ return fopen (file, mode); ++ ++ snprintf (buf, sizeof (buf), "%s/%s", get_xdir_fs (), file); ++ return fopen (buf, mode); ++} +diff -urNp xchat-2.8.8.orig/src/common/xchat.h xchat-2.8.8/src/common/xchat.h +--- xchat-2.8.8.orig/src/common/xchat.h 2013-06-10 14:26:55.885425482 +0200 ++++ xchat-2.8.8/src/common/xchat.h 2013-06-10 14:27:23.748503597 +0200 +@@ -1,6 +1,7 @@ + #include "../../config.h" + + #include ++#include + #include /* need time_t */ + + #ifndef XCHAT_H diff --git a/xchat.spec b/xchat.spec index ee26d1a..cc3dfc6 100644 --- a/xchat.spec +++ b/xchat.spec @@ -4,7 +4,7 @@ Summary: A popular and easy to use graphical IRC (chat) client Name: xchat Version: 2.8.8 -Release: 18%{?dist} +Release: 19%{?dist} Epoch: 1 Group: Applications/Internet License: GPLv2+ @@ -48,6 +48,10 @@ Patch53: xchat-2.8.8-link-against-libnotify.patch Patch54: xchat-2.8.8-glib.patch # http://sourceforge.net/p/xchat/bugs/1504/ Patch55: xchat-2.8.8-hires-icons.patch +# http://sourceforge.net/p/xchat/bugs/1506/ +Patch56: xchat-2.8.8-xdg-dirs.patch +# http://sourceforge.net/p/xchat/bugs/1397/ +Patch57: xchat-2.8.8-desktop-file-name.patch BuildRequires: perl perl(ExtUtils::Embed) python-devel openssl-devel pkgconfig, tcl-devel BuildRequires: GConf2-devel @@ -107,6 +111,8 @@ This package contains the X-Chat plugin providing the Tcl scripting interface. %patch53 -p1 -b .link-against-libnotify %patch54 -p0 -b .glib %patch55 -p1 -b .hires-icons +%patch56 -p1 -b .xdg-dirs +%patch57 -p1 -b .desktop-file-name sed -i -e 's/#define GTK_DISABLE_DEPRECATED//g' src/fe-gtk/*.c @@ -207,6 +213,12 @@ fi %{_libdir}/xchat/plugins/tcl.so %changelog +* Mon Jun 10 2013 Debarshi Ray - 1:2.8.8-19 +- Use XDG_CONFIG_HOME instead of home for config files + (http://sourceforge.net/p/xchat/bugs/1506/) +- Use name and generic name correctly in desktop file + (http://sourceforge.net/p/xchat/bugs/1397/) + * Fri Jun 07 2013 Debarshi Ray - 1:2.8.8-18 - Add hi-res icons (http://sourceforge.net/p/xchat/bugs/1504/) From 682808ebcbfd00b412512ed3af76b6df5cf08c61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= Date: Wed, 17 Jul 2013 22:12:25 +0200 Subject: [PATCH 07/30] Perl 5.18 rebuild --- xchat.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xchat.spec b/xchat.spec index cc3dfc6..473b321 100644 --- a/xchat.spec +++ b/xchat.spec @@ -4,7 +4,7 @@ Summary: A popular and easy to use graphical IRC (chat) client Name: xchat Version: 2.8.8 -Release: 19%{?dist} +Release: 20%{?dist} Epoch: 1 Group: Applications/Internet License: GPLv2+ @@ -213,6 +213,9 @@ fi %{_libdir}/xchat/plugins/tcl.so %changelog +* Wed Jul 17 2013 Petr Pisar - 1:2.8.8-20 +- Perl 5.18 rebuild + * Mon Jun 10 2013 Debarshi Ray - 1:2.8.8-19 - Use XDG_CONFIG_HOME instead of home for config files (http://sourceforge.net/p/xchat/bugs/1506/) From a69bdbc58b964b2a00f8000b5050b4cd2230f8b0 Mon Sep 17 00:00:00 2001 From: Dennis Gilmore Date: Sun, 4 Aug 2013 02:42:21 -0500 Subject: [PATCH 08/30] - Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild --- xchat.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xchat.spec b/xchat.spec index 473b321..d86b21e 100644 --- a/xchat.spec +++ b/xchat.spec @@ -4,7 +4,7 @@ Summary: A popular and easy to use graphical IRC (chat) client Name: xchat Version: 2.8.8 -Release: 20%{?dist} +Release: 21%{?dist} Epoch: 1 Group: Applications/Internet License: GPLv2+ @@ -213,6 +213,9 @@ fi %{_libdir}/xchat/plugins/tcl.so %changelog +* Sun Aug 04 2013 Fedora Release Engineering - 1:2.8.8-21 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + * Wed Jul 17 2013 Petr Pisar - 1:2.8.8-20 - Perl 5.18 rebuild From b609cb42086c15b035a4a13d67ca953b17eee2b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaroslav=20=C5=A0karvada?= Date: Wed, 21 May 2014 11:54:25 +0200 Subject: [PATCH 09/30] - Rebuilt for https://fedoraproject.org/wiki/Changes/f21tcl86 --- xchat.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xchat.spec b/xchat.spec index d86b21e..7312ecb 100644 --- a/xchat.spec +++ b/xchat.spec @@ -4,7 +4,7 @@ Summary: A popular and easy to use graphical IRC (chat) client Name: xchat Version: 2.8.8 -Release: 21%{?dist} +Release: 22%{?dist} Epoch: 1 Group: Applications/Internet License: GPLv2+ @@ -213,6 +213,9 @@ fi %{_libdir}/xchat/plugins/tcl.so %changelog +* Wed May 21 2014 Jaroslav Škarvada - 1:2.8.8-22 +- Rebuilt for https://fedoraproject.org/wiki/Changes/f21tcl86 + * Sun Aug 04 2013 Fedora Release Engineering - 1:2.8.8-21 - Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild From 3479acb82618e0bf0974631ca4b3fb8e3ae12c8d Mon Sep 17 00:00:00 2001 From: Dennis Gilmore Date: Sun, 8 Jun 2014 00:21:01 -0500 Subject: [PATCH 10/30] - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild --- xchat.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xchat.spec b/xchat.spec index 7312ecb..5c57cf7 100644 --- a/xchat.spec +++ b/xchat.spec @@ -4,7 +4,7 @@ Summary: A popular and easy to use graphical IRC (chat) client Name: xchat Version: 2.8.8 -Release: 22%{?dist} +Release: 23%{?dist} Epoch: 1 Group: Applications/Internet License: GPLv2+ @@ -213,6 +213,9 @@ fi %{_libdir}/xchat/plugins/tcl.so %changelog +* Sun Jun 08 2014 Fedora Release Engineering - 1:2.8.8-23 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + * Wed May 21 2014 Jaroslav Škarvada - 1:2.8.8-22 - Rebuilt for https://fedoraproject.org/wiki/Changes/f21tcl86 From 81db550b6b9be89eabc3519f6ce2a3c1c6df958e Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Mon, 18 Aug 2014 09:24:29 +0000 Subject: [PATCH 11/30] - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild --- xchat.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xchat.spec b/xchat.spec index 5c57cf7..456bddf 100644 --- a/xchat.spec +++ b/xchat.spec @@ -4,7 +4,7 @@ Summary: A popular and easy to use graphical IRC (chat) client Name: xchat Version: 2.8.8 -Release: 23%{?dist} +Release: 24%{?dist} Epoch: 1 Group: Applications/Internet License: GPLv2+ @@ -213,6 +213,9 @@ fi %{_libdir}/xchat/plugins/tcl.so %changelog +* Mon Aug 18 2014 Fedora Release Engineering - 1:2.8.8-24 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + * Sun Jun 08 2014 Fedora Release Engineering - 1:2.8.8-23 - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild From 8ea1b71f1f986357edcf9ad43d38af7523a26037 Mon Sep 17 00:00:00 2001 From: Kevin Fenzi Date: Wed, 20 Aug 2014 17:33:45 -0600 Subject: [PATCH 12/30] Rebuild for rpm bug 1131892 --- xchat.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xchat.spec b/xchat.spec index 456bddf..7442c48 100644 --- a/xchat.spec +++ b/xchat.spec @@ -4,7 +4,7 @@ Summary: A popular and easy to use graphical IRC (chat) client Name: xchat Version: 2.8.8 -Release: 24%{?dist} +Release: 25%{?dist} Epoch: 1 Group: Applications/Internet License: GPLv2+ @@ -213,6 +213,9 @@ fi %{_libdir}/xchat/plugins/tcl.so %changelog +* Wed Aug 20 2014 Kevin Fenzi - 1:2.8.8-25 +- Rebuild for rpm bug 1131892 + * Mon Aug 18 2014 Fedora Release Engineering - 1:2.8.8-24 - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild From 6d9b58520b07fbd62cc8e44e7a267d81dfd097b3 Mon Sep 17 00:00:00 2001 From: Jitka Plesnikova Date: Wed, 27 Aug 2014 13:08:57 +0200 Subject: [PATCH 13/30] Perl 5.20 rebuild --- xchat.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xchat.spec b/xchat.spec index 7442c48..8f4be13 100644 --- a/xchat.spec +++ b/xchat.spec @@ -4,7 +4,7 @@ Summary: A popular and easy to use graphical IRC (chat) client Name: xchat Version: 2.8.8 -Release: 25%{?dist} +Release: 26%{?dist} Epoch: 1 Group: Applications/Internet License: GPLv2+ @@ -213,6 +213,9 @@ fi %{_libdir}/xchat/plugins/tcl.so %changelog +* Wed Aug 27 2014 Jitka Plesnikova - 1:2.8.8-26 +- Perl 5.20 rebuild + * Wed Aug 20 2014 Kevin Fenzi - 1:2.8.8-25 - Rebuild for rpm bug 1131892 From dd89cb4a1527e4ed9c1713dab0939b18fe359787 Mon Sep 17 00:00:00 2001 From: Debarshi Ray Date: Wed, 29 Oct 2014 11:39:34 +0100 Subject: [PATCH 14/30] Fix the dates --- xchat.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xchat.spec b/xchat.spec index 8f4be13..4cfd6b9 100644 --- a/xchat.spec +++ b/xchat.spec @@ -267,10 +267,10 @@ fi * Fri Jun 17 2011 Marcela Mašláňová - 1:2.8.8-10 - Perl mass rebuild -* Tue Apr 7 2011 Christopher Aillon - 1:2.8.8-9 +* Thu Apr 07 2011 Christopher Aillon - 1:2.8.8-9 - Link against libnotify (#693362) -* Tue Apr 7 2011 Christopher Aillon - 1:2.8.8-8 +* Thu Apr 07 2011 Christopher Aillon - 1:2.8.8-8 - Update the dynamic libnotify check for the newer soname (#693362) * Mon Feb 07 2011 Fedora Release Engineering - 1:2.8.8-7 From 0d239d37de243a4c57ece9a5023b22e7c048f06c Mon Sep 17 00:00:00 2001 From: Debarshi Ray Date: Wed, 29 Oct 2014 11:40:25 +0100 Subject: [PATCH 15/30] Do not force SSLv3, also allow TLSv1_X (#1091544) --- 0001-Don-t-force-the-use-of-SSLv3.patch | 37 +++++++++++++++++++++++++ xchat.spec | 8 +++++- 2 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 0001-Don-t-force-the-use-of-SSLv3.patch diff --git a/0001-Don-t-force-the-use-of-SSLv3.patch b/0001-Don-t-force-the-use-of-SSLv3.patch new file mode 100644 index 0000000..e0f0472 --- /dev/null +++ b/0001-Don-t-force-the-use-of-SSLv3.patch @@ -0,0 +1,37 @@ +From 527eb322a5bfa97d5716e7f8178e319c515065a2 Mon Sep 17 00:00:00 2001 +From: Marc Deslauriers +Date: Mon, 20 Oct 2014 10:08:26 -0400 +Subject: [PATCH] Don't force the use of SSLv3. + +SSLv3 should no longer be used for security reasons. Let the best +connection method be automatically determined by using SSLv23_client_method() +and SSLv23_server_method(). +--- + src/common/ssl.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/common/ssl.c b/src/common/ssl.c +index a18ad47..35eb237 100644 +--- a/src/common/ssl.c ++++ b/src/common/ssl.c +@@ -70,7 +70,7 @@ _SSL_context_init (void (*info_cb_func), int server) + + SSLeay_add_ssl_algorithms (); + SSL_load_error_strings (); +- ctx = SSL_CTX_new (server ? SSLv3_server_method() : SSLv3_client_method ()); ++ ctx = SSL_CTX_new (server ? SSLv23_server_method() : SSLv23_client_method ()); + + SSL_CTX_set_session_cache_mode (ctx, SSL_SESS_CACHE_BOTH); + SSL_CTX_set_timeout (ctx, 300); +@@ -281,7 +281,7 @@ _SSL_socket (SSL_CTX *ctx, int sd) + __SSL_critical_error ("SSL_new"); + + SSL_set_fd (ssl, sd); +- if (ctx->method == SSLv3_client_method()) ++ if (ctx->method == SSLv23_client_method()) + SSL_set_connect_state (ssl); + else + SSL_set_accept_state(ssl); +-- +2.1.0 + diff --git a/xchat.spec b/xchat.spec index 4cfd6b9..d4620e2 100644 --- a/xchat.spec +++ b/xchat.spec @@ -4,7 +4,7 @@ Summary: A popular and easy to use graphical IRC (chat) client Name: xchat Version: 2.8.8 -Release: 26%{?dist} +Release: 27%{?dist} Epoch: 1 Group: Applications/Internet License: GPLv2+ @@ -52,6 +52,8 @@ Patch55: xchat-2.8.8-hires-icons.patch Patch56: xchat-2.8.8-xdg-dirs.patch # http://sourceforge.net/p/xchat/bugs/1397/ Patch57: xchat-2.8.8-desktop-file-name.patch +# https://bugzilla.redhat.com/show_bug.cgi?id=1091544 +Patch58: 0001-Don-t-force-the-use-of-SSLv3.patch BuildRequires: perl perl(ExtUtils::Embed) python-devel openssl-devel pkgconfig, tcl-devel BuildRequires: GConf2-devel @@ -113,6 +115,7 @@ This package contains the X-Chat plugin providing the Tcl scripting interface. %patch55 -p1 -b .hires-icons %patch56 -p1 -b .xdg-dirs %patch57 -p1 -b .desktop-file-name +%patch58 -p1 -b .allow-tls sed -i -e 's/#define GTK_DISABLE_DEPRECATED//g' src/fe-gtk/*.c @@ -213,6 +216,9 @@ fi %{_libdir}/xchat/plugins/tcl.so %changelog +* Wed Oct 29 2014 Debarshi Ray - 1:2.8.8-27 +- Do not force SSLv3, also allow TLSv1_X (#1091544) + * Wed Aug 27 2014 Jitka Plesnikova - 1:2.8.8-26 - Perl 5.20 rebuild From 31402e78cc6a18afb280a2375e46b737f87368ad Mon Sep 17 00:00:00 2001 From: Debarshi Ray Date: Wed, 29 Oct 2014 11:39:34 +0100 Subject: [PATCH 16/30] Fix the dates --- xchat.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xchat.spec b/xchat.spec index cc3dfc6..4d6d738 100644 --- a/xchat.spec +++ b/xchat.spec @@ -246,10 +246,10 @@ fi * Fri Jun 17 2011 Marcela Mašláňová - 1:2.8.8-10 - Perl mass rebuild -* Tue Apr 7 2011 Christopher Aillon - 1:2.8.8-9 +* Thu Apr 07 2011 Christopher Aillon - 1:2.8.8-9 - Link against libnotify (#693362) -* Tue Apr 7 2011 Christopher Aillon - 1:2.8.8-8 +* Thu Apr 07 2011 Christopher Aillon - 1:2.8.8-8 - Update the dynamic libnotify check for the newer soname (#693362) * Mon Feb 07 2011 Fedora Release Engineering - 1:2.8.8-7 From 542694e5743b607b6838d7a4faa81ae5603c44ca Mon Sep 17 00:00:00 2001 From: Debarshi Ray Date: Wed, 29 Oct 2014 11:40:25 +0100 Subject: [PATCH 17/30] Do not force SSLv3, also allow TLSv1_X (#1091544) --- 0001-Don-t-force-the-use-of-SSLv3.patch | 37 +++++++++++++++++++++++++ xchat.spec | 8 +++++- 2 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 0001-Don-t-force-the-use-of-SSLv3.patch diff --git a/0001-Don-t-force-the-use-of-SSLv3.patch b/0001-Don-t-force-the-use-of-SSLv3.patch new file mode 100644 index 0000000..e0f0472 --- /dev/null +++ b/0001-Don-t-force-the-use-of-SSLv3.patch @@ -0,0 +1,37 @@ +From 527eb322a5bfa97d5716e7f8178e319c515065a2 Mon Sep 17 00:00:00 2001 +From: Marc Deslauriers +Date: Mon, 20 Oct 2014 10:08:26 -0400 +Subject: [PATCH] Don't force the use of SSLv3. + +SSLv3 should no longer be used for security reasons. Let the best +connection method be automatically determined by using SSLv23_client_method() +and SSLv23_server_method(). +--- + src/common/ssl.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/common/ssl.c b/src/common/ssl.c +index a18ad47..35eb237 100644 +--- a/src/common/ssl.c ++++ b/src/common/ssl.c +@@ -70,7 +70,7 @@ _SSL_context_init (void (*info_cb_func), int server) + + SSLeay_add_ssl_algorithms (); + SSL_load_error_strings (); +- ctx = SSL_CTX_new (server ? SSLv3_server_method() : SSLv3_client_method ()); ++ ctx = SSL_CTX_new (server ? SSLv23_server_method() : SSLv23_client_method ()); + + SSL_CTX_set_session_cache_mode (ctx, SSL_SESS_CACHE_BOTH); + SSL_CTX_set_timeout (ctx, 300); +@@ -281,7 +281,7 @@ _SSL_socket (SSL_CTX *ctx, int sd) + __SSL_critical_error ("SSL_new"); + + SSL_set_fd (ssl, sd); +- if (ctx->method == SSLv3_client_method()) ++ if (ctx->method == SSLv23_client_method()) + SSL_set_connect_state (ssl); + else + SSL_set_accept_state(ssl); +-- +2.1.0 + diff --git a/xchat.spec b/xchat.spec index 4d6d738..727e2ec 100644 --- a/xchat.spec +++ b/xchat.spec @@ -4,7 +4,7 @@ Summary: A popular and easy to use graphical IRC (chat) client Name: xchat Version: 2.8.8 -Release: 19%{?dist} +Release: 20%{?dist} Epoch: 1 Group: Applications/Internet License: GPLv2+ @@ -52,6 +52,8 @@ Patch55: xchat-2.8.8-hires-icons.patch Patch56: xchat-2.8.8-xdg-dirs.patch # http://sourceforge.net/p/xchat/bugs/1397/ Patch57: xchat-2.8.8-desktop-file-name.patch +# https://bugzilla.redhat.com/show_bug.cgi?id=1091544 +Patch58: 0001-Don-t-force-the-use-of-SSLv3.patch BuildRequires: perl perl(ExtUtils::Embed) python-devel openssl-devel pkgconfig, tcl-devel BuildRequires: GConf2-devel @@ -113,6 +115,7 @@ This package contains the X-Chat plugin providing the Tcl scripting interface. %patch55 -p1 -b .hires-icons %patch56 -p1 -b .xdg-dirs %patch57 -p1 -b .desktop-file-name +%patch58 -p1 -b .allow-tls sed -i -e 's/#define GTK_DISABLE_DEPRECATED//g' src/fe-gtk/*.c @@ -213,6 +216,9 @@ fi %{_libdir}/xchat/plugins/tcl.so %changelog +* Wed Oct 29 2014 Debarshi Ray - 1:2.8.8-20 +- Do not force SSLv3, also allow TLSv1_X (#1091544) + * Mon Jun 10 2013 Debarshi Ray - 1:2.8.8-19 - Use XDG_CONFIG_HOME instead of home for config files (http://sourceforge.net/p/xchat/bugs/1506/) From 219aca351a21058416ebe40c8a675412730955dd Mon Sep 17 00:00:00 2001 From: Richard Hughes Date: Thu, 26 Mar 2015 16:46:27 +0000 Subject: [PATCH 18/30] Add an AppData file for the software center --- xchat.spec | 48 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/xchat.spec b/xchat.spec index d4620e2..bbf9e55 100644 --- a/xchat.spec +++ b/xchat.spec @@ -4,7 +4,7 @@ Summary: A popular and easy to use graphical IRC (chat) client Name: xchat Version: 2.8.8 -Release: 27%{?dist} +Release: 28%{?dist} Epoch: 1 Group: Applications/Internet License: GPLv2+ @@ -166,6 +166,48 @@ desktop-file-install --vendor="" \ --add-category=IRCClient \ --add-category=GTK xchat.desktop +# Register as an application to be visible in the software center +# +# NOTE: It would be *awesome* if this file was maintained by the upstream +# project, translated and installed into the right place during `make install`. +# +# See http://www.freedesktop.org/software/appstream/docs/ for more details. +# +mkdir -p $RPM_BUILD_ROOT%{_datadir}/appdata +cat > $RPM_BUILD_ROOT%{_datadir}/appdata/%{name}.appdata.xml < + + + + xchat.desktop + CC0-1.0 + +

+ XChat is an Internet Relay Chat (IRC) client. + It allows you to join multiple IRC channels at the same time, which you can view + and browse using tabs or a tree-like interface. + You can use XChat to publicly chat with people in a channel, and to have private + one-on-one conversations. + You can even transfer files with XChat! +

+

+ The client includes nick completion, alerts for mentions, logging functionality, + and several customization options for fonts, sounds and colors. +

+
+ http://xchat.org/ + + https://raw.githubusercontent.com/hughsie/fedora-appstream/master/screenshots-extra/xchat/a.png + + +
+EOF + %find_lang %{name} # do not Provide plugins .so @@ -205,6 +247,7 @@ fi %dir %{_libdir}/xchat/plugins %{_libdir}/xchat/plugins/perl.so %{_libdir}/xchat/plugins/python.so +%{_datadir}/appdata/%{name}.appdata.xml %{_datadir}/applications/xchat.desktop %{_datadir}/icons/hicolor/*/apps/xchat.png %{_datadir}/pixmaps/* @@ -216,6 +259,9 @@ fi %{_libdir}/xchat/plugins/tcl.so %changelog +* Thu Mar 26 2015 Richard Hughes - 1:2.8.8-28 +- Add an AppData file for the software center + * Wed Oct 29 2014 Debarshi Ray - 1:2.8.8-27 - Do not force SSLv3, also allow TLSv1_X (#1091544) From 44d47014c0aaab45b5433e073beae0e2789c43cd Mon Sep 17 00:00:00 2001 From: Jitka Plesnikova Date: Fri, 5 Jun 2015 11:20:23 +0200 Subject: [PATCH 19/30] Perl 5.22 rebuild --- xchat.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xchat.spec b/xchat.spec index bbf9e55..bbc0963 100644 --- a/xchat.spec +++ b/xchat.spec @@ -4,7 +4,7 @@ Summary: A popular and easy to use graphical IRC (chat) client Name: xchat Version: 2.8.8 -Release: 28%{?dist} +Release: 29%{?dist} Epoch: 1 Group: Applications/Internet License: GPLv2+ @@ -259,6 +259,9 @@ fi %{_libdir}/xchat/plugins/tcl.so %changelog +* Fri Jun 05 2015 Jitka Plesnikova - 1:2.8.8-29 +- Perl 5.22 rebuild + * Thu Mar 26 2015 Richard Hughes - 1:2.8.8-28 - Add an AppData file for the software center From 7584871ee3d1f6d2b127bdcec814d4d3bf334a71 Mon Sep 17 00:00:00 2001 From: Dennis Gilmore Date: Fri, 19 Jun 2015 03:47:46 +0000 Subject: [PATCH 20/30] - Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild --- xchat.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xchat.spec b/xchat.spec index bbc0963..c770277 100644 --- a/xchat.spec +++ b/xchat.spec @@ -4,7 +4,7 @@ Summary: A popular and easy to use graphical IRC (chat) client Name: xchat Version: 2.8.8 -Release: 29%{?dist} +Release: 30%{?dist} Epoch: 1 Group: Applications/Internet License: GPLv2+ @@ -259,6 +259,9 @@ fi %{_libdir}/xchat/plugins/tcl.so %changelog +* Fri Jun 19 2015 Fedora Release Engineering - 1:2.8.8-30 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + * Fri Jun 05 2015 Jitka Plesnikova - 1:2.8.8-29 - Perl 5.22 rebuild From 6b338b7bdba4966cd2544d183a32bba98ccd8bab Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 5 Feb 2016 03:19:25 +0000 Subject: [PATCH 21/30] - Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild --- xchat.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xchat.spec b/xchat.spec index c770277..11dd0f3 100644 --- a/xchat.spec +++ b/xchat.spec @@ -4,7 +4,7 @@ Summary: A popular and easy to use graphical IRC (chat) client Name: xchat Version: 2.8.8 -Release: 30%{?dist} +Release: 31%{?dist} Epoch: 1 Group: Applications/Internet License: GPLv2+ @@ -259,6 +259,9 @@ fi %{_libdir}/xchat/plugins/tcl.so %changelog +* Fri Feb 05 2016 Fedora Release Engineering - 1:2.8.8-31 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + * Fri Jun 19 2015 Fedora Release Engineering - 1:2.8.8-30 - Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild From 0eccc38e1b6112447369d7fd1926f46929dcbf69 Mon Sep 17 00:00:00 2001 From: Jitka Plesnikova Date: Tue, 17 May 2016 04:07:22 +0200 Subject: [PATCH 22/30] Perl 5.24 rebuild --- xchat.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xchat.spec b/xchat.spec index 11dd0f3..2a61286 100644 --- a/xchat.spec +++ b/xchat.spec @@ -4,7 +4,7 @@ Summary: A popular and easy to use graphical IRC (chat) client Name: xchat Version: 2.8.8 -Release: 31%{?dist} +Release: 32%{?dist} Epoch: 1 Group: Applications/Internet License: GPLv2+ @@ -259,6 +259,9 @@ fi %{_libdir}/xchat/plugins/tcl.so %changelog +* Tue May 17 2016 Jitka Plesnikova - 1:2.8.8-32 +- Perl 5.24 rebuild + * Fri Feb 05 2016 Fedora Release Engineering - 1:2.8.8-31 - Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild From 87c1e65b452a1dc06fff243e923a583720bf736a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= Date: Fri, 24 Jun 2016 09:24:58 +0200 Subject: [PATCH 23/30] Mandatory Perl build-requires added --- xchat.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xchat.spec b/xchat.spec index 2a61286..e2a64b2 100644 --- a/xchat.spec +++ b/xchat.spec @@ -55,7 +55,7 @@ Patch57: xchat-2.8.8-desktop-file-name.patch # https://bugzilla.redhat.com/show_bug.cgi?id=1091544 Patch58: 0001-Don-t-force-the-use-of-SSLv3.patch -BuildRequires: perl perl(ExtUtils::Embed) python-devel openssl-devel pkgconfig, tcl-devel +BuildRequires: perl perl-devel perl-generators perl(ExtUtils::Embed) python-devel openssl-devel pkgconfig, tcl-devel BuildRequires: GConf2-devel BuildRequires: dbus-devel >= 0.60, dbus-glib-devel >= 0.60 BuildRequires: glib2-devel >= 2.10.0, gtk2-devel >= 2.10.0, bison >= 1.35 From bf11ff54a8b3d520e8716ce8c12c633ae97549bd Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 11 Feb 2017 17:42:08 +0000 Subject: [PATCH 24/30] - Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild --- xchat.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xchat.spec b/xchat.spec index e2a64b2..2e5ec48 100644 --- a/xchat.spec +++ b/xchat.spec @@ -4,7 +4,7 @@ Summary: A popular and easy to use graphical IRC (chat) client Name: xchat Version: 2.8.8 -Release: 32%{?dist} +Release: 33%{?dist} Epoch: 1 Group: Applications/Internet License: GPLv2+ @@ -259,6 +259,9 @@ fi %{_libdir}/xchat/plugins/tcl.so %changelog +* Sat Feb 11 2017 Fedora Release Engineering - 1:2.8.8-33 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + * Tue May 17 2016 Jitka Plesnikova - 1:2.8.8-32 - Perl 5.24 rebuild From 545da57f6b80cec4c3082f56ea4b1a6ebb7dbbf4 Mon Sep 17 00:00:00 2001 From: Jitka Plesnikova Date: Sun, 4 Jun 2017 06:26:38 +0200 Subject: [PATCH 25/30] Perl 5.26 rebuild --- xchat.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xchat.spec b/xchat.spec index 2e5ec48..a8d76ac 100644 --- a/xchat.spec +++ b/xchat.spec @@ -4,7 +4,7 @@ Summary: A popular and easy to use graphical IRC (chat) client Name: xchat Version: 2.8.8 -Release: 33%{?dist} +Release: 34%{?dist} Epoch: 1 Group: Applications/Internet License: GPLv2+ @@ -259,6 +259,9 @@ fi %{_libdir}/xchat/plugins/tcl.so %changelog +* Sun Jun 04 2017 Jitka Plesnikova - 1:2.8.8-34 +- Perl 5.26 rebuild + * Sat Feb 11 2017 Fedora Release Engineering - 1:2.8.8-33 - Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild From bb0ad34d7441762a8e98590ffc6cda79ceb95676 Mon Sep 17 00:00:00 2001 From: Debarshi Ray Date: Mon, 26 Jun 2017 12:38:56 +0200 Subject: [PATCH 26/30] Port to OpenSSL 1.1.0 https://bugzilla.redhat.com/show_bug.cgi?id=1387521 --- xchat-2.8.8-openssl-1.1.0.patch | 89 +++++++++++++++++++++++++++++++++ xchat.spec | 8 ++- 2 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 xchat-2.8.8-openssl-1.1.0.patch diff --git a/xchat-2.8.8-openssl-1.1.0.patch b/xchat-2.8.8-openssl-1.1.0.patch new file mode 100644 index 0000000..5fd2c0f --- /dev/null +++ b/xchat-2.8.8-openssl-1.1.0.patch @@ -0,0 +1,89 @@ +diff -urNp xchat-2.8.8.orig/src/common/server.c xchat-2.8.8/src/common/server.c +--- xchat-2.8.8.orig/src/common/server.c 2010-05-30 04:14:41.000000000 +0200 ++++ xchat-2.8.8/src/common/server.c 2017-06-26 15:40:02.989120175 +0200 +@@ -593,14 +593,16 @@ ssl_cb_info (SSL * s, int where, int ret + static int + ssl_cb_verify (int ok, X509_STORE_CTX * ctx) + { ++ X509 *current_cert; + char subject[256]; + char issuer[256]; + char buf[512]; + + +- X509_NAME_oneline (X509_get_subject_name (ctx->current_cert), subject, ++ current_cert = X509_STORE_CTX_get_current_cert (ctx); ++ X509_NAME_oneline (X509_get_subject_name (current_cert), subject, + sizeof (subject)); +- X509_NAME_oneline (X509_get_issuer_name (ctx->current_cert), issuer, ++ X509_NAME_oneline (X509_get_issuer_name (current_cert), issuer, + sizeof (issuer)); + + snprintf (buf, sizeof (buf), "* Subject: %s", subject); +@@ -751,7 +753,12 @@ ssl_do_connect (server * serv) + return (0); /* remove it (0) */ + } else + { +- if (serv->ssl->session && serv->ssl->session->time + SSLTMOUT < time (NULL)) ++ SSL_SESSION *session; ++ long session_time; ++ ++ session = SSL_get_session (serv->ssl); ++ session_time = SSL_SESSION_get_time (session); ++ if (session && session_time + SSLTMOUT < time (NULL)) + { + snprintf (buf, sizeof (buf), "SSL handshake timed out"); + EMIT_SIGNAL (XP_TE_CONNFAIL, serv->server_session, buf, NULL, +diff -urNp xchat-2.8.8.orig/src/common/ssl.c xchat-2.8.8/src/common/ssl.c +--- xchat-2.8.8.orig/src/common/ssl.c 2017-06-26 15:43:41.924066669 +0200 ++++ xchat-2.8.8/src/common/ssl.c 2017-06-26 15:54:09.769849268 +0200 +@@ -136,6 +136,8 @@ int + _SSL_get_cert_info (struct cert_info *cert_info, SSL * ssl) + { + X509 *peer_cert; ++ X509_PUBKEY *peer_pub_key; ++ ASN1_OBJECT *algorithm; + EVP_PKEY *peer_pkey; + /* EVP_PKEY *ca_pkey; */ + /* EVP_PKEY *tmp_pkey; */ +@@ -155,8 +157,10 @@ _SSL_get_cert_info (struct cert_info *ce + broke_oneline (cert_info->subject, cert_info->subject_word); + broke_oneline (cert_info->issuer, cert_info->issuer_word); + +- alg = OBJ_obj2nid (peer_cert->cert_info->key->algor->algorithm); +- sign_alg = OBJ_obj2nid (peer_cert->sig_alg->algorithm); ++ peer_pub_key = X509_get_X509_PUBKEY (peer_cert); ++ X509_PUBKEY_get0_param (&algorithm, NULL, NULL, NULL, peer_pub_key); ++ alg = OBJ_obj2nid (algorithm); ++ sign_alg = X509_get_signature_type (peer_cert); + ASN1_TIME_snprintf (notBefore, sizeof (notBefore), + X509_get_notBefore (peer_cert)); + ASN1_TIME_snprintf (notAfter, sizeof (notAfter), +@@ -199,7 +203,7 @@ _SSL_get_cert_info (struct cert_info *ce + struct chiper_info * + _SSL_get_cipher_info (SSL * ssl) + { +- SSL_CIPHER *c; ++ const SSL_CIPHER *c; + + + c = SSL_get_current_cipher (ssl); +@@ -274,6 +278,7 @@ SSL * + _SSL_socket (SSL_CTX *ctx, int sd) + { + SSL *ssl; ++ SSL_METHOD *method; + + + if (!(ssl = SSL_new (ctx))) +@@ -281,7 +286,9 @@ _SSL_socket (SSL_CTX *ctx, int sd) + __SSL_critical_error ("SSL_new"); + + SSL_set_fd (ssl, sd); +- if (ctx->method == SSLv23_client_method()) ++ ++ method = SSL_CTX_get_ssl_method (ctx); ++ if (method == SSLv23_client_method()) + SSL_set_connect_state (ssl); + else + SSL_set_accept_state(ssl); diff --git a/xchat.spec b/xchat.spec index a8d76ac..36316e5 100644 --- a/xchat.spec +++ b/xchat.spec @@ -4,7 +4,7 @@ Summary: A popular and easy to use graphical IRC (chat) client Name: xchat Version: 2.8.8 -Release: 34%{?dist} +Release: 35%{?dist} Epoch: 1 Group: Applications/Internet License: GPLv2+ @@ -54,6 +54,8 @@ Patch56: xchat-2.8.8-xdg-dirs.patch Patch57: xchat-2.8.8-desktop-file-name.patch # https://bugzilla.redhat.com/show_bug.cgi?id=1091544 Patch58: 0001-Don-t-force-the-use-of-SSLv3.patch +# https://bugzilla.redhat.com/show_bug.cgi?id=1387521 +Patch59: xchat-2.8.8-openssl-1.1.0.patch BuildRequires: perl perl-devel perl-generators perl(ExtUtils::Embed) python-devel openssl-devel pkgconfig, tcl-devel BuildRequires: GConf2-devel @@ -116,6 +118,7 @@ This package contains the X-Chat plugin providing the Tcl scripting interface. %patch56 -p1 -b .xdg-dirs %patch57 -p1 -b .desktop-file-name %patch58 -p1 -b .allow-tls +%patch59 -p1 -b .openssl-1.1.0 sed -i -e 's/#define GTK_DISABLE_DEPRECATED//g' src/fe-gtk/*.c @@ -259,6 +262,9 @@ fi %{_libdir}/xchat/plugins/tcl.so %changelog +* Mon Jun 26 2017 Debarshi Ray - 1:2.8.8-35 +- Port to OpenSSL 1.1.0 (#1387521) + * Sun Jun 04 2017 Jitka Plesnikova - 1:2.8.8-34 - Perl 5.26 rebuild From 510a56a9931eed09bb14ffcc865ade283d58ef17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= Date: Wed, 12 Jul 2017 14:48:14 +0200 Subject: [PATCH 27/30] perl dependency renamed to perl-interpreter --- xchat.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xchat.spec b/xchat.spec index 36316e5..7a5613b 100644 --- a/xchat.spec +++ b/xchat.spec @@ -57,7 +57,7 @@ Patch58: 0001-Don-t-force-the-use-of-SSLv3.patch # https://bugzilla.redhat.com/show_bug.cgi?id=1387521 Patch59: xchat-2.8.8-openssl-1.1.0.patch -BuildRequires: perl perl-devel perl-generators perl(ExtUtils::Embed) python-devel openssl-devel pkgconfig, tcl-devel +BuildRequires: perl-interpreter perl-devel perl-generators perl(ExtUtils::Embed) python-devel openssl-devel pkgconfig, tcl-devel BuildRequires: GConf2-devel BuildRequires: dbus-devel >= 0.60, dbus-glib-devel >= 0.60 BuildRequires: glib2-devel >= 2.10.0, gtk2-devel >= 2.10.0, bison >= 1.35 From 4a0b3cbf2c6da49d5654e28bafa73022b52c718b Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 27 Jul 2017 21:56:21 +0000 Subject: [PATCH 28/30] - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild --- xchat.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xchat.spec b/xchat.spec index 7a5613b..b45d4f1 100644 --- a/xchat.spec +++ b/xchat.spec @@ -4,7 +4,7 @@ Summary: A popular and easy to use graphical IRC (chat) client Name: xchat Version: 2.8.8 -Release: 35%{?dist} +Release: 36%{?dist} Epoch: 1 Group: Applications/Internet License: GPLv2+ @@ -262,6 +262,9 @@ fi %{_libdir}/xchat/plugins/tcl.so %changelog +* Thu Jul 27 2017 Fedora Release Engineering - 1:2.8.8-36 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + * Mon Jun 26 2017 Debarshi Ray - 1:2.8.8-35 - Port to OpenSSL 1.1.0 (#1387521) From f53ba75ca8e46705c3ae5b466317c7c32696e3b0 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 3 Aug 2017 10:31:08 +0000 Subject: [PATCH 29/30] - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild --- xchat.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xchat.spec b/xchat.spec index b45d4f1..c81eb60 100644 --- a/xchat.spec +++ b/xchat.spec @@ -4,7 +4,7 @@ Summary: A popular and easy to use graphical IRC (chat) client Name: xchat Version: 2.8.8 -Release: 36%{?dist} +Release: 37%{?dist} Epoch: 1 Group: Applications/Internet License: GPLv2+ @@ -262,6 +262,9 @@ fi %{_libdir}/xchat/plugins/tcl.so %changelog +* Thu Aug 03 2017 Fedora Release Engineering - 1:2.8.8-37 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + * Thu Jul 27 2017 Fedora Release Engineering - 1:2.8.8-36 - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild From 2ed876ab6a31732b98f33fad1ab21d4c5a3a673f Mon Sep 17 00:00:00 2001 From: Debarshi Ray Date: Mon, 28 Aug 2017 15:48:43 +0200 Subject: [PATCH 30/30] XChat is dead. The recommended replacement is HexChat. --- .gitignore | 1 - 0001-Don-t-force-the-use-of-SSLv3.patch | 37 - dead.package | 1 + hicolor_apps_16x16_xchat.png | Bin 1064 -> 0 bytes hicolor_apps_22x22_xchat.png | Bin 1536 -> 0 bytes hicolor_apps_24x24_xchat.png | Bin 1724 -> 0 bytes hicolor_apps_256x256_xchat.png | Bin 28634 -> 0 bytes hicolor_apps_32x32_xchat.png | Bin 2418 -> 0 bytes hicolor_apps_48x48_xchat.png | Bin 4018 -> 0 bytes sources | 1 - xchat-1.8.7-use-sysconf-to-detect-cpus.patch | 34 - xchat-2.8.6-change-page-activity.patch | 339 ---- xchat-2.8.6-default-utf8.patch | 24 - xchat-2.8.6-freenode-ports.patch | 35 - xchat-2.8.8-desktop-file-name.patch | 13 - xchat-2.8.8-glib.patch | 61 - xchat-2.8.8-hires-icons.patch | 85 - xchat-2.8.8-libnotify07.patch | 24 - xchat-2.8.8-link-against-libnotify.patch | 343 ---- xchat-2.8.8-notifications-and-tray.patch | 30 - xchat-2.8.8-openssl-1.1.0.patch | 89 - xchat-2.8.8-xdg-dirs.patch | 1224 ------------ xchat.spec | 1022 ---------- xchat.svg | 1802 ------------------ 24 files changed, 1 insertion(+), 5164 deletions(-) delete mode 100644 .gitignore delete mode 100644 0001-Don-t-force-the-use-of-SSLv3.patch create mode 100644 dead.package delete mode 100644 hicolor_apps_16x16_xchat.png delete mode 100644 hicolor_apps_22x22_xchat.png delete mode 100644 hicolor_apps_24x24_xchat.png delete mode 100644 hicolor_apps_256x256_xchat.png delete mode 100644 hicolor_apps_32x32_xchat.png delete mode 100644 hicolor_apps_48x48_xchat.png delete mode 100644 sources delete mode 100644 xchat-1.8.7-use-sysconf-to-detect-cpus.patch delete mode 100644 xchat-2.8.6-change-page-activity.patch delete mode 100644 xchat-2.8.6-default-utf8.patch delete mode 100644 xchat-2.8.6-freenode-ports.patch delete mode 100644 xchat-2.8.8-desktop-file-name.patch delete mode 100644 xchat-2.8.8-glib.patch delete mode 100644 xchat-2.8.8-hires-icons.patch delete mode 100644 xchat-2.8.8-libnotify07.patch delete mode 100644 xchat-2.8.8-link-against-libnotify.patch delete mode 100644 xchat-2.8.8-notifications-and-tray.patch delete mode 100644 xchat-2.8.8-openssl-1.1.0.patch delete mode 100644 xchat-2.8.8-xdg-dirs.patch delete mode 100644 xchat.spec delete mode 100644 xchat.svg diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 1f5f78f..0000000 --- a/.gitignore +++ /dev/null @@ -1 +0,0 @@ -xchat-2.8.8.tar.xz diff --git a/0001-Don-t-force-the-use-of-SSLv3.patch b/0001-Don-t-force-the-use-of-SSLv3.patch deleted file mode 100644 index e0f0472..0000000 --- a/0001-Don-t-force-the-use-of-SSLv3.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 527eb322a5bfa97d5716e7f8178e319c515065a2 Mon Sep 17 00:00:00 2001 -From: Marc Deslauriers -Date: Mon, 20 Oct 2014 10:08:26 -0400 -Subject: [PATCH] Don't force the use of SSLv3. - -SSLv3 should no longer be used for security reasons. Let the best -connection method be automatically determined by using SSLv23_client_method() -and SSLv23_server_method(). ---- - src/common/ssl.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/common/ssl.c b/src/common/ssl.c -index a18ad47..35eb237 100644 ---- a/src/common/ssl.c -+++ b/src/common/ssl.c -@@ -70,7 +70,7 @@ _SSL_context_init (void (*info_cb_func), int server) - - SSLeay_add_ssl_algorithms (); - SSL_load_error_strings (); -- ctx = SSL_CTX_new (server ? SSLv3_server_method() : SSLv3_client_method ()); -+ ctx = SSL_CTX_new (server ? SSLv23_server_method() : SSLv23_client_method ()); - - SSL_CTX_set_session_cache_mode (ctx, SSL_SESS_CACHE_BOTH); - SSL_CTX_set_timeout (ctx, 300); -@@ -281,7 +281,7 @@ _SSL_socket (SSL_CTX *ctx, int sd) - __SSL_critical_error ("SSL_new"); - - SSL_set_fd (ssl, sd); -- if (ctx->method == SSLv3_client_method()) -+ if (ctx->method == SSLv23_client_method()) - SSL_set_connect_state (ssl); - else - SSL_set_accept_state(ssl); --- -2.1.0 - diff --git a/dead.package b/dead.package new file mode 100644 index 0000000..6541609 --- /dev/null +++ b/dead.package @@ -0,0 +1 @@ +XChat is dead. The recommended replacement is HexChat. diff --git a/hicolor_apps_16x16_xchat.png b/hicolor_apps_16x16_xchat.png deleted file mode 100644 index b29fc17a74f5a070fe1d0bb5a124dfd3056ceb68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1064 zcmV+@1lRkCP)P{QzDxiB02FjZSad;kbZBpK07_wN zbz&e>bY*F7Wpd{G_b&hd03mcmSaefwb#h~60BCe{a5^t9YH4k4VPh_Bb#rNBXklz@ zE@OIWX5(G}00TftL_t(Ijg3=ZOj~srJ@-%Py#?E~6qp5Z!;Yqd5eka3IH#ET1GA}1 z_9si0xEYiApnLH_j4!Ce?a2pBj4m-gXd(pNP_vBd07a5Ei#SKKO2ILyFe-(6xwkF7 zx8?T!e3%-tWXVo)lJ7j6^X1Ez!w^CM0B84)bZu>ZbttbU7Uh}Y$KSa^Ru3x6>Ey`lLw{iOeg3)BuV*%Bs*lnsfzo&*wX_L(^YW?X z;U0K~d*GS-;q;27O;9>rPw7+%rKyjoI{TS9cCM80He1cdUU8O3ydR(i05`y-PhfjX zU!_$PW*C;kw&o5m6F&|Zi97dbZ^G$l;#}Ug^UT+8?>t++>)GxVE&$!M<9@)i7JNbq ztFe(jUJbnA72MU<{-+5m3MKayP%K&)9Ur5a+NuDb&8{D*+Y@5dToGzczo&`brR#Py zF|pWh9c*rW{hO=dv4WP?P_*bhX>FQUR+bT-xMCWHG011s)wj~=b$xm|deSNu#k)6G zxm|ev@F`pzI1g1*0RSa7n_^MsOEYivGK3JcrzKDD$B@Q#fwIQsWDC0WSV)5RTX_hOPSF8odCRm3cx5ur1&81m9F-`J97Q2UlbeNwXF#s z$PrlSEatX%;Z|CNrsyV@m(|NR*^*a+iY&5^gy2|Qf|M8OhwxP=Y{w^$ucb^w4t2*JN?6`m=> zK!3nxeP3Tj54a#Vh^QrmfCqq>j)fe}g}T>rgNB9hwLH2BA;y27AcPo_B)zQ7Ye|8{ i?j*(GKMgF@0Qd(|vyx5+2zDX>0000jqIBM diff --git a/hicolor_apps_22x22_xchat.png b/hicolor_apps_22x22_xchat.png deleted file mode 100644 index 5f4a083e4cbfc08cd1065d318e8b854dcbd1c7f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1536 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 Q004mYBZG&v>UI(T1MHQDWB>pF diff --git a/hicolor_apps_32x32_xchat.png b/hicolor_apps_32x32_xchat.png deleted file mode 100644 index 59b1850da79c97f4c114e5e65fb71d1c2f1870b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2418 zcmV-&361uNP)P{QzDxiB02FjZSad;kbZBpK07_wN zbz&e>bY*F7Wpd{G_b&hd03mcmSaefwb#h~60BCe{a5^t9YH4k4VPh_Bb#rNBXklz@ zE@OIWX5(G}00@dnL_t(og{7Bya8>mc$3OSpw`6-SI|M?2#0TbOE2JVp5M-N+GB{HQ zTw3W$>s0Gfp+&K^ELx@2PPGf8*6JuSqK+dJY#v$%kmW%kA_)?K7m}AimY4PI@7=9` z4OZKv$FyiqeM}F0|A{?v{Z|Hl zjs4+P*Yy@_?yHvZWix|K2mV;`h`wprGT9gzCw>+9nWe66`Od`~o%igum8{x6%WBGW zZ(QVZUMu;=MJ}h5l6U<2yLQYiTJ}Q9)cL=9qUL$=pVieaVN3y=7rC}gEMLAR_ogS! zc)yFNouqW-Tj|NRyrUbgLBxhdE@x_bfxBeoTXrG(2{bIhK5en7aQ>sKk8QnL#4rKB zz1g*G@{I4S89(PC6D>c1Xf3pFMu>kx#htIGr=}FR*UkHS5$oo;oT+Jr?y@^yw+oTI z(D4kY9pGI}=JmHo(-%E@@8PG1ix?E}Se0vA(T%It&})iyvNnV3YXjfC$Oq zaIm)WqbIK`{q`dTbAMpQyA~qNpfTJ7ClDloyvp^~&Wkmx%TwIDj<-8H0UrF8%bAf^ z?7rci7wux-4rqV%YP=Ez|3Oj;e=9NV`8D_}{fy(F}xPTD9%%rMy*2yLFtzyed(E9JOaVn_HsOQ^g?(|1mQY}eKrcKC`B(>-2gEZ1Z?GS7oJ5B>NX(qc5cdP%X_O9Li8Sepo zvMlS8!{NZ;a2OtsCw9?CQ+HpeB_+wabb9_2Ns9WeDYLO$OPaw4?jH5!>ZV^;*Rd1m z0yKxifoaI`&{nKi;a{-$CTlpu*8R3<9Z$;GXKE}|5r}U7B22F!BFq2Q*!0_lFZ$m|Ri#!J)OCfI2`vOaMSEuH0W* zRF-T_$>ef(WN`e+y&A5fSA@2h=Fg7x#G!f%0nI$$}ys&E3s#QPp`~AZ@;;>%e z_Xo-|GRL7A2AbaQXHMa73eeB=&0Vj`rdbp=2Ja1&ourtuy z-1^smzh`OtW$z-vWD>rq0J|-n@BMTgu08MI`LY&401Ta!-e#r*&Q}zw?Zq|L;Ww*c z0&Yt^J;7$ntDI#Og-i7(FvhBZARq_=hOPrpZ!X}^zwcnl@;j+Nd5DE=`^dK_+?Z`3 z6-~1Jts(trrQbED#(qV_;1-nlT#l^V@yG8kcVuQY9UePfQG(Qr{%5Ec)Ho3ho@>kD zSY{;#0uPu@bDO1g5YlBC&tIBDy}?j$PF+sF2yuWs-Jb2fzi?t^)|ZDN%IL0`!8(qh zIF4x44E8BN8p#Sgp4Exm=|l5SfT&yEcpyI~ zJFBw=RLkh(ss)nA;a5}HRC`%_>Ow#Zb%!BmI#{wX#o!lqKX-Q?!KB1!j-?F2ni;RF z+?OV0n&ZL_0LkO=2n!0*UsxFGv@`_mWID?cyE-7IUfong3nXXKqnOz2=~mva_y4`N zBX-%vG|Lc@{AJ&7;AIUmZWpu1j`a!k}S&% zyO03AjWKHDk;n~xOH$TyBOn92`e!j34g`2ugOfnFEXx`s{tFU|42oz{s0+na=fN;}yMjjGc*JiaAGJqjA%vxE|<#$WC3L&l<3e4 z)Fd*G$g-@DBp-nv*p4Z{OcAnm_yVW{x@1{ahsF<9U`Qr4lu87F kR-+%^2=tM-2M)FW0e&)V?#+JwU;qFB07*qoM6N<$f}rZ4O8@`> diff --git a/hicolor_apps_48x48_xchat.png b/hicolor_apps_48x48_xchat.png deleted file mode 100644 index 47db53ed11fba5c5eede305e5fabbe8c33c8d89b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4018 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 = TRUE; -+ lastact_update(sess); -+ } - fe_set_hilight (sess); - return 1; - } -@@ -344,6 +347,7 @@ inbound_action (session *sess, char *cha - sess->msg_said = TRUE; - sess->new_data = FALSE; - } -+ lastact_update(sess); - } - - user = userlist_find (sess, from); -@@ -395,6 +399,7 @@ inbound_chanmsg (server *serv, session * - { - sess->msg_said = TRUE; - sess->new_data = FALSE; -+ lastact_update(sess); - } - - user = userlist_find (sess, from); -diff -paur xchat2.orig/src/common/xchat.c xchat2/src/common/xchat.c ---- xchat2.orig/src/common/xchat.c 2008-07-20 17:31:44.900468825 +0200 -+++ xchat2/src/common/xchat.c 2008-07-20 17:33:57.089468218 +0200 -@@ -71,6 +71,23 @@ GSList *usermenu_list = 0; - GSList *urlhandler_list = 0; - GSList *tabmenu_list = 0; - -+/* -+ * This array contains 5 double linked lists, one for each priority in the -+ * "interesting session" queue ("channel" stands for everything but -+ * SESS_DIALOG): -+ * -+ * [0] queries with hilight -+ * [1] queries -+ * [2] channels with hilight -+ * [3] channels with dialogue -+ * [4] channels with other data -+ * -+ * Each time activity happens the corresponding session is put at the -+ * beginning of one of the lists. The aim is to be able to switch to the -+ * session with the most important/recent activity. -+ */ -+GList *sess_list_by_lastact[5] = {NULL, NULL, NULL, NULL, NULL}; -+ - static int in_xchat_exit = FALSE; - int xchat_is_quitting = FALSE; - /* command-line args */ -@@ -93,6 +110,105 @@ struct xchatprefs prefs; - SSL_CTX *ctx = NULL; - #endif - -+/* -+ * Update the priority queue of the "interesting sessions" -+ * (sess_list_by_lastact). -+ */ -+void -+lastact_update(session *sess) -+{ -+ int newidx; -+ -+ /* Find the priority (for the order see before) */ -+ if (sess->type == SESS_DIALOG) -+ { -+ if (sess->nick_said) -+ newidx = LACT_QUERY_HI; -+ else if (sess->msg_said) -+ newidx = LACT_QUERY; -+ else if (sess->new_data) -+ newidx = LACT_QUERY; -+ else -+ newidx = LACT_NONE; -+ } -+ else -+ { -+ if (sess->nick_said) -+ newidx = LACT_CHAN_HI; -+ else if (sess->msg_said) -+ newidx = LACT_CHAN; -+ else if (sess->new_data) -+ newidx = LACT_CHAN_DATA; -+ else -+ newidx = LACT_NONE; -+ } -+ -+ /* Check if this update is a no-op */ -+ if (sess->lastact_idx == newidx && -+ ((newidx != LACT_NONE && sess->lastact_elem == sess_list_by_lastact[newidx]) || -+ (newidx == LACT_NONE))) -+ return; -+ -+ /* Remove from the old position (and, if no new position, return */ -+ else if (sess->lastact_idx != LACT_NONE && sess->lastact_elem) -+ { -+ sess_list_by_lastact[sess->lastact_idx] = g_list_remove_link( -+ sess_list_by_lastact[sess->lastact_idx], -+ sess->lastact_elem); -+ if (newidx == LACT_NONE) -+ { -+ sess->lastact_idx = newidx; -+ return; -+ } -+ } -+ -+ /* No previous position, allocate new */ -+ else if (!sess->lastact_elem) -+ sess->lastact_elem = g_list_prepend(sess->lastact_elem, sess); -+ -+ sess->lastact_idx = newidx; -+ sess_list_by_lastact[newidx] = g_list_concat( -+ sess->lastact_elem, sess_list_by_lastact[newidx]); -+} -+ -+/* -+ * Extract the first session from the priority queue of sessions with recent -+ * activity. Return NULL if no such session can be found. -+ * -+ * If filter is specified, skip a session if filter(session) returns 0. This -+ * can be used for UI-specific needs, e.g. in fe-gtk we want to filter out -+ * detached sessions. -+ */ -+session * -+lastact_getfirst(int (*filter) (session *sess)) -+{ -+ int i; -+ session *sess = NULL; -+ GList *curitem; -+ -+ /* 5 is the number of priority classes LACT_ */ -+ for (i = 0; i < 5 && !sess; i++) -+ { -+ curitem = sess_list_by_lastact[i]; -+ while (curitem && !sess) -+ { -+ sess = g_list_nth_data(curitem, 0); -+ if (!sess || (filter && !filter(sess))) -+ { -+ sess = NULL; -+ curitem = g_list_next(curitem); -+ } -+ } -+ -+ if (sess) -+ { -+ sess_list_by_lastact[i] = g_list_remove_link(sess_list_by_lastact[i], curitem); -+ sess->lastact_idx = LACT_NONE; -+ } -+ } -+ -+ return sess; -+} - - int - is_session (session * sess) -@@ -362,6 +478,9 @@ session_new (server *serv, char *from, i - - sess_list = g_slist_prepend (sess_list, sess); - -+ sess->lastact_elem = NULL; -+ sess->lastact_idx = LACT_NONE; -+ - fe_new_window (sess, focus); - - return sess; -@@ -533,6 +652,16 @@ session_free (session *killsess) - current_sess = sess_list->data; - } - -+ if (killsess->lastact_elem) -+ { -+ if (killsess->lastact_idx != LACT_NONE) -+ sess_list_by_lastact[killsess->lastact_idx] = g_list_delete_link( -+ sess_list_by_lastact[killsess->lastact_idx], -+ killsess->lastact_elem); -+ else -+ g_list_free_1(killsess->lastact_elem); -+ } -+ - free (killsess); - - if (!sess_list && !in_xchat_exit) -diff -paur xchat2.orig/src/common/xchat.h xchat2/src/common/xchat.h ---- xchat2.orig/src/common/xchat.h 2008-07-20 17:31:44.901467675 +0200 -+++ xchat2/src/common/xchat.h 2008-07-20 17:33:28.240467970 +0200 -@@ -320,6 +320,15 @@ struct xchatprefs - #define SET_ON 1 - #define SET_DEFAULT 2 /* use global setting */ - -+/* Priorities in the "interesting sessions" priority queue -+ * (see xchat.c:sess_list_by_lastact) */ -+#define LACT_NONE -1 /* no queues */ -+#define LACT_QUERY_HI 0 /* query with hilight */ -+#define LACT_QUERY 1 /* query with messages */ -+#define LACT_CHAN_HI 2 /* channel with hilight */ -+#define LACT_CHAN 3 /* channel with messages */ -+#define LACT_CHAN_DATA 4 /* channel with other data */ -+ - typedef struct session - { - /* Per-Channel Alerts */ -@@ -369,6 +378,10 @@ typedef struct session - - int type; /* SESS_* */ - -+ GList *lastact_elem; /* our GList element in sess_list_by_lastact */ -+ int lastact_idx; /* the sess_list_by_lastact[] index of the list we're in. -+ * For valid values, see defines of LACT_*. */ -+ - int new_data:1; /* new data avail? (purple tab) */ - int nick_said:1; /* your nick mentioned? (blue tab) */ - int msg_said:1; /* new msg available? (red tab) */ -diff -paur xchat2.orig/src/common/xchatc.h xchat2/src/common/xchatc.h ---- xchat2.orig/src/common/xchatc.h 2008-07-20 17:31:44.901467675 +0200 -+++ xchat2/src/common/xchatc.h 2008-07-20 11:43:36.673967630 +0200 -@@ -25,10 +25,13 @@ extern GSList *ignore_list; - extern GSList *usermenu_list; - extern GSList *urlhandler_list; - extern GSList *tabmenu_list; -+extern GList *sess_list_by_lastact[]; - - session * find_channel (server *serv, char *chan); - session * find_dialog (server *serv, char *nick); - session * new_ircwindow (server *serv, char *name, int type, int focus); -+void lastact_update (session * sess); -+session * lastact_getfirst (int (*filter) (session *sess)); - int is_session (session * sess); - void session_free (session *killsess); - void lag_check (void); -diff -paur xchat2.orig/src/fe-gtk/fe-gtk.c xchat2/src/fe-gtk/fe-gtk.c ---- xchat2.orig/src/fe-gtk/fe-gtk.c 2008-07-20 17:31:44.958466232 +0200 -+++ xchat2/src/fe-gtk/fe-gtk.c 2008-07-19 19:58:57.431961788 +0200 -@@ -603,6 +603,7 @@ fe_print_text (struct session *sess, cha - sess->gui->is_tab && !sess->nick_said && stamp == 0) - { - sess->new_data = TRUE; -+ lastact_update(sess); - if (sess->msg_said) - fe_set_tab_color (sess, 2); - else -diff -paur xchat2.orig/src/fe-gtk/fkeys.c xchat2/src/fe-gtk/fkeys.c ---- xchat2.orig/src/fe-gtk/fkeys.c 2008-07-20 17:31:44.960465847 +0200 -+++ xchat2/src/fe-gtk/fkeys.c 2008-07-20 12:20:50.186930065 +0200 -@@ -158,7 +158,7 @@ static const struct key_action key_actio - {key_action_handle_command, "Run Command", - N_("The \002Run Command\002 action runs the data in Data 1 as if it has been typed into the entry box where you pressed the key sequence. Thus it can contain text (which will be sent to the channel/person), commands or user commands. When run all \002\\n\002 characters in Data 1 are used to deliminate seperate commands so it is possible to run more than one command. If you want a \002\\\002 in the actual text run then enter \002\\\\\002")}, - {key_action_page_switch, "Change Page", -- N_("The \002Change Page\002 command switches between pages in the notebook. Set Data 1 to the page you want to switch to. If Data 2 is set to anything then the switch will be relative to the current position")}, -+ N_("The \002Change Page\002 command switches between pages in the notebook. Set Data 1 to the page you want to switch to. If Data 2 is set to anything then the switch will be relative to the current position. Set Data 1 to auto to switch to the page with the most recent and important activity (queries first, then channels with hilight, channels with dialogue, channels with other data)")}, - {key_action_insert, "Insert in Buffer", - N_("The \002Insert in Buffer\002 command will insert the contents of Data 1 into the entry where the key sequence was pressed at the current cursor position")}, - {key_action_scroll_page, "Scroll Page", -@@ -402,6 +402,7 @@ key_load_defaults () - "A\n3\nChange Page\nD1:3\nD2!\n\n"\ - "A\n2\nChange Page\nD1:2\nD2!\n\n"\ - "A\n1\nChange Page\nD1:1\nD2!\n\n"\ -+ "A\ngrave\nChange Page\nD1:auto\nD2!\n\n"\ - "C\no\nInsert in Buffer\nD1:\nD2!\n\n"\ - "C\nb\nInsert in Buffer\nD1:\nD2!\n\n"\ - "C\nk\nInsert in Buffer\nD1:\nD2!\n\n"\ -@@ -1196,6 +1197,20 @@ key_action_handle_command (GtkWidget * w - return 0; - } - -+/* -+ * Check if the given session is inside the main window. This predicate -+ * is passed to lastact_pop as a way to filter out detached sessions. -+ * XXX: Consider moving this in a different file? -+ */ -+static int -+session_check_is_tab(session *sess) -+{ -+ if (!sess || !sess->gui) -+ return FALSE; -+ -+ return (sess->gui->is_tab); -+} -+ - static int - key_action_page_switch (GtkWidget * wid, GdkEventKey * evt, char *d1, - char *d2, struct session *sess) -@@ -1209,6 +1224,30 @@ key_action_page_switch (GtkWidget * wid, - if (!len) - return 1; - -+ if (strcasecmp(d1, "auto") == 0) -+ { -+ /* Auto switch makes no sense in detached sessions */ -+ if (!sess->gui->is_tab) -+ return 1; -+ -+ /* Obtain a session with recent activity */ -+ session *newsess = lastact_getfirst(session_check_is_tab); -+ -+ if (newsess) -+ { -+ /* -+ * Only sessions in the current window should be considered (i.e. -+ * we don't want to move the focus on a different window). This -+ * call could, in theory, do this, but we checked before that -+ * newsess->gui->is_tab and sess->gui->is_tab. -+ */ -+ mg_bring_tofront_sess(newsess); -+ return 0; -+ } -+ else -+ return 1; -+ } -+ - for (i = 0; i < len; i++) - { - if (d1[i] < '0' || d1[i] > '9') -diff -paur xchat2.orig/src/fe-gtk/maingui.c xchat2/src/fe-gtk/maingui.c ---- xchat2.orig/src/fe-gtk/maingui.c 2008-07-20 17:31:44.964469466 +0200 -+++ xchat2/src/fe-gtk/maingui.c 2008-07-19 19:58:58.255909127 +0200 -@@ -359,6 +359,7 @@ fe_set_tab_color (struct session *sess, - - break; - } -+ lastact_update(sess); - } - } - -@@ -643,6 +644,7 @@ mg_focus (session *sess) - sess->nick_said = FALSE; - sess->msg_said = FALSE; - sess->new_data = FALSE; -+ lastact_update(sess); - /* when called via mg_changui_new, is_tab might be true, but - sess->res->tab is still NULL. */ - if (sess->res->tab) diff --git a/xchat-2.8.6-default-utf8.patch b/xchat-2.8.6-default-utf8.patch deleted file mode 100644 index 358a438..0000000 --- a/xchat-2.8.6-default-utf8.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff -ur xchat-2.8.6/src/common/servlist.c xchat-2.8.6-default-utf8/src/common/servlist.c ---- xchat-2.8.6/src/common/servlist.c 2008-04-01 10:22:34.000000000 +0200 -+++ xchat-2.8.6-default-utf8/src/common/servlist.c 2008-06-15 14:43:35.000000000 +0200 -@@ -892,7 +892,7 @@ - if (def[i].network) - { - net = servlist_net_add (def[i].network, def[i].host, FALSE); -- net->encoding = strdup ("IRC (Latin/Unicode Hybrid)"); -+ net->encoding = strdup ("UTF-8 (Unicode)"); - if (def[i].channel) - net->autojoin = strdup (def[i].channel); - if (def[i].charset) -diff -ur xchat-2.8.6/src/fe-gtk/servlistgui.c xchat-2.8.6-default-utf8/src/fe-gtk/servlistgui.c ---- xchat-2.8.6/src/fe-gtk/servlistgui.c 2008-06-08 10:04:48.000000000 +0200 -+++ xchat-2.8.6-default-utf8/src/fe-gtk/servlistgui.c 2008-06-15 14:36:03.000000000 +0200 -@@ -267,7 +267,7 @@ - ircnet *net; - - net = servlist_net_add (_("New Network"), "", TRUE); -- net->encoding = strdup ("IRC (Latin/Unicode Hybrid)"); -+ net->encoding = strdup ("UTF-8 (Unicode)"); - servlist_server_add (net, "newserver/6667"); - - store = (GtkListStore *)gtk_tree_view_get_model (treeview); diff --git a/xchat-2.8.6-freenode-ports.patch b/xchat-2.8.6-freenode-ports.patch deleted file mode 100644 index 3e336fd..0000000 --- a/xchat-2.8.6-freenode-ports.patch +++ /dev/null @@ -1,35 +0,0 @@ -From bc98c28e891408145bed2b18d3c02adbadadde31 Mon Sep 17 00:00:00 2001 -From: Debarshi Ray -Date: Sat, 30 Jan 2010 13:05:21 +0200 -Subject: [PATCH] Added port numbers for Freenode - -http://freenode.net/irc_servers.shtml ---- - src/common/servlist.c | 11 ++++++++++- - 1 files changed, 10 insertions(+), 1 deletions(-) - -diff --git a/src/common/servlist.c b/src/common/servlist.c -index c6839e0..3082966 100644 ---- a/src/common/servlist.c -+++ b/src/common/servlist.c -@@ -207,7 +207,16 @@ static const struct defaultserver def[] = - {0, "irc.vendetta.com"}, - - {"FreeNode", 0}, -- {0, "irc.freenode.net"}, -+ {0, "irc.freenode.net/6665"}, -+ {0, "irc.freenode.net/6666"}, -+ {0, "irc.freenode.net/6667"}, -+ {0, "irc.freenode.net/8000"}, -+ {0, "irc.freenode.net/8001"}, -+ {0, "irc.freenode.net/8002"}, -+#ifdef USE_OPENSSL -+ {0, "irc.freenode.net/+7000"}, -+ {0, "irc.freenode.net/+7070"}, -+#endif - - /* {"Freeworld", 0}, - {0, "kabel.freeworld.nu"}, --- -1.6.6 - diff --git a/xchat-2.8.8-desktop-file-name.patch b/xchat-2.8.8-desktop-file-name.patch deleted file mode 100644 index 2d6044a..0000000 --- a/xchat-2.8.8-desktop-file-name.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff -urNp xchat-2.8.8.orig/xchat.desktop xchat-2.8.8/xchat.desktop ---- xchat-2.8.8.orig/xchat.desktop 2013-06-10 14:01:07.408432973 +0200 -+++ xchat-2.8.8/xchat.desktop 2013-06-10 14:12:56.044209785 +0200 -@@ -1,7 +1,8 @@ - [Desktop Entry] - Encoding=UTF-8 --Name=XChat IRC -+Name=XChat - Name[zh_TW]=網路清談 -+GenericName=IRC Client - Comment[de]=IRC-Client - Comment[es]=Aplicación de IRC - Comment[fi]=IRC-sovellus diff --git a/xchat-2.8.8-glib.patch b/xchat-2.8.8-glib.patch deleted file mode 100644 index 0012ce5..0000000 --- a/xchat-2.8.8-glib.patch +++ /dev/null @@ -1,61 +0,0 @@ ---- src/common/text.c.orig 2012-02-25 11:05:23.890274334 -0600 -+++ src/common/text.c 2012-02-25 11:05:39.006195489 -0600 -@@ -28,7 +28,7 @@ - #include - - #include "xchat.h" --#include -+#include - #include "cfgfiles.h" - #include "chanopt.h" - #include "plugin.h" ---- src/common/servlist.c.orig 2012-02-25 11:04:30.601501605 -0600 -+++ src/common/servlist.c 2012-02-25 11:04:42.964072823 -0600 -@@ -24,7 +24,7 @@ - #include - - #include "xchat.h" --#include -+#include - - #include "cfgfiles.h" - #include "fe.h" ---- src/common/dbus/dbus-client.c.orig 2012-02-25 10:59:23.948527589 -0600 -+++ src/common/dbus/dbus-client.c 2012-02-25 11:00:40.082203787 -0600 -@@ -53,11 +53,6 @@ - GError *error = NULL; - char *command = NULL; - -- /* GnomeVFS >=2.15 uses D-Bus and threads, so threads should be -- * initialised before opening for the first time a D-Bus connection */ -- if (!g_thread_supported ()) { -- g_thread_init (NULL); -- } - dbus_g_thread_init (); - - /* if there is nothing to do, return now. */ ---- src/common/xchat.h.orig 2012-02-25 11:29:33.400499630 -0600 -+++ src/common/xchat.h 2012-02-25 11:29:51.774834912 -0600 -@@ -1,10 +1,6 @@ - #include "../../config.h" - --#include --#include --#include --#include --#include -+#include - #include /* need time_t */ - - #ifndef XCHAT_H ---- src/common/util.c.orig 2012-02-25 11:38:29.404622998 -0600 -+++ src/common/util.c 2012-02-25 11:38:51.904482615 -0600 -@@ -39,7 +39,7 @@ - #include - #include "xchat.h" - #include "xchatc.h" --#include -+#include - #include - #include "util.h" - #include "../../config.h" diff --git a/xchat-2.8.8-hires-icons.patch b/xchat-2.8.8-hires-icons.patch deleted file mode 100644 index 2baba84..0000000 --- a/xchat-2.8.8-hires-icons.patch +++ /dev/null @@ -1,85 +0,0 @@ -diff -urNp xchat-2.8.8.orig/configure.in xchat-2.8.8/configure.in ---- xchat-2.8.8.orig/configure.in 2013-06-07 17:33:41.600172433 +0200 -+++ xchat-2.8.8/configure.in 2013-06-07 17:39:02.672190284 +0200 -@@ -792,6 +792,7 @@ plugins/python/Makefile - plugins/perl/Makefile - plugins/tcl/Makefile - intl/Makefile -+icons/Makefile - po/Makefile.in - ]) - -diff -urNp xchat-2.8.8.orig/icons/Makefile.am xchat-2.8.8/icons/Makefile.am ---- xchat-2.8.8.orig/icons/Makefile.am 1970-01-01 01:00:00.000000000 +0100 -+++ xchat-2.8.8/icons/Makefile.am 2013-06-07 17:35:09.053456817 +0200 -@@ -0,0 +1,59 @@ -+public_icon_themes = \ -+ hicolor \ -+ $(NULL) -+ -+public_icons = \ -+ hicolor_apps_16x16_xchat.png \ -+ hicolor_apps_22x22_xchat.png \ -+ hicolor_apps_24x24_xchat.png \ -+ hicolor_apps_32x32_xchat.png \ -+ hicolor_apps_48x48_xchat.png \ -+ hicolor_apps_256x256_xchat.png \ -+ $(NULL) -+ -+noinst_DATA = \ -+ xchat.svg \ -+ $(NULL) -+ -+EXTRA_DIST = \ -+ $(public_icons) \ -+ $(noinst_DATA) \ -+ $(NULL) -+ -+gtk_update_icon_cache = gtk-update-icon-cache -f -t -+ -+update-icon-cache: -+ @-if test -z "$(DESTDIR)"; then \ -+ echo "Updating Gtk icon cache."; \ -+ for theme in $(public_icon_themes); do \ -+ $(gtk_update_icon_cache) $(datadir)/icons/$$theme; \ -+ done; \ -+ else \ -+ echo "*** Icon cache not updated. After (un)install, run this:"; \ -+ for theme in $(public_icon_themes); do \ -+ echo "*** $(gtk_update_icon_cache) $(datadir)/icons/$$theme"; \ -+ done; \ -+ fi -+ -+install-icons: -+ for icon in $(public_icons); do \ -+ THEME=`echo $$icon | cut -d_ -f1`; \ -+ CONTEXT=`echo $$icon | cut -d_ -f2`; \ -+ SIZE=`echo $$icon | cut -d_ -f3`; \ -+ ICONFILE=`echo $$icon | cut -d_ -f4`; \ -+ mkdir -p $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT; \ -+ $(INSTALL_DATA) $(srcdir)/$$icon $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT/$$ICONFILE; \ -+ done -+ -+uninstall-icons: -+ -for icon in $(public_icons); do \ -+ THEME=`echo $$icon | cut -d_ -f1`; \ -+ CONTEXT=`echo $$icon | cut -d_ -f2`; \ -+ SIZE=`echo $$icon | cut -d_ -f3`; \ -+ ICONFILE=`echo $$icon | cut -d_ -f4`; \ -+ rm -f $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT/$$ICONFILE; \ -+ done -+ -+install-data-local: install-icons update-icon-cache -+ -+uninstall-local: uninstall-icons update-icon-cache -diff -urNp xchat-2.8.8.orig/Makefile.am xchat-2.8.8/Makefile.am ---- xchat-2.8.8.orig/Makefile.am 2013-06-07 17:33:41.600172433 +0200 -+++ xchat-2.8.8/Makefile.am 2013-06-10 13:25:06.316773350 +0200 -@@ -1,6 +1,6 @@ - ## Process this file with automake to produce Makefile.in - --SUBDIRS = po intl src plugins -+SUBDIRS = po icons intl src plugins - - EXTRA_DIST = autogen.sh HACKING INSTALL.w32 faq.html xchat.png \ - xchat.desktop xchat.spec config.h.w32 xchat.ico diff --git a/xchat-2.8.8-libnotify07.patch b/xchat-2.8.8-libnotify07.patch deleted file mode 100644 index 2a6dce9..0000000 --- a/xchat-2.8.8-libnotify07.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff -up xchat-2.8.8/src/fe-gtk/plugin-tray.c.libnotify07 xchat-2.8.8/src/fe-gtk/plugin-tray.c ---- xchat-2.8.8/src/fe-gtk/plugin-tray.c.libnotify07 2010-11-15 17:32:15.708325783 -0500 -+++ xchat-2.8.8/src/fe-gtk/plugin-tray.c 2010-11-15 18:05:17.322141789 -0500 -@@ -125,8 +125,9 @@ static void *nn_mod = NULL; - /* prototypes */ - static gboolean (*nn_init) (char *); - static void (*nn_uninit) (void); --static void *(*nn_new_with_status_icon) (const gchar *summary, const gchar *message, const gchar *icon, GtkStatusIcon *status_icon); --static void *(*nn_new) (const gchar *summary, const gchar *message, const gchar *icon, GtkWidget *attach); -+/* recent versions of libnotify don't take the fourth GtkWidget argument, but passing an -+ * extra NULL argument will be fine */ -+static void *(*nn_new) (const gchar *summary, const gchar *message, const gchar *icon, gpointer dummy); - static gboolean (*nn_show) (void *noti, GError **error); - static void (*nn_set_timeout) (void *noti, gint timeout); - -@@ -160,8 +161,6 @@ libnotify_notify_new (const char *title, - goto bad; - if (!g_module_symbol (nn_mod, "notify_uninit", (gpointer)&nn_uninit)) - goto bad; -- if (!g_module_symbol (nn_mod, "notify_notification_new_with_status_icon", (gpointer)&nn_new_with_status_icon)) -- goto bad; - if (!g_module_symbol (nn_mod, "notify_notification_new", (gpointer)&nn_new)) - goto bad; - if (!g_module_symbol (nn_mod, "notify_notification_show", (gpointer)&nn_show)) diff --git a/xchat-2.8.8-link-against-libnotify.patch b/xchat-2.8.8-link-against-libnotify.patch deleted file mode 100644 index 31e6c08..0000000 --- a/xchat-2.8.8-link-against-libnotify.patch +++ /dev/null @@ -1,343 +0,0 @@ -From: Christopher Aillon -Date: Thu, 7 Apr 2011 19:34:14 -0700 -Subject: [PATCH] Link directly against libnotify - -Dynamically loading the library isn't ideal since the soname -can change silently on us. Additionally, notify-send is -shipped as part of libnotify, so we aren't actually bringing -in a new dependency. Since we'd need to patch the source and -rebuild for new sonames anyway, there's little benefit to -dynamically loading libnotify. - -Plus, this has the benefit of cleaning up the code, as well as -ensuring we'll catch any future soname changes sooner. - -https://bugzilla.redhat.com/show_bug.cgi?id=693362 -https://sourceforge.net/tracker/?func=detail&aid=3280223&group_id=239&atid=100239 ---- - configure.in | 23 +++++++ - src/fe-gtk/plugin-tray.c | 144 ++++++++++------------------------------------- - 2 files changed, 55 insertions(+), 112 deletions(-) - -diff -p -U8 xchat-2.8.8/configure.in.libnotifyso4 xchat-2.8.8/configure.in ---- xchat-2.8.8/configure.in.libnotifyso4 2010-05-29 23:01:16.000000000 -0700 -+++ xchat-2.8.8/configure.in 2011-04-07 19:27:00.448137113 -0700 -@@ -34,16 +34,17 @@ AH_VERBATIM([PREFIX],[#undef PREFIX]) - AH_VERBATIM([XCHATLIBDIR],[#undef XCHATLIBDIR]) - AH_VERBATIM([XCHATSHAREDIR],[#undef XCHATSHAREDIR]) - AH_VERBATIM([SOCKS],[#undef SOCKS]) - AH_VERBATIM([USE_MSPROXY],[#undef USE_MSPROXY]) - dnl AH_VERBATIM([USE_GNOME],[#undef USE_GNOME]) - AH_VERBATIM([USE_SHM],[#undef USE_SHM]) - AH_VERBATIM([USE_GTKSPELL],[#undef USE_GTKSPELL]) - AH_VERBATIM([USE_LIBSEXY],[#undef USE_LIBSEXY]) -+AH_VERBATIM([USE_LIBNOTIFY],[#undef USE_LIBNOTIFY]) - AH_VERBATIM([USE_IPV6],[#undef USE_IPV6]) - AH_VERBATIM([USE_MMX],[#undef USE_MMX]) - AH_VERBATIM([USE_OPENSSL],[#undef USE_OPENSSL]) - AH_VERBATIM([USE_PLUGIN],[#undef USE_PLUGIN]) - AH_VERBATIM([USE_XFT],[#undef USE_XFT]) - AH_VERBATIM([USE_XLIB],[#undef USE_XLIB]) - AH_VERBATIM([USE_SIGACTION],[#undef USE_SIGACTION]) - AH_VERBATIM([USING_FREEBSD],[#undef USING_FREEBSD]) -@@ -126,16 +127,20 @@ AC_ARG_ENABLE(tcl, - AC_ARG_ENABLE(plugin, - [ --disable-plugin disable plugin support], - plugin=$enableval, plugin=yes) - - AC_ARG_ENABLE(dbus, - [ --disable-dbus disable DBUS support], - dbus=$enableval, dbus=yes) - -+AC_ARG_ENABLE(libnotify, -+[ --disable-libnotify disable libnotify support], -+ libnotify=$enableval, libnotify=yes) -+ - AC_ARG_ENABLE(mmx, - [ --disable-mmx disable MMX assembly routines], - mmx=$enableval, mmx=yes) - - AC_ARG_ENABLE(shm, - [ --enable-shm enable use of XShm for fast tinting (default: no)], - shm=$enableval, shm=no) - -@@ -482,16 +487,32 @@ if test "x$dbus" = "xyes" ; then - - DBUS_SERVICES_DIR="$DATADIR/dbus-1/services" - AC_SUBST(DBUS_SERVICES_DIR) - AC_DEFINE_UNQUOTED(DBUS_SERVICES_DIR, "$DBUS_SERVICES_DIR", [Where services dir for DBUS is]) - fi - fi - - dnl ********************************************************************* -+dnl ** LIBNOTIFY ******************************************************** -+dnl ********************************************************************* -+ -+if test "x$libnotify" = "xyes" ; then -+ PKG_CHECK_MODULES(LIBNOTIFY, libnotify >= 0.4, [], [ -+ AC_MSG_RESULT(no) -+ libnotify=no -+ ]) -+ if test "$libnotify" != "no" ; then -+ GUI_LIBS="$GUI_LIBS $LIBNOTIFY_LIBS" -+ GUI_CFLAGS="$GUI_CFLAGS $LIBNOTIFY_CFLAGS" -+ AC_DEFINE(USE_LIBNOTIFY) -+ fi -+fi -+ -+dnl ********************************************************************* - dnl ** SPELL ************************************************************ - dnl ********************************************************************* - - if test "$spell" = "gtkspell" ; then - PKG_CHECK_MODULES(GTKSPELL, gtkspell-2.0 >= 2.0.2, [], [ - AC_MSG_RESULT(no) - spell=no - ]) -@@ -519,16 +540,17 @@ if test "$spell" = "static" ; then - fi - - dnl ********************************************************************* - dnl ** CONDITIONALS ***************************************************** - dnl ********************************************************************* - - AM_CONDITIONAL(USE_OPENSSL, test "x$openssl" = "xyes") - AM_CONDITIONAL(USE_LIBSEXY, test "x$spell" = "xstatic") -+AM_CONDITIONAL(USE_LIBNOTIFY, test "x$libnotify" = "xyes") - AM_CONDITIONAL(DO_TEXT, test "x$textfe" = "xyes") - AM_CONDITIONAL(DO_GTK, test "x$gtkfe" = "xyes") - AM_CONDITIONAL(DO_PERL, test "x$perl" = "xyes") - AM_CONDITIONAL(DO_PYTHON, test "x$python" = "xyes") - AM_CONDITIONAL(DO_TCL, test "x$tcl" = "xyes") - AM_CONDITIONAL(DO_PLUGIN, test "x$plugin" = "xyes") - AM_CONDITIONAL(USE_DBUS, test "x$dbus" = "xyes") - AM_CONDITIONAL(DO_GCONF, test "x$GCONFTOOL" != "xno") -@@ -807,16 +829,17 @@ echo mmx tinting ......... : $mmx\ spell - echo XShm tinting ........ : $shm\ plugin interface ...... : $plugin - if test "$xft" = no; then - echo text backend ........ : pango\ nls/gettext ........... : $USE_NLS - else - echo text backend ........ : xft\ nls/gettext ........... : $USE_NLS - fi - echo openssl support ..... : $openssl\ ipv6 support .......... : $ipv6 - echo dbus support ........ : $dbus\ msproxy ntlm \(ISA\) .... : $have_ntlm -+echo libnotify support ... : $libnotify - echo - echo The binary will be installed in $prefix/bin - echo - - if test "$gtkfe" = no; then - echo Warning: The GTK \(GUI\) frontend will not be built. - echo - fi -diff -p -U8 xchat-2.8.8/src/fe-gtk/plugin-tray.c.libnotifyso4 xchat-2.8.8/src/fe-gtk/plugin-tray.c ---- xchat-2.8.8/src/fe-gtk/plugin-tray.c.libnotifyso4 2011-04-07 17:57:27.524307905 -0700 -+++ xchat-2.8.8/src/fe-gtk/plugin-tray.c 2011-04-07 19:18:33.429475719 -0700 -@@ -10,17 +10,27 @@ - #include "../common/fe.h" - #include "../common/util.h" - #include "fe-gtk.h" - #include "pixmaps.h" - #include "maingui.h" - #include "menu.h" - #include - --#define LIBNOTIFY -+#ifdef USE_LIBNOTIFY -+#include -+#ifndef NOTIFY_CHECK_VERSION -+#define NOTIFY_CHECK_VERSION(x,y,z) 0 -+#endif -+#if NOTIFY_CHECK_VERSION(0,7,0) -+#define XC_NOTIFY_NEW(a,b,c,d) notify_notification_new(a,b,c) -+#else -+#define XC_NOTIFY_NEW(a,b,c,d) notify_notification_new(a,b,c,d) -+#endif -+#endif - - typedef enum /* current icon status */ - { - TS_NONE, - TS_MESSAGE, - TS_HIGHLIGHT, - TS_FILEOFFER, - TS_CUSTOM /* plugin */ -@@ -112,90 +122,16 @@ tray_count_networks (void) - - void - fe_tray_set_tooltip (const char *text) - { - if (sticon) - gtk_status_icon_set_tooltip (sticon, text); - } - --#ifdef LIBNOTIFY -- --/* dynamic access to libnotify.so */ -- --static void *nn_mod = NULL; --/* prototypes */ --static gboolean (*nn_init) (char *); --static void (*nn_uninit) (void); --/* recent versions of libnotify don't take the fourth GtkWidget argument, but passing an -- * extra NULL argument will be fine */ --static void *(*nn_new) (const gchar *summary, const gchar *message, const gchar *icon, gpointer dummy); --static gboolean (*nn_show) (void *noti, GError **error); --static void (*nn_set_timeout) (void *noti, gint timeout); -- --static void --libnotify_cleanup (void) --{ -- if (nn_mod) -- { -- nn_uninit (); -- g_module_close (nn_mod); -- nn_mod = NULL; -- } --} -- --static gboolean --libnotify_notify_new (const char *title, const char *text, GtkStatusIcon *icon) --{ -- void *noti; -- -- if (!nn_mod) -- { -- nn_mod = g_module_open ("libnotify", G_MODULE_BIND_LAZY); -- if (!nn_mod) -- { -- nn_mod = g_module_open ("libnotify.so.1", G_MODULE_BIND_LAZY); -- if (!nn_mod) -- return FALSE; -- } -- -- if (!g_module_symbol (nn_mod, "notify_init", (gpointer)&nn_init)) -- goto bad; -- if (!g_module_symbol (nn_mod, "notify_uninit", (gpointer)&nn_uninit)) -- goto bad; -- if (!g_module_symbol (nn_mod, "notify_notification_new", (gpointer)&nn_new)) -- goto bad; -- if (!g_module_symbol (nn_mod, "notify_notification_show", (gpointer)&nn_show)) -- goto bad; -- if (!g_module_symbol (nn_mod, "notify_notification_set_timeout", (gpointer)&nn_set_timeout)) -- goto bad; -- if (!nn_init (PACKAGE_NAME)) -- goto bad; -- } -- -- text = strip_color (text, -1, STRIP_ALL|STRIP_ESCMARKUP); -- title = strip_color (title, -1, STRIP_ALL); -- noti = nn_new (title, text, XCHATSHAREDIR"/pixmaps/xchat.png", NULL); -- g_free ((char *)title); -- g_free ((char *)text); -- -- nn_set_timeout (noti, prefs.input_balloon_time*1000); -- nn_show (noti, NULL); -- g_object_unref (G_OBJECT (noti)); -- -- return TRUE; -- --bad: -- g_module_close (nn_mod); -- nn_mod = NULL; -- return FALSE; --} -- --#endif -- - void - fe_tray_set_balloon (const char *title, const char *text) - { - #ifndef WIN32 - const char *argv[8]; - const char *path; - char time[16]; - WinStatus ws; -@@ -208,52 +144,36 @@ fe_tray_set_balloon (const char *title, - /* bit 1 of flags means "no balloons unless hidden/iconified" */ - if (ws != WS_HIDDEN && (prefs.gui_tray_flags & 2)) - return; - - /* FIXME: this should close the current balloon */ - if (!text) - return; - --#ifdef LIBNOTIFY -- /* try it via libnotify.so */ -- if (libnotify_notify_new (title, text, sticon)) -- return; /* success */ --#endif -+#ifdef USE_LIBNOTIFY -+ NotifyNotification *notification; -+ char *notify_text, *notify_title; - -- /* try it the crude way */ -- path = g_find_program_in_path ("notify-send"); -- if (path) -- { -- sprintf(time, "%d000",prefs.input_balloon_time); -- argv[0] = path; -- argv[1] = "-i"; -- argv[2] = "gtk-dialog-info"; -- if (access (XCHATSHAREDIR"/pixmaps/xchat.png", R_OK) == 0) -- argv[2] = XCHATSHAREDIR"/pixmaps/xchat.png"; -- argv[3] = "-t"; -- argv[4] = time; -- argv[5] = title; -- text = strip_color (text, -1, STRIP_ALL|STRIP_ESCMARKUP); -- argv[6] = text; -- argv[7] = NULL; -- xchat_execv (argv); -- g_free ((char *)path); -- g_free ((char *)text); -- } -- else -- { -- /* show this error only once */ -- static unsigned char said_it = FALSE; -- if (!said_it) -- { -- said_it = TRUE; -- fe_message (_("Cannot find 'notify-send' to open balloon alerts.\nPlease install libnotify."), FE_MSG_ERROR); -- } -- } -+ if (!notify_is_initted()) -+ notify_init(PACKAGE_NAME); -+ -+ notify_text = strip_color (text, -1, STRIP_ALL|STRIP_ESCMARKUP); -+ notify_title = strip_color (title, -1, STRIP_ALL); -+ -+ notification = XC_NOTIFY_NEW (notify_title, notify_text, XCHATSHAREDIR"/pixmaps/xchat.png", NULL); -+ -+ g_free ((char *)notify_title); -+ g_free ((char *)notify_text); -+ -+ notify_notification_set_timeout (notification, prefs.input_balloon_time*1000); -+ notify_notification_show (notification, NULL); -+ -+ g_object_unref (notification); -+#endif - #endif - } - - static void - tray_set_balloonf (const char *text, const char *format, ...) - { - va_list args; - char *buf; -@@ -840,13 +760,13 @@ tray_plugin_init (xchat_plugin *plugin_h - return 1; /* return 1 for success */ - } - - int - tray_plugin_deinit (xchat_plugin *plugin_handle) - { - #ifdef WIN32 - tray_cleanup (); --#elif defined(LIBNOTIFY) -- libnotify_cleanup (); -+#elif defined(USE_LIBNOTIFY) -+ notify_uninit (); - #endif - return 1; - } diff --git a/xchat-2.8.8-notifications-and-tray.patch b/xchat-2.8.8-notifications-and-tray.patch deleted file mode 100644 index 0803ce2..0000000 --- a/xchat-2.8.8-notifications-and-tray.patch +++ /dev/null @@ -1,30 +0,0 @@ -diff -urNp xchat-2.8.8/src/common/cfgfiles.c xchat-2.8.8-notifications-and-tray/src/common/cfgfiles.c ---- xchat-2.8.8/src/common/cfgfiles.c 2009-08-16 11:40:16.000000000 +0200 -+++ xchat-2.8.8-notifications-and-tray/src/common/cfgfiles.c 2012-11-27 15:34:13.080403744 +0100 -@@ -670,11 +670,13 @@ load_config (void) - prefs.autoopendccchatwindow = 1; - prefs.userhost = 1; - prefs.gui_url_mod = 4; /* ctrl */ -- prefs.gui_tray = 1; -+ prefs.gui_tray = 0; - prefs.gui_pane_left_size = 100; - prefs.gui_pane_right_size = 100; - prefs.mainwindow_save = 1; - prefs.bantype = 2; -+ prefs.input_balloon_hilight = 1; -+ prefs.input_balloon_priv = 1; - prefs.input_balloon_time = 20; - prefs.input_flash_priv = prefs.input_flash_hilight = 1; - prefs.input_tray_priv = prefs.input_tray_hilight = 1; -diff -urNp xchat-2.8.8/src/fe-gtk/maingui.c xchat-2.8.8-notifications-and-tray/src/fe-gtk/maingui.c ---- xchat-2.8.8/src/fe-gtk/maingui.c 2010-05-16 05:15:55.000000000 +0200 -+++ xchat-2.8.8-notifications-and-tray/src/fe-gtk/maingui.c 2012-11-27 16:05:27.609518192 +0100 -@@ -3107,7 +3107,7 @@ mg_tabwindow_de_cb (GtkWidget *widget, G - list = list->next; - } - -- mg_open_quit_dialog (TRUE); -+ mg_open_quit_dialog (FALSE); - return TRUE; - } - diff --git a/xchat-2.8.8-openssl-1.1.0.patch b/xchat-2.8.8-openssl-1.1.0.patch deleted file mode 100644 index 5fd2c0f..0000000 --- a/xchat-2.8.8-openssl-1.1.0.patch +++ /dev/null @@ -1,89 +0,0 @@ -diff -urNp xchat-2.8.8.orig/src/common/server.c xchat-2.8.8/src/common/server.c ---- xchat-2.8.8.orig/src/common/server.c 2010-05-30 04:14:41.000000000 +0200 -+++ xchat-2.8.8/src/common/server.c 2017-06-26 15:40:02.989120175 +0200 -@@ -593,14 +593,16 @@ ssl_cb_info (SSL * s, int where, int ret - static int - ssl_cb_verify (int ok, X509_STORE_CTX * ctx) - { -+ X509 *current_cert; - char subject[256]; - char issuer[256]; - char buf[512]; - - -- X509_NAME_oneline (X509_get_subject_name (ctx->current_cert), subject, -+ current_cert = X509_STORE_CTX_get_current_cert (ctx); -+ X509_NAME_oneline (X509_get_subject_name (current_cert), subject, - sizeof (subject)); -- X509_NAME_oneline (X509_get_issuer_name (ctx->current_cert), issuer, -+ X509_NAME_oneline (X509_get_issuer_name (current_cert), issuer, - sizeof (issuer)); - - snprintf (buf, sizeof (buf), "* Subject: %s", subject); -@@ -751,7 +753,12 @@ ssl_do_connect (server * serv) - return (0); /* remove it (0) */ - } else - { -- if (serv->ssl->session && serv->ssl->session->time + SSLTMOUT < time (NULL)) -+ SSL_SESSION *session; -+ long session_time; -+ -+ session = SSL_get_session (serv->ssl); -+ session_time = SSL_SESSION_get_time (session); -+ if (session && session_time + SSLTMOUT < time (NULL)) - { - snprintf (buf, sizeof (buf), "SSL handshake timed out"); - EMIT_SIGNAL (XP_TE_CONNFAIL, serv->server_session, buf, NULL, -diff -urNp xchat-2.8.8.orig/src/common/ssl.c xchat-2.8.8/src/common/ssl.c ---- xchat-2.8.8.orig/src/common/ssl.c 2017-06-26 15:43:41.924066669 +0200 -+++ xchat-2.8.8/src/common/ssl.c 2017-06-26 15:54:09.769849268 +0200 -@@ -136,6 +136,8 @@ int - _SSL_get_cert_info (struct cert_info *cert_info, SSL * ssl) - { - X509 *peer_cert; -+ X509_PUBKEY *peer_pub_key; -+ ASN1_OBJECT *algorithm; - EVP_PKEY *peer_pkey; - /* EVP_PKEY *ca_pkey; */ - /* EVP_PKEY *tmp_pkey; */ -@@ -155,8 +157,10 @@ _SSL_get_cert_info (struct cert_info *ce - broke_oneline (cert_info->subject, cert_info->subject_word); - broke_oneline (cert_info->issuer, cert_info->issuer_word); - -- alg = OBJ_obj2nid (peer_cert->cert_info->key->algor->algorithm); -- sign_alg = OBJ_obj2nid (peer_cert->sig_alg->algorithm); -+ peer_pub_key = X509_get_X509_PUBKEY (peer_cert); -+ X509_PUBKEY_get0_param (&algorithm, NULL, NULL, NULL, peer_pub_key); -+ alg = OBJ_obj2nid (algorithm); -+ sign_alg = X509_get_signature_type (peer_cert); - ASN1_TIME_snprintf (notBefore, sizeof (notBefore), - X509_get_notBefore (peer_cert)); - ASN1_TIME_snprintf (notAfter, sizeof (notAfter), -@@ -199,7 +203,7 @@ _SSL_get_cert_info (struct cert_info *ce - struct chiper_info * - _SSL_get_cipher_info (SSL * ssl) - { -- SSL_CIPHER *c; -+ const SSL_CIPHER *c; - - - c = SSL_get_current_cipher (ssl); -@@ -274,6 +278,7 @@ SSL * - _SSL_socket (SSL_CTX *ctx, int sd) - { - SSL *ssl; -+ SSL_METHOD *method; - - - if (!(ssl = SSL_new (ctx))) -@@ -281,7 +286,9 @@ _SSL_socket (SSL_CTX *ctx, int sd) - __SSL_critical_error ("SSL_new"); - - SSL_set_fd (ssl, sd); -- if (ctx->method == SSLv23_client_method()) -+ -+ method = SSL_CTX_get_ssl_method (ctx); -+ if (method == SSLv23_client_method()) - SSL_set_connect_state (ssl); - else - SSL_set_accept_state(ssl); diff --git a/xchat-2.8.8-xdg-dirs.patch b/xchat-2.8.8-xdg-dirs.patch deleted file mode 100644 index 5530085..0000000 --- a/xchat-2.8.8-xdg-dirs.patch +++ /dev/null @@ -1,1224 +0,0 @@ -diff -urNp xchat-2.8.8.orig/src/common/cfgfiles.c xchat-2.8.8/src/common/cfgfiles.c ---- xchat-2.8.8.orig/src/common/cfgfiles.c 2013-06-10 14:01:07.402432963 +0200 -+++ xchat-2.8.8/src/common/cfgfiles.c 2013-06-10 14:27:09.668464169 +0200 -@@ -1,3 +1,4 @@ -+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - /* X-Chat - * Copyright (C) 1998 Peter Zelezny. - * -@@ -34,7 +35,8 @@ - #ifdef WIN32 - #define XCHAT_DIR "X-Chat 2" - #else --#define XCHAT_DIR ".xchat2" -+#define XCHAT_DIR "xchat2" -+#define OLD_XCHAT_DIR ".xchat2" - #endif - #define DEF_FONT "Monospace 9" - -@@ -318,17 +320,68 @@ get_xdir_fs (void) - return xdir_fs; - } - -+void -+maybe_migrate_xdg_config (void) -+{ -+} -+ - #else - - char * - get_xdir_fs (void) - { - if (!xdir_fs) -- xdir_fs = g_strdup_printf ("%s/" XCHAT_DIR, g_get_home_dir ()); -+ xdir_fs = g_strdup_printf ("%s/" XCHAT_DIR, g_get_user_config_dir ()); - - return xdir_fs; - } - -+void -+maybe_migrate_xdg_config (void) -+{ -+ char *old_dir; -+ char *new_dir; -+ GFile *source; -+ GFile *dest; -+ GError *error; -+ gboolean res; -+ -+ new_dir = g_strdup_printf ("%s/" XCHAT_DIR, g_get_user_config_dir ()); -+ -+ /* already migrated */ -+ if (g_file_test (new_dir, G_FILE_TEST_IS_DIR)) -+ { -+ g_free (new_dir); -+ return; -+ } -+ -+ /* nothing to migrate */ -+ old_dir = g_strdup_printf ("%s/" OLD_XCHAT_DIR, g_get_home_dir ()); -+ if (!g_file_test (old_dir, G_FILE_TEST_IS_DIR)) -+ { -+ g_free (old_dir); -+ g_free (new_dir); -+ return; -+ } -+ -+ source = g_file_new_for_path (old_dir); -+ dest = g_file_new_for_path (new_dir); -+ -+ g_message (_("Migrating data from %s to %s"), old_dir, new_dir); -+ error = NULL; -+ res = g_file_move (source, dest, G_FILE_COPY_NONE, NULL, NULL, NULL, &error); -+ if (error != NULL) -+ { -+ g_warning (_("Error migrating data: %s"), error->message); -+ g_error_free (error); -+ } -+ -+ g_free (old_dir); -+ g_free (new_dir); -+ g_object_unref (source); -+ g_object_unref (dest); -+} -+ - #endif /* !WIN32 */ - - char * -@@ -351,7 +404,7 @@ check_prefs_dir (void) - #else - if (mkdir (dir, S_IRUSR | S_IWUSR | S_IXUSR) != 0) - #endif -- fe_message (_("Cannot create ~/.xchat2"), FE_MSG_ERROR); -+ fe_message (_("Cannot create configuration directory"), FE_MSG_ERROR); - } - } - -@@ -593,6 +646,7 @@ load_config (void) - const char *username, *realname; - int res, val, i, fh; - -+ maybe_migrate_xdg_config (); - check_prefs_dir (); - username = g_get_user_name (); - if (!username) -diff -urNp xchat-2.8.8.orig/src/common/cfgfiles.c.orig xchat-2.8.8/src/common/cfgfiles.c.orig ---- xchat-2.8.8.orig/src/common/cfgfiles.c.orig 1970-01-01 01:00:00.000000000 +0100 -+++ xchat-2.8.8/src/common/cfgfiles.c.orig 2013-06-10 14:26:18.219319628 +0200 -@@ -0,0 +1,1104 @@ -+/* X-Chat -+ * Copyright (C) 1998 Peter Zelezny. -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "xchat.h" -+#include "cfgfiles.h" -+#include "util.h" -+#include "fe.h" -+#include "text.h" -+#include "xchatc.h" -+ -+#ifdef WIN32 -+#define XCHAT_DIR "X-Chat 2" -+#else -+#define XCHAT_DIR ".xchat2" -+#endif -+#define DEF_FONT "Monospace 9" -+ -+void -+list_addentry (GSList ** list, char *cmd, char *name) -+{ -+ struct popup *pop; -+ int cmd_len = 1, name_len; -+ -+ /* remove <2.8.0 stuff */ -+ if (!strcmp (cmd, "away") && !strcmp (name, "BACK")) -+ return; -+ -+ if (cmd) -+ cmd_len = strlen (cmd) + 1; -+ name_len = strlen (name) + 1; -+ -+ pop = malloc (sizeof (struct popup) + cmd_len + name_len); -+ pop->name = (char *) pop + sizeof (struct popup); -+ pop->cmd = pop->name + name_len; -+ -+ memcpy (pop->name, name, name_len); -+ if (cmd) -+ memcpy (pop->cmd, cmd, cmd_len); -+ else -+ pop->cmd[0] = 0; -+ -+ *list = g_slist_append (*list, pop); -+} -+ -+/* read it in from a buffer to our linked list */ -+ -+static void -+list_load_from_data (GSList ** list, char *ibuf, int size) -+{ -+ char cmd[384]; -+ char name[128]; -+ char *buf; -+ int pnt = 0; -+ -+ cmd[0] = 0; -+ name[0] = 0; -+ -+ while (buf_get_line (ibuf, &buf, &pnt, size)) -+ { -+ if (*buf != '#') -+ { -+ if (!strncasecmp (buf, "NAME ", 5)) -+ { -+ safe_strcpy (name, buf + 5, sizeof (name)); -+ } -+ else if (!strncasecmp (buf, "CMD ", 4)) -+ { -+ safe_strcpy (cmd, buf + 4, sizeof (cmd)); -+ if (*name) -+ { -+ list_addentry (list, cmd, name); -+ cmd[0] = 0; -+ name[0] = 0; -+ } -+ } -+ } -+ } -+} -+ -+void -+list_loadconf (char *file, GSList ** list, char *defaultconf) -+{ -+ char filebuf[256]; -+ char *ibuf; -+ int fh; -+ struct stat st; -+ -+ snprintf (filebuf, sizeof (filebuf), "%s/%s", get_xdir_fs (), file); -+ fh = open (filebuf, O_RDONLY | OFLAGS); -+ if (fh == -1) -+ { -+ if (defaultconf) -+ list_load_from_data (list, defaultconf, strlen (defaultconf)); -+ return; -+ } -+ if (fstat (fh, &st) != 0) -+ { -+ perror ("fstat"); -+ abort (); -+ } -+ -+ ibuf = malloc (st.st_size); -+ read (fh, ibuf, st.st_size); -+ close (fh); -+ -+ list_load_from_data (list, ibuf, st.st_size); -+ -+ free (ibuf); -+} -+ -+void -+list_free (GSList ** list) -+{ -+ void *data; -+ while (*list) -+ { -+ data = (void *) (*list)->data; -+ free (data); -+ *list = g_slist_remove (*list, data); -+ } -+} -+ -+int -+list_delentry (GSList ** list, char *name) -+{ -+ struct popup *pop; -+ GSList *alist = *list; -+ -+ while (alist) -+ { -+ pop = (struct popup *) alist->data; -+ if (!strcasecmp (name, pop->name)) -+ { -+ *list = g_slist_remove (*list, pop); -+ free (pop); -+ return 1; -+ } -+ alist = alist->next; -+ } -+ return 0; -+} -+ -+char * -+cfg_get_str (char *cfg, char *var, char *dest, int dest_len) -+{ -+ while (1) -+ { -+ if (!strncasecmp (var, cfg, strlen (var))) -+ { -+ char *value, t; -+ cfg += strlen (var); -+ while (*cfg == ' ') -+ cfg++; -+ if (*cfg == '=') -+ cfg++; -+ while (*cfg == ' ') -+ cfg++; -+ /*while (*cfg == ' ' || *cfg == '=') -+ cfg++; */ -+ value = cfg; -+ while (*cfg != 0 && *cfg != '\n') -+ cfg++; -+ t = *cfg; -+ *cfg = 0; -+ safe_strcpy (dest, value, dest_len); -+ *cfg = t; -+ return cfg; -+ } -+ while (*cfg != 0 && *cfg != '\n') -+ cfg++; -+ if (*cfg == 0) -+ return 0; -+ cfg++; -+ if (*cfg == 0) -+ return 0; -+ } -+} -+ -+static int -+cfg_put_str (int fh, char *var, char *value) -+{ -+ char buf[512]; -+ int len; -+ -+ snprintf (buf, sizeof buf, "%s = %s\n", var, value); -+ len = strlen (buf); -+ return (write (fh, buf, len) == len); -+} -+ -+int -+cfg_put_color (int fh, int r, int g, int b, char *var) -+{ -+ char buf[400]; -+ int len; -+ -+ snprintf (buf, sizeof buf, "%s = %04x %04x %04x\n", var, r, g, b); -+ len = strlen (buf); -+ return (write (fh, buf, len) == len); -+} -+ -+int -+cfg_put_int (int fh, int value, char *var) -+{ -+ char buf[400]; -+ int len; -+ -+ if (value == -1) -+ value = 1; -+ -+ snprintf (buf, sizeof buf, "%s = %d\n", var, value); -+ len = strlen (buf); -+ return (write (fh, buf, len) == len); -+} -+ -+int -+cfg_get_color (char *cfg, char *var, int *r, int *g, int *b) -+{ -+ char str[128]; -+ -+ if (!cfg_get_str (cfg, var, str, sizeof (str))) -+ return 0; -+ -+ sscanf (str, "%04x %04x %04x", r, g, b); -+ return 1; -+} -+ -+int -+cfg_get_int_with_result (char *cfg, char *var, int *result) -+{ -+ char str[128]; -+ -+ if (!cfg_get_str (cfg, var, str, sizeof (str))) -+ { -+ *result = 0; -+ return 0; -+ } -+ -+ *result = 1; -+ return atoi (str); -+} -+ -+int -+cfg_get_int (char *cfg, char *var) -+{ -+ char str[128]; -+ -+ if (!cfg_get_str (cfg, var, str, sizeof (str))) -+ return 0; -+ -+ return atoi (str); -+} -+ -+char *xdir_fs = NULL; /* file system encoding */ -+char *xdir_utf = NULL; /* utf-8 encoding */ -+ -+#ifdef WIN32 -+ -+#include -+ -+static gboolean -+get_reg_str (const char *sub, const char *name, char *out, DWORD len) -+{ -+ HKEY hKey; -+ DWORD t; -+ -+ if (RegOpenKeyEx (HKEY_CURRENT_USER, sub, 0, KEY_READ, &hKey) == -+ ERROR_SUCCESS) -+ { -+ if (RegQueryValueEx (hKey, name, NULL, &t, out, &len) != ERROR_SUCCESS || -+ t != REG_SZ) -+ { -+ RegCloseKey (hKey); -+ return FALSE; -+ } -+ out[len-1] = 0; -+ RegCloseKey (hKey); -+ return TRUE; -+ } -+ -+ return FALSE; -+} -+ -+char * -+get_xdir_fs (void) -+{ -+ if (!xdir_fs) -+ { -+ char out[256]; -+ -+ if (!get_reg_str ("Software\\Microsoft\\Windows\\CurrentVersion\\" -+ "Explorer\\Shell Folders", "AppData", out, sizeof (out))) -+ return "./config"; -+ xdir_fs = g_strdup_printf ("%s\\" XCHAT_DIR, out); -+ } -+ return xdir_fs; -+} -+ -+#else -+ -+char * -+get_xdir_fs (void) -+{ -+ if (!xdir_fs) -+ xdir_fs = g_strdup_printf ("%s/" XCHAT_DIR, g_get_home_dir ()); -+ -+ return xdir_fs; -+} -+ -+#endif /* !WIN32 */ -+ -+char * -+get_xdir_utf8 (void) -+{ -+ if (!xdir_utf) /* never free this, keep it for program life time */ -+ xdir_utf = xchat_filename_to_utf8 (get_xdir_fs (), -1, 0, 0, 0); -+ -+ return xdir_utf; -+} -+ -+static void -+check_prefs_dir (void) -+{ -+ char *dir = get_xdir_fs (); -+ if (access (dir, F_OK) != 0) -+ { -+#ifdef WIN32 -+ if (mkdir (dir) != 0) -+#else -+ if (mkdir (dir, S_IRUSR | S_IWUSR | S_IXUSR) != 0) -+#endif -+ fe_message (_("Cannot create ~/.xchat2"), FE_MSG_ERROR); -+ } -+} -+ -+static char * -+default_file (void) -+{ -+ static char *dfile = 0; -+ -+ if (!dfile) -+ { -+ dfile = malloc (strlen (get_xdir_fs ()) + 12); -+ sprintf (dfile, "%s/xchat.conf", get_xdir_fs ()); -+ } -+ return dfile; -+} -+ -+/* Keep these sorted!! */ -+ -+const struct prefs vars[] = { -+ {"auto_save", P_OFFINT (autosave), TYPE_BOOL}, -+ {"auto_save_url", P_OFFINT (autosave_url), TYPE_BOOL}, -+ -+ {"away_auto_unmark", P_OFFINT (auto_unmark_away), TYPE_BOOL}, -+ {"away_reason", P_OFFSET (awayreason), TYPE_STR}, -+ {"away_show_message", P_OFFINT (show_away_message), TYPE_BOOL}, -+ {"away_show_once", P_OFFINT (show_away_once), TYPE_BOOL}, -+ {"away_size_max", P_OFFINT (away_size_max), TYPE_INT}, -+ {"away_timeout", P_OFFINT (away_timeout), TYPE_INT}, -+ {"away_track", P_OFFINT (away_track), TYPE_BOOL}, -+ -+ {"completion_amount", P_OFFINT (completion_amount), TYPE_INT}, -+ {"completion_auto", P_OFFINT (nickcompletion), TYPE_BOOL}, -+ {"completion_sort", P_OFFINT (completion_sort), TYPE_INT}, -+ {"completion_suffix", P_OFFSET (nick_suffix), TYPE_STR}, -+ -+ {"dcc_auto_chat", P_OFFINT (autodccchat), TYPE_INT}, -+ {"dcc_auto_resume", P_OFFINT (autoresume), TYPE_BOOL}, -+ {"dcc_auto_send", P_OFFINT (autodccsend), TYPE_INT}, -+ {"dcc_blocksize", P_OFFINT (dcc_blocksize), TYPE_INT}, -+ {"dcc_completed_dir", P_OFFSET (dcc_completed_dir), TYPE_STR}, -+ {"dcc_dir", P_OFFSET (dccdir), TYPE_STR}, -+ {"dcc_fast_send", P_OFFINT (fastdccsend), TYPE_BOOL}, -+ {"dcc_global_max_get_cps", P_OFFINT (dcc_global_max_get_cps), TYPE_INT}, -+ {"dcc_global_max_send_cps", P_OFFINT (dcc_global_max_send_cps), TYPE_INT}, -+ {"dcc_ip", P_OFFSET (dcc_ip_str), TYPE_STR}, -+ {"dcc_ip_from_server", P_OFFINT (ip_from_server), TYPE_BOOL}, -+ {"dcc_max_get_cps", P_OFFINT (dcc_max_get_cps), TYPE_INT}, -+ {"dcc_max_send_cps", P_OFFINT (dcc_max_send_cps), TYPE_INT}, -+ {"dcc_permissions", P_OFFINT (dccpermissions), TYPE_INT}, -+ {"dcc_port_first", P_OFFINT (first_dcc_send_port), TYPE_INT}, -+ {"dcc_port_last", P_OFFINT (last_dcc_send_port), TYPE_INT}, -+ {"dcc_remove", P_OFFINT (dcc_remove), TYPE_BOOL}, -+ {"dcc_save_nick", P_OFFINT (dccwithnick), TYPE_BOOL}, -+ {"dcc_send_fillspaces", P_OFFINT (dcc_send_fillspaces), TYPE_BOOL}, -+ {"dcc_stall_timeout", P_OFFINT (dccstalltimeout), TYPE_INT}, -+ {"dcc_timeout", P_OFFINT (dcctimeout), TYPE_INT}, -+ -+ {"dnsprogram", P_OFFSET (dnsprogram), TYPE_STR}, -+ -+ {"flood_ctcp_num", P_OFFINT (ctcp_number_limit), TYPE_INT}, -+ {"flood_ctcp_time", P_OFFINT (ctcp_time_limit), TYPE_INT}, -+ {"flood_msg_num", P_OFFINT (msg_number_limit), TYPE_INT}, -+ {"flood_msg_time", P_OFFINT (msg_time_limit), TYPE_INT}, -+ -+ {"gui_auto_open_chat", P_OFFINT (autoopendccchatwindow), TYPE_BOOL}, -+ {"gui_auto_open_dialog", P_OFFINT (autodialog), TYPE_BOOL}, -+ {"gui_auto_open_recv", P_OFFINT (autoopendccrecvwindow), TYPE_BOOL}, -+ {"gui_auto_open_send", P_OFFINT (autoopendccsendwindow), TYPE_BOOL}, -+ {"gui_dialog_height", P_OFFINT (dialog_height), TYPE_INT}, -+ {"gui_dialog_left", P_OFFINT (dialog_left), TYPE_INT}, -+ {"gui_dialog_top", P_OFFINT (dialog_top), TYPE_INT}, -+ {"gui_dialog_width", P_OFFINT (dialog_width), TYPE_INT}, -+ {"gui_hide_menu", P_OFFINT (hidemenu), TYPE_BOOL}, -+ {"gui_input_spell", P_OFFINT (gui_input_spell), TYPE_BOOL}, -+ {"gui_input_style", P_OFFINT (style_inputbox), TYPE_BOOL}, -+ {"gui_join_dialog", P_OFFINT (gui_join_dialog), TYPE_BOOL}, -+ {"gui_lagometer", P_OFFINT (lagometer), TYPE_INT}, -+ {"gui_mode_buttons", P_OFFINT (chanmodebuttons), TYPE_BOOL}, -+ {"gui_pane_left_size", P_OFFINT (gui_pane_left_size), TYPE_INT}, -+ {"gui_pane_right_size", P_OFFINT (gui_pane_right_size), TYPE_INT}, -+ {"gui_quit_dialog", P_OFFINT (gui_quit_dialog), TYPE_BOOL}, -+ {"gui_slist_select", P_OFFINT (slist_select), TYPE_INT}, -+ {"gui_slist_skip", P_OFFINT (slist_skip), TYPE_BOOL}, -+ {"gui_throttlemeter", P_OFFINT (throttlemeter), TYPE_INT}, -+ {"gui_topicbar", P_OFFINT (topicbar), TYPE_BOOL}, -+ {"gui_tray", P_OFFINT (gui_tray), TYPE_BOOL}, -+ {"gui_tray_flags", P_OFFINT (gui_tray_flags), TYPE_INT}, -+ {"gui_tweaks", P_OFFINT (gui_tweaks), TYPE_INT}, -+ {"gui_ulist_buttons", P_OFFINT (userlistbuttons), TYPE_BOOL}, -+ {"gui_ulist_doubleclick", P_OFFSET (doubleclickuser), TYPE_STR}, -+ {"gui_ulist_hide", P_OFFINT (hideuserlist), TYPE_BOOL}, -+ {"gui_ulist_left", P_OFFINT (_gui_ulist_left), TYPE_BOOL}, /* obsolete */ -+ {"gui_ulist_pos", P_OFFINT (gui_ulist_pos), TYPE_INT}, -+ {"gui_ulist_resizable", P_OFFINT (paned_userlist), TYPE_BOOL}, -+ {"gui_ulist_show_hosts", P_OFFINT(showhostname_in_userlist), TYPE_BOOL}, -+ {"gui_ulist_sort", P_OFFINT (userlist_sort), TYPE_INT}, -+ {"gui_ulist_style", P_OFFINT (style_namelistgad), TYPE_BOOL}, -+ {"gui_url_mod", P_OFFINT (gui_url_mod), TYPE_INT}, -+ {"gui_usermenu", P_OFFINT (gui_usermenu), TYPE_BOOL}, -+ {"gui_win_height", P_OFFINT (mainwindow_height), TYPE_INT}, -+ {"gui_win_left", P_OFFINT (mainwindow_left), TYPE_INT}, -+ {"gui_win_save", P_OFFINT (mainwindow_save), TYPE_BOOL}, -+ {"gui_win_state", P_OFFINT (gui_win_state), TYPE_INT}, -+ {"gui_win_top", P_OFFINT (mainwindow_top), TYPE_INT}, -+ {"gui_win_width", P_OFFINT (mainwindow_width), TYPE_INT}, -+ -+#ifdef WIN32 -+ {"identd", P_OFFINT (identd), TYPE_BOOL}, -+#endif -+ {"input_balloon_chans", P_OFFINT (input_balloon_chans), TYPE_BOOL}, -+ {"input_balloon_hilight", P_OFFINT (input_balloon_hilight), TYPE_BOOL}, -+ {"input_balloon_priv", P_OFFINT (input_balloon_priv), TYPE_BOOL}, -+ {"input_balloon_time", P_OFFINT (input_balloon_time), TYPE_INT}, -+ {"input_beep_chans", P_OFFINT (input_beep_chans), TYPE_BOOL}, -+ {"input_beep_hilight", P_OFFINT (input_beep_hilight), TYPE_BOOL}, -+ {"input_beep_msg", P_OFFINT (input_beep_priv), TYPE_BOOL}, -+ {"input_command_char", P_OFFSET (cmdchar), TYPE_STR}, -+ {"input_filter_beep", P_OFFINT (filterbeep), TYPE_BOOL}, -+ {"input_flash_chans", P_OFFINT (input_flash_chans), TYPE_BOOL}, -+ {"input_flash_hilight", P_OFFINT (input_flash_hilight), TYPE_BOOL}, -+ {"input_flash_priv", P_OFFINT (input_flash_priv), TYPE_BOOL}, -+ {"input_perc_ascii", P_OFFINT (perc_ascii), TYPE_BOOL}, -+ {"input_perc_color", P_OFFINT (perc_color), TYPE_BOOL}, -+ {"input_tray_chans", P_OFFINT (input_tray_chans), TYPE_BOOL}, -+ {"input_tray_hilight", P_OFFINT (input_tray_hilight), TYPE_BOOL}, -+ {"input_tray_priv", P_OFFINT (input_tray_priv), TYPE_BOOL}, -+ -+ {"irc_auto_rejoin", P_OFFINT (autorejoin), TYPE_BOOL}, -+ {"irc_ban_type", P_OFFINT (bantype), TYPE_INT}, -+ {"irc_conf_mode", P_OFFINT (confmode), TYPE_BOOL}, -+ {"irc_extra_hilight", P_OFFSET (irc_extra_hilight), TYPE_STR}, -+ {"irc_hide_version", P_OFFINT (hidever), TYPE_BOOL}, -+ {"irc_id_ntext", P_OFFSET (irc_id_ntext), TYPE_STR}, -+ {"irc_id_ytext", P_OFFSET (irc_id_ytext), TYPE_STR}, -+ {"irc_invisible", P_OFFINT (invisible), TYPE_BOOL}, -+ {"irc_join_delay", P_OFFINT (irc_join_delay), TYPE_INT}, -+ {"irc_logging", P_OFFINT (logging), TYPE_BOOL}, -+ {"irc_logmask", P_OFFSET (logmask), TYPE_STR}, -+ {"irc_nick1", P_OFFSET (nick1), TYPE_STR}, -+ {"irc_nick2", P_OFFSET (nick2), TYPE_STR}, -+ {"irc_nick3", P_OFFSET (nick3), TYPE_STR}, -+ {"irc_nick_hilight", P_OFFSET (irc_nick_hilight), TYPE_STR}, -+ {"irc_no_hilight", P_OFFSET (irc_no_hilight), TYPE_STR}, -+ {"irc_part_reason", P_OFFSET (partreason), TYPE_STR}, -+ {"irc_quit_reason", P_OFFSET (quitreason), TYPE_STR}, -+ {"irc_raw_modes", P_OFFINT (raw_modes), TYPE_BOOL}, -+ {"irc_real_name", P_OFFSET (realname), TYPE_STR}, -+ {"irc_servernotice", P_OFFINT (servernotice), TYPE_BOOL}, -+ {"irc_skip_motd", P_OFFINT (skipmotd), TYPE_BOOL}, -+ {"irc_user_name", P_OFFSET (username), TYPE_STR}, -+ {"irc_wallops", P_OFFINT (wallops), TYPE_BOOL}, -+ {"irc_who_join", P_OFFINT (userhost), TYPE_BOOL}, -+ {"irc_whois_front", P_OFFINT (irc_whois_front), TYPE_BOOL}, -+ -+ {"net_auto_reconnect", P_OFFINT (autoreconnect), TYPE_BOOL}, -+ {"net_auto_reconnectonfail", P_OFFINT (autoreconnectonfail), TYPE_BOOL}, -+ {"net_bind_host", P_OFFSET (hostname), TYPE_STR}, -+ {"net_ping_timeout", P_OFFINT (pingtimeout), TYPE_INT}, -+ {"net_proxy_auth", P_OFFINT (proxy_auth), TYPE_BOOL}, -+ {"net_proxy_host", P_OFFSET (proxy_host), TYPE_STR}, -+ {"net_proxy_pass", P_OFFSET (proxy_pass), TYPE_STR}, -+ {"net_proxy_port", P_OFFINT (proxy_port), TYPE_INT}, -+ {"net_proxy_type", P_OFFINT (proxy_type), TYPE_INT}, -+ {"net_proxy_use", P_OFFINT (proxy_use), TYPE_INT}, -+ {"net_proxy_user", P_OFFSET (proxy_user), TYPE_STR}, -+ -+ {"net_reconnect_delay", P_OFFINT (recon_delay), TYPE_INT}, -+ {"net_throttle", P_OFFINT (throttle), TYPE_BOOL}, -+ -+ {"notify_timeout", P_OFFINT (notify_timeout), TYPE_INT}, -+ {"notify_whois_online", P_OFFINT (whois_on_notifyonline), TYPE_BOOL}, -+ -+ {"perl_warnings", P_OFFINT (perlwarnings), TYPE_BOOL}, -+ -+ {"sound_command", P_OFFSET (soundcmd), TYPE_STR}, -+ {"sound_dir", P_OFFSET (sounddir), TYPE_STR}, -+ {"stamp_log", P_OFFINT (timestamp_logs), TYPE_BOOL}, -+ {"stamp_log_format", P_OFFSET (timestamp_log_format), TYPE_STR}, -+ {"stamp_text", P_OFFINT (timestamp), TYPE_BOOL}, -+ {"stamp_text_format", P_OFFSET (stamp_format), TYPE_STR}, -+ -+ {"tab_chans", P_OFFINT (tabchannels), TYPE_BOOL}, -+ {"tab_dialogs", P_OFFINT (privmsgtab), TYPE_BOOL}, -+ {"tab_layout", P_OFFINT (tab_layout), TYPE_INT}, -+ {"tab_new_to_front", P_OFFINT (newtabstofront), TYPE_INT}, -+ {"tab_notices", P_OFFINT (notices_tabs), TYPE_BOOL}, -+ {"tab_pos", P_OFFINT (tab_pos), TYPE_INT}, -+ {"tab_position", P_OFFINT (_tabs_position), TYPE_INT}, /* obsolete */ -+ {"tab_server", P_OFFINT (use_server_tab), TYPE_BOOL}, -+ {"tab_small", P_OFFINT (tab_small), TYPE_INT}, -+ {"tab_sort", P_OFFINT (tab_sort), TYPE_BOOL}, -+ {"tab_trunc", P_OFFINT (truncchans), TYPE_INT}, -+ {"tab_utils", P_OFFINT (windows_as_tabs), TYPE_BOOL}, -+ -+ {"text_background", P_OFFSET (background), TYPE_STR}, -+ {"text_color_nicks", P_OFFINT (colorednicks), TYPE_BOOL}, -+ {"text_font", P_OFFSET (font_normal), TYPE_STR}, -+ {"text_indent", P_OFFINT (indent_nicks), TYPE_BOOL}, -+ {"text_max_indent", P_OFFINT (max_auto_indent), TYPE_INT}, -+ {"text_max_lines", P_OFFINT (max_lines), TYPE_INT}, -+ {"text_replay", P_OFFINT (text_replay), TYPE_BOOL}, -+ {"text_show_marker", P_OFFINT (show_marker), TYPE_BOOL}, -+ {"text_show_sep", P_OFFINT (show_separator), TYPE_BOOL}, -+ {"text_stripcolor", P_OFFINT (stripcolor), TYPE_BOOL}, -+ {"text_thin_sep", P_OFFINT (thin_separator), TYPE_BOOL}, -+ {"text_tint_blue", P_OFFINT (tint_blue), TYPE_INT}, -+ {"text_tint_green", P_OFFINT (tint_green), TYPE_INT}, -+ {"text_tint_red", P_OFFINT (tint_red), TYPE_INT}, -+ {"text_transparent", P_OFFINT (transparent), TYPE_BOOL}, -+ {"text_wordwrap", P_OFFINT (wordwrap), TYPE_BOOL}, -+ -+ {0, 0, 0}, -+}; -+ -+static char * -+convert_with_fallback (const char *str, const char *fallback) -+{ -+ char *utf; -+ -+ utf = g_locale_to_utf8 (str, -1, 0, 0, 0); -+ if (!utf) -+ { -+ /* this can happen if CHARSET envvar is set wrong */ -+ /* maybe it's already utf8 (breakage!) */ -+ if (!g_utf8_validate (str, -1, NULL)) -+ utf = g_strdup (fallback); -+ else -+ utf = g_strdup (str); -+ } -+ -+ return utf; -+} -+ -+void -+load_config (void) -+{ -+ struct stat st; -+ char *cfg, *sp; -+ const char *username, *realname; -+ int res, val, i, fh; -+ -+ check_prefs_dir (); -+ username = g_get_user_name (); -+ if (!username) -+ username = "root"; -+ -+ realname = g_get_real_name (); -+ if ((realname && realname[0] == 0) || !realname) -+ realname = username; -+ -+ username = convert_with_fallback (username, "username"); -+ realname = convert_with_fallback (realname, "realname"); -+ -+ memset (&prefs, 0, sizeof (struct xchatprefs)); -+ -+ /* put in default values, anything left out is automatically zero */ -+ prefs.local_ip = 0xffffffff; -+ prefs.irc_join_delay = 3; -+ prefs.show_marker = 1; -+ prefs.newtabstofront = 2; -+ prefs.completion_amount = 5; -+ prefs.away_timeout = 60; -+ prefs.away_size_max = 300; -+ prefs.away_track = 1; -+ prefs.timestamp_logs = 1; -+ prefs.truncchans = 20; -+ prefs.autoresume = 1; -+ prefs.show_away_once = 1; -+ prefs.indent_nicks = 1; -+ prefs.thin_separator = 1; -+ prefs._tabs_position = 2; /* 2 = left */ -+ prefs.fastdccsend = 1; -+ prefs.wordwrap = 1; -+ prefs.autosave = 1; -+ prefs.autodialog = 1; -+ prefs.gui_input_spell = 1; -+ prefs.autoreconnect = 1; -+ prefs.recon_delay = 10; -+ prefs.text_replay = 1; -+ prefs.tabchannels = 1; -+ prefs.tab_layout = 2; /* 0=Tabs 1=Reserved 2=Tree */ -+ prefs.tab_sort = 1; -+ prefs.paned_userlist = 1; -+ prefs.newtabstofront = 2; -+ prefs.use_server_tab = 1; -+ prefs.privmsgtab = 1; -+ /*prefs.style_inputbox = 1;*/ -+ prefs.dccpermissions = 0600; -+ prefs.max_lines = 500; -+ prefs.mainwindow_width = 640; -+ prefs.mainwindow_height = 400; -+ prefs.dialog_width = 500; -+ prefs.dialog_height = 256; -+ prefs.gui_join_dialog = 1; -+ prefs.gui_quit_dialog = 1; -+ prefs.dcctimeout = 180; -+ prefs.dccstalltimeout = 60; -+ prefs.notify_timeout = 15; -+ prefs.tint_red = -+ prefs.tint_green = -+ prefs.tint_blue = 195; -+ prefs.auto_indent = 1; -+ prefs.max_auto_indent = 256; -+ prefs.show_separator = 1; -+ prefs.dcc_blocksize = 1024; -+ prefs.throttle = 1; -+ /*FIXME*/ prefs.msg_time_limit = 30; -+ prefs.msg_number_limit = 5; -+ prefs.ctcp_time_limit = 30; -+ prefs.ctcp_number_limit = 5; -+ prefs.topicbar = 1; -+ prefs.lagometer = 1; -+ prefs.throttlemeter = 1; -+ prefs.autoopendccrecvwindow = 1; -+ prefs.autoopendccsendwindow = 1; -+ prefs.autoopendccchatwindow = 1; -+ prefs.userhost = 1; -+ prefs.gui_url_mod = 4; /* ctrl */ -+ prefs.gui_tray = 1; -+ prefs.gui_pane_left_size = 100; -+ prefs.gui_pane_right_size = 100; -+ prefs.mainwindow_save = 1; -+ prefs.bantype = 2; -+ prefs.input_balloon_time = 20; -+ prefs.input_flash_priv = prefs.input_flash_hilight = 1; -+ prefs.input_tray_priv = prefs.input_tray_hilight = 1; -+ prefs.autodccsend = 2; /* browse mode */ -+#ifdef WIN32 -+ prefs.identd = 1; -+#endif -+ strcpy (prefs.stamp_format, "[%H:%M] "); -+ strcpy (prefs.timestamp_log_format, "%b %d %H:%M:%S "); -+ strcpy (prefs.logmask, "%n-%c.log"); -+ strcpy (prefs.nick_suffix, ","); -+ strcpy (prefs.cmdchar, "/"); -+ strcpy (prefs.nick1, username); -+ strcpy (prefs.nick2, username); -+ strcat (prefs.nick2, "_"); -+ strcpy (prefs.nick3, username); -+ strcat (prefs.nick3, "__"); -+ strcpy (prefs.realname, realname); -+ strcpy (prefs.username, username); -+#ifdef WIN32 -+ strcpy (prefs.sounddir, "./sounds"); -+ { -+ char out[256]; -+ -+ if (get_reg_str ("Software\\Microsoft\\Windows\\CurrentVersion\\" -+ "Explorer\\Shell Folders", "Personal", out, sizeof (out))) -+ snprintf (prefs.dccdir, sizeof (prefs.dccdir), "%s\\Downloads", out); -+ else -+ snprintf (prefs.dccdir, sizeof (prefs.dccdir), "%s\\Downloads", get_xdir_utf8 ()); -+ } -+#else -+ snprintf (prefs.sounddir, sizeof (prefs.sounddir), "%s/sounds", get_xdir_utf8 ()); -+ snprintf (prefs.dccdir, sizeof (prefs.dccdir), "%s/downloads", get_xdir_utf8 ()); -+#endif -+ strcpy (prefs.doubleclickuser, "QUOTE WHOIS %s %s"); -+ strcpy (prefs.awayreason, _("I'm busy")); -+ strcpy (prefs.quitreason, _("Leaving")); -+ strcpy (prefs.partreason, prefs.quitreason); -+ strcpy (prefs.font_normal, DEF_FONT); -+ strcpy (prefs.dnsprogram, "host"); -+ strcpy (prefs.irc_no_hilight, "NickServ,ChanServ"); -+ -+ g_free ((char *)username); -+ g_free ((char *)realname); -+ -+ fh = open (default_file (), OFLAGS | O_RDONLY); -+ if (fh != -1) -+ { -+ fstat (fh, &st); -+ cfg = malloc (st.st_size + 1); -+ cfg[0] = '\0'; -+ i = read (fh, cfg, st.st_size); -+ if (i >= 0) -+ cfg[i] = '\0'; /* make sure cfg is NULL terminated */ -+ close (fh); -+ i = 0; -+ do -+ { -+ switch (vars[i].type) -+ { -+ case TYPE_STR: -+ cfg_get_str (cfg, vars[i].name, (char *) &prefs + vars[i].offset, -+ vars[i].len); -+ break; -+ case TYPE_BOOL: -+ case TYPE_INT: -+ val = cfg_get_int_with_result (cfg, vars[i].name, &res); -+ if (res) -+ *((int *) &prefs + vars[i].offset) = val; -+ break; -+ } -+ i++; -+ } -+ while (vars[i].name); -+ -+ free (cfg); -+ -+ } else -+ { -+#ifndef WIN32 -+#ifndef __EMX__ -+ /* OS/2 uses UID 0 all the time */ -+ if (getuid () == 0) -+ fe_message (_("* Running IRC as root is stupid! You should\n" -+ " create a User Account and use that to login.\n"), FE_MSG_WARN|FE_MSG_WAIT); -+#endif -+#endif /* !WIN32 */ -+ -+ mkdir_utf8 (prefs.dccdir); -+ mkdir_utf8 (prefs.dcc_completed_dir); -+ } -+ if (prefs.mainwindow_height < 138) -+ prefs.mainwindow_height = 138; -+ if (prefs.mainwindow_width < 106) -+ prefs.mainwindow_width = 106; -+ -+ sp = strchr (prefs.username, ' '); -+ if (sp) -+ sp[0] = 0; /* spaces in username would break the login */ -+ -+ /* try to make sense of old ulist/tree position settings */ -+ if (prefs.gui_ulist_pos == 0) -+ { -+ prefs.gui_ulist_pos = 3; /* top right */ -+ if (prefs._gui_ulist_left) -+ prefs.gui_ulist_pos = 2; /* bottom left */ -+ -+ switch (prefs._tabs_position) -+ { -+ case 0: -+ prefs.tab_pos = 6; /* bottom */ -+ break; -+ case 1: -+ prefs.tab_pos = 5; /* top */ -+ break; -+ case 2: -+ prefs.tab_pos = 1; /* left */ -+ break; -+ case 3: -+ prefs.tab_pos = 4; /* right */ -+ break; -+ case 4: -+ prefs.tab_pos = 1; /* (hidden)left */ -+ break; -+ case 5: -+ if (prefs._gui_ulist_left) -+ { -+ prefs.tab_pos = 1; /* above ulist left */ -+ prefs.gui_ulist_pos = 2; -+ } -+ else -+ { -+ prefs.tab_pos = 3; /* above ulist right */ -+ prefs.gui_ulist_pos = 4; -+ } -+ break; -+ } -+ } -+} -+ -+int -+save_config (void) -+{ -+ int fh, i; -+ char *new_config, *config; -+ -+ check_prefs_dir (); -+ -+ config = default_file (); -+ new_config = malloc (strlen (config) + 5); -+ strcpy (new_config, config); -+ strcat (new_config, ".new"); -+ -+ fh = open (new_config, OFLAGS | O_TRUNC | O_WRONLY | O_CREAT, 0600); -+ if (fh == -1) -+ { -+ free (new_config); -+ return 0; -+ } -+ -+ if (!cfg_put_str (fh, "version", PACKAGE_VERSION)) -+ { -+ free (new_config); -+ return 0; -+ } -+ -+ i = 0; -+ do -+ { -+ switch (vars[i].type) -+ { -+ case TYPE_STR: -+ if (!cfg_put_str (fh, vars[i].name, (char *) &prefs + vars[i].offset)) -+ { -+ free (new_config); -+ return 0; -+ } -+ break; -+ case TYPE_INT: -+ case TYPE_BOOL: -+ if (!cfg_put_int (fh, *((int *) &prefs + vars[i].offset), vars[i].name)) -+ { -+ free (new_config); -+ return 0; -+ } -+ } -+ i++; -+ } -+ while (vars[i].name); -+ -+ if (close (fh) == -1) -+ { -+ free (new_config); -+ return 0; -+ } -+ -+#ifdef WIN32 -+ unlink (config); /* win32 can't rename to an existing file */ -+#endif -+ if (rename (new_config, config) == -1) -+ { -+ free (new_config); -+ return 0; -+ } -+ free (new_config); -+ -+ return 1; -+} -+ -+static void -+set_showval (session *sess, const struct prefs *var, char *tbuf) -+{ -+ int len, dots, j; -+ -+ len = strlen (var->name); -+ memcpy (tbuf, var->name, len); -+ dots = 29 - len; -+ if (dots < 0) -+ dots = 0; -+ tbuf[len++] = '\003'; -+ tbuf[len++] = '2'; -+ for (j=0;jtype) -+ { -+ case TYPE_STR: -+ sprintf (tbuf + len, "\0033:\017 %s\n", -+ (char *) &prefs + var->offset); -+ break; -+ case TYPE_INT: -+ sprintf (tbuf + len, "\0033:\017 %d\n", -+ *((int *) &prefs + var->offset)); -+ break; -+ case TYPE_BOOL: -+ if (*((int *) &prefs + var->offset)) -+ sprintf (tbuf + len, "\0033:\017 %s\n", "ON"); -+ else -+ sprintf (tbuf + len, "\0033:\017 %s\n", "OFF"); -+ break; -+ } -+ PrintText (sess, tbuf); -+} -+ -+static void -+set_list (session * sess, char *tbuf) -+{ -+ int i; -+ -+ i = 0; -+ do -+ { -+ set_showval (sess, &vars[i], tbuf); -+ i++; -+ } -+ while (vars[i].name); -+} -+ -+int -+cfg_get_bool (char *var) -+{ -+ int i = 0; -+ -+ do -+ { -+ if (!strcasecmp (var, vars[i].name)) -+ { -+ return *((int *) &prefs + vars[i].offset); -+ } -+ i++; -+ } -+ while (vars[i].name); -+ -+ return -1; -+} -+ -+int -+cmd_set (struct session *sess, char *tbuf, char *word[], char *word_eol[]) -+{ -+ int wild = FALSE; -+ int or = FALSE; -+ int off = FALSE; -+ int quiet = FALSE; -+ int erase = FALSE; -+ int i = 0, finds = 0, found; -+ int idx = 2; -+ char *var, *val; -+ -+ if (strcasecmp (word[2], "-e") == 0) -+ { -+ idx++; -+ erase = TRUE; -+ } -+ -+ /* turn a bit OFF */ -+ if (strcasecmp (word[idx], "-off") == 0) -+ { -+ idx++; -+ off = TRUE; -+ } -+ -+ /* turn a bit ON */ -+ if (strcasecmp (word[idx], "-or") == 0 || strcasecmp (word[idx], "-on") == 0) -+ { -+ idx++; -+ or = TRUE; -+ } -+ -+ if (strcasecmp (word[idx], "-quiet") == 0) -+ { -+ idx++; -+ quiet = TRUE; -+ } -+ -+ var = word[idx]; -+ val = word_eol[idx+1]; -+ -+ if (!*var) -+ { -+ set_list (sess, tbuf); -+ return TRUE; -+ } -+ -+ if ((strchr (var, '*') || strchr (var, '?')) && !*val) -+ wild = TRUE; -+ -+ if (*val == '=') -+ val++; -+ -+ do -+ { -+ if (wild) -+ found = !match (var, vars[i].name); -+ else -+ found = strcasecmp (var, vars[i].name); -+ -+ if (found == 0) -+ { -+ finds++; -+ switch (vars[i].type) -+ { -+ case TYPE_STR: -+ if (erase || *val) -+ { -+ strncpy ((char *) &prefs + vars[i].offset, val, vars[i].len); -+ ((char *) &prefs)[vars[i].offset + vars[i].len - 1] = 0; -+ if (!quiet) -+ PrintTextf (sess, "%s set to: %s\n", var, (char *) &prefs + vars[i].offset); -+ } else -+ { -+ set_showval (sess, &vars[i], tbuf); -+ } -+ break; -+ case TYPE_INT: -+ case TYPE_BOOL: -+ if (*val) -+ { -+ if (vars[i].type == TYPE_BOOL) -+ { -+ if (atoi (val)) -+ *((int *) &prefs + vars[i].offset) = 1; -+ else -+ *((int *) &prefs + vars[i].offset) = 0; -+ if (!strcasecmp (val, "YES") || !strcasecmp (val, "ON")) -+ *((int *) &prefs + vars[i].offset) = 1; -+ if (!strcasecmp (val, "NO") || !strcasecmp (val, "OFF")) -+ *((int *) &prefs + vars[i].offset) = 0; -+ } else -+ { -+ if (or) -+ *((int *) &prefs + vars[i].offset) |= atoi (val); -+ else if (off) -+ *((int *) &prefs + vars[i].offset) &= ~(atoi (val)); -+ else -+ *((int *) &prefs + vars[i].offset) = atoi (val); -+ } -+ if (!quiet) -+ PrintTextf (sess, "%s set to: %d\n", var, -+ *((int *) &prefs + vars[i].offset)); -+ } else -+ { -+ set_showval (sess, &vars[i], tbuf); -+ } -+ break; -+ } -+ } -+ i++; -+ } -+ while (vars[i].name); -+ -+ if (!finds && !quiet) -+ PrintText (sess, "No such variable.\n"); -+ -+ return TRUE; -+} -+ -+int -+xchat_open_file (char *file, int flags, int mode, int xof_flags) -+{ -+ char buf[1024]; -+ -+ if (xof_flags & XOF_FULLPATH) -+ { -+ if (xof_flags & XOF_DOMODE) -+ return open (file, flags | OFLAGS, mode); -+ else -+ return open (file, flags | OFLAGS); -+ } -+ -+ snprintf (buf, sizeof (buf), "%s/%s", get_xdir_fs (), file); -+ if (xof_flags & XOF_DOMODE) -+ return open (buf, flags | OFLAGS, mode); -+ else -+ return open (buf, flags | OFLAGS); -+} -+ -+FILE * -+xchat_fopen_file (const char *file, const char *mode, int xof_flags) -+{ -+ char buf[1024]; -+ -+ if (xof_flags & XOF_FULLPATH) -+ return fopen (file, mode); -+ -+ snprintf (buf, sizeof (buf), "%s/%s", get_xdir_fs (), file); -+ return fopen (buf, mode); -+} -diff -urNp xchat-2.8.8.orig/src/common/xchat.h xchat-2.8.8/src/common/xchat.h ---- xchat-2.8.8.orig/src/common/xchat.h 2013-06-10 14:26:55.885425482 +0200 -+++ xchat-2.8.8/src/common/xchat.h 2013-06-10 14:27:23.748503597 +0200 -@@ -1,6 +1,7 @@ - #include "../../config.h" - - #include -+#include - #include /* need time_t */ - - #ifndef XCHAT_H diff --git a/xchat.spec b/xchat.spec deleted file mode 100644 index c81eb60..0000000 --- a/xchat.spec +++ /dev/null @@ -1,1022 +0,0 @@ -%define _default_patch_fuzz 2 -%define gconf_version 2.14 - -Summary: A popular and easy to use graphical IRC (chat) client -Name: xchat -Version: 2.8.8 -Release: 37%{?dist} -Epoch: 1 -Group: Applications/Internet -License: GPLv2+ -URL: http://www.xchat.org -Source0: http://www.xchat.org/files/source/2.8/xchat-%{version}.tar.xz - -# http://sourceforge.net/p/xchat/bugs/1504/ -Source1: hicolor_apps_16x16_%{name}.png -Source2: hicolor_apps_22x22_%{name}.png -Source3: hicolor_apps_24x24_%{name}.png -Source4: hicolor_apps_32x32_%{name}.png -Source5: hicolor_apps_48x48_%{name}.png -Source6: hicolor_apps_256x256_%{name}.png -Source7: %{name}.svg - -BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) - -# Patches 0-9 reserved for official xchat.org patches - -Patch12: xchat-1.8.7-use-sysconf-to-detect-cpus.patch -# see #241923 & #880672 -Patch35: xchat-2.8.8-notifications-and-tray.patch -# Upstream XChat 2.8.6 defaults to Latin1 (what upstream calls the "IRC" -# encoding). Default to UTF-8 instead (as previous versions did, at least when -# running under a UTF-8 locale). -# Both the "IRC" and "UTF-8" settings will try to accept both Latin1 and UTF-8 -# when it comes in, however "IRC" sends Latin1, "UTF-8" sends UTF-8. -Patch41: xchat-2.8.6-default-utf8.patch -# patch to add ability to change to tab with most recent activity -# See http://sourceforge.net/tracker/?func=detail&aid=2022871&group_id=239&atid=350239 -Patch50: xchat-2.8.6-change-page-activity.patch -# add port numbers for Freenode (Debarshi Ray) -Patch51: xchat-2.8.6-freenode-ports.patch -# work with libnotify 0.7 -# https://sourceforge.net/tracker/?func=detail&aid=3109838&group_id=239&atid=100239 -Patch52: xchat-2.8.8-libnotify07.patch -# link against libnotify -# https://sourceforge.net/tracker/?func=detail&aid=3280223&group_id=239&atid=100239 -Patch53: xchat-2.8.8-link-against-libnotify.patch -# Only glib.h can be included and g_thread_init should no longer be used -Patch54: xchat-2.8.8-glib.patch -# http://sourceforge.net/p/xchat/bugs/1504/ -Patch55: xchat-2.8.8-hires-icons.patch -# http://sourceforge.net/p/xchat/bugs/1506/ -Patch56: xchat-2.8.8-xdg-dirs.patch -# http://sourceforge.net/p/xchat/bugs/1397/ -Patch57: xchat-2.8.8-desktop-file-name.patch -# https://bugzilla.redhat.com/show_bug.cgi?id=1091544 -Patch58: 0001-Don-t-force-the-use-of-SSLv3.patch -# https://bugzilla.redhat.com/show_bug.cgi?id=1387521 -Patch59: xchat-2.8.8-openssl-1.1.0.patch - -BuildRequires: perl-interpreter perl-devel perl-generators perl(ExtUtils::Embed) python-devel openssl-devel pkgconfig, tcl-devel -BuildRequires: GConf2-devel -BuildRequires: dbus-devel >= 0.60, dbus-glib-devel >= 0.60 -BuildRequires: glib2-devel >= 2.10.0, gtk2-devel >= 2.10.0, bison >= 1.35 -BuildRequires: gettext-devel /bin/sed -BuildRequires: libtool -BuildRequires: libntlm-devel -BuildRequires: libsexy-devel -BuildRequires: desktop-file-utils >= 0.10 -BuildRequires: libnotify-devel -# For xchat-2.8.8-link-against-libnotify.patch -BuildRequires: autoconf -BuildRequires: automake - -# For gconftool-2: -Requires(post): GConf2 >= %{gconf_version} -Requires(preun): GConf2 >= %{gconf_version} - -# For aplay: -Requires: alsa-utils - -# Ensure that a compatible libperl is installed -Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version)) - -Provides: xchat-perl = %{epoch}:%{version}-%{release} -Obsoletes: xchat-perl < %{epoch}:%{version}-%{release} -Provides: xchat-python = %{epoch}:%{version}-%{release} -Obsoletes: xchat-python < %{epoch}:%{version}-%{release} - -%description -X-Chat is an easy to use graphical IRC chat client for the X Window System. -It allows you to join multiple IRC channels (chat rooms) at the same time, -talk publicly, private one-on-one conversations etc. Even file transfers -are possible. - -This includes the plugins to run the Perl and Python scripts. - -%package tcl -Summary: Tcl script plugin for X-Chat -Group: Applications/Internet -Requires: %{name} = %{epoch}:%{version}-%{release} -%description tcl -This package contains the X-Chat plugin providing the Tcl scripting interface. - -%prep -%setup -q -# Various small fixes from CVS that are considered safe to apply to 2.8.6. -# (currently none) - -%patch12 -p0 -b .use-sysconf-to-detect-cpus -%patch35 -p1 -b .tray-icon -%patch41 -p1 -b .default-utf8 -%patch50 -p1 -b .active-channel-switch -%patch51 -p1 -b .freenode-ports -%patch52 -p1 -b .libnotify07 -%patch53 -p1 -b .link-against-libnotify -%patch54 -p0 -b .glib -%patch55 -p1 -b .hires-icons -%patch56 -p1 -b .xdg-dirs -%patch57 -p1 -b .desktop-file-name -%patch58 -p1 -b .allow-tls -%patch59 -p1 -b .openssl-1.1.0 - -sed -i -e 's/#define GTK_DISABLE_DEPRECATED//g' src/fe-gtk/*.c - -cp -p %{SOURCE1} icons/ -cp -p %{SOURCE2} icons/ -cp -p %{SOURCE3} icons/ -cp -p %{SOURCE4} icons/ -cp -p %{SOURCE5} icons/ -cp -p %{SOURCE6} icons/ -cp -p %{SOURCE7} icons/ - -%build -# Remove CVS files from source dirs so they're not installed into doc dirs. -find . -name CVS -type d | xargs rm -rf - -export CFLAGS="$RPM_OPT_FLAGS $(perl -MExtUtils::Embed -e ccopts)" -export LDFLAGS=$(perl -MExtUtils::Embed -e ldopts) - -# For xchat-2.8.8-link-against-libnotify.patch -./autogen.sh - -%configure --disable-textfe \ - --enable-gtkfe \ - --enable-openssl \ - --enable-python \ - --enable-tcl=%{_libdir} \ - --enable-ipv6 \ - --enable-spell=libsexy \ - --enable-shm \ - --enable-ntlm - -# gtkspell breaks Input Method commit with ENTER - -make %{?_smp_mflags} - - -%install -%{__rm} -rf $RPM_BUILD_ROOT -%{__make} install DESTDIR=$RPM_BUILD_ROOT GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL=1 - -# Get rid of libtool archives -%{__rm} -f $RPM_BUILD_ROOT%{_libdir}/xchat/plugins/*.la - -# Install the .desktop file properly -%{__rm} -f $RPM_BUILD_ROOT%{_datadir}/applications/xchat.desktop -desktop-file-install --vendor="" \ - --dir $RPM_BUILD_ROOT%{_datadir}/applications \ - --add-category=IRCClient \ - --add-category=GTK xchat.desktop - -# Register as an application to be visible in the software center -# -# NOTE: It would be *awesome* if this file was maintained by the upstream -# project, translated and installed into the right place during `make install`. -# -# See http://www.freedesktop.org/software/appstream/docs/ for more details. -# -mkdir -p $RPM_BUILD_ROOT%{_datadir}/appdata -cat > $RPM_BUILD_ROOT%{_datadir}/appdata/%{name}.appdata.xml < - - - - xchat.desktop - CC0-1.0 - -

- XChat is an Internet Relay Chat (IRC) client. - It allows you to join multiple IRC channels at the same time, which you can view - and browse using tabs or a tree-like interface. - You can use XChat to publicly chat with people in a channel, and to have private - one-on-one conversations. - You can even transfer files with XChat! -

-

- The client includes nick completion, alerts for mentions, logging functionality, - and several customization options for fonts, sounds and colors. -

-
- http://xchat.org/ - - https://raw.githubusercontent.com/hughsie/fedora-appstream/master/screenshots-extra/xchat/a.png - - -
-EOF - -%find_lang %{name} - -# do not Provide plugins .so -%define _use_internal_dependency_generator 0 -%{__cat} << \EOF > %{name}.prov -#!%{_buildshell} -%{__grep} -v %{_docdir} - | %{__find_provides} $* \ - | %{__sed} '/\.so\(()(64bit)\)\?$/d' -EOF -%define __find_provides %{_builddir}/%{name}-%{version}/%{name}.prov -%{__chmod} +x %{__find_provides} - - -%post -# Install schema -export GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source` -gconftool-2 --makefile-install-rule /etc/gconf/schemas/apps_xchat_url_handler.schemas >& /dev/null || : - -%postun -if [ $1 -eq 0 ] ; then - /bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null - /usr/bin/gtk-update-icon-cache -f %{_datadir}/icons/hicolor &>/dev/null || : -fi - -%posttrans -/usr/bin/gtk-update-icon-cache -f %{_datadir}/icons/hicolor &>/dev/null || : - -%clean -%{__rm} -rf $RPM_BUILD_ROOT - -%files -f %{name}.lang -%defattr(-,root,root) -%doc README ChangeLog -%doc plugins/plugin20.html plugins/perl/xchat2-perl.html -%{_bindir}/xchat -%dir %{_libdir}/xchat -%dir %{_libdir}/xchat/plugins -%{_libdir}/xchat/plugins/perl.so -%{_libdir}/xchat/plugins/python.so -%{_datadir}/appdata/%{name}.appdata.xml -%{_datadir}/applications/xchat.desktop -%{_datadir}/icons/hicolor/*/apps/xchat.png -%{_datadir}/pixmaps/* -%{_sysconfdir}/gconf/schemas/apps_xchat_url_handler.schemas -%{_datadir}/dbus-1/services/org.xchat.service.service - -%files tcl -%defattr(-,root,root) -%{_libdir}/xchat/plugins/tcl.so - -%changelog -* Thu Aug 03 2017 Fedora Release Engineering - 1:2.8.8-37 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild - -* Thu Jul 27 2017 Fedora Release Engineering - 1:2.8.8-36 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild - -* Mon Jun 26 2017 Debarshi Ray - 1:2.8.8-35 -- Port to OpenSSL 1.1.0 (#1387521) - -* Sun Jun 04 2017 Jitka Plesnikova - 1:2.8.8-34 -- Perl 5.26 rebuild - -* Sat Feb 11 2017 Fedora Release Engineering - 1:2.8.8-33 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild - -* Tue May 17 2016 Jitka Plesnikova - 1:2.8.8-32 -- Perl 5.24 rebuild - -* Fri Feb 05 2016 Fedora Release Engineering - 1:2.8.8-31 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild - -* Fri Jun 19 2015 Fedora Release Engineering - 1:2.8.8-30 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild - -* Fri Jun 05 2015 Jitka Plesnikova - 1:2.8.8-29 -- Perl 5.22 rebuild - -* Thu Mar 26 2015 Richard Hughes - 1:2.8.8-28 -- Add an AppData file for the software center - -* Wed Oct 29 2014 Debarshi Ray - 1:2.8.8-27 -- Do not force SSLv3, also allow TLSv1_X (#1091544) - -* Wed Aug 27 2014 Jitka Plesnikova - 1:2.8.8-26 -- Perl 5.20 rebuild - -* Wed Aug 20 2014 Kevin Fenzi - 1:2.8.8-25 -- Rebuild for rpm bug 1131892 - -* Mon Aug 18 2014 Fedora Release Engineering - 1:2.8.8-24 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild - -* Sun Jun 08 2014 Fedora Release Engineering - 1:2.8.8-23 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild - -* Wed May 21 2014 Jaroslav Škarvada - 1:2.8.8-22 -- Rebuilt for https://fedoraproject.org/wiki/Changes/f21tcl86 - -* Sun Aug 04 2013 Fedora Release Engineering - 1:2.8.8-21 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild - -* Wed Jul 17 2013 Petr Pisar - 1:2.8.8-20 -- Perl 5.18 rebuild - -* Mon Jun 10 2013 Debarshi Ray - 1:2.8.8-19 -- Use XDG_CONFIG_HOME instead of home for config files - (http://sourceforge.net/p/xchat/bugs/1506/) -- Use name and generic name correctly in desktop file - (http://sourceforge.net/p/xchat/bugs/1397/) - -* Fri Jun 07 2013 Debarshi Ray - 1:2.8.8-18 -- Add hi-res icons (http://sourceforge.net/p/xchat/bugs/1504/) - -* Fri Feb 15 2013 Fedora Release Engineering - 1:2.8.8-17 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild - -* Tue Nov 27 2012 Debarshi Ray - 1:2.8.8-16 -- Make sure default settings work with gnome-shell (#880672) - -* Sun Jul 22 2012 Fedora Release Engineering - 1:2.8.8-15 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild - -* Mon Jun 11 2012 Petr Pisar - 1:2.8.8-14 -- Perl 5.16 rebuild - -* Sat Feb 25 2012 Bruno Wolff III - 1:2.8.8-13 -- Adjust to glib changes so that xchat will build again - -* Sat Jan 14 2012 Fedora Release Engineering - 1:2.8.8-12 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild - -* Tue Dec 06 2011 Adam Jackson - 1:2.8.8-11 -- Rebuild for new libpng - -* Fri Jun 17 2011 Marcela Mašláňová - 1:2.8.8-10 -- Perl mass rebuild - -* Thu Apr 07 2011 Christopher Aillon - 1:2.8.8-9 -- Link against libnotify (#693362) - -* Thu Apr 07 2011 Christopher Aillon - 1:2.8.8-8 -- Update the dynamic libnotify check for the newer soname (#693362) - -* Mon Feb 07 2011 Fedora Release Engineering - 1:2.8.8-7 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild - -* Fri Dec 10 2010 Kevin Kofler - 1:2.8.8-6 -- Requires: alsa-utils for aplay (#661957) - -* Mon Nov 15 2010 Owen Taylor - 1:2.8.8-5 -- Add patch to work with libnotify-0.7 - -* Tue Jul 27 2010 Mamoru Tasaka - 1:2.8.8-4 -- Rebuild against python 2.7 - -* Thu Jun 03 2010 Kevin Kofler - 1:2.8.8-3 -- Rebuild again for perl-5.12.0 - -* Thu Jun 03 2010 Kevin Kofler - 1:2.8.8-2 -- --enable-ntlm (no longer enabled by default) - -* Thu Jun 03 2010 Kevin Kofler - 1:2.8.8-1 -- Update to 2.8.8 (#597735) -- Use xz tarball (new in 2.8.8) -- Drop smallfixes, redhat-desktop (remaining part), shm-pixmaps and - connect-mnemonic patches (all fixed upstream) - -* Wed Jun 02 2010 Marcela Maslanova - 1:2.8.6-18 -- Mass rebuild with perl-5.12.0 - -* Wed Apr 21 2010 Kevin Kofler - 1:2.8.6-17 -- Add port numbers for Freenode (Debarshi Ray) - -* Fri Apr 09 2010 Rudolf Kastl - 1:2.8.6-16 -- Added IRCClient .desktop file subcategory (#485306) -- Added GTK .desktop file subcategory -- Added curly brackets to the name macro for consistency. - -* Wed Dec 16 2009 Kevin Fenzi - 1:2.8.6-15 -- Add patch to allow switching to next channel with activity. - -* Mon Dec 7 2009 Stepan Kasal - 1:2.8.6-14 -- rebuild against perl 5.10.1 - -* Thu Sep 10 2009 Christopher Aillon - 1:2.8.6-13 -- Drop the antiquated OPN reference - -* Fri Aug 21 2009 Tomas Mraz - 1:2.8.6-12 -- rebuilt with new openssl - -* Mon Jul 27 2009 Fedora Release Engineering - 1:2.8.6-11 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild - -* Sat Jul 18 2009 Kevin Kofler - 1:2.8.6-10 -- Fixed patch for the "C_onnect" issue (#512034, Edward Sheldrake) - -* Thu Jul 16 2009 Kevin Kofler - 1:2.8.6-9 -- Fix literal underscore in "C_onnect" button (#512034, Matthias Clasen) - -* Mon Jun 29 2009 Kevin Kofler - 1:2.8.6-8 -- Change Name in xchat.desktop to XChat IRC (#293841) - -* Thu Feb 26 2009 Fedora Release Engineering - 1:2.8.6-7 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild - -* Tue Feb 10 2009 Kevin Kofler - 1:2.8.6-6 -- fix filtering of Provides on lib64 architectures - -* Fri Jan 16 2009 Kevin Kofler - 1:2.8.6-5 -- rebuild for new OpenSSL - -* Sun Nov 30 2008 Ignacio Vazquez-Abrams - 1:2.8.6-4 -- Rebuild for Python 2.6 - -* Mon Aug 11 2008 Kevin Kofler - 1:2.8.6-3 -- rebuild for fixed redhat-rpm-config (#450271) - -* Mon Jul 14 2008 Kevin Kofler - 1:2.8.6-2 -- apply xc286-smallfixes.diff from upstream -- don't #define GTK_DISABLE_DEPRECATED (fixes build against current GTK+) - -* Sun Jun 15 2008 Kevin Kofler - 1:2.8.6-1 -- update to 2.8.6 -- drop upstream patches (already applied in 2.8.6) -- set default charset to UTF-8 (2.8.6 changed it to Latin1) - -* Thu May 22 2008 Kevin Kofler - 1:2.8.4-16 -- fix more bugs in xchat-2.8.4-shm-pixmaps.patch (#282691) - -* Tue Apr 1 2008 Kevin Kofler - 1:2.8.4-15 -- remove --disable-panel which has been ignored since 2.0.0 -- add missing BR libntlm-devel (thanks to Karsten Hopp) - -* Mon Mar 3 2008 Tom "spot" Callaway - 1:2.8.4-14 -- rebuild for new perl - -* Mon Feb 18 2008 Christopher Aillon - 1:2.8.4-13 -- Rebuild to celebrate my birthday (and GCC 4.3) - -* Tue Feb 5 2008 Tom "spot" Callaway - 1:2.8.4-12 -- rebuild for new perl - -* Sat Jan 19 2008 Kevin Kofler - 1:2.8.4-11 -- fix bug in xchat-2.8.4-shm-pixmaps.patch (Adam Jackson, #429218) - -* Thu Jan 3 2008 Christopher Aillon 1:2.8.4-10 -- Rebuild - -* Thu Dec 20 2007 Adam Jackson 1:2.8.4-9 -- xchat-2.8.4-shm-pixmaps.patch: MIT-SHM pixmaps are optional, and when - using EXA they are not available. Check that the server supports them - before trying to create them so we don't crash. - -* Wed Dec 19 2007 Kevin Kofler - 1:2.8.4-8 -- apply xc284-fix-scrollbfdleak.diff from upstream - -* Wed Dec 5 2007 Christopher Aillon - 1:2.8.4-7 -- Fix the icon key in the .desktop file to validate - -* Sat Oct 13 2007 Kevin Kofler - 1:2.8.4-6 -- drop obsolete xchat-2.4.4-unrealize.patch (fixed upstream for a while) -- drop broken xchat-2.4.3-im_context_filter_keypress.patch (#295331) - -* Wed Sep 26 2007 Kevin Kofler - 1:2.8.4-5 -- apply xc284-improvescrollback.diff from upstream - -* Thu Aug 23 2007 Remi Collet - 1:2.8.4-4.fc8.1 -- F-8 rebuild (BuildID) - -* Sat Aug 11 2007 Kevin Kofler - 1:2.8.4-4 -- add missing BR perl(ExtUtils::Embed) - -* Fri Aug 3 2007 Kevin Kofler - 1:2.8.4-3 -- specify GPL version in License tag - -* Tue Jul 10 2007 Kevin Kofler - 1:2.8.4-2 -- apply xc284-scrollbmkdir.diff from upstream - -* Wed Jul 4 2007 Kevin Kofler - 1:2.8.4-1 -- update to 2.8.4 -- drop xc282-fixtrayzombies.diff (already in 2.8.4) -- rebase redhat-desktop and tray-icon patches - -* Fri Jun 22 2007 Kevin Kofler - 1:2.8.2-12 -- install the .desktop file with --vendor="" to keep the old name - -* Thu Jun 21 2007 Kevin Kofler - 1:2.8.2-11 -- add missing BR desktop-file-utils - -* Thu Jun 21 2007 Kevin Kofler - 1:2.8.2-10 -- remove Application; and X-Red-Hat-Extras; categories from .desktop file - (merge review #226551) -- install the .desktop file properly (merge review #226551) - -* Tue Jun 12 2007 Kevin Kofler - 1:2.8.2-9 -- build against system libsexy instead of static sexy-spell-entry now that this - is possible (Core-Extras merge) - -* Sat Jun 2 2007 Kevin Kofler - 1:2.8.2-8 -- disable tray icon by default (#241923) - -* Thu May 31 2007 Kevin Kofler - 1:2.8.2-7 -- revert to redhat-desktop patch pending further discussion - -* Thu May 31 2007 Kevin Kofler - 1:2.8.2-6 -- apply xc282-fixtrayzombies.diff from upstream - -* Wed May 30 2007 Kevin Kofler - 1:2.8.2-5 -- remove Requires: gtkspell as gtkspell is not currently being used - -* Mon May 28 2007 Kevin Kofler - 1:2.8.2-4 -- set explicit libdir for Tcl so it's found on lib64 arches (Remi Collet) -- move Tcl plugin into subpackage - (not an incompatible change as this was not built in f7-final at all) - -* Mon May 28 2007 Kevin Kofler - 1:2.8.2-3 -- use versioned Provides/Obsoletes to allow future package split - -* Mon May 28 2007 Kevin Kofler - 1:2.8.2-2 -- merge updates by Remi Collet and Marius Feraru (#224180) -- mention Tcl in description -- add release and user name to buildroot -- follow desktop-entry-spec on Name and GenericName as required by the Packaging - Guidelines -- drop BR gtkspell-devel as it's not currently used - -* Thu Apr 5 2007 Remi Collet - 1:2.8.2-1.fc6.remi -- update to 2.8.2 - -* Sat Mar 24 2007 Matthias Clasen - 1:2.6.6-9 -- Own /usr/lib/xchat (#166731) - -* Thu Jan 25 2007 Marius Feraru - 1:2.8.0-1.n0i.1 -- version 2.8.0 -- disabled some patches: nonblock, locale (fi, es) -- enabled fast tinting -- fixed "exchant" typo -- switched to using the "make install" (DESTDIR works) -- simplified gconf schema disabling method -- dropped plugins mover -- updated "Get rid of static libs" -- dropped xchat-remote -- updated build requirements -- dropped "default-webbrowser" patches (xchat tries to do it better now) -- do not provide "perl.so", "python.so", etc -- own everything under %%{_libdir}/xchat -- converted spec file to UTF8 -- fixed desktop entry category (dropping "Application") -- keep plugins documentation - -* Tue Jan 16 2007 Remi Collet - 1:2.8.0-2.fc6.remi -- add Provides/Osboletes for extensions (split RPM available on xchat.org). -- longer description -- enable tcl extension -- Requires gtk >= 2.10.0 - -* Mon Jan 15 2007 Remi Collet - 1:2.8.0-1.fc6.remi -- update to 2.8.0 -- add upstream patches (xc280-fix-back.diff, xc280-fix-ja.diff) - -* Fri Nov 3 2006 Matthias Clasen - 1:2.6.6-8 -- Silence %%pre (#213838) - -* Wed Oct 18 2006 Matthias Clasen - 1:2.6.6-7 -- Fix scripts according to packaging guidelines - -* Tue Oct 17 2006 Matthias Clasen - 1:2.6.6-6 -- Tighten up Requires (#203813) - -* Sat Oct 7 2006 David Woodhouse - 1:2.6.6-5 -- Fix nonblocking SSL socket behaviour - -* Mon Aug 28 2006 Warren Togami - 1:2.6.6-4 -- add upstream 2.6.6 es patch - -* Wed Aug 23 2006 Warren Togami - 1:2.6.6-3 -- enable optional spell checking if you install enchant - because gtkspell is currently unusable (#201116) - -* Thu Aug 17 2006 Warren Togami - 1:2.6.6-2 -- disable gtkspell because it breaks Input Method commit -- apply upstream fi patch - -* Wed Aug 2 2006 Marc Deslauriers - 1:2.6.6-1 -- Update to 2.6.6 -- Removed upstreamed dbus patch -- Enabled gtkspell support - -* Wed Jul 19 2006 Matthias Clasen - 1:2.6.0-6 -- Rebuild against dbus - -* Mon May 22 2006 Jesse Keating - 1:2.6.0-5 -- Adding missing buildreq (bz:191577, thanks Paul F.) - -* Sun Feb 12 2006 Christopher Aillon - 1:2.6.0-4 -- Rebuild - -* Tue Feb 07 2006 Jesse Keating - 1:2.6.0-3.2 -- rebuilt for new gcc4.1 snapshot and glibc changes - -* Fri Dec 09 2005 Jesse Keating - 1:2.6.0-3.1 -- rebuilt - -* Thu Dec 01 2005 John (J5) Palmieri - 1:2.6.0-3 -- rebuild for new dbus - -* Tue Nov 15 2005 Florian La Roche 1:2.6.0-2 -- Require(post): GConf2 - -* Thu Nov 10 2005 Christopher Aillon 1:2.6.0-1 -- Update to 2.6.0 - -* Wed Nov 9 2005 Christopher Aillon 1:2.4.5-2 -- Rebuild against newer openssl - -* Mon Sep 19 2005 Christopher Aillon 1:2.4.5-1 -- X-Chat 2.4.5 - -* Wed Aug 17 2005 Matthias Clasen 1:2.4.4-3 -- Fix a bug that could lead to occasional crashes - -* Mon Aug 15 2005 Christopher Aillon 1:2.4.4-2 -- Rebuild - -* Sun Jun 26 2005 Christopher Aillon 1:2.4.4-1 -- Update to xchat-2.4.4 - -* Sun May 15 2005 Warren Togami 1:2.4.3-3 -- Prevent interception of down arrow during Input Method (#144588 tagoh) - -* Thu Apr 14 2005 Warren Togami 1:2.4.3-2 -- fix plugins on lib64 (#113188 Ville Skytta) - -* Sun Apr 03 2005 Warren Togami 1:2.4.3-1 -- 2.4.3, use perl MODULE_COMPAT - -* Mon Mar 28 2005 Christopher Aillon 1:2.4.2-3 -- Fix crash when right clicking users whose away msg is unknown. - -* Fri Mar 25 2005 Christopher Aillon 1:2.4.2-2 -- Add user's away message to right click menu, if known - -* Thu Mar 17 2005 Christopher Aillon 1:2.4.2-1 -- Update to 2.4.2 - -* Sat Mar 5 2005 Christopher Aillon 1:2.4.1-4 -- Rebuild against GCC 4.0 - -* Tue Jan 18 2005 Chip Turner 1:2.4.1-3 -- rebuild for new perl - -* Tue Jan 4 2005 Christopher Aillon 1:2.4.1-2 -- Add Dan Reed's CTCP patch to support multiline messages (#136545) - -* Tue Nov 23 2004 Christopher Aillon 1:2.4.1-1 -- Update to 2.4.1 - -* Mon Sep 20 2004 Daniel Reed 1:2.4.0-3 -- #132967 Remove GenericName - -* Tue Aug 17 2004 Daniel Reed 1:2.4.0-2 -- #125846 Change xchat.desktop names to "IRC" - -* Sun Aug 15 2004 Christopher Aillon 1:2.4.0-1 -- Update to 2.4.0 -- Fix simplify-to-use-gnome-open and simplify-to-use-htmlview patches - to not conflict every time upstream modifies the urlhandler list. -- Remove focus and tab completion patches (no longer needed) - -* Mon Jul 26 2004 Christopher Aillon 1:2.0.10-3 -- Update upstream patch to fix tab completion crash -- Add upstream patch to fix focus crash on some window managers. - -* Fri Jul 9 2004 Mike A. Harris 1:2.0.10-2 -- Added upstream xc2010-fixtabcomp.diff patch to fix SEGV in tab completion - -* Sat Jul 03 2004 Christopher Aillon 1:2.0.10-1 -- Update to 2.0.10 - -* Wed Jun 23 2004 Christopher Aillon 1:2.0.9-1 -- Update to 2.0.9 -- Fixed the URL handler menu patches to apply. - -* Tue Jun 15 2004 Elliot Lee -- rebuilt - -* Tue Mar 9 2004 Mike A. Harris 1:2.0.7-5 -- Bump and rebuild for Fedora devel, to sync up with new perl -- Remove require_autoconf conditional, and conditionalized autoconf BuildRequires - -* Fri Mar 5 2004 Mike A. Harris 1:2.0.7-4 -- Added xchat-2.0.7-simplify-to-use-gnome-open-for-default-webbrowser.patch - and xchat-2.0.7-simplify-to-use-htmlview-for-default-webbrowser.patch to - simplify the default URL handler menu to point only to the default system - web browser by using gnome-open on Fedora Core 2 and later, or htmlview - on earlier OS releases. This is added to improve user friendliness (#82331) - -* Tue Mar 02 2004 Elliot Lee -- rebuilt - -* Tue Feb 17 2004 Mike A. Harris 1:2.0.7-1.FC1.0 -- Rebuild xchat 2.0.7-3 as 2.0.7-1.FC1.0 for release as an enhancement erratum - for Fedora Core 1. Also fixes AMD64 64bit issues reported in bug (#114237) - -* Fri Feb 13 2004 Elliot Lee 1:2.0.7-3 -- rebuilt - -* Mon Jan 26 2004 Jeremy Katz 1:2.0.7-2 -- rebuild for new perl version - -* Sat Jan 10 2004 Mike A. Harris 1:2.0.7-1 -- Updated to xchat 2.0.7 -- Removed already integrated patches, including: xc204-fixperlui.diff, - xchat-2.0.4-screen-position-fix.patch, xchat-2.0.4-exec-shield-GNU-stack.patch -- Added a new rpm macro require_autoconf, which is disabled (0) by default, as - it seems no longer necessary to run autoconf prior to ./configure, so we no - longer need to BuildRequire autoconf 2.54 either. - -* Fri Oct 24 2003 Mike A. Harris 2.0.4-4 -- Added xchat-2.0.4-exec-shield-GNU-stack.patch from Arjan, to allow xchat to - be be protected by exec shield if the system has exec-shield enabled. - -* Fri Sep 19 2003 Mike A. Harris 2.0.4-3.EL -- Rebuilt 2.0.4-3 for Taroon as 2.0.4-3.EL - -* Fri Sep 19 2003 Mike A. Harris 2.0.4-3 -- Added xchat-2.0.4-screen-position-fix.patch to fix problem where xchat - doesn't remember it's screen location between invocations (#103896) - -* Sat Aug 30 2003 Mike A. Harris 2.0.4-2 -- Updated xchat-2.0.4-redhat-desktop-file.patch - -* Thu Aug 28 2003 Mike A. Harris 2.0.4-1 -- Updated to xchat 2.0.4 -- Removed unneeded patches xc203-fixtint.diff, xc203-fix-cps.diff -- Added upstream patch xc204-fixperlui.diff -- Updated autoconf dependancy to version 2.54 and greater as xchat wont - compile otherwise. Meaning Red Hat Linux 9 or higher is needed. - -* Tue Jul 22 2003 Nalin Dahyabhai 2.0.3-4 -- rebuild - -* Mon Jul 14 2003 Chip Turner -- rebuild for new perl 5.8.1 - -* Thu Jul 10 2003 Mike A. Harris 2.0.3-2 -- Added xc203-fix-cps.diff patch from upstream to fix cps calculation -- TCL plugin was getting built even though we don't want it, so now we pass - --enable-tcl or --disable-tcl explicitly, depending on with_tclplugin macro - -* Mon Jun 30 2003 Mike A. Harris 2.0.3-1.EL -- Rebuilt 2.0.3-1 as 2.0.3-1.EL for Red Hat Enterprise Linux development - -* Mon Jun 30 2003 Mike A. Harris 2.0.3-1 -- Updated to xchat 2.0.3 -- Dropped old patches: xc202-fixdetach.diff, xc202-fixurlg.diff, - xchat-2.0.2-lib64-cleanup-for-python.patch -- Added upstream patch: xc203-fixtint.diff - -* Wed Jun 04 2003 Elliot Lee -- rebuilt - -* Thu May 29 2003 Mike A. Harris 2.0.2-7 -- Added back BuildRequires autoconf, and call autoconf prior to ./configure - as it seems to make xchat build successfully. Have not bothered to figure - out why calling autoconf is needed. Something for a rainy day. - -* Thu May 29 2003 Mike A. Harris 2.0.2-6 -- Removed gnome-libs BuildRequires as it is bogus now -- Removed autoconf BuildRequires and usage, as it should be unneeded -- Added new BuildRequires on gettext, bison >= 1.35, glib2-devel >= 2.0.3, - gtk2-devel >= 2.0.3, /bin/sed (#91676 - Warren Togami) -- Removed dead patches: xchat-1.8.9-perlcrypt.patch, xchat-1.8.9-korean-fontset.patch - -* Wed May 21 2003 Mike A. Harris 2.0.2-5 -- Removed xchat.desktop file, as it was earlier replacedwith a patch -- Converted xchat-2.0.2-redhat-desktop-file.patch to be UTF-8 clean now, - instead of the various random legacy mix of encodings it was, updating - the following: es, ko, uk, zh_TW - -* Tue May 20 2003 Mike A. Harris 2.0.2-4 -- Replace explicit perl package name-epoch-version Requires added in 2.0.2-3 - with a more robust and generic solution of querying perl for the archlibexp - dir during building, and requiring it instead - -* Tue May 20 2003 Bill Nottingham 2.0.2-3 -- rebuild against new (old?) perl, add epoch to dependency - -* Sat May 17 2003 Mike A. Harris 2.0.2-1 -- Updated to new xchat 2.0.2 based on GTK2 -- Dropped unneeded patches xchat-1.8.1-konqueror.patch, - xchat-1.8.4-fix-USE_GNOME.patch -- Updated xchat-2.0.2-freenode.patch to refer to Openprojects.net -- Removed doc/xchat.sgml doc/*.html scripts-python scripts-perl from %%doc -- Added xchat-2.0.2-redhat-desktop-file.patch to patch the supplied xchat - desktop file, instead of replacing it and trying to stay in sync -- Added xchat-2.0.2-lib64-cleanup-for-python.patch which fixes build problems - on lib64 archs, and replaces xchat-multilib.patch -- Added with_tclplugin macro and default it to disabled - -* Mon Mar 17 2003 Mike A. Harris 1.8.11-8 -- Added xchat-1.8.11-nickall.patch which was written by Fabio Olive Leite, - sent to me by Rik van Riel - -* Wed Feb 19 2003 Bill Nottingham 1.8.11-7 -- ship single desktop in %{_datadir}/applications, not /etc/X11/applnk - -* Fri Jan 31 2003 Mike A. Harris 1.8.11-6 -- Added xchat-1.8.11-freenode.patch to rename all openprojects.net entries - to freenode.net in the default server list. Patch courtesy of Dan Burcaw - from bug (#81704) - -* Wed Jan 22 2003 Mike A. Harris 1.8.11-5 -- Removed double .desktop file (#81874,82315) - -* Wed Jan 22 2003 Tim Powers 1.8.11-4 -- rebuilt - -* Tue Jan 7 2003 Mike A. Harris 1.8.11-3 -- Add bugfix from xchat.org xc1811fixststint.diff - -* Tue Jan 7 2003 Mike A. Harris 1.8.11-2 -- Remove CVS files from source dirs so they're not installed into doc dirs. - -* Tue Jan 7 2003 Mike A. Harris 1.8.11-1 -- Update to xchat 1.8.11 bugfix release, fixes various runtime crashes -- Remove now included patches: xchat-1.8.10-urlhandler-open-in-new-tab.patch, - xchat-1.8.10-beep-beep-beep.patch - -* Tue Jan 7 2003 Nalin Dahyabhai 1.8.10-13 -- Pick up OpenSSL configuration from pkgconfig, if available -- Add openssl-devel and pkgconfig as buildreqs - -* Wed Dec 11 2002 Elliot Lee 1.8.10-12 -- Fix broken libpython path on multilibbed systems (patch13) -- _smp_mflags - -* Tue Nov 26 2002 Mike A. Harris 1.8.10-11 -- Added xchat-1.8.10-urlhandler-open-in-new-tab.patch to offer the option of - opening a URL in a new tab of an existing browser window rather than a new - window - -* Sat Nov 23 2002 Mike A. Harris 1.8.10-10 -- Added BuildRequires: python-devel to hopefully pick up a missing dep - causing package build failure in timp's nightly builds. -- Removed dead patches -- Updated package summary and description to be more user friendly by - rewording, and removing scary words like GNOME, GTK and other irrelevance - -* Wed Nov 13 2002 Mike A. Harris 1.8.10-9 -- Made sure {_sysconfdir}/X11/applnk/Internet/xchat.desktop gets packaged -- Removed some conditional weirdness in %%files list. This may break xchat - erratum releases on Red Hat Linux 7.x. May need to be fixed in future. - -* Fri Aug 23 2002 Mike A. Harris 1.8.10-7 -- Added Requires line so that xchat requires the exact version of perl - be installed, that was used to compile it, since the embedded perl - interpreter will break, if you upgrade perl - -* Thu Aug 15 2002 Mike A. Harris 1.8.10-6 -- Fix Bill's beep beep beep bug (#71651) - -* Wed Aug 14 2002 Jonathan Blandford 1.8.10-5 -- actually install the desktop file. - -* Fri Aug 9 2002 Mike A. Harris 1.8.10-3 -- Added http://xchat.org/files/source/1.8/patches/xc1810fixme.diff to fix - bug with using /ME in a /QUERY window. (#71179) - -* Wed Aug 7 2002 Mike A. Harris 1.8.10-2 -- Updated to xchat 1.8.10 to fix a few bugs where a remote ircd could cause - the xchat client to crash. This is a bugfix only release. - -* Tue Aug 6 2002 Mike A. Harris 1.8.9-10 -- Added Korean fontset support to fix bug (#69771) - -* Mon Aug 5 2002 Mike A. Harris 1.8.9-9 -- Enabled python scripting which was somehow disabled somewhere along the - line by default in upstream sources, and we missed catching it. (#70816) - -* Sun Aug 4 2002 Mike A. Harris 1.8.9-8 -- Created new-style net-xchat.desktop file (#69541) - -* Fri Jun 21 2002 Tim Powers 1.8.9-7 -- automated rebuild - -* Tue Jun 18 2002 Mike A. Harris 1.8.9-6 -- updated the package description -- Added CFLAGS and LDFLAGS export vars before configure to fix rpath problem - -* Sun May 26 2002 Tim Powers -- automated rebuild - -* Mon May 20 2002 Mike A. Harris 1.8.9-2 -- Updated to xchat 1.8.9 - -* Mon Apr 8 2002 Mike A. Harris 1.8.8-5 -- Re-enabled GNOME support due to user complaints of pixmaps missing, key - bindings, and other fairly important features no longer working. - -* Tue Mar 27 2002 Mike A. Harris 1.8.8-4 -- Disabled GNOME support since it doesn't seem too useful anyways, and forces - all xchat users to install GNOME libs even if they use KDE. (#59626) -- Updated URL and source lines in spec. - -* Wed Mar 6 2002 Mike A. Harris 1.8.8-1 -- Updated to xchat 1.8.8 - -* Tue Feb 26 2002 Mike A. Harris 1.8.7-6 -- Built in new buildroot - -* Tue Feb 5 2002 Mike A. Harris 1.8.7-5 -- Added xchat-1.8.7-use-sysconf-to-detect-cpus.patch to use glibc's sysconf() - to detect the number of processors available. - -* Mon Feb 4 2002 Mike A. Harris 1.8.7-4 -- Enabled IPv6 support as per the request for enhancement (#52124) - -* Thu Jan 24 2002 Mike A. Harris 1.8.7-3 -- Rebuilt in new build environment - -* Thu Jan 10 2002 Mike A. Harris 1.8.7-2 -- Updated to xchat 1.8.7 -- New release fixes security vulnerability in CTCP reply -- Built erratum for all supported releases (1.8.7-1.62.0, 1.8.7-1.70.0, - 1.8.7-1.71.0, 1.8.7-1.72.0) -- Removed konqueror patch as it is integrated now. - -* Sat Jan 5 2002 Mike A. Harris 1.8.6-2 -- Enabled ssl support with --enable-openssl -- Also built releases 1.72.0, 1.71.0, 1.70.0, 1.62.0 for erratum release - -* Mon Dec 10 2001 Mike A. Harris 1.8.6-1 -- Updated to xchat 1.8.6 - -* Tue Nov 13 2001 Mike A. Harris 1.8.5-1 -- Updated to xchat 1.8.5 -- Added f to rm -r in install and clean sections - -* Sun Oct 7 2001 Mike A. Harris 1.8.4-1 -- Updated to 1.8.4, now using tar.bz2 -- Removed kanjiconv-fix patch as it is integrated now -- Added xchat-1.8.4-fix-USE_GNOME.patch to fix simple ifdef USE_GNOME typo - -* Fri Jul 13 2001 Akira TAGOH 1.8.1-2 -- fixed check locale. -- don't save kanji_conv. - always check locale. however anyone can change the option from - the settings menu. - -* Thu Jul 12 2001 Havoc Pennington -- upgrade to 1.8.1 -- remove autoconnect patch since it's upstream -- remove japanese patch, upstream seems to have applied - parts of it and changelog says there's upstream support. - (this patch was pretty huge to maintain in an SRPM anyway...) -- put scripts-python scripts-perl in docs bug #28521 -- remove patch to include locale.h, gone upstream -- upgrade konqueror patch - -* Thu Jul 12 2001 Havoc Pennington -- nevermind, BuildRequires gnome-libs, that should - close #48923 - -* Thu Jul 12 2001 Havoc Pennington -- fix file list to not include absolute path "/usr/share/..." - no idea how that ever worked at all. closes #48923 - -* Mon Jun 25 2001 Karsten Hopp -- use konqueror, not kfmclient on URLs - -* Fri Feb 23 2001 Trond Eivind Glomsrød -- langify -- use %%{_tmppath} -- make it compile - -* Tue Feb 13 2001 Akira TAGOH -- Added Japanese patch. - -* Tue Feb 13 2001 Havoc Pennington -- patch that may fix autoconnections (bug 27093) - -* Mon Jan 22 2001 Havoc Pennington -- 1.6.3 -- remove patch to desktop file (Internet->Application), seems to - have gone upstream - -* Sat Dec 9 2000 Havoc Pennington -- Remove security fix which has been merged upstream -- upgrade to 1.6.1 - -* Sat Aug 19 2000 Havoc Pennington -- Don't use /bin/sh to interpret URLs from the net - -* Fri Aug 11 2000 Jonathan Blandford -- Updated Epoch - -* Thu Jul 13 2000 Prospector -- automatic rebuild - -* Mon Jun 19 2000 Havoc Pennington -- Install HTML docs - -* Fri Jun 16 2000 Preston Brown -- fix desktop entry - -* Fri May 19 2000 Havoc Pennington -- rebuild for the Winston tree, update to 1.4.2 diff --git a/xchat.svg b/xchat.svg deleted file mode 100644 index c7055d8..0000000 --- a/xchat.svg +++ /dev/null @@ -1,1802 +0,0 @@ - - - - - Pidgin - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - Jakub Steiner - - - http://jimmac.musichall.cz - - Pidgin - - - pidgin - im - instant - messaging - - - - - - - - - - - - - - - - - - - - - Hylke Bons, Lapo Calamandrei - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -