On Sep 16, 2010, at 11:24 PM, Stephan Witt wrote: > Am 17.09.2010 um 07:57 schrieb Jens Nöckel: > >> >> On Sep 16, 2010, at 10:30 PM, Stephan Witt wrote: >> >>> Am 17.09.2010 um 06:31 schrieb Jens Nöckel: >>> >>>> >>>> On Jun 5, 2010, at 7:40 PM, Jens Nöckel wrote: >>>> >>>>> >>>>> On Jun 5, 2010, at 2:37 PM, Jean-Marc Lasgouttes wrote: >>>>> >>>>>> Le 05/06/2010 18:45, Jens Nöckel a écrit : >>>>>>> So my question to the LyX dev team would be: could you add a preference >>>>>>> item that lets the user set some flag, so that the call >>>>>>> setAttribute(Qt::AA_MacDontSwapCtrlAndMeta); >>>>>>> can be made dependent on that flag? Maybe the simplest place to put >>>>>>> this in would be not in the Preferences, but in the Mac-only part of >>>>>>> the LyX menu. But on the other hand, that wouldn't look very consistent >>>>>>> - so the Preferences, under "Keyboard/Mouse" would perhaps be the most >>>>>>> logical location where to add such a flag. Any ideas on that would be >>>>>>> great - I'm sure it should be possible to add a little extra button >>>>>>> somewhere. >>>>>> >>>>>> This should be done in a way that does not break with qt < 4.6. >>>>>> >>>>>> JMarc >>>>> >>>>> I've added a new boolean variable called lyxrc.mac_dontswap_ctrl_meta and >>>>> successfully connected it to a checkbox in the Keyboard Preferences. The >>>>> default value is false (meaning the current standard behavior - this >>>>> follows the nomenclature of Qt::MacDontSwapCtrlAndMeta). Then I added the >>>>> line >>>>> >>>>> >>>>> setAttribute(Qt::AA_MacDontSwapCtrlAndMeta,lyxrc.mac_dontswap_ctrl_meta); >>>>> >>>>> in GuiApplication::execBatchCommands() >>>>> >>>>> right after >>>>> >>>>> #ifdef Q_WS_MACX >>>>> >>>>> Everything is working great. I can set the preference and it gets applied >>>>> when the application is re-launched (maybe one could apply it >>>>> immediately, but I wasn't sure how I can then make sure that the menu >>>>> shortcuts are updated to display the correct modifier keys). If anyone >>>>> sees something wrong with this approach, please let me know. >>>>> >>>>> To avoid problems with earlier Qt versions, I will (but haven't yet) >>>>> enclose all my code in: >>>>> >>>>> #if QT_VERSION > 0x040600 >>>>> ... >>>>> #endif >>>>> >>>>> and if it isn't already there, I'll also put in >>>>> #ifdef Q_WS_MACX >>>>> ... >>>>> #endif >>>>> >>>>> All my testing was done with the official lyx-1.6.1 source release, so my >>>>> next hurdle will be to get an SVN version to build. I haven't tried that >>>>> for several years, so I may have some questions tomorrow... if all else >>>>> fails, I could perhaps just send the diffs to the official release. >>>>> >>>>> Jens >>>>> >>>>> >>>> >>>> Hi again, >>>> it's been a while, but now I have a patch for lyx-devel/trunk that >>>> implements the customizable switching of Control and Modifier keys on Mac >>>> OS X for LyX 2.0 with Qt 4.6. >>> >>> Hi Jens, >>> >>> I'm not the nestor here but I'd like to welcome you. >>> >>>> Although I still have (at least) one open problem, maybe someone here >>>> wants to try it out (I tested it and it works with the svn checkout): >>>> >>>> <modifierKey.diff.zip> >>>> >>>> As a brief explanation: By setting a preference, you decide whether Ctrl >>>> and Meta are swapped next time LyX starts up (as is currently hard-coded >>>> in LyX/Mac), or not (as many emacs users prefer). >>> >>> (Sorry, I should have raised my hand earlier.) >>> >>> I'm not a emacs user. So I wouldn't use that feature. In fact, I tried it >>> and decided I don't like it. >>> I don't know any application where you can swap Ctrl and Meta. Neither on >>> MacOSX nor on Windows or Linux. >>> The option to do so with Qt4 makes me think that this shouldn't be done at >>> application level. >>> It should be a global Qt preference. That's my personal opinion. But of >>> course it's a matter of taste... >>> Is there any other application using that feature (except emacs I guess)? >>> >>>> My main question is still the following: >>>> There is now a new checkbox in frontend/qt/ui/PrefInput.ui which >>>> determines the role of Control and Apple keys, but this new UI element >>>> will appear for all versions of Qt and all platforms, even though it has >>>> an effect only with Qt >= 4.6 (in the other files, my changes are only >>>> applied when the right OS and version is detected). In order to make this >>>> checkbox disappear when it's not needed, what is the best approach? Is >>>> there a Qt or LyX directive for conditional UI elements that I could use >>>> in PrefInput.ui (similar to compiler directives as in my previous post)? >>>> My guess is that the answer is no. >>> >>> I don't know, but I would look for a function to hide the UI element >>> conditionally. >>> >>> Perhaps it is enough to have that preference without UI at first, document >>> it and ask users later about the >>> acceptance and how urgent the UI is needed. >>> >>>> An alternative would be to patch PrefInput.ui at the configure stage when >>>> MacOSX is detected. >>> >>> This is not that nice. You have to move to something like PrefInput.ui.in >>> for SVN check-in and remove the real PrefInput.ui from VCS. >>> Next you have to care for at least 3 build systems - autotools, cmake and >>> scons. I would strongly vote against that move. >>> >>>> But there I would need advice from someone who knows the LyX build system. >>> >>> >>> Two formal points: >>> * You sent a patch of 4k size as zip file - so you make it impossible to >>> view it inline. >>> I had the patch to save and unpack to read it. :( >>> * The indentation of your code is by blanks. The convention is to use tabs. >>> >>> Stephan >> >> Hi Stephan, >> it would be OK with me to just have a preference without UI, but I wanted to >> explore the UI because Pavel already gave me a nice starting point for how >> to do it (earlier in this thread). > > I can understand you very good. > > (I cannot see Pavels E-Mails in this thread - but that's not the point, > non-relevant). > For completeness, here's the missing passage: http://www.mail-archive.com/lyx-devel@lists.lyx.org/msg160178.html
>> Anyway, about the philosophical reasons for why this is an issue in need of >> fixing, see the LyX Wiki (the discussion goes back many years, so I can't >> repeat it all here): http://wiki.lyx.org/Mac/LyXmodifierKeys > > I took a quick look. And had the idea to make the default for the new RC > variable dynamic. It can depend on the keyboard binding. > When mac.bind is used make it false, for emacs.bind make it true. > In principle that sounds interesting because mac.bind would be really weird with the switched modifiers. But what if a user has a custom bind file (e.g., I have a custom xemacs.bind)? The naming of bind files is arbitrary and therefore shouldn't be the basis for a dynamic adjustment of the RC variable. But what about extending that idea a little: if the bind file name is not emacs.bind or xemacs.bind, it would most likely be including one or the other, so we could search the file for "\bind_file (x)emacs.bind" ... The more I think about it, the more it seems like a hack though. There should be an explicit declaration of whether the switch is desired, LyX probably shouldn't try to guess what the user wants. >> Regarding a global Qt option: can that work if the libs are included as a >> private framework? > > I don't know if global Qt options exist and how they work if any. But, I'd > guess the storage of that would be some plist file in your home dir. > In that sense with global I meant global for the user - not the machine. > >> In the standalone LyX, there is no system-wide Qt that is being used, so any >> Qt setting would have to be done at the application level, right? > > I have to check Qt4 at first to answer that. > > In general that's a question for packaging of LyX. I think LyX should work > with Qt4 frameworks. Then a private framework should be provided as option > for machines with no or with the wrong Qt version. Currently there is no > mechanism to decide that. That's why I package LyX with private Qt4 > frameworks only. > > Stephan OK, that would be great if you find something out - I'll also look around in the Qt docs some more. Jens