SAN FRANCISCO -- Everyone's been saying it. Coaches, teammates, opposing pitchers, fans: "It's only a matter of time."

Monday night, that matter of time ended when Barry Bonds finally hit another home run and the sporting world exhaled.

So did the rest of the Giants as their hits finally started falling, and on Monday night, everything was as it should be in San Francisco.

Bonds' home run No. 747 ignited a three-run, go-ahead rally to propel the Giants to a 4-3 win over Toronto. Matt Morris pitched a complete game for his seventh consecutive win. This was a big one for the Giants, who entered the game shouldering a 21-inning scoreless streak and an Oakland sweep on the mind. It was also a big one for Bonds, who hadn't hit a home run in 12 games.

"Whenever you people count the big man out, he always responds," Dave Roberts said.

The way Bonds responded was by launching a two-run homer approximately 438 feet over center field in the fourth inning to tie the game. It was Bonds' 13th home run of the season, and he is now eight away from tying Hank Aaron's all-time record.

It was the first home run Bonds hit off Toronto starting pitcher Josh Towers, who became pitching victim No. 440. Bonds fouled the first pitch back before eyeing the pitch he wanted and sending it sailing over center on an 0-1 count.

The way Bonds is batting shouldn't make or break the offense, but Bonds' bat seems synonymous with his teammates'.

After Bonds' home run, the Giants finally started stringing together some hits. Ray Durham followed Bonds with a double down the right-field line. Bengie Molina added a single, and Omar Vizquel squeeze-bunted home the go-ahead run.

Morris' performance on the mound had just as much to do with the Giants' win as the third-inning rally. He threw his second consecutive complete game, third of the season, tying him for the Major League best.

"Great pitching performance, that's it, and we finally came through on offense," said Bonds.

Morris is good at turning things around for the Giants. He is 7-4 on the mound following a Giants defeat.

"I can't tell you how many times he's saved us after tough losses and losing streaks. He did it again," manager Bruce Bochy said.

Morris was roughed up a bit in the first inning, giving up three runs and a walk, but three runs was all the Blue Jays would get off Morris. The right-hander fell into a groove in the second inning and shut down the Blue Jays for the rest of the game.

"You don't imagine yourself down three-nothing after the first, so when that happens, you just got to do everything to fight and claw and stay in the game," Morris said. "We were able to scratch one back in the first."

Morris took the mound in the ninth as his pitch count hovered near 100, and Toronto's Aaron Hill took advantage of his tiring arm with a potential game-tying shot to center field.

"I just saw the ball off the bat, and pitching for so many years, you know that's a double or out of the park," Morris said.

It likely would have been a double if Dave Roberts didn't come up with possibly the catch of the season against the center-field wall.

"Matty pitched such a great game, as he's done all year long, and in that situation, I didn't want to come up short. I knew that the wall was coming close," Roberts said.

Roberts snagged the ball as he slammed into the wall and dropped to his knees on the warning track. Roberts stayed down collecting himself for a minute before rising to a thunderous standing ovation.

"I was just trying to make sure all the body parts were in the right place," he said.

Roberts was back in top form on both sides of the field in only his second game back with the Giants since elbow surgery. He ended the Giants' run drought in the first inning and came up with the game-saving catch in the ninth.

Roberts reached base in his first two at-bats and proceeded to easily steal second on both occasions.

"I had a lot of time for my legs to rest up," Roberts said.