mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-09-28 04:54:13 +02:00
bd6bed8d61
F10 opens the menu bar in most applications and is the usual way to reach the menus without a mouse. Qt provides this on Windows but not on X11, so on Linux the key did nothing and the press fell through to whichever widget had focus. It matters more here than it might elsewhere: "&Édition" takes É for its own letter, which is not on a UK or US keyboard, so that menu has no direct Alt route at all. A window-context QShortcut rather than a key handler -- key presses go to the focused child widget, so a keyPressEvent() on the window would never see F10 while the canvas or a panel has focus. tests/qttest/tst_menubarkeyboard.cpp covers three things: that Alt and a letter opens a menu (the control), that plain F10 does nothing in Qt itself (which is why the shortcut exists, and which will fail loudly if a future Qt starts handling it), and that the shortcut mechanism opens the bar. It uses QTest instead of driving a real X server for a specific reason. xdotool on Xvfb delivers every function key with Alt held: a Qt key logger shows Key_F10 arriving with modifiers == Qt::AltModifier. --clearmodifiers, keydown/keyup pairs, --window targeting and flattening the keycode with xmodmap all made no difference. Two rounds of GUI automation therefore gave confident, wrong answers about F10 -- first that it was broken, then that this very fix did not work. QTest posts the event straight to the widget, so the key arrives as written. What the test does not cover, since initCommonActions() calls QETApp::instance() and constructing that pulls in the whole application: it repeats the wiring rather than driving QETMainWindow. Confirming the real window responds still needs someone to press F10 in a running QElectroTech. Verified by breaking it: bound to F11 instead, the test fails. Qt 5 and Qt 6 both build clean, 6/6 tests on each. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
74 lines
2.9 KiB
C++
74 lines
2.9 KiB
C++
/*
|
|
Copyright 2006-2026 The QElectroTech Team
|
|
This file is part of QElectroTech.
|
|
|
|
QElectroTech is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
QElectroTech is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
#ifndef QET_MAIN_WINDOW_H
|
|
#define QET_MAIN_WINDOW_H
|
|
#include <QMainWindow>
|
|
#include <QHash>
|
|
/**
|
|
This is the base class for the main top-level windows within
|
|
QElectroTech.
|
|
*/
|
|
class QETMainWindow : public QMainWindow {
|
|
Q_OBJECT
|
|
|
|
// constructor, destructor
|
|
public:
|
|
QETMainWindow(QWidget * = nullptr, Qt::WindowFlags = Qt::Widget);
|
|
~QETMainWindow() override;
|
|
|
|
// methods
|
|
protected:
|
|
void initCommonActions();
|
|
void initCommonMenus();
|
|
void insertMenu(QMenu *, QMenu *, bool = true);
|
|
QAction *actionForMenu(QMenu *);
|
|
|
|
protected:
|
|
void activateMenuBar();
|
|
bool event(QEvent *) override;
|
|
void dragEnterEvent(QDragEnterEvent *e) override;
|
|
void dropEvent(QDropEvent *e) override;
|
|
virtual void firstActivation(QEvent *);
|
|
|
|
// slots
|
|
public slots:
|
|
void toggleFullScreen();
|
|
void updateFullScreenAction();
|
|
void checkToolbarsmenu();
|
|
|
|
// attributes
|
|
protected:
|
|
QAction *configure_action_; ///< Launch the QElectroTech configuration dialog
|
|
QAction *fullscreen_action_; ///< Toggle full screen
|
|
QAction *whatsthis_action_; ///< Toggle "What's this" mode
|
|
QAction *about_qet_; ///< Launch the "About QElectroTech" dialog
|
|
QAction *manual_online_; ///< Launch browser on QElectroTech online manual
|
|
QAction *youtube_; ///< Launch browser on QElectroTech Youtube channel
|
|
QAction *upgrade_; ///< Launch browser on QElectroTech Windows Nightly builds
|
|
QAction *upgrade_M; ///< Launch browser on QElectroTech MAC_OS_X builds
|
|
QAction *donate_; ///< Launch browser to donate link
|
|
QAction *about_qt_; ///< launch the "About Qt" dialog
|
|
QAction *diagnostics_action_; ///< Open the diagnostics report dialog (discussion #644, step 5)
|
|
QMenu *settings_menu_; ///< Settings menu
|
|
QMenu *help_menu_; ///< Help menu
|
|
QMenu *display_toolbars_; ///< Show/hide toolbars/docks
|
|
QHash<QMenu *, QAction *> menu_actions_; ///< Store actions retrieved when inserting menus
|
|
bool first_activation_; ///< Used to detect whether the window is activated for the first time
|
|
};
|
|
#endif
|