{"id":459,"date":"2009-12-24T17:40:41","date_gmt":"2009-12-24T16:40:41","guid":{"rendered":"http:\/\/www.enricoros.com\/blog\/?p=459"},"modified":"2013-04-21T15:51:15","modified_gmt":"2013-04-21T22:51:15","slug":"qml-to-kdm-presto","status":"publish","type":"post","link":"https:\/\/www.enricoros.com\/oldblog\/2009\/12\/qml-to-kdm-presto\/","title":{"rendered":"QML to KDM! Presto!!"},"content":{"rendered":"<div>I&#8217;m really surprised you&#8217;re still reading, since the title really explains it all.. but for you, my beloved reader, I&#8217;ll spend some words more.<\/div>\n<h3>The KDE login Manager<\/h3>\n<div><a rel=\"attachment wp-att-467\" href=\"http:\/\/www.enricoros.com\/blog\/wp-content\/uploads\/2009\/12\/f_oxygenairm_2335e86-med.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-467\" title=\"f_oxygenairm_2335e86-med\" src=\"http:\/\/www.enricoros.com\/blog\/wp-content\/uploads\/2009\/12\/f_oxygenairm_2335e86-med.png\" alt=\"\" width=\"314\" height=\"221\" srcset=\"https:\/\/www.enricoros.com\/oldblog\/wp-content\/uploads\/2009\/12\/f_oxygenairm_2335e86-med.png 314w, https:\/\/www.enricoros.com\/oldblog\/wp-content\/uploads\/2009\/12\/f_oxygenairm_2335e86-med-300x211.png 300w\" sizes=\"auto, (max-width: 314px) 100vw, 314px\" \/><\/a>The <em>login manager<\/em> is the &#8220;insert password&#8221; dialog that <em>gets in the way<\/em> when you want to use your computer. Of course you may not be the only user of the machine, so it&#8217;s somewhat needed when you <em>share the seat<\/em>. Some facts:<\/div>\n<div>\n<ul>\n<li>the honorable <em>Stephan &#8216;coolo&#8217; Kulow<\/em> landed it in cvs Sept 2nd 1997 (yes, that&#8217;s <em>12 years ago<\/em>)<\/li>\n<li>great people like <em>Waldo Bastian<\/em> and <em>David Faure<\/em> worked on it<\/li>\n<li>it&#8217;s now maintained by the \u00fcber-expert <em>Oswald &#8216;ossi&#8217; Buddenhagent<\/em><\/li>\n<li>I did the graphical themes support, implementing the <a href=\"http:\/\/projects.gnome.org\/gdm\/docs\/2.16\/thememanual.html\">GDM themes spec<\/a> back in the KDE3 days<\/li>\n<li><strong>\u201cThe first thing you\u2019ll notice about the new KDE 4 is it\u2019s old login manager\u201d<\/strong> &#8211; as\u00a0<a href=\"http:\/\/www.icon-king.com\/\">David Vignoni<\/a> says\u00a0<a href=\"http:\/\/www.icon-king.com\/thoughts\/few-things-about-kdm-that-do-not-make-much-sense-to-me\/\">in his controversial blog entry<\/a>,<\/li>\n<\/ul>\n<p>The funny thing is: 1 year from now <strong><span style=\"font-size: small;\">Win7 and MacOS will stare at KDM with envy!!<\/span><\/strong> Read on to know the future history.<\/p>\n<\/div>\n<h3>Kdm Top to Bottom<\/h3>\n<div>Let&#8217;s say that KDM rocks &#8216;backend-wise&#8217;: multiple-seats, integration with running sessions, XDMCP and all the other stuff that makes kdm the top of the class. But what do you find in <em>$SVN\/KDE\/kdebase\/workspace\/kdm<\/em> ?<\/div>\n<div>\n<ul>\n<li>backend\/* -&gt; the display management core<\/li>\n<li>kfrontend\/*.{cpp,h} -&gt; 90&#8217;s GUI, there is even an aliased analog clock..<\/li>\n<li>kfrontend\/themer\/* -&gt; graphical themes stuff (just 2243 source lines of code)<\/li>\n<\/ul>\n<\/div>\n<div>The <em>themer<\/em>, which is used by default, implemented the gdm theming specs but it was never package-compatible (afaik) with gdm (we lost a good inter-op chance there). It was implemented in the KDE3 days, so we had to code our &#8216;backing storage&#8217; to implement transparency between layers and in the end the themes are hand-written xml files that embed some default components (line-edits for user\/pass insertion, listview for user list, etc).<\/div>\n<div>It looks so old-style, doesn&#8217;t it?<\/div>\n<h3>Qml to the rescue!<\/h3>\n<p><a rel=\"attachment wp-att-474\" href=\"http:\/\/www.enricoros.com\/blog\/wp-content\/uploads\/2009\/12\/flurries.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-474\" title=\"flurries\" src=\"http:\/\/www.enricoros.com\/blog\/wp-content\/uploads\/2009\/12\/flurries.png\" alt=\"\" width=\"264\" height=\"408\" srcset=\"https:\/\/www.enricoros.com\/oldblog\/wp-content\/uploads\/2009\/12\/flurries.png 264w, https:\/\/www.enricoros.com\/oldblog\/wp-content\/uploads\/2009\/12\/flurries-194x300.png 194w\" sizes=\"auto, (max-width: 264px) 100vw, 264px\" \/><\/a>What if we throw away (or keep for &#8220;retro-compatibility&#8221;) the <em>classic<\/em> and <em>themer<\/em> frontends and just add a frontend using <a href=\"http:\/\/qt.nokia.com\/doc\/qml-snapshot\/qmlelements.html\">QML<\/a>? This is the name of the language of the <a href=\"http:\/\/qt.nokia.com\/doc\/qml-snapshot\/declarativeui.html\">Qt Declarative<\/a> module, that <a href=\"http:\/\/labs.trolltech.com\/blogs\/2009\/12\/14\/qt-declarative-for-qt-460-released\/\">has just seen the light<\/a> and will be merged into Qt for the 4.7 release.<\/p>\n<p>Imagine this:<\/p>\n<ul>\n<li>theme creators will have 100X or more expressive power:\u00a0<em>make snow<\/em>! login via a <em>tetris puzzle<\/em>! bounce my<em> webcam picture<\/em>!<\/li>\n<li>there will be animated themes (for login, user change, logout, etc..) or simple ones for more &#8216;classic&#8217; kind of people<\/li>\n<li>kdm only needs to add a couple of bindings to the qml runtime, like functions for logging in and\u00a0shutting down\u00a0\/ suspend the system<\/li>\n<li>there is no need for compiled binaries, packages will be interpreted by the qml runtime &#8211; finally a painless get-hot-new-stuff (compared to plasma widgets, at least).<\/li>\n<\/ul>\n<h3><strong>Conclusion<\/strong><\/h3>\n<div>\n<p>I&#8217;m not able to mock-up what comes to my mind, but just look at <a href=\"http:\/\/www.youtube.com\/watch?v=5hgcLxAJ6hM&amp;feature=player_embedded\">some<\/a> <a href=\"http:\/\/www.youtube.com\/watch?v=U7IgwNrcln8\">qml<\/a> <a href=\"http:\/\/www.youtube.com\/watch?v=3VKqwDN6P6o\">videos<\/a> on youtube to grab the concept.<br \/>\nWhat do you think about that?\u00a0Could this be a low-effort high-inpact development for KDE 4?<\/p>\n<\/div>\n<div>Thanks to <a href=\"http:\/\/blog.uninstall.it\/\">Davide Bettio<\/a> who made me blog this.<\/div>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;m really surprised you&#8217;re still reading, since the title really explains it all.. but for you, my beloved reader, I&#8217;ll spend some words more. The KDE login Manager The login manager is the &#8220;insert password&#8221; dialog that gets in the way when you want to use your computer. Of course you may not be the [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[10,13,18,23,26],"class_list":["post-459","post","type-post","status-publish","format-standard","hentry","category-computer-graphics","tag-avanguardia","tag-creativity","tag-kde4","tag-planetkde","tag-qt"],"_links":{"self":[{"href":"https:\/\/www.enricoros.com\/oldblog\/wp-json\/wp\/v2\/posts\/459","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.enricoros.com\/oldblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.enricoros.com\/oldblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.enricoros.com\/oldblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.enricoros.com\/oldblog\/wp-json\/wp\/v2\/comments?post=459"}],"version-history":[{"count":24,"href":"https:\/\/www.enricoros.com\/oldblog\/wp-json\/wp\/v2\/posts\/459\/revisions"}],"predecessor-version":[{"id":577,"href":"https:\/\/www.enricoros.com\/oldblog\/wp-json\/wp\/v2\/posts\/459\/revisions\/577"}],"wp:attachment":[{"href":"https:\/\/www.enricoros.com\/oldblog\/wp-json\/wp\/v2\/media?parent=459"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.enricoros.com\/oldblog\/wp-json\/wp\/v2\/categories?post=459"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.enricoros.com\/oldblog\/wp-json\/wp\/v2\/tags?post=459"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}