diff options
Diffstat (limited to 'fb/fbmenu.c')
-rw-r--r-- | fb/fbmenu.c | 192 |
1 files changed, 0 insertions, 192 deletions
diff --git a/fb/fbmenu.c b/fb/fbmenu.c deleted file mode 100644 index 7773da1..0000000 --- a/fb/fbmenu.c +++ /dev/null @@ -1,192 +0,0 @@ -#include <gtk/gtk.h> -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <signal.h> -#include <fcntl.h> - -#include <string.h> -#include <fcntl.h> -#include <errno.h> -#include <getopt.h> -#include <sys/ioctl.h> -#include <linux/fb.h> - -static int fb; -struct fb_var_screeninfo fb_var; -static GtkWidget *window = NULL; -char *deflt; - -void usage() { - printf("\nUsage:\n\n\tfbmenu <timeout in second> <menu title> <menu entry 1> <menu entry 2> ... <menu entry n>\n\n"); - exit(1); -} - - -void message_dialog_clicked (GtkButton *button, gpointer user_data) -{ - g_signal_connect (window, "destroy", G_CALLBACK (gtk_widget_destroyed), &window); - gtk_widget_destroy (window); - printf("\nRESULT=\"%s\"\n", (char *) user_data); - exit(0); -} - -static GtkWidget * -create_bbox (gint horizontal, - char *title, - gint spacing, - gint layout, - int argc, - char **argv) -{ - GtkWidget *frame; - GtkWidget *bbox; - GtkWidget *button; - int i; - - frame = gtk_frame_new (title); - - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_NONE); - if (horizontal) - bbox = gtk_hbutton_box_new (); - else - bbox = gtk_vbutton_box_new (); - - gtk_container_set_border_width (GTK_CONTAINER (bbox), 5); - gtk_container_add (GTK_CONTAINER (frame), bbox); - - gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), layout); - gtk_box_set_spacing (GTK_BOX (bbox), spacing); - - for (i = 0; i < argc; i++) { - button = gtk_button_new_with_mnemonic (argv[i]); - g_signal_connect (button, "clicked", G_CALLBACK (message_dialog_clicked), argv[i]); - gtk_container_add (GTK_CONTAINER (bbox), button); - } - return frame; -} - -GtkWidget * -do_button_box (GtkWidget *do_widget, int argc, char** argv) -{ - static GtkWidget *window = NULL; - GtkWidget *main_vbox; - GtkWidget *eventbox; - GtkWidget *hbox; - int x,y; - - if (!window) - { - if (-1 == ioctl(fb,FBIOGET_VSCREENINFO,&fb_var)) { - x = 800; - y = 600; - } else { - x = fb_var.xres; - y = fb_var.yres; - } - - - window = gtk_window_new (GTK_WINDOW_POPUP); - gtk_window_set_screen (GTK_WINDOW (window), - gtk_widget_get_screen (do_widget)); - gtk_window_set_title (GTK_WINDOW (window), argv[0]); - gtk_window_resize(GTK_WINDOW(window), x, y); - - //gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); - g_signal_connect (window, "destroy", - G_CALLBACK (gtk_widget_destroyed), - &window); - - gtk_container_set_border_width (GTK_CONTAINER (window), 10); - - main_vbox = gtk_vbox_new (FALSE, 0); - gtk_container_add (GTK_CONTAINER (window), main_vbox); - - hbox = gtk_hbox_new (FALSE, 0); - gtk_container_set_border_width (GTK_CONTAINER (hbox), 10); - gtk_box_pack_start (GTK_BOX (main_vbox), - hbox, - TRUE, FALSE, 5); - eventbox = gtk_event_box_new (); - gtk_event_box_set_visible_window (GTK_EVENT_BOX (eventbox), TRUE); - gtk_box_pack_start (GTK_BOX (hbox), eventbox, TRUE, FALSE, 5); - gtk_container_add (GTK_CONTAINER (eventbox), create_bbox (FALSE, argv[0], 30, GTK_BUTTONBOX_START, argc - 1, argv + 1)); - } - - if (!GTK_WIDGET_VISIBLE (window)) - { - gtk_widget_show_all (window); - } - else - { - gtk_widget_destroy (window); - window = NULL; - } - - return window; -} - -void return_default(int x) { - printf("\nRESULT=\"%s\"\n", deflt); - exit(0); -} - -int filter_argv (int argc, char **argv, char **nargv) { - int i, j=0, k, done; - for (i = 0; i < argc; i++) { - done = 0; - for (k = 0; k < j; k++) { - if (!strcmp(argv[i], nargv[k])) { - done = 1; - } - } - if (done) continue; - nargv[j++] = argv[i]; - } - return j; -} - -int main(int argc, char **argv) { - int i; - int shift = 2; - int title = 2; - int nargc; - char *nargv[argc]; - - if (argc < 4) { - usage(); - } - if (argc == 4) { - printf("\nRESULT=\"%s\"\n", argv[3]); - exit(0); - } - deflt = argv[3]; - nargv[0] = argv[2]; - nargc = filter_argv(argc - shift - 1, argv + shift + 1, nargv + 1); - if (nargc == 1) { - printf("\nRESULT=\"%s\"\n", nargv[0]); - exit(0); - } - - fb = open("/dev/fb0", O_RDWR); - if (fb == -1) { - signal(SIGALRM, return_default); - alarm(atoi(argv[1])); - do { - fprintf(stderr,"\n"); - for (i = 1; i <= nargc; i++) { - fprintf(stderr,"%d - %s\n", i, nargv[i]); - } - fprintf(stderr,"\n%s: ", argv[title]); - if (!scanf("%d", &i)) scanf("%*s"); - } while (i < 1 || i > nargc); - printf("\nRESULT=\"%s\"\n", nargv[i]); - } else { - gtk_init (&argc, &argv); - do_button_box(window, nargc + 1, nargv); - g_timeout_add(atoi(argv[1]) * 1000, (GSourceFunc) return_default, NULL); - gtk_main (); - } - return 0; -} - |