diff options
Diffstat (limited to 'backends/platform/maemo/hildon.cpp')
-rw-r--r-- | backends/platform/maemo/hildon.cpp | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/backends/platform/maemo/hildon.cpp b/backends/platform/maemo/hildon.cpp new file mode 100644 index 0000000000..1c9bd9162a --- /dev/null +++ b/backends/platform/maemo/hildon.cpp @@ -0,0 +1,134 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2006 The ScummVM project + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include <hildon-widgets/hildon-app.h> +#include <gtk/gtk.h> +#include <libosso.h> + +#define OSSO_APP_NAME "scummvm" +#define OSSO_APP_VERSION "0.9.0CVS" +#define OSSO_APP_SERVICE "org.scummvm."OSSO_APP_NAME +#define OSSO_APP_OBJECT "/org/scummvm/"OSSO_APP_NAME +#define OSSO_APP_IFACE "org.scummvm."OSSO_APP_NAME + +// Application UI data struct +typedef struct _AppData AppData; +struct _AppData { + HildonApp *app; + HildonAppView *appview; + osso_context_t *osso_context; +}; + +// Callback for exit D-BUS event +void exit_event_handler(gboolean die_now, gpointer data) { + AppData *appdata; + appdata = (AppData *)data; + g_print("exit_event_handler called\n"); + /* Do whatever application needs to do before exiting */ + gtk_infoprint(GTK_WINDOW(appdata->app), "Exiting..."); +} + +// Callback for normal D-BUS messages +gint dbus_req_handler(const gchar *interface, const gchar *method, + GArray *arguments, gpointer data, + osso_rpc_t *retval) { + AppData *appdata; + appdata = (AppData *)data; + osso_system_note_infoprint(appdata->osso_context, method, retval); + return OSSO_OK; +} + + +// Main application +int main(int argc, char *argv[]) { + // Create needed variables + HildonApp *app; + HildonAppView *appview; + osso_context_t *osso_context; + osso_return_t result; + GtkWidget *main_vbox; + GtkWidget *label; + + // Initialize the GTK. + gtk_init(&argc, &argv); + + // Initialize maemo application + osso_context = osso_initialize(OSSO_APP_NAME, OSSO_APP_VERSION, TRUE, NULL); + + // Check that initialization was ok + if (osso_context == NULL) { + return OSSO_ERROR; + } + + // Create the hildon application and setup the title + app = HILDON_APP(hildon_app_new()); + hildon_app_set_title(app, "ScummVM"); + hildon_app_set_two_part_title(app, TRUE); + + // Create HildonAppView and set it to HildonApp + appview = HILDON_APPVIEW(hildon_appview_new("AppView Title")); + hildon_app_set_appview(app, appview); + + // Create AppData + AppData *appdata; + appdata = g_new0(AppData, 1); + appdata->app = app; + appdata->appview = appview; + appdata->osso_context = osso_context; + + // Add vbox to appview + main_vbox = gtk_vbox_new(FALSE, 0); + gtk_container_add(GTK_CONTAINER(appview), main_vbox); + + // Add button to vbox + label = gtk_label_new("Waiting for DBUS message..."); + gtk_box_pack_start(GTK_BOX(main_vbox), label, FALSE, TRUE, 0); + + // Add handler for hello D-BUS messages + result = osso_rpc_set_cb_f(appdata->osso_context, + OSSO_APP_SERVICE, + OSSO_APP_OBJECT, + OSSO_APP_IFACE, + dbus_req_handler, appdata); + if (result != OSSO_OK) { + g_print("Error setting D-BUS callback (%d)\n", result); + return OSSO_ERROR; + } + + // Add handler for Exit D-BUS messages + result = osso_application_set_exit_cb(appdata->osso_context, + exit_event_handler, + (gpointer) appdata); + if (result != OSSO_OK) { + g_print("Error setting exit callback (%d)\n", result); + return OSSO_ERROR; + } + + // Begin the main application + gtk_widget_show_all(GTK_WIDGET(app)); + gtk_main(); + + // Deinitialize OSSO + osso_deinitialize(osso_context); + + return 0; +} |