The result snapped an eight-game losing streak and kept the Leafs' slim playoff hopes alive.
"It feels like a lot of weight lifted off of our team," captain Dion Phaneuf said. "We can feel good about ourselves because we won this game."
The Leafs allowed themselves to feel good by picking up their first points since beating the Los Angeles Kings on March 13. They improved to 82 points with five games remaining and passed Washington (81, six games left) but still trail Detroit (84, seven games left) and Columbus (83, seven games left) in the Eastern Conference wild-card race.
Surpassing either the Red Wings or Blue Jackets remains a daunting task. But for Toronto, any victory represents a confidence boost.
"It's been a long time. It's been too long," coach Randy Carlyle said. "You hope that you can build on it, but I don't want to get too far ahead of ourselves because we didn't paint a Mona Lisa here tonight."
In getting goals from Jay McClement and Dave Bolland and the winner from David Clarkson, the Leafs prevented what would have been their first stretch of nine straight regulation losses since 1967, the last time this franchise won the Stanley Cup.
"We were flat for a big part of that game and gave up three rush chances," said ex-Leafs forward Matt Stajan, who scored his 13th of the season for the Flames on a breakaway. "That's how that team scores goals. You could say they got a bounce on the one. I'm guessing they haven't had many bounces the last month."
A loss of any kind to the Flames would have been devastating.
"It beats losing, that's for sure," said defenseman Cody Franson, who set up McClement for the game's first goal 50 seconds into the second period.
Anything beats losing for the Leafs, who not too long ago were in second place in the Atlantic Division before going into this free fall.
"I don't think we got outplayed," Flames coach Bob Hartley said. "It's just they got one goal more than us. They were opportunistic at the right time, and we got our chances late and we couldn't capitalize on them, but it's not by a lack of effort."
Toronto's goals came Tuesday night because McClement drove hard to the net, Bolland banked the puck off Flames defenseman T.J. Brodie and Mason Raymond sprung Clarkson on a breakaway. Jonathan Bernier also made 22 saves for his first victory since March 10.
"It wasn't pretty, but we'll take it," Bolland said. "I don't think we played the prettiest game or we made the prettiest moves. But in a slump like that, just to get out of that, it's great to get out of it."
One victory won't get the Leafs out of the hole they dug over the past few weeks, but players' hope is that this is at least a start.
With the Calgary defense napping, Franson skated into the corner and found McClement streaking toward the net. The fourth-line center deflected the puck in.
Not long after, it looked like the Flames tied it when Curtis Glencross deflected a point shot past Bernier. It was disallowed because Glencross hit the puck with a high stick.
The teams slogged through much of the rest of the period until a hole in the Leafs' defense allowed the Flames to tie it. Brodie sprung Stajan for a breakaway, and the former Leaf got his third goal in his past six games.
The Leafs brought some energy back into Air Canada Centre in the third period when Bolland scored 2:16 in, banking in the puck off Brodie's skate.
Then Clarkson added another spark by scoring on a breakaway, just his fifth goal, his first point of any kind in 17 games.
That two-goal lead was short-lived, as Russell got plenty of room in the right faceoff circle and snapped one in at 7:24. But the Leafs managed to hold on this time to get a couple of much-needed points.
Paul Ranger dressed as the Leafs' seventh defenseman in his first game since suffering a neck injury against Tampa Bay on March 19. Forwards Colton Orr and Jerry D'Amigo were scratched. ... Phil Kessel played despite a bruised right foot and took a puck to that foot a couple of times against Calgary. ... Bryce Van Brabant made his NHL debut for the Flames, becoming the 10th Calgary player to do that this season.