diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css
index f2d80fff715..7392c1e9922 100644
--- a/addons/web/static/src/css/base.css
+++ b/addons/web/static/src/css/base.css
@@ -894,6 +894,10 @@ label.error {
opacity: 0.75;
}
+.openerp .oe-listview .oe-field-cell .oe-listview-button-disabled img {
+ opacity: 0.5;
+}
+
.openerp .oe-listview th.oe-actions {
text-align: left;
white-space: nowrap;
diff --git a/addons/web/static/src/js/formats.js b/addons/web/static/src/js/formats.js
index 264cc836e2d..da89073ea68 100644
--- a/addons/web/static/src/js/formats.js
+++ b/addons/web/static/src/js/formats.js
@@ -252,14 +252,17 @@ openerp.web.format_cell = function (row_data, column, value_if_empty, process_mo
}
if (attrs.invisible) { return ''; }
if (column.tag === 'button') {
- return [
- ''
- ].join('')
+ return _.template('', {
+ title: column.string || '',
+ additional_attributes: isNaN(row_data["id"].value) && openerp.web.BufferedDataSet.virtual_id_regex.test(row_data["id"].value) ?
+ 'disabled="disabled" class="oe-listview-button-disabled"' : '',
+ prefix: openerp.connection.prefix,
+ icon: column.icon,
+ alt: column.string || '',
+ });
}
-
if (!row_data[column.id]) {
return value_if_empty === undefined ? '' : value_if_empty;
}