/* * * $Id: k3bapplication.cpp 567271 2006-07-28 13:19:18Z trueg $ * Copyright (C) 2006 Sebastian Trueg * * This file is part of the K3b project. * Copyright (C) 1998-2007 Sebastian Trueg * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * See the file "COPYING" for the exact licensing terms. */ #include "k3blsofwrapperdialog.h" #include "k3blsofwrapper.h" #include #include #include #include #include #include #include #include static TQString joinProcessNames( const TQValueList& apps ) { TQStringList l; for( TQValueList::const_iterator it = apps.begin(); it != apps.end(); ++it ) l.append( (*it).name ); return l.join( ", " ); } K3bLsofWrapperDialog::K3bLsofWrapperDialog( TQWidget* parent ) : KDialogBase( KDialogBase::Swallow, i18n("Device in use"), Close|User1|User2, Close, parent, 0, true, true, KGuiItem( i18n("Quit the other applications") ), KGuiItem( i18n("Check again") ) ) { setButtonText( Close, i18n("Continue") ); m_label = new K3bRichTextLabel( this ); setMainWidget( m_label ); connect( this, TQT_SIGNAL(user1Clicked()), TQT_SLOT(slotQuitOtherApps()) ); connect( this, TQT_SIGNAL(user2Clicked()), TQT_SLOT(slotCheckDevice()) ); } K3bLsofWrapperDialog::~K3bLsofWrapperDialog() { } bool K3bLsofWrapperDialog::slotCheckDevice() { K3bLsofWrapper lsof; if( lsof.checkDevice( m_device ) ) { const TQValueList& apps = lsof.usingApplications(); if( apps.count() > 0 ) { m_label->setText( i18n("

Device '%1' is already in use by other applications " "(%2)." "

It is highly recommended to quit those before continuing. " "Otherwise K3b might not be able to fully access the device." "

Hint: Sometimes shutting down an application does not " "happen instantly. In that case you might have to use the '%3' " "button.") .arg( m_device->vendor() + " - " + m_device->description() ) .arg( joinProcessNames(apps) ) .arg( actionButton( User2 )->text() ) ); return true; } } // once no apps are running we can close the dialog close(); return false; } void K3bLsofWrapperDialog::slotQuitOtherApps() { K3bLsofWrapper lsof; if( lsof.checkDevice( m_device ) ) { const TQValueList& apps = lsof.usingApplications(); if( apps.count() > 0 ) { if( KMessageBox::warningYesNo( this, i18n("

Do you really want K3b to kill the following processes: ") + joinProcessNames(apps) ) == KMessageBox::Yes ) { for( TQValueList::const_iterator it = apps.begin(); it != apps.end(); ++it ) ::kill( (*it).pid, SIGTERM ); } else return; } } // after quitting the other applications recheck for running ones slotCheckDevice(); } void K3bLsofWrapperDialog::checkDevice( K3bDevice::Device* dev, TQWidget* parent ) { K3bLsofWrapperDialog dlg( parent ); dlg.m_device = dev; if( dlg.slotCheckDevice() ) dlg.exec(); } #include "k3blsofwrapperdialog.moc"