{"record":{"id":"e6f5475a338f4fe3","repo":"linebender/druid","slug":"no-present-opcode","errorCode":null,"errorMessage":"no present opcode","messagePattern":"no present opcode","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"druid-shell/src/backend/x11/window.rs","lineNumber":529,"sourceCode":"                EventMask::COMPLETE_NOTIFY | EventMask::IDLE_NOTIFY,\n            )?\n            .check()\n            .context(\"set present event mask\")?;\n\n            let region_id = conn.generate_id()?;\n            conn.xfixes_create_region(region_id, &[])\n                .context(\"create region\")?;\n\n            Ok(PresentData {\n                serial: 0,\n                region: region_id,\n                waiting_on: None,\n                needs_present: false,\n                last_msc: None,\n                last_ust: None,\n            })\n        } else {\n            Err(anyhow!(\"no present opcode\"))\n        }\n    }\n}\n\n/// An X11 window.\n//\n// We use lots of RefCells here, so to avoid panics we need some rules. The basic observation is\n// that there are two ways we can end up calling the code in this file:\n//\n// 1) it either comes from the system (e.g. through some X11 event), or\n// 2) from the client (e.g. druid, calling a method on its `WindowHandle`).\n//\n// Note that 2 only ever happens as a result of 1 (i.e., the system calls us, we call the client\n// using the `WinHandler`, and it calls us back). The rules are:\n//\n// a) We never call into the system as a result of 2. As a consequence, we never get 1\n//    re-entrantly.\n// b) We *almost* never call into the `WinHandler` while holding any of the other RefCells. There's","sourceCodeStart":511,"sourceCodeEnd":547,"githubUrl":"https://github.com/linebender/druid/blob/0f8b1195e4e073f9597f2865299c3d18f8e4005f/druid-shell/src/backend/x11/window.rs#L511-L547","documentation":"Error in initialize_present_data: the X server does not support the Present extension (no present opcode), so present-based frame timing (PRESENT Complete/Idle notify) cannot be initialized. It fires during window build on X servers without the Present extension; callers (build) treat this as a non-fatal signal to skip present data.","triggerScenarios":"Thrown at druid-shell/src/backend/x11/window.rs:529 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Fall back to a non-Present timing path (e.g. timer-driven animation) when the opcode is missing","Query the Present extension version and degrade gracefully if unsupported","Gate animation timing code on the presence of Present support"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"0f8b1195e4e073f9597f2865299c3d18f8e4005f","analyzedAt":"2026-09-10T14:27:34.582Z","contentChangedAt":"2026-09-10T14:27:34.582Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}