]> git.sur5r.net Git - i3/i3/commitdiff
skip ConfigureNotify events with --force_xinerama
authorMichael Stapelberg <michael@stapelberg.de>
Tue, 3 Oct 2017 08:00:55 +0000 (10:00 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Mon, 23 Oct 2017 19:04:20 +0000 (21:04 +0200)
This prevents an i3 crash under certain conditions when running the tests.

include/i3.h
src/handlers.c
src/main.c

index 4d13d448f1395fdd97e13e82a477178e28ee4ea0..93a7e0a34cf6ca5983fe41cf7298b369bd32d9fe 100644 (file)
@@ -74,3 +74,4 @@ extern bool xcursor_supported, xkb_supported;
 extern xcb_window_t root;
 extern struct ev_loop *main_loop;
 extern bool only_check_config;
+extern bool force_xinerama;
index 436fb2aba881f5b8f5e88d16cb6119e15fb479f0..0f81afae19a095233e4c568e0b8dff7667edeb8b 100644 (file)
@@ -1264,6 +1264,9 @@ static void handle_configure_notify(xcb_configure_notify_event_t *event) {
     }
     DLOG("ConfigureNotify for root window 0x%08x\n", event->event);
 
+    if (force_xinerama) {
+        return;
+    }
     randr_query_outputs();
 }
 
index 0d1457fdc1e18ca443fe652292f7343c9948b91f..3087f1114888ee93e07f137be92162b3e333542b 100644 (file)
@@ -92,6 +92,8 @@ struct ws_assignments_head ws_assignments = TAILQ_HEAD_INITIALIZER(ws_assignment
 bool xcursor_supported = true;
 bool xkb_supported = true;
 
+bool force_xinerama = false;
+
 /*
  * This callback is only a dummy, see xcb_prepare_cb and xcb_check_cb.
  * See also man libev(3): "ev_prepare" and "ev_check" - customise your event loop
@@ -197,7 +199,6 @@ int main(int argc, char *argv[]) {
     bool autostart = true;
     char *layout_path = NULL;
     bool delete_layout_path = false;
-    bool force_xinerama = false;
     bool disable_randr15 = false;
     char *fake_outputs = NULL;
     bool disable_signalhandler = false;
@@ -550,6 +551,10 @@ int main(int argc, char *argv[]) {
             config.ipc_socket_path = sstrdup(config.ipc_socket_path);
     }
 
+    if (config.force_xinerama) {
+        force_xinerama = true;
+    }
+
     xcb_void_cookie_t cookie;
     cookie = xcb_change_window_attributes_checked(conn, root, XCB_CW_EVENT_MASK, (uint32_t[]){ROOT_EVENT_MASK});
     xcb_generic_error_t *error = xcb_request_check(conn, cookie);
@@ -668,7 +673,7 @@ int main(int argc, char *argv[]) {
         fake_outputs_init(fake_outputs);
         FREE(fake_outputs);
         config.fake_outputs = NULL;
-    } else if (force_xinerama || config.force_xinerama) {
+    } else if (force_xinerama) {
         /* Force Xinerama (for drivers which don't support RandR yet, esp. the
          * nVidia binary graphics driver), when specified either in the config
          * file or on command-line */