~ubuntu-branches/ubuntu/precise/unity-2d/precise-security

« back to all changes in this revision

Viewing changes to panel/applets/appname/appnameapplet.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Didier Roche
  • Date: 2011-08-11 21:22:18 UTC
  • mfrom: (1.1.18 upstream)
  • Revision ID: james.westby@ubuntu.com-20110811212218-vjwi8txoyl6g7upb
Tags: 4.0.0-0ubuntu1
* New upstream release:
  - [launcher] Impossible to keep KDE Apps in Launcher (LP: #741129)
  - [dash] Background should be blurred (LP: #823326)
  - No 'safely remove' option is present in the unity menu when a usb disk
    is inserted (LP: #660010)
  - Quicklist item "Keep In Launcher" should be "Keep in launcher" as design
    (LP: #795422)
  - [launcher] ESC doesn't dismiss launcher when activated with Alt+F1
    (LP: #812792)
  - [dash] Background wallpaper shifted when using a non compositing window
    manager (LP: #823295)
  - [launcher] Bottom gradient appears too early (LP: #823877)
  - mute/unmute sound when user clicks on sound applet using scroll button
    or middle mouse button (LP: #609860)
  - Secondary activate (i.e. middle click) support for indicators advanced
    usage (LP: #812933)
  - Unused GConfItemQmlWrapper dep found (LP: #821880)
* debian/control:
  - bump libunity-core-4.0-dev, libnux-1.0-dev
  - recommends lenses and not places anymore. Adding music lens

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
// Local
26
26
#include "croppedlabel.h"
27
27
#include "menubarwidget.h"
 
28
#include "panelstyle.h"
28
29
#include "windowhelper.h"
29
30
 
30
31
// Unity-2d
31
32
#include <debug_p.h>
32
33
#include <keyboardmodifiersmonitor.h>
 
34
#include <launcherclient.h>
33
35
 
34
36
// Bamf
35
37
#include <bamf-application.h>
46
48
#include <QApplication>
47
49
#include <QDesktopWidget>
48
50
 
49
 
static const char* METACITY_DIR = "/usr/share/themes/Ambiance/metacity-1";
50
 
 
51
 
static const int WINDOW_BUTTONS_RIGHT_MARGIN = 4;
52
 
 
53
51
static const int APPNAME_LABEL_LEFT_MARGIN = 6;
54
52
 
55
53
namespace Unity2d
58
56
class WindowButton : public QAbstractButton
59
57
{
60
58
public:
61
 
    WindowButton(const QString& prefix, QWidget* parent = 0)
 
59
    WindowButton(const PanelStyle::WindowButtonType& buttonType, QWidget* parent = 0)
62
60
    : QAbstractButton(parent)
63
 
    , m_prefix(prefix)
64
 
    , m_normalPix(loadPix("normal"))
65
 
    , m_hoverPix(loadPix("prelight"))
66
 
    , m_downPix(loadPix("pressed"))
 
61
    , m_buttonType(buttonType)
67
62
    {
68
 
        setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Minimum);
 
63
        loadPixmaps();
 
64
        if (buttonType == PanelStyle::MinimizeWindowButton) {
 
65
            setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Minimum);
 
66
        } else {
 
67
            setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
 
68
        }
69
69
        setAttribute(Qt::WA_Hover);
70
70
    }
71
71
 
75
75
    }
76
76
 
77
77
protected:
 
78
    bool event(QEvent* ev)
 
79
    {
 
80
        if (ev->type() == QEvent::PaletteChange) {
 
81
            loadPixmaps();
 
82
        }
 
83
        return QAbstractButton::event(ev);
 
84
    }
 
85
 
78
86
    void paintEvent(QPaintEvent*)
79
87
    {
80
88
        QPainter painter(this);
86
94
        } else {
87
95
            pix = m_normalPix;
88
96
        }
89
 
        painter.drawPixmap((width() - pix.width()) / 2, (height() - pix.height()) / 2, pix);
 
97
        int posX;
 
98
        if (m_buttonType == PanelStyle::CloseWindowButton) {
 
99
            posX = width() - pix.width();
 
100
        } else {
 
101
            posX = 0;
 
102
        }
 
103
        painter.drawPixmap(posX, (height() - pix.height()) / 2, pix);
90
104
    }
91
105
 
92
106
private:
93
 
    QString m_prefix;
 
107
    PanelStyle::WindowButtonType m_buttonType;
94
108
    QPixmap m_normalPix;
95
109
    QPixmap m_hoverPix;
96
110
    QPixmap m_downPix;
97
111
 
98
 
    QPixmap loadPix(const QString& name)
 
112
    void loadPixmaps()
99
113
    {
100
 
        QString path = QString("%1/%2_focused_%3.png")
101
 
            .arg(METACITY_DIR)
102
 
            .arg(m_prefix)
103
 
            .arg(name);
104
 
        return QPixmap(path);
 
114
        PanelStyle* style = PanelStyle::instance();
 
115
        m_normalPix = style->windowButtonPixmap(m_buttonType, PanelStyle::NormalState);
 
116
        m_hoverPix = style->windowButtonPixmap(m_buttonType, PanelStyle::PrelightState);
 
117
        m_downPix = style->windowButtonPixmap(m_buttonType, PanelStyle::PressedState);
105
118
    }
106
119
};
107
120
 
133
146
        m_windowButtonWidget = new QWidget;
134
147
        m_windowButtonWidget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Minimum);
135
148
        QHBoxLayout* layout = new QHBoxLayout(m_windowButtonWidget);
136
 
        layout->setContentsMargins(0, 0, WINDOW_BUTTONS_RIGHT_MARGIN, 0);
 
149
        layout->setMargin(0);
137
150
        layout->setSpacing(0);
138
 
        m_closeButton = new WindowButton("close");
139
 
        m_minimizeButton = new WindowButton("minimize");
140
 
        m_maximizeButton = new WindowButton("unmaximize");
 
151
        m_closeButton = new WindowButton(PanelStyle::CloseWindowButton);
 
152
        m_minimizeButton = new WindowButton(PanelStyle::MinimizeWindowButton);
 
153
        m_maximizeButton = new WindowButton(PanelStyle::UnmaximizeWindowButton);
141
154
        layout->addWidget(m_closeButton);
142
155
        layout->addWidget(m_minimizeButton);
143
156
        layout->addWidget(m_maximizeButton);
 
157
        m_windowButtonWidget->setFixedWidth(LauncherClient::MaximumWidth);
144
158
        QObject::connect(m_closeButton, SIGNAL(clicked()), m_windowHelper, SLOT(close()));
145
159
        QObject::connect(m_minimizeButton, SIGNAL(clicked()), m_windowHelper, SLOT(minimize()));
146
160
        QObject::connect(m_maximizeButton, SIGNAL(clicked()), m_windowHelper, SLOT(unmaximize()));
186
200
    QHBoxLayout* layout = new QHBoxLayout(this);
187
201
    layout->setMargin(0);
188
202
    layout->setSpacing(0);
189
 
    layout->addWidget(d->m_windowButtonWidget, 0, Qt::AlignLeft);
 
203
    layout->addWidget(d->m_windowButtonWidget);
190
204
    layout->addWidget(d->m_label);
191
205
    layout->addWidget(d->m_menuBarWidget);
192
206
 
205
219
    bool isMaximized = d->m_windowHelper->isMaximized();
206
220
    bool isUserVisibleApp = app ? app->user_visible() : false;
207
221
    bool isOnSameScreen = d->m_windowHelper->isMostlyOnScreen(QApplication::desktop()->screenNumber(this));
 
222
    bool isUnderMouse = rect().contains(mapFromGlobal(QCursor::pos()));
208
223
    bool showMenu = (!d->m_menuBarWidget->isEmpty() && isUserVisibleApp && isOnSameScreen)
209
 
        && (rect().contains(mapFromGlobal(QCursor::pos()))
 
224
        && (isUnderMouse
210
225
        || KeyboardModifiersMonitor::instance()->keyboardModifiers() == Qt::AltModifier
211
226
        || d->m_menuBarWidget->isOpened()
212
227
        );
213
228
    bool showLabel = !(isMaximized && showMenu) && isUserVisibleApp && isOnSameScreen;
214
229
 
215
 
    d->m_windowButtonWidget->setVisible(isOnSameScreen && isMaximized);
 
230
    d->m_windowButtonWidget->setVisible(isOnSameScreen && isMaximized && isUnderMouse);
216
231
 
217
232
    d->m_label->setVisible(showLabel);
218
233
    if (showLabel) {
234
249
 
235
250
        // Define width
236
251
        if (!isMaximized && showMenu) {
237
 
            d->m_label->setMaximumWidth(d->m_windowButtonWidget->sizeHint().width());
 
252
            d->m_label->setMaximumWidth(LauncherClient::MaximumWidth);
238
253
        } else {
239
254
            d->m_label->setMaximumWidth(QWIDGETSIZE_MAX);
240
255
        }