Hello community, here is the log from the commit of package licq checked in at Fri May 26 13:05:32 CEST 2006. -------- --- KDE/licq/licq.changes 2006-04-12 18:41:57.000000000 +0200 +++ licq/licq.changes 2006-05-25 16:38:39.000000000 +0200 @@ -1,0 +2,17 @@ +Thu May 25 13:07:27 CEST 2006 - lmichnovic@suse.cz + +- update to version 20060522 from svn with new features: + - switching trough tabs with mousewheel + - "copy URL" added when rightcicking on URL + - some bugfixes + +- Obsolete patches removed: qualification, mistyped, ssl_fix, + homedirslash, msn_overflow +- new patches: + - emoticons - enhances emoticons and prevent displaying them in URL + - user_picture - fix displaying black square, when no picture aviable + - unicode - fixes error when updating user info which has non utf encoding +- file licq_constants.h has changed hence config-fix.patch had to be updated + + +------------------------------------------------------------------- Old: ---- licq-1.3.2-bool.patch licq-1.3.2-datetime.patch licq-1.3.2-declaration.patch licq-1.3.2-homedirslash.patch licq-1.3.2-mistyped.patch licq-1.3.2-msn_overflow.patch licq-1.3.2-nostrip.patch licq-1.3.2-qualification.patch licq-1.3.2-ssl_fix.patch licq-1.3.2-userinfodlg.patch licq-1.3.2-viewurl.patch licq-1.3.2.tar.bz2 New: ---- licq-20060522-bool.patch licq-20060522-datetime.patch licq-20060522-declaration.patch licq-20060522-emoticons.patch licq-20060522-nostrip.patch licq-20060522-unicode.patch licq-20060522-user_picture.patch licq-20060522-userinfodlg.patch licq-20060522-viewurl.patch licq-20060522.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ licq.spec ++++++ --- /var/tmp/diff_new_pack.BbQ8A1/_old 2006-05-26 13:04:52.000000000 +0200 +++ /var/tmp/diff_new_pack.BbQ8A1/_new 2006-05-26 13:04:52.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package licq (Version 1.3.2) +# spec file for package licq (Version 20060522) # # Copyright (c) 2006 SUSE LINUX Products GmbH, Nuernberg, Germany. # This file and all modifications and additions to the pristine @@ -15,23 +15,21 @@ License: GPL Group: Productivity/Networking/ICQ Autoreqprov: on -Version: 1.3.2 -Release: 25 +Version: 20060522 +Release: 1 Summary: Linux ICQ Client -Source: %{name}-%{version}.tar.bz2 +Source: %{name}-20060522.tar.bz2 Patch1: %{name}-config-fix.patch Patch2: %{name}-assert.patch Patch3: %{name}-%{version}-bool.patch Patch4: %{name}-%{version}-nostrip.patch -Patch5: %{name}-%{version}-qualification.patch -Patch6: %{name}-%{version}-declaration.patch -Patch7: %{name}-%{version}-mistyped.patch -Patch8: %{name}-%{version}-datetime.patch -Patch9: %{name}-%{version}-userinfodlg.patch -Patch10: %{name}-%{version}-ssl_fix.patch -Patch11: %{name}-%{version}-homedirslash.patch -Patch12: %{name}-%{version}-viewurl.patch -Patch13: %{name}-%{version}-msn_overflow.patch +Patch5: %{name}-%{version}-declaration.patch +Patch6: %{name}-%{version}-datetime.patch +Patch7: %{name}-%{version}-userinfodlg.patch +Patch8: %{name}-%{version}-viewurl.patch +Patch9: %{name}-%{version}-user_picture.patch +Patch10: %{name}-%{version}-unicode.patch +Patch11: %{name}-%{version}-emoticons.patch URL: http://www.licq.org/ BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -49,7 +47,7 @@ %prep -%setup +%setup -n licq-20060522 %patch1 %patch2 -p1 %patch3 @@ -61,9 +59,6 @@ %patch9 %patch10 %patch11 -%patch12 -%patch13 -rm -rf plugins/osd/autom4te.cache %build %if %suse_version > 1001 @@ -75,6 +70,7 @@ export CXXFLAGS="$RPM_OPT_FLAGS -D_FILE_OFFSET_BITS=64 -fno-strict-aliasing" export CPPFLAGS="$RPM_OPT_FLAGS -D_FILE_OFFSET_BITS=64 -fno-strict-aliasing" %endif +make -f Makefile.cvs aclocal automake autoconf @@ -88,6 +84,7 @@ cd plugins cp -a qt-gui kde-gui cd rms + make -f Makefile.cvs aclocal automake autoconf @@ -97,6 +94,7 @@ --mandir=%{_mandir} make %{?jobs:-j%jobs} cd ../console + make -f Makefile.cvs aclocal automake autoconf @@ -106,6 +104,7 @@ --mandir=%{_mandir} make %{?jobs:-j%jobs} cd ../qt-gui + make -f Makefile.cvs aclocal automake perl am_edit {src/,share/,po/}Makefile.in @@ -117,6 +116,7 @@ --mandir=%{_mandir} make %{?jobs:-j%jobs} cd ../kde-gui + make -f Makefile.cvs aclocal automake perl am_edit {src/,share/,po/}Makefile.in @@ -129,6 +129,7 @@ --mandir=%{_mandir} make %{?jobs:-j%jobs} cd ../email + make -f Makefile.cvs aclocal -I /opt/gnome/share/aclocal automake autoconf @@ -138,6 +139,7 @@ --mandir=%{_mandir} make %{?jobs:-j%jobs} cd ../auto-reply + make -f Makefile.cvs aclocal automake autoconf @@ -147,6 +149,7 @@ --mandir=%{_mandir} make %{?jobs:-j%jobs} cd ../msn + make -f Makefile.cvs aclocal automake autoconf @@ -155,16 +158,8 @@ --libdir=%{_libdir}/licq \ --mandir=%{_mandir} make %{?jobs:-j%jobs} -cd ../osd - ACLOCAL="aclocal -I admin" autoreconf -fi - ./configure\ - --prefix=%{_prefix} \ - --libdir=%{_libdir}/licq \ - --mandir=%{_mandir} - make %{?jobs:-j%jobs} %install -rm -rf $RPM_BUILD_ROOT make DESTDIR=$RPM_BUILD_ROOT install cd plugins/rms make DESTDIR=$RPM_BUILD_ROOT install @@ -180,18 +175,16 @@ make DESTDIR=$RPM_BUILD_ROOT install cd ../msn make DESTDIR=$RPM_BUILD_ROOT install - cd ../osd - make DESTDIR=$RPM_BUILD_ROOT install cd ../.. # docs mkdir -p $RPM_BUILD_ROOT%{_prefix}/share/doc/packages/licq -rm -rf doc/CVS +#rm -rf doc/CVS install -m 644 doc/* $RPM_BUILD_ROOT%{_prefix}/share/doc/packages/licq chmod 755 `find $RPM_BUILD_ROOT%{_prefix}/share/licq -type d` %suse_update_desktop_file -i -G "ICQ Client" licq Network InstantMessaging %clean -rm -rf $RPM_BUILD_ROOT +#rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root) @@ -212,6 +205,18 @@ %exclude %{_libdir}/licq/*.*a %changelog -n licq +* Thu May 25 2006 - lmichnovic@suse.cz +- update to version 20060522 from svn with new features: +- switching trough tabs with mousewheel +- "copy URL" added when rightcicking on URL +- some bugfixes +- Obsolete patches removed: qualification, mistyped, ssl_fix, + homedirslash, msn_overflow +- new patches: +- emoticons - enhances emoticons and prevent displaying them in URL +- user_picture - fix displaying black square, when no picture aviable +- unicode - fixes error when updating user info which has non utf encoding +- file licq_constants.h has changed hence config-fix.patch had to be updated * Wed Apr 12 2006 - lmichnovic@suse.cz - fixed buffer overflow in msn plugin (msn_overflow.patch) * Mon Apr 03 2006 - lmichnovic@suse.cz ++++++ licq-1.3.2-bool.patch -> licq-20060522-bool.patch ++++++ ++++++ licq-1.3.2-datetime.patch -> licq-20060522-datetime.patch ++++++ ++++++ licq-1.3.2-declaration.patch -> licq-20060522-declaration.patch ++++++ ++++++ licq-20060522-emoticons.patch ++++++ --- plugins/qt-gui/src/emoticon.h 2006-03-10 12:24:35.000000000 +0100 +++ plugins/qt-gui/src/emoticon.h 2006-04-09 17:17:44.000000000 +0200 @@ -4,6 +4,7 @@ #include <qmap.h> #include <qstring.h> #include <qstringlist.h> +#include "emotnode.h" class CEmoticons { --- plugins/qt-gui/src/emoticon.cpp 2006-03-10 12:24:35.000000000 +0100 +++ plugins/qt-gui/src/emoticon.cpp 2006-04-09 17:19:27.000000000 +0200 @@ -23,7 +23,6 @@ { QStringList emoticon; QString file; - QRegExp reg; }; typedef std::list<struct node> node_list_t; @@ -36,6 +35,7 @@ QString theme; /* current theme */ node_list_t emoticons; + EmotNode *emoticonsTree; }; CEmoticons::CEmoticons(const char *basedir, const char *altbasedir, @@ -44,10 +44,12 @@ this->data = new struct Emoticons; data->basedir = basedir; data->altbasedir = altbasedir; + data->emoticonsTree = NULL; } CEmoticons::~CEmoticons() { + delete this->data->emoticonsTree; delete this->data; } @@ -140,52 +142,20 @@ return ret; } -static void create_regexp(QStringList &list, QRegExp ®) -{ - unsigned n = 0; - QString s = "("; - - for (QStringList::Iterator it = list.begin(); it!=list.end(); ++it) - { - if (n != 0) - s += "|"; -#if QT_VERSION < 0x030100 - // we have to implement the functionality of QRegExp::escape() - // ourself since qt 3.0.x is missing it. - // Our goal is to escape all special characters with a backslash: - // The special characters are $, (, ), *, +, ., ?, [, \, ], ^, {, | and }. - // The implementation is heavily inspired by QT QRegExp sources ;-) - - static const char *c = "\\$()*+.?[]^{}|"; - int i = 0; - QString tmp = (*it).latin1(); - while (i < (int)tmp.length()) - { - if (strstr(c, tmp.mid(i,1).latin1()) != 0) - tmp.insert( i++, "\\"); - i++; - } - s += tmp; -#else - s += QRegExp::escape(*it); -#endif - n++; - } - s += ")"; - reg = QRegExp(s); -} /*! * * \param data CDT for the CEmoticon class * \param themedir path to the theme directory * \param list list where the results are stored + * \param emoticonsTree tree where the smileys are stored * * \returns the number of loaded emoticons */ static unsigned loadTheme(const struct Emoticons *data, const QString &themedir, - node_list_t &list) + node_list_t &list, + EmotNode *emoticonsTree = NULL) { QDomDocument doc("doc"); QFile file(themedir + "/emoticons.xml"); @@ -210,13 +180,14 @@ unsigned size; node.emoticon = loadStrings(data, n.firstChild(), &size); - if (size) - { - node.file = f; - create_regexp(node.emoticon, node.reg); - list.push_back(node); - ret += size; - } + if (size) + { + node.file = f; + list.push_back(node); + if (emoticonsTree != NULL) + emoticonsTree->insert(node.emoticon, f, true); + ret += size; + } } } } @@ -240,13 +211,14 @@ QDir d1(szdir1); QDir d2(szdir2); node_list_t list; + EmotNode *emoTree = new EmotNode(); int ret = -1; unsigned n = 0; if (d1.exists()) - n = loadTheme(data, szdir1.ascii(), list); + n = loadTheme(data, szdir1.ascii(), list, emoTree); else if(d2.exists()) - n = loadTheme(data, szdir2.ascii(), list); + n = loadTheme(data, szdir2.ascii(), list, emoTree); if (n) @@ -254,7 +226,10 @@ ret = n; data->theme = theme; data->emoticons = list; + data->emoticonsTree = emoTree; } + else + delete emoTree; return ret; } @@ -326,26 +301,9 @@ void CEmoticons::ParseMessage(QString &msg) { - /** - * \todo this sucks: solution create a finite state machine to parse - * the message - */ - node_list_t::iterator iter; - struct node n; - if (data->theme != QString::null && data->theme != "None") { - QString r; - for( iter = data->emoticons.begin(); - iter != data->emoticons.end() ; iter++ ) - { - n = *iter; - for ( QStringList::Iterator it = n.emoticon.begin(); - it != n.emoticon.end(); ++it) - { - msg.replace(n.reg," <img src=\""+n.file+"\"/> "); - } - } + msg = data->emoticonsTree->replaceSmileys(msg); } } --- plugins/qt-gui/src/Makefile.am 2006-03-10 12:24:35.000000000 +0100 +++ plugins/qt-gui/src/Makefile.am 2006-04-09 20:33:12.578165592 +0200 @@ -21,7 +21,7 @@ mmlistview.h mmsenddlg.h userinfodlg.h usereventdlg.h keyrequestdlg.h \ jfcstyle.h usercodec.h reqauthdlg.h licqdialog.h userselectdlg.h \ editfilelistdlg.h emoticon.h catdlg.h phonedlg.h ownermanagerdlg.h \ - gpgkeyselect.h gpgkeymanager.h licqkimiface.h kimiface.h + gpgkeyselect.h gpgkeymanager.h licqkimiface.h kimiface.h emotnode.h licq_gui = adduserdlg.cpp authuserdlg.cpp awaymsgdlg.cpp \ refusedlg.cpp chatdlg.cpp editgrp.cpp editfile.cpp eventdesc.cpp \ @@ -34,7 +34,7 @@ mmsenddlg.cpp userinfodlg.cpp usereventdlg.cpp keyrequestdlg.cpp \ jfcstyle.cpp usercodec.cpp reqauthdlg.cpp licqdialog.cpp userselectdlg.cpp \ editfilelistdlg.cpp emoticon.cpp catdlg.cpp phonedlg.cpp \ - ownermanagerdlg.cpp gpgkeyselect.cpp gpgkeymanager.cpp + ownermanagerdlg.cpp gpgkeyselect.cpp gpgkeymanager.cpp emotnode.cpp licq_qt_gui_la_SOURCES = $(licq_gui) licq_kde_gui_la_SOURCES = $(licq_gui) wrap_kde_malloc.cpp \ --- plugins/qt-gui/src/emotnode.h 2005-08-09 09:06:25.000000000 +0200 +++ plugins/qt-gui/src/emotnode.h 2006-04-06 00:23:05.000000000 +0200 @@ -0,0 +1,71 @@ +#ifndef EMOTNODE_H +#define EMOTNODE_H + +#include <qstring.h> +#include <qstringlist.h> + +#include <string> +#include <map> + + +class EmotNode{ +private: + struct file_child_t { + QString m_file; //every node can have a filename (image) + EmotNode* mp_child; //every node may link to other nodes + + }; + + typedef std::map<QChar,file_child_t> node_t; + typedef std::map<QChar,file_child_t>::const_iterator node_iter_t; + + node_t m_node; //m_node[symbol_x], m_node[symbol_y] are all nodes + //example with smiley :-) + //m_node[:].mp_child[-].mp_child[)].m_file = smiley.jpg + + /** + * Check whether at a given position in a message a smiley can be found. + * @param msg message with smileys + * @param spos position of possible smiley + * @param endPos returns the end position of a smiley if one is found + * @return If a smiley was found then the filename is returned. Else NULL ist returned. + */ + QString searchSmileyInTree(QString msg, int spos, int &endPos); + + /** + * Parse the msg for contents which should not be replaced with smileys + * @param msg + */ + QString createSpecialContentSafe(QString msg); + +public: + EmotNode(); + EmotNode(QString icons, QString filename); + + ~EmotNode(); + + /** + * Insert one smiley with all his representatives. + * @param iconList list of representatives of the smiley + * @param filename name of image file + * @param doEncode (optional, default=false) encode the smileys e.g. >:) will be >:) + */ + void insert(QStringList iconList, QString filename, bool doEncode); + + /** + * Insert a new smiley in the tree. + * @param icons the test of the smiley + * @param filename the image name of the smiley + * @param depth used internally because of recursive behaviour + */ + void insert(QString icons, QString filename, unsigned int depth = 0); + + /** + * Replace all smileys in a message and return the resulting message. + * @param msg message with smileys to replace + * @return message with replaced smileys + */ + QString replaceSmileys(QString msg); +}; + +#endif --- plugins/qt-gui/src/emotnode.cpp 2005-08-09 09:06:25.000000000 +0200 +++ plugins/qt-gui/src/emotnode.cpp 2006-04-09 19:06:43.549017928 +0200 @@ -0,0 +1,221 @@ +/* Licq - A ICQ Client for Unix + + Copyright (C) 2006 Martin Garbe <martin.garbe@gmx.de> + + 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., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ +/* + * \file Build a tree with smiley symbols. Every node has one symbol of + * a smiley and maybe a filename to an image. There is a filename + * if the symbols on the path from the root node to this node + * builds a smiley. + */ + +#include <qregexp.h> +#include <qstylesheet.h> + +#include "licq_log.h" + +#include "emotnode.h" + + +EmotNode::EmotNode() +{ + +} + + +/* + * Insert one smiley with all his representatives. + */ +void EmotNode::insert(QStringList iconList, QString filename, bool doEncodeSmiley = false) +{ + for (QStringList::Iterator iter = iconList.begin(); iter != iconList.end(); iter++) + { + if (doEncodeSmiley) + { + insert(QStyleSheet::escape(*iter), filename); + } + else + { + insert(*iter, filename); + } + } +} + + +/* + * Insert a new smiley in the tree. + */ +void EmotNode::insert(QString icons, QString filename, unsigned int depth ) +{ + QChar sym = icons.at(depth); + node_iter_t iter = m_node.find(sym); + if (iter != m_node.end()) + { + //symbol already exists here + if ((depth+1) == icons.length()) + { + //if end of symbol is reached then insert file + m_node[sym].m_file = filename; + } + else + { + //end of symbol not reached -> go deeper + m_node[sym].mp_child->insert(icons, filename, depth+1); + } + } + else + { + //add symbol here + m_node[sym].mp_child = new EmotNode(); + if ((depth+1) == icons.length()) + { + //end of smiley reached, insert image here + m_node[sym].m_file = filename; + } + else + { + m_node[sym].m_file = ""; + m_node[sym].mp_child->insert(icons, filename, depth+1); + } + } +} + + +// +//Check whether at a given position in a message a smiley can be found. +// +QString EmotNode::searchSmileyInTree(QString msg, int spos, int &endPos) +{ + QChar curSym = msg.at(spos); + node_iter_t iter = m_node.find(curSym); + if (iter != m_node.end()) + { + //found symbol in node, so go deeper + QString s = m_node[curSym].mp_child->searchSmileyInTree(msg, spos+1, endPos); + if (s == NULL) + { + //is here any file for the smiley? + if (m_node[curSym].m_file.length() != 0) + { + endPos = spos; + return m_node[curSym].m_file; + } + } + else + { + return s; + } + } + return NULL; +} + + +/* + * Replace all smileys in a message and return the resulting message. + */ +QString EmotNode::replaceSmileys(QString msg) +{ + int pos = 0; + int tmppos; + int max = msg.length()+1; + int spos = -1; //smallest position + int nextToCopyPos = 0; //saves the next position to copy from msg to newMsg + QString contentSafe; + QString newMsg = ""; + + contentSafe = createSpecialContentSafe(msg); + + while (spos != max) + { + spos = max; + //search for the first possible smiley symbol + for ( node_iter_t i = m_node.begin(); i != m_node.end(); ++i) + { + tmppos = contentSafe.find(i->first, pos); + if (tmppos != -1 && tmppos < spos) + { + //found a position, remember it and try to find one more left + spos = tmppos; + } + } + if (spos != max) + { + //check if at this position is a smiley in msg + int endPos = -1; + QString f = searchSmileyInTree(contentSafe, spos, endPos); + if (f != NULL) + { + //replace + newMsg.append(msg.mid(nextToCopyPos, spos-nextToCopyPos) + " <img src=\"" + f + "\"/> "); + nextToCopyPos = endPos + 1; + pos = endPos + 1; + } + else + { + //it's beginning with a smiley symbol but it's no smiley + pos = spos + 1; + } + } + } + + if (nextToCopyPos != contentSafe.length()) + { + newMsg.append(msg.right(contentSafe.length() - nextToCopyPos)); + } + + return newMsg; +} + + +/* + * Parse the msg for content which should not be replaced with smileys + */ +QString EmotNode::createSpecialContentSafe(QString msg) +{ + QString contentSafe = msg; + QString fill; + int bpos = 0; + int epos = 0; + QRegExp reURL("(\\b|^)((https?|ftp)://([-a-z0-9]+(:[-a-z0-9]+)?@)?[-a-z0-9.]+[-a-z0-9](:[0-9]+)?(/([-a-z0-9%{}|\\\\^~`;/?:@=&$_.+!*'(),]|\\[|\\])*)?)"); + reURL.setMinimal(false); + reURL.setCaseSensitive(false); + do + { + bpos = contentSafe.find(reURL); + if (bpos != -1) + { + //find end position + epos = bpos + reURL.cap(2).length(); + //replace content area with spaces (mark as content area) + contentSafe = contentSafe.replace(bpos, epos - bpos, fill.fill(' ', epos - bpos)); + } + } + while (bpos != -1); + + return contentSafe; +} + + +EmotNode::~EmotNode() +{ + for ( node_iter_t i = m_node.begin(); i != m_node.end(); ++i) + { + delete(i->second.mp_child); + } +} + + ++++++ licq-1.3.2-nostrip.patch -> licq-20060522-nostrip.patch ++++++ --- KDE/licq/licq-1.3.2-nostrip.patch 2006-03-27 16:24:43.000000000 +0200 +++ licq/licq-20060522-nostrip.patch 2006-05-23 20:20:12.000000000 +0200 @@ -27,15 +27,6 @@ +protocol_msn_la_LDFLAGS = -module -avoid-version -rpath $(plugindir) protocol_msn_la_LIBADD = ---- plugins/osd/src/Makefile.am -+++ plugins/osd/src/Makefile.am -@@ -7,5 +7,5 @@ - - licq_osd_la_SOURCES = licq-osd.cpp my_xosd.cpp - --licq_osd_la_LDFLAGS = -s -module -avoid-version -+licq_osd_la_LDFLAGS = -module -avoid-version - licq_osd_la_LIBADD = @LIBXOSD_LIBS@ --- plugins/rms/src/Makefile.am +++ plugins/rms/src/Makefile.am @@ -12,6 +12,6 @@ ++++++ licq-20060522-unicode.patch ++++++ --- src/translate.cpp 2006-04-01 18:42:18.000000000 +0200 +++ src/translate.cpp 2006-05-10 11:51:42.356906536 +0200 @@ -226,7 +226,7 @@ char *szIn = _sz, *szOut = szNewStr; iconv_t tr; - nInSize = nLen; + nInSize = strlen(_sz); nOutSize = nLen; // Clean up for iconv, remove any spaces @@ -249,6 +249,12 @@ if (ret == (size_t)(-1)) { + //set new values because iconv() is changing them + szIn = _sz; + szOut = szNewStr; + nInSize = strlen(_sz); + nOutSize = nLen; + tr = iconv_open("UCS-2BE", szFrom[0] == '\0' ? "" : szFrom); if (tr == (iconv_t)-1) { ++++++ licq-20060522-user_picture.patch ++++++ Index: userbox.cpp =================================================================== --- plugins/qt-gui/src/userbox.cpp (revision 4422) +++ plugins/qt-gui/src/userbox.cpp (working copy) @@ -30,6 +30,8 @@ #include <qdrawutil.h> #include <qregexp.h> #include <qstyle.h> +#include <qimage.h> +#include <qmime.h> #include "userbox.moc" #include "skin.h" @@ -363,11 +365,15 @@ QString strPath = QString(BASE_DIR) + QString("/") + QString(USER_DIR) + QString("/") + QString(u->IdString()) + QString(".pic"); QImage tmpImg(strPath); - m_pUserIcon = new QPixmap; - *m_pUserIcon = tmpImg.scale(16, 16); + if (!tmpImg.isNull()) + { + m_pUserIcon = new QPixmap; + *m_pUserIcon = tmpImg.scale(16, 16); + } } - m_pIcon = m_pUserIcon; + if (m_pUserIcon) + m_pIcon = m_pUserIcon; } if (u->NewMessages() > 0) @@ -1566,8 +1572,13 @@ QString strFileName = ""; if (u && u->GetPicturePresent()) { - strFileName = QString("<center><img src=") + QString(BASE_DIR) + QString("/") + QString(USER_DIR) + - QString("/") + QString(u->IdString()) + QString(".pic></center>"); + const QString file = QString("%1/%2/%3.pic").arg(BASE_DIR).arg(USER_DIR).arg(u->IdString()); + const QImage picture = QImage(file); + if (!picture.isNull()) + { + QMimeSourceFactory::defaultFactory()->setImage(file, picture); + strFileName = QString("<center><img src=\"%1\"></center>").arg(file); + } } QString s = strFileName + QString("<nobr>") + QString(ICQUser::StatusToStatusStr(item->m_nStatus, item->m_bStatusInvisible)) ++++++ licq-1.3.2-userinfodlg.patch -> licq-20060522-userinfodlg.patch ++++++ ++++++ licq-1.3.2-viewurl.patch -> licq-20060522-viewurl.patch ++++++ ++++++ licq-1.3.2.tar.bz2 -> licq-20060522.tar.bz2 ++++++ ++++ 368071 lines of diff (skipped) ++++++ licq-config-fix.patch ++++++ --- /var/tmp/diff_new_pack.BbQ8A1/_old 2006-05-26 13:05:01.000000000 +0200 +++ /var/tmp/diff_new_pack.BbQ8A1/_new 2006-05-26 13:05:01.000000000 +0200 @@ -24,7 +24,7 @@ echo "" --- include/licq_constants.h.in +++ include/licq_constants.h.in -@@ -0,0 +1,57 @@ +@@ -0,0 +1,58 @@ +// ICQ definitions: +#ifndef CONSTANTS_H +#define CONSTANTS_H @@ -56,7 +56,8 @@ +const unsigned short MAX_HOSTNAME_LEN = 255; +const unsigned short MAX_CMD_LEN = 1024; +const unsigned short MAX_DATA_LEN = 1024; -+const unsigned short MAX_MESSAGE_SIZE = 450; ++const unsigned short MAX_MESSAGE_SIZE = 6800; // Maybe a little bigger? ++const unsigned short MAX_OFFLINE_MESSAGE_SIZE = 450; +const unsigned short PING_FREQUENCY = 60; +const unsigned short UPDATE_FREQUENCY = 60; +const unsigned short DEFAULT_SERVER_PORT = 5190; @@ -118,14 +119,6 @@ plugindir = $(libdir) licq_incdir = @LICQ_INCLUDES@ ---- plugins/osd/src/Makefile.am -+++ plugins/osd/src/Makefile.am -@@ -1,4 +1,4 @@ --libdir=$(prefix)/lib/licq -+#libdir=$(prefix)/lib/licq - localedir=$(datadir)/locale - - AM_CXXFLAGS = -I$(LICQ_INCLUDES) -I.. @LIBXOSD_CFLAGS@ -DLOCALEDIR=\"$(localedir)\" --- plugins/qt-gui/src/Makefile.am +++ plugins/qt-gui/src/Makefile.am @@ -1,7 +1,7 @@ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun...