Involves library additions:
LIBS + =-framework corefoundation-framework CARBON-LOBJC
Header file involved:
#include <objc/objc.h>
#include <objc/message.h>
Listener callback function:
BOOL Dockclickhandler (ID self,sel _cmd,...)
{
Q_unused (self)
Q_unused (_cmd)
(Qmainwindow *) Mainwindow->onhandleclickdock ();
return true;
}
Main program monitoring:
Class cls = Objc_getclass ("NSApplication");
Objc_object *appinst = Objc_msgsend ((objc_object*) CLS, Sel_registername ("sharedapplication"));
if (appinst! = NULL)
{
objc_object* delegate = Objc_msgsend (Appinst, Sel_registername ("delegate"));
Class Delclass = (Class) Objc_msgsend (Delegate, Sel_registername ("class"));
SEL Shouldhandle = Sel_registername ("applicationshouldhandlereopen:hasvisiblewindows:");
if (Class_getinstancemethod (Delclass, Shouldhandle))
{
if (Class_replacemethod (Delclass, Shouldhandle, (IMP) Dockclickhandler, "[email protected]:"))
Qdebug () << "Registered dock Click Handler (replaced original method)";
Else
Qwarning () << "Failed to replace method for dock click handler";
}
Else
{
if (Class_addmethod (Delclass, Shouldhandle, (IMP) Dockclickhandler, "[email protected]:"))
Qdebug () << "Registered Dock click handler";
Else
Qwarning () << "Failed to register Dock click handler";
}
}
Mac Listening Dock activation program