<div dir="ltr"><img width="0" height="0" class="mailtrack-img" alt="" style="display:flex" src="https://mailtrack.io/trace/mail/2ddcf0c966d49a51c7c360015749a3c464c20d54.png?u=1477559"><div></div>Hi Tobias,<br><br><div class="gmail_extra"><br><div class="gmail_quote">On Sat, May 19, 2018 at 6:17 PM, Tobias Deiminger <span dir="ltr"><<a href="mailto:haxtibal@posteo.de" target="_blank">haxtibal@posteo.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Dileep,<br>
<br>
that's quite a lot. I don't have enough continuous time to answer all at once, so I just start with the first two questions.<br>
@all: Everybody is very welcome to join discussion and answering:)<span class=""><br>
<br>
Am 18.05.2018 17:04 schrieb Dileep Sankhla:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I have few things to ask before getting it done and it would be nice<br>
if you can reply to any of the queries with your own suggestions.<br>
<br>
1. In tree/ui/data/tools.xml, we have decided to append new<br>
"typewriter" annotation tool at <tool id="10"> without muddling<br>
others. Now should I give <shortcut>0</shortcut> to this tool or<br>
should I ommit the <shortcut> tag completely for this one?<br>
Giving shortcut 0 makes sense as 0 is the key next to 9 on the<br>
keyboard but having shortcut 0 for the tool at the lowest end in the<br>
annotation toolbar doesn't make sense.<br>
</blockquote>
<br></span>
Imho either 0 or none would both make sense. Users can configure the toolbar and shortcuts themselves anyway.<span class=""><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
2. My mentor remarked that tools.xml doesn't solely determine the<br>
order in the toolbar. It is just the initial default, but the<br>
"okularpartrc" file, if present, takes precedence.<br>
It is located at ~/.config/okularpartrc on my system containing the<br>
content similar to tools.xml. I need to know when it is being created<br>
and read by okular and how do I append typewriter tool entry in it for<br>
every system installing okular? I have no idea.<br>
</blockquote>
<br></span>
When toolbar accesses Okular::Settings::annotationTo<wbr>ols, values are already in memory. But you'll ask, how and when have they come there?<br>
<br>
class Okular::Settings is defined in <cmake-project-dir>/settings.c<wbr>pp. You must know that settings.{cpp,h} is autogenerated during project build by kconfig_compiler_kf5 out of conf/okular.kcfg. Please read [0] to learn about this. The responsible macro is in okular/CMakeLists.txt kconfig_add_kcfg_files(okularp<wbr>art_SRCS conf/settings.kcfgc).<br>
<br>
Data for Okular::Settings is initialized once in Okular::Settings::Settings Ctor. There the file tools.xml is read, as coded into the <entry key="AnnotationTools" type="StringList"><code>...</c<wbr>ode></entry> element from okular.kcfg.<br>
<br>
Data for Okular::Settings is also loaded and saved via a KSharedConfig config object. KSharedConfig derives from KConfig, and KConfig::reparseConfiguration [1] loads data from ~/.config/okularpartrc.<br>
<br>
Sadly there are several KSharedConfig instances in Okular, so if we want to watch it in gdb, we have to figure out during runtime which KSharedConfig is responsible for ~/.config/okularpartrc.<br>
<br>
Be sure to have libKF5ConfigCore debug symbols around (on Ubuntu: apt-get install libkf5configcore5-dbgsym).<br>
<br>
$ gdb okular<br>
<br>
(gdb) set breakpoint pending on<br>
(gdb) break Okular::Settings::Settings<br>
<br>
Next set a specific breakpoint to filter for the interesting KSharedConfig object. We know that if KSharedConfig Ctor is called inside Okular::Settings::instance, it is the one responsible for ~/.config/okularpartrc. So break only in this condition.<br>
<br>
(gdb) break Okular::Settings::instance<br>
command 1<br>
  tb KSharedConfig::KSharedConfig<br>
  c<br>
end<br>
<br>
Run the program.<br>
<br>
(gdb) r<br>
<br>
When hit, we know the KSharedConfig object of interest.<br>
#0  KSharedConfig::KSharedConfig (this=0x55555588f310, fileName=..., flags=..., resType=QStandardPaths::Generi<wbr>cConfigLocation)<br>
    at ./src/core/ksharedconfig.cpp:1<wbr>24<br>
<br>
It is at 0x55555588f310. Now we can set another conditional breakpoint to catch the KConfig::reparseConfiguration calls of interest.<br>
<br>
(gdb) break KConfig::reparseConfiguration if this=0x55555588f310<br>
<br>
That's it.<br>
Everytime you hit Okular::Settings::Settings, Okular reads from tools.xml.<br>
Everytime you hit this KConfig::reparseConfiguration, Okular reads from ~/.config/okularpartrc.<br>
<br>
Can you share your observations?<br></blockquote><div>Yes, you were right. Everytime d<span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">uring application startup, the okularpartrc file is read if present, and whenever a user alters the toolbar in some way, okularpartrc file is either created or updated. Hence I just need to alter tools.xml and no need to worry about okularpartrc.</span></div><div><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><br></span></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
To gain even more convidence in your debugging it's sometimes good to observe the value of QStrings. KDE provides nice tools for this:<br>
<br>
$ git clone git://<a href="http://anongit.kde.org/kde-dev-scripts.git" rel="noreferrer" target="_blank">anongit.kde.org/kde-dev-<wbr>scripts.git</a><br>
$ cp kde-dev-scripts/kde-devel-gdb ~/.gdbinit<br>
$ gdb okular<br>
<br>
Break somewhere. Now you can use the printq5string function to print the content of a QString:<br>
<br>
Thread 1 "okular" hit Breakpoint 2, Okular::Settings::instance (cfgfilename=...) at ./obj-x86_64-linux-gnu/setting<wbr>s.cpp:189<br>
189     ./obj-x86_64-linux-gnu/settin<wbr>gs.cpp: Datei oder Verzeichnis nicht gefunden.<br>
<br>
(gdb) printq5string cfgfilename<br>
/home/tobias/.config/okularpar<wbr>trc<br>
<br>
Cheers<br>
Tobias<br>
<br>
[0] <a href="https://api.kde.org/frameworks/kconfig/html/kconfig_compiler.html" rel="noreferrer" target="_blank">https://api.kde.org/frameworks<wbr>/kconfig/html/kconfig_<wbr>compiler.html</a><br>
[1] <a href="https://api.kde.org/frameworks/kconfig/html/classKConfig.html#a46f2e340c44261c2b58496bc64b31106" rel="noreferrer" target="_blank">https://api.kde.org/frameworks<wbr>/kconfig/html/classKConfig.<wbr>html#a46f2e340c44261c2b58496bc<wbr>64b31106</a><br>
</blockquote></div><br></div>‌</div>