From 0f3633e3f055d7ab4660183e135df566178bf210 Mon Sep 17 00:00:00 2001 From: "Daniel M. Duley" Date: Tue, 9 Nov 1999 11:01:31 +0000 Subject: [PATCH] Sticky button for the system theme. I wasn't going to have it but Matthias brought it up a few times ;-) svn path=/trunk/kdebase/kwin/; revision=33318 --- systemclient.cpp | 51 +++++++++++++++++++++++++++++++++++++----------- systemclient.h | 8 +++++--- 2 files changed, 45 insertions(+), 14 deletions(-) diff --git a/systemclient.cpp b/systemclient.cpp index 23074af043..9cc9b2d342 100644 --- a/systemclient.cpp +++ b/systemclient.cpp @@ -20,6 +20,12 @@ static unsigned char close_bits[] = { static unsigned char maximize_bits[] = { 0x3f, 0x9f, 0xcf, 0x67, 0x33, 0x19, 0x0c, 0x06 }; +static unsigned char sticky_bits[] = { + 0x00, 0x18, 0x18, 0x7e, 0x7e, 0x18, 0x18, 0x00}; + +static unsigned char unsticky_bits[] = { + 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x00, 0x00, 0x00}; + static QPixmap *titlePix=0; static KPixmap *aFramePix=0; static KPixmap *iFramePix=0; @@ -79,8 +85,8 @@ static void create_pixmaps() } -SystemButton::SystemButton(const unsigned char *bitmap, QWidget *parent, - const char *name) +SystemButton::SystemButton(QWidget *parent, const char *name, + const unsigned char *bitmap) : QButton(parent, name) { QPainter p; @@ -132,8 +138,6 @@ SystemButton::SystemButton(const unsigned char *bitmap, QWidget *parent, p.drawRect(0, 0, 16, 16); p.end(); - deco = QBitmap(8, 8, bitmap); - deco.setMask(deco); resize(16, 16); QBitmap mask; @@ -147,7 +151,16 @@ SystemButton::SystemButton(const unsigned char *bitmap, QWidget *parent, p.drawPoint(15, 15); p.end(); setMask(mask); - + + if(bitmap) + setBitmap(bitmap); +} + +void SystemButton::setBitmap(const unsigned char *bitmap) +{ + deco = QBitmap(8, 8, bitmap); + deco.setMask(deco); + repaint(); } void SystemButton::drawButton(QPainter *p) @@ -172,12 +185,19 @@ SystemClient::SystemClient( Workspace *ws, WId w, QWidget *parent, g->addWidget(windowWrapper(), 1, 1 ); g->addRowSpacing(2, 6); - button[0] = new SystemButton(close_bits, this ); - button[1] = new SystemButton(iconify_bits, this ); - button[2] = new SystemButton(maximize_bits, this ); + button[0] = new SystemButton(this, "close", close_bits); + button[1] = new SystemButton(this, "sticky"); + if(isSticky()) + button[1]->setBitmap(unsticky_bits); + else + button[1]->setBitmap(sticky_bits); + button[2] = new SystemButton(this, "iconify", iconify_bits); + button[3] = new SystemButton(this, "maximize", maximize_bits); + connect( button[0], SIGNAL( clicked() ), this, ( SLOT( closeWindow() ) ) ); - connect( button[1], SIGNAL( clicked() ), this, ( SLOT( iconify() ) ) ); - connect( button[2], SIGNAL( clicked() ), this, ( SLOT( maximize() ) ) ); + connect( button[1], SIGNAL( clicked() ), this, ( SLOT( toggleSticky() ) ) ); + connect( button[2], SIGNAL( clicked() ), this, ( SLOT( iconify() ) ) ); + connect( button[3], SIGNAL( clicked() ), this, ( SLOT( maximize() ) ) ); QHBoxLayout* hb = new QHBoxLayout(); g->addLayout( hb, 0, 1 ); @@ -189,9 +209,10 @@ SystemClient::SystemClient( Workspace *ws, WId w, QWidget *parent, hb->addSpacing(2); hb->addWidget( button[1] ); hb->addWidget( button[2] ); + hb->addWidget( button[3] ); hb->addSpacing(2); - for ( int i = 0; i < 3; i++) { + for ( int i = 0; i < 4; i++) { button[i]->setMouseTracking( TRUE ); button[i]->setFixedSize( 16, 16 ); } @@ -279,6 +300,14 @@ void SystemClient::mouseDoubleClickEvent( QMouseEvent * e ) workspace()->requestFocus( this ); } +void SystemClient::stickyChange(bool on) +{ + if(on) + button[1]->setBitmap(unsticky_bits); + else + button[1]->setBitmap(sticky_bits); +} + void SystemClient::init() { diff --git a/systemclient.h b/systemclient.h index df5bc19e9f..40f69e29c8 100644 --- a/systemclient.h +++ b/systemclient.h @@ -13,8 +13,9 @@ class QSpacerItem; class SystemButton : public QButton { public: - SystemButton(const unsigned char *bitmap, QWidget *parent=0, - const char *name=0); + SystemButton(QWidget *parent=0, const char *name=0, + const unsigned char *bitmap=NULL); + void setBitmap(const unsigned char *bitmap); protected: virtual void drawButton(QPainter *p); void drawButtonLabel(QPainter *){;} @@ -35,8 +36,9 @@ protected: void mouseDoubleClickEvent( QMouseEvent * ); void init(); void captionChange( const QString& name ); + void stickyChange(bool on); private: - SystemButton* button[3]; + SystemButton* button[4]; QSpacerItem* titlebar; };