[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdebase/workspace/plasma/applets/kickoff
From:       Daniel Nicoletti <dantti85-kde () yahoo ! com ! br>
Date:       2009-05-31 22:23:43
Message-ID: 1243808623.572447.15021.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 976108 by dantti:

FIX kickoff to have the right behavior with relative urls

 M  +4 -1      core/models.cpp  
 M  +13 -4     ui/contextmenufactory.cpp  


--- trunk/KDE/kdebase/workspace/plasma/applets/kickoff/core/models.cpp #976107:976108
@@ -59,7 +59,10 @@
 
     QStandardItem *item = 0;
 
-    if (url.isLocalFile() && urlString.endsWith(".desktop")) {
+    // Match files ending with ".desktop" and being local or having a relative
+    // path. For instance applications that still installs .desktop files at
+    // /usr/share/applnk, like KVirc 3
+    if (urlString.endsWith(".desktop") && (url.isLocalFile() || url.isRelative())) {
         // .desktop files may be services (type field == 'Application' or 'Service')
         // or they may be other types such as links.
         //
--- trunk/KDE/kdebase/workspace/plasma/applets/kickoff/ui/contextmenufactory.cpp \
#976107:976108 @@ -38,6 +38,7 @@
 #include <Solid/OpticalDrive>
 #include <Solid/OpticalDisc>
 #include <KUrl>
+#include <KStandardDirs>
 
 // Plasma
 #include <Plasma/Containment>
@@ -149,7 +150,15 @@
     if ((d->applet) && (kurl.scheme() != "leave")) {
         Plasma::Containment *containment = d->applet->containment();
 
-        if (containment && containment->corona()) {
+        // There might be relative paths for .desktop installed in
+        // /usr/shar/applnk, we need to locate them
+        bool urlFound = true;
+        if (kurl.isRelative() && kurl.url().endsWith(".desktop")) {
+            kurl = KStandardDirs::locate("apps", url);
+            urlFound = !kurl.isEmpty();
+        }
+
+        if (urlFound && containment && containment->corona()) {
             Plasma::Containment *desktop = \
containment->corona()->containmentForScreen(containment->screen());  
             if (desktop && desktop->immutability() == Plasma::Mutable) {
@@ -158,7 +167,7 @@
             }
         }
 
-        if (containment && containment->immutability() == Plasma::Mutable &&
+        if (urlFound && containment && containment->immutability() == \
                Plasma::Mutable &&
                 containment->containmentType() == \
Plasma::Containment::PanelContainment) {  addToPanelAction->setText(i18n("Add to \
Panel"));  actions << addToPanelAction;
@@ -234,7 +243,7 @@
                     Plasma::Containment *desktop = \
corona->containmentForScreen(containment->screen());  if (desktop) {
                         QVariantList args;
-                        args << url;
+                        args << kurl.url();
                         desktop->addApplet("icon", args);
                     }
                 }
@@ -246,7 +255,7 @@
             Plasma::Containment *panel = d->applet->containment();
             if (panel) {
                 QVariantList args;
-                args << url;
+                args << kurl.url();
 
                 // move it to the middle of the panel
                 QRectF rect(panel->geometry().width() / 2, 0, 150, \
panel->boundingRect().height());


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic