[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kfm-devel
Subject:    Re: [PATCH] New feature: closed tabs trash bin as in Opera
From:       David Faure <faure () kde ! org>
Date:       2007-02-19 15:46:16
Message-ID: 200702191646.17177.faure () kde ! org
[Download RAW message or body]

On Monday 19 February 2007, Eduardo Robles Elvira wrote:
> El Sábado, 17 de Febrero de 2007, escribió:
> > The patch is attached to this email, and in [1] there 's a tarball with the
> > icon that my fellow team mate created for the "closedtabs" button. It's a
> > temporal icon that should go inside kdelibs/pics/crystalsvg. If we change
> > to the new KDE icon theme it probably should get a new one, but till then
> > we need it.
> > 
> > Thepatch is agains kdebase trunk, because it touches both libkonq and
> > konqueror. 
> 
> Okey, now I have learned a bit more about KConfig and such things, and now in 
> this new patch there a lekeage (yes! I didn't delete the KTemporaryFiles I 
> created :P), and now instead of using one new file + one  new temporary file 
> per closed tab, I use only one KConfig for all of them. Much more efficient 
> and logical ;-)
> 
> Once more, if you have any comment or suggestion, insight or you just tested 
> it and liked the feature, don't hesitate to reply inside this thread.

Some comments from reading the code:
KConfig( "closed_tabs" ... )  => will create a closed_tabsrc. This should have \
konqueror in the name somewhere ;) Maybe KConfig ("konqueror_closedtabs")?

+ if(!sender()->inherits("KonqUndoManager"))
This breaks if the class is renamed one day, please use !qt_cast<const \
KonqUndoManager *>(sender()). Testing sender() is a bit hackish though, in any case.

m_closedTabsListLength is a constant, so it should become a file-static imho.

+  m_closedTabsConfig->setGroup( "Closed_Tab"  + QString::number(group) );
Please use KConfigGroup grp( m_closedTabsConfig, "Closed_Tab"  + \
QString::number(group) ), and then use grp.readEntry().
setGroup is going away very soon.

+  friend class KonqMainWindow;
Can we avoid that? It's the main user of KonqViewManager anyway, so the api needed by \
the mainwindow can just be made public.


Well done for the integration into konq_undomanager. I have some questions about that \
though:  bool KonqUndoManager::undoAvailable() const
 {
-    return ( d->m_commands.count() > 0 ) && !d->m_lock;
+    if(firstClosedTab() > -1)
+    {
+       return true;
+    } else
+       return ( d->m_commands.count() > 0 ) && !d->m_lock;
 }
Why is this change necessary? "Undo is available if there's any command to undo" \
should be general principle; and I see that tab-closing is done as a command, as one \
might expect. But somehow, tab closing seems to be have more priority, according to \
the top of undo(). Why? If I close a tab, then move a file, and then I press Undo - \
shouldn't that undo the file moving, instead of the tab closing? I think \
containsAnyClosedTab and firstClosedTab can just go away... (Otherwise, the strange \
operator== could be removed by not using indexOf, but a simple ++i).

slotAddClosedURL -> slotAddClosedUrl - new naming style ;)

+  QList<ClosedTabItem*> m_closedTabsList;
Memory management might be simpler if using QList<ClosedTabItem> instead of a \
pointer. For instance, what happens if I close 11 tabs? Doesn't the oldest one get \
removed from that list, but would still be in the KonqUndoManager's list, as a \
dangling pointer? So in fact we can't store as value (libkonq doesn't know that \
class), but how about making the undo manager -own- the ClosedTabItem, and then \
m_closedTabsList isn't necessary at all? Of course the signal openLastClosedTab \
should ship the ClosedTabItem* to konqueror. No need to store that data in both \
places (even as just a pointer).

Once the konqundomanager api is cleaned up, I would love to see a few unit tests ;)
But I can also write those in order to check that the konqundomanager code works as \
advertised.

-- 
David Faure, faure@kde.org, sponsored by Trolltech to work on KDE,
Konqueror (http://www.konqueror.org), and KOffice (http://www.koffice.org).


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic