Fix taskbar when parent application is using ARGB windows

Fix composition configuration default settings
Add logout notice to give the user feedback that yes, the logout command actually WAS accepted


git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdebase@1249522 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
v3.5.13-sru
tpearson 13 years ago
parent 648e1d8408
commit d6bcc187d2

@ -57,6 +57,10 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
TaskContainer::TaskContainer(Task::Ptr task, TaskBar* bar,
TQWidget *parent, const char *name)
: TQToolButton(parent, name),
animationTimer(0, "TaskContainer::animationTimer"),
dragSwitchTimer(0, "TaskContainer::dragSwitchTimer"),
attentionTimer(0, "TaskContainer::attentionTimer"),
m_paintEventCompressionTimer(0, "TaskContainer::paintEventCompressionTimer"),
currentFrame(0),
attentionState(-1),
lastActivated(0),
@ -66,12 +70,7 @@ TaskContainer::TaskContainer(Task::Ptr task, TaskBar* bar,
taskBar(bar),
discardNextMouseEvent(false),
aboutToActivate(false),
m_mouseOver(false),
animationTimer(0, "TaskContainer::animationTimer"),
dragSwitchTimer(0, "TaskContainer::dragSwitchTimer"),
attentionTimer(0, "TaskContainer::attentionTimer"),
m_paintEventCompression(false),
m_paintEventCompressionTimer(0, "TaskContainer::paintEventCompressionTimer")
m_paintEventCompression(false)
{
init();
setAcceptDrops(true); // Always enabled to activate task during drag&drop.
@ -88,6 +87,10 @@ TaskContainer::TaskContainer(Task::Ptr task, TaskBar* bar,
TaskContainer::TaskContainer(Startup::Ptr startup, PixmapList& startupFrames,
TaskBar* bar, TQWidget *parent, const char *name)
: TQToolButton(parent, name),
animationTimer(0, "TaskContainer::animationTimer"),
dragSwitchTimer(0, "TaskContainer::dragSwitchTimer"),
attentionTimer(0, "TaskContainer::attentionTimer"),
m_paintEventCompressionTimer(0, "TaskContainer::paintEventCompressionTimer"),
currentFrame(0),
frames(startupFrames),
attentionState(-1),
@ -99,11 +102,7 @@ TaskContainer::TaskContainer(Startup::Ptr startup, PixmapList& startupFrames,
discardNextMouseEvent(false),
aboutToActivate(false),
m_mouseOver(false),
animationTimer(0, "TaskContainer::animationTimer"),
dragSwitchTimer(0, "TaskContainer::dragSwitchTimer"),
attentionTimer(0, "TaskContainer::attentionTimer"),
m_paintEventCompression(false),
m_paintEventCompressionTimer(0, "TaskContainer::paintEventCompressionTimer")
m_paintEventCompression(false)
{
init();
setEnabled(false);
@ -481,7 +480,10 @@ void TaskContainer::paintEvent( TQPaintEvent* )
drawButton(&p);
p.end();
bitBlt(this, 0, 0, pm);
TQPixmap iconPixmapToSet = *pm;
if (TQPaintDevice::x11AppDepth() == 32) iconPixmapToSet.convertFromImage(KImageEffect::convertToPremultipliedAlpha( iconPixmapToSet.convertToImage() ));
bitBlt(this, 0, 0, &iconPixmapToSet);
delete pm;
}

@ -179,6 +179,14 @@ void KSMServer::shutdownInternal( KApplication::ShutdownConfirm confirm,
// shall we save the session on logout?
saveSession = ( config->readEntry( "loginMode", "restorePreviousLogout" ) == "restorePreviousLogout" );
// shall we show a nice fancy logout screen?
bool showFancyLogout = KConfigGroup(KGlobal::config(), "Logout").readBoolEntry("showFancyLogout", true);
if (showFancyLogout) {
// KSMShutdownIPFeedback::start(); // hide the UGLY logout process from the user
KSMShutdownIPDlg::showShutdownIP();
}
if ( saveSession )
sessionGroup = TQString("Session: ") + SESSION_PREVIOUS_LOGOUT;

@ -57,7 +57,7 @@ Copyright (C) 2000 Matthias Ettrich <ettrich@kde.org>
#include <math.h>
#include <dmctl.h>
#include <kaction.h>
#include <netwm.h>
#include <X11/Xlib.h>
@ -494,6 +494,94 @@ void KSMShutdownFeedback::slotPaintEffect()
//////
KSMShutdownIPFeedback * KSMShutdownIPFeedback::s_pSelf = 0L;
KSMShutdownIPFeedback::KSMShutdownIPFeedback()
: TQWidget( 0L, "feedbackipwidget", Qt::WType_Popup | Qt::WStyle_StaysOnTop | Qt::WX11BypassWM ), m_sharedpixmap(0), m_timeout(0)
{
m_sharedpixmap = new KSharedPixmap();
resize(0, 0);
setShown(true);
// At least show SOMETHING while waiting for the root pixmap...
TQPixmap drawable = TQPixmap(TQPixmap::grabWindow(qt_xrootwin(), 0, 0, TQApplication::desktop()->width(), TQApplication::desktop()->height())).convertToImage();
bitBlt( this, 0, 0, &drawable );
// Try to get and show the root pixmap
enableExports();
TQTimer::singleShot( 100, this, SLOT(slotPaintEffect()) );
}
KSMShutdownIPFeedback::~KSMShutdownIPFeedback()
{
if (m_sharedpixmap)
delete m_sharedpixmap;
}
void KSMShutdownIPFeedback::fadeBack( void )
{
}
TQString KSMShutdownIPFeedback::pixmapName(int desk) {
TQString pattern = TQString("DESKTOP%1");
int screen_number = DefaultScreen(qt_xdisplay());
if (screen_number) {
pattern = TQString("SCREEN%1-DESKTOP").arg(screen_number) + "%1";
}
return pattern.arg( desk );
}
void KSMShutdownIPFeedback::slotPaintEffect()
{
NETRootInfo rinfo( qt_xdisplay(), NET::CurrentDesktop );
rinfo.activate();
int current_desktop = rinfo.currentDesktop();
m_sharedpixmap->loadFromShared(pixmapName(current_desktop), TQRect(0, 0, width(), height()));
}
void KSMShutdownIPFeedback::slotDone(bool success)
{
if (!success)
{
kdWarning(270) << k_lineinfo << "loading of desktop background failed.\n";
if (m_timeout < 50) {
TQTimer::singleShot( 100, this, SLOT(slotPaintEffect()) );
m_timeout++;
return;
}
}
TQImage image = m_sharedpixmap->convertToImage();
TQPixmap drawable;
drawable.convertFromImage( image );
bitBlt( this, 0, 0, &drawable );
}
void KSMShutdownIPFeedback::enableExports()
{
#ifdef Q_WS_X11
kdDebug(270) << k_lineinfo << "activating background exports.\n";
DCOPClient *client = kapp->dcopClient();
if (!client->isAttached())
client->attach();
TQByteArray data;
TQDataStream args( data, IO_WriteOnly );
args << 1;
TQCString appname( "kdesktop" );
int screen_number = DefaultScreen(qt_xdisplay());
if ( screen_number )
appname.sprintf("kdesktop-screen-%d", screen_number );
client->send( appname, "KBackgroundIface", "setExport(int)", data );
#endif
}
//////
KSMShutdownDlg::KSMShutdownDlg( TQWidget* parent,
bool maysd, KApplication::ShutdownType sdtype )
: TQDialog( parent, 0, TRUE, (WFlags)WType_Popup ), targets(0)
@ -963,6 +1051,69 @@ bool KSMShutdownDlg::confirmShutdown( bool maysd, KApplication::ShutdownType& sd
return result;
}
void 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);
TQTimer *timer = new TQTimer(l);
connect( timer, SIGNAL(timeout()), l, SLOT(exec()) );
timer->start( 0, TRUE );
kapp->disableStyles();
}
KSMShutdownIPDlg::KSMShutdownIPDlg(TQWidget* parent)
: TQDialog( 0, "", TRUE, Qt::WType_Popup | Qt::WDestructiveClose )
{
TQVBoxLayout* vbox = new TQVBoxLayout( this );
TQFrame* frame = new TQFrame( this );
frame->setFrameStyle( TQFrame::StyledPanel | TQFrame::Raised );
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, 2 * KDialog::marginHint(), 2 * KDialog::spacingHint() );
TQWidget* ticon = new TQWidget( frame );
KIconLoader * ldr = KGlobal::iconLoader();
TQPixmap trinityPixmap = ldr->loadIcon("kmenu", KIcon::Panel, KIcon::SizeLarge, KIcon::DefaultState, 0L, true);
ticon->setBackgroundPixmap(trinityPixmap);
ticon->setMinimumSize(trinityPixmap.size());
ticon->setMaximumSize(trinityPixmap.size());
ticon->resize(trinityPixmap.size());
// gbox->addMultiCellWidget( ticon, 0, 1, 0, 0, AlignCenter );
gbox->addWidget( ticon, 0, 0, AlignHCenter );
TQLabel* label = new TQLabel( i18n("Trinity is saving your settings, please wait..."), frame );
TQFont fnt = label->font();
fnt.setBold( true );
fnt.setPointSize( fnt.pointSize() * 1 );
label->setFont( fnt );
gbox->addWidget( label, 0, 1, AlignHCenter );
// label = new TQLabel( i18n("Logging off"), frame );
// fnt = label->font();
// fnt.setBold( true );
// fnt.setPointSize( fnt.pointSize() * 3 / 2 );
// label->setFont( fnt );
// gbox->addWidget( label, 0, 1, AlignHCenter );
}
KSMShutdownIPDlg::~KSMShutdownIPDlg()
{
}
KSMDelayedPushButton::KSMDelayedPushButton( const KGuiItem &item,
TQWidget *parent,
const char *name)

@ -16,6 +16,7 @@ Copyright (C) 2000 Matthias Ettrich <ettrich@kde.org>
#include <tqframe.h>
#include <kguiitem.h>
#include <tqtoolbutton.h>
#include <ksharedpixmap.h>
class TQPushButton;
class TQVButtonGroup;
@ -73,6 +74,34 @@ private:
};
// The (singleton) widget that shows either pretty pictures or a black screen during logout
class KSMShutdownIPFeedback : public TQWidget
{
Q_OBJECT
public:
static void start() { s_pSelf = new KSMShutdownIPFeedback(); }
static void stop() { if ( s_pSelf != 0L ) s_pSelf->fadeBack(); delete s_pSelf; s_pSelf = 0L; }
static KSMShutdownIPFeedback * self() { return s_pSelf; }
protected:
~KSMShutdownIPFeedback();
private slots:
void slotPaintEffect();
void slotDone(bool success);
private:
static KSMShutdownIPFeedback * s_pSelf;
KSMShutdownIPFeedback();
int m_currentY;
TQPixmap m_root;
void fadeBack( void );
TQString pixmapName(int desk);
KSharedPixmap* m_sharedpixmap;
void enableExports();
int m_timeout;
};
// The confirmation dialog
class KSMShutdownDlg : public TQDialog
@ -104,6 +133,21 @@ private:
bool m_lockOnResume;
};
// The shutdown-in-progress dialog
class KSMShutdownIPDlg : public TQDialog
{
Q_OBJECT
public:
static void showShutdownIP();
protected:
~KSMShutdownIPDlg();
private:
KSMShutdownIPDlg( TQWidget* parent );
};
class KSMDelayedPushButton : public KPushButton
{
Q_OBJECT

@ -1518,11 +1518,11 @@ void KTranslucencyConfig::load( void )
config->setGroup( "Translucency" );
activeWindowTransparency->setChecked(config->readBoolEntry("TranslucentActiveWindows",false));
inactiveWindowTransparency->setChecked(config->readBoolEntry("TranslucentInactiveWindows",true));
inactiveWindowTransparency->setChecked(config->readBoolEntry("TranslucentInactiveWindows",false));
movingWindowTransparency->setChecked(config->readBoolEntry("TranslucentMovingWindows",false));
removeShadowsOnMove->setChecked(config->readBoolEntry("RemoveShadowsOnMove",false));
removeShadowsOnResize->setChecked(config->readBoolEntry("RemoveShadowsOnResize",false));
dockWindowTransparency->setChecked(config->readBoolEntry("TranslucentDocks",true));
dockWindowTransparency->setChecked(config->readBoolEntry("TranslucentDocks",false));
keepAboveAsActive->setChecked(config->readBoolEntry("TreatKeepAboveAsActive",true));
onlyDecoTranslucent->setChecked(config->readBoolEntry("OnlyDecoTranslucent",false));
@ -1547,7 +1547,7 @@ void KTranslucencyConfig::load( void )
disableARGB->setChecked(conf_.readBoolEntry("DisableARGB",FALSE));
useShadows->setChecked(conf_.readEntry("Compmode","CompClientShadows").compare("CompClientShadows") == 0);
useShadows->setChecked(conf_.readEntry("Compmode","").compare("CompClientShadows") == 0);
shadowTopOffset->setValue(-1*(conf_.readNumEntry("ShadowOffsetY",-80)));
shadowLeftOffset->setValue(-1*(conf_.readNumEntry("ShadowOffsetX",0)));

Loading…
Cancel
Save