X-Git-Url: http://git.maemo.org/git/?p=shermanaquarium;a=blobdiff_plain;f=sherman-aquarium%2Fshermans%2Fscreensaver.c;h=2e808124510af64bdfb895d8363bc4d187ac1c27;hp=8f1f57f99b6a5ba5d340940380cf8fb3ad2d23be;hb=b44079dea4687f1f6e1d555b3052c07b056f506a;hpb=882cf8ed52d7dffe3c026d8b6dd4023079d97de3 diff --git a/sherman-aquarium/shermans/screensaver.c b/sherman-aquarium/shermans/screensaver.c index 8f1f57f..2e80812 100644 --- a/sherman-aquarium/shermans/screensaver.c +++ b/sherman-aquarium/shermans/screensaver.c @@ -57,6 +57,13 @@ typedef struct { #include "soundeffects.h" #include "vroot.h" + +/* For Maemo */ + +#include +#include +#include + #ifdef DARWIN #include "getopt.h" #else @@ -138,7 +145,10 @@ int view = 1; static unsigned char *original_bg; static AquariumData ad; - +/* For Maemo */ +static osso_context_t *osso; +DBusConnection *dbus_conn_session; +static int pause_in_view = 0; void screensaver_draw_image(int x, int y, int idx, int rev, SA_Image *image) { @@ -422,6 +432,7 @@ void screensaver_main_gdk(void) { GdkEvent *event; int counter = 0; + DBusMessage* msg; while(1){ while(gdk_events_pending()){ @@ -444,8 +455,31 @@ void screensaver_main_gdk(void) gdk_draw_rgb_image(window, gc, ad.xmin, ad.ymin, ad.xmax, ad.ymax, GDK_RGB_DITHER_NONE, ad.rgb, ad.xmax * 3); gdk_flush(); + /* 25 fps */ usleep(1000000/25); + + if (pause_in_view == 0) + /* non blocking read of the next available message */ + dbus_connection_read_write(dbus_conn_session, 0); + else + /* blocking read of the next available message */ + dbus_connection_read_write(dbus_conn_session, 20000); + + msg = dbus_connection_pop_message(dbus_conn_session); + + if (NULL == msg){ + continue; + } + if ( dbus_message_get_member (msg) && + !strncmp( "play_livebg_on_view", dbus_message_get_member (msg),19)){ + pause_in_view = 0; + } + if ( dbus_message_get_member (msg) && + !strncmp( "pause_livebg_on_view", dbus_message_get_member (msg),19)){ + pause_in_view = 1; + } + } } @@ -497,6 +531,33 @@ void init_sdl(int sdl_flags) SDL_UpdateRect(screen,0,0,0,0); } +void +initialize_dbus(void){ + gchar *filter_string; + DBusError error; + + dbus_error_init (&error); + /* Add D-BUS signal handler for 'status_changed' */ + dbus_conn_session = (DBusConnection *) osso_get_dbus_connection(osso); + if (dbus_conn_session){ + filter_string = + g_strdup_printf("interface='org.maemo.livewp', member='pause_livebg_on_view%i'", view); + dbus_bus_add_match(dbus_conn_session, filter_string, &error); + if (dbus_error_is_set(&error)){ + fprintf(stderr,"dbus_bus_add_match failed: %s", error.message); + dbus_error_free(&error); + } + g_free(filter_string); + filter_string = + g_strdup_printf("interface='org.maemo.livewp', member='play_livebg_on_view%i'", view); + dbus_bus_add_match(dbus_conn_session, filter_string, &error); + if (dbus_error_is_set(&error)){ + fprintf(stderr,"dbus_bus_add_match failed: %s", error.message); + dbus_error_free(&error); + } + g_free(filter_string); + } +} void screensaver_init() @@ -511,6 +572,9 @@ void screensaver_init() screen_height = 480; screen_width = 800; + osso = osso_initialize("org.maemo.sherman", "3.0", TRUE, NULL); + initialize_dbus(); + if(window_id != -1){ display = XOpenDisplay(NULL); XGetWindowAttributes(display, (Window)window_id, &win_attr); @@ -907,6 +971,7 @@ fprintf(stderr, "1BG %i\n",bg->desktop); } + int main(int argc, char **argv) { gdk_init(&argc, &argv);