aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am4
-rw-r--r--src/app-indicator.c53
-rw-r--r--src/app-indicator.h5
3 files changed, 60 insertions, 2 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 1c4e7ae..091f0f2 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -108,12 +108,12 @@ libappindicator_la_LDFLAGS = \
-export-symbols-regex "^[^_d].*"
libappindicator_la_CFLAGS = \
- $(INDICATOR_CFLAGS) \
+ $(LIBRARY_CFLAGS) \
-Wall -Werror \
-DG_LOG_DOMAIN=\"libappindicator\"
libappindicator_la_LIBADD = \
- $(INDICATOR_LIBS)
+ $(LIBRARY_LIBS)
##################################
# DBus Specs
diff --git a/src/app-indicator.c b/src/app-indicator.c
index 78d784a..318a056 100644
--- a/src/app-indicator.c
+++ b/src/app-indicator.c
@@ -38,6 +38,8 @@ License version 3 and version 2.1 along with this program. If not, see
#include <libdbusmenu-glib/server.h>
#include <libdbusmenu-gtk/client.h>
+#include <libindicator/indicator-desktop-shortcuts.h>
+
#include "app-indicator.h"
#include "app-indicator-enum-types.h"
#include "application-service-marshal.h"
@@ -2134,3 +2136,54 @@ app_indicator_get_ordering_index (AppIndicator *self)
}
}
+#define APP_INDICATOR_SHORTY_NICK "app-indicator-shorty-nick"
+
+/* Callback when an item from the desktop shortcuts gets
+ called. */
+static void
+shorty_activated_cb (DbusmenuMenuitem * mi, guint timestamp, gpointer user_data)
+{
+
+
+ return;
+}
+
+/**
+ app_indicator_build_menu_from_desktop:
+ @self: The #AppIndicator object to use
+ @desktop_file: A path to the desktop file to build the menu from
+
+ This function allows for building the Application Indicator menu
+ from a static desktop file.
+*/
+void
+app_indicator_build_menu_from_desktop (AppIndicator * self, const gchar * desktop_file, const gchar * desktop_profile)
+{
+
+ /* Build a new shortcuts object */
+ IndicatorDesktopShortcuts * shorties = indicator_desktop_shortcuts_new(desktop_file, desktop_profile);
+ g_return_if_fail(shorties != NULL);
+
+ const gchar ** nicks = indicator_desktop_shortcuts_get_nicks(shorties);
+ int nick_num;
+
+ /* Place the items on a dbusmenu */
+ DbusmenuMenuitem * root = dbusmenu_menuitem_new();
+
+ for (nick_num = 0; nicks[nick_num] != NULL; nick_num++) {
+ DbusmenuMenuitem * item = dbusmenu_menuitem_new();
+ g_object_set_data(G_OBJECT(item), APP_INDICATOR_SHORTY_NICK, (gpointer)nicks[nick_num]);
+
+ gchar * name = indicator_desktop_shortcuts_nick_get_name(shorties, nicks[nick_num]);
+ dbusmenu_menuitem_property_set(item, DBUSMENU_MENUITEM_PROP_LABEL, name);
+ g_free(name);
+
+ g_signal_connect(G_OBJECT(item), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(shorty_activated_cb), self);
+
+ dbusmenu_menuitem_child_append(root, item);
+ }
+
+ /* Swap it if needed */
+
+ return;
+}
diff --git a/src/app-indicator.h b/src/app-indicator.h
index ce152bb..3e159db 100644
--- a/src/app-indicator.h
+++ b/src/app-indicator.h
@@ -280,6 +280,11 @@ const gchar * app_indicator_get_label (AppIndicator *
const gchar * app_indicator_get_label_guide (AppIndicator *self);
guint32 app_indicator_get_ordering_index (AppIndicator *self);
+/* Helpers */
+void app_indicator_build_menu_from_desktop (AppIndicator * self,
+ const gchar * desktop_file,
+ const gchar * desktop_profile);
+
G_END_DECLS
/**