7 #include <hildon-home-plugin/hildon-home-plugin-interface.h>
10 #include "launcher-item.h"
13 void *hildon_home_applet_lib_initialize (void *state_data, int *state_size, GtkWidget **widget);
14 void hildon_home_applet_lib_deinitialize (void *applet_data);
15 void hildon_home_applet_lib_background (void *applet_data);
16 void hildon_home_applet_lib_foreground(void *applet_data);
17 int hildon_home_applet_lib_save_state(void *applet_data, void **state_data, int *state_size);
18 GtkWidget *hildon_home_applet_lib_settings(void *applet_data, GtkWindow *parent);
21 #define SLA_APPLET_DBUS_NAME "simple-launcher"
22 #define SLA_APPLET_VERSION "0.0"
24 class SimpleLauncherApplet {
26 SimpleLauncherApplet();
27 ~SimpleLauncherApplet();
29 bool doInit(void *state_data, int *state_size);
33 int saveState(void **state_data, int *state_size);
34 GtkWidget *settings(GtkWindow *parent);
36 GtkWidget *getWidget() { return myWidget; }
41 bool startApplication(const std::string& application);
44 osso_context_t *myContext;
47 std::vector<LauncherItem *> myItems;
49 static char *ourFiles[];
52 // Hildon home applet interface functions
54 void *hildon_home_applet_lib_initialize (void *state_data, int *state_size, GtkWidget **widget) {
55 SimpleLauncherApplet *applet = new SimpleLauncherApplet();
58 if (applet->doInit(state_data, state_size)) {
59 *widget = applet->getWidget();
69 void hildon_home_applet_lib_deinitialize(void *applet_data) {
70 SimpleLauncherApplet *applet = (SimpleLauncherApplet *)applet_data;
75 void hildon_home_applet_lib_background(void *applet_data) {
76 ((SimpleLauncherApplet *)applet_data)->background();
79 void hildon_home_applet_lib_foreground (void *applet_data) {
80 ((SimpleLauncherApplet *)applet_data)->foreground();
83 GtkWidget *hildon_home_applet_lib_settings(void *applet_data, GtkWindow *parent) {
84 return ((SimpleLauncherApplet *)applet_data)->settings(parent);
87 int hildon_home_applet_lib_save_state (void *applet_data, void **state_data, int *state_size) {
88 return ((SimpleLauncherApplet *)applet_data)->saveState(state_data, state_size);
91 // SimpleLauncherApplet implementation
93 char *SimpleLauncherApplet::ourFiles[] = {
97 SimpleLauncherApplet::SimpleLauncherApplet(): myContext(0), myWidget(0) {
100 bool SimpleLauncherApplet::doInit(void *state_data, int *state_size) {
101 if ((myContext = osso_initialize(SLA_APPLET_DBUS_NAME, SLA_APPLET_VERSION, FALSE, NULL)) == 0) {
102 g_debug("sla-applet: failed to initialize the osso layer");
110 for (int i = 0 ; ourFiles[i] != 0 ; ++i) {
111 LauncherItem *item = new LauncherItem();
113 if (item->load(ourFiles[i])) {
114 myItems.push_back(item);
120 // g_signal_connect (applet->myWidget, "do_search", G_CALLBACK (mis_applet_do_search), (gpointer)applet);
122 gtk_widget_show_all(myWidget);
127 SimpleLauncherApplet::~SimpleLauncherApplet() {
128 for (std::vector<LauncherItem *>::iterator it = myItems.begin(); it != myItems.end(); ++it) {
138 gtk_widget_destroy(myWidget);
142 if (myContext != 0) {
143 osso_deinitialize(myContext);
148 bool SimpleLauncherApplet::initWidget() {
152 int SimpleLauncherApplet::saveState(void **state_data, int *state_size) {
153 if (state_data != 0) {
157 if (state_size != 0) {
164 GtkWidget *SimpleLauncherApplet::settings(GtkWindow *parent) {
165 // TODO: in case we want SimpleLauncherApplet to be configurable, this method
166 // should return a gtk_menu_item that would be included in home settings
167 // menu. Method should make sure that when we activate that item, a
168 // corresponding dialog appears.
172 bool SimpleLauncherApplet::startApplication(const std::string& application) {
173 return osso_application_top(myContext, application.c_str(), 0) == OSSO_OK;