diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2011-09-12 20:26:03 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2011-09-12 20:26:03 +0000 |
commit | b971f9aae70373db39fb62a75c82f25e9252f6b3 (patch) | |
tree | ae35ba91c40e293d6ea6ed40978b4b81cddf5764 /ksmserver | |
parent | 9925fc58bcca4faf6f6a356ace24acdf19556560 (diff) | |
download | tdebase-b971f9aae70373db39fb62a75c82f25e9252f6b3.tar.gz tdebase-b971f9aae70373db39fb62a75c82f25e9252f6b3.zip |
Use new modal system nofitication dialog in kdebase smserver
Add fancy startup dialog to match the fancy shutdown dialog
This is only used if the themed splash screen is turned off
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdebase@1253056 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'ksmserver')
-rw-r--r-- | ksmserver/CMakeLists.txt | 2 | ||||
-rw-r--r-- | ksmserver/server.cpp | 2 | ||||
-rw-r--r-- | ksmserver/server.h | 1 | ||||
-rw-r--r-- | ksmserver/shutdown.cpp | 4 | ||||
-rw-r--r-- | ksmserver/shutdowndlg.cpp | 101 | ||||
-rw-r--r-- | ksmserver/shutdowndlg.h | 9 | ||||
-rw-r--r-- | ksmserver/startup.cpp | 39 | ||||
-rw-r--r-- | ksmserver/startupdlg.cpp | 86 | ||||
-rw-r--r-- | ksmserver/startupdlg.h | 60 |
9 files changed, 194 insertions, 110 deletions
diff --git a/ksmserver/CMakeLists.txt b/ksmserver/CMakeLists.txt index 042e36fe3..fa8677c03 100644 --- a/ksmserver/CMakeLists.txt +++ b/ksmserver/CMakeLists.txt @@ -40,7 +40,7 @@ install( FILES move_session_config.sh DESTINATION ${KCONF_UPDATE_INSTALL_DIR} ) tde_add_kdeinit_executable( ksmserver AUTOMOC SOURCES - main.cpp server.cpp shutdowndlg.cpp + main.cpp server.cpp shutdowndlg.cpp startupdlg.cpp legacy.cpp startup.cpp shutdown.cpp client.cpp KSMServerInterface.skel server.skel timed.ui LINK dmctl-static kdeui-shared krsync-shared ${HAL_LIBRARIES} ${DBUS_TQT_LIBRARIES} diff --git a/ksmserver/server.cpp b/ksmserver/server.cpp index 003abf3af..191a5ff63 100644 --- a/ksmserver/server.cpp +++ b/ksmserver/server.cpp @@ -579,7 +579,7 @@ extern "C" int _IceTransNoListen(const char * protocol); #endif KSMServer::KSMServer( const TQString& windowManager, bool _only_local ) - : DCOPObject("ksmserver"), sessionGroup( "" ), shutdownNotifierIPDlg(0) + : DCOPObject("ksmserver"), sessionGroup( "" ), startupNotifierIPDlg(0), shutdownNotifierIPDlg(0) { the_server = this; clean = false; diff --git a/ksmserver/server.h b/ksmserver/server.h index c7224eb36..9464d5275 100644 --- a/ksmserver/server.h +++ b/ksmserver/server.h @@ -176,6 +176,7 @@ private: void saveCurrentSession(); void saveCurrentSessionAs( TQString ); + TQWidget* startupNotifierIPDlg; TQWidget* shutdownNotifierIPDlg; private: diff --git a/ksmserver/shutdown.cpp b/ksmserver/shutdown.cpp index b5e40a50b..4473c670b 100644 --- a/ksmserver/shutdown.cpp +++ b/ksmserver/shutdown.cpp @@ -204,7 +204,7 @@ void KSMServer::shutdownInternal( KApplication::ShutdownConfirm confirm, KRsync krs(this, ""); krs.executeLogoutAutoSync(); if (shutdownNotifierIPDlg) { - static_cast<KSMShutdownIPDlg*>(shutdownNotifierIPDlg)->setStatusMessage(""); + static_cast<KSMShutdownIPDlg*>(shutdownNotifierIPDlg)->setStatusMessage(i18n("Saving your settings...")); } if ( saveSession ) @@ -572,7 +572,7 @@ void KSMServer::killWM() state = KillingWM; bool iswm = false; if (shutdownNotifierIPDlg) { - shutdownNotifierIPDlg->close(); + static_cast<KSMShutdownIPDlg*>(shutdownNotifierIPDlg)->closeSMDialog(); shutdownNotifierIPDlg=0; } for ( KSMClient* c = clients.first(); c; c = clients.next() ) { diff --git a/ksmserver/shutdowndlg.cpp b/ksmserver/shutdowndlg.cpp index 2a9d36717..9ff6dc910 100644 --- a/ksmserver/shutdowndlg.cpp +++ b/ksmserver/shutdowndlg.cpp @@ -1106,104 +1106,16 @@ TQWidget* KSMShutdownIPDlg::showShutdownIP() kapp->enableStyles(); KSMShutdownIPDlg* l = new KSMShutdownIPDlg( 0 ); - // Show dialog (will save the background in showEvent) - TQSize sh = l->tqsizeHint(); - TQRect rect = KGlobalSettings::desktopGeometry(TQCursor::pos()); - - l->move(rect.x() + (rect.width() - sh.width())/2, - rect.y() + (rect.height() - sh.height())/2); - kapp->disableStyles(); return l; } -void KSMShutdownIPDlg::setStatusMessage(TQString message) -{ - if (message == "") { - m_statusLabel->setText(i18n("Saving your settings").append("...")); - } - else { - m_statusLabel->setText(message); - } -} - KSMShutdownIPDlg::KSMShutdownIPDlg(TQWidget* parent) - : TQWidget( 0, "", Qt::WStyle_Customize | Qt::WType_Dialog | Qt::WStyle_Title | Qt::WStyle_StaysOnTop | Qt::WDestructiveClose ) + : KSMModalDialog( parent ) { - // Signal that we do not want any window controls to be shown at all - Atom kde_wm_system_modal_notification; - kde_wm_system_modal_notification = XInternAtom(qt_xdisplay(), "_KDE_WM_MODAL_SYS_NOTIFICATION", False); - XChangeProperty(qt_xdisplay(), winId(), kde_wm_system_modal_notification, XA_INTEGER, 32, PropModeReplace, (unsigned char *) "TRUE", 1L); - - TQVBoxLayout* vbox = new TQVBoxLayout( this ); - - TQFrame* frame = new TQFrame( this ); - frame->setFrameStyle( TQFrame::NoFrame ); - frame->setLineWidth( tqstyle().tqpixelMetric( TQStyle::PM_DefaultFrameWidth, frame ) ); - // we need to set the minimum size for the window - frame->setMinimumWidth(400); - vbox->addWidget( frame ); - TQGridLayout* gbox = new TQGridLayout( frame, 1, 1, KDialog::marginHint(), KDialog::spacingHint() ); - TQHBoxLayout* centerbox = new TQHBoxLayout( frame, 0, KDialog::spacingHint() ); - TQHBoxLayout* seperatorbox = new TQHBoxLayout( frame, 0, 0 ); - - TQWidget* ticon = new TQWidget( frame ); - KIconLoader * ldr = KGlobal::iconLoader(); - TQPixmap trinityPixmap = ldr->loadIcon("kmenu", KIcon::Panel, KIcon::SizeLarge, KIcon::DefaultState, 0L, true); - - // Manually draw the alpha portions of the icon onto the widget background color... - TQRgb backgroundRgb = ticon->paletteBackgroundColor().rgb(); - TQImage correctedImage = trinityPixmap.convertToImage(); - correctedImage = correctedImage.convertDepth(32); - correctedImage.setAlphaBuffer(true); - int w = correctedImage.width(); - int h = correctedImage.height(); - for (int y = 0; y < h; ++y) { - TQRgb *ls = (TQRgb *)correctedImage.scanLine( y ); - for (int x = 0; x < w; ++x) { - TQRgb l = ls[x]; - float alpha_adjust = tqAlpha( l )/255.0; - int r = int( (tqRed( l ) * alpha_adjust) + (tqRed( backgroundRgb ) * (1.0-alpha_adjust)) ); - int g = int( (tqGreen( l ) * alpha_adjust) + (tqGreen( backgroundRgb ) * (1.0-alpha_adjust)) ); - int b = int( (tqBlue( l ) * alpha_adjust) + (tqBlue( backgroundRgb ) * (1.0-alpha_adjust)) ); - int a = int( 255 ); - ls[x] = tqRgba( r, g, b, a ); - } - } - trinityPixmap.convertFromImage(correctedImage); - - ticon->setBackgroundPixmap(trinityPixmap); - ticon->setMinimumSize(trinityPixmap.size()); - ticon->setMaximumSize(trinityPixmap.size()); - ticon->resize(trinityPixmap.size()); - centerbox->addWidget( ticon, AlignCenter ); - - TQWidget* swidget = new TQWidget( frame ); - swidget->resize(2, frame->sizeHint().width()); - swidget->setBackgroundColor(Qt::black); - seperatorbox->addWidget( swidget, AlignCenter ); - - TQLabel* label = new TQLabel( i18n("Trinity Desktop Environment"), frame ); - TQFont fnt = label->font(); - fnt.setBold( true ); - fnt.setPointSize( fnt.pointSize() * 3 / 2 ); - label->setFont( fnt ); - centerbox->addWidget( label, AlignCenter ); - - m_statusLabel = new TQLabel( i18n("Saving your settings..."), frame ); - fnt = m_statusLabel->font(); - fnt.setBold( false ); - fnt.setPointSize( fnt.pointSize() * 1 ); - m_statusLabel->setFont( fnt ); - gbox->addMultiCellWidget( m_statusLabel, 2, 2, 0, 0, AlignLeft | AlignVCenter ); - - gbox->addLayout(centerbox, 0, 0); - gbox->addLayout(seperatorbox, 1, 0); - - setFixedSize( sizeHint() ); - setCaption( i18n("Please wait...") ); + setStatusMessage(i18n("Saving your settings...")); show(); setActiveWindow(); @@ -1211,15 +1123,6 @@ KSMShutdownIPDlg::KSMShutdownIPDlg(TQWidget* parent) KSMShutdownIPDlg::~KSMShutdownIPDlg() { - -} - -void KSMShutdownIPDlg::closeEvent(TQCloseEvent *e) -{ - //--------------------------------------------- - // Don't call the base function because - // we want to ignore the close event - //--------------------------------------------- } KSMDelayedPushButton::KSMDelayedPushButton( const KGuiItem &item, diff --git a/ksmserver/shutdowndlg.h b/ksmserver/shutdowndlg.h index 7ba93401f..3cf9860a9 100644 --- a/ksmserver/shutdowndlg.h +++ b/ksmserver/shutdowndlg.h @@ -10,7 +10,7 @@ Copyright (C) 2000 Matthias Ettrich <[email protected]> #include <tqpixmap.h> #include <tqimage.h> #include <tqdatetime.h> -#include <tqdialog.h> +#include <kdialog.h> #include <kpushbutton.h> #include <tqpushbutton.h> #include <tqframe.h> @@ -141,23 +141,18 @@ private: }; // The shutdown-in-progress dialog -class KSMShutdownIPDlg : public TQWidget +class KSMShutdownIPDlg : public KSMModalDialog { Q_OBJECT public: static TQWidget* showShutdownIP(); - void setStatusMessage(TQString message); protected: ~KSMShutdownIPDlg(); -protected slots: - void closeEvent(TQCloseEvent *e); - private: KSMShutdownIPDlg( TQWidget* parent ); - TQLabel* m_statusLabel; }; class KSMDelayedPushButton : public KPushButton diff --git a/ksmserver/startup.cpp b/ksmserver/startup.cpp index 2778b9dd9..4527aadaf 100644 --- a/ksmserver/startup.cpp +++ b/ksmserver/startup.cpp @@ -81,15 +81,26 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include "server.h" #include "global.h" +#include "startupdlg.h" #include "client.h" #include <kdebug.h> +// shall we show a nice fancy login screen? +bool showFancyLogin = FALSE; +bool trinity_startup_main_sequence_done = FALSE; + /*! Restores the previous session. Ensures the window manager is running (if specified). */ void KSMServer::restoreSession( TQString sessionName ) { + showFancyLogin = KConfigGroup(KGlobal::config(), "Login").readBoolEntry("showFancyLogin", true); + KConfig ksplashcfg( "ksplashrc", true ); + ksplashcfg.setGroup( "KSplash" ); + if ( ksplashcfg.readEntry( "Theme", "Default" ) != TQString("None") ) + showFancyLogin = false; + if( state != Idle ) return; state = LaunchingWM; @@ -131,8 +142,14 @@ void KSMServer::restoreSession( TQString sessionName ) // visually more appealing startup. for (uint i = 0; i < wmCommands.count(); i++) startApplication( wmCommands[i] ); + if ((showFancyLogin) && (!startupNotifierIPDlg)) { + startupNotifierIPDlg = KSMStartupIPDlg::showStartupIP(); + } TQTimer::singleShot( 4000, this, TQT_SLOT( autoStart0() ) ); } else { + if ((showFancyLogin) && (!startupNotifierIPDlg)) { + startupNotifierIPDlg = KSMStartupIPDlg::showStartupIP(); + } autoStart0(); } } @@ -144,6 +161,12 @@ void KSMServer::restoreSession( TQString sessionName ) */ void KSMServer::startDefaultSession() { + showFancyLogin = KConfigGroup(KGlobal::config(), "Login").readBoolEntry("showFancyLogin", true); + KConfig ksplashcfg( "ksplashrc", true ); + ksplashcfg.setGroup( "KSplash" ); + if ( ksplashcfg.readEntry( "Theme", "Default" ) != TQString("None") ) + showFancyLogin = false; + if( state != Idle ) return; @@ -158,6 +181,9 @@ void KSMServer::startDefaultSession() connectDCOPSignal( launcher, launcher, "autoStart2Done()", "autoStart2Done()", true); startApplication( wm ); + if ((showFancyLogin) && (!startupNotifierIPDlg)) { + startupNotifierIPDlg = KSMStartupIPDlg::showStartupIP(); + } TQTimer::singleShot( 4000, this, TQT_SLOT( autoStart0() ) ); } @@ -348,6 +374,13 @@ void KSMServer::finishStartup() state = Idle; + // [FIXME] When this fires applications are still being loaded, especially the task tray apps + // See if there is a way to detect when all session managed applications have been fully started and wait to fire this until that point! + if (startupNotifierIPDlg) { + static_cast<KSMStartupIPDlg*>(startupNotifierIPDlg)->closeSMDialog(); + startupNotifierIPDlg=0; + } + setupXIOErrorHandler(); // From now on handle X errors as normal shutdown. } @@ -417,6 +450,12 @@ void KSMServer::publishProgress( int progress, bool max ) void KSMServer::upAndRunning( const TQString& msg ) { + if (startupNotifierIPDlg) { + static_cast<KSMStartupIPDlg*>(startupNotifierIPDlg)->setStartupPhase(msg); + if (msg == TQString("session ready")) { + trinity_startup_main_sequence_done = TRUE; + } + } DCOPRef( "ksplash" ).send( "upAndRunning", msg ); XEvent e; e.xclient.type = ClientMessage; diff --git a/ksmserver/startupdlg.cpp b/ksmserver/startupdlg.cpp new file mode 100644 index 000000000..43e12c075 --- /dev/null +++ b/ksmserver/startupdlg.cpp @@ -0,0 +1,86 @@ +/***************************************************************** +ksmserver - the KDE session management server + +Copyright (C) 2010-2011 Timothy Pearson <[email protected]> +Copyright (C) 2000 Matthias Ettrich <[email protected]> +******************************************************************/ + +#include "startupdlg.h" +#include <tqapplication.h> +#include <tqlayout.h> +#include <tqgroupbox.h> +#include <tqvbuttongroup.h> +#include <tqlabel.h> +#include <tqvbox.h> +#include <tqtimer.h> +#include <tqstyle.h> +#include <tqcombobox.h> +#include <tqcursor.h> +#include <tqmessagebox.h> +#include <tqbuttongroup.h> +#include <tqiconset.h> +#include <tqpixmap.h> +#include <tqpopupmenu.h> +#include <tqtooltip.h> +#include <tqimage.h> +#include <tqpainter.h> +#include <tqfontmetrics.h> +#include <tqregexp.h> +#include <tqeventloop.h> + +#include <klocale.h> +#include <kconfig.h> +#include <kapplication.h> +#include <kdebug.h> +#include <kpushbutton.h> +#include <kstdguiitem.h> +#include <kguiitem.h> +#include <kiconloader.h> +#include <kglobalsettings.h> +#include <kwin.h> +#include <kuser.h> +#include <kpixmap.h> +#include <kimageeffect.h> +#include <kdialog.h> +#include <kseparator.h> +#include <kconfig.h> + +#include <dcopclient.h> +#include <dcopref.h> + +#include <sys/types.h> +#include <sys/utsname.h> +#include <unistd.h> +#include <stdlib.h> +#include <math.h> +#include <dmctl.h> +#include <kaction.h> +#include <netwm.h> + +#include <X11/Xlib.h> + +#include "startupdlg.moc" + +TQWidget* KSMStartupIPDlg::showStartupIP() +{ + kapp->enableStyles(); + KSMStartupIPDlg* l = new KSMStartupIPDlg( 0 ); + + kapp->disableStyles(); + + return l; +} + +KSMStartupIPDlg::KSMStartupIPDlg(TQWidget* parent) + : KSMModalDialog( parent ) + +{ + setStatusMessage(i18n("Loading your settings").append("...")); + + show(); + setActiveWindow(); +} + +KSMStartupIPDlg::~KSMStartupIPDlg() +{ +}
\ No newline at end of file diff --git a/ksmserver/startupdlg.h b/ksmserver/startupdlg.h new file mode 100644 index 000000000..3b1fe7925 --- /dev/null +++ b/ksmserver/startupdlg.h @@ -0,0 +1,60 @@ +/***************************************************************** +ksmserver - the KDE session management server + +Copyright (C) 2000 Matthias Ettrich <[email protected]> +******************************************************************/ + +#ifndef STARTUPDLG_H +#define STARTUPDLG_H + +#include <tqpixmap.h> +#include <tqimage.h> +#include <tqdatetime.h> +#include <kdialog.h> +#include <kpushbutton.h> +#include <tqpushbutton.h> +#include <tqframe.h> +#include <kguiitem.h> +#include <tqtoolbutton.h> +#include <ksharedpixmap.h> + +class TQPushButton; +class TQVButtonGroup; +class TQPopupMenu; +class TQTimer; +class TQPainter; +class TQString; +class KAction; + +#include "timed.h" +#include <kapplication.h> +#include <kpixmapio.h> + +#include <config.h> + +#ifndef NO_QT3_DBUS_SUPPORT +/* We acknowledge the the dbus API is unstable */ +#define DBUS_API_SUBJECT_TO_CHANGE +#include <dbus/connection.h> +#endif // NO_QT3_DBUS_SUPPORT + +#ifdef COMPILE_HALBACKEND +#include <hal/libhal.h> +#endif + +// The startup-in-progress dialog +class KSMStartupIPDlg : public KSMModalDialog +{ + Q_OBJECT + +public: + static TQWidget* showStartupIP(); + +protected: + ~KSMStartupIPDlg(); + +private: + KSMStartupIPDlg( TQWidget* parent ); +}; + +#endif |