You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
190 lines
5.6 KiB
190 lines
5.6 KiB
Index: kscreensaver/random.cpp
|
|
===================================================================
|
|
--- kscreensaver/random.cpp.orig
|
|
+++ kscreensaver/random.cpp
|
|
@@ -1,4 +1,4 @@
|
|
-//-----------------------------------------------------------------------------
|
|
+ //-----------------------------------------------------------------------------
|
|
//
|
|
// Screen savers for KDE
|
|
//
|
|
@@ -19,6 +19,7 @@
|
|
#include <qframe.h>
|
|
#include <qcheckbox.h>
|
|
#include <qwidget.h>
|
|
+#include <qfileinfo.h>
|
|
|
|
#include <kapplication.h>
|
|
#include <kstandarddirs.h>
|
|
@@ -36,7 +37,7 @@
|
|
|
|
#define MAX_ARGS 20
|
|
|
|
-void usage(char *name)
|
|
+static void usage(char *name)
|
|
{
|
|
puts(i18n("Usage: %1 [-setup] [args]\n"
|
|
"Starts a random screen saver.\n"
|
|
@@ -60,6 +61,43 @@ static const KCmdLineOptions options[] =
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
+#ifdef HAVE_GLXCHOOSEVISUAL
|
|
+#include <GL/glx.h>
|
|
+#endif
|
|
+
|
|
+//-------------------------------------
|
|
+bool hasDirectRendering () {
|
|
+ Display *dpy = QApplication::desktop()->x11Display();
|
|
+
|
|
+#ifdef HAVE_GLXCHOOSEVISUAL
|
|
+ int attribSingle[] = {
|
|
+ GLX_RGBA,
|
|
+ GLX_RED_SIZE, 1,
|
|
+ GLX_GREEN_SIZE, 1,
|
|
+ GLX_BLUE_SIZE, 1,
|
|
+ None
|
|
+ };
|
|
+ XVisualInfo* visinfo = glXChooseVisual (
|
|
+ dpy, QApplication::desktop()->primaryScreen(), attribSingle
|
|
+ );
|
|
+ if (visinfo) {
|
|
+ GLXContext ctx = glXCreateContext ( dpy, visinfo, NULL, True );
|
|
+ if (glXIsDirect(dpy, ctx)) {
|
|
+ glXDestroyContext (dpy,ctx);
|
|
+ return true;
|
|
+ }
|
|
+ glXDestroyContext (dpy,ctx);
|
|
+ return false;
|
|
+ } else {
|
|
+ return false;
|
|
+ }
|
|
+#else
|
|
+#error no GL?
|
|
+ return false;
|
|
+#endif
|
|
+
|
|
+}
|
|
+
|
|
int main(int argc, char *argv[])
|
|
{
|
|
KLocale::setMainCatalogue("kscreensaver");
|
|
@@ -103,55 +141,63 @@ int main(int argc, char *argv[])
|
|
|
|
KConfig type("krandom.kssrc");
|
|
type.setGroup("Settings");
|
|
- bool opengl = type.readBoolEntry("OpenGL");
|
|
+ bool opengl = type.readBoolEntry("OpenGL", hasDirectRendering());
|
|
+ kdDebug() << "hasOPEN " << opengl << endl;
|
|
bool manipulatescreen = type.readBoolEntry("ManipulateScreen");
|
|
bool fortune = !KStandardDirs::findExe("fortune").isEmpty();
|
|
+ QStringList defaults = type.readListEntry( "Defaults" );
|
|
+ QMap<QString, int> def_numbers;
|
|
+ for ( QStringList::ConstIterator it = defaults.begin(); it != defaults.end(); ++it ) {
|
|
+ int index = ( *it ).find( ':' );
|
|
+ if ( index == -1 )
|
|
+ def_numbers[*it] = 1;
|
|
+ else
|
|
+ def_numbers[( *it ).left( index )] = ( *it ).mid( index + 1 ).toInt();
|
|
+ }
|
|
|
|
for (uint i = 0; i < tempSaverFileList.count(); i++)
|
|
{
|
|
- kdDebug() << "Looking at " << tempSaverFileList[i] << endl;
|
|
+ int howoften = 1;
|
|
+ if ( defaults.count() != 0 ) {
|
|
+ QFileInfo fi( tempSaverFileList[i] );
|
|
+ if ( def_numbers.contains( fi.fileName() ) )
|
|
+ howoften = def_numbers[fi.fileName()];
|
|
+ else
|
|
+ howoften = 0;
|
|
+ }
|
|
+
|
|
KDesktopFile saver(tempSaverFileList[i], true);
|
|
- if(!saver.tryExec())
|
|
- continue;
|
|
- kdDebug() << "read X-KDE-Type" << endl;
|
|
+ if (!saver.tryExec())
|
|
+ continue;
|
|
QString saverType = saver.readEntry("X-KDE-Type");
|
|
-
|
|
- if (saverType.isEmpty()) // no X-KDE-Type defined so must be OK
|
|
- {
|
|
- saverFileList.append(tempSaverFileList[i]);
|
|
- }
|
|
- else
|
|
- {
|
|
+ if (!saverType.isEmpty()) // no X-KDE-Type defined so must be OK
|
|
+ {
|
|
QStringList saverTypes = QStringList::split(";", saverType);
|
|
for (QStringList::ConstIterator it = saverTypes.begin(); it != saverTypes.end(); ++it )
|
|
{
|
|
- kdDebug() << "saverTypes is "<< *it << endl;
|
|
if (*it == "ManipulateScreen")
|
|
{
|
|
- if (manipulatescreen)
|
|
- {
|
|
- saverFileList.append(tempSaverFileList[i]);
|
|
- }
|
|
+ if (!manipulatescreen)
|
|
+ howoften = 0;
|
|
}
|
|
else
|
|
if (*it == "OpenGL")
|
|
{
|
|
- if (opengl)
|
|
- {
|
|
- saverFileList.append(tempSaverFileList[i]);
|
|
- }
|
|
+ if (!opengl)
|
|
+ howoften = 0;
|
|
}
|
|
if (*it == "Fortune")
|
|
{
|
|
- if (fortune)
|
|
- {
|
|
- saverFileList.append(tempSaverFileList[i]);
|
|
- }
|
|
+ if (!fortune)
|
|
+ howoften = 0;
|
|
}
|
|
|
|
}
|
|
}
|
|
+ for ( int j = 0; j < howoften; ++j )
|
|
+ saverFileList.append(tempSaverFileList[i]);
|
|
}
|
|
+ kdDebug() << "final " << saverFileList << endl;
|
|
|
|
KRandomSequence rnd;
|
|
int indx = rnd.getLong(saverFileList.count());
|
|
@@ -229,7 +275,7 @@ KRandomSetup::KRandomSetup( QWidget *par
|
|
|
|
KConfig config("krandom.kssrc");
|
|
config.setGroup("Settings");
|
|
- openGL->setChecked(config.readBoolEntry("OpenGL", true));
|
|
+ openGL->setChecked(config.readBoolEntry("OpenGL", hasDirectRendering()));
|
|
manipulateScreen->setChecked(config.readBoolEntry("ManipulateScreen", true));
|
|
}
|
|
|
|
Index: kscreensaver/Makefile.am
|
|
===================================================================
|
|
--- kscreensaver/Makefile.am.orig
|
|
+++ kscreensaver/Makefile.am
|
|
@@ -3,13 +3,13 @@
|
|
|
|
AM_CPPFLAGS = -UQT_NO_ASCII_CAST
|
|
|
|
-INCLUDES = $(all_includes)
|
|
+INCLUDES = $(GLINC) $(all_includes)
|
|
AM_LDFLAGS = $(all_libraries) $(KDE_RPATH)
|
|
|
|
bin_PROGRAMS = krandom.kss kblankscrn.kss
|
|
|
|
krandom_kss_SOURCES = random.cpp
|
|
-krandom_kss_LDADD = $(LIB_KDEUI) -lm
|
|
+krandom_kss_LDADD = $(LIB_KDEUI) $(GLLIB) -lm
|
|
|
|
kblankscrn_kss_SOURCES = blankscrn.cpp
|
|
kblankscrn_kss_LDADD = $(LIB_KDEUI) -lkscreensaver -lm
|