Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 200856 | Differences between
and this patch

Collapse All | Expand All

(-)kfrontend/kgreeter.cpp (-9 / +43 lines)
Lines 42-47 Link Here
42
#undef Unsorted // x headers suck - make qdir.h work with --enable-final
42
#undef Unsorted // x headers suck - make qdir.h work with --enable-final
43
#include <qdir.h>
43
#include <qdir.h>
44
#include <qfile.h>
44
#include <qfile.h>
45
#include <qbuffer.h>
46
#include <qmemarray.h>
45
#include <qimage.h>
47
#include <qimage.h>
46
#include <qmovie.h>
48
#include <qmovie.h>
47
#include <qpopupmenu.h>
49
#include <qpopupmenu.h>
Lines 59-64 Link Here
59
#include <grp.h>
61
#include <grp.h>
60
#include <stdlib.h>
62
#include <stdlib.h>
61
#include <unistd.h>
63
#include <unistd.h>
64
#include <fcntl.h>
62
#include <sys/types.h>
65
#include <sys/types.h>
63
66
64
#include <X11/Xlib.h>
67
#include <X11/Xlib.h>
Lines 163-168 Link Here
163
	QString login;
166
	QString login;
164
};
167
};
165
168
169
#define FILE_LIMIT_ICON 20
170
#define FILE_LIMIT_IMAGE 200
171
166
void
172
void
167
KGreeter::insertUser( const QImage &default_pix,
173
KGreeter::insertUser( const QImage &default_pix,
168
                      const QString &username, struct passwd *ps )
174
                      const QString &username, struct passwd *ps )
Lines 181-196 Link Here
181
		nd = 1;
187
		nd = 1;
182
	QImage p;
188
	QImage p;
183
	do {
189
	do {
184
		QString fn = dp ?
190
		dp ^= 1;
185
		             QFile::decodeName( ps->pw_dir ) + "/.face" :
191
		QCString fn = !dp ?
186
		             _faceDir + '/' + username + ".face";
192
		              QCString( ps->pw_dir ) + '/' :
187
		if (p.load( fn + ".icon" ) || p.load( fn )) {
193
		              QFile::encodeName( _faceDir + '/' + username );
188
			QSize ns( 48, 48 );
194
		fn += ".face.icon";
189
			if (p.size() != ns)
195
		int fd, ico;
190
				p = p.convertDepth( 32 ).smoothScale( ns, QImage::ScaleMin );
196
		if ((fd = open( fn.data(), O_RDONLY | O_NONBLOCK )) < 0) {
191
			goto gotit;
197
			fn.truncate( fn.length() - 5 );
198
			if ((fd = open( fn.data(), O_RDONLY | O_NONBLOCK )) < 0)
199
				continue;
200
			ico = 0;
201
		} else
202
			ico = 1;
203
		QFile f;
204
		f.open( IO_ReadOnly, fd );
205
		int fs = f.size();
206
		if (fs > (ico ? FILE_LIMIT_ICON : FILE_LIMIT_IMAGE) * 1000) {
207
			LogWarn( "%s exceeds file size limit (%dkB)\n",
208
			         fn.data(), ico ? FILE_LIMIT_ICON : FILE_LIMIT_IMAGE );
209
			continue;
192
		}
210
		}
193
		dp = 1 - dp;
211
		QByteArray fc( fs );
212
		int rfs = f.readBlock( fc.data(), fs );
213
		::close( fd );
214
		fc.resize( rfs > 0 ? rfs : 0 );
215
		QBuffer buf( fc );
216
		buf.open( IO_ReadOnly );
217
		QImageIO ir;
218
		ir.setIODevice( &buf );
219
		if (!ir.read()) {
220
			LogInfo( "%s is no valid image\n", fn.data() );
221
			continue;
222
		}
223
		p = ir.image();
224
		QSize ns( 48, 48 );
225
		if (p.size() != ns)
226
			p = p.convertDepth( 32 ).smoothScale( ns, QImage::ScaleMin );
227
		goto gotit;
194
	} while (--nd >= 0);
228
	} while (--nd >= 0);
195
	p = default_pix;
229
	p = default_pix;
196
  gotit:
230
  gotit:

Return to bug 200856