#define GUIAPPLICATION_H
#include "frontends/Application.h"
+#include "support/filetools.h"
#include <QApplication>
#include <QList>
+#ifdef QPA_XCB
+#include <QAbstractNativeEventFilter>
+#endif
class QAbstractItemModel;
+class QIcon;
+class QSessionManager;
+class QFont;
namespace lyx {
initialisation should be done before the instantiation of this class.
*/
class GuiApplication : public QApplication, public Application
+#ifdef QPA_XCB
+ , public QAbstractNativeEventFilter
+#endif
{
Q_OBJECT
/// \name Methods inherited from Application class
//@{
- void dispatch(FuncRequest const &);
- void dispatch(FuncRequest const &, DispatchResult & dr);
- FuncStatus getStatus(FuncRequest const & cmd) const;
- void restoreGuiSession();
- Buffer const * updateInset(Inset const * inset) const;
- int exec();
- void exit(int status);
- bool event(QEvent * e);
- bool getRgbColor(ColorCode col, RGBColor & rgbcol);
- std::string const hexName(ColorCode col);
- void registerSocketCallback(int fd, SocketCallback func);
- void unregisterSocketCallback(int fd);
- bool searchMenu(FuncRequest const & func, docstring_list & names) const;
- void handleKeyFunc(FuncCode action);
+ DispatchResult const & dispatch(FuncRequest const &) override;
+ void dispatch(FuncRequest const &, DispatchResult & dr) override;
+ FuncStatus getStatus(FuncRequest const & cmd) const override;
+ void restoreGuiSession() override;
+ Buffer const * updateInset(Inset const * inset) const override;
+ int exec() override;
+ void exit(int status) override;
+ bool event(QEvent * e) override;
+ bool getRgbColor(ColorCode col, RGBColor & rgbcol) override;
+ std::string const hexName(ColorCode col) override;
+ void registerSocketCallback(int fd, SocketCallback func) override;
+ void unregisterSocketCallback(int fd) override;
+ bool searchMenu(FuncRequest const & func, docstring_list & names) const override;
+ bool hasBufferView() const override;
+ void handleKeyFunc(FuncCode action) override;
+ bool unhide(Buffer * buf) override;
//@}
///
/// \name Methods inherited from QApplication class
//@{
- bool notify(QObject * receiver, QEvent * event);
+ bool notify(QObject * receiver, QEvent * event) override;
void commitData(QSessionManager & sm);
#ifdef Q_WS_X11
- bool x11EventFilter(XEvent * ev);
+ bool x11EventFilter(XEvent * ev) override;
+#elif defined(QPA_XCB)
+ virtual bool nativeEventFilter(const QByteArray & eventType, void * message,
+ long * result) override;
#endif
//@}
/// return a suitable monospaced font name.
QString const typewriterFontName();
+ QFont const typewriterSystemFont();
+
///
void unregisterView(GuiView * gv);
///
GuiView & view(int id) const;
+
+ /// Current ratio between physical pixels and device-independent pixels
+ double pixelRatio() const;
+
+ /// How to load image files
+ support::search_mode imageSearchMode() const {
+#if QT_VERSION >= 0x050000
+ return pixelRatio() > 1 ? support::check_hidpi : support::must_exist;
+#else
+ return support::must_exist;
+#endif
+ }
+
+ /// return true if the key is part of a shortcut
+ bool queryKeySym(KeySymbol const & key, KeyModifier state) const;
///
void processKeySym(KeySymbol const & key, KeyModifier state);
/// return the status bar state string
void gotoBookmark(unsigned int idx, bool openFile, bool switchToBuffer);
/// Start a long operation with some cancel possibility (button or ESC)
- void startLongOperation();
+ void startLongOperation() override;
/// This needs to be periodically called to avoid freezing the GUI
- bool longOperationCancelled();
+ bool longOperationCancelled() override;
/// Stop the long operation mode (i.e., release the GUI)
- void stopLongOperation();
+ void stopLongOperation() override;
/// A started long operation is still in progress ?
- bool longOperationStarted();
+ bool longOperationStarted() override;
private Q_SLOTS:
///
void execBatchCommands();
void updateCurrentView(FuncRequest const & cmd, DispatchResult & dr);
///
bool closeAllViews();
+ /// Things that need to be done when the OSes session manager
+ /// requests a log out.
+ bool prepareAllViewsForLogout();
/// read the given ui (menu/toolbar) file
bool readUIFile(QString const & name, bool include = false);
///
QString iconName(FuncRequest const & f, bool unknown);
/// \return the pixmap for the given path, name and extension.
+/// in case of errors a warning is produced and an empty pixmap is returned.
QPixmap getPixmap(QString const & path, QString const & name, QString const & ext);
+/// Load the file at \param path and convert it to a pixmap.
+/// \return true on success otherwise invalidate the pixmap and return false.
+/// The caller is responsible for error reporting.
+bool getPixmap(QPixmap & pixmap, QString const & path);
/// \return an icon for the given action.
QIcon getIcon(FuncRequest const & f, bool unknown);