[solved] Mac: MenuBar im FullScreen-Modus nervt

Alles rund um die Programmierung mit Qt
Antworten
phil collins
Beiträge: 19
Registriert: 22. August 2007 17:35

[solved] Mac: MenuBar im FullScreen-Modus nervt

Beitrag von phil collins »

Hi.

Ich habe eine Qt-Anwendung für OSX, die im FullScreen-Modus läuft. Leider nervt mich dabei, dass sich ständig die native Menuleiste einblendet, wenn ich mit der Maus den oberen Bildrand berühre. Hat jemand eine Idee, wie ich dieses Verhalten unterdrücken kann?
Zuletzt geändert von phil collins am 31. Oktober 2008 10:30, insgesamt 1-mal geändert.
Euer Phil.
phil collins
Beiträge: 19
Registriert: 22. August 2007 17:35

Beitrag von phil collins »

Ok, nach einem mehr oder weniger ausführlichen Studium der qapplication_mac.cpp bin ich jetzt etwas schlauer: Die QApplication filtert MouseMove-Events raus, deren vertikale Position des Mauszeigers = 0 ist. Anstatt das Carbon-Event in das entsprechende QMouseEvent zu konvertieren ruft QApplication an dieser Stelle ShowMenuBar() auf.
Um das zu umgehen, schreibt man am besten eine eigene QApplication und überläd die virtuelle Funktion filterMacEvent().

Code: Alles auswählen

#include <QApplication>
#include <QMouseEvent>
#include <QWidget>

#include <Carbon/Carbon.h>

class App : public QApplication
{
public:
	App(int argc, char** argv) :
		QApplication(argc, argv)
	{}

	bool macEventFilter(EventHandlerCallRef /*caller*/, EventRef event) {
		UInt32 ekind  = GetEventKind(event);
		UInt32 eclass = GetEventClass(event);
		if(eclass == kEventClassMouse && ekind == kEventMouseMoved) {
			Point p;
			GetEventParameter(event, kEventParamMouseLocation, typeQDPoint, NULL, sizeof(p), NULL, &p);
			if(p.v == 0 && activeWindow()) {
				postEvent(activeWindow(), new QMouseEvent(QEvent::MouseMove, QPoint(p.h, p.v),
						Qt::NoButton, Qt::NoButton, Qt::NoModifier));
				return true;
			}
		}
		return false;
	}
};

int main(int argc, char **argv) {
	App app(argc, argv);
	QWidget w;
	w.showFullScreen();
	w.raise();
	return app.exec();
}
Das funktioniert, rockt, und meine FullScreen-App ist endlich wieder glücklich!!! :wink:
Euer Phil.
Antworten