> 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.

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.


- Boudewijn


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://git.reviewboard.kde.org/r/126895/#review91623
-----------------------------------------------------------


On Jan. 27, 2016, 8:53 a.m., Andre Heinecke wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://git.reviewboard.kde.org/r/126895/
> -----------------------------------------------------------
> 
> (Updated Jan. 27, 2016, 8:53 a.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

Reply via email to