Skip to content

Commit 152da1c

Browse files
committed
Fix nil argument exceptions when clearing an empty session
- Resolves 'nil argument to function' exceptions in lambdas bound to before/after-graph-view-change events in mode_manager.mu, wipes.mu, and transform_manip.mu. - Fixes rvc.frame() throwing exceptions on an empty session in multiple_source_media_rep.py and its utilities. Signed-off-by: Michael Oliver <mcoliver@gmail.com>
1 parent ef2181f commit 152da1c

File tree

5 files changed

+58
-19
lines changed

5 files changed

+58
-19
lines changed

src/lib/app/mu_rvui/mode_manager.mu

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -751,17 +751,28 @@ class: ModeManagerMode : MinorMode
751751

752752
method: viewChange (void; Event event, bool on)
753753
{
754-
event.reject();
754+
try
755+
{
756+
event.reject();
755757

756-
let vnode = viewNode(),
757-
vtype = nodeType(vnode),
758-
name = if vtype.substr(0,2) == "RV" then vtype.substr(2,0) + "_edit_mode" else "",
759-
entry = findModeEntry(name);
758+
let vnode = viewNode();
759+
if (vnode eq nil || vnode == "") return;
760760

761-
if (entry neq nil)
762-
{
763-
activateEntry(entry, on);
764-
if (on) sendInternalEvent("view-edit-mode-activated");
761+
let vtype = nodeType(vnode);
762+
if (vtype eq nil || vtype == "") return;
763+
764+
let name = if vtype.substr(0,2) == "RV" then vtype.substr(2,0) + "_edit_mode" else "",
765+
entry = findModeEntry(name);
766+
767+
if (entry neq nil)
768+
{
769+
activateEntry(entry, on);
770+
if (on) sendInternalEvent("view-edit-mode-activated");
771+
}
772+
}
773+
catch (exception exc)
774+
{
775+
print("ERROR: mode_manager viewChange: " + string(exc) + "\\n");
765776
}
766777
}
767778

src/lib/app/mu_rvui/wipes.mu

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -465,13 +465,22 @@ class: Wipe : MinorMode
465465
{
466466
event.reject();
467467
removeTags();
468-
set(viewNode() + ".ui.wipes", 1);
468+
469+
let vnode = viewNode();
470+
if (vnode neq nil && vnode != "")
471+
{
472+
set(vnode + ".ui.wipes", 1);
473+
}
469474
}
470475

471476
method: afterGraphViewChange (void; Event event)
472477
{
473478
event.reject();
474-
if (nodeType(viewNode()) != "RVStackGroup")
479+
480+
let vnode = viewNode();
481+
if (vnode eq nil || vnode == "") return;
482+
483+
if (nodeType(vnode) != "RVStackGroup")
475484
{
476485
toggle();
477486
}

src/plugins/rv-packages/multiple_source_media_rep/multiple_source_media_rep.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -441,7 +441,10 @@ def _update_media_info(self, event):
441441
return
442442

443443
# Important: Skip update if same sources as current.
444-
sources = rvc.sourcesAtFrame(rvc.frame())
444+
try:
445+
sources = rvc.sourcesAtFrame(rvc.frame())
446+
except Exception:
447+
sources = []
445448
if sources == self._current_sources and not self._force_update_media_info:
446449
return
447450

src/plugins/rv-packages/multiple_source_media_rep/multiple_source_media_rep_utils.py

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,10 @@ def get_source_at_current_frame():
2525
"""
2626
Returns first source at current frame.
2727
"""
28-
sources = rvc.sourcesAtFrame(rvc.frame())
28+
try:
29+
sources = rvc.sourcesAtFrame(rvc.frame())
30+
except Exception:
31+
sources = []
2932
return "" if not sources else sources[0]
3033

3134

@@ -34,7 +37,10 @@ def get_switch_node(source):
3437
Retrieves the first RVSwitch node at current frame.
3538
"""
3639
if source:
37-
switch_nodes = rve.nodesInEvalPath(rvc.frame(), "RVSwitch", source)
40+
try:
41+
switch_nodes = rve.nodesInEvalPath(rvc.frame(), "RVSwitch", source)
42+
except Exception:
43+
switch_nodes = []
3844
if switch_nodes:
3945
return switch_nodes[0]
4046

@@ -47,9 +53,16 @@ def get_switch_nodes_at_current_frame():
4753
"""
4854
switch_nodes = []
4955

50-
sources = rvc.sourcesAtFrame(rvc.frame())
56+
try:
57+
sources = rvc.sourcesAtFrame(rvc.frame())
58+
except Exception:
59+
sources = []
60+
5161
for source in sources:
52-
src_switch_nodes = rve.nodesInEvalPath(rvc.frame(), "RVSwitch", source)
62+
try:
63+
src_switch_nodes = rve.nodesInEvalPath(rvc.frame(), "RVSwitch", source)
64+
except Exception:
65+
src_switch_nodes = []
5366
if src_switch_nodes:
5467
switch_nodes.append(src_switch_nodes[0])
5568

src/plugins/rv-packages/session_manager/transform_manip.mu

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -338,9 +338,12 @@ class: TransformManip : MinorMode
338338

339339
method: findEditingNodes (void; bool setStates=true)
340340
{
341-
let vnode = viewNode(),
342-
infos = metaEvaluateClosestByType(frame(), "RVTransform2D"),
343-
(ins, outs) = nodeConnections(viewNode(), false);
341+
let vnode = viewNode();
342+
if (vnode eq nil || vnode == "") return;
343+
344+
// Use an explicit type declaration here so that infos is correctly MetaEvalInfo[]
345+
let infos = metaEvaluateClosestByType(frame(), "RVTransform2D"),
346+
(ins, outs) = nodeConnections(vnode, false);
344347

345348
_editNodes = EditNodePair[]();
346349

0 commit comments

Comments
 (0)