finally started to use version control system
[simple-launcher] / launcher-item.cc
1 #include <string>
2
3 #include <glib/gmem.h>
4 #include <glib/gkeyfile.h>
5
6 #include <gtk/gtkicontheme.h>
7
8 #include "launcher-item.h"
9
10 static const char *DESKTOP_ENTRY_GROUP = "Desktop Entry",
11                   *DESKTOP_ENTRY_TYPE_FIELD = "Type",
12                   *DESKTOP_ENTRY_ICON_FIELD = "Icon",
13                   *DESKTOP_ENTRY_NAME_FIELD = "Name",
14                   *DESKTOP_ENTRY_COMMENT_FIELD = "Comment",
15                   *DESKTOP_ENTRY_SERVICE_FIELD = "X-Osso-Service";
16
17 inline std::string getStringWrapper(GKeyFile *keyFile, const gchar *group, const gchar *itemName) {
18   gchar *tempo = g_key_file_get_string(keyFile, group, itemName, 0);
19   std::string result;
20
21   if (tempo != 0) {
22     result = tempo;
23
24     g_free(tempo);
25   }
26
27   return result;
28 }
29
30 inline std::string getLocaleStringWrapper(GKeyFile *keyFile, const gchar *group, const gchar *itemName) {
31   gchar *tempo = g_key_file_get_locale_string(keyFile, group, itemName, 0, 0);
32   std::string result;
33
34   if (tempo != 0) {
35     result = tempo;
36
37     g_free(tempo);
38   }
39
40   return result;
41 }
42
43 LauncherItem::LauncherItem() {
44 }
45
46 LauncherItem::~LauncherItem() {
47 }
48
49 bool LauncherItem::load(const std::string& filename) {
50   GKeyFile *key_file = 0;
51   GError *error = 0;
52
53   for (;;) {
54     if ((key_file = g_key_file_new()) == 0) {
55       break;
56     }
57
58     if (!g_key_file_load_from_file(key_file, filename.c_str(), G_KEY_FILE_NONE, &error)) {
59       break;
60     }
61
62     if (getStringWrapper(key_file, DESKTOP_ENTRY_GROUP, DESKTOP_ENTRY_TYPE_FIELD) != "Application") {
63       break;
64     }
65
66     myName = getStringWrapper(key_file, DESKTOP_ENTRY_GROUP, DESKTOP_ENTRY_NAME_FIELD);
67     myComment = getLocaleStringWrapper(key_file, DESKTOP_ENTRY_GROUP, DESKTOP_ENTRY_COMMENT_FIELD);
68     myIcon = getStringWrapper(key_file, DESKTOP_ENTRY_GROUP, DESKTOP_ENTRY_ICON_FIELD);
69     myService = getStringWrapper(key_file, DESKTOP_ENTRY_GROUP, DESKTOP_ENTRY_SERVICE_FIELD);
70
71     break;
72   }
73
74   if (error != 0) {
75     g_error_free(error);
76     error = 0;
77   }
78
79   if (key_file != 0) {
80     g_key_file_free(key_file);
81   }
82
83   return !(myName.empty() || myIcon.empty() || myService.empty());
84 }
85
86 GdkPixbuf *LauncherItem::getIcon(int icon_size) const {
87   GdkPixbuf *pixbuf = 0;
88
89   if (!myIcon.empty()) {
90     GtkIconTheme *theme;
91     GError *error = 0;
92
93     theme = gtk_icon_theme_get_default();
94     pixbuf = gtk_icon_theme_load_icon(theme, myIcon.c_str(), icon_size, GTK_ICON_LOOKUP_NO_SVG, &error);
95
96     if (error != 0) {
97       g_error_free(error);
98       error = NULL;
99     }
100   }
101
102   return pixbuf;
103 }