From kfm-devel Sun Mar 16 20:57:25 2008 From: Eduardo Robles Elvira Date: Sun, 16 Mar 2008 20:57:25 +0000 To: kfm-devel Subject: Re: [Patch] Support for undo closed window Message-Id: <200803162157.31191.edulix () gmail ! com> X-MARC-Message: https://marc.info/?l=kfm-devel&m=120570110719593 MIME-Version: 1 Content-Type: multipart/mixed; boundary="--nextPart3129994.2bUmlNEEpg" --nextPart3129994.2bUmlNEEpg Content-Type: multipart/mixed; boundary="Boundary-01=_1mY3Hofmw5vB1go" Content-Transfer-Encoding: 7bit Content-Disposition: inline --Boundary-01=_1mY3Hofmw5vB1go Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline El S=C3=A1bado 01 Marzo 2008, escribi=C3=B3: > I've just finished implementing undoing closed windows. Hey it works! I've > done some major work: > > * First, I've renamed every that was related to closedTabs to closedItem= s. > Because now a closedItem can be either a closed tab or a closed window. > > * I've added support for custom commands (as David Faure wished :D) to t= he=20 file > undo manager. And in a very convenient and powerful way I must add. > > * The closed windows however are not stored in the kfileundomanager, > because when you close a window, because basically they are much more > conceptually related to closed tabs than to removed files; > For example when you open the popup menu listing the closed items, you > would need to retrieve the appropiate list of closed windows. You can't do > that if it's in the QStack that holds the undo items in kfileundomanager. > Etc. > > The solution? Store the closed windows in the KonqUndoManager List of > closed items along with closed tabs. Now if you have 3 windows opened and > you close one, the other 2 windows will have a reference to the same Clos= ed > Window Item. > > And if you undo the closing of the window from window1, a signal will be > emitted from window1 that says "hey remove any reference to this closed > window, as it has been reopened". That's done in > removeWindowInOtherInstances(), which emits bypassCustomInfo(QVariant&), > which is a signal conected to a signal in the KFileUndoManager which is > then received and decoded by the KonqUndoManager related to window2. > > Something similar happens when a window is closed, adding the closed wind= ow > to the other instances. There are some "nasty" castings involved, but that > ought to be done if we wanted the KFileUndoManager to be generic and not > konqueror-specific. > > So with this patch the file undo manager not only supports adding custom > file undoable actions, but it also has a "comunnication channel" > represented by the bypassCustomInfo(QVariant&) signal, which allows > comunication between the instances connected to the file undo manager. > Which is the way I implemented the undo closed window thingie. > > I've tested this patch and it works fine so far. Should I commit it to > trunk? > > Greetings, > Eduardo Robles Elvira. Hi again! Here is the updated patch which fixes a bug that prevented closed windows f= rom=20 being deleted from the config file and thus being written to disk. If noone= =20 objects (and as none has commented about this patch yet!) I will commit it= =20 tomorrow and thus I will continue working on getting working session crash= =20 recovery and session saving like firefox, which is my next konqueror projec= t=20 once this is commited to SVN ;-). Greetings, Eduardo Robles Elvira. =2D-=20 "The reasonable man adapts himself to the world; the unreasonable one persists in trying to adapt the world to himself. Therefore all progress depends on the unreasonable man." (George Bernard Shaw) --Boundary-01=_1mY3Hofmw5vB1go Content-Type: application/x-zip; charset="utf-8"; name="undo-closed-windows.patch.zip" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="undo-closed-windows.patch.zip" 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 --Boundary-01=_1mY3Hofmw5vB1go-- --nextPart3129994.2bUmlNEEpg Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) iD8DBQBH3Ym7HxqR9mwfUxYRAmESAJ9xlSH2Zj5QiG1FslMUHF5MG4mMDwCfRhwK pR20QxVxRIn/4/i3Ekczx2A= =WBEl -----END PGP SIGNATURE----- --nextPart3129994.2bUmlNEEpg--