スライドショーで表示する時間が3秒固定だったりして色々アレであるが、一応スライドショーにはなるしこれで良いや( ̄ー ̄)ニヤリ
diff -uprN old/gpicview-0.2.0/src/main-win.c new/gpicview-0.2.0/src/main-win.c --- old/gpicview-0.2.0/src/main-win.c 2009-05-30 02:19:04.000000000 +0900 +++ new/gpicview-0.2.0/src/main-win.c 2009-07-06 21:12:25.000000000 +0900 @@ -98,6 +98,21 @@ void on_flip_horizontal( GtkWidget* btn, static int trans_angle_to_id(int i); static int get_new_angle( int orig_angle, int rotate_angle ); +// for slide show +static gboolean is_slide_show = FALSE; +static gint slide_show_tag = -1; + +struct slide_show_data_ { + GtkWidget *btn; + MainWin *mw; +} slide_show_data; + +static void set_slide_show_timeout(gpointer data); +static gint slide_show_callback(gpointer data); +static void on_slide_show(GtkWidget *btn, MainWin *mw); +static void slide_show_start(GtkWidget *btn, MainWin *mw); +static void slide_show_stop(GtkWidget *btn, MainWin *mw); + // Begin of GObject-related stuff G_DEFINE_TYPE( MainWin, main_win, GTK_TYPE_WINDOW ) @@ -1329,6 +1344,7 @@ void show_popup_menu( MainWin* mw, GdkEv PTK_SEPARATOR_MENU_ITEM, PTK_IMG_MENU_ITEM( N_("Preferences"), GTK_STOCK_PREFERENCES, G_CALLBACK(on_preference), GDK_P, 0 ), PTK_STOCK_MENU_ITEM( GTK_STOCK_ABOUT, on_about ), + PTK_IMG_MENU_ITEM( N_("SlideShow"), GTK_STOCK_QUIT, G_CALLBACK(on_slide_show), GDK_V, 0 ), PTK_SEPARATOR_MENU_ITEM, PTK_IMG_MENU_ITEM( N_("Quit"), GTK_STOCK_QUIT, G_CALLBACK(on_quit), GDK_Q, 0 ), PTK_MENU_END @@ -1444,3 +1460,49 @@ void on_drag_data_received( GtkWidget* w g_free( file ); } } + +void on_slide_show(GtkWidget *btn, MainWin *mw) +{ + slide_show_start(btn, mw); +} + +void slide_show_start(GtkWidget *btn, MainWin *mw) +{ + // if slide show has been working, slide show is going to stop + if (is_slide_show) { + slide_show_stop(btn, mw); + return ; + } + + g_print("slide show start\n"); + + slide_show_data.btn = btn; + slide_show_data.mw = mw; + + is_slide_show = TRUE; + set_slide_show_timeout((gpointer) &slide_show_data); +} + +void slide_show_stop(GtkWidget *btn, MainWin *mw) +{ + g_print("slide show stop\n"); + + is_slide_show = FALSE; + gtk_timeout_remove(slide_show_tag); + slide_show_tag = -1; +} + +gint slide_show_callback(gpointer data) +{ + struct slide_show_data_ *tmp = (struct slide_show_data_ *) data; + + on_next(tmp->btn, tmp->mw); + set_slide_show_timeout(data); + + return 0; +} + +void set_slide_show_timeout(gpointer data) +{ + slide_show_tag = gtk_timeout_add(3000, &slide_show_callback, data); +}