<br><br><div class="gmail_quote">2008/7/2 Aaron J. Seigo &lt;<a href="mailto:aseigo@kde.org">aseigo@kde.org</a>&gt;:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="Ih2E3d">On Wednesday 02 July 2008, Richard Dale wrote:<br>
&gt; &gt; I think that would make sense from the JS point of view too.<br>
&gt;<br>
&gt; OK, please find attached a patch to try it out.<br>
<br>
</div>i don&#39;t think this makes much sense for ecmascript stuff, it&#39;s just another bit<br>
of complexity. i understand why you are doing it for ruby, however, based on<br>
previous conversations we&#39;ve had.<br>
<br>
so ... the question is how to implement this properly.<br>
<br>
all of this belongs in a PackageStructure: no code in Applet or AppletScript<br>
should be touched. the moment that happens, it&#39;s a sign something is wrong =)<br>
<br>
in your patch, by commenting out the setRequred mainscript line in<br>
AppletPackage, it&#39;s now impossible to either verify or create packages<br>
properly: with the patch it&#39;s completely valid to have plasmoids without<br>
mainscripts. so we don&#39;t want that =)</blockquote><div>Yes, I didn&#39;t like that which is way I mentioned the whole thing needed more thinking about - which you&#39;ve now done. <br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
<br>
there are two ways of going about this:<br>
<br>
* define a separate PackageStructure for plasmoid bundles with configurable main<br>
scripts and leave PlasmoidPackage as it is<br>
 &nbsp; &nbsp; &nbsp; &nbsp;* benefits: it keeps PlasmoidPackage loading simple<br>
 &nbsp; &nbsp; &nbsp; &nbsp;* cons: we now have to define the PackageStructure in all ruby (or whatever<br>
other) metadata.desktop files<br>
<br>
* modify PlasmoidPackage properly and make dynmic-mainscript-location a<br>
possibility for all packages<br>
 &nbsp; &nbsp; &nbsp; &nbsp;* benefits: keeps things simpler for dynamic main script location packages:<br>
don&#39;t have to define the PackageStructure in the metadata.desktop file<br>
 &nbsp; &nbsp; &nbsp; &nbsp;* cons: means we read the PackageMetadata again for every plasmoid loaded<br>
<br>
the latter is *probably* the better of the two options from the user&#39;s POV but<br>
is worse from a performance POV.</blockquote><div>Yes, I think having configurable &#39;top thing&#39; to load at start is a pretty general requirement, not just for scripting. For example, the name of a C++ executable or a C# .dll might not be named &#39;main&#39;. <br>
<br>Really for Ruby the name &#39;clock.rb&#39; is needed to know that the main class inside is called &#39;Clock&#39; and &#39;analog_clock.rb&#39; would have &#39;AnalogClock&#39; inside it. At the moment the main class is always called &#39;Main&#39; and each applet have a different namespace for it derived from the package name.<br>
&nbsp;<br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
<br>
what needs to happen in the code is a protected void<br>
PlasmoidPackage::patchChanged() method needs to be added. this will get called<br>
whenever it&#39;s path() changes.<br>
<br>
in that method it will need to create a PackageMetadata for itself and read<br>
out the value of the main script if it exists.<br>
<br>
the default should remain as is.<br>
<br>
i think this will end up need some more API for PackageStructure in 4.2 to:<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;* make adjusting existing keys more straightforward<br>
 &nbsp; &nbsp; &nbsp; &nbsp;* allow defining which keys are configurable for package creation tools<br>
<br>
anyways, see attached patch. 16 lines of additions, including whitespace;<br>
really only 6 lines of interesting code. it&#39;s untested (well it compiles ;)<br>
but it should work by all intentions.</blockquote><div>You&#39;re reading it out of KConfigGroup, whereas I was assuming it was coming via a KTrader offer. That aspect of the package stuff is confusing - I&#39;m not sure when one or the other mechanism is used. plasmapkg renames metadata.desktop on installation, but perhaps you still use if for KConfigGroup metadata lookups from your code.<br>
</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
the lack of documentation for this part of libplasma really sucks; i really do<br>
need to do something about that =( it makes it seem like you have to around<br>
changing stuff all over libplasma in big patches instead of just adding 6 new<br>
lines =)</blockquote>Yes, but there is nothing wrong with being forced to read and understand all the code, and coming up with something a bit sub-optimal to get discussion going - so I&#39;m not too bothered about docs as long as the code is clear, which it is mostly.<br>
<br>Apart from being able to change the name from &#39;main&#39; to &#39;clock.rb&#39; another issue is just being able to have a language extension such as &#39;main.rb&#39;. That would be the same for all ruby plasmoids, and main.js for all Javascript ones. <br>
<br>I&#39;m not sure how people will work on scripting applet code - at the moment I have &#39;tiger/contents/code/main.rb&#39; and work on it in situ. So it matters if it is &#39;main&#39; rather than &#39;main.rb&#39; for editing with syntax highlighting. Perhaps it would be better to have all the sources and resource in a top level directory, and only actually move them into the package structure on installation. So you would edit &#39;main.rb&#39; in the top level and that would be moved to &#39;main&#39; inside the package. That gets round the problem of plasmapkg installing all your .svn dirs too.<br>
<br>-- Richard<br><br></div><br>