]> git.sur5r.net Git - i3/i3/commitdiff
randr: use effective CRTC width/height, not its mode (Thanks moemoe)
authorMichael Stapelberg <michael@stapelberg.de>
Wed, 17 Mar 2010 14:56:26 +0000 (15:56 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Wed, 17 Mar 2010 14:56:26 +0000 (15:56 +0100)
This fixes setups which use panning and cloning.

src/randr.c

index 9ef45fd0fe734c7be6fcef56b20fe2564f5ae6ef..d88fb9c251d5408e565853ae93a0b1e95ca10793 100644 (file)
@@ -215,24 +215,6 @@ void disable_randr(xcb_connection_t *conn) {
         randr_disabled = true;
 }
 
-/*
- * Searches for a mode in the current RandR configuration by the mode id.
- * Returns NULL if no such mode could be found (should never happen).
- *
- */
-static mode_info *get_mode_by_id(resources_reply *reply, xcb_randr_mode_t mode) {
-        xcb_randr_mode_info_iterator_t it;
-
-        for (it = xcb_randr_get_screen_resources_current_modes_iterator(reply);
-                it.rem > 0;
-                xcb_randr_mode_info_next(&it)) {
-                if (it.data->id == mode)
-                        return it.data;
-        }
-
-        return NULL;
-}
-
 /*
  * This function needs to be called when changing the mode of an output when
  * it already has some workspaces (or a bar window) assigned.
@@ -296,10 +278,6 @@ static void handle_output(xcb_connection_t *conn, xcb_randr_output_t id,
         /* each CRT controller has a position in which we are interested in */
         crtc_info *crtc;
 
-        /* the CRTC runs in a specific mode, while the position is stored in
-         * the output itself */
-        mode_info *mode;
-
         Output *new = get_output_by_id(id);
         bool existing = (new != NULL);
         if (!existing)
@@ -327,10 +305,9 @@ static void handle_output(xcb_connection_t *conn, xcb_randr_output_t id,
 
         xcb_randr_get_crtc_info_cookie_t icookie;
         icookie = xcb_randr_get_crtc_info(conn, output->crtc, cts);
-        if ((crtc = xcb_randr_get_crtc_info_reply(conn, icookie, NULL)) == NULL ||
-            (mode = get_mode_by_id(res, crtc->mode)) == NULL) {
-                DLOG("Skipping output %s: could not get CRTC/mode (%p/%p)\n",
-                     new->name, crtc, mode);
+        if ((crtc = xcb_randr_get_crtc_info_reply(conn, icookie, NULL)) == NULL) {
+                DLOG("Skipping output %s: could not get CRTC (%p)\n",
+                     new->name, crtc);
                 free(new);
                 free(output);
                 return;
@@ -339,8 +316,8 @@ static void handle_output(xcb_connection_t *conn, xcb_randr_output_t id,
         new->active = true;
         bool updated = update_if_necessary(&(new->rect.x), crtc->x) |
                        update_if_necessary(&(new->rect.y), crtc->y) |
-                       update_if_necessary(&(new->rect.width), mode->width) |
-                       update_if_necessary(&(new->rect.height), mode->height);
+                       update_if_necessary(&(new->rect.width), crtc->width) |
+                       update_if_necessary(&(new->rect.height), crtc->height);
 
         DLOG("mode: %dx%d+%d+%d\n", new->rect.width, new->rect.height,
                                     new->rect.x, new->rect.y);