Daily updates from Odoo
Wednesday, October 15, 2025
40 changes
6 changes
Enhancements to existing features
Opening the analytic distribution popup on invoice lines with many accounts now avoids unnecessary repeated data requests. This makes the popup load more smoothly and reduces waiting time for users working with complex analytic allocations.
Original PR description
Currently opening the analytic distrubtion popup on an invoice line creates N network requests per account set on the line. Steps to reproduce ----- 1. Edit the analytic distribution on an invoice line and add a lot of accounts 2. Open the popup again 3. A lot of web_read requests are made Issue ----- The display_name for the account and currency is not being passed to the field values in recordProps(), resulting in another fetch when each Field element is rendered. Solution ----- Pass account.accountDisplayName. The display name for the currency is actually not initially loaded by the client, but since that field is invisible, we can safely use an empty string. opw-5106219 Forward-Port-Of: odoo/odoo#231342
A new automated test was added to verify a specific India tax calculation scenario where two similarly configured included taxes should produce equal amounts. This helps reduce the risk of future accounting calculation regressions without changing user-facing behavior.
Original PR description
Added a missing test case in India tax computation, where both taxes have the same configuration as below: - amount: same for both taxes - price_include: True - include_base_amount: True - is_base_affected: False In this case, both tax amounts should be equal. This commit ensures that scenario is properly covered in the test suite. Forward-Port-Of: odoo/odoo#231364
This update prepares Belgian POS blackbox communication for a future queue mechanism by adding a required IoT action and prompting users to update their IoT setup. It helps ensure POS installations are ready for the next improvement that will make blackbox communication more reliable.
Original PR description
This commit is the first of two which will introduce a queue mechanism in the communication between the POS and the blackbox. This commit adds an action to the iot and invites users to update their iot to be prepared for the next commit which will effectively add the queue mechanism and use the new action. Second part: https://github.com/odoo/enterprise/pull/90747 Forward-Port-Of: odoo/enterprise#96639
This update prepares Point of Sale IoT device communication for upcoming Chrome browser restrictions on local network access. It ensures Odoo can continue connecting to local IoT devices that use the odoo-iot domain, reducing the risk of disrupted POS hardware operations.
Original PR description
Enterprise PR: https://github.com/odoo/enterprise/pull/96850 Local Network Access restrictions will start shipping by default in Chrome 142. As part of this change, local requests will be allowed to use HTTP in an HTTPS context (gated by a browser permission prompt). This will work automatically when the IP is provided directly, however in the case of IoT we often use the odoo-iot DNS domain to resolve the IP. In this case, you must specify the option `targetAddressSpace: "local"` in the `fetch` request. This commit simply adds this change where appropriate. task-5157145 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231543 Forward-Port-Of: odoo/odoo#231014
This update prepares Odoo IoT and Point of Sale IoT connections for upcoming Chrome browser changes. It helps ensure local devices such as printers, scanners, or other IoT hardware can continue to communicate reliably when accessed through Odoo's IoT domain.
Original PR description
Community PR: https://github.com/odoo/odoo/pull/231014 Local Network Access restrictions will start shipping by default in Chrome 142. As part of this change, local requests will be allowed to use HTTP in an HTTPS context (gated by a browser permission prompt). This will work automatically when the IP is provided directly, however in the case of IoT we often use the odoo-iot DNS domain to resolve the IP. In this case, you must specify the option `targetAddressSpace: "local"` in the `fetch` request. This PR simply adds this change where appropriate. As part of this we have also backported the change from jquery -> fetch. task-5157145 Forward-Port-Of: odoo/enterprise#97166 Forward-Port-Of: odoo/enterprise#96850
The salary configurator sidebar now has better spacing between field labels and their help icons. This small visual improvement makes the interface cleaner and easier to read for users configuring salaries.
Original PR description
In the salary configurator sidebar some fields have a tooltip to explain how the value is calculated, the icon for that tooltip had no margin between itself and the label. This commit adds a margin between them to make it more visually pleasing. Task ID: 5138530 Forward-Port-Of: odoo/enterprise#96483
6 changes
Enhancements to existing features
Opening the analytic distribution popup on invoice lines with many analytic accounts now avoids unnecessary repeated data requests. This improves responsiveness for users working with detailed analytic allocations, especially on larger invoices.
Original PR description
Currently opening the analytic distrubtion popup on an invoice line creates N network requests per account set on the line. Steps to reproduce ----- 1. Edit the analytic distribution on an invoice line and add a lot of accounts 2. Open the popup again 3. A lot of web_read requests are made Issue ----- The display_name for the account and currency is not being passed to the field values in recordProps(), resulting in another fetch when each Field element is rendered. Solution ----- Pass account.accountDisplayName. The display name for the currency is actually not initially loaded by the client, but since that field is invisible, we can safely use an empty string. opw-5106219 Forward-Port-Of: odoo/odoo#231342
A new automated test checks a specific India tax setup where two matching included taxes should produce equal amounts. This helps prevent future tax calculation regressions and improves confidence in accounting accuracy.
Original PR description
Added a missing test case in India tax computation, where both taxes have the same configuration as below: - amount: same for both taxes - price_include: True - include_base_amount: True - is_base_affected: False In this case, both tax amounts should be equal. This commit ensures that scenario is properly covered in the test suite. Forward-Port-Of: odoo/odoo#231364
Updates point of sale and IoT-related browser requests so local devices such as IoT boxes and customer displays continue to connect as Chrome introduces stricter local network access rules. This helps avoid disruption for businesses using local hardware with Odoo POS after upcoming browser changes.
Original PR description
Enterprise PR: https://github.com/odoo/enterprise/pull/96850 Local Network Access restrictions will start shipping by default in Chrome 142. As part of this change, local requests will be allowed to use HTTP in an HTTPS context (gated by a browser permission prompt). This will work automatically when the IP is provided directly, however in the case of IoT we often use the odoo-iot DNS domain to resolve the IP. In this case, you must specify the option `targetAddressSpace: "local"` in the `fetch` request. This commit simply adds this change where appropriate. task-5157145 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231468 Forward-Port-Of: odoo/odoo#231014
This update prepares Odoo Point of Sale IoT connections for upcoming Chrome Local Network Access restrictions. It helps ensure local IoT devices can still be reached from secure Odoo sessions when using the odoo-iot domain, avoiding disruption for businesses using connected hardware.
Original PR description
Community PR: https://github.com/odoo/odoo/pull/231014 Local Network Access restrictions will start shipping by default in Chrome 142. As part of this change, local requests will be allowed to use HTTP in an HTTPS context (gated by a browser permission prompt). This will work automatically when the IP is provided directly, however in the case of IoT we often use the odoo-iot DNS domain to resolve the IP. In this case, you must specify the option `targetAddressSpace: "local"` in the `fetch` request. This PR simply adds this change where appropriate. As part of this we have also backported the change from jquery -> fetch. task-5157145 Forward-Port-Of: odoo/enterprise#97124 Forward-Port-Of: odoo/enterprise#96850
Belgian point-of-sale blackbox messages are now queued, reducing delays during sales workflows and improving reliability when the device is busy or slow. This especially helps actions like pro forma sales where staff do not need to wait for an immediate blackbox response to continue serving customers.
Original PR description
In this commit, we introduce a queuing mechanism for blackbox messages to make all interactions with the blackbox faster and more reliable. This is particularly useful for messages that do not require the response from the blackbox to continue the workflow such as pro forma sales messages.
The salary configurator sidebar now adds space between field labels and their tooltip icons. This small visual improvement makes the interface cleaner and easier to read for HR users configuring salaries.
Original PR description
In the salary configurator sidebar some fields have a tooltip to explain how the value is calculated, the icon for that tooltip had no margin between itself and the label. This commit adds a margin between them to make it more visually pleasing. Task ID: 5138530 Forward-Port-Of: odoo/enterprise#96483
2 changes
Enhancements to existing features
Mexican electronic invoicing has been updated to match the latest tax rounding behavior. This helps ensure CFDI invoice amounts remain consistent and compliant when taxes are calculated and reported.
Original PR description
Forward-Port-Of: odoo/enterprise#96809
The salary configurator sidebar now has clearer spacing between field labels and tooltip icons. This small visual improvement makes the interface easier to read and more polished for users configuring salary details.
Original PR description
In the salary configurator sidebar some fields have a tooltip to explain how the value is calculated, the icon for that tooltip had no margin between itself and the label. This commit adds a margin between them to make it more visually pleasing. Task ID: 5138530 Forward-Port-Of: odoo/enterprise#96483
8 changes
Enhancements to existing features
Austrian POS companies with an email address will now automatically receive an invitation to access their Fiskaly dashboard. If the company email changes, a new invitation is sent, and Fiskaly organization details stay updated even while authentication is pending.
Original PR description
In this commit: ------------------ - If a company email is set in the company information, we send an invitation to that email, allowing the user to access their company data on the Fiskaly dashboard by logging in using the company email. - If the email is later updated, access invitation will automatically be sent to the new email. - If the fiskaly organization exists, we should update the organization data even if the authentication is remaining to keep the data uptodate. Related PR: https://github.com/odoo/iap-apps/pull/1098 Task: 4881786 Forward-Port-Of: odoo/enterprise#88106
Online orders handled through Urban Piper are now protected from manual deletion in the point of sale. This keeps order records aligned with the normal restaurant workflow, where such orders should be cancelled by the aggregator or rejected by the restaurant instead.
Original PR description
Before this commit: =================== - We were able to delete online orders, but generally, online orders are either cancelled by the aggregator or rejected by the restaurant. After this commit: ================== - Online orders can no longer be deleted. Task: 496669 Forward-Port-Of: odoo/enterprise#95074
The AI and WhatsApp features now use a more direct way to open or retrieve chat conversations. This keeps the messaging experience aligned with the main chat system and helps maintain consistency across Odoo communication tools.
Original PR description
This commit updates all calls to getOrFetch to use the method from the discuss.channel model directly. PR community: https://github.com/odoo/odoo/pull/231203
The automated tests for avatar cards were updated to rely on stable class names instead of page structure. This helps reduce false test failures when the avatar card layout changes, supporting smoother future updates without changing the user experience.
Original PR description
Update the user info selector in avatar card tests to use the class names. This will simplify future changes to the avatar card. The tests will be less likely to break if the structure of the avatar card changes, as long as the class names remain the same. pre task of task-4107790 https://github.com/odoo/odoo/pull/231639
The salary configurator sidebar now has better spacing between field labels and their tooltip icons. This small visual improvement makes the interface cleaner and easier to read for users configuring salaries.
Original PR description
In the salary configurator sidebar some fields have a tooltip to explain how the value is calculated, the icon for that tooltip had no margin between itself and the label. This commit adds a margin between them to make it more visually pleasing. Task ID: 5138530 Forward-Port-Of: odoo/enterprise#96483
Peruvian electronic invoices can now include the required withholding reference when selling to customers classified as withholding agents. This helps businesses comply with local invoicing rules by reflecting the total withholding amount correctly in the XML without affecting invoice totals.
Original PR description
Some customers in Peru are considered "agentes de retención", and as such have special considerations that are necessary. We must perform specific actions when working with these customers, when selling to them we must: - recieve a specific document from the customer (A followup task will add this support for companies to generate this document) - Include a retention reference in our XML. This is represented as a specific `AllowanceCharge` node that is the sum of all of the Withholding taxes on the lines with the specific code of 62. We know an invoice is to a withholding customer because all lines must have a tax that is a part of the withholding tax group. This withholding tax is not included in the monetarytotals, tax totals, or invoice line values. And there can be only one AllowanceCharge node per invoice, not one per line. task-4989463 Forward-Port-Of: odoo/enterprise#97071 Forward-Port-Of: odoo/enterprise#94504
The Payroll Employees menu now uses the standard navigation path again because newer platform routing improvements make the previous workaround unnecessary. This avoids a full page reload, helping the Employees screen open more quickly and smoothly.
Original PR description
This reverts commit bbb22f4835197419be538a7e2a82c1743fac3fa3. The fixes in the commit reverted is no longer needed thanks to the recent changes by the framework to better manage the routing in backend. Moreover, the fixes made by calling a client action to change the url will trigger a hard reload and so the employees action will take more time than before since all OWL components have to be mounted instead of just mounting to needed owl components to load the Employees action. Forward-Port-Of: odoo/enterprise#96967
Attachments shared during a website helpdesk live chat are now carried into the related lead description in a cleaner, consistent format. This helps sales and support teams keep customer context and supporting files together when following up.
Original PR description
This commit PR attachment conversion logic with `_attachment_to_html` introduced in the related Community PR. Related: https://github.com/odoo/odoo/pull/227563 Task-4777564 Forward-Port-Of: odoo/enterprise#94970
11 changes
Enhancements to existing features
A new automated test was added to confirm that matching India tax rules produce equal tax amounts when configured the same way. This helps reduce the risk of future accounting calculation regressions without changing user-facing behavior.
Original PR description
Added a missing test case in India tax computation, where both taxes have the same configuration as below: - amount: same for both taxes - price_include: True - include_base_amount: True - is_base_affected: False In this case, both tax amounts should be equal. This commit ensures that scenario is properly covered in the test suite. Forward-Port-Of: odoo/odoo#231364
Companies using Austrian POS localization can now automatically invite the email listed in company information to access the related Fiskaly dashboard. If the company email changes, a new invitation is sent, and existing Fiskaly organization data is kept up to date even while authentication is still pending.
Original PR description
In this commit: ------------------ - If a company email is set in the company information, we send an invitation to that email, allowing the user to access their company data on the Fiskaly dashboard by logging in using the company email. - If the email is later updated, access invitation will automatically be sent to the new email. - If the fiskaly organization exists, we should update the organization data even if the authentication is remaining to keep the data uptodate. Related PR: https://github.com/odoo/iap-apps/pull/1098 Task: 4881786 Forward-Port-Of: odoo/enterprise#88106
Opening the analytic distribution popup on invoice lines with many accounts now avoids making repeated background requests. This improves responsiveness for users working with detailed analytic allocations and reduces unnecessary system load.
Original PR description
Currently opening the analytic distrubtion popup on an invoice line creates N network requests per account set on the line. Steps to reproduce ----- 1. Edit the analytic distribution on an invoice line and add a lot of accounts 2. Open the popup again 3. A lot of web_read requests are made Issue ----- The display_name for the account and currency is not being passed to the field values in recordProps(), resulting in another fetch when each Field element is rendered. Solution ----- Pass account.accountDisplayName. The display name for the currency is actually not initially loaded by the client, but since that field is invisible, we can safely use an empty string. opw-5106219 Forward-Port-Of: odoo/odoo#231576 Forward-Port-Of: odoo/odoo#231342
This update makes small visual improvements in Point of Sale screens. Users can now see the currency symbol in payment forms, and custom text boxes for configurable items line up properly with other choices, reducing confusion during checkout.
Original PR description
Before this commit:
1. The currency symbol was not visible in the monetary field in the payment form view.
2. The custom text box in a customizable item was not aligned with the other choices.
After this commit:
1. Now, the currency symbol is visible.
2. Now, the text box is aligned with other choices.
Task id : 5106355
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prSkill matching is no longer shown in talent pool views. Recruiters will now see skill matching only when an applicant applies for a specific job, making the information more relevant to the hiring context.
Original PR description
Removed skill matching from the talent pool view, it now appears only whenever the applicant applies on a specific job task:5083092 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The HTML editor was optimized to avoid unnecessary page layout and style recalculations during common editing actions. This should make editing feel more responsive, especially in situations where selections or block checks happen frequently.
Original PR description
The goal of this PR is to improve the performance of the HTML Editor by reducing the number of times layout or style recalculations are needed. [FIX] html_editor: make isCollapsed lazy ========== The…
The goal of this PR is to improve the performance of the HTML Editor by reducing the number of times layout or style recalculations are needed. [FIX] html_editor: make isCollapsed lazy ========== The goal of this commit is to make `isCollapsed` lazy. Currently, when calling `getSelectionData`, `selection.isCollapsed` is evaluated, which can trigger a layout recalculation. We now make it lazy and evaluate it only when necessary. This change helps avoid the cost of layout recalculations (few ms) in many situations. [FIX] html_editor: cache style.display in isBlock ======== This commit ensures that calls to `getComputedStyle(node).display` in the `isBlock` utility are properly cached. Currently, each call triggers a style recalculation, which can be costly. Solution: we cache the `display` value itself, not the entire return value of `getComputedStyle`. [FIX] html_editor: imp perf in base_container_plugin ====== This commit aims to improve performance. Using a `Set` only to remove a callback from a list is quite expensive compared to using a simple `if` check during the list iteration.
UAE payroll now excludes unpaid leave and unpaid sick leave days from end-of-service and related provision calculations. Payslips also show the total unpaid leave days, helping payroll teams review final settlements more clearly and accurately.
Original PR description
This commit excludes the Out Of Contract Unpaid Leaves and Unpaid Sick Leave days from the EoS and EoS Provision Salary Rule Calculations. We also show the total number of unpaid leave days on the EoS payslip. task-4886104 Forward-Port-Of: odoo/enterprise#97063 Forward-Port-Of: odoo/enterprise#95465
Leads created from live chat chatbot conversations now include files shared by the customer in the lead description. This helps sales teams see all relevant customer-provided information in one place, reducing missed context and follow-up delays.
Original PR description
Before this PR, when a lead was created from a chatbot conversation, the attachments shared by the customer were not included in the lead description. This PR adds the functionality to include these attachments in the lead description. Enterprise: https://github.com/odoo/enterprise/pull/94970 Task-4777564 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
When a website helpdesk live chat creates or updates a lead, attached files are now added to the lead description in a consistent format. This helps sales or support teams see the full customer context without needing to search elsewhere.
Original PR description
This commit PR attachment conversion logic with `_attachment_to_html` introduced in the related Community PR. Related: https://github.com/odoo/odoo/pull/227563 Task-4777564
This update adds internal documentation for the HTML builder's editing actions and related behavior. It helps developers understand and maintain these tools more easily, reducing the risk of future mistakes without changing the user experience.
Original PR description
This commit adds JSDoc for `BuilderAction` and related concepts. Forward-Port-Of: odoo/odoo#229281
The salary configurator sidebar now has clearer spacing between field labels and their explanatory tooltip icons. This small visual improvement makes the interface easier to read and more polished for HR users.
Original PR description
In the salary configurator sidebar some fields have a tooltip to explain how the value is calculated, the icon for that tooltip had no margin between itself and the label. This commit adds a margin between them to make it more visually pleasing. Task ID: 5138530 Forward-Port-Of: odoo/enterprise#96483
6 changes
Enhancements to existing features
Updates Uruguay localization so reduced VAT rates can be configured and reported separately for eligible consumer sales paid by debit card or electronic money. This helps companies produce compliant tax reporting and electronic invoice XML totals for VAT rates outside the standard exempt, minimum, and basic categories.
Original PR description
To fully comply with regulatory requirements, we need to support an additional category called "Reduced Tax Rate" when a product line has a Reduced VAT rate (e.g., 20%) for sales of goods and…
To fully comply with regulatory requirements, we need to support an additional category called "Reduced Tax Rate" when a product line has a Reduced VAT rate (e.g., 20%) for sales of goods and services to final consumers when payment is made by debit card or electronic money instrument (and other specific reductions in similar cases).
1. Detecting "Reduced Tax Rate":
* Identify product lines with a VAT rate that is neither 0% (exempt), 10% (minimum), nor 22% (basic). Any VAT rate outside these three should be considered "Reduced Tax Rate".
2. Modifying XML Output:
* In the <Totales> section of the XML, include the total amount of VAT under the "Reduced Tax Rate" in the <MntIVAOtra> tag.
* Example: xml <MntIVAOtra>140</MntIVAOtra> (where 140 corresponds to the VAT calculated at the reduced tax rate, e.g., 20%).
* For each product line using "Reduced Tax Rate," set the <IndFact> tag to 4: xml <IndFact>4</IndFact>
*Ensure the total amount reflects the base amount plus the VAT under "Reduced Tax Rate".
3. Tax Grid for Configuration:
*Add a new tax grid called Sales Reduced VAT to be used for the tax configuration of the "Reduced Tax Rate."
* This will ensure proper reporting and consistency in tax declarations.
* The new tax grid should be selectable when configuring other taxes.
Odoo Implementation Considerations:
* The tax computation logic in Odoo already supports defining taxes at different rates.
* Adapt the XML generation logic to check for product lines with a non-standard VAT rate and apply the necessary modifications. Ensure the final totals in the XML align with Odoo's computed tax amounts.
Task latam side: 1330
Task Adhoc side: 52999
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update adjusts Mexican electronic invoicing to match a change in how taxes are rounded. It helps keep generated CFDI invoice documents compliant and reduces the risk of rounding discrepancies in tax reporting.
Uruguay electronic invoicing now handles reduced VAT rates beyond the standard exempt, minimum, and basic rates. This ensures invoices report these taxes correctly in required XML fields and adds a dedicated tax grid for consistent VAT reporting.
Original PR description
1) Detecting "Reduced Tax Rate": * Identify product lines with a VAT rate that is neither 0% (exempt), 10% (minimum), nor 22% (basic). Any VAT rate outside these three should be considered "Reduced…
1) Detecting "Reduced Tax Rate":
* Identify product lines with a VAT rate that is neither 0% (exempt), 10% (minimum), nor 22% (basic). Any VAT rate outside these three should be considered "Reduced Tax Rate".
2) Modifying XML Output:
* In the `<Totales>` section of the XML, include the total amount of VAT under the "Reduced Tax Rate" in the `<MntIVAOtra>` tag.
* Example: ```xml <MntIVAOtra>140</MntIVAOtra> ``` (where 140 corresponds to the VAT calculated at the reduced tax rate, e.g., 20%).
* For each product line using "Reduced Tax Rate," set the `<IndFact>` tag to `4`: ```xml <IndFact>4</IndFact> ```
* Ensure the total amount reflects the base amount plus the VAT under "Reduced Tax Rate".
3) Tax Grid for Configuration:
* Add a new tax grid called Sales Reduced VAT to be used for the tax configuration of the "Reduced Tax Rate."
* This will ensure proper reporting and consistency in tax declarations.
* The new tax grid should be selectable when configuring other taxes.
Odoo Implementation Considerations:
* The tax computation logic in Odoo already supports defining taxes at different rates.
* Adapt the XML generation logic to check for product lines with a non-standard VAT rate and apply the necessary modifications. Ensure the final totals in the XML align with Odoo's computed tax amounts.
Task latam side: 1330
Task Adhoc side: 52999The analytic distribution popup now reuses already available account and currency display information instead of requesting it repeatedly. This reduces unnecessary network activity when invoice lines contain many analytic accounts, making the popup open more smoothly for users.
Original PR description
Currently opening the analytic distrubtion popup on an invoice line creates N network requests per account set on the line. Steps to reproduce ----- 1. Edit the analytic distribution on an invoice line and add a lot of accounts 2. Open the popup again 3. A lot of web_read requests are made Issue ----- The display_name for the account and currency is not being passed to the field values in recordProps(), resulting in another fetch when each Field element is rendered. Solution ----- Pass account.accountDisplayName. The display name for the currency is actually not initially loaded by the client, but since that field is invisible, we can safely use an empty string. opw-5106219 Forward-Port-Of: odoo/odoo#231342
Updates made to POS categories, such as name or display order, are now reflected in UrbanPiper when the menu is synced again. This helps restaurants keep their online menus consistent without manual corrections.
Original PR description
Before this commit: ----------------------------------------- - After syncing the menu, changes in a POS category (e.g., name or sequence) were not reflected in UrbanPiper when the menu was synced again. After this commit: ----------------------------------------- - Category updates (name or sequence) are now synced with UrbanPiper on subsequent menu syncs. Task-5122804
Italian electronic invoices are now sent one at a time instead of in larger batches to reduce timeout errors. This helps prevent scheduled processing from getting stuck when companies submit many invoices at once.
Original PR description
Some clients reported that when they send a full batch size=20 invoices at once, they get a timeout response and the cron job get's stuck. Processing invoices one by one instead of a full batch. IAP-apps PR: https://github.com/odoo/iap-apps/pull/1230 Task [link](https://www.odoo.com/odoo/project.task/5045529) task-5045529
1 change
Enhancements to existing features
The website editor now detects when a user's browser or device cannot support image filters and disables that option instead of showing an error. This improves editing reliability, especially on Linux Chrome setups where WebGL may no longer fall back to software rendering.
Original PR description
On recent versions of Chrome for Linux (v140+), the old SwiftShader software fallback for WebGL has been removed. As a result, new window.WebGLImageFilter() now throws if no GPU context is available, typically when WebGL is disabled or unsupported. Since the application cannot enable WebGL from JavaScript, this commit improves the user experience by detecting the absence of a WebGL context early and disabling image filters in edit mode. Instead of raising a traceback, the editor now skips the filter feature and can optionally display a friendly message explaining that WebGL is required to use image filters. This avoids runtime errors and ensures a more robust behavior on platforms where WebGL is unavailable. task-5117584