updated debian/changelog in anticipation of 0.8
[simple-launcher] / launcher-item.cc
index 78ab250..999da20 100644 (file)
@@ -1,6 +1,6 @@
 // This file is a part of Simple Launcher
 //
-// Copyright (C) 2006, Mikhail Sobolev
+// Copyright (C) 2006, 2007, Mikhail Sobolev
 //
 // Simple Launcher is free software; you can redistribute it and/or modify it
 // under the terms of the GNU General Public License version 2 as published by
@@ -22,7 +22,7 @@
 
 #include "launcher-item.h"
 
-GtkIconTheme *LauncherItem::ourTheme = 0;
+GtkIconTheme *LauncherItem::ourTheme = NULL;
 
 static const char *DESKTOP_ENTRY_GROUP = "Desktop Entry",
                   *DESKTOP_ENTRY_TYPE_FIELD = "Type",
@@ -31,88 +31,103 @@ static const char *DESKTOP_ENTRY_GROUP = "Desktop Entry",
                   *DESKTOP_ENTRY_COMMENT_FIELD = "Comment",
                   *DESKTOP_ENTRY_SERVICE_FIELD = "X-Osso-Service";
 
-inline std::string getStringWrapper(GKeyFile *keyFile, const gchar *group, const gchar *itemName) {
-  gchar *tempo = g_key_file_get_string(keyFile, group, itemName, 0);
-  std::string result;
+class GKeyFileWrapper {
+public:
+  GKeyFileWrapper() {
+    myKeyFile = g_key_file_new();
+  }
+
+ ~GKeyFileWrapper() {
+    if (myKeyFile != NULL) {
+      g_key_file_free(myKeyFile);
+    }
+  }
 
-  if (tempo != 0) {
-    result.assign(tempo);
+  bool load(const std::string& name) {
+    GError *error = NULL;
+    bool result = g_key_file_load_from_file(myKeyFile, name.c_str(), G_KEY_FILE_NONE, &error);
 
-    g_free(tempo);
+    if (error != NULL) {
+      g_error_free(error);
+    }
+
+    return result;
   }
 
-  return result;
-}
+  std::string getString(const gchar *group, const gchar *itemName) {
+    gchar *tempo = g_key_file_get_string(myKeyFile, group, itemName, NULL);
+    std::string result;
 
-inline std::string getLocaleStringWrapper(GKeyFile *keyFile, const gchar *group, const gchar *itemName) {
-  gchar *tempo = g_key_file_get_locale_string(keyFile, group, itemName, 0, 0);
-  std::string result;
+    if (tempo != NULL) {
+      result.assign(tempo);
 
-  if (tempo != 0) {
-    result.assign(tempo);
+      g_free(tempo);
+    }
 
-    g_free(tempo);
+    return result;
   }
 
-  return result;
-}
+  std::string getLocaleString(const gchar *group, const gchar *itemName) {
+    gchar *tempo = g_key_file_get_locale_string(myKeyFile, group, itemName, NULL, NULL);
+    std::string result;
+
+    if (tempo != NULL) {
+      result.assign(tempo);
 
-LauncherItem::LauncherItem() {
+      g_free(tempo);
+    }
+
+    return result;
+  }
+
+private:
+  GKeyFile *myKeyFile;
+};
+
+LauncherItem::LauncherItem(): myEnabled(false) {
 }
 
 LauncherItem::~LauncherItem() {
 }
 
 bool LauncherItem::load(const std::string& filename) {
-  GKeyFile *key_file = 0;
-  GError *error = 0;
+  GKeyFileWrapper key_file;
 
   for (;;) {
-    if ((key_file = g_key_file_new()) == 0) {
-      break;
-    }
+    myFileName = filename;
 
-    if (!g_key_file_load_from_file(key_file, filename.c_str(), G_KEY_FILE_NONE, &error)) {
+    if (!key_file.load(filename)) {
       break;
     }
 
-    if (getStringWrapper(key_file, DESKTOP_ENTRY_GROUP, DESKTOP_ENTRY_TYPE_FIELD) != "Application") {
+    if (key_file.getString(DESKTOP_ENTRY_GROUP, DESKTOP_ENTRY_TYPE_FIELD) != "Application") {
       break;
     }
 
-    myName = getStringWrapper(key_file, DESKTOP_ENTRY_GROUP, DESKTOP_ENTRY_NAME_FIELD);
-    myComment = getLocaleStringWrapper(key_file, DESKTOP_ENTRY_GROUP, DESKTOP_ENTRY_COMMENT_FIELD);
-    myIcon = getStringWrapper(key_file, DESKTOP_ENTRY_GROUP, DESKTOP_ENTRY_ICON_FIELD);
-    myService = getStringWrapper(key_file, DESKTOP_ENTRY_GROUP, DESKTOP_ENTRY_SERVICE_FIELD);
+    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);
 
     break;
   }
 
-  if (error != 0) {
-    g_error_free(error);
-    error = 0;
-  }
-
-  if (key_file != 0) {
-    g_key_file_free(key_file);
-  }
-
-  return !(myName.empty() || myIcon.empty() || myService.empty());
+  return (myEnabled = checkSanity());
 }
 
 GdkPixbuf *LauncherItem::getIcon(int icon_size) const {
-  GdkPixbuf *pixbuf = 0;
+  GdkPixbuf *pixbuf = NULL;
 
   if (!myIcon.empty()) {
-    if (ourTheme == 0) {
+    if (ourTheme == NULL) {
       ourTheme = gtk_icon_theme_get_default();
     }
 
-    GError *error = 0;
+    GError *error = NULL;
 
     pixbuf = gtk_icon_theme_load_icon(ourTheme, myIcon.c_str(), icon_size, GTK_ICON_LOOKUP_NO_SVG, &error);
 
-    if (error != 0) {
+    if (error != NULL) {
       g_error_free(error);
       error = NULL;
     }