From b66445670695f48f52988e2cc81d2ea7f03cf237 Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Fri, 6 Feb 2009 18:23:37 +0100 Subject: [PATCH] More code. --- data.h | 25 +++++++++++++++++++++++++ mainx.c | 17 +++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/data.h b/data.h index bddd201a..da2e5db9 100644 --- a/data.h +++ b/data.h @@ -3,7 +3,32 @@ * */ +/* + * Defines a position in the table + * + */ +typedef struct Cell { + int row; + int column; +} Cell; + +/* + * We need to save the height of a font because it is required for each drawing of + * text but relatively hard to get. As soon as a new font needs to be loaded, a + * Font-entry will be filled for later use. + * + */ typedef struct Font { char *name; int height; } Font; + +/* + * A client is X11-speak for a window. + * + */ +typedef struct Client { + /* TODO: this is NOT final */ + Cell old_position; /* if you set a client to floating and set it back to managed, + it does remember its old position and *tries* to get back there */ +} Client; diff --git a/mainx.c b/mainx.c index 74c87ff9..88d88394 100644 --- a/mainx.c +++ b/mainx.c @@ -440,6 +440,16 @@ static int handleEvent(void *ignored, xcb_connection_t *c, xcb_generic_event_t * { return format_event(e); } + +static int handle_key_press(void *ignored, xcb_connection_t *c, xcb_generic_event_t *e) +{ + xcb_key_press_event_t *event = e; + printf("oh yay!\n"); + printf("gots press %d\n", event->detail); + /* TODO: try to change the window border of all windows. */ + return format_event(e); +} + static void redrawWindow(xcb_connection_t *c, client_window_t *client) { printf("redrawing window.\n"); @@ -561,6 +571,8 @@ myfont.height = reply->font_ascent + reply->font_descent; int i; for(i = 2; i < 128; ++i) xcb_event_set_handler(&evenths, i, handleEvent, 0); + + xcb_event_set_handler(&evenths, XCB_KEY_PRESS, handle_key_press, 0); for(i = 0; i < 256; ++i) xcb_event_set_error_handler(&evenths, i, (xcb_generic_error_handler_t) handleEvent, 0); @@ -573,6 +585,8 @@ myfont.height = reply->font_ascent + reply->font_descent; xcb_property_handlers_init(&prophs, &evenths); xcb_event_set_map_notify_handler(&evenths, handle_map_notify_event, &prophs); + //xcb_grab_key (xcb_connection_t *c, uint8_t owner_events, xcb_window_t grab_window, uint16_t modifiers, xcb_keycode_t key, uint8_t pointer_mode, uint8_t keyboard_mode) + root = xcb_aux_get_screen(c, screens)->root; @@ -582,6 +596,9 @@ myfont.height = reply->font_ascent + reply->font_descent; xcb_change_window_attributes(c, root, mask, values); } + /* Grab 'a' */ + xcb_grab_key(c, 0, root, 0, 38, XCB_GRAB_MODE_SYNC, XCB_GRAB_MODE_ASYNC); + xcb_flush(c); manage_existing_windows(c, &prophs, root);