Commit | Line | Data |
---|---|---|
02d6e78a TM |
1 | #include <stdlib.h> |
2 | #include <stdio.h> | |
3 | #include <getopt.h> | |
4 | #include <gtk/gtk.h> | |
5 | ||
27b92edd TM |
6 | #define ENV_PREFIX "XSOCK_" |
7 | ||
aa9f75db TM |
8 | int return_true(void) { return 1; } |
9 | ||
02d6e78a TM |
10 | void print_help(char ** argv) { |
11 | printf( | |
12 | "Usage: %s [args]\n" | |
13 | "Args:\n" | |
14 | "\t -c color\n" | |
15 | "\t -w width\n" | |
16 | "\t -h height\n" | |
27b92edd | 17 | //"\t -r reuse " ENV_PREFIX "* from environment\n" |
02d6e78a TM |
18 | "\t -? (display help)" |
19 | "\nExample: %s -c black -w 640 -h 480\n\n", | |
20 | argv[0], argv[0]); | |
21 | } | |
22 | ||
23 | gint main(gint argc, gchar ** argv) | |
24 | { | |
25 | gchar *colorstr = "black"; | |
26 | int width = 640; | |
27 | int height = 480; | |
28 | ||
29 | int opt; | |
30 | while ((opt = getopt(argc, argv, "?c:w:h:")) != -1) { | |
31 | switch (opt) { | |
32 | case 'c': | |
33 | colorstr = optarg; | |
34 | break; | |
35 | case 'w': | |
36 | width = atoi(optarg); | |
37 | break; | |
38 | case 'h': | |
39 | height = atoi(optarg); | |
40 | break; | |
27b92edd TM |
41 | case 'r': //Not yet |
42 | if(getenv(ENV_PREFIX"PID") | |
43 | && getenv(ENV_PREFIX"WID") | |
44 | && kill(atoi(getenv(ENV_PREFIX"PID")), 0) | |
45 | ) { | |
46 | puts("REUSABLE"); | |
47 | return 0; | |
48 | } | |
49 | break; | |
02d6e78a TM |
50 | case '?': |
51 | print_help(argv); | |
52 | return 0; | |
53 | break; | |
54 | } | |
55 | } | |
56 | ||
57 | //printf("%s\n", colorstr); return 0; | |
58 | ||
59 | gtk_init(&argc, &argv); | |
60 | ||
61 | //Colors | |
62 | GdkColor color; | |
63 | gdk_color_parse(colorstr, &color); | |
64 | ||
65 | //Create window | |
66 | GtkWidget *win = gtk_window_new(GTK_WINDOW_TOPLEVEL); | |
67 | GtkWidget *sock = gtk_socket_new(); | |
aa9f75db | 68 | g_signal_connect(sock, "plug-removed", G_CALLBACK(return_true), NULL); |
02d6e78a TM |
69 | g_signal_connect(win, "delete-event", gtk_main_quit, NULL); |
70 | gtk_widget_set_size_request(sock, width, height); | |
71 | gtk_widget_modify_bg(sock, GTK_STATE_NORMAL, &color); | |
72 | gtk_container_add(GTK_CONTAINER(win), sock); | |
73 | gtk_widget_show_all(win); | |
74 | ||
75 | //Print id | |
76 | GdkNativeWindow wid = gtk_socket_get_id(GTK_SOCKET(sock)); | |
77 | int pid; | |
78 | if ((pid = fork())) { | |
27b92edd | 79 | printf(ENV_PREFIX"WID=%d\n"ENV_PREFIX"PID=%d\n", wid, pid); |
02d6e78a TM |
80 | return 0; |
81 | } | |
82 | fclose(stdout); | |
83 | ||
84 | //Run | |
85 | gtk_main(); | |
86 | return 0; | |
87 | } |