I figured the problem(s) out. Here it goes.. Here source code from the initial email without the print statements.
var layout = new LinearLayout(plasmoid); l = new Label(); l.text = "---"; layout.addItem(l); var smDataEngine = dataEngine("systemmonitor") smDataEngine.sourceAdded.connect(function(name) { if (name.toString() == "cpu/system/TotalLoad") { smDataEngine.connectSource(name, plasmoid, 1000); }); plasmoid.dataUpdated = function(name, d) { if ( d["value"] ) { l.text = d["value"]; } }; There are three bugs in there, where the first hides the remaining two. The first bug is that sourceAdded isn't called when the applet is added to a running plasma-desktop session. If you'd restart plasma-deskop, then it works as advertised. I assume that the the process loads all applet and then starts the data engines, which then causes the sourceAdded slot to be called. Adding a new applet ofc doesn't restart the data engines and there we have it. Note that for the same reason this bug doesn't show up when you're using plasmoidviewer (which is why it took me a while to figure it out). Now lets change the source code to work around this problem. I'll get rid of sourceAdded altogether, since it's unlikely that the CPU will be plugged out at runtime. var layout = new LinearLayout(plasmoid); l = new Label(); l.text = "---"; layout.addItem(l); var smDataEngine = dataEngine("systemmonitor") smDataEngine.connectSource("cpu/system/TotalLoad", plasmoid, 1000); plasmoid.dataUpdated = function(name, d) { if ( d["value"] ) { l.text = d["value"]; } }; This reliably _never_ works, because the second bug kicks in. When connetSource is called the updateData slot isn't filled yet. This causes connetSource to fail. This failure doesn't cause an debug message to be emitted (which is good IMO), but connectSource returns 'undefined' rather than 'true'. So the two remaining bugs are: 1. 'plasmoid.dataUpdated = ..' isn't located before 'smDataEngine.connectSource(..)' in the source file. 2. The return value of connectSource isn't checked. Here the final and hopefully correct version var layout = new LinearLayout(plasmoid); l = new Label(); l.text = "---"; layout.addItem(l); plasmoid.dataUpdated = function(name, d) { if ( d["value"] ) { l.text = d["value"]; } }; var smDataEngine = dataEngine("systemmonitor"); if (!smDataEngine.connectSource("cpu/system/TotalLoad", plasmoid, 1000)) { throw("connecting to data source failed."); } Thanks for your attention, Maik _______________________________________________ Plasma-devel mailing list Plasma-devel@kde.org https://mail.kde.org/mailman/listinfo/plasma-devel