/* * sbutton.cc * * Copyright (C) 1995, 1996, 1997, 1997, 1998, 1999, 2000, 2001, 2002 Kenichi Kourai * Copyright (C) 1999, 2000, 2001, 2002 Luiz Blanes * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with blwm; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include "main.h" #include "blwm.h" #include "sbutton.h" #include "startmenu.h" #include "blwmrc.h" #include "image.h" #include "callback.h" #include "tooltip.h" StartButton::StartButton(Blwm* blWm, int some_width) : TaskbarButton(blWm, Rect(rcTButton.x, rcTButton.y, some_width, TaskbarButton::BUTTON_HEIGHT), imgLogo) { name = new char[strlen(StartButtonTitle) + 1]; strcpy(name, StartButtonTitle); buttonWidth = some_width; XSelectInput(display, frame, ExposureMask | ButtonPressMask | ButtonReleaseMask | Button1MotionMask | PointerMotionMask | EnterWindowMask | LeaveWindowMask | OwnerGrabButtonMask); imgLogo->SetPreCallback(new Callback(this, &StartButton::DrawActive)); toolTip->SetString(StartButtonMessage, &fsTaskbar); } void StartButton::DrawButton() { TaskbarButton::DrawButton(); DrawActive(); } void StartButton::DrawActive() { if (CheckState(PUSH)) { XSetForeground(display, gcDash, black.pixel); XDrawRectangle(display, frame, gcDash, 3, 3, rc.width - 7, rc.height - 7); } } void StartButton::FillBackground() { if (CheckState(PUSH)) { if (TaskbarImage) { imgBack->SetBackground(None); imgActiveBack->SetBackground(frame); } } else { if (TaskbarImage) { imgActiveBack->SetBackground(None); imgBack->SetBackground(frame); } } XClearWindow(display, frame); } /* * DrawName -- * Don't adjust the text in start button even if it is too long. */ void StartButton::DrawName() { int y; XRectangle ink, log; XmbTextExtents(fsTaskbar, name, strlen(name), &ink, &log); y = (TaskbarButton::BUTTON_HEIGHT - log.height) / 2 - log.y; if (CheckState(PUSH)) { if (UseBoldFont) { XSetForeground(display, ::gc, ButtonStringActiveColor.pixel); XmbDrawString(display, frame, *fsb, ::gc, 22, y+1, name, strlen(name)); } else { XSetForeground(display, ::gc, ButtonStringActiveColor.pixel); XmbDrawString(display, frame, fsTaskbar, ::gc, 22, y+1, name, strlen(name)); XmbDrawString(display, frame, fsTaskbar, ::gc, 23, y+1, name, strlen(name)); } } else { if (UseBoldFont) { XSetForeground(display, ::gc, ButtonStringColor.pixel); XmbDrawString(display, frame, *fsb, ::gc, 22, y, name, strlen(name)); } else { XSetForeground(display, ::gc, ButtonStringColor.pixel); XmbDrawString(display, frame, fsTaskbar, ::gc, 22, y, name, strlen(name)); XmbDrawString(display, frame, fsTaskbar, ::gc, 23, y, name, strlen(name)); } } } /* * Button1Press -- * Process the press of button1(mouse left button). */ void StartButton::Button1Press() { toolTip->Disable(); /* * Create start button if it isn't still created. The creation of start * button is delayed until it is needed. */ if (startMenu == NULL) startMenu = new StartMenu(StartMenuItem); if (startMenu->CheckMapped()) startMenu->UnmapMenu(); else { Menu::UnmapAllMenus(False); startMenu->MapMenu(); } } void StartButton::Enter() { // XXX turn around TaskbarButton::Enter Button::Enter(); }