mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-05-21 04:13:50 +00:00
fix: macOS deep links after wxWidgets 3.3.2 upgrade (#13737)
Fix macOS orcaslicer:// deep links after wxWidgets 3.3.2 upgrade Install an OrcaSlicer-owned kAEGetURL Apple Event handler from on_init_inner(). The wxWidgets 3.3.2 handler registered in applicationWillFinishLaunching: stopped delivering URL events to GUI_App::MacOpenURL on macOS (#13119), so links from Printables / Thingiverse opened a blank project instead of importing the model. Registering our own handler late in startup is last-writer-wins on NSAppleEventManager and routes back to the existing MacOpenURL -> start_download path, restoring the pre-upgrade behavior without touching wxWidgets. Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -687,6 +687,8 @@ if (APPLE)
|
|||||||
GUI/Mouse3DHandlerMac.mm
|
GUI/Mouse3DHandlerMac.mm
|
||||||
GUI/InstanceCheckMac.mm
|
GUI/InstanceCheckMac.mm
|
||||||
GUI/InstanceCheckMac.h
|
GUI/InstanceCheckMac.h
|
||||||
|
GUI/DeepLinkHandlerMac.mm
|
||||||
|
GUI/DeepLinkHandlerMac.h
|
||||||
GUI/GUI_UtilsMac.mm
|
GUI/GUI_UtilsMac.mm
|
||||||
GUI/wxMediaCtrl2.mm
|
GUI/wxMediaCtrl2.mm
|
||||||
GUI/wxMediaCtrl2.h
|
GUI/wxMediaCtrl2.h
|
||||||
|
|||||||
16
src/slic3r/GUI/DeepLinkHandlerMac.h
Normal file
16
src/slic3r/GUI/DeepLinkHandlerMac.h
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
#ifndef slic3r_GUI_DeepLinkHandlerMac_h_
|
||||||
|
#define slic3r_GUI_DeepLinkHandlerMac_h_
|
||||||
|
|
||||||
|
namespace Slic3r {
|
||||||
|
namespace GUI {
|
||||||
|
|
||||||
|
// Re-registers a Cocoa Apple Event handler for kInternetEventClass/kAEGetURL.
|
||||||
|
// Works around a regression observed after upgrading to wxWidgets 3.3.2 on
|
||||||
|
// macOS Tahoe (#13119) where wxWidgets' built-in handler is registered but
|
||||||
|
// never fires for orcaslicer:// deep links.
|
||||||
|
void register_mac_deep_link_handler();
|
||||||
|
|
||||||
|
} // namespace GUI
|
||||||
|
} // namespace Slic3r
|
||||||
|
|
||||||
|
#endif
|
||||||
41
src/slic3r/GUI/DeepLinkHandlerMac.mm
Normal file
41
src/slic3r/GUI/DeepLinkHandlerMac.mm
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
#import <AppKit/AppKit.h>
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
#include <boost/log/trivial.hpp>
|
||||||
|
|
||||||
|
#include "DeepLinkHandlerMac.h"
|
||||||
|
#include "GUI_App.hpp"
|
||||||
|
|
||||||
|
@interface OrcaDeepLinkHandler : NSObject
|
||||||
|
- (void)handleGetURLEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)reply;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation OrcaDeepLinkHandler
|
||||||
|
- (void)handleGetURLEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)reply
|
||||||
|
{
|
||||||
|
NSString *url = [[event paramDescriptorForKeyword:keyDirectObject] stringValue];
|
||||||
|
if (url == nil || url.length == 0)
|
||||||
|
return;
|
||||||
|
BOOST_LOG_TRIVIAL(info) << "Deep link received: " << [url UTF8String];
|
||||||
|
Slic3r::GUI::wxGetApp().MacOpenURL(wxString::FromUTF8([url UTF8String]));
|
||||||
|
}
|
||||||
|
@end
|
||||||
|
|
||||||
|
namespace Slic3r {
|
||||||
|
namespace GUI {
|
||||||
|
|
||||||
|
void register_mac_deep_link_handler()
|
||||||
|
{
|
||||||
|
static OrcaDeepLinkHandler *handler = nil;
|
||||||
|
if (handler == nil)
|
||||||
|
handler = [[OrcaDeepLinkHandler alloc] init];
|
||||||
|
|
||||||
|
[[NSAppleEventManager sharedAppleEventManager]
|
||||||
|
setEventHandler:handler
|
||||||
|
andSelector:@selector(handleGetURLEvent:withReplyEvent:)
|
||||||
|
forEventClass:kInternetEventClass
|
||||||
|
andEventID:kAEGetURL];
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace GUI
|
||||||
|
} // namespace Slic3r
|
||||||
@@ -100,6 +100,9 @@
|
|||||||
#include "Mouse3DController.hpp"
|
#include "Mouse3DController.hpp"
|
||||||
#include "RemovableDriveManager.hpp"
|
#include "RemovableDriveManager.hpp"
|
||||||
#include "InstanceCheck.hpp"
|
#include "InstanceCheck.hpp"
|
||||||
|
#ifdef __APPLE__
|
||||||
|
#include "DeepLinkHandlerMac.h"
|
||||||
|
#endif
|
||||||
#include "NotificationManager.hpp"
|
#include "NotificationManager.hpp"
|
||||||
#include "UnsavedChangesDialog.hpp"
|
#include "UnsavedChangesDialog.hpp"
|
||||||
#include "SavePresetDialog.hpp"
|
#include "SavePresetDialog.hpp"
|
||||||
@@ -2547,6 +2550,12 @@ std::string get_system_info()
|
|||||||
bool GUI_App::on_init_inner()
|
bool GUI_App::on_init_inner()
|
||||||
{
|
{
|
||||||
wxLog::SetActiveTarget(new wxBoostLog());
|
wxLog::SetActiveTarget(new wxBoostLog());
|
||||||
|
|
||||||
|
#ifdef __APPLE__
|
||||||
|
// Override wxWidgets' kAEGetURL handler so orcaslicer:// deep links keep
|
||||||
|
// working after the wxWidgets 3.3.2 upgrade on macOS (#13119).
|
||||||
|
register_mac_deep_link_handler();
|
||||||
|
#endif
|
||||||
#if BBL_RELEASE_TO_PUBLIC
|
#if BBL_RELEASE_TO_PUBLIC
|
||||||
wxLog::SetLogLevel(wxLOG_Message);
|
wxLog::SetLogLevel(wxLOG_Message);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user