diff --git a/FCHost/fchost/fchost_handler.cc b/FCHost/fchost/fchost_handler.cc index 90289beccac84c5e13e9db0ac6ec1de843a1c585..51fa309b5d216b3fcc786a462524d628ce31b92e 100644 --- a/FCHost/fchost/fchost_handler.cc +++ b/FCHost/fchost/fchost_handler.cc @@ -242,6 +242,35 @@ bool FCHostHandler::OnPreKeyEvent(CefRefPtr<CefBrowser> browser, } +void FCHostHandler::OnBeforeContextMenu(CefRefPtr<CefBrowser> browser, + CefRefPtr<CefFrame> frame, + CefRefPtr<CefContextMenuParams> params, + CefRefPtr<CefMenuModel> model) +{ + CEF_REQUIRE_UI_THREAD(); + + if (params->HasImageContents() && params->GetSourceUrl() != "") + model->AddItem(MENU_ID_USER_FIRST, "Save Image..."); +} + +bool FCHostHandler::OnContextMenuCommand(CefRefPtr<CefBrowser> browser, + CefRefPtr<CefFrame> frame, + CefRefPtr<CefContextMenuParams> params, + int command_id, + EventFlags event_flags) +{ + CEF_REQUIRE_UI_THREAD(); + + switch (command_id) { + case MENU_ID_USER_FIRST: + browser->GetHost()->StartDownload(params->GetSourceUrl()); + return true; + default: + return false; + } +} + + void FCHostHandler::CloseAllBrowsers(bool force_close) { if (!CefCurrentlyOn(TID_UI)) { // Execute on the UI thread. diff --git a/FCHost/fchost/fchost_handler.h b/FCHost/fchost/fchost_handler.h index 7465da991763851ede97fd1bd7a078ea267d7a67..0b9577556f096f7e3472adb719302d521561f2de 100644 --- a/FCHost/fchost/fchost_handler.h +++ b/FCHost/fchost/fchost_handler.h @@ -14,6 +14,7 @@ class FCHostHandler : public CefClient, public CefLoadHandler, public CefDownloadHandler, public CefKeyboardHandler, + public CefContextMenuHandler, private CefDialogHandler { public: explicit FCHostHandler(bool use_views); @@ -32,6 +33,7 @@ class FCHostHandler : public CefClient, virtual CefRefPtr<CefLoadHandler> GetLoadHandler() override { return this; } virtual CefRefPtr<CefDownloadHandler> GetDownloadHandler() override { return this; } virtual CefRefPtr<CefKeyboardHandler> GetKeyboardHandler() override { return this; } + virtual CefRefPtr<CefContextMenuHandler> GetContextMenuHandler() override { return this; } CefRefPtr< CefDialogHandler > GetDialogHandler() override { return this; } bool OnFileDialog(CefRefPtr<CefBrowser> browser, CefDialogHandler::FileDialogMode mode, @@ -74,6 +76,17 @@ class FCHostHandler : public CefClient, CefEventHandle os_event, bool* is_keyboard_shortcut) override; + // CefContextMenuHandler methods: + virtual void OnBeforeContextMenu(CefRefPtr<CefBrowser> browser, + CefRefPtr<CefFrame> frame, + CefRefPtr<CefContextMenuParams> params, + CefRefPtr<CefMenuModel> model) override; + virtual bool OnContextMenuCommand(CefRefPtr<CefBrowser> browser, + CefRefPtr<CefFrame> frame, + CefRefPtr<CefContextMenuParams> params, + int command_id, + EventFlags event_flags) override; + // Request that all existing browser windows close. void CloseAllBrowsers(bool force_close);