Get Hot New Stuff pour Yakuake

Internet IconEn résultat à la KDE Release Party de Toulouse, j’ai décidé de m’engager dans le code source de KDE. Vu que je ne suis pas familié avec, je devait commencer avec quelque chose de simple. Un bon début était d’intégré une fonctionnalité “Get Hot New Stuff” (c’est à dire obtenir des nouveautés) à la page de configuration des thèmes de Yakuake. Yakuake est un terminal déroulant inspiré par la console de Quake 3 et “Get hot new stuff” (le lien vous mènera à la documentation développeur en anglais) est un moyen simple d’installer graphiquement des éléments supplémentaire aux applications KDE.

Le patch est maintenant prèt et ressemble à ça :

diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt
index 9b34cf3..f46592e 100644
--- a/app/CMakeLists.txt
+++ b/app/CMakeLists.txt
@@ -33,7 +33,7 @@ kde4_add_app_icon(yakuake_SRCS "icons/hi*-app-yakuake.png")

 kde4_add_executable(yakuake ${yakuake_SRCS})

-target_link_libraries(yakuake ${KDE4_KPARTS_LIBS})
+target_link_libraries(yakuake ${KDE4_KPARTS_LIBS} ${KDE4_KNEWSTUFF3_LIBS})

 if(Q_WS_X11)
   target_link_libraries(yakuake ${X11_X11_LIB})
@@ -42,3 +42,5 @@ endif(Q_WS_X11)
 install(TARGETS yakuake ${INSTALL_TARGETS_DEFAULT_ARGS})

 install(PROGRAMS yakuake.desktop DESTINATION ${XDG_APPS_INSTALL_DIR})
+
+install(FILES config/yakuake.knsrc DESTINATION ${CONFIG_INSTALL_DIR} )
diff --git a/app/config/appearancesettings.cpp b/app/config/appearancesettings.cpp
index 7ae00e9..a4b645c 100644
--- a/app/config/appearancesettings.cpp
+++ b/app/config/appearancesettings.cpp
@@ -37,6 +37,8 @@

 #include 

+#include 
+
 AppearanceSettings::AppearanceSettings(QWidget* parent) : QWidget(parent)
 {
     setupUi(this);
@@ -55,7 +57,10 @@ AppearanceSettings::AppearanceSettings(QWidget* parent) : QWidget(parent)
     connect(skinList->selectionModel(), SIGNAL(currentChanged(const QModelIndex&, const QModelIndex&)),
         this, SLOT(updateRemoveSkinButton()));
     connect(installButton, SIGNAL(clicked()), this, SLOT(installSkin()));
+    connect(getnewButton, SIGNAL(clicked()), this, SLOT(getnewSkin()));
     connect(removeButton, SIGNAL(clicked()), this, SLOT(removeSelectedSkin()));
+
+    getnewButton->setIcon(KIcon("get-hot-new-stuff"));

     m_selectedSkinId = Settings::skin();

@@ -223,6 +228,17 @@ void AppearanceSettings::installSkin()
         failInstall(i18nc("@info", "The installer was given a directory, not a file."));
 }

+void AppearanceSettings::getnewSkin()
+{
+  KNS3::DownloadDialog dialog("yakuake.knsrc", this);
+  dialog.exec();
+  KNS3::Entry::List entries = dialog.changedEntries();
+    if (entries.size() > 0) {
+      populateSkinList();
+    }
+
+}
+
 void AppearanceSettings::listSkinArchive(KIO::Job* /* job */, const KIO::UDSEntryList& list)
 {
     if (list.count() == 0) return;
diff --git a/app/config/appearancesettings.h b/app/config/appearancesettings.h
index 1363f70..02397ec 100644
--- a/app/config/appearancesettings.h
+++ b/app/config/appearancesettings.h
@@ -70,6 +70,7 @@ class AppearanceSettings : public QWidget, private Ui::AppearanceSettings
         void updateSkinSetting();

         void installSkin();
+       void getnewSkin();
         void listSkinArchive(KIO::Job* job, const KIO::UDSEntryList& list);
         void validateSkinArchive(KJob* job);
         void installSkinArchive(KJob* deleteJob = 0);
diff --git a/app/config/appearancesettings.ui b/app/config/appearancesettings.ui
index a951568..fa7754a 100644
--- a/app/config/appearancesettings.ui
+++ b/app/config/appearancesettings.ui
@@ -6,8 +6,8 @@
    
     0
     0
-    307
-    355
+    467
+    435
    
   
   
@@ -154,17 +154,7 @@
       Skin
      
      
-      
-       
-        
-         Qt::NoContextMenu
-        
-        
-         Qt::ScrollBarAlwaysOff
-        
-       
-      
-      
+      
        
         
          true
@@ -174,7 +164,7 @@
         
        
       
-      
+      
        
         
          false
@@ -184,13 +174,30 @@
         
        
       
-      
+      
        
         
          false
         
        
       
+      
+       
+        
+         Get New Skin...
+        
+       
+      
+      
+       
+        
+         Qt::NoContextMenu
+        
+        
+         Qt::ScrollBarAlwaysOff
+        
+       
+      
      
     
    
@@ -198,15 +205,15 @@
  
  
   
-   KColorButton
-   QPushButton
-   
kcolorbutton.h
-
- KLineEdit QLineEdit
klineedit.h
+ + KColorButton + QPushButton +
kcolorbutton.h
+
kcfg_TerminalHighlightOnManualActivation @@ -214,6 +221,7 @@ kcfg_Translucency kcfg_BackgroundColorOpacity skinList + getnewButton installButton removeButton kcfg_Skin

Un fichier appelé yakuake.knsrc doit être ajouté au répertoire app/config du répertoire source de Yakuake. Voici son contenu :

[KNewStuff3]
ProvidersUrl=http://download.kde.org/ocs/providers.xml
Uncompress=always
TargetDir=yakuake/skins
Categories=Yakuake Skin

J’espère que cela sera bientôt ajouté au code source officiel de Yakuake. Pour l’instant vous pouvez essayer d’appliquer le patch et de compiller et installer Yakuake si vous voulez “Get Hot New Stuff” avant que la prochaine version de Yakuake ne sorte. Pour le faire, essayez ceci :

git clone git://anongit.kde.org/yakuake
cd yakuake
wget http://www.geoffray-levasseur.org/files/yakuake-gethotnewstuff.patch
wget http://www.geoffray-levasseur.org/files/yakuake.knsrc
mv -fv yakuake.knsrc app/config/
patch -Np1 -i yakuake-gethotnewstuff.patch
mkdir build && cd build
cmake ./ ../ -DCMAKE_INSTALL_PREFIX=$KDEDIR
make
su -c "make install"

Assurez-vous d’abord que le paquet Yakuake de votre distribution est désinstallé et que la variable d’environnement KDEDIR pointe correctement vers votre préfixe d’installation de KDE (la plupart du temps /usr ou /opt/kde4). Vous devrez taper votre mot de passe root après avoir validé la dernière ligne. Amusez-vous !