summaryrefslogtreecommitdiffstats
path: root/kio/kfile/kopenwith.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kio/kfile/kopenwith.cpp')
-rw-r--r--kio/kfile/kopenwith.cpp851
1 files changed, 0 insertions, 851 deletions
diff --git a/kio/kfile/kopenwith.cpp b/kio/kfile/kopenwith.cpp
deleted file mode 100644
index 691487730..000000000
--- a/kio/kfile/kopenwith.cpp
+++ /dev/null
@@ -1,851 +0,0 @@
-/* This file is part of the KDE libraries
-
- Copyright (C) 1997 Torben Weis <weis@stud.uni-frankfurt.de>
- Copyright (C) 1999 Dirk Mueller <mueller@kde.org>
- Portions copyright (C) 1999 Preston Brown <pbrown@kde.org>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#include <tqfile.h>
-#include <tqdir.h>
-#include <tqdialog.h>
-#include <tqimage.h>
-#include <tqpixmap.h>
-#include <tqlabel.h>
-#include <tqlayout.h>
-#include <tqpushbutton.h>
-#include <tqtoolbutton.h>
-#include <tqcheckbox.h>
-#include <tqtooltip.h>
-#include <tqstyle.h>
-#include <tqwhatsthis.h>
-
-#include <kapplication.h>
-#include <kbuttonbox.h>
-#include <kcombobox.h>
-#include <kdesktopfile.h>
-#include <kdialog.h>
-#include <kglobal.h>
-#include <klineedit.h>
-#include <klocale.h>
-#include <kiconloader.h>
-#include <kmimemagic.h>
-#include <krun.h>
-#include <kstandarddirs.h>
-#include <kstringhandler.h>
-#include <kuserprofile.h>
-#include <kurlcompletion.h>
-#include <kurlrequester.h>
-#include <dcopclient.h>
-#include <kmimetype.h>
-#include <kservicegroup.h>
-#include <klistview.h>
-#include <tdesycoca.h>
-#include <kstdguiitem.h>
-
-#include "kopenwith.h"
-#include "kopenwith_p.h"
-
-#include <kdebug.h>
-#include <assert.h>
-#include <stdlib.h>
-
-#define SORT_SPEC (TQDir::DirsFirst | TQDir::Name | TQDir::IgnoreCase)
-
-
-// ----------------------------------------------------------------------
-
-KAppTreeListItem::KAppTreeListItem( KListView* parent, const TQString & name,
- const TQPixmap& pixmap, bool parse, bool dir, const TQString &p, const TQString &c )
- : TQListViewItem( parent, name )
-{
- init(pixmap, parse, dir, p, c);
-}
-
-
-// ----------------------------------------------------------------------
-
-KAppTreeListItem::KAppTreeListItem( TQListViewItem* parent, const TQString & name,
- const TQPixmap& pixmap, bool parse, bool dir, const TQString &p, const TQString &c )
- : TQListViewItem( parent, name )
-{
- init(pixmap, parse, dir, p, c);
-}
-
-
-// ----------------------------------------------------------------------
-
-void KAppTreeListItem::init(const TQPixmap& pixmap, bool parse, bool dir, const TQString &_path, const TQString &_exec)
-{
- setPixmap(0, pixmap);
- parsed = parse;
- directory = dir;
- path = _path; // relative path
- exec = _exec;
-}
-
-
-/* Ensures that directories sort before non-directories */
-int KAppTreeListItem::compare(TQListViewItem *i, int col, bool ascending) const
-{
- KAppTreeListItem *other = dynamic_cast<KAppTreeListItem *>(i);
-
- // Directories sort first
- if (directory && !other->directory)
- return -1;
-
- else if (!directory && other->directory)
- return 1;
-
- else // both directories or both not
- return TQListViewItem::compare(i, col, ascending);
-}
-
-// ----------------------------------------------------------------------
-// Ensure that case is ignored
-TQString KAppTreeListItem::key(int column, bool /*ascending*/) const
-{
- return text(column).upper();
-}
-
-void KAppTreeListItem::activate()
-{
- if ( directory )
- setOpen(!isOpen());
-}
-
-void KAppTreeListItem::setOpen( bool o )
-{
- if( o && !parsed ) { // fill the children before opening
- ((TDEApplicationTree *) parent())->addDesktopGroup( path, this );
- parsed = true;
- }
- TQListViewItem::setOpen( o );
-}
-
-bool KAppTreeListItem::isDirectory()
-{
- return directory;
-}
-
-// ----------------------------------------------------------------------
-
-TDEApplicationTree::TDEApplicationTree( TQWidget *parent )
- : KListView( parent ), currentitem(0)
-{
- addColumn( i18n("Known Applications") );
- setRootIsDecorated( true );
-
- addDesktopGroup( TQString::null );
- cleanupTree();
-
- connect( this, TQT_SIGNAL( currentChanged(TQListViewItem*) ),
- TQT_SLOT( slotItemHighlighted(TQListViewItem*) ) );
- connect( this, TQT_SIGNAL( selectionChanged(TQListViewItem*) ),
- TQT_SLOT( slotSelectionChanged(TQListViewItem*) ) );
-}
-
-// ----------------------------------------------------------------------
-
-bool TDEApplicationTree::isDirSel()
-{
- if (!currentitem) return false; // if currentitem isn't set
- return currentitem->isDirectory();
-}
-
-// ----------------------------------------------------------------------
-
-static TQPixmap appIcon(const TQString &iconName)
-{
- TQPixmap normal = TDEGlobal::iconLoader()->loadIcon(iconName, KIcon::Small, 0, KIcon::DefaultState, 0L, true);
- // make sure they are not larger than 20x20
- if (normal.width() > 20 || normal.height() > 20)
- {
- TQImage tmp = normal.convertToImage();
- tmp = tmp.smoothScale(20, 20);
- normal.convertFromImage(tmp);
- }
- return normal;
-}
-
-void TDEApplicationTree::addDesktopGroup( const TQString &relPath, KAppTreeListItem *item)
-{
- KServiceGroup::Ptr root = KServiceGroup::group(relPath);
- if (!root || !root->isValid()) return;
-
- KServiceGroup::List list = root->entries();
-
- KAppTreeListItem * newItem;
- for( KServiceGroup::List::ConstIterator it = list.begin();
- it != list.end(); it++)
- {
- TQString icon;
- TQString text;
- TQString relPath;
- TQString exec;
- bool isDir = false;
- KSycocaEntry *p = (*it);
- if (p->isType(KST_KService))
- {
- KService *service = static_cast<KService *>(p);
-
- if (service->noDisplay())
- continue;
-
- icon = service->icon();
- text = service->name();
- exec = service->exec();
- }
- else if (p->isType(KST_KServiceGroup))
- {
- KServiceGroup *serviceGroup = static_cast<KServiceGroup *>(p);
-
- if (serviceGroup->noDisplay() || serviceGroup->childCount() == 0)
- continue;
-
- icon = serviceGroup->icon();
- text = serviceGroup->caption();
- relPath = serviceGroup->relPath();
- isDir = true;
- }
- else
- {
- kdWarning(250) << "KServiceGroup: Unexpected object in list!" << endl;
- continue;
- }
-
- TQPixmap pixmap = appIcon( icon );
-
- if (item)
- newItem = new KAppTreeListItem( item, text, pixmap, false, isDir,
- relPath, exec );
- else
- newItem = new KAppTreeListItem( this, text, pixmap, false, isDir,
- relPath, exec );
- if (isDir)
- newItem->setExpandable( true );
- }
-}
-
-
-// ----------------------------------------------------------------------
-
-void TDEApplicationTree::slotItemHighlighted(TQListViewItem* i)
-{
- // i may be 0 (see documentation)
- if(!i)
- return;
-
- KAppTreeListItem *item = (KAppTreeListItem *) i;
-
- currentitem = item;
-
- if( (!item->directory ) && (!item->exec.isEmpty()) )
- emit highlighted( item->text(0), item->exec );
-}
-
-
-// ----------------------------------------------------------------------
-
-void TDEApplicationTree::slotSelectionChanged(TQListViewItem* i)
-{
- // i may be 0 (see documentation)
- if(!i)
- return;
-
- KAppTreeListItem *item = (KAppTreeListItem *) i;
-
- currentitem = item;
-
- if( ( !item->directory ) && (!item->exec.isEmpty() ) )
- emit selected( item->text(0), item->exec );
-}
-
-// ----------------------------------------------------------------------
-
-void TDEApplicationTree::resizeEvent( TQResizeEvent * e)
-{
- setColumnWidth(0, width()-TQApplication::style().pixelMetric(TQStyle::PM_ScrollBarExtent)
- -2*TQApplication::style().pixelMetric(TQStyle::PM_DefaultFrameWidth));
- KListView::resizeEvent(e);
-}
-
-// Prune empty directories from the tree
-void TDEApplicationTree::cleanupTree()
-{
- TQListViewItem *item=firstChild();
- while(item!=0)
- {
- if(item->isExpandable())
- {
- TQListViewItem *temp=item->itemBelow();
- if(item->text(0)!=i18n("Applications"))
- item->setOpen(false);
- item=temp;
- continue;
- }
- item=item->itemBelow();
- }
-}
-
-/***************************************************************
- *
- * KOpenWithDlg
- *
- ***************************************************************/
-class KOpenWithDlgPrivate
-{
-public:
- KOpenWithDlgPrivate() : saveNewApps(false) { };
- TQPushButton* ok;
- bool saveNewApps;
- KService::Ptr curService;
-};
-
-KOpenWithDlg::KOpenWithDlg( const KURL::List& _urls, TQWidget* parent )
- :TQDialog( parent, "openwith", true )
-{
- setCaption( i18n( "Open With" ) );
- TQString text;
- if( _urls.count() == 1 )
- {
- text = i18n("<qt>Select the program that should be used to open <b>%1</b>. "
- "If the program is not listed, enter the name or click "
- "the browse button.</qt>").arg( _urls.first().fileName() );
- }
- else
- // Should never happen ??
- text = i18n( "Choose the name of the program with which to open the selected files." );
- setServiceType( _urls );
- init( text, TQString() );
-}
-
-KOpenWithDlg::KOpenWithDlg( const KURL::List& _urls, const TQString&_text,
- const TQString& _value, TQWidget *parent)
- :TQDialog( parent, "openwith", true )
-{
- TQString caption = KStringHandler::csqueeze( _urls.first().prettyURL() );
- if (_urls.count() > 1)
- caption += TQString::fromLatin1("...");
- setCaption(caption);
- setServiceType( _urls );
- init( _text, _value );
-}
-
-KOpenWithDlg::KOpenWithDlg( const TQString &serviceType, const TQString& value,
- TQWidget *parent)
- :TQDialog( parent, "openwith", true )
-{
- setCaption(i18n("Choose Application for %1").arg(serviceType));
- TQString text = i18n("<qt>Select the program for the file type: <b>%1</b>. "
- "If the program is not listed, enter the name or click "
- "the browse button.</qt>").arg(serviceType);
- qServiceType = serviceType;
- init( text, value );
- if (remember)
- remember->hide();
-}
-
-KOpenWithDlg::KOpenWithDlg( TQWidget *parent)
- :TQDialog( parent, "openwith", true )
-{
- setCaption(i18n("Choose Application"));
- TQString text = i18n("<qt>Select a program. "
- "If the program is not listed, enter the name or click "
- "the browse button.</qt>");
- qServiceType = TQString::null;
- init( text, TQString::null );
-}
-
-void KOpenWithDlg::setServiceType( const KURL::List& _urls )
-{
- if ( _urls.count() == 1 )
- {
- qServiceType = KMimeType::findByURL( _urls.first())->name();
- if (qServiceType == TQString::fromLatin1("application/octet-stream"))
- qServiceType = TQString::null;
- }
- else
- qServiceType = TQString::null;
-}
-
-void KOpenWithDlg::init( const TQString& _text, const TQString& _value )
-{
- d = new KOpenWithDlgPrivate;
- bool bReadOnly = kapp && !kapp->authorize("shell_access");
- m_terminaldirty = false;
- m_pTree = 0L;
- m_pService = 0L;
- d->curService = 0L;
-
- TQBoxLayout *topLayout = new TQVBoxLayout( this, KDialog::marginHint(),
- KDialog::spacingHint() );
- label = new TQLabel( _text, this );
- topLayout->addWidget(label);
-
- TQHBoxLayout* hbox = new TQHBoxLayout(topLayout);
-
- TQToolButton *clearButton = new TQToolButton( this );
- clearButton->setIconSet( BarIcon( "locationbar_erase" ) );
- clearButton->setFixedSize( clearButton->sizeHint() );
- connect( clearButton, TQT_SIGNAL( clicked() ), TQT_SLOT( slotClear() ) );
- TQToolTip::add( clearButton, i18n( "Clear input field" ) );
-
- hbox->addWidget( clearButton );
-
- if (!bReadOnly)
- {
- // init the history combo and insert it into the URL-Requester
- KHistoryCombo *combo = new KHistoryCombo();
- combo->setDuplicatesEnabled( false );
- TDEConfig *kc = TDEGlobal::config();
- TDEConfigGroupSaver ks( kc, TQString::fromLatin1("Open-with settings") );
- int max = kc->readNumEntry( TQString::fromLatin1("Maximum history"), 15 );
- combo->setMaxCount( max );
- int mode = kc->readNumEntry(TQString::fromLatin1("CompletionMode"),
- TDEGlobalSettings::completionMode());
- combo->setCompletionMode((TDEGlobalSettings::Completion)mode);
- TQStringList list = kc->readListEntry( TQString::fromLatin1("History") );
- combo->setHistoryItems( list, true );
- edit = new KURLRequester( combo, this );
- }
- else
- {
- clearButton->hide();
- edit = new KURLRequester( this );
- edit->lineEdit()->setReadOnly(true);
- edit->button()->hide();
- }
-
- edit->setURL( _value );
- TQWhatsThis::add(edit,i18n(
- "Following the command, you can have several place holders which will be replaced "
- "with the actual values when the actual program is run:\n"
- "%f - a single file name\n"
- "%F - a list of files; use for applications that can open several local files at once\n"
- "%u - a single URL\n"
- "%U - a list of URLs\n"
- "%d - the directory of the file to open\n"
- "%D - a list of directories\n"
- "%i - the icon\n"
- "%m - the mini-icon\n"
- "%c - the comment"));
-
- hbox->addWidget(edit);
-
- if ( edit->comboBox() ) {
- KURLCompletion *comp = new KURLCompletion( KURLCompletion::ExeCompletion );
- edit->comboBox()->setCompletionObject( comp );
- edit->comboBox()->setAutoDeleteCompletionObject( true );
- }
-
- connect ( edit, TQT_SIGNAL(returnPressed()), TQT_SLOT(slotOK()) );
- connect ( edit, TQT_SIGNAL(textChanged(const TQString&)), TQT_SLOT(slotTextChanged()) );
-
- m_pTree = new TDEApplicationTree( this );
- topLayout->addWidget(m_pTree);
-
- connect( m_pTree, TQT_SIGNAL( selected( const TQString&, const TQString& ) ),
- TQT_SLOT( slotSelected( const TQString&, const TQString& ) ) );
- connect( m_pTree, TQT_SIGNAL( highlighted( const TQString&, const TQString& ) ),
- TQT_SLOT( slotHighlighted( const TQString&, const TQString& ) ) );
- connect( m_pTree, TQT_SIGNAL( doubleClicked(TQListViewItem*) ),
- TQT_SLOT( slotDbClick() ) );
-
- terminal = new TQCheckBox( i18n("Run in &terminal"), this );
- if (bReadOnly)
- terminal->hide();
- connect(terminal, TQT_SIGNAL(toggled(bool)), TQT_SLOT(slotTerminalToggled(bool)));
-
- topLayout->addWidget(terminal);
-
- TQBoxLayout* nocloseonexitLayout = new TQHBoxLayout( 0, 0, KDialog::spacingHint() );
- TQSpacerItem* spacer = new TQSpacerItem( 20, 0, TQSizePolicy::Fixed, TQSizePolicy::Minimum );
- nocloseonexitLayout->addItem( spacer );
-
- nocloseonexit = new TQCheckBox( i18n("&Do not close when command exits"), this );
- nocloseonexit->setChecked( false );
- nocloseonexit->setDisabled( true );
-
- // check to see if we use konsole if not disable the nocloseonexit
- // because we don't know how to do this on other terminal applications
- TDEConfigGroup confGroup( TDEGlobal::config(), TQString::fromLatin1("General") );
- TQString preferredTerminal = confGroup.readPathEntry("TerminalApplication", TQString::fromLatin1("konsole"));
-
- if (bReadOnly || preferredTerminal != "konsole")
- nocloseonexit->hide();
-
- nocloseonexitLayout->addWidget( nocloseonexit );
- topLayout->addLayout( nocloseonexitLayout );
-
- if (!qServiceType.isNull())
- {
- remember = new TQCheckBox(i18n("&Remember application association for this type of file"), this);
- // remember->setChecked(true);
- topLayout->addWidget(remember);
- }
- else
- remember = 0L;
-
- // Use KButtonBox for the aligning pushbuttons nicely
- KButtonBox* b = new KButtonBox( this );
- b->addStretch( 2 );
-
- d->ok = b->addButton( KStdGuiItem::ok() );
- d->ok->setDefault( true );
- connect( d->ok, TQT_SIGNAL( clicked() ), TQT_SLOT( slotOK() ) );
-
- TQPushButton* cancel = b->addButton( KStdGuiItem::cancel() );
- connect( cancel, TQT_SIGNAL( clicked() ), TQT_SLOT( reject() ) );
-
- b->layout();
- topLayout->addWidget( b );
-
- //edit->setText( _value );
- // This is what caused "can't click on items before clicking on Name header".
- // Probably due to the resizeEvent handler using width().
- //resize( minimumWidth(), sizeHint().height() );
- edit->setFocus();
- slotTextChanged();
-}
-
-
-// ----------------------------------------------------------------------
-
-KOpenWithDlg::~KOpenWithDlg()
-{
- delete d;
- d = 0;
-}
-
-// ----------------------------------------------------------------------
-
-void KOpenWithDlg::slotClear()
-{
- edit->setURL(TQString::null);
- edit->setFocus();
-}
-
-
-// ----------------------------------------------------------------------
-
-void KOpenWithDlg::slotSelected( const TQString& /*_name*/, const TQString& _exec )
-{
- kdDebug(250)<<"KOpenWithDlg::slotSelected"<<endl;
- KService::Ptr pService = d->curService;
- edit->setURL( _exec ); // calls slotTextChanged :(
- d->curService = pService;
-}
-
-
-// ----------------------------------------------------------------------
-
-void KOpenWithDlg::slotHighlighted( const TQString& _name, const TQString& )
-{
- kdDebug(250)<<"KOpenWithDlg::slotHighlighted"<<endl;
- qName = _name;
- d->curService = KService::serviceByName( qName );
- if (!m_terminaldirty)
- {
- // ### indicate that default value was restored
- terminal->setChecked(d->curService->terminal());
- TQString terminalOptions = d->curService->terminalOptions();
- nocloseonexit->setChecked( (terminalOptions.contains( "--noclose" ) > 0) );
- m_terminaldirty = false; // slotTerminalToggled changed it
- }
-}
-
-// ----------------------------------------------------------------------
-
-void KOpenWithDlg::slotTextChanged()
-{
- kdDebug(250)<<"KOpenWithDlg::slotTextChanged"<<endl;
- // Forget about the service
- d->curService = 0L;
- d->ok->setEnabled( !edit->url().isEmpty());
-}
-
-// ----------------------------------------------------------------------
-
-void KOpenWithDlg::slotTerminalToggled(bool)
-{
- // ### indicate that default value was overridden
- m_terminaldirty = true;
- nocloseonexit->setDisabled( ! terminal->isChecked() );
-}
-
-// ----------------------------------------------------------------------
-
-void KOpenWithDlg::slotDbClick()
-{
- if (m_pTree->isDirSel() ) return; // check if a directory is selected
- slotOK();
-}
-
-void KOpenWithDlg::setSaveNewApplications(bool b)
-{
- d->saveNewApps = b;
-}
-
-void KOpenWithDlg::slotOK()
-{
- TQString typedExec(edit->url());
- TQString fullExec(typedExec);
-
- TQString serviceName;
- TQString initialServiceName;
- TQString preferredTerminal;
- m_pService = d->curService;
- if (!m_pService) {
- // No service selected - check the command line
-
- // Find out the name of the service from the command line, removing args and paths
- serviceName = KRun::binaryName( typedExec, true );
- if (serviceName.isEmpty())
- {
- // TODO add a KMessageBox::error here after the end of the message freeze
- return;
- }
- initialServiceName = serviceName;
- kdDebug(250) << "initialServiceName=" << initialServiceName << endl;
- int i = 1; // We have app, app-2, app-3... Looks better for the user.
- bool ok = false;
- // Check if there's already a service by that name, with the same Exec line
- do {
- kdDebug(250) << "looking for service " << serviceName << endl;
- KService::Ptr serv = KService::serviceByDesktopName( serviceName );
- ok = !serv; // ok if no such service yet
- // also ok if we find the exact same service (well, "kwrite" == "kwrite %U"
- if ( serv && serv->type() == "Application")
- {
- TQString exec = serv->exec();
- fullExec = exec;
- exec.replace("%u", "", false);
- exec.replace("%f", "", false);
- exec.replace("-caption %c", "");
- exec.replace("-caption \"%c\"", "");
- exec.replace("%i", "");
- exec.replace("%m", "");
- exec = exec.simplifyWhiteSpace();
- if (exec == typedExec)
- {
- ok = true;
- m_pService = serv;
- kdDebug(250) << k_funcinfo << "OK, found identical service: " << serv->desktopEntryPath() << endl;
- }
- }
- if (!ok) // service was found, but it was different -> keep looking
- {
- ++i;
- serviceName = initialServiceName + "-" + TQString::number(i);
- }
- }
- while (!ok);
- }
- if ( m_pService )
- {
- // Existing service selected
- serviceName = m_pService->name();
- initialServiceName = serviceName;
- fullExec = m_pService->exec();
- }
-
- if (terminal->isChecked())
- {
- TDEConfigGroup confGroup( TDEGlobal::config(), TQString::fromLatin1("General") );
- preferredTerminal = confGroup.readPathEntry("TerminalApplication", TQString::fromLatin1("konsole"));
- m_command = preferredTerminal;
- // only add --noclose when we are sure it is konsole we're using
- if (preferredTerminal == "konsole" && nocloseonexit->isChecked())
- m_command += TQString::fromLatin1(" --noclose");
- m_command += TQString::fromLatin1(" -e ");
- m_command += edit->url();
- kdDebug(250) << "Setting m_command to " << m_command << endl;
- }
- if ( m_pService && terminal->isChecked() != m_pService->terminal() )
- m_pService = 0L; // It's not exactly this service we're running
-
- bool bRemember = remember && remember->isChecked();
-
- if ( !bRemember && m_pService)
- {
- accept();
- return;
- }
-
- if (!bRemember && !d->saveNewApps)
- {
- // Create temp service
- m_pService = new KService(initialServiceName, fullExec, TQString::null);
- if (terminal->isChecked())
- {
- m_pService->setTerminal(true);
- // only add --noclose when we are sure it is konsole we're using
- if (preferredTerminal == "konsole" && nocloseonexit->isChecked())
- m_pService->setTerminalOptions("--noclose");
- }
- accept();
- return;
- }
-
- // if we got here, we can't seem to find a service for what they
- // wanted. The other possibility is that they have asked for the
- // association to be remembered. Create/update service.
-
- TQString newPath;
- TQString oldPath;
- TQString menuId;
- if (m_pService)
- {
- oldPath = m_pService->desktopEntryPath();
- newPath = m_pService->locateLocal();
- menuId = m_pService->menuId();
- kdDebug(250) << "Updating exitsing service " << m_pService->desktopEntryPath() << " ( " << newPath << " ) " << endl;
- }
- else
- {
- newPath = KService::newServicePath(false /* hidden */, serviceName, &menuId);
- kdDebug(250) << "Creating new service " << serviceName << " ( " << newPath << " ) " << endl;
- }
-
- int maxPreference = 1;
- if (!qServiceType.isEmpty())
- {
- KServiceTypeProfile::OfferList offerList = KServiceTypeProfile::offers( qServiceType );
- if (!offerList.isEmpty())
- maxPreference = offerList.first().preference();
- }
-
- KDesktopFile *desktop = 0;
- if (!oldPath.isEmpty() && (oldPath != newPath))
- {
- KDesktopFile orig(oldPath, true);
- desktop = orig.copyTo(newPath);
- }
- else
- {
- desktop = new KDesktopFile(newPath);
- }
- desktop->writeEntry("Type", TQString::fromLatin1("Application"));
- desktop->writeEntry("Name", initialServiceName);
- desktop->writePathEntry("Exec", fullExec);
- if (terminal->isChecked())
- {
- desktop->writeEntry("Terminal", true);
- // only add --noclose when we are sure it is konsole we're using
- if (preferredTerminal == "konsole" && nocloseonexit->isChecked())
- desktop->writeEntry("TerminalOptions", "--noclose");
- }
- else
- {
- desktop->writeEntry("Terminal", false);
- }
- desktop->writeEntry("InitialPreference", maxPreference + 1);
-
-
- if (bRemember || d->saveNewApps)
- {
- TQStringList mimeList = desktop->readListEntry("MimeType", ';');
- if (!qServiceType.isEmpty() && !mimeList.contains(qServiceType))
- mimeList.append(qServiceType);
- desktop->writeEntry("MimeType", mimeList, ';');
-
- if ( !qServiceType.isEmpty() )
- {
- // Also make sure the "auto embed" setting for this mimetype is off
- KDesktopFile mimeDesktop( locateLocal( "mime", qServiceType + ".desktop" ) );
- mimeDesktop.writeEntry( "X-TDE-AutoEmbed", false );
- mimeDesktop.sync();
- }
- }
-
- // write it all out to the file
- desktop->sync();
- delete desktop;
-
- KService::rebuildKSycoca(this);
-
- m_pService = KService::serviceByMenuId( menuId );
-
- Q_ASSERT( m_pService );
-
- accept();
-}
-
-TQString KOpenWithDlg::text() const
-{
- if (!m_command.isEmpty())
- return m_command;
- else
- return edit->url();
-}
-
-void KOpenWithDlg::hideNoCloseOnExit()
-{
- // uncheck the checkbox because the value could be used when "Run in Terminal" is selected
- nocloseonexit->setChecked( false );
- nocloseonexit->hide();
-}
-
-void KOpenWithDlg::hideRunInTerminal()
-{
- terminal->hide();
- hideNoCloseOnExit();
-}
-
-void KOpenWithDlg::accept()
-{
- KHistoryCombo *combo = static_cast<KHistoryCombo*>( edit->comboBox() );
- if ( combo ) {
- combo->addToHistory( edit->url() );
-
- TDEConfig *kc = TDEGlobal::config();
- TDEConfigGroupSaver ks( kc, TQString::fromLatin1("Open-with settings") );
- kc->writeEntry( TQString::fromLatin1("History"), combo->historyItems() );
- kc->writeEntry(TQString::fromLatin1("CompletionMode"),
- combo->completionMode());
- // don't store the completion-list, as it contains all of KURLCompletion's
- // executables
- kc->sync();
- }
-
- TQDialog::accept();
-}
-
-
-///////////////
-
-#ifndef KDE_NO_COMPAT
-bool KFileOpenWithHandler::displayOpenWithDialog( const KURL::List& urls )
-{
- KOpenWithDlg l( urls, i18n("Open with:"), TQString::null, 0L );
- if ( l.exec() )
- {
- KService::Ptr service = l.service();
- if ( !!service )
- return KRun::run( *service, urls );
-
- kdDebug(250) << "No service set, running " << l.text() << endl;
- return KRun::run( l.text(), urls );
- }
- return false;
-}
-#endif
-
-#include "kopenwith.moc"
-#include "kopenwith_p.moc"
-