From db77ff9d0f5a6ac621cbcccfd02c20b81cbdd733 Mon Sep 17 00:00:00 2001 From: Svornost <11434-svornost@users.noreply.gitgud.io> Date: Wed, 20 Dec 2023 12:00:10 -0500 Subject: [PATCH] Add context menu item to allow saving images from FCHost. --- FCHost/fchost/fchost_handler.cc | 29 +++++++++++++++++++++++++++++ FCHost/fchost/fchost_handler.h | 13 +++++++++++++ 2 files changed, 42 insertions(+) diff --git a/FCHost/fchost/fchost_handler.cc b/FCHost/fchost/fchost_handler.cc index 90289beccac..51fa309b5d2 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 7465da99176..0b9577556f0 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); -- GitLab