Fix kickoff crashing and remove additional OpenSUSE branding

This closes Bug 508
pull/2/head
Timothy Pearson 12 years ago
parent 9cf4f4be1a
commit 6f32bfd96c

@ -55,26 +55,28 @@ KNewButton::KNewButton( TQWidget* parent )
: KButton( parent ),
m_oldPos(0,0)
{
setTitle(i18n("K Menu"));
Q_ASSERT( !m_self );
m_self = this;
m_hoverTimer = -1;
m_openTimer = -1;
m_active = false;
m_hoverTimer = -1;
m_mouseInside = false;
m_drag = false;
setIconAlignment((TQ_Alignment)(AlignTop|AlignRight));
setAcceptDrops(true);
setIcon("kmenu-suse");
setDrawArrow(false);
m_movie = new TQMovie(locate("data", "kicker/pics/kmenu_basic.mng"));
m_movie->connectUpdate(this, TQT_SLOT(updateMovie()));
m_movie->connectStatus(TQT_TQOBJECT(this), TQT_SLOT(slotStatus(int)));
m_movie->connectResize(this, TQT_SLOT(slotSetSize(const TQSize&)));
setIcon("kmenu");
setIcon(KickerSettings::customKMenuIcon());
TQApplication::desktop()->screen()->installEventFilter(this);
setMouseTracking(true);
if (KickerSettings::showKMenuText())
{
setButtonText(KickerSettings::kMenuText());
setFont(KickerSettings::buttonFont());
setTextColor(KickerSettings::buttonTextColor());
}
tqrepaint();
}
KNewButton::~KNewButton()
@ -82,28 +84,15 @@ KNewButton::~KNewButton()
if ( m_self == this )
m_self = 0;
setMouseTracking(false);
delete m_movie;
}
void KNewButton::slotStatus(int status)
{
if(status == TQMovie::EndOfLoop)
slotStopAnimation();
}
TQColor KNewButton::borderColor() const
void KNewButton::drawButton(TQPainter *p)
{
TQImage img = m_active_pixmap.convertToImage();
for (int i = 0; i < img.width(); ++i) {
QRgb rgb = img.pixel(orientation() == Qt::Horizontal ? img.width() - i - 1 :
i, 2);
if (tqGreen(rgb) > 0x50)
return rgb;
}
return img.pixel( orientation() == Qt::Horizontal ? img.width() - 2 : 2, 2);
if (KickerSettings::showDeepButtons())
PanelPopupButton::drawDeepButton(p);
else
PanelPopupButton::drawButton(p);
}
void KNewButton::show()
@ -111,103 +100,12 @@ void KNewButton::show()
KButton::show();
if (KickerSettings::firstRun()) {
TQTimer::singleShot(500,this,TQT_SLOT(slotExecMenu()));
TQTimer::singleShot(0,this,TQT_SLOT(slotExecMenu()));
KickerSettings::setFirstRun(false);
KickerSettings::writeConfig();
}
}
void KNewButton::updateMovie()
{
m_oldPos = TQPoint( -1, -1 );
drawEye();
if (!m_active && m_movie->running())
m_movie->pause();
}
void KNewButton::setPopupDirection(KPanelApplet::Direction d)
{
KButton::setPopupDirection(d);
delete m_movie;
switch (d) {
case KPanelApplet::Left:
setIconAlignment((TQ_Alignment)(AlignTop|AlignLeft));
m_movie = new TQMovie(locate("data", "kicker/pics/kmenu_vertical.mng"));
break;
case KPanelApplet::Right:
setIconAlignment((TQ_Alignment)(AlignTop|AlignRight));
m_movie = new TQMovie(locate("data", "kicker/pics/kmenu_vertical.mng"));
break;
case KPanelApplet::Up:
setIconAlignment((TQ_Alignment)(AlignTop|AlignHCenter));
m_movie = new TQMovie(locate("data", "kicker/pics/kmenu_basic.mng"));
break;
case KPanelApplet::Down:
setIconAlignment((TQ_Alignment)(AlignBottom|AlignHCenter));
m_movie = new TQMovie(locate("data", "kicker/pics/kmenu_flipped.mng"));
}
m_movie->connectUpdate(this, TQT_SLOT(updateMovie()));
m_movie->connectStatus(TQT_TQOBJECT(this), TQT_SLOT(slotStatus(int)));
m_movie->connectResize(this, TQT_SLOT(slotSetSize(const TQSize&)));
}
void KNewButton::slotSetSize(const TQSize& s)
{
m_iconSize = s;
}
double KNewButton::buttonScaleFactor(const TQSize& s) const
{
double sf = 1.0;
switch (popupDirection()) {
case KPanelApplet::Left:
case KPanelApplet::Right:
// sf = kMin(double(s.width()) / m_iconSize.height(), double(s.height()) / m_iconSize.width());
// break;
case KPanelApplet::Up:
case KPanelApplet::Down:
sf = kMin(double(s.width()) / m_iconSize.width(), double(s.height()) / m_iconSize.height());
break;
}
if (sf > 0.8) sf = 1.0;
return sf;
}
int KNewButton::widthForHeight(int height) const
{
int r = m_iconSize.width() * buttonScaleFactor(TQSize(m_iconSize.width(), height));
if (!m_movie->running() && height != m_active_pixmap.height())
{
KNewButton* that = const_cast<KNewButton*>(this);
TQTimer::singleShot(0, that, TQT_SLOT(slotStopAnimation()));
}
return r;
}
int KNewButton::preferredDimension(int panelDim) const
{
return kMax(m_icon.width(), m_icon.height());
}
int KNewButton::heightForWidth(int width) const
{
int r = m_iconSize.width() * buttonScaleFactor(TQSize(width, m_iconSize.height()));
if (!m_movie->running() && width != m_active_pixmap.width())
{
KNewButton* that = const_cast<KNewButton*>(this);
TQTimer::singleShot(0, that, TQT_SLOT(slotStopAnimation()));
}
return r;
}
bool KNewButton::eventFilter(TQObject *o, TQEvent *e)
{
if (e->type() == TQEvent::MouseButtonRelease ||
@ -223,75 +121,9 @@ bool KNewButton::eventFilter(TQObject *o, TQEvent *e)
}
}
if (KickerSettings::kickoffDrawGeekoEye() && e->type() == TQEvent::MouseMove)
{
TQMouseEvent *me = TQT_TQMOUSEEVENT(e);
if ((me->state() & Qt::MouseButtonMask) == Qt::NoButton)
drawEye();
}
return KButton::eventFilter(o, e);
}
void KNewButton::drawEye()
{
#define eye_x 62
#define eye_y 13
TQPoint mouse = TQCursor::pos();
TQPoint me = mapToGlobal(TQPoint(eye_x, eye_y));
double a = atan2(mouse.y() - me.y(), mouse.x() - me.x());
int dx = int(2.1 * cos(a));
int dy = int(2.1 * sin(a));
TQPoint newpos(eye_x+dx,eye_y+dy);
if (newpos!=m_oldPos) {
m_oldPos = newpos;
TQPixmap pixmap = m_active_pixmap;
double sf = 1.0;
if(!m_movie->framePixmap().isNull())
{
pixmap = m_movie->framePixmap();
pixmap.detach();
m_iconSize = pixmap.size();
sf = buttonScaleFactor(size());
if (KickerSettings::kickoffDrawGeekoEye()) {
TQPainter p(&pixmap);
p.setPen(white);
p.setBrush(white);
// p.setPen(TQColor(110,185,55));
p.drawRect(eye_x+dx, eye_y+dy, 2, 2);
p. end();
}
}
TQWMatrix matrix;
switch (popupDirection()) {
case KPanelApplet::Left:
matrix.scale(sf, -sf);
matrix.rotate(90);
break;
case KPanelApplet::Up:
matrix.scale(sf, sf);
break;
case KPanelApplet::Right:
matrix.scale(sf, -sf);
matrix.rotate(90);
break;
case KPanelApplet::Down:
matrix.scale(sf, sf);
break;
}
m_active_pixmap = pixmap.xForm(matrix);
repaint(false);
}
#undef eye_x
#undef eye_y
}
void KNewButton::enterEvent(TQEvent* e)
{
KButton::enterEvent(e);
@ -315,15 +147,8 @@ void KNewButton::enterEvent(TQEvent* e)
}
m_active = true;
m_movie->unpause();
m_movie->restart();
}
void KNewButton::rewindMovie()
{
m_oldPos = TQPoint( -1, -1 );
m_movie->unpause();
}
void KNewButton::dragEnterEvent(TQDragEnterEvent* /*e*/)
{
@ -369,31 +194,12 @@ void KNewButton::mouseMoveEvent(TQMouseEvent* e)
}
}
void KNewButton::slotStopAnimation()
{
m_active = false;
m_movie->pause();
m_movie->restart();
TQTimer::singleShot(200, this, TQT_SLOT(rewindMovie()));
}
const TQPixmap& KNewButton::labelIcon() const
{
return m_active_pixmap;
}
void KNewButton::slotExecMenu()
{
if (m_openTimer != -1)
killTimer(m_openTimer);
m_openTimer = startTimer(TQApplication::doubleClickInterval() * 3);
if (m_active)
{
m_active = false;
m_movie->pause();
m_movie->restart();
}
KButton::slotExecMenu();
@ -401,40 +207,12 @@ void KNewButton::slotExecMenu()
assert(!KickerTip::tippingEnabled());
assert(dynamic_cast<KMenu*>(m_popup));
disconnect(dynamic_cast<KMenu*>(m_popup), TQT_SIGNAL(aboutToHide()), this,
TQT_SLOT(slotStopAnimation()));
connect(dynamic_cast<KMenu*>(m_popup), TQT_SIGNAL(aboutToHide()),
TQT_SLOT(slotStopAnimation()));
m_popup->move(KickerLib::popupPosition(popupDirection(), m_popup, this));
// I wish KMenu would properly done itself when it closes. But it doesn't.
bool useEffect = true; // could be TQApplication::isEffectEnabled()
useEffect = false; // too many TQt bugs to be useful
if (m_drag)
useEffect = false;
m_drag = false; // once is enough
if (useEffect)
{
switch (popupDirection()) {
case KPanelApplet::Left:
qScrollEffect(m_popup, TQEffects::LeftScroll);
break;
case KPanelApplet::Up:
qScrollEffect(m_popup, TQEffects::UpScroll);
break;
case KPanelApplet::Right:
qScrollEffect(m_popup, TQEffects::RightScroll);
break;
case KPanelApplet::Down:
qScrollEffect(m_popup, TQEffects::DownScroll);
break;
}
}
else
static_cast<KMenu*>(m_popup)->show();
static_cast<KMenu*>(m_popup)->show();
}
void KNewButton::timerEvent(TQTimerEvent* e)
@ -447,9 +225,4 @@ void KNewButton::timerEvent(TQTimerEvent* e)
killTimer(m_hoverTimer);
m_hoverTimer = -1;
}
if (e->timerId() == m_openTimer)
{
killTimer(m_openTimer);
m_openTimer = -1;
}
}

@ -28,7 +28,6 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "kbutton.h"
#include <tqmovie.h>
#include <tqpoint.h>
/**
@ -43,25 +42,10 @@ public:
~KNewButton();
static KNewButton *self() { return m_self; }
void loadConfig( const KConfigGroup& config );
virtual const TQPixmap& labelIcon() const;
virtual int widthForHeight(int height) const;
virtual int preferredDimension(int panelDim) const;
virtual int heightForWidth(int width) const;
TQColor borderColor() const;
//virtual void setPopupDirection(KPanelApplet::Direction d);
virtual void setPopupDirection(KPanelApplet::Direction d);
private slots:
void slotStatus(int);
void slotSetSize(const TQSize&);
void slotStopAnimation();
void rewindMovie();
void updateMovie();
protected:
virtual void show();
@ -78,17 +62,15 @@ protected:
void timerEvent(TQTimerEvent*);
private:
void drawEye();
double buttonScaleFactor(const TQSize& s) const;
TQMovie* m_movie;
void drawButton(TQPainter *p);
TQPixmap m_active_pixmap;
TQPoint m_oldPos;
TQSize m_iconSize;
TQRect m_sloppyRegion;
int m_hoverTimer;
int m_openTimer;
bool m_active;
int m_hoverTimer;
bool m_active;
bool m_mouseInside;
bool m_drag;

@ -1700,8 +1700,6 @@ void KMenu::setOrientation(MenuOrientation orientation)
TQPixmap pix( 64, footer->height() );
TQPainter p( &pix );
p.fillRect( 0, 0, 64, footer->height(), m_branding->colorGroup().brush( TQColorGroup::Base ) );
p.fillRect( 0, m_orientation == BottomUp ? footer->height() - 2 : 0,
64, 3, KNewButton::self()->borderColor() );
p.end();
footer->setPaletteBackgroundPixmap( pix );
}
@ -3500,7 +3498,8 @@ void KMenu::updateMedia()
}
m_systemView->insertItem( iconName, userLabel.isEmpty() ? label : userLabel,
descr, "system:/media/" + name, nId++, -1 );
++it;
++it;
++it; // skip separator
}
}

Loading…
Cancel
Save