A Slideshow Screensaver Using C, Gtk+ & Gdk


 
Thread Tools Search this Thread
Top Forums Programming A Slideshow Screensaver Using C, Gtk+ & Gdk
# 1  
Old 07-23-2005
A Slideshow Screensaver Using C, Gtk+ & Gdk

Yes, I know I am re-inventing the wheel, but I thought this would be an interesting exercise for teaching myself C under Ubuntu Linux and Gnome.

I want a black background against which the .jpg images will be shown. I also want the screensaver to respond to keyboard events so that it can do various things depending on which key is pressed.

The only way I have discovered of getting a completely black background is with a GTK_WINDOW_POPUP, which is displayed independently of the window manager and so hides the Gnome top & bottom panels.

I then use a GTK_WINDOW_TOPLEVEL with gtk_window_set_decorated = FALSE to display the images without borders.

This second window sucessfully receives keyboard events ... but is unfortunately invisible, presumably because the window manager displays it under the black GTK_WINDOW_POPUP. I have tried various things to get the desired result, but without success.

Can anyone suggest a method of achieving my aim? I would prefer to work at the GTK / GDK levels rather than at the Xwindow level.

Code follows:

Code:
/* Declare widgets etc.
-----------------------*/

/* black background window */
GtkWindow *window_bg;
GdkPixbuf *pixbuf_bg;
GtkWidget *picture_bg;

/* image display window */
GtkWindow *window;
GdkPixbuf *pixbuf;
GtkWidget *picture;


int main(int argc, char **argv)
{
/* Initialise GTK+ */ gtk_init(&argc, &argv); /* ***** Create & display black background *******/ window_bg = GTK_WINDOW(gtk_window_new(GTK_WINDOW_POPUP)); pixbuf_bg = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, 1280, 1024); /* default black pixbuf */ picture_bg=gtk_image_new_from_pixbuf(pixbuf_bg); gtk_container_add(GTK_CONTAINER(window_bg), GTK_WIDGET(picture_bg)); gtk_widget_show_all(GTK_WIDGET(window_bg)); /* ***** Create photo display ******/ window = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL)); pixbuf = gdk_pixbuf_new_from_file_at_scale("test.jpg", 1280, 1024, TRUE, NULL); picture=gtk_image_new_from_pixbuf(pixbuf); /* signal handlers would be here */ /* pack the image into the window & display */ gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(picture)); gtk_widget_show_all(GTK_WIDGET(window)); /* Set window to have no border etc. */ gtk_window_set_decorated(window, FALSE); /* Start main event loop */ gtk_main(); return 0;
}

Thanks,

Kevin
# 2  
Old 08-21-2008
Bug gtk_window_fullscreen()

This reply is probably too late for Kevin. But when I was trying to solve the same problem, I kept finding this forum post in Google. Later, I found the answer. So my hope is that by putting the answer here, it'll be easier to find for me or others in the future who are searching on "gtk" and "screensaver".

The short answer is gtk_window_fullscreen(). I tried it in Windows XP (actually, in gtkmm, the Gdk::Window::fullscreen() method). Worked perfectly.

The documentation doesn't say that it avoids window decorations (title bar etc.), but it did for me. Didn't show the taskbar either. Looks like I have total screen control, which is what I want for a screensaver.

Apparently it works in Linux too, at least in KDE.

HTH,
Lars
Login or Register to Ask a Question

Previous Thread | Next Thread

4 More Discussions You Might Find Interesting

1. UNIX and Linux Applications

Slideshow with ffmpeg converter

Hi, everyone! I'm on a Debian 9.0 GNU/Linux machine. I'm not a very experienced user, but I do my best to learn. So, I have a bunch of images PNG files. I'm trying to make a slideshow with these using the ffmpeg video converter. I also have an audio WAVE stereo file which I'd like to merge... (0 Replies)
Discussion started by: worov
0 Replies

2. UNIX for Dummies Questions & Answers

ScreenSaver into Background Question

(Keeping in mind I know very little about Unix...) When I am typing this out (without copy-pasting the whole thing) to get my screensaver onto my background: /System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine -background I... (3 Replies)
Discussion started by: wat_up_m
3 Replies

3. Solaris

ScreenSaver issue with Solaris 10

I have a Dell Vostro running Solaris 10 x86 and I am trying to get it to activate the screensaver when no one is logged it. However, the screensaver only seems to activate when someone logs in and then the computer locks. How would I go about fixing this problem? Any help yall can offer would be... (3 Replies)
Discussion started by: MajorJRO
3 Replies

4. UNIX for Dummies Questions & Answers

Screensaver and 'fortune'

(SuSE Linux 8.2 Personal) I'm sure the answer to this will be simple, but it's been driving me insane for the last couple days. SuSE 8.2 comes with a bunch of screensavers, but a handful of them just repeatedly display 'sh: line 1: fortune: command not found'. I've been scouring endlessly... (4 Replies)
Discussion started by: Darkstripes
4 Replies
Login or Register to Ask a Question