when allocating an array delete it as array as well
[simple-launcher] / launcher-item.cc
index 36653d8..39fa274 100644 (file)
@@ -31,10 +31,12 @@ static const char *DESKTOP_ENTRY_GROUP = "Desktop Entry",
                   *DESKTOP_ENTRY_ICON_FIELD = "Icon",
                   *DESKTOP_ENTRY_NAME_FIELD = "Name",
                   *DESKTOP_ENTRY_COMMENT_FIELD = "Comment",
+                  *DESKTOP_ENTRY_EXEC_FIELD = "Exec",
                   *DESKTOP_ENTRY_SERVICE_FIELD = "X-Osso-Service",
                   *DESKTOP_ENTRY_TEXT_DOMAIN = "X-Text-Domain";
 
 static const char *DEFAULT_TEXT_DOMAIN = "maemo-af-desktop";
+static const char *DEFAULT_APP_ICON = "qgn_list_gene_default_app";
 
 class GKeyFileWrapper {
 public:
@@ -89,7 +91,7 @@ private:
   GKeyFile *myKeyFile;
 };
 
-LauncherItem::LauncherItem(): myEnabled(false) {
+LauncherItem::LauncherItem(): myIsGood(false), myEnabled(false) {
 }
 
 LauncherItem::~LauncherItem() {
@@ -106,6 +108,8 @@ std::string LauncherItem::translateString(const std::string& what) const {
 bool LauncherItem::load(const std::string& filename) {
   GKeyFileWrapper key_file;
 
+  myIsGood = false;
+
   for (;;) {
     myFileName = filename;
 
@@ -117,10 +121,13 @@ bool LauncherItem::load(const std::string& filename) {
       break;
     }
 
+    myIsGood = true;
+
     myName = key_file.getLocaleString(DESKTOP_ENTRY_GROUP, DESKTOP_ENTRY_NAME_FIELD);
     myComment = key_file.getLocaleString(DESKTOP_ENTRY_GROUP, DESKTOP_ENTRY_COMMENT_FIELD);
     myIcon = key_file.getString(DESKTOP_ENTRY_GROUP, DESKTOP_ENTRY_ICON_FIELD);
     myService = key_file.getString(DESKTOP_ENTRY_GROUP, DESKTOP_ENTRY_SERVICE_FIELD);
+    myExec = key_file.getString(DESKTOP_ENTRY_GROUP, DESKTOP_ENTRY_EXEC_FIELD);
     myTextDomain = key_file.getString(DESKTOP_ENTRY_GROUP, DESKTOP_ENTRY_TEXT_DOMAIN);
 
     break;
@@ -130,16 +137,24 @@ bool LauncherItem::load(const std::string& filename) {
 }
 
 GdkPixbuf *LauncherItem::getIcon(int icon_size) const {
+  if (ourTheme == NULL) {
+    ourTheme = gtk_icon_theme_get_default();
+  }
+
   GdkPixbuf *pixbuf = NULL;
+  GError *error = NULL;
 
   if (!myIcon.empty()) {
-    if (ourTheme == NULL) {
-      ourTheme = gtk_icon_theme_get_default();
-    }
+    pixbuf = gtk_icon_theme_load_icon(ourTheme, myIcon.c_str(), icon_size, GTK_ICON_LOOKUP_NO_SVG, &error);
 
-    GError *error = NULL;
+    if (error != NULL) {
+      g_error_free(error);
+      error = NULL;
+    }
+  }
 
-    pixbuf = gtk_icon_theme_load_icon(ourTheme, myIcon.c_str(), icon_size, GTK_ICON_LOOKUP_NO_SVG, &error);
+  if (pixbuf == NULL) {
+    pixbuf = gtk_icon_theme_load_icon(ourTheme, DEFAULT_APP_ICON, icon_size, GTK_ICON_LOOKUP_NO_SVG, &error);
 
     if (error != NULL) {
       g_error_free(error);