> On Jan. 26, 2016, 6:40 p.m., Aleix Pol Gonzalez wrote: > > Hi, > > I'm a bit afraid of all these ifndef. Do you think it would make sense to > > abstract out the KGlobalAccel usage? > > > > Otherwise, would it be possible to make KGlobalAccel useful (or just dumb) > > on Windows? > > Boudewijn Rempt wrote: > I would say: most applications do not need global accelerators, so making > kglobalaccel functional on windows is not really relevant, you wouldn't want > that dependency anyway because it doesn't add functionality. And building a > library and including it is always a burden, so I would say it's much better > to make it optional. > > Andre Heinecke wrote: > Hi, > > Abstracting it out would also be quite invasive imho. And from my > experience abstraced (optional) features are even harder to maintain then > ifdefs where you can easily see the codepath taken when something is not > available. While side effects through abstraction are harder to see when > hacking on code. > > As for the other point: > - GlobalAccel means that you basically need to have a keylogger on your > platform. I don't want that. There are system ways on Windows to create > global shortcuts already. Not as fine grained as KDE Actions but you could > use them to do command line calls. > - I don't really see this as a Windows only thing. KXmlGui provides very > useful features even without Global Shortcuts. And as for making KGlobalAccel > just dumb on Windows. While I think this would generally be a good idea I > expect that others (from Kde-Windows) who provide several KDE applications > and stuff like Systemsettings on Windows would disagree. > > We could add a dummy class in KXmlGui thats used if KGlobalAccel is not > available? This could avoid lots of ifdefs. But this would add a bit > maintenance cost when new API is used. While the IFDEFS make it quite > transparent to hackers that if you do thomething with GlobalAccel "please > guard it". > > Aleix Pol Gonzalez wrote: > @boud, yes, I also thought about your RR, in fact I looked it up but > couldn't find it. > > Ok, maybe it's actually the way to make xmlgui viable to deploy. > > Take this as a +1 by me. > > Martin Gräßlin wrote: > Could we maybe continue the route I went with making sure that > kglobalaccel doesn't start? I'm quite concerned about the ifdefs. If there > are still situations where kglobalacceld is started without being needed, > let's fix that. Let's make it a proper runtime thing instead of an ifdef > messery nobody will check. > > I'm quite concerned about making the change optional as that's a route to > breakage with distros and as the maintainer of kglobalaccel I'm not looking > forward to those bug reports. > > Boudewijn Rempt wrote: > Well, part of the point, for me at least, is not having the dependency at > all. Any extra library, especially one that adds no functionality but is just > present, is a burden just like #idefs are a burden. > > Martin Gräßlin wrote: > What can we do to make the burden not so hard on your side without adding > the ifdefs? KGlobalaccel is basically a tier 1 - the higher number is due to > the runtime part. Would it help to make the runtime part optional? Would it > help to have a BC drop in replacement which just no-ops? > > By doing the change as suggested here new burden is created and moved to > the shoulders of others. E.g. all Linux distributions which now have to be > more careful with packaging. So we need to find the right balance. > > Boudewijn Rempt wrote: > Well, for me personally it's water under the bridge. On the other hand, I > don't think that it's a burden for distributions: distributions always > install every dependency, even if it's optional. That is the big problem that > has led over the years to people complaining that Krita needed Marble, for > instance. > > Andre Heinecke wrote: > For me the build problem with KGlobalAccel is the build dependency to > DBus. BC drop in with No ops would help (in which case the configuration > entries should be completly hidden in the gui). But would a KGlobalAccel > without DBus / No-Ops be easier to maintain? > > And the best thing for me is that If I don't want some features to be > able not to build them at all instead of a replacement library. And a > KGlobalAccel "Dummy" as part of KXmlGui also appears wrong to me. > > Also my other two patches make DBus and KTextWidgets optional. For these > I definetly think that Ifdefs are the right way to go. > > > By doing the change as suggested here new burden is created and moved > to the shoulders of others. E.g. all Linux distributions which now have to be > more careful with packaging. So we need to find the right balance. > > I have to agree with Boudewijn there. We could of course only make it > optional on Windows but I would like to avoid making it a platform issue. > > Martin Gräßlin wrote: > > But would a KGlobalAccel without DBus / No-Ops be easier to maintain? > > if KGlobalAccel in it's current state is so bad that it needs to be > patched out of other frameworks, then yes KGlobalAccel needs to be modified. > Which is what I already did in the past, when it was brought to my attention > that just using xmlgui results in the runtime being started. > > Does it make sense to have a DBus free kglobalaccel? Certainly, on > non-Linux it doesn't make sense to use DBus. > > So the question to me is: is a stripped down KGlobalAccel (no DBus, no > runtime) sufficient to not get it patched out of other frameworks. If yes I > think that's the way to go. Is it work? Yes it is, but not that much. It's > only one source file with around 700 lines of code. > > Boudewijn Rempt wrote: > Well, what I am trying to say is that it's wrong to have a depedency on a > library, a chunk of code, that doesn't add functionality to the application. > > Martin Gräßlin wrote: > > it's wrong to have a depedency on a library, a chunk of code, that > doesn't add functionality to the application. > > aye, but this goes both sides. I could also say that it's wrong to have > the ifdefs. This is a balancing act. Adding ifdefs adds costs just like > adding the "chunk of code" adds costs. The question is which one adds less. > I'd argue that by adding ifdefs to all places which use kglobalaccel you add > more costs for the community (we need multiple CI build setups, we need to > handle distro issues, making code more difficult to read, more difficult to > test). Thus I suggest that we improve the other side. Get kglobalaccel into a > state where you don't care that you have that code around. If you absolute > insist on your position: yay less work for me. > > Andre Heinecke wrote: > My point agains this is the same as Boudewijn. Why would we want to > create a defunct GlobalAccel package? > > GloabAccel currently provides a useful feature. Global Shortcuts. I would > like to see this feature optional in KXMLGui. There are use cases for XMLGui > without Global Shortcuts. > Why should we include, build, distribute, include the License etc. Of a > chunk of code that adds no functionality to our software? > > And if we wen't that rode wouldn't be the conclusion of this to also > create a KTextWidgets package that adds no Features to make this optional? > Or a Dbus package without Dbus that does not add Interprocess > communication? > > Regarding the CI / Community Overhead you would also have this is you > want to really test every variant. Then you would also have to test against a > "defunct" KGlobalAccel package or handle reports about issues caused by > KGlobalAccel not behaving as expected as it misses runtime parts. > > Would it help If I would rework the patch to use a dummy class and reduce > ifdef's that way? Might make sense here although I personally find code with > Ifdefs clearer to understand then code that behaves differently in the > background. > > Martin Gräßlin wrote: > > Why should we include, build, distribute, include the License etc. Of a > chunk of code that adds no functionality to our software? > > Well it does. The only problem is that this feature is non-functional on > Windows, because it uses DBus and nobody ported the runtime part. Both is > fixable. On Windows it could use whatever Windows needs and you have working > global shortcuts. So of course it adds features. Which is also why I don't > buy into it's a disfunctional KGlobalAccel if we make it not depend on DBus. > It's a step towards working global shortcuts on Windows. > > > Would it help If I would rework the patch to use a dummy class and > reduce ifdef's that way? > > Less ifdefs is in my opinion always an improvement. My main concern in > this review is the ifdef overhead and the danger on breaking on Linux due to > making the dependency optional (sorry I'm a burnt child in that regard, have > seen it happen too often over the last two years even if sent a dedicated > mail to release team to point out about it). Concerning the latter I would > rather go for a no-DBus profile or something like that. A global cmake switch > to build without DBus and disable all frameworks which need DBus. Similar > what we did to disable finding X11 on non-Linux. That way on Linux the > dependency would still be required, because you build with DBus support. > > Andre Heinecke wrote: > > Well it does. The only problem is that this feature is non-functional > on Windows, because it uses DBus and nobody ported the runtime part. Both is > fixable. On Windows it could use whatever Windows needs and you have working > global shortcuts. So of course it adds features. Which is also why I don't > buy into it's a disfunctional KGlobalAccel if we make it not depend on DBus. > It's a step towards working global shortcuts on Windows. > > But I would like to build an KXMLGui application without GlobalShortcut > even if they would work. We could implement them for Windows (without dbus) > but you still would need to have some process handling them. (Even if its the > application itself). I do not want to have that and I do not see that this is > useful to have on Windows for the users of Kleopatra. There are already ways > for Windows how you could do global shortcuts that would work even if the > Application is not running. To include this from a KDE Library would have us > maintain windows specific shortcut code and I don't see anyone who would be > willing to maintain / test / develop something like that. And it's not really > needed there and whatever it would do would be foreign to the platform afaik. > > > Less ifdefs is in my opinion always an improvement. > > I've taken a look at this. Adding a subdirectory kglobalaccel_dummy with > a kglobalaccel.h thats included by cmake in case kglobalaccel is not found. > But I find this worse then then 29 ifdef's currently added. Dummy subclasses > for optional packages are not a pattern we should not establish. I'm not sure > for example how kde apidocs would react to a kglobalaccel class in kxmlgui > for example. Ifdefs make it more clear if some codepaths are optional. > > > My main concern in this review is the ifdef overhead. > > 29 ifdefs in ~15k lines of code are not that exccessive. > > > and the danger on breaking on Linux due to making the dependency > optional (sorry I'm a burnt child in that regard, have seen it happen too > often over the last two years even if sent a dedicated mail to release team > to point out about it). > > Well it is reccommended, as it was a hard depdenency before and is not a > new dependency most packagers would have to actively disable that. If they do > that and loose global shortcuts. Ok. That's their freedom I guess and not > your problem. > > > Concerning the latter I would rather go for a no-DBus profile or > something like that. A global cmake switch to build without DBus and disable > all frameworks which need DBus. Similar what we did to disable finding X11 on > non-Linux. That way on Linux the dependency would still be required, because > you build with DBus support. > > For me it's slightly important that this is not Windows specific so that > I can develop / test with it even under GNU/Linux. And generally DBus still > also makes sense for usecases on Windows. E.g. a Kontact on Windows would > still need functional DBus and such. I think optional is the right way. > CI only for the "recommended" / all optionals found use case would be > fine with me but I think this is unrelated. > > Boudewijn Rempt wrote: > whether kglobalshortcuts is functional or not is besides the point: the > point is that whether it works or not it doesn't add any functionality to the > average application. Global shortcuts are useful only for a very limited set > of applications, so it should always have been an optional dependency. > > Martin Gräßlin wrote: > > If they do that and loose global shortcuts. Ok. That's their freedom I > guess and not your problem. > > Of course it's my problem. I'm the maintainer, I get the users bug > reports. And that's what's happening. Look for example at > https://bugs.kde.org/show_bug.cgi?id=356318 which I investigated yesterday - > distro did incorrect packaging, bug report ended on my plate. As I said: I'm > a burnt child here. That's not an issue that happens once, it's a problem > which happens constantly over all distributions. Making the dependency > optional or recommended will mean distros will ship without it. It's just > something we need to consider here. It's not something I make up. This is > going to happen. I can promise you. And you can imagine what kind of mess it > is to investigate such "impossible to happen" bugs. > > That's why the build dependency needs to be handled gracefully. Did you > consider the "No DBus" profile thing in ECM. An easy way to disable all > dependencies which require DBus. So that it's only not required if build on > that profile. > > Similarily I will promise you that the ifdefs will break at some point in > one of the two configurations if we don't have > a) build tests > b) actual runtime tests for that. > > Seen it all, have maintained enough frameworks with multi platform code > ;-) > > Andre Heinecke wrote: > > Of course it's my problem. I'm the maintainer, I get the users bug > reports. And that's what's happening. Look for example at > https://bugs.kde.org/show_bug.cgi?id=356318 which I investigated yesterday - > distro did incorrect packaging, bug report ended on my plate. As I said: I'm > a burnt child here. That's not an issue that happens once, it's a problem > which happens constantly over all distributions. > > This is a structurual problem imho that you get these bug reports. (And I > know the problem any problem in Gpg4win is reported to Kleopatra ;-)) They > should have been reported to opensuse, an opensuse maintainer should have > investigated this. And if I understand it right this bug is about the case > you are arguing for an optional runtime dependency that created problems when > it wasn't available. > > > distro did incorrect packaging, bug report ended on my plate. > > There is no correct or incorrect packaging here. Either users will get > the Feature to configure Global Shortcuts through KXMLGui or they won't. > > > Making the dependency optional or recommended will mean distros will > ship without it > > Yes. One of the largest KDE Application Distribution on Windows (Gpg4win) > _wants_ to ship without this dependency! :-) (And another, Krita, already > does.) > > > That's why the build dependency needs to be handled gracefully. > > Of course my goal here is not to produce a buggy library in case > GlobalAccel is not available at build time. But a libary that is stable and > completely fine to use for KDE Applications that don't use Global Shortcuts > through KGlobalAccel. > > > Did you consider the "No DBus" profile thing in ECM. An easy way to > disable all dependencies which require DBus. So that it's only not required > if build on that profile. > > I don't see how this would help. You would still need the optional > handling this patch is about. No? > > > Similarily I will promise you that the ifdefs will break at some point > in one of the two configurations if we don't have > > This is totally fine with me. The alternative if I don't get a "ship it" > in this review is that I will have to patch this. This will break even more > likely. > > > Seen it all, have maintained enough frameworks with multi platform code > ;-) > > Please also believe me (and Boudewijn) as the packagers responsible for > large deployments on one of these mutli-platforms that the huge amounts of > dependencies a KDE Application entailed are (were) a big problem for > deployment / packaging. I hoped this would be solved by Frameworks. And in > really large parts this has been true and is awesome. Thanks to Frameworks i > can see a clear path to be able to build my KDE Application only with useful > dependencies. But I'd like to see the problems that are still there for me > (like this one) solved upstream instead of having to patch around them. > > > How can we move forward here? There has been a +1 from Aleix and strong > support from Boudwijn. > > But there has also have been arguments from you here and from Andreas > Hartmetz on the mailing list against this patch. What is the process to > resolve such a conflict? > > Are you strongly against this patch? > > Martin Gräßlin wrote: > > And if I understand it right this bug is about the case you are arguing > for an optional runtime dependency that created problems when it wasn't > available. > > Runtime/build time doesn't matter in this case. The problem is that a > dependency was optional and distros currently don't handle that. I could show > you cases where I sent out a mail to kde-release-team telling the distros > which dependency they need to include and they got it wrong nevertheless. > That's just the current state on Linux currently: optional dependencies don't > work. > > > There is no correct or incorrect packaging here. Either users will get > the Feature to configure Global Shortcuts through KXMLGui or they won't. > > Of course there is. On Linux building without Global Shortcut in KXMLGui > will break existing software on the platform Plasma. That's the problem I try > to bring here. The fact that the change as suggested here will break software > running on Plasma and that those bugs will go to me. Nobody will report a bug > report saying "Xmlgui is build without KGlobalaccel", it will be "yakuake > doesn't work". > > > I don't see how this would help. You would still need the optional > handling this patch is about. No? > > No. The difference is that it would only be optional if in the profile. > This would solve the "linux distro issue" as they would never ever set this > profile. > > > Are you strongly against this patch? > > I think we need to handle the two cases. I understand your need to not > require it, I and others provided several different ideas in this thread > including: > - global cmake profile switch to disable DBus > - changing kglobalaccel to not use DBus > - having a no-op kglobalaccel in xmlgui > > Given that I doubt that going strictly on this must be optional and ifdef > is the only choice is true. I am convinced that there is a middle ground > which solves the requirements. > > Fixes to deployment issues on Windows shouldn't create deployment issues > on other platforms. The patch as it is right now is going to create > deployment issues on Linux. > > Andre Heinecke wrote: > Ok. Let's say that on Linux GlobalAccel support in KXmlGui is so > important that losing it would constitute a bug in itself. So we should not > give the option to packagers not to include this because not including it > would automatically break a core feature of KXmlGui. > > The obvious compromise I see with that position is to keep it required > for Linux and make it optional for other platforms which might have different > Global Shortcut concepts. > > Martin Gräßlin wrote: > what about the profile approach through ECM? Don't you think it's better > to have that defined as a global thing? > > To explain why I am nagging about it: some time ago the non-Linux systems > started to add code like > if (NOT APPLE) > find_package(X11) > endif() > > I pointed out that this is wrong, etc. etc. I got ignored and now we have > all over the place these things. But nowadays we also have a proper solution > in ECM. And we need to remove all those custom checks again. > > I don't want to repeat this mistake. I want to have it from the start > that we have it working correctly without needing patches all over the place. > That's why I suggest the "No DBus profile". A global thing to say "hey I > don't want any dependencies which depend on DBus". > > Andre Heinecke wrote: > We've discussed this in IRC as I was not really clear about what this > would mean. > > As I see it now it would mean that globally CMAKE_DISABLE_FIND_PACKAGE is > set for Qt Dbus. > In this case this would not help much because for it work the packages > already need to be optional. Which is what this patch is about. > The use case for that which i see is that you can build things without > optional dependencies even if they are available. This is not a Problem in > the usual KDE-Windows build setups. So there won't be patches like: > if (NOT WIN32) > find_package (KGlobalAccel) > endif() > Where indeed the ECM Profile approach would be better. > > But in this patch this would allow replacing the if (UNIX) check added in > my latest change by if (BUILDING_WITH_DBUS) or something. I've argued that > even if you build with DBus (as kdepim, and the general kde-windows > applications do) you might want to have KGlobalAccel optional on a foreign > platform that might have other shortcut concepts. > > My general goal is to have more options and one of those options is to > build some frameworks without DBus. We would also have the same discussion > with another patch that [Makes KTextWidgets > optional](https://phabricator.kde.org/file/data/toramjtxpqos7pjd6lja/PHID-FILE-hmizzhkgp6mpz6xgaaon/0003-Make-KTextWidgets-optional.patch) > Which is unrelated to the DBus as there it's more about avoiding KService > and Spellchecking / dictionaries. > > > Martin: Do you think we need more discussion about the general merits of > optional dependencies? My current tendency is to just guard them with if > (UNIX) when we think they are neccessary for the Plasma Desktop usecase. > > For the three patches I have against XmlGui this would mean to me: > - KGlobalAccel only optional on Non-Unix > - DBus only optional on Non-Unix (KMainWindow / Ktoolbar dbus integration) > - KTextwidgets always optional (Spell checking in kbugreport) (or just > completely dropped but this will be another review) > > Martin Gräßlin wrote: > > Do you think we need more discussion about the general merits of > optional dependencies? > > yes, please. We need to find a solution which scales and doesn't run into > the risk of not being picked up by distros. Also it needs to be semantically > correct. There are probably many approaches. One thing that comes to my mind > just now is a -DFRAMEWORKS_BUILD_MINIMAL which would disable all not required > dependencies.
Marijn created and I maintained a MINIMAL_BUILD option for kdelibs4, actually. I never dared propose to add it to regular kdelibs4, it was extremely invasive. - Boudewijn ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://git.reviewboard.kde.org/r/126895/#review91623 ----------------------------------------------------------- On Jan. 28, 2016, 1:29 p.m., Andre Heinecke wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > https://git.reviewboard.kde.org/r/126895/ > ----------------------------------------------------------- > > (Updated Jan. 28, 2016, 1:29 p.m.) > > > Review request for KDE Frameworks. > > > Repository: kxmlgui > > > Description > ------- > > This is part of a three patch series that aims to allow a "leightweight" > build of KXmlGui without DBus and KService dependencies. I've added the > patches to: https://phabricator.kde.org/T1390 I'm not sure if I can create > reviews that depend on changes from another review, I'll try and if it does > not work I'll open one after another. > > Global shortcuts are a nice optional feature to have. But as they are not > strictly neccessary for the core functionality of KXmlGui, as I see it, and > pull in an extra dependency to DBus and need runtime support on the target > platform they should be optional. > > This (and the other changes) add lots of unloved ifdefs, I could understand > if thats disliked. But let me explain the background of this change: > > I'm currently updating Kleopatra in Gpg4win to a KDE Frameworks based build. > This is nice. Frameworks are awesome, I can just pick what I need and don't > have dependencies to lots of things that are actually not needed. > Then comes KXmlGui, adds 20 Framework dependencies, and I don't know what to > do. > I want: > - configureable "KDE Style" GUI > - configurable Shortcuts > - KDE Standardactions (e.g. Help / WhatsThis) > - kbugreport > - KDE Integration in an KDE Environment > > But I don't want: > - Global Shortcuts (we don't have kded so this won't work for us anyway) > - DBus (our dbus is directory scoped and there are no other applications > using dbus installed by us) > - KService dependency (System configuration has been troublesome in the past > on Windows and is not neccessary if we provide just a single installation) > > So these Patches are my way out of this Problem. Without the optional > packages KXmlGui provides what I want and does not depend on what I don't > want. > > > Diffs > ----- > > CMakeLists.txt 9d79619 > src/CMakeLists.txt 58f0c7a > src/config-xmlgui.h.cmake 07c882f > src/kactioncollection.cpp 9c45725 > src/kkeysequencewidget.cpp b2e2b6a > src/kshortcuteditwidget.cpp 670d031 > src/kshortcutseditor.cpp 99dfb3d > src/kshortcutseditoritem.cpp 461a90c > src/kxmlguifactory.cpp 2767e69 > > Diff: https://git.reviewboard.kde.org/r/126895/diff/ > > > Testing > ------- > > Compiled with and without dependency. Tested Kleopatra against it. > Not yet tested on Windows, will do so in the next days. > > > Thanks, > > Andre Heinecke > >
_______________________________________________ Kde-frameworks-devel mailing list Kde-frameworks-devel@kde.org https://mail.kde.org/mailman/listinfo/kde-frameworks-devel