fix inline display when cairo_surface_has_snapshots
[ardour.git] / gtk2_ardour / processor_box.cc
index b2fa760b6b3248ae441b6d72b036571d75476ae5..b1e9ada998ec9509d694283d90f8e84446bd40c4 100644 (file)
@@ -109,6 +109,7 @@ RefPtr<Action> ProcessorBox::cut_action;
 RefPtr<Action> ProcessorBox::copy_action;
 RefPtr<Action> ProcessorBox::rename_action;
 RefPtr<Action> ProcessorBox::delete_action;
+RefPtr<Action> ProcessorBox::backspace_action;
 RefPtr<Action> ProcessorBox::manage_pins_action;
 RefPtr<Action> ProcessorBox::edit_action;
 RefPtr<Action> ProcessorBox::edit_generic_action;
@@ -1124,6 +1125,9 @@ ProcessorEntry::RoutingIcon::can_coalesce () const {
        if (_fed_by && _f_out != _f_sources) {
                return false;
        }
+       if (_fed_by && !_f_out_map.is_identity () && !_in_map.is_identity ()) {
+               return false;
+       }
        if (_input && _sinks == _in && (!_fed_by || _f_out == _in)) {
                return true;
        }
@@ -1598,6 +1602,7 @@ ProcessorEntry::PluginDisplay::render_inline (cairo_t* cr, uint32_t width)
                }
        }
 
+       cairo_surface_flush(_surf);
        cairo_surface_mark_dirty(_surf);
        const double xc = floor ((width - dis->width) * .5);
        cairo_set_source_surface(cr, _surf, xc, 0);
@@ -2119,6 +2124,7 @@ ProcessorBox::show_processor_menu (int arg)
        cut_action->set_sensitive (sensitive && can_cut ());
        copy_action->set_sensitive (sensitive);
        delete_action->set_sensitive (sensitive || stub_processor_selected ());
+       backspace_action->set_sensitive (sensitive || stub_processor_selected ());
 
        edit_action->set_sensitive (one_processor_can_be_edited ());
        edit_generic_action->set_sensitive (one_processor_can_be_edited ());
@@ -2881,9 +2887,9 @@ ProcessorBox::setup_routing_feeds ()
                        }
                } else {
                        (*i)->output_routing_icon.set_terminal(false);
-                       if (!(*i)->routing_icon.out_identity ()
-                                       && !(*i)->routing_icon.in_identity ()
-                                       && (*i)->routing_icon.can_coalesce ()) {
+                       if (   !(*i)->routing_icon.out_identity ()
+                                       && !(*next)->routing_icon.in_identity ()
+                                       &&  (*next)->routing_icon.can_coalesce ()) {
                                (*i)->output_routing_icon.hide();
                        } else if (!(*i)->routing_icon.out_identity ()) {
                                (*i)->output_routing_icon.show();
@@ -3635,10 +3641,13 @@ ProcessorBox::register_actions ()
                                                             sigc::ptr_fun (ProcessorBox::rb_copy));
        delete_action = myactions.register_action (processor_box_actions, X_("delete"), _("Delete"),
                                                               sigc::ptr_fun (ProcessorBox::rb_delete));
+       backspace_action = myactions.register_action (processor_box_actions, X_("backspace"), _("Delete"),
+                                                              sigc::ptr_fun (ProcessorBox::rb_delete));
 
        ActionManager::plugin_selection_sensitive_actions.push_back (cut_action);
        ActionManager::plugin_selection_sensitive_actions.push_back (copy_action);
        ActionManager::plugin_selection_sensitive_actions.push_back (delete_action);
+       ActionManager::plugin_selection_sensitive_actions.push_back (backspace_action);
 
        paste_action = myactions.register_action (processor_box_actions, X_("paste"), _("Paste"),
                        sigc::ptr_fun (ProcessorBox::rb_paste));
@@ -4208,12 +4217,7 @@ ProcessorWindowProxy::show_the_right_window ()
        if (_window && (is_custom != want_custom)) {
                /* drop existing window - wrong type */
                drop_window ();
-               get (true);
-               setup ();
-               assert (_window);
-               is_custom = want_custom;
        }
-
        toggle ();
 }