class ToolBarActionProvider;
class UiStyle;
+#ifdef Q_WS_WIN
+# include <windows.h>
+#endif
+
class GraphicalUi : public AbstractUi {
Q_OBJECT
public:
GraphicalUi(QObject *parent = 0);
+ virtual void init();
//! Access global ActionCollections.
/** These ActionCollections are associated with the main window, i.e. they contain global
inline static ContextMenuActionProvider *contextMenuActionProvider();
inline static ToolBarActionProvider *toolBarActionProvider();
inline static UiStyle *uiStyle();
+ inline static QWidget *mainWidget();
+
+ //! Force the main widget to the front and focus it (may not work in all window systems)
+ static void activateMainWidget();
+
+ //! Hide main widget (storing the current desktop if possible)
+ static void hideMainWidget();
+
+ //! Toggle main widget
+ static void toggleMainWidget();
+
+ //! Check if the main widget if (fully, in KDE) visible
+ static bool isMainWidgetVisible();
protected:
//! This is the widget we associate global actions with, typically the main window
void setMainWidget(QWidget *);
+ //! Check if the mainWidget is visible and optionally toggle its visibility
+ /** With KDE integration, we check if the mainWidget is (partially) obscured in order to determine if
+ * it should be activated or hidden. Without KDE, we need to resort to checking the current state
+ * as Qt knows it, ignoring windows covering it.
+ * @param performToggle If true, toggle the window's state in addition to checking visibility
+ * @return True, if the window is currently *not* visible (needs activation)
+ */
+ bool checkMainWidgetVisibility(bool performToggle);
+
+ //! Minimize to or restore main widget
+ virtual void minimizeRestore(bool show);
+
+ //! Whether it is allowed to hide the mainWidget
+ /** The default implementation returns false, meaning that we won't hide the mainWidget even
+ * if requested. This is to prevent hiding in case we don't have a tray icon to restore from.
+ */
+ virtual inline bool isHidingMainWidgetAllowed() const;
+
void setContextMenuActionProvider(ContextMenuActionProvider *);
void setToolBarActionProvider(ToolBarActionProvider *);
void setUiStyle(UiStyle *);
+ virtual bool eventFilter(QObject *obj, QEvent *event);
+
private:
+ static inline GraphicalUi *instance();
+
+ static GraphicalUi *_instance;
static QWidget *_mainWidget;
static QHash<QString, ActionCollection *> _actionCollections;
static ContextMenuActionProvider *_contextMenuActionProvider;
static ToolBarActionProvider *_toolBarActionProvider;
static UiStyle *_uiStyle;
-};
+ static bool _onAllDesktops;
-ContextMenuActionProvider *GraphicalUi::contextMenuActionProvider() {
- return _contextMenuActionProvider;
-}
+#ifdef Q_WS_WIN
+ DWORD _dwTickCount;
+#endif
+
+};
-ToolBarActionProvider *GraphicalUi::toolBarActionProvider() {
- return _toolBarActionProvider;
-}
+// inlines
-UiStyle *GraphicalUi::uiStyle() {
- return _uiStyle;
-}
+GraphicalUi *GraphicalUi::instance() { return _instance; }
+ContextMenuActionProvider *GraphicalUi::contextMenuActionProvider() { return _contextMenuActionProvider; }
+ToolBarActionProvider *GraphicalUi::toolBarActionProvider() { return _toolBarActionProvider; }
+UiStyle *GraphicalUi::uiStyle() { return _uiStyle; }
+QWidget *GraphicalUi::mainWidget() { return _mainWidget; }
+bool GraphicalUi::isHidingMainWidgetAllowed() const { return false; }
#endif