]> git.sur5r.net Git - i3/i3/commitdiff
More code.
authorMichael Stapelberg <michael+git@stapelberg.de>
Fri, 6 Feb 2009 17:23:37 +0000 (18:23 +0100)
committerMichael Stapelberg <michael+git@stapelberg.de>
Fri, 6 Feb 2009 17:23:37 +0000 (18:23 +0100)
data.h
mainx.c

diff --git a/data.h b/data.h
index bddd201a2cb3ab470140f6631688052338bbbb63..da2e5db93982a320f560077da6ad7bf143cdd964 100644 (file)
--- 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 74c87ff9d5794abdd959d858f72fb43192ca865c..88d883946d0bf05027a9d32c4a7217df82ba5758 100644 (file)
--- 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);