From 04eaf74dc982120cdf34cd17eece780dea8d6034 Mon Sep 17 00:00:00 2001 From: wellu Date: Tue, 30 Sep 2008 14:29:06 +0000 Subject: [PATCH] fixes git-svn-id: file:///svnroot/speedometer/trunk@39 df364472-da61-43ef-8a67-511c89aa921b --- Makefile | 4 ++-- appdata.h | 6 +++--- callbacks.c | 1 - main.c | 49 +++++++++++++++++++++++++++++++++++++------------ ui.c | 38 ++++++++++++++++++++++---------------- ui.h | 2 +- 6 files changed, 65 insertions(+), 35 deletions(-) diff --git a/Makefile b/Makefile index 5d7214d..dbdf2dc 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ -PKGS = gtk+-2.0 liblocation gconf-2.0 +PKGS = gtk+-2.0 liblocation gconf-2.0 libosso CC = gcc LINK = gcc -CFLAGS = -g -Wall -pedantic -std=gnu99 +CFLAGS = -g -Wall -O0 -pedantic -std=gnu99 INCPATH = `pkg-config --cflags $(PKGS)` LIBS = `pkg-config --libs $(PKGS)` diff --git a/appdata.h b/appdata.h index 45184d5..4cbf34c 100644 --- a/appdata.h +++ b/appdata.h @@ -19,6 +19,7 @@ #ifndef APPDATA_H_ #define APPDATA_H_ +#include #include #include @@ -26,11 +27,10 @@ typedef struct _AppData { HildonProgram *program; HildonWindow *window; - GtkWidget* graphix[10]; // contains all the graphics - GtkWidget* big_digits[3]; // big digits that are shown as speed - GtkWidget* small_digits[2]; // small digits that are shown on the screen guint unit; // unit used in conversion + osso_context_t* osso_ctx; // libosso + } AppData; #endif /* APPDATA_H_ */ diff --git a/callbacks.c b/callbacks.c index 0a245fe..f8e29ff 100644 --- a/callbacks.c +++ b/callbacks.c @@ -86,7 +86,6 @@ gboolean top_event_box_button_press(GtkWidget* widget, GdkEventButton* event, gp if(x > 750) { g_print("Exiting..\n"); - stop_gps(appdata); g_signal_emit_by_name(appdata->window, "delete_event"); } return TRUE; diff --git a/main.c b/main.c index 782db74..3bd45f4 100644 --- a/main.c +++ b/main.c @@ -20,46 +20,71 @@ #include #include #include +#include #include "callbacks.h" #include "appdata.h" #include "ui.h" #include "util.h" -int main(int argc, char** argv) { +#define PROGNAME "org.wellu.speedometer" - AppData *appdata = g_new0(AppData, 1); +static AppData *appdata; - gtk_init(&argc, &argv); +/* Requests delay from screen blanking + * Should be called at least once in every 60 seconds + * we're not bothered about errors here as dbus calls + * either succeed or not. Worst case would be dimmed + * screen anyway. + */ +static gboolean delay_display_blanking(gpointer data) { + g_print("Requesting not to blank the screen in the next 60 secs.\n"); + osso_display_blanking_pause(data); + return TRUE; +} +void init_app() { + appdata = g_new0(AppData, 1); appdata->program = HILDON_PROGRAM(hildon_program_get_instance()); appdata->window = HILDON_WINDOW(hildon_window_new()); hildon_program_add_window(appdata->program, appdata->window); + appdata->osso_ctx = osso_initialize(PROGNAME, "1.0", FALSE, NULL); + + delay_display_blanking(appdata->osso_ctx); + g_timeout_add(55000, (GSourceFunc) delay_display_blanking, appdata->osso_ctx); +} + +void deinit_app() { + osso_deinitialize(appdata->osso_ctx); + stop_gps(appdata); +} + +int main(int argc, char** argv) { + gtk_init(&argc, &argv); + + init_app(); + // loads images from the disk to the image array load_graphix(appdata); // set display to 000 - load_initial_pixbufs(appdata); + set_digits_to_zero(appdata); - // create ui structure + // inits the ui placement create_ui(appdata); - // set the window fullscreen - gtk_window_fullscreen(GTK_WINDOW(appdata->window)); - - gtk_widget_show_all(GTK_WIDGET(appdata->window)); - g_thread_init(NULL); show_cardware_dialog(); - //g_idle_add(randomize, appdata); - start_gps(appdata); gtk_main(); + // here we cleanup things + deinit_app(); + return EXIT_SUCCESS; } diff --git a/ui.c b/ui.c index ca760f8..aec5446 100644 --- a/ui.c +++ b/ui.c @@ -22,6 +22,10 @@ #include "ui.h" #include "callbacks.h" +static GtkWidget* graphix[10]; // contains all the graphics +static GtkWidget* big_digits[3]; // big digits that are shown as speed +static GtkWidget* small_digits[2]; // small digits that are shown on the screen + #define IMAGE_PATH "/usr/share/speedometer/%d.png" static void set_widget_bg_black(GtkWidget* widget) { @@ -40,7 +44,7 @@ void load_graphix(AppData *appdata) { while(i < 10) { char* path = g_malloc(30); g_sprintf(path, IMAGE_PATH, i); - appdata->graphix[i] = gtk_image_new_from_file(path); + graphix[i] = gtk_image_new_from_file(path); g_print(path); g_print("\n"); g_free(path); @@ -48,31 +52,31 @@ void load_graphix(AppData *appdata) { } } -void load_initial_pixbufs(AppData* appdata) { +void set_digits_to_zero(AppData* appdata) { g_assert(appdata); - GdkPixbuf* zero = gtk_image_get_pixbuf(GTK_IMAGE(appdata->graphix[0])); + GdkPixbuf* zero = gtk_image_get_pixbuf(GTK_IMAGE(graphix[0])); - appdata->big_digits[0] = GTK_WIDGET(gtk_image_new_from_pixbuf(zero)); - appdata->big_digits[1] = GTK_WIDGET(gtk_image_new_from_pixbuf(zero)); - appdata->big_digits[2] = GTK_WIDGET(gtk_image_new_from_pixbuf(zero)); + big_digits[0] = GTK_WIDGET(gtk_image_new_from_pixbuf(zero)); + big_digits[1] = GTK_WIDGET(gtk_image_new_from_pixbuf(zero)); + big_digits[2] = GTK_WIDGET(gtk_image_new_from_pixbuf(zero)); } void set_nth_digit(AppData* appdata, guint n, guint value) { - g_assert(appdata); + g_assert(value < 10); g_assert(n < 3); - GtkWidget* image = appdata->big_digits[n]; - GdkPixbuf* buf = gtk_image_get_pixbuf(GTK_IMAGE(appdata->graphix[value])); + GtkWidget* image = big_digits[n]; + GdkPixbuf* buf = gtk_image_get_pixbuf(GTK_IMAGE(graphix[value])); gtk_image_set_from_pixbuf(GTK_IMAGE(image), buf); } void repaint_all_digits(AppData* appdata) { - g_assert(appdata); - gtk_widget_queue_draw(GTK_WIDGET(appdata->big_digits[0])); - gtk_widget_queue_draw(GTK_WIDGET(appdata->big_digits[1])); - gtk_widget_queue_draw(GTK_WIDGET(appdata->big_digits[2])); + + gtk_widget_queue_draw(GTK_WIDGET(big_digits[0])); + gtk_widget_queue_draw(GTK_WIDGET(big_digits[1])); + gtk_widget_queue_draw(GTK_WIDGET(big_digits[2])); } void create_ui(AppData* appdata) { @@ -110,9 +114,9 @@ void create_ui(AppData* appdata) { appdata->window); // add three digits to the hbox - gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(appdata->big_digits[0]), FALSE, FALSE, 0); - gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(appdata->big_digits[1]), FALSE, FALSE, 0); - gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(appdata->big_digits[2]), FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(big_digits[0]), FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(big_digits[1]), FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(big_digits[2]), FALSE, FALSE, 0); gtk_box_pack_start_defaults(GTK_BOX(vbox), top_e); // add event box on top gtk_box_pack_start_defaults(GTK_BOX(vbox), hbox); // numbers to the middle @@ -125,5 +129,7 @@ void create_ui(AppData* appdata) { set_widget_bg_black(bottom_e); set_widget_bg_black(top_e); + gtk_window_fullscreen(GTK_WINDOW(appdata->window)); + gtk_widget_show_all(GTK_WIDGET(appdata->window)); } diff --git a/ui.h b/ui.h index 9d9fbcb..9997de0 100644 --- a/ui.h +++ b/ui.h @@ -23,7 +23,7 @@ void load_graphix(AppData *appdata); -void load_initial_pixbufs(AppData* appdata); +void set_digits_to_zero(AppData* appdata); void set_nth_digit(AppData* appdata, guint n, guint value); -- 1.7.9.5