main.cpp
00001 /* This file is part of the KDE libraries 00002 00003 Copyright (c) 2001 Martin R. Jones <mjones@kde.org> 00004 00005 This library is free software; you can redistribute it and/or 00006 modify it under the terms of the GNU Library General Public 00007 License as published by the Free Software Foundation; either 00008 version 2 of the License, or (at your option) any later version. 00009 00010 This library is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00013 Library General Public License for more details. 00014 00015 You should have received a copy of the GNU Library General Public License 00016 along with this library; see the file COPYING.LIB. If not, write to 00017 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 00018 Boston, MA 02110-1301, USA. 00019 */ 00020 #include <config.h> 00021 00022 #include <stdlib.h> 00023 #include <stdio.h> 00024 #include <signal.h> 00025 00026 #include <tqdialog.h> 00027 #include <klocale.h> 00028 #include <kglobal.h> 00029 #include <kdebug.h> 00030 #include <kcmdlineargs.h> 00031 #include <kapplication.h> 00032 #include <kcrash.h> 00033 00034 #include "kscreensaver.h" 00035 #include "kscreensaver_vroot.h" 00036 00037 bool argb_visual = FALSE; 00038 00039 extern "C" 00040 { 00041 extern const char *kss_applicationName; 00042 extern const char *kss_description; 00043 extern const char *kss_version; 00044 KScreenSaver *kss_create( WId d ); 00045 TQDialog *kss_setup(); 00046 } 00047 00048 static const KCmdLineOptions options[] = 00049 { 00050 { "setup", I18N_NOOP("Setup screen saver"), 0 }, 00051 { "window-id wid", I18N_NOOP("Run in the specified XWindow"), 0 }, 00052 { "root", I18N_NOOP("Run in the root XWindow"), 0 }, 00053 { "demo", I18N_NOOP("Start screen saver in demo mode"), "default"}, 00054 KCmdLineLastOption 00055 }; 00056 00057 static void crashHandler( int ) 00058 { 00059 #ifdef SIGABRT 00060 signal (SIGABRT, SIG_DFL); 00061 #endif 00062 abort(); 00063 } 00064 00065 //---------------------------------------------------------------------------- 00066 00067 class DemoWindow : public TQWidget 00068 { 00069 public: 00070 DemoWindow() : TQWidget() 00071 { 00072 setFixedSize(600, 420); 00073 } 00074 00075 protected: 00076 virtual void keyPressEvent(TQKeyEvent *e) 00077 { 00078 if (e->ascii() == 'q') 00079 { 00080 kapp->quit(); 00081 } 00082 } 00083 00084 virtual void closeEvent( TQCloseEvent * ) 00085 { 00086 kapp->quit(); 00087 } 00088 }; 00089 00090 00091 //---------------------------------------------------------------------------- 00092 #if defined(Q_WS_QWS) || defined(Q_WS_MACX) 00093 typedef WId Window; 00094 #endif 00095 00096 KDE_EXPORT int main(int argc, char *argv[]) 00097 { 00098 KLocale::setMainCatalogue("libkscreensaver"); 00099 KCmdLineArgs::init(argc, argv, kss_applicationName, kss_description, kss_version); 00100 00101 KCmdLineArgs::addCmdLineOptions(options); 00102 00103 #ifdef HAVE_XCOMPOSITE 00104 KApplication app(KApplication::openX11RGBADisplay()); 00105 argb_visual = app.isX11CompositionAvailable(); 00106 #else 00107 KApplication app; 00108 #endif 00109 00110 KCrash::setCrashHandler( crashHandler ); 00111 KGlobal::locale()->insertCatalogue("klock"); 00112 KGlobal::locale()->insertCatalogue("kscreensaver"); 00113 00114 DemoWindow *demoWidget = 0; 00115 Window saveWin = 0; 00116 KScreenSaver *target; 00117 00118 KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); 00119 00120 if (args->isSet("setup")) 00121 { 00122 TQDialog *dlg = kss_setup(); 00123 args->clear(); 00124 dlg->exec(); 00125 delete dlg; 00126 exit(0); 00127 } 00128 00129 if (args->isSet("window-id")) 00130 { 00131 saveWin = atol(args->getOption("window-id")); 00132 } 00133 00134 #ifdef Q_WS_X11 //FIXME 00135 if (args->isSet("root")) 00136 { 00137 saveWin = RootWindow(qt_xdisplay(), qt_xscreen()); 00138 } 00139 #endif 00140 00141 if (args->isSet("demo")) 00142 { 00143 saveWin = 0; 00144 } 00145 00146 if (saveWin == 0) 00147 { 00148 demoWidget = new DemoWindow(); 00149 demoWidget->setBackgroundMode(TQWidget::NoBackground); 00150 saveWin = demoWidget->winId(); 00151 app.setMainWidget(demoWidget); 00152 app.processEvents(); 00153 } 00154 00155 target = kss_create( saveWin ); 00156 00157 if ( demoWidget ) 00158 { 00159 demoWidget->setFixedSize( 600, 420 ); 00160 demoWidget->show(); 00161 } 00162 args->clear(); 00163 app.exec(); 00164 00165 delete target; 00166 delete demoWidget; 00167 00168 return 0; 00169 } 00170