summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTimothy Pearson <kb9vqf@pearsoncomputing.net>2013-04-17 17:22:17 -0500
committerTimothy Pearson <kb9vqf@pearsoncomputing.net>2013-04-17 17:22:17 -0500
commit6342dc39907a647a0fd9f84b3ba143cef4792877 (patch)
tree237c804f8ec6fa033d62d10a1851effbfeb09646
parentdbe6ecbb725216ed78c2c7170233762956338542 (diff)
downloadtdebase-6342dc39907a647a0fd9f84b3ba143cef4792877.tar.gz
tdebase-6342dc39907a647a0fd9f84b3ba143cef4792877.zip
Fix a number of issues related to the media kioslave
-rw-r--r--kcheckpass/checkpass_pam.c2
-rw-r--r--kcontrol/konq/desktopbehavior.ui10
-rw-r--r--kcontrol/konq/desktopbehavior_impl.cpp4
-rw-r--r--kdesktop/kdesktop.kcfg5
-rw-r--r--kdesktop/kdiconview.cc144
-rw-r--r--kdesktop/kdiconview.h11
-rw-r--r--kdesktop/lock/lockdlg.cc9
-rw-r--r--kdesktop/tdefileividesktop.cpp1
-rw-r--r--kicker/kicker/buttons/kbutton.cpp10
-rw-r--r--kicker/kicker/core/container_button.cpp13
-rw-r--r--kicker/libkicker/kickerSettings.kcfg5
-rw-r--r--libkonq/tdefileivi.cc36
-rw-r--r--tdeioslave/media/services/media_unmount.desktop2
13 files changed, 209 insertions, 43 deletions
diff --git a/kcheckpass/checkpass_pam.c b/kcheckpass/checkpass_pam.c
index 44758b696..7a35eeddf 100644
--- a/kcheckpass/checkpass_pam.c
+++ b/kcheckpass/checkpass_pam.c
@@ -177,6 +177,8 @@ AuthReturn Authenticate(const char *caller, const char *method,
case PAM_MAXTRIES: /* should handle this better ... */
case PAM_AUTHINFO_UNAVAIL: /* returned for unknown users ... bogus */
return AuthBad;
+ case PAM_SERVICE_ERR:
+ return AuthError;
default:
return AuthError;
}
diff --git a/kcontrol/konq/desktopbehavior.ui b/kcontrol/konq/desktopbehavior.ui
index e6acb6ed6..dc4907adf 100644
--- a/kcontrol/konq/desktopbehavior.ui
+++ b/kcontrol/konq/desktopbehavior.ui
@@ -370,7 +370,15 @@
<cstring>enableMediaBox</cstring>
</property>
<property name="text">
- <string>&amp;Show device icons:</string>
+ <string>&amp;Show device icons</string>
+ </property>
+ </widget>
+ <widget class="TQCheckBox">
+ <property name="name">
+ <cstring>enableMediaFreeSpaceOverlayBox</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Show free space overlay on device icons</string>
</property>
</widget>
<widget class="TDEListView">
diff --git a/kcontrol/konq/desktopbehavior_impl.cpp b/kcontrol/konq/desktopbehavior_impl.cpp
index d9920e8ad..b54bf8e17 100644
--- a/kcontrol/konq/desktopbehavior_impl.cpp
+++ b/kcontrol/konq/desktopbehavior_impl.cpp
@@ -220,6 +220,7 @@ DesktopBehavior::DesktopBehavior(TDEConfig *config, TQWidget *parent, const char
if (m_bHasMedia)
{
connect(enableMediaBox, TQT_SIGNAL(clicked()), this, TQT_SLOT(enableChanged()));
+ connect(enableMediaFreeSpaceOverlayBox, TQT_SIGNAL(clicked()), this, TQT_SLOT(enableChanged()));
}
else
{
@@ -255,6 +256,7 @@ void DesktopBehavior::fillMediaListView()
TQValueListIterator<KMimeType::Ptr> it2(mimetypes.begin());
g_pConfig->setGroup( "Media" );
enableMediaBox->setChecked(g_pConfig->readBoolEntry("enabled",false));
+ enableMediaFreeSpaceOverlayBox->setChecked(g_pConfig->readBoolEntry("FreeSpaceDisplayEnabled",true));
TQString excludedMedia=g_pConfig->readEntry("exclude","media/hdd_mounted,media/hdd_unmounted,media/floppy_unmounted,media/cdrom_unmounted,media/floppy5_unmounted");
for (; it2 != mimetypes.end(); ++it2) {
if ( ((*it2)->name().startsWith("media/")) )
@@ -272,6 +274,7 @@ void DesktopBehavior::saveMediaListView()
g_pConfig->setGroup( "Media" );
g_pConfig->writeEntry("enabled",enableMediaBox->isChecked());
+ g_pConfig->writeEntry("FreeSpaceDisplayEnabled",enableMediaFreeSpaceOverlayBox->isChecked());
TQStringList exclude;
for (DesktopBehaviorMediaItem *it=static_cast<DesktopBehaviorMediaItem *>(mediaListView->firstChild());
it; it=static_cast<DesktopBehaviorMediaItem *>(it->nextSibling()))
@@ -423,6 +426,7 @@ void DesktopBehavior::enableChanged()
{
behaviorTab->setTabEnabled(behaviorTab->page(2), enabled);
enableMediaBox->setEnabled(enabled);
+ enableMediaFreeSpaceOverlayBox->setEnabled(enabled);
setMediaListViewEnabled(enableMediaBox->isChecked());
}
diff --git a/kdesktop/kdesktop.kcfg b/kdesktop/kdesktop.kcfg
index 2895db99d..9fbccea9e 100644
--- a/kdesktop/kdesktop.kcfg
+++ b/kdesktop/kdesktop.kcfg
@@ -209,6 +209,11 @@
<!-- kdiconview.cc:261 -->
<!-- TQString tmpList=config->readEntry("exclude","media/hdd_mounted,media/hdd_unmounted,media/floppy_unmounted,media/cdrom_unmounted,media/floppy5_unmounted"); -->
</entry>
+ <entry name="MediaFreeSpaceDisplayEnabled" key="FreeSpaceDisplayEnabled" type="Bool">
+ <default>true</default>
+ <label></label>
+ <whatsthis></whatsthis>
+ </entry>
</group>
<group name="KDE">
<entry key="macStyle" type="Bool">
diff --git a/kdesktop/kdiconview.cc b/kdesktop/kdiconview.cc
index 9b8311828..7aa500162 100644
--- a/kdesktop/kdiconview.cc
+++ b/kdesktop/kdiconview.cc
@@ -39,6 +39,7 @@
#include <konq_popupmenu.h>
#include <konq_settings.h>
#include <konq_undo.h>
+#include <kivfreespaceoverlay.h>
#include <kprotocolinfo.h>
#include <kstdaction.h>
#include <kstandarddirs.h>
@@ -148,7 +149,8 @@ KDIconView::KDIconView( TQWidget *parent, const char* name )
m_bSortDirectoriesFirst( true ),
m_itemsAlwaysFirst(),
m_gotIconsArea(false),
- m_needDesktopAlign(true)
+ m_needDesktopAlign(true),
+ m_paOutstandingOverlaysTimer( 0L )
{
setResizeMode( Fixed );
setIconArea( desktopRect() ); // the default is the whole desktop
@@ -159,8 +161,7 @@ KDIconView::KDIconView( TQWidget *parent, const char* name )
// Initialize media handler
mMediaListView = new TQListView();
- connect( TQApplication::clipboard(), TQT_SIGNAL(dataChanged()),
- this, TQT_SLOT(slotClipboardDataChanged()) );
+ connect( TQApplication::clipboard(), TQT_SIGNAL(dataChanged()), this, TQT_SLOT(slotClipboardDataChanged()) );
setURL( desktopURL() ); // sets m_url
@@ -298,10 +299,12 @@ void KDIconView::initConfig( bool init )
m_bSortDirectoriesFirst = KDesktopSettings::directoriesFirst();
m_itemsAlwaysFirst = KDesktopSettings::alwaysFirstItems(); // Distributor plug-in
- if (KProtocolInfo::isKnownProtocol(TQString::fromLatin1("media")))
+ if (KProtocolInfo::isKnownProtocol(TQString::fromLatin1("media"))) {
m_enableMedia=KDesktopSettings::mediaEnabled();
- else
+ }
+ else {
m_enableMedia=false;
+ }
TQString tmpList=KDesktopSettings::exclude();
kdDebug(1204)<<"m_excludeList"<<tmpList<<endl;
m_excludedMedia=TQStringList::split(",",tmpList,false);
@@ -312,6 +315,7 @@ void KDIconView::initConfig( bool init )
m_dirLister->setShowingDotFiles( m_bShowDot );
m_dirLister->emitChanges();
}
+ slotFreeSpaceOverlaySettingChanged();
setArrangement(m_bVertAlign ? TopToBottom : LeftToRight);
@@ -666,24 +670,27 @@ void KDIconView::slotMouseButtonPressed(int _button, TQIconViewItem* _item, cons
//kdDebug(1204) << "KDIconView::slotMouseButtonPressed" << endl;
if (!m_dirLister) return;
m_lastDeletedIconPos = TQPoint(); // user action -> not renaming an icon
- if(!_item)
+ if(!_item) {
KRootWm::self()->mousePressed( _global, _button );
+ }
}
void KDIconView::slotMouseButtonClickedKDesktop(int _button, TQIconViewItem* _item, const TQPoint&)
{
if (!m_dirLister) return;
//kdDebug(1204) << "KDIconView::slotMouseButtonClickedKDesktop" << endl;
- if ( _item && _button == Qt::MidButton )
+ if ( _item && _button == Qt::MidButton ) {
slotExecuted(_item);
+ }
}
// -----------------------------------------------------------------------------
void KDIconView::slotReturnPressed( TQIconViewItem *item )
{
- if (item && item->isSelected())
+ if (item && item->isSelected()) {
slotExecuted(item);
+ }
}
// -----------------------------------------------------------------------------
@@ -992,8 +999,9 @@ bool KDIconView::makeFriendlyText( KFileIVI *fileIVI )
u.addPath( ".directory" );
// using TDEStandardDirs as this one checks for path being
// a file instead of a directory
- if ( TDEStandardDirs::exists( u.path() ) )
+ if ( TDEStandardDirs::exists( u.path() ) ) {
desktopFile = u.path();
+ }
}
else if ( isDesktopFile( item ) )
{
@@ -1004,36 +1012,44 @@ bool KDIconView::makeFriendlyText( KFileIVI *fileIVI )
{
KSimpleConfig cfg( desktopFile, true );
cfg.setDesktopGroup();
- if (cfg.readBoolEntry("Hidden"))
+ if (cfg.readBoolEntry("Hidden")) {
return false;
+ }
- if (cfg.readBoolEntry( "NoDisplay", false ))
+ if (cfg.readBoolEntry( "NoDisplay", false )) {
return false;
+ }
TQStringList tmpList;
if (cfg.hasKey("OnlyShowIn"))
{
- if (!cfg.readListEntry("OnlyShowIn", ';').contains("TDE"))
+ if (!cfg.readListEntry("OnlyShowIn", ';').contains("TDE")) {
return false;
+ }
}
if (cfg.hasKey("NotShowIn"))
{
- if (cfg.readListEntry("NotShowIn", ';').contains("TDE"))
+ if (cfg.readListEntry("NotShowIn", ';').contains("TDE")) {
return false;
+ }
}
if (cfg.hasKey("TryExec"))
{
- if (TDEStandardDirs::findExe( cfg.readEntry( "TryExec" ) ).isEmpty())
+ if (TDEStandardDirs::findExe( cfg.readEntry( "TryExec" ) ).isEmpty()) {
return false;
+ }
}
TQString name = cfg.readEntry("Name");
- if ( !name.isEmpty() )
+ if ( !name.isEmpty() ) {
fileIVI->setText( name );
- else
+ }
+ else {
// For compatibility
fileIVI->setText( stripDesktopExtension( fileIVI->text() ) );
+ }
}
+
return true;
}
@@ -1057,8 +1073,9 @@ void KDIconView::slotNewItems( const KFileItemList & entries )
TQString desktopPath;
KURL desktop_URL = desktopURL();
- if (desktop_URL.isLocalFile())
+ if (desktop_URL.isLocalFile()) {
desktopPath = desktop_URL.path();
+ }
// We have new items, so we'll need to repaint in slotCompleted
m_bNeedRepaint = true;
kdDebug(1214) << "KDIconView::slotNewItems count=" << entries.count() << endl;
@@ -1090,12 +1107,14 @@ void KDIconView::slotNewItems( const KFileItemList & entries )
if (!desktopPath.isEmpty() && url.isLocalFile() && !url.path().startsWith(desktopPath))
{
TQString fileName = url.fileName();
- if (TQFile::exists(desktopPath + fileName))
+ if (TQFile::exists(desktopPath + fileName)) {
continue; // Don't duplicate entry
+ }
TQString mostLocal = locate("appdata", "Desktop/"+fileName);
- if (!mostLocal.isEmpty() && (mostLocal != url.path()))
+ if (!mostLocal.isEmpty() && (mostLocal != url.path())) {
continue; // Don't duplicate entry
+ }
}
// No delayed mimetype determination on the desktop
@@ -1197,6 +1216,11 @@ void KDIconView::slotNewItems( const KFileItemList & entries )
newItemsList.append(fileIVI);
}
}
+
+ KFileItem* fileItem = fileIVI->item();
+ if ( fileItem->mimetype().startsWith("media/") && fileItem->mimetype().contains("_mounted") && KDesktopSettings::mediaFreeSpaceDisplayEnabled() ) {
+ showFreeSpaceOverlay(fileIVI);
+ }
}
KFileIVIList::iterator newitemit;
@@ -1249,8 +1273,12 @@ void KDIconView::slotRefreshItems( const KFileItemList & entries )
}
else
fileIVI->refreshIcon( true );
- if ( rit.current()->isMimeTypeKnown() )
+ if ( rit.current()->isMimeTypeKnown() ) {
fileIVI->setMouseOverAnimation( rit.current()->iconName() );
+ }
+ if ( rit.current()->mimetype().startsWith("media/") && rit.current()->mimetype().contains("_mounted") && KDesktopSettings::mediaFreeSpaceDisplayEnabled() ) {
+ showFreeSpaceOverlay(fileIVI);
+ }
break;
}
}
@@ -1286,16 +1314,18 @@ void KDIconView::refreshIcons()
void KDIconView::FilesAdded( const KURL & directory )
{
- if ( directory.path().length() <= 1 && directory.protocol() == "trash" )
+ if ( directory.path().length() <= 1 && directory.protocol() == "trash" ) {
refreshTrashIcon();
+ }
}
void KDIconView::FilesRemoved( const KURL::List & fileList )
{
if ( !fileList.isEmpty() ) {
const KURL url = fileList.first();
- if ( url.protocol() == "trash" )
+ if ( url.protocol() == "trash" ) {
refreshTrashIcon();
+ }
}
}
@@ -1317,6 +1347,73 @@ void KDIconView::refreshTrashIcon()
}
}
+void KDIconView::slotFreeSpaceOverlaySettingChanged()
+{
+ bool show = KDesktopSettings::mediaFreeSpaceDisplayEnabled();
+
+ for ( TQIconViewItem *item = firstItem(); item; item = item->nextItem() )
+ {
+ KFileIVI* kItem = static_cast<KFileIVI*>(item);
+ if ( !kItem->item()->isDir() ) continue;
+
+ if (show) {
+ showFreeSpaceOverlay(kItem);
+ } else {
+ kItem -> setShowFreeSpaceOverlay(false);
+ }
+ }
+
+ updateContents();
+}
+
+void KDIconView::showFreeSpaceOverlay(KFileIVI* item)
+{
+ KFileItem* fileItem = item->item();
+
+ if ( TDEGlobalSettings::showFilePreview( fileItem->url() ) ) {
+ m_paOutstandingOverlays.append(item);
+ if (m_paOutstandingOverlays.count() == 1)
+ {
+ if (!m_paOutstandingOverlaysTimer)
+ {
+ m_paOutstandingOverlaysTimer = new TQTimer(this);
+ connect(m_paOutstandingOverlaysTimer, TQT_SIGNAL(timeout()), TQT_SLOT(slotFreeSpaceOverlayStart()));
+ }
+ m_paOutstandingOverlaysTimer->start(20, true);
+ }
+ }
+}
+
+void KDIconView::slotFreeSpaceOverlayStart()
+{
+ do
+ {
+ KFileIVI* item = m_paOutstandingOverlays.first();
+ if (!item) {
+ return; // Nothing to do
+ }
+
+ KIVFreeSpaceOverlay* overlay = item->setShowFreeSpaceOverlay( true );
+
+ if (overlay)
+ {
+ connect( overlay, TQT_SIGNAL( finished() ), this, TQT_SLOT( slotFreeSpaceOverlayFinished() ) );
+ overlay->start(); // Watch out, may emit finished() immediately!!
+ return; // Let it run....
+ }
+ m_paOutstandingOverlays.removeFirst();
+ } while (true);
+}
+
+void KDIconView::slotFreeSpaceOverlayFinished()
+{
+ m_paOutstandingOverlays.removeFirst();
+
+ if (m_paOutstandingOverlays.count() > 0) {
+ m_paOutstandingOverlaysTimer->start(0, true); // Don't call directly to prevent deep recursion.
+ }
+}
+
// -----------------------------------------------------------------------------
void KDIconView::slotDeleteItem( KFileItem * _fileitem )
@@ -1332,8 +1429,9 @@ void KDIconView::slotDeleteItem( KFileItem * _fileitem )
TQString group = iconPositionGroupPrefix();
group.append( fileIVI->item()->url().fileName() );
- if ( m_dotDirectory->hasGroup( group ) )
+ if ( m_dotDirectory->hasGroup( group ) ) {
m_dotDirectory->deleteGroup( group );
+ }
m_lastDeletedIconPos = fileIVI->pos();
delete fileIVI;
diff --git a/kdesktop/kdiconview.h b/kdesktop/kdiconview.h
index c18b0d9d5..963c10a2b 100644
--- a/kdesktop/kdiconview.h
+++ b/kdesktop/kdiconview.h
@@ -20,6 +20,7 @@
#ifndef kdiconview_h
#define kdiconview_h
+#include <tqtimer.h>
#include <tqlistview.h>
#include <konq_iconviewwidget.h>
@@ -164,6 +165,10 @@ public slots:
void slotClear();
void refreshIcons();
+protected slots:
+ void slotFreeSpaceOverlayStart();
+ void slotFreeSpaceOverlayFinished();
+ void slotFreeSpaceOverlaySettingChanged();
protected:
void createActions();
@@ -199,6 +204,8 @@ private:
static void saveIconPosition(KSimpleConfig *config, int x, int y);
static void readIconPosition(KSimpleConfig *config, int &x, int &y);
+ void showFreeSpaceOverlay(KFileIVI* item);
+
/** Our action collection, parent of all our actions */
TDEActionCollection m_actionCollection;
@@ -270,6 +277,10 @@ private:
bool m_needDesktopAlign;
TQListView *mMediaListView;
+
+ TQPtrList<KFileIVI> m_paOutstandingOverlays;
+ TQTimer *m_paOutstandingOverlaysTimer;
+
TDEConfig *g_pConfig;
};
diff --git a/kdesktop/lock/lockdlg.cc b/kdesktop/lock/lockdlg.cc
index a3fe9828c..d401f0b2f 100644
--- a/kdesktop/lock/lockdlg.cc
+++ b/kdesktop/lock/lockdlg.cc
@@ -422,8 +422,8 @@ void PasswordDlg::reapVerify()
{
::close( sFd );
int status;
- ::waitpid( sPid, &status, 0 );
- if (WIFEXITED(status))
+ pid_t retpid = ::waitpid( sPid, &status, 0 );
+ if (WIFEXITED(status)) {
switch (WEXITSTATUS(status)) {
case AuthOk:
greet->succeeded();
@@ -441,6 +441,11 @@ void PasswordDlg::reapVerify()
case AuthAbort:
return;
}
+ }
+ else if (WIFSIGNALED(status)) {
+ // FIXME
+ // ERROR
+ }
cantCheck();
}
diff --git a/kdesktop/tdefileividesktop.cpp b/kdesktop/tdefileividesktop.cpp
index 7d20e4d81..18ba4c156 100644
--- a/kdesktop/tdefileividesktop.cpp
+++ b/kdesktop/tdefileividesktop.cpp
@@ -115,6 +115,7 @@ void KFileIVIDesktop::paintItem( TQPainter *p, const TQColorGroup &cg)
p->restore();
paintOverlay(p);
+ paintOverlayProgressBar(p);
}
bool KFileIVIDesktop::shouldUpdateShadow(bool selected)
diff --git a/kicker/kicker/buttons/kbutton.cpp b/kicker/kicker/buttons/kbutton.cpp
index 88b664059..6e934eb4f 100644
--- a/kicker/kicker/buttons/kbutton.cpp
+++ b/kicker/kicker/buttons/kbutton.cpp
@@ -56,8 +56,8 @@ KButton::KButton( TQWidget* parent )
setButtonText(KickerSettings::kMenuText());
setFont(KickerSettings::buttonFont());
setTextColor(KickerSettings::buttonTextColor());
- setMaximumHeight(30);
- setMaximumWidth(widthForHeight(30));
+ setMaximumHeight(KickerSettings::maximumTDEMenuButtonHeight());
+ setMaximumWidth(widthForHeight(KickerSettings::maximumTDEMenuButtonHeight()));
setCenterButtonInContainer(false);
}
}
@@ -70,7 +70,7 @@ KButton::~KButton()
int KButton::widthForHeight(int height) const
{
if (KickerSettings::showKMenuText()) {
- return PanelPopupButton::widthForHeight(30);
+ return PanelPopupButton::widthForHeight((height>KickerSettings::maximumTDEMenuButtonHeight())?KickerSettings::maximumTDEMenuButtonHeight():height);
}
else {
return PanelPopupButton::widthForHeight(height);
@@ -80,7 +80,9 @@ int KButton::widthForHeight(int height) const
int KButton::heightForWidth(int width) const
{
if (KickerSettings::showKMenuText()) {
- return 30;
+ int recommendation = PanelPopupButton::heightForWidth(width);
+ if (recommendation > KickerSettings::maximumTDEMenuButtonHeight()) recommendation = KickerSettings::maximumTDEMenuButtonHeight();
+ return recommendation;
}
else {
return PanelPopupButton::heightForWidth(width);
diff --git a/kicker/kicker/core/container_button.cpp b/kicker/kicker/core/container_button.cpp
index fa3814bfb..a73d08abf 100644
--- a/kicker/kicker/core/container_button.cpp
+++ b/kicker/kicker/core/container_button.cpp
@@ -150,11 +150,16 @@ void ButtonContainer::embedButton(PanelButton* b)
_button = b;
_button->installEventFilter(this);
- if (b->centerButtonInContainer()) {
- TQVBoxLayout* vbox = new TQVBoxLayout(this);
- vbox->addWidget(_button);
- _layout = vbox;
+ TQVBoxLayout* vbox = new TQVBoxLayout(this);
+ if (!b->centerButtonInContainer()) {
+ b->setSizePolicy(TQSizePolicy::Expanding, TQSizePolicy::Expanding);
}
+ vbox->addWidget(_button, 1);
+ if (!b->centerButtonInContainer()) {
+ TQSpacerItem* spacer = new TQSpacerItem(0, 0, TQSizePolicy::Minimum, TQSizePolicy::MinimumExpanding);
+ vbox->addItem(spacer);
+ }
+ _layout = vbox;
connect(_button, TQT_SIGNAL(requestSave()), TQT_SIGNAL(requestSave()));
connect(_button, TQT_SIGNAL(hideme(bool)), TQT_SLOT(hideRequested(bool)));
diff --git a/kicker/libkicker/kickerSettings.kcfg b/kicker/libkicker/kickerSettings.kcfg
index 9d3b90f58..c1c4f19a5 100644
--- a/kicker/libkicker/kickerSettings.kcfg
+++ b/kicker/libkicker/kickerSettings.kcfg
@@ -434,6 +434,11 @@
<default>3</default>
</entry>
+<entry name="MaximumTDEMenuButtonHeight" key="MaximumTDEMenuButtonHeight" type="Int" >
+ <label>The maximum height of the TDE Menu button in pixels</label>
+ <default>30</default>
+ </entry>
+
<entry name="RemoveButtonsWhenBroken" type="Bool" >
<label>Buttons that represent KServices (applications, primarily) watch for the removal of the service and delete themselves when this happens. This setting turns this off.</label>
<default>true</default>
diff --git a/libkonq/tdefileivi.cc b/libkonq/tdefileivi.cc
index eb7703a83..647e9ae09 100644
--- a/libkonq/tdefileivi.cc
+++ b/libkonq/tdefileivi.cc
@@ -31,6 +31,7 @@
#include <tdefileitem.h>
#include <kdebug.h>
#include <krun.h>
+#include <kservice.h>
#undef Bool
@@ -175,8 +176,9 @@ bool KFileIVI::showDirectoryOverlay( )
KIVFreeSpaceOverlay* KFileIVI::setShowFreeSpaceOverlay( bool show )
{
- if ( !m_fileitem->mimetype().startsWith("media/") )
+ if ( !m_fileitem->mimetype().startsWith("media/") ) {
return 0;
+ }
if (show) {
if (!d->m_freeSpaceOverlay)
@@ -382,13 +384,31 @@ void KFileIVI::returnPressed()
{
if ( static_cast<KonqIconViewWidget*>(iconView())->isDesktop() ) {
KURL url = m_fileitem->url();
- // When clicking on a link to e.g. $HOME from the desktop, we want to open $HOME
- // Symlink resolution must only happen on the desktop though (#63014)
- if ( m_fileitem->isLink() && url.isLocalFile() )
- url = KURL( url, m_fileitem->linkDest() );
-
- (void) new KRun( url, m_fileitem->mode(), m_fileitem->isLocalFile() );
- } else {
+ if (url.protocol() == "media") {
+ // The user reasonably expects to be placed within the media:/ tree
+ // when opening a media device from the desktop
+ KService::Ptr service = KService::serviceByDesktopName("konqueror");
+ if (service) {
+ // HACK
+ // There doesn't seem to be a way to prevent KRun from resolving the URL to its
+ // local path, so simpy launch Konqueror with the correct arguments instead...
+ KRun::runCommand("konqueror " + url.url(), "konqueror", service->icon());
+ }
+ else {
+ (void) new KRun( url, m_fileitem->mode(), m_fileitem->isLocalFile() );
+ }
+ }
+ else {
+ // When clicking on a link to e.g. $HOME from the desktop, we want to open $HOME
+ // Symlink resolution must only happen on the desktop though (#63014)
+ if ( m_fileitem->isLink() && url.isLocalFile() ) {
+ url = KURL( url, m_fileitem->linkDest() );
+ }
+
+ (void) new KRun( url, m_fileitem->mode(), m_fileitem->isLocalFile() );
+ }
+ }
+ else {
m_fileitem->run();
}
}
diff --git a/tdeioslave/media/services/media_unmount.desktop b/tdeioslave/media/services/media_unmount.desktop
index c76adf1f5..47eae4624 100644
--- a/tdeioslave/media/services/media_unmount.desktop
+++ b/tdeioslave/media/services/media_unmount.desktop
@@ -1,5 +1,5 @@
[Desktop Entry]
-ServiceTypes=media/cdrom_mounted,media/cdrom_mounted_decrypted,media/cdwriter_mounted,media/cdwriter_mounted_decrypted,media/dvd_mounted,media/dvd_mounted_decrypted,media/floppy5_mounted,media/floppy_mounted,media/hdd_mounted,media/hdd_mounted_decrypted,media/nfs_mounted,media/smb_mounted,media/zip_mounted,media/vcd,media/svcd,media/dvdvideo
+ServiceTypes=media/removable_mounted,media/removable_mounted_decrypted,media/cdrom_mounted,media/cdrom_mounted_decrypted,media/cdwriter_mounted,media/cdwriter_mounted_decrypted,media/dvd_mounted,media/dvd_mounted_decrypted,media/floppy5_mounted,media/floppy_mounted,media/hdd_mounted,media/hdd_mounted_decrypted,media/nfs_mounted,media/smb_mounted,media/zip_mounted,media/vcd,media/svcd,media/dvdvideo
Actions=MediaUnmount;
X-TDE-Priority=TopLevel
X-TDE-MediaNotifierHide=true