**
** If you have questions regarding the use of this file, please contact
** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
+
** $QT_END_LICENSE$
**
****************************************************************************/
#ifndef FULLSCREENEXITBUTTON_H
#define FULLSCREENEXITBUTTON_H
-#include <QtGui/qtoolbutton.h>
-#include <QtGui/qevent.h>
+#include <QToolButton>
+#include <QEvent>
#include <QTimer>
class FullScreenExitButton : public QToolButton
public:
inline explicit FullScreenExitButton(QWidget *parent);
+public slots:
+ inline void reenable();
protected:
inline bool eventFilter(QObject *obj, QEvent *ev);
private:
- QTimer timer;
+ QTimer hide_timer;
};
FullScreenExitButton::FullScreenExitButton(QWidget *parent)
setAutoFillBackground(true);
// hide after 4s of inactivity
- connect(&timer, SIGNAL(timeout()), this, SLOT(hide()));
- timer.setInterval(4000);
- timer.setSingleShot(true);
+ connect(&hide_timer, SIGNAL(timeout()), this, SLOT(hide()));
+ hide_timer.setInterval(4000);
+ hide_timer.setSingleShot(true);
// install an event filter to listen for the parent's events
parent->installEventFilter(this);
bool FullScreenExitButton::eventFilter(QObject *obj, QEvent *ev)
{
+ if(!isEnabled())
+ return QToolButton::eventFilter(obj, ev);
if (obj != parent())
return QToolButton::eventFilter(obj, ev);
setVisible(isFullScreen);
if (isFullScreen)
raise();
- timer.start();
+ hide_timer.start();
break;
// fall through
case QEvent::Resize:
if (isVisible()) {
move(parent->width() - width(), parent->height() - height());
- timer.start();
+ hide_timer.start();
}
break;
default:
return QToolButton::eventFilter(obj, ev);
}
+void FullScreenExitButton::reenable()
+{
+ setEnabled(true);
+
+ const QWidget *parent = parentWidget();
+ const bool isFullScreen = parent->windowState() & Qt::WindowFullScreen;
+ setVisible(isFullScreen);
+ if (isFullScreen)
+ raise();
+ hide_timer.start();
+}
+
#endif
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include "connectdialog.h"
-#include "fullscreenexitbutton.h"
#include "keymenu.h"
#include "mainwindow.h"
#include "preferences.h"
MainWindow::MainWindow(QString url, int quality, int listen_port, bool view_only):
QMainWindow(0),
vnc_view(0),
- scroll_area(new ScrollArea(0)),
+ scroll_area(new ScrollArea(this)),
input_toolbuttons(new QActionGroup(this)),
key_menu(0)
{
setCentralWidget(scroll_area);
- FullScreenExitButton* fullscreen_exit_button = new FullScreenExitButton(this);
- connect(fullscreen_exit_button, SIGNAL(clicked()),
+ connect(scroll_area, SIGNAL(fullscreenButtonClicked()),
this, SLOT(toggleFullscreen()));
grabZoomKeys(true);
#ifndef SCROLLAREA_H
#define SCROLLAREA_H
+#include "fullscreenexitbutton.h"
+
#include <QScrollArea>
#include <QLabel>
#include <QTimer>
public:
explicit ScrollArea(QWidget *parent):
QScrollArea(parent),
- message(this)
+ message(this),
+ fullscreen_exit_button(parent) //owned by parent!
{
message.setVisible(false);
message.setAlignment(Qt::AlignCenter);
message.setAutoFillBackground(true);
message_timer.setSingleShot(true);
- message_timer.setInterval(2500);
+ message_timer.setInterval(4000);
connect(&message_timer, SIGNAL(timeout()),
&message, SLOT(hide()));
+ connect(&fullscreen_exit_button, SIGNAL(clicked()),
+ this, SIGNAL(fullscreenButtonClicked()));
+
+ button_reenable_timer.setSingleShot(true);
+ button_reenable_timer.setInterval(500);
+ connect(&button_reenable_timer, SIGNAL(timeout()),
+ &fullscreen_exit_button, SLOT(reenable()));
+
#ifdef Q_WS_MAEMO_5
// disable overshooting because it somehow causes repaint events for the whole widget (slow)
QAbstractKineticScroller *scroller = property("kineticScroller").value<QAbstractKineticScroller *>();
//provided for convenience
void showMessage(QString /*title*/, QString msg) { showMessage(msg); }
+
+signals:
+ void fullscreenButtonClicked();
protected:
virtual void resizeEvent(QResizeEvent* ev) {
QScrollArea::resizeEvent(ev);
}
virtual void scrollContentsBy(int dx, int dy) {
QScrollArea::scrollContentsBy(dx, dy);
- if(widget())
- message.hide(); //overlay-widget slows down scrolling
+ if(widget()) {
+ //overlay-widgets slow down scrolling
+ message.hide();
+ fullscreen_exit_button.hide();
+ fullscreen_exit_button.setEnabled(false);
+ button_reenable_timer.start();
+ }
}
private:
QLabel message;
QTimer message_timer;
+ FullScreenExitButton fullscreen_exit_button;
+ QTimer button_reenable_timer;
};
#endif