Add 'tray.popContextMenu()' Windows implementation.

This commit is contained in:
Haojian Wu 2015-07-16 11:39:49 +08:00
parent 4421fbf9f3
commit ed4c69343f
6 changed files with 26 additions and 23 deletions

View file

@ -106,8 +106,10 @@ void Tray::DisplayBalloon(mate::Arguments* args,
tray_icon_->DisplayBalloon(icon, title, content); tray_icon_->DisplayBalloon(icon, title, content);
} }
void Tray::PopContextMenu() { void Tray::PopContextMenu(mate::Arguments* args) {
tray_icon_->PopContextMenu(); gfx::Point pos;
args->GetNext(&pos);
tray_icon_->PopContextMenu(pos);
} }
void Tray::SetContextMenu(mate::Arguments* args, Menu* menu) { void Tray::SetContextMenu(mate::Arguments* args, Menu* menu) {

View file

@ -58,7 +58,7 @@ class Tray : public mate::EventEmitter,
void SetTitle(mate::Arguments* args, const std::string& title); void SetTitle(mate::Arguments* args, const std::string& title);
void SetHighlightMode(mate::Arguments* args, bool highlight); void SetHighlightMode(mate::Arguments* args, bool highlight);
void DisplayBalloon(mate::Arguments* args, const mate::Dictionary& options); void DisplayBalloon(mate::Arguments* args, const mate::Dictionary& options);
void PopContextMenu(); void PopContextMenu(mate::Arguments* args);
void SetContextMenu(mate::Arguments* args, Menu* menu); void SetContextMenu(mate::Arguments* args, Menu* menu);
private: private:

View file

@ -26,7 +26,7 @@ void TrayIcon::DisplayBalloon(const gfx::Image& icon,
const base::string16& contents) { const base::string16& contents) {
} }
void TrayIcon::PopContextMenu() { void TrayIcon::PopContextMenu(const gfx::Point& pos) {
} }
void TrayIcon::NotifyClicked(const gfx::Rect& bounds) { void TrayIcon::NotifyClicked(const gfx::Rect& bounds) {

View file

@ -46,7 +46,7 @@ class TrayIcon {
const base::string16& title, const base::string16& title,
const base::string16& contents); const base::string16& contents);
virtual void PopContextMenu(); virtual void PopContextMenu(const gfx::Point& pos);
// Set the context menu for this icon. // Set the context menu for this icon.
virtual void SetContextMenu(ui::SimpleMenuModel* menu_model) = 0; virtual void SetContextMenu(ui::SimpleMenuModel* menu_model) = 0;

View file

@ -62,24 +62,7 @@ void NotifyIcon::HandleClickEvent(const gfx::Point& cursor_pos,
} }
NotifyRightClicked(gfx::Rect(rect)); NotifyRightClicked(gfx::Rect(rect));
PopContextMenu(cursor_pos);
if (!menu_model_)
return;
// Set our window as the foreground window, so the context menu closes when
// we click away from it.
if (!SetForegroundWindow(window_))
return;
views::MenuRunner menu_runner(
menu_model_,
views::MenuRunner::CONTEXT_MENU | views::MenuRunner::HAS_MNEMONICS);
ignore_result(menu_runner.RunMenuAt(
NULL,
NULL,
gfx::Rect(cursor_pos, gfx::Size()),
views::MENU_ANCHOR_TOPLEFT,
ui::MENU_SOURCE_MOUSE));
} }
void NotifyIcon::ResetIcon() { void NotifyIcon::ResetIcon() {
@ -152,6 +135,23 @@ void NotifyIcon::DisplayBalloon(const gfx::Image& icon,
LOG(WARNING) << "Unable to create status tray balloon."; LOG(WARNING) << "Unable to create status tray balloon.";
} }
void NotifyIcon::PopContextMenu(const gfx::Point& pos) {
// Set our window as the foreground window, so the context menu closes when
// we click away from it.
if (!SetForegroundWindow(window_))
return;
views::MenuRunner menu_runner(
menu_model_,
views::MenuRunner::CONTEXT_MENU | views::MenuRunner::HAS_MNEMONICS);
ignore_result(menu_runner.RunMenuAt(
NULL,
NULL,
gfx::Rect(pos, gfx::Size()),
views::MENU_ANCHOR_TOPLEFT,
ui::MENU_SOURCE_MOUSE));
}
void NotifyIcon::SetContextMenu(ui::SimpleMenuModel* menu_model) { void NotifyIcon::SetContextMenu(ui::SimpleMenuModel* menu_model) {
menu_model_ = menu_model; menu_model_ = menu_model;
} }

View file

@ -49,6 +49,7 @@ class NotifyIcon : public TrayIcon {
void DisplayBalloon(const gfx::Image& icon, void DisplayBalloon(const gfx::Image& icon,
const base::string16& title, const base::string16& title,
const base::string16& contents) override; const base::string16& contents) override;
void PopContextMenu(const gfx::Point& pos) override;
void SetContextMenu(ui::SimpleMenuModel* menu_model) override; void SetContextMenu(ui::SimpleMenuModel* menu_model) override;
private: private: