c3d076bceed54be655439ceebed2373a6e420249
[mirrors/Programs.git] / c / vizionix / mkxsock.c
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <getopt.h>
4 #include <gtk/gtk.h>
5
6 #define ENV_PREFIX "XSOCK_"
7
8 int return_true(void) { return 1; }
9
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"
17 //"\t -r reuse " ENV_PREFIX "* from environment\n"
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;
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;
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();
68 g_signal_connect(sock, "plug-removed", G_CALLBACK(return_true), NULL);
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())) {
79 printf(ENV_PREFIX"WID=%d\n"ENV_PREFIX"PID=%d\n", wid, pid);
80 return 0;
81 }
82 fclose(stdout);
83
84 //Run
85 gtk_main();
86 return 0;
87 }
This page took 0.271648 seconds and 3 git commands to generate.