tCreate a window on screen - xmenu - drop-down menu for X11
(HTM) git clone git://git.z3bra.org/xmenu.git
(DIR) Log
(DIR) Files
(DIR) Refs
---
(DIR) commit 7ee5c0bf82d7491c1f62d381fcde373ec154d066
(DIR) parent 6aa884a39d72c6c64ccb4efdf2417c90df0fef72
(HTM) Author: Willy Goiffon <dev@z3bra.org>
Date: Fri, 8 Nov 2019 22:11:42 +0100
Create a window on screen
Diffstat:
M config.def.h | 7 +++++++
M xmenu.c | 40 +++++++++++++++++++++++++++++++
2 files changed, 47 insertions(+), 0 deletions(-)
---
(DIR) diff --git a/config.def.h b/config.def.h
t@@ -0,0 +1,7 @@
+/* widget size */
+int width = 320;
+int height = 480;
+
+/* widget colors, given as RGB hex values */
+uint32_t background = 0x666666;
+uint32_t foreground = 0xffffff;
(DIR) diff --git a/xmenu.c b/xmenu.c
t@@ -1,11 +1,18 @@
#include <stdio.h>
+#include <stdint.h>
#include <stdlib.h>
+#include <unistd.h>
#include <xcb/xcb.h>
#include "arg.h"
#include "config.h"
+int verbose = 0;
+xcb_connection_t *dpy;
+xcb_screen_t *screen;
+xcb_window_t wid;
+
void
usage(FILE *fd, char *name)
{
t@@ -15,17 +22,50 @@ usage(FILE *fd, char *name)
int
main(int argc, char *argv[])
{
+ int mask, val[4];
char *argv0;
+
ARGBEGIN {
case 'h':
usage(stdout, argv0);
return 0;
break;
+ case 'v':
+ verbose++;
+ break;
default:
usage(stderr, argv0);
return -1;
break;
} ARGEND;
+ dpy = xcb_connect(NULL, NULL);
+ if (xcb_connection_has_error(dpy))
+ return -1;
+
+ screen = xcb_setup_roots_iterator(xcb_get_setup(dpy)).data;
+ if (!screen)
+ return -1;
+
+ mask = XCB_CW_BACK_PIXEL
+ | XCB_CW_EVENT_MASK;
+
+ val[0] = background;
+ val[1] = XCB_EVENT_MASK_EXPOSURE
+ | XCB_EVENT_MASK_BUTTON_PRESS
+ | XCB_EVENT_MASK_BUTTON_RELEASE
+ | XCB_EVENT_MASK_BUTTON_MOTION;
+
+ wid = xcb_generate_id(dpy);
+ xcb_create_window(dpy, screen->root_depth, wid, screen->root,
+ 0, 0, width, height, 0, XCB_WINDOW_CLASS_INPUT_OUTPUT,
+ screen->root_visual, mask, val);
+
+ xcb_map_window(dpy, wid);
+ xcb_flush(dpy);
+
+ sleep(50);
+
+ xcb_disconnect(dpy);
return 0;
}