use RAII for cursor mgmt around thread-waits

This commit is contained in:
Paul Davis 2024-12-08 15:09:32 -07:00
parent 98c9c03e9f
commit 15c86492fa
3 changed files with 16 additions and 7 deletions

View file

@ -342,6 +342,15 @@ class EditingContext : public ARDOUR::SessionHandlePtr, public AxisViewProvider
/** Push the appropriate enter/cursor context on item entry. */ /** Push the appropriate enter/cursor context on item entry. */
void choose_canvas_cursor_on_entry (ItemType); void choose_canvas_cursor_on_entry (ItemType);
struct CursorRAII {
CursorRAII (EditingContext& e, Gdk::Cursor* new_cursor)
: ec (e), old_cursor (ec.get_canvas_cursor ()) { ec.set_canvas_cursor (new_cursor); }
~CursorRAII () { ec.set_canvas_cursor (old_cursor); }
EditingContext& ec;
Gdk::Cursor* old_cursor;
};
virtual Gdk::Cursor* get_canvas_cursor () const; virtual Gdk::Cursor* get_canvas_cursor () const;
static MouseCursors const* cursors () { static MouseCursors const* cursors () {
return _cursors; return _cursors;

View file

@ -574,7 +574,7 @@ Editor::import_sndfiles (vector<string> paths,
import_status.track = track; import_status.track = track;
import_status.replace = replace; import_status.replace = replace;
set_canvas_cursor (_cursors->wait); CursorRAII cr (*this, _cursors->wait);
/* start import thread for this spec. this will ultimately call Session::import_files() /* start import thread for this spec. this will ultimately call Session::import_files()
which, if successful, will add the files as regions to the region list. its up to us which, if successful, will add the files as regions to the region list. its up to us
@ -636,7 +636,7 @@ Editor::embed_sndfiles (vector<string> paths,
/* skip periodic saves while importing */ /* skip periodic saves while importing */
Session::StateProtector sp (_session); Session::StateProtector sp (_session);
set_canvas_cursor (_cursors->wait); CursorRAII cr (*this, _cursors->wait);
for (vector<string>::iterator p = paths.begin(); p != paths.end(); ++p) { for (vector<string>::iterator p = paths.begin(); p != paths.end(); ++p) {

View file

@ -4379,7 +4379,7 @@ Editor::freeze_route ()
pthread_create_and_store (X_("freezer"), &itt.thread, _freeze_thread, this, 0); pthread_create_and_store (X_("freezer"), &itt.thread, _freeze_thread, this, 0);
set_canvas_cursor (_cursors->wait); CursorRAII cr (*this, _cursors->wait);
while (!itt.done && !itt.cancel) { while (!itt.done && !itt.cancel) {
gtk_main_iteration (); gtk_main_iteration ();
@ -5921,7 +5921,7 @@ Editor::normalize_region ()
return; return;
} }
set_canvas_cursor (_cursors->wait); CursorRAII cr (*this, _cursors->wait);
/* XXX: should really only count audio regions here */ /* XXX: should really only count audio regions here */
int const regions = rs.size (); int const regions = rs.size ();
@ -6200,7 +6200,7 @@ Editor::fork_regions_from_unselected ()
return; return;
} }
set_canvas_cursor (_cursors->wait); CursorRAII cr (*this, _cursors->wait);
bool in_command = false; bool in_command = false;
/* find the set of all MidiSources associated with the selected regions */ /* find the set of all MidiSources associated with the selected regions */
@ -6278,7 +6278,7 @@ Editor::fork_selected_regions ()
return; return;
} }
set_canvas_cursor (_cursors->wait); CursorRAII cr (*this, _cursors->wait);
bool in_command = false; bool in_command = false;
for (RegionSelection::iterator r = rs.begin(); r != rs.end(); ) { for (RegionSelection::iterator r = rs.begin(); r != rs.end(); ) {
@ -6360,7 +6360,7 @@ Editor::apply_filter (Filter& filter, string command, ProgressReporter* progress
return; return;
} }
set_canvas_cursor (_cursors->wait); CursorRAII cr (*this, _cursors->wait);
bool in_command = false; bool in_command = false;
int n = 0; int n = 0;