4 #include <glib/gkeyfile.h>
6 #include <gtk/gtkicontheme.h>
8 #include "launcher-item.h"
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";
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);
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);
43 LauncherItem::LauncherItem() {
46 LauncherItem::~LauncherItem() {
49 bool LauncherItem::load(const std::string& filename) {
50 GKeyFile *key_file = 0;
54 if ((key_file = g_key_file_new()) == 0) {
58 if (!g_key_file_load_from_file(key_file, filename.c_str(), G_KEY_FILE_NONE, &error)) {
62 if (getStringWrapper(key_file, DESKTOP_ENTRY_GROUP, DESKTOP_ENTRY_TYPE_FIELD) != "Application") {
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);
80 g_key_file_free(key_file);
83 return !(myName.empty() || myIcon.empty() || myService.empty());
86 GdkPixbuf *LauncherItem::getIcon(int icon_size) const {
87 GdkPixbuf *pixbuf = 0;
89 if (!myIcon.empty()) {
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);
105 bool LauncherItem::activate(osso_context_t *context) {
106 return osso_application_top(context, myService.c_str(), 0) == OSSO_OK;