diff --git a/browser/api/atom_api_menu_gtk.cc b/browser/api/atom_api_menu_gtk.cc index 041c9f282bf..cc8de662d5e 100644 --- a/browser/api/atom_api_menu_gtk.cc +++ b/browser/api/atom_api_menu_gtk.cc @@ -4,6 +4,11 @@ #include "browser/api/atom_api_menu_gtk.h" +#include "browser/native_window.h" +#include "content/public/browser/render_widget_host_view.h" +#include "ui/gfx/point.h" +#include "ui/gfx/screen.h" + namespace atom { namespace api { @@ -16,6 +21,21 @@ MenuGtk::~MenuGtk() { } void MenuGtk::Popup(NativeWindow* native_window) { + uint32_t triggering_event_time; + gfx::Point point; + + GdkEventButton* event = native_window->GetWebContents()-> + GetRenderWidgetHostView()->GetLastMouseDown(); + if (event) { + triggering_event_time = event->time; + point = gfx::Point(event->x_root, event->y_root); + } else { + triggering_event_time = GDK_CURRENT_TIME; + point = gfx::Screen::GetNativeScreen()->GetCursorScreenPoint(); + } + + menu_gtk_.reset(new ::MenuGtk(this, model_.get())); + menu_gtk_->PopupAsContext(point, triggering_event_time); } // static diff --git a/browser/api/atom_api_menu_gtk.h b/browser/api/atom_api_menu_gtk.h index 88e05105a7f..9f1768290bc 100644 --- a/browser/api/atom_api_menu_gtk.h +++ b/browser/api/atom_api_menu_gtk.h @@ -6,12 +6,14 @@ #define ATOM_BROWSER_API_ATOM_API_MENU_GTK_H_ #include "browser/api/atom_api_menu.h" +#include "browser/ui/gtk/menu_gtk.h" namespace atom { namespace api { -class MenuGtk : public Menu { +class MenuGtk : public Menu, + public ::MenuGtk::Delegate { public: explicit MenuGtk(v8::Handle wrapper); virtual ~MenuGtk(); @@ -20,6 +22,8 @@ class MenuGtk : public Menu { virtual void Popup(NativeWindow* window) OVERRIDE; private: + scoped_ptr<::MenuGtk> menu_gtk_; + DISALLOW_COPY_AND_ASSIGN(MenuGtk); };