minor mkxsock improvements
[mirrors/Programs.git] / c / vizionix / mkxsock.c
CommitLineData
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
8int return_true(void) { return 1; }
9
02d6e78a
TM
10void 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
23gint 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}
This page took 0.174781 seconds and 4 git commands to generate.