> On Dec. 24, 2011, 8:38 a.m., David Faure wrote:
> > konqueror/client/kfmclient.cpp, line 386
> > <http://git.reviewboard.kde.org/r/103524/diff/1/?file=44675#file44675line386>
> >
> >     The code later on uses "new KRun" for the case of a user-defined 
> > browser, given that KRun can handle that. Why not factorize this and call 
> > that code for local files too? It would make the code shorter and easier to 
> > maintain.
> 
> Dawit Alemayehu wrote:
>     Well that would be nice and that was my first choice, but unfortunately 
> that is not possible because KRun::init would need to be modified to use the 
> user defined browser settings for local URLs too. Right now it does not. 
> However, doing that would mean hard coding the check for whether or not 
> "konqueror/kfmclient" is the service configured to handle the given request 
> (mimetype). I doubt we would want to do that. Without that change using the 
> "new KRun" call for the local file case would cause an infinite recurssion 
> where KRun will end up calling kfmclient to handle the local html page.
>     
>     However, the other way around is viable. That is we can use "KRun::run" 
> for the "http" case too. It would absolve kfmclient from using "new KRun" 
> which itself might end up calling it back under certain circumstances. 
> Otherwise, unless I am missing something those two scenarios have to be 
> handled differently.
> 
> David Faure wrote:
>     The infinite loop issue can't happen if we only call KRun (from 
> kfmclient) when a BrowserApplication is set (so it won't call back kfmclient).
>     
>     Something is clear to me: if BrowserApplication should apply to local 
> html files too, then KRun should use it for local html files. Otherwise other 
> users of KRun won't do the right thing (well, ok, or via kfmclient, but 
> that's a runtime dependency that they might not want -- we've had cases of 
> people without konqueror installed at all).
>     
>     IMHO the best fix is to let KRun handle http and local-html files the 
> same way, and just call new KRun from kfmclient, for these two cases.
>     
>     For krun this would mean something like this... hmm ok requires 
> factorizing some code to avoid a goto...
>     http://www.davidfaure.fr/2011/krun.diff
>     Feel free to apply and test :-)
>     (I only tested that it doesn't break default (no-browser-app) usage)
> 
> Dawit Alemayehu wrote:
>     Right. The infinite looping back will not occur if the local resource 
> condition is handled properly and we most definitely do not want to hard code 
> the check for konqueror/kfmclient for the reasons you stated. I also think 
> that the KRun patch is probably the best approach to solve this problem.
>     
>     However, I have one issue with your patch. The hard coding of "text/html" 
> as the test for when to use an external browser in the local file case. What 
> about the cases where the user has configured other mime-types to be handled 
> by a browser ? Instead of hard coding that case, would it not be better to 
> simply compare the preferred service  configured to handle the mime-type of 
> the local file against the preferred service for "text/html" ? That way you 
> are not hard coding to a specific mime-type, but the service that handles 
> that mime-type without actually hard coding a specific service name. A win 
> win, no ?
> 
> David Faure wrote:
>     I don't follow. If the user configures "PDF files should be opened in 
> firefox", then KRun will already honour that, this has nothing to do with the 
> special-case "BrowserApplication" setting, which was meant to mean "the 
> handler for all http urls". I can see some point in making that setting work 
> automatically for local html files too (so that the user doesn't have to 
> configure that separately in kcmfiletypes). But if I configure 
> "inode/directory goes to konqueror" then that should keep being the case, 
> even if BrowserApplication=firefox (your suggested logic would break that, 
> and send *everything* to firefox that used to go to konqueror).
> 
> Dawit Alemayehu wrote:
>     I was talking about the check in your patch that does the following:
>     
>     if (!d->m_externalBrowser.isEmpty() && 
> mime->is(QLatin1String("text/html")))
>     
>     That check will only allow local HTML files to be opened with the 
> external browser. What if the mime-type of the file was 
> "application/xhtml+xml" ? Or any other mime-type that is configured to be 
> handled by the browser ? What I was actually saying was instead comparing 
> against the "text/html" mime-type you should compare the preferred service 
> configured for the given mime type. That way you would not care if the local 
> file is "application/xhtml+xml" or "text/html" . As such to me it makes more 
> sense if "mime->is" check in the above if statement was replaced with 
> something like:
>     
>     KMimeTrader::self()->preferredService(mime->name()) == 
> KMimeTrader::self()->preferredService(QLatin1String("text/html"))
>     
>     That way a local file of type "application/xhtml+xml" is properly sent to 
> the external browser as well. Does that make more sense ?
> 
> Dawit Alemayehu wrote:
>     ooops. I meant to compare the  "desktopEntryName()" of the preferred 
> services in the example I provided.
> 
> David Faure wrote:
>     Yes, on top of text/html, application/xhtml+xml could be added, and 
> possibly application/xml. These are the three mimetypes handled by 
> khtml.desktop, so that should cover all the cases.
>     
>     Your suggested code would break the inode/directory case that I 
> mentionned: 
> preferredService(inode/directory)==preferredService(text/html)==konqueror and 
> yet we shouldn't open directories in firefox.
>     
>     I don't think BrowserApplication should be implemented as "replace 
> konqueror everywhere". If one wants that, we should just implement the 
> long-standing request for kcmfiletypes, a feature that would allow to 
> replace/remove an app globally across all mimetypes.
> 
> Dawit Alemayehu wrote:
>     > I don't think BrowserApplication should be implemented as "replace 
> konqueror everywhere". If one wants that, we should just implement the 
> long-standing request for 
>     > kcmfiletypes, a feature that would allow to replace/remove an app 
> globally across all mimetypes.
>     
>     Yes, BrowserApplication should not be implemented as "replace konqueror 
> everywhere" for the obvious reason that Konqueror is not only a web browser 
> application. However, simply hard coding a couple of common values seems 
> problematic to me when Konqueror is the preferred service for handling 
> several more types of XML files than the ones in your list. Would it not be 
> much easier to exclude all "inode/*" mime-types than to check for all the 
> mime-types that should be allowed to be opened by an external browser ? 
> Perhaps something like this ?
>     
>     static bool isBrowserPreferredServiceFor(KMimeType::Ptr mime)
>     {
>         if (mime->isDefault() || mime->name().startsWith("inode/"))
>             return false;
>     
>         KService::Ptr service = 
> KMimeTypeTrader::self()->preferredService(mime->name());
>         if (!service)
>           return false;
>     
>         KService::Ptr preferredService = 
> KMimeTypeTrader::self()->preferredService(QLatin1String("text/html"));
>         if (!preferredService)
>             return false;        
>     
>         return (service->desktopEntryName() == 
> preferredService->desktopEntryName());
>     }
>     
>     Anyhow, other than being concerned about someone complaining about this 
> down the road, I really have no real objection as to how this should be 
> handled. And your KRun patch seem to work fine for opening local html files ; 
> so it is safe to apply it. I will modify this patch to simply do the same 
> thing for the "file" protocol as is being done for the "http" protocol.

> Konqueror is the preferred service for handling several more types of XML 
> files than the ones in your list

I don't see that.

kfmclient_html.desktop:MimeType=text/html;application/xhtml+xml;application/xml;

(where the middle one is even useless, since it's a subclass of application/xml)

I'll add application/xml to my krun patch. Shall I commit it then?

> Would it not be much easier to exclude all "inode/*" mime-types?

I disagree. Basically, if a user associates konqueror with anything else 
himself, your patch would disregard that and just fire up firefox.
I can see the sense in replacing it for its default associated mimetypes, to 
simplify setup, but not in overriding any other mimetype associations.


- David


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://git.reviewboard.kde.org/r/103524/#review9228
-----------------------------------------------------------


On Dec. 27, 2011, 2:37 p.m., Dawit Alemayehu wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> http://git.reviewboard.kde.org/r/103524/
> -----------------------------------------------------------
> 
> (Updated Dec. 27, 2011, 2:37 p.m.)
> 
> 
> Review request for KDE Base Apps and David Faure.
> 
> 
> Description
> -------
> 
> The attached patch changes kfmclient so that it
> 
> * honors the user configured browser setting when the specified URL is a 
> local page that is to be handled by a browser.
> * honors the user configured browser setting when the user specified url is 
> ftp.
> 
> 
> This addresses bug 182591.
>     http://bugs.kde.org/show_bug.cgi?id=182591
> 
> 
> Diffs
> -----
> 
>   konqueror/client/kfmclient.cpp 339ba31 
> 
> Diff: http://git.reviewboard.kde.org/r/103524/diff/diff
> 
> 
> Testing
> -------
> 
> Change the browser in the default application list to "firefox" and make sure 
> all of the following commands open the URL in firefox:
> 
> * kfmclient openURL http://www.kde.org 
> * kfmclient openURL /usr/share/doc/qt/html/index.html
> * kfmclient openURL ftp://ftp.kde.org
> 
> 
> Thanks,
> 
> Dawit Alemayehu
> 
>

Reply via email to