Bug 116423 - Please remove "create data cd" from context menus by default
Summary: Please remove "create data cd" from context menus by default
Status: RESOLVED FIXED
Alias: None
Product: k3b
Classification: Applications
Component: general (show other bugs)
Version: unspecified
Platform: Compiled Sources Linux
: NOR wishlist
Target Milestone: ---
Assignee: Sebastian Trueg
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-11-15 14:29 UTC by Andrew Kohlsmith
Modified: 2006-11-24 11:25 UTC (History)
0 users

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Andrew Kohlsmith 2005-11-15 14:29:35 UTC
Version:            (using KDE KDE 3.4.92)
Installed from:    Compiled From Sources

This is following bug:116349 where I am trying to achieve better usability.  I see wishlist 110017 has been granted, which only makes things worse.

The context menu is (IMO) designed for only the most frequent items to be added.  I feel strongly that automatically adding "Actions->Create data CD" and now even "Actions->Create data DVD" is over-the-top.  I understand that some people may use this context menu stuff but the context menu really is getting VERY cluttered with every application throwing in their features.

My wishlist is that these items are NOT added to the context menu by *default* -- Please, if you absolutely must have them, allow a user to turn them ON by opening K3B directly and changing a checkbox preference.  A default KDE install has soooooooooo many extraneous items in the context menus that they become useless and worse than that, confusing.

Please, do not add these two actions by default in KDE 3.5 final.  Add a checkbox option in K3B's preferences so that users who burn CDs constantly can add the option to their context menus, but don't burden *everyone* with these extra items in there by default!
Comment 1 Sebastian Trueg 2006-11-24 11:25:53 UTC
SVN commit 607365 by trueg:

* Audio project not modified after loading anymore (this was caused by
  stupid QListViewItem::paintCell which actually calls setText,
  apperantly to initialize the column info.)
* Fixed K3bMixedDoc::isModified
* Made the konqueror service menus configurable (i.e. one can disable
  them)
* Added a first run dialog which asks if the konqi service menus should
  be anabled or not.

BUGS: 116423, 95113


 M  +0 -2      libk3b/projects/audiocd/k3baudiodoc.cpp  
 M  +1 -1      libk3b/projects/k3bdoc.h  
 M  +8 -2      libk3b/projects/mixedcd/k3bmixeddoc.cpp  
 M  +1 -0      libk3b/projects/mixedcd/k3bmixeddoc.h  
 M  +1 -1      src/Makefile.am  
 M  +3 -0      src/k3bapplication.cpp  
 A             src/k3bfirstrun.cpp   [License: GPL (v2+)]
 A             src/k3bfirstrun.h   [License: GPL (v2+)]
 M  +2 -0      src/k3bprojectmanager.cpp  
 A             src/k3bservicemenuinstaller.cpp   [License: GPL (v2+)]
 A             src/k3bservicemenuinstaller.h   [License: GPL (v2+)]
 M  +3 -2      src/k3bstatusbarmanager.cpp  
 M  +5 -4      src/konqi/Makefile.am  
 M  +19 -8     src/option/base_k3bmiscoptiontab.ui  
 M  +10 -0     src/option/k3bmiscoptiontab.cpp  
 M  +5 -1      src/projects/k3baudiodatasourceviewitem.cpp  
 M  +12 -3     src/projects/k3baudiotrackviewitem.cpp  


--- trunk/extragear/multimedia/k3b/libk3b/projects/audiocd/k3baudiodoc.cpp #607364:607365
@@ -37,7 +37,6 @@
 #include <qdir.h>
 #include <qdom.h>
 #include <qdatetime.h>
-#include <qtimer.h>
 #include <qtextstream.h>
 #include <qsemaphore.h>
 
@@ -974,7 +973,6 @@
 {
   kdDebug() << "(K3bAudioDoc::slotTrackChanged " << track << endl;
   setModified( true );
-  emit changed();
   // if the track is empty now we simply delete it
   if( track->firstSource() )
     emit trackChanged(track);
--- trunk/extragear/multimedia/k3b/libk3b/projects/k3bdoc.h #607364:607365
@@ -99,7 +99,7 @@
   /** 
    * sets the modified flag for the document after a modifying action on the view connected to the document.
    */
-  void setModified( bool m = true );
+  virtual void setModified( bool m = true );
 
   /** 
    * returns if the document is modified or not. Use this to determine 
--- trunk/extragear/multimedia/k3b/libk3b/projects/mixedcd/k3bmixeddoc.cpp #607364:607365
@@ -72,6 +72,13 @@
 }
 
 
+void K3bMixedDoc::setModified( bool m )
+{
+  m_audioDoc->setModified( m );
+  m_dataDoc->setModified( m );
+}
+
+
 bool K3bMixedDoc::isModified() const
 {
   return ( m_audioDoc->isModified() || m_dataDoc->isModified() );
@@ -198,8 +205,7 @@
   }
   mixedElem.appendChild( mixedTypeElem );
 
-  m_audioDoc->setModified( false );
-  m_dataDoc->setModified( false );
+  setModified( false );
 
   return true;
 }
--- trunk/extragear/multimedia/k3b/libk3b/projects/mixedcd/k3bmixeddoc.h #607364:607365
@@ -42,6 +42,7 @@
 
   bool newDocument();
 
+  void setModified( bool m = true );
   bool isModified() const;
 
   KIO::filesize_t size() const;
--- trunk/extragear/multimedia/k3b/src/Makefile.am #607364:607365
@@ -23,7 +23,7 @@
 	k3bwidgetshoweffect.cpp k3bmediaselectiondialog.cpp k3bdiskinfoview.cpp \
 	k3bpassivepopup.cpp k3btimeoutwidget.cpp k3bminibutton.cpp \
 	k3bthemedheader.cpp k3bthemedlabel.cpp k3blsofwrapper.cpp \
-	k3blsofwrapperdialog.cpp
+	k3blsofwrapperdialog.cpp k3bservicemenuinstaller.cpp k3bfirstrun.cpp
 
 k3b_LDADD = ./option/liboption.la ./rip/librip.la \
 	./projects/libprojects.la ../libk3bdevice/libk3bdevice.la \
--- trunk/extragear/multimedia/k3b/src/k3bapplication.cpp #607364:607365
@@ -25,6 +25,7 @@
 #include "k3bmediacache.h"
 #include "k3bpassivepopup.h"
 #include "k3blsofwrapperdialog.h"
+#include "k3bfirstrun.h"
 
 #include <k3bcore.h>
 #include <k3bdevicemanager.h>
@@ -142,6 +143,8 @@
 
     emit initializationDone();
 
+    K3bFirstRun::run( m_mainWindow );
+
     if( K3bSystemProblemDialog::readCheckSystemConfig() ) {
       emit initializationInfo( i18n("Checking System") );
       K3bSystemProblemDialog::checkSystem( m_mainWindow );
--- trunk/extragear/multimedia/k3b/src/k3bprojectmanager.cpp #607364:607365
@@ -560,6 +560,8 @@
     // FIXME: find a better way to tell everyone (especially the projecttabwidget)
     //        that the doc is not changed
     emit projectSaved( newDoc );
+
+    kdDebug() << "(K3bProjectManager) loading project done." << endl;
   }
   else {
     delete newDoc;
--- trunk/extragear/multimedia/k3b/src/k3bstatusbarmanager.cpp #607364:607365
@@ -24,6 +24,7 @@
 #include <k3baudiodoc.h>
 #include <k3bdatadoc.h>
 #include <k3bmixeddoc.h>
+#include <k3bvcddoc.h>
 #include <k3bdiritem.h>
 
 #include <kiconloader.h>
@@ -193,8 +194,8 @@
     }
 
     case K3bDoc::VCD: {
-      K3bDataDoc* dataDoc = static_cast<K3bDataDoc*>( doc );
-      m_labelProjectInfo->setText( i18n("Video CD (%1)").arg(dataDocStats(dataDoc)) );
+      K3bVcdDoc* vcdDoc = static_cast<K3bVcdDoc*>( doc );
+      m_labelProjectInfo->setText( i18n("Video CD (1 track)", "Video CD (%n tracks)", vcdDoc->numOfTracks() ) );
       break;
     }
 
--- trunk/extragear/multimedia/k3b/src/konqi/Makefile.am #607364:607365
@@ -1,13 +1,14 @@
-
-konqservice_DATA = k3b_create_data_cd.desktop \
+k3bservice_DATA =  k3b_create_data_cd.desktop \
 		   k3b_create_data_dvd.desktop \
 	           k3b_create_audio_cd.desktop \
 	           k3b_create_video_cd.desktop \
                    k3b_write_bin_image.desktop \
-		   k3b_write_iso_image.desktop \
-		   k3b_audiocd_rip.desktop \
+		   k3b_write_iso_image.desktop
+
+konqservice_DATA = k3b_audiocd_rip.desktop \
 		   k3b_videodvd_rip.desktop \
 		   k3b_cd_copy.desktop \
 		   k3b_dvd_copy.desktop
 
+k3bservicedir = $(kde_datadir)/k3b/servicemenus
 konqservicedir = $(kde_datadir)/konqueror/servicemenus
--- trunk/extragear/multimedia/k3b/src/option/base_k3bmiscoptiontab.ui #607364:607365
@@ -4,13 +4,8 @@
     <property name="name">
         <cstring>base_K3bMiscOptionTab</cstring>
     </property>
-    <property name="geometry">
-        <rect>
-            <x>0</x>
-            <y>0</y>
-            <width>467</width>
-            <height>392</height>
-        </rect>
+    <property name="caption">
+        <string>base_K3bMiscOptionTab</string>
     </property>
     <vbox>
         <property name="name">
@@ -192,6 +187,22 @@
                         <string>&lt;p&gt;If this option is checked K3b will not close action dialogs such as the CD Copy dialog after the process has been finished. It will be kept open to start a new process like copying another CD.</string>
                     </property>
                 </widget>
+                <widget class="QCheckBox">
+                    <property name="name">
+                        <cstring>m_checkKonqiIntegration</cstring>
+                    </property>
+                    <property name="text">
+                        <string>Enable Konqueror integration</string>
+                    </property>
+                    <property name="toolTip" stdset="0">
+                        <string>Enable integration of K3b actions into Konqueror menus</string>
+                    </property>
+                    <property name="whatsThis" stdset="0">
+                        <string>&lt;p&gt;K3b can integrate itself into Konqueror. This integration allows to start K3b from the context menu in the file manager.
+&lt;p&gt;A typical example is: in order to burn a folder to a data CD one clicks on the folder using the right mouse button. In the appearing context menu one selects "Create Data CD with K3b..." and a new K3b project containing the folder is created.
+&lt;p&gt;&lt;em&gt;Konqueror integration is not enabled by default to prevent unwanted cluttering of the Konqueror menus.&lt;/em&gt;</string>
+                    </property>
+                </widget>
             </vbox>
         </widget>
         <spacer>
@@ -207,7 +218,7 @@
             <property name="sizeHint">
                 <size>
                     <width>31</width>
-                    <height>20</height>
+                    <height>0</height>
                 </size>
             </property>
         </spacer>
--- trunk/extragear/multimedia/k3b/src/option/k3bmiscoptiontab.cpp #607364:607365
@@ -20,6 +20,7 @@
 #include <k3baudiooutputplugin.h>
 #include <k3baudioserver.h>
 #include <k3bcore.h>
+#include <k3bservicemenuinstaller.h>
 
 #include <qcheckbox.h>
 #include <qfileinfo.h>
@@ -78,6 +79,9 @@
 
   m_comboAudioOutputSystem->setCurrentItem( c->readEntry( "Audio Output System", "arts" ), false );
   m_buttonConfigureAudioOutput->setEnabled( m_comboAudioOutputSystem->count() > 0 );
+
+  K3bServiceInstaller si;
+  m_checkKonqiIntegration->setChecked( si.allInstalled() );
 }
 
 
@@ -142,6 +146,12 @@
     K3bAudioServer::instance()->setOutputMethod( m_comboAudioOutputSystem->currentText().local8Bit() );
   }
 
+  K3bServiceInstaller si;
+  if( m_checkKonqiIntegration->isChecked() )
+    si.install( this );
+  else
+    si.remove( this );
+
   return true;
 }
 
--- trunk/extragear/multimedia/k3b/src/projects/k3baudiodatasourceviewitem.cpp #607364:607365
@@ -69,11 +69,15 @@
 
 void K3bAudioDataSourceViewItem::setText( int col, const QString& text )
 {
+  //
+  // See K3bAudioTrackViewItem::setText for an explanation why we have to check if
+  // the value really changed
+  //
   if( col == 4 ) {
     if( K3bAudioZeroData* zero = dynamic_cast<K3bAudioZeroData*>( source() ) ) {
       bool ok;
       K3b::Msf f = K3b::Msf::fromString( text, &ok );
-      if( ok )
+      if( ok && f != zero->length() )
 	zero->setLength( f );
     }
   }
--- trunk/extragear/multimedia/k3b/src/projects/k3baudiotrackviewitem.cpp #607364:607365
@@ -112,7 +112,7 @@
     case 0:
       return QString::number( m_track->trackNumber() ).rightJustify( 2, ' ' );
     case 1:
-      return m_track->artist();
+      return m_track->performer();
     case 2:
       return m_track->title();
     case 3:
@@ -134,13 +134,22 @@
 
 void K3bAudioTrackViewItem::setText( int col, const QString& text )
 {
+  //
+  // Stupid QListViewItem actually calls setText in paintCell. Thus, once a new item
+  // is created setText is called and in turn the doc is marked as modified since
+  // we call setArtist or setPerformer here! :(
+  //
+  // Quick fix: check if the field actually changed
+  //
   if( col == 1 ) {
     // this is the cd-text artist field
-    m_track->setArtist( text );
+    if( text != m_track->performer() )
+      m_track->setPerformer( text );
   }
   else if( col == 2 ) {
     // this is the cd-text title field
-    m_track->setTitle( text );
+    if( text != m_track->title() )
+      m_track->setTitle( text );
   }
 
   KListViewItem::setText( col, text );