summaryrefslogtreecommitdiffstats
path: root/kdesktop
diff options
context:
space:
mode:
Diffstat (limited to 'kdesktop')
-rw-r--r--kdesktop/bgmanager.cc104
-rw-r--r--kdesktop/bgmanager.h17
-rw-r--r--kdesktop/kdesktop.kcfg31
-rw-r--r--kdesktop/lock/lockdlg.cc56
-rw-r--r--kdesktop/lock/lockprocess.cc1
-rw-r--r--kdesktop/lock/main.cc14
6 files changed, 161 insertions, 62 deletions
diff --git a/kdesktop/bgmanager.cc b/kdesktop/bgmanager.cc
index ddb95c9e7..32f774357 100644
--- a/kdesktop/bgmanager.cc
+++ b/kdesktop/bgmanager.cc
@@ -16,10 +16,15 @@
#include "bgsettings.h"
#include "kdesktopapp.h"
+#include "KCrossBGRender.h"
+#include "crossfade.h"
+
#include <assert.h>
#include <tqtimer.h>
#include <tqscrollview.h>
+#include <tqpainter.h>
+#include <tqdesktopwidget.h>
#include <kiconloader.h>
#include <tdeconfig.h>
@@ -34,6 +39,8 @@
#include <X11/X.h>
#include <X11/Xlib.h>
#include <X11/Xatom.h>
+#include <X11/extensions/Xrender.h>
+#include <unistd.h>
#ifndef None
#define None 0L
@@ -47,7 +54,7 @@
#include "pixmapserver.h"
-template class TQPtrVector<KBackgroundRenderer>;
+template class TQPtrVector<KCrossBGRender>;
template class TQPtrVector<KBackgroundCacheEntry>;
template class TQMemArray<int>;
@@ -108,6 +115,12 @@ KBackgroundManager::KBackgroundManager(TQWidget *desktop, KWinModule* twinModule
connect(m_pTimer, TQT_SIGNAL(timeout()), TQT_SLOT(slotTimeout()));
m_pTimer->start( 60000 );
+ /*CrossFade's config*/
+ m_crossTimer = new TQTimer(this);
+ connect(m_crossTimer, TQT_SIGNAL(timeout()), TQT_SLOT(slotCrossFadeTimeout()));
+ /*Ends here*/
+
+
connect(m_pKwinmodule, TQT_SIGNAL(currentDesktopChanged(int)),
TQT_SLOT(slotChangeDesktop(int)));
connect(m_pKwinmodule, TQT_SIGNAL(numberOfDesktopsChanged(int)),
@@ -577,6 +590,36 @@ void KBackgroundManager::renderBackground(int desk)
/*
+ * This slot is called when the Timeout is executed
+ */
+void KBackgroundManager::slotCrossFadeTimeout()
+{
+ KVirtualBGRenderer *r = m_Renderer[fadeDesk];
+ if (crossInit) {
+ mBenchmark.start();
+ }
+
+ if (mAlpha <= 0.0 || mBenchmark.elapsed() > 300 ) {
+ bool do_cleanup = true;
+ mAlpha = 1;
+ m_crossTimer->stop();
+ KPixmap pixm(mNextScreen);
+ setPixmap(&pixm, r->hash(), fadeDesk);
+ return;
+ }
+ // Reset Timer
+ mBenchmark.start();
+
+ TQPixmap dst = crossFade(*mOldScreen, mNextScreen, mAlpha, crossInit);
+ KPixmap pixm(dst);
+ setPixmap(&pixm, r->hash(), fadeDesk);
+
+ mAlpha -=0.03;
+ crossInit = false;
+}
+
+
+/*
* This slot is called when a renderer is done.
*/
void KBackgroundManager::slotImageDone(int desk)
@@ -592,18 +635,49 @@ void KBackgroundManager::slotImageDone(int desk)
KPixmap *pm = new KPixmap();
KVirtualBGRenderer *r = m_Renderer[desk];
bool do_cleanup = true;
+ fadeDesk = desk;
+ mAlpha = 1.0;
+ int width,height;
+
*pm = r->pixmap();
// If current: paint it
bool current = (r->hash() == m_Renderer[effectiveDesktop()]->hash());
if (current)
{
- //KPixmap * viewport_background = new KPixmap(TQPixmap(pm->width()*s.width(), pm->height()*s.height()));
- //printf("slotImageDone(): x: %d y: %d\n", viewport_background->size().width(), viewport_background->size().height());
- //setPixmap(viewport_background, r->hash(), desk);
- //delete viewport_background;
-
- setPixmap(pm, r->hash(), desk);
+ //START
+ if (m_Renderer[effectiveDesktop()]->renderer(0)->crossFadeBg() && !m_Renderer[effectiveDesktop()]->renderer(0)->usingCrossXml()){
+ int mode = m_Renderer[effectiveDesktop()]->renderer(0)->wallpaperMode();
+ width = TQApplication::desktop()->screenGeometry().width();
+ height = TQApplication::desktop()->screenGeometry().height();
+
+ if (mode == KBackgroundSettings::NoWallpaper || mode == KBackgroundSettings::Tiled || mode == KBackgroundSettings::CenterTiled ){
+ mNextScreen = TQPixmap(width,height);
+ TQPainter p (&mNextScreen);
+ p.drawTiledPixmap(0,0,width,height,*pm);
+ } else {
+ mNextScreen = TQPixmap(*pm);
+ }
+
+ if (m_pDesktop){
+ mOldScreen = const_cast<TQPixmap *>( m_pDesktop->backgroundPixmap() );
+ }else{
+ mOldScreen = const_cast<TQPixmap *>(
+ TQApplication::desktop()->screen()->backgroundPixmap() );
+ }
+
+ //TODO Find a way to discover if CrossFade effect needs to run
+ if (mOldScreen){
+ crossInit = true;
+ m_crossTimer->start(70);
+ } else{
+ setPixmap(pm, r->hash(), desk);
+ }
+ }else{
+ setPixmap(pm, r->hash(), desk);
+ }
+ //ENDS HERE */
+
if (!m_bBgInitDone)
{
m_bBgInitDone = true;
@@ -801,7 +875,7 @@ int KBackgroundManager::validateDesk(int desk)
TQString KBackgroundManager::currentWallpaper(int desk)
{
//TODO Is the behaviour of this function appropriate for multiple screens?
- KBackgroundRenderer *r = m_Renderer[validateDesk(desk)]->renderer(0);
+ KCrossBGRender *r = m_Renderer[validateDesk(desk)]->renderer(0);
return r->currentWallpaper();
}
@@ -818,7 +892,7 @@ void KBackgroundManager::changeWallpaper()
// DCOP exported
void KBackgroundManager::setExport(int _export)
{
- kdDebug() << "KBackgroundManager enabling exports.\n";
+// kdDebug() << "KBackgroundManager enabling exports.\n";
applyExport(_export);
slotChangeDesktop(0);
}
@@ -843,7 +917,7 @@ void KBackgroundManager::setWallpaper(TQString wallpaper, int mode)
//TODO Is the behaviour of this function appropriate for multiple screens?
for (unsigned i=0; i < m_Renderer[effectiveDesktop()]->numRenderers(); ++i)
{
- KBackgroundRenderer *r = m_Renderer[effectiveDesktop()]->renderer(i);
+ KCrossBGRender *r = m_Renderer[effectiveDesktop()]->renderer(i);
r->stop();
r->setWallpaperMode(mode);
r->setMultiWallpaperMode(KBackgroundSettings::NoMulti);
@@ -856,7 +930,7 @@ void KBackgroundManager::setWallpaper(TQString wallpaper, int mode)
void KBackgroundManager::setWallpaper(TQString wallpaper)
{
//TODO Is the behaviour of this function appropriate for multiple screens?
- KBackgroundRenderer *r = m_Renderer[effectiveDesktop()]->renderer(0);
+ KCrossBGRender *r = m_Renderer[effectiveDesktop()]->renderer(0);
int mode = r->wallpaperMode();
if (mode == KBackgroundSettings::NoWallpaper)
mode = KBackgroundSettings::Tiled;
@@ -869,7 +943,7 @@ void KBackgroundManager::setWallpaper(TQString wallpaper)
TQStringList KBackgroundManager::wallpaperFiles(int desk)
{
//TODO Is the behaviour of this function appropriate for multiple screens?
- KBackgroundRenderer *r = m_Renderer[validateDesk(desk)]->renderer(0);
+ KCrossBGRender *r = m_Renderer[validateDesk(desk)]->renderer(0);
return r->wallpaperFiles();
}
@@ -880,7 +954,7 @@ TQStringList KBackgroundManager::wallpaperFiles(int desk)
TQStringList KBackgroundManager::wallpaperList(int desk)
{
//TODO Is the behaviour of this function appropriate for multiple screens?
- KBackgroundRenderer *r = m_Renderer[validateDesk(desk)]->renderer(0);;
+ KCrossBGRender *r = m_Renderer[validateDesk(desk)]->renderer(0);;
return r->wallpaperList();
}
@@ -907,7 +981,7 @@ void KBackgroundManager::setWallpaper(int desk, TQString wallpaper, int mode)
//TODO Is the behaviour of this function appropriate for multiple screens?
for (unsigned i=0; i < m_Renderer[sdesk]->numRenderers(); ++i)
{
- KBackgroundRenderer *r = m_Renderer[sdesk]->renderer(i);
+ KCrossBGRender *r = m_Renderer[sdesk]->renderer(i);
setCommon(false); // Force each desktop to have it's own wallpaper
@@ -974,7 +1048,7 @@ void KBackgroundManager::setColor(const TQColor & c, bool isColorA)
//TODO Is the behaviour of this function appropriate for multiple screens?
for (unsigned i=0; i < m_Renderer[effectiveDesktop()]->numRenderers(); ++i)
{
- KBackgroundRenderer *r = m_Renderer[effectiveDesktop()]->renderer(i);
+ KCrossBGRender *r = m_Renderer[effectiveDesktop()]->renderer(i);
r->stop();
if (isColorA)
diff --git a/kdesktop/bgmanager.h b/kdesktop/bgmanager.h
index 2d29278f7..71ca6c1bb 100644
--- a/kdesktop/bgmanager.h
+++ b/kdesktop/bgmanager.h
@@ -7,12 +7,13 @@
* License. See the file "COPYING" for the exact licensing terms.
*/
-#ifndef __BGManager_h_Included__
-#define __BGManager_h_Included__
+#ifndef __BGMANAGER_H__
+#define __BGMANAGER_H__
#include <tqstring.h>
#include <tqptrvector.h>
+#include <tqdatetime.h>
#include <KBackgroundIface.h>
#if defined(Q_WS_X11) && defined(HAVE_XRENDER) && TQT_VERSION >= 0x030300
@@ -89,6 +90,7 @@ private slots:
void desktopResized();
void clearRoot();
void saveImages();
+ void slotCrossFadeTimeout();
void slotCmBackgroundChanged(bool);
private:
@@ -131,6 +133,15 @@ private:
KPixmapServer *m_pPixmapServer;
unsigned long m_xrootpmap;
+
+ /*CrossFade vars*/
+ TQTimer * m_crossTimer;
+ double mAlpha;
+ TQPixmap mNextScreen;
+ TQPixmap * mOldScreen;
+ int fadeDesk;
+ TQTime mBenchmark;
+ bool crossInit;
};
-#endif // __BGManager_h_Included__
+#endif // __BGMANAGER_H__
diff --git a/kdesktop/kdesktop.kcfg b/kdesktop/kdesktop.kcfg
index 2298e16c5..f2226f79d 100644
--- a/kdesktop/kdesktop.kcfg
+++ b/kdesktop/kdesktop.kcfg
@@ -271,92 +271,71 @@
<default>false</default>
<label></label>
<whatsthis></whatsthis>
- <!-- /home/paco/cvsroot/tdebase/kdesktop/lock/lockprocess.cc:308 -->
- <!-- if(config.readBoolEntry("Lock", false)) -->
</entry>
<entry key="LockGrace" type="Int">
<default>5000</default>
<label></label>
<whatsthis></whatsthis>
- <!-- /home/paco/cvsroot/tdebase/kdesktop/lock/lockprocess.cc:310 -->
- <!-- mLockGrace = config.readNumEntry("LockGrace", LOCK_GRACE_DEFAULT); -->
</entry>
<entry key="AutoLogout" type="Bool">
<default>false</default>
<label></label>
<whatsthis></whatsthis>
- <!-- /home/paco/cvsroot/tdebase/kdesktop/lock/lockprocess.cc:319 -->
- <!-- if (config.readBoolEntry("AutoLogout", false)) -->
</entry>
<entry key="AutoLogoutTimeout" type="Int">
<default>600</default>
<label></label>
<whatsthis></whatsthis>
- <!-- /home/paco/cvsroot/tdebase/kdesktop/lock/lockprocess.cc:322 -->
- <!-- mAutoLogoutTimeout = config.readNumEntry("AutoLogoutTimeout", AUTOLOGOUT_DEFAULT); -->
</entry>
<entry key="Priority" type="Int">
<default>19</default>
<label></label>
<whatsthis></whatsthis>
- <!-- /home/paco/cvsroot/tdebase/kdesktop/lock/lockprocess.cc:332 -->
- <!-- mPriority = config.readNumEntry("Priority", 19); -->
</entry>
<entry key="Saver" type="String">
<default></default>
<label></label>
<whatsthis></whatsthis>
- <!-- /home/paco/cvsroot/tdebase/kdesktop/lock/lockprocess.cc:336 -->
- <!-- mSaver = config.readEntry("Saver"); -->
</entry>
<entry key="UseUnmanagedLockWindows" type="Bool">
<default>false</default>
<label></label>
<whatsthis>When enabled this restores the old style unmanaged window behavior of desktop locking.</whatsthis>
- <!-- /home/paco/cvsroot/tdebase/kdesktop/lock/lockprocess.cc:336 -->
- <!-- mSaver = config.readEntry("UseUnmanagedLockWindows"); -->
</entry>
<entry key="ShowLockDateTime" type="Bool">
<default>true</default>
<label></label>
<whatsthis>When enabled the date and time when the desktop was locked is displayed as an additional intrusion detection measure.</whatsthis>
- <!-- /home/paco/cvsroot/tdebase/kdesktop/lock/lockprocess.cc:336 -->
- <!-- mSaver = config.readEntry("ShowLockDateTime"); -->
</entry>
<entry key="DelaySaverStart" type="Bool">
<default>true</default>
<label></label>
<whatsthis>When disabled the screensaver starts immediately when locking the desktop.</whatsthis>
- <!-- /home/paco/cvsroot/tdebase/kdesktop/lock/lockprocess.cc:336 -->
- <!-- mSaver = config.readEntry("DelaySaverStart"); -->
</entry>
<entry key="HideActiveWindowsFromSaver" type="Bool">
<default>true</default>
<label></label>
<whatsthis>When enabled all active windows are hidden from the screensaver, showing only the desktop background as a result.</whatsthis>
- <!-- /home/paco/cvsroot/tdebase/kdesktop/lock/lockprocess.cc:336 -->
- <!-- mSaver = config.readEntry("HideActiveWindowsFromSaver"); -->
+ </entry>
+ <entry key="HideCancelButton" type="Bool">
+ <default>false</default>
+ <label></label>
+ <whatsthis>Hide Cancel button from the "Desktop Session Locked" dialog.</whatsthis>
</entry>
<entry key="UseTDESAK" type="Bool">
<default>true</default>
<label></label>
<whatsthis>When enabled, the Trinity Secure Attention Key (TSAK) system will be used to secure the screen locker. This requires system wide TSAK support to be enabled prior to use.</whatsthis>
- <!-- /home/paco/cvsroot/tdebase/kdesktop/lock/lockprocess.cc:336 -->
- <!-- mSaver = config.readEntry("UseTDESAK"); -->
</entry>
<entry key="PluginsUnlock" type="StringList">
<default></default>
<label></label>
<whatsthis></whatsthis>
- <!-- /home/paco/cvsroot/tdebase/kdesktop/lock/lockprocess.cc:342 -->
- <!-- mPlugins = config.readListEntry("PluginsUnlock"); -->
</entry>
<entry key="PluginOptions" type="StringList">
<default></default>
<label></label>
<whatsthis></whatsthis>
- <!-- /home/paco/cvsroot/tdebase/kdesktop/lock/lockprocess.cc:345 -->
- <!-- mPluginOptions = config.readListEntry("PluginOptions"); -->
</entry>
</group>
<group name="MiniCli">
diff --git a/kdesktop/lock/lockdlg.cc b/kdesktop/lock/lockdlg.cc
index 163a03e43..bfa727678 100644
--- a/kdesktop/lock/lockdlg.cc
+++ b/kdesktop/lock/lockdlg.cc
@@ -66,6 +66,7 @@ extern bool trinity_desktop_lock_autohide_lockdlg;
extern bool trinity_desktop_lock_delay_screensaver_start;
extern bool trinity_desktop_lock_use_system_modal_dialogs;
extern bool trinity_desktop_lock_use_sak;
+extern bool trinity_desktop_lock_hide_cancel_button;
int dialogHideTimeout = 10*1000;
@@ -149,13 +150,19 @@ void PasswordDlg::init(GreeterPluginHandle *plugin)
mNewSessButton = new KPushButton( KGuiItem(i18n("Sw&itch User..."), "fork"), frame );
ok = new KPushButton( i18n("Unl&ock"), frame );
- cancel = new KPushButton( KStdGuiItem::cancel(), frame );
- if (!trinity_desktop_lock_autohide_lockdlg && !trinity_desktop_lock_use_sak) cancel->setEnabled(false);
+ ok->setDefault(true);
+
+ bool show_cancel_button = !trinity_desktop_lock_hide_cancel_button ||
+ trinity_desktop_lock_use_sak ||
+ !trinity_desktop_lock_use_system_modal_dialogs;
+ if (show_cancel_button)
+ cancel = new KPushButton( KStdGuiItem::cancel(), frame );
+ else
+ cancel = NULL;
greet = plugin->info->create( this, 0, this, mLayoutButton, TQString::null,
KGreeterPlugin::Authenticate, KGreeterPlugin::ExUnlock );
-
TQVBoxLayout *unlockDialogLayout = new TQVBoxLayout( this );
unlockDialogLayout->addWidget( frame );
@@ -166,8 +173,9 @@ void PasswordDlg::init(GreeterPluginHandle *plugin)
TQHBoxLayout *layButtons = new TQHBoxLayout( 0, 0, KDialog::spacingHint());
layButtons->addWidget( mNewSessButton );
layButtons->addStretch();
- layButtons->addWidget( ok );
- layButtons->addWidget( cancel );
+ layButtons->addWidget(ok);
+ if (show_cancel_button)
+ layButtons->addWidget(cancel);
if (trinity_desktop_lock_use_system_modal_dialogs) {
KSMModalDialogHeader* theader = new KSMModalDialogHeader( frame );
@@ -202,12 +210,22 @@ void PasswordDlg::init(GreeterPluginHandle *plugin)
frameLayout->addMultiCellLayout( layButtons, 4, 4, 0, 1 );
}
- setTabOrder( ok, cancel );
- setTabOrder( cancel, mNewSessButton );
+ if (show_cancel_button)
+ {
+ setTabOrder( ok, cancel );
+ setTabOrder( cancel, mNewSessButton );
+ }
+ else
+ {
+ setTabOrder( ok, mNewSessButton );
+ }
setTabOrder( mNewSessButton, mLayoutButton );
connect(mLayoutButton, TQT_SIGNAL(clicked()), this, TQT_SLOT(layoutClicked()));
- connect(cancel, TQT_SIGNAL(clicked()), TQT_SLOT(reject()));
+ if (show_cancel_button)
+ {
+ connect(cancel, TQT_SIGNAL(clicked()), TQT_SLOT(reject()));
+ }
connect(ok, TQT_SIGNAL(clicked()), TQT_SLOT(slotOK()));
connect(mNewSessButton, TQT_SIGNAL(clicked()), TQT_SLOT(slotSwitchUser()));
@@ -257,9 +275,12 @@ PasswordDlg::~PasswordDlg()
void PasswordDlg::reject()
{
- if (trinity_desktop_lock_autohide_lockdlg || trinity_desktop_lock_use_sak)
- TQDialog::reject();
-}
+ if (!trinity_desktop_lock_hide_cancel_button || trinity_desktop_lock_use_sak ||
+ !trinity_desktop_lock_use_system_modal_dialogs || trinity_desktop_lock_autohide_lockdlg)
+ {
+ TQDialog::reject();
+ }
+}
void PasswordDlg::layoutClicked()
{
@@ -310,11 +331,14 @@ void PasswordDlg::timerEvent(TQTimerEvent *ev)
{
if (ev->timerId() == mTimeoutTimerId)
{
- if (trinity_desktop_lock_autohide_lockdlg) {
- reject();
+ if (trinity_desktop_lock_autohide_lockdlg)
+ {
+ // Force dialog rejection regardless of the value of trinity_desktop_lock_hide_cancel_button
+ TQDialog::reject();
}
- else {
- slotActivity();
+ else
+ {
+ slotActivity();
}
}
else if (ev->timerId() == mFailedTimerId)
@@ -325,7 +349,6 @@ void PasswordDlg::timerEvent(TQTimerEvent *ev)
mUnlockingFailed = false;
updateLabel();
ok->setEnabled(true);
- if (trinity_desktop_lock_autohide_lockdlg || trinity_desktop_lock_use_sak) cancel->setEnabled(true);
mNewSessButton->setEnabled( true );
greet->revive();
greet->start();
@@ -440,7 +463,6 @@ void PasswordDlg::reapVerify()
updateLabel();
mFailedTimerId = startTimer(1500);
ok->setEnabled(false);
- cancel->setEnabled(false);
mNewSessButton->setEnabled( false );
return;
case AuthAbort:
diff --git a/kdesktop/lock/lockprocess.cc b/kdesktop/lock/lockprocess.cc
index f7dc1c25a..773a0710a 100644
--- a/kdesktop/lock/lockprocess.cc
+++ b/kdesktop/lock/lockprocess.cc
@@ -154,6 +154,7 @@ extern bool trinity_desktop_lock_use_system_modal_dialogs;
extern bool trinity_desktop_lock_delay_screensaver_start;
extern bool trinity_desktop_lock_use_sak;
extern bool trinity_desktop_lock_hide_active_windows;
+extern bool trinity_desktop_lock_hide_cancel_button;
extern bool trinity_desktop_lock_forced;
extern bool argb_visual;
diff --git a/kdesktop/lock/main.cc b/kdesktop/lock/main.cc
index c90c2ef6b..d5f037f56 100644
--- a/kdesktop/lock/main.cc
+++ b/kdesktop/lock/main.cc
@@ -70,7 +70,7 @@ bool trinity_desktop_lock_use_system_modal_dialogs = FALSE;
bool trinity_desktop_lock_delay_screensaver_start = FALSE;
bool trinity_desktop_lock_use_sak = FALSE;
bool trinity_desktop_lock_hide_active_windows = FALSE;
-
+bool trinity_desktop_lock_hide_cancel_button = FALSE;
bool trinity_desktop_lock_forced = FALSE;
bool signalled_forcelock;
@@ -422,8 +422,19 @@ int main( int argc, char **argv )
return 12;
}
+ // Get root window attributes
+ XWindowAttributes rootAttr;
+ XGetWindowAttributes(tqt_xdisplay(), RootWindow(tqt_xdisplay(), tqt_xscreen()), &rootAttr);
+
+ // Disable reception of all X11 events on the root window
+ XSelectInput( tqt_xdisplay(), tqt_xrootwin(), 0 );
+ app.processEvents();
+
// wait for SIGUSR1, SIGUSR2, SIGWINCH, SIGTTIN, or SIGTTOU
sigsuspend(&new_mask);
+
+ // Reenable reception of X11 events on the root window
+ XSelectInput( tqt_xdisplay(), tqt_xrootwin(), rootAttr.your_event_mask );
}
}
@@ -445,6 +456,7 @@ int main( int argc, char **argv )
trinity_desktop_lock_delay_screensaver_start = false; // If trinity_desktop_lock_delay_screensaver_start is true with unmanaged windows, the lock dialog may never appear
}
trinity_desktop_lock_hide_active_windows = KDesktopSettings::hideActiveWindowsFromSaver();
+ trinity_desktop_lock_hide_cancel_button = KDesktopSettings::hideCancelButton();
delete tdmconfig;