all repos — fluxbox @ 07190d2133f22b89de3693867213c22e28d41d2e

custom fork of the fluxbox windowmanager

obsolete
fluxgen fluxgen
commit

07190d2133f22b89de3693867213c22e28d41d2e

parent

447486fd8be3900ceb6ee28bf9c8faf1a7b57a47

2 files changed, 0 insertions(+), 547 deletions(-)

jump to
D src/IconBar.cc

@@ -1,447 +0,0 @@

-// IconBar.cc for Fluxbox Window Manager -// Copyright (c) 2001 - 2003 Henrik Kinnunen (fluxgen at users.sourceforge.net) -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the "Software"), -// to deal in the Software without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Software, and to permit persons to whom the -// Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -// $Id: IconBar.cc,v 1.41 2003/08/04 12:57:23 fluxgen Exp $ - -#include "IconBar.hh" - -#include "I18n.hh" -#include "Screen.hh" -#include "Window.hh" -#include "ImageControl.hh" -#include "Text.hh" -#include "RootTheme.hh" -#include "FbWinFrameTheme.hh" - -#include <algorithm> - -//!! TODO THIS FILE NEEDS CLEANING - -IconBarObj::IconBarObj(FluxboxWindow *fluxboxwin, Window iconwin) -{ - m_fluxboxwin = fluxboxwin; - m_iconwin = iconwin; -} - -IconBarObj::~IconBarObj() { - -} - -/// @return the width of specified icon window -unsigned int IconBarObj::width() const { - Window root; - - unsigned int width, height; - unsigned int border_width, depth; //not used - int x, y; //not used - - Display *disp = FbTk::App::instance()->display(); - - XGetGeometry(disp, m_iconwin, &root, &x, &y, - &width, &height, &border_width, &depth); - - return width; -} - -/// @return the width of specified icon window -unsigned int IconBarObj::height() const { - Window root; - - unsigned int width, height; - unsigned int border_width, depth; //not used - int x, y; //not used - - Display *disp = FbTk::App::instance()->display(); - - XGetGeometry(disp, m_iconwin, &root, &x, &y, - &width, &height, &border_width, &depth); - - return height; -} - - -IconBar::IconBar(BScreen &scrn, Window parent, FbTk::Font &font): - m_screen(scrn), - m_display(FbTk::App::instance()->display()), - m_parent(parent), - m_focus_pm(None), - m_vertical(false), - m_font(font), - allow_updates(0) -{ - -} - -IconBar::~IconBar() { -} - -/** - Adds icon to iconbar and repostions the - icons. - returns window to iconobj -*/ -Window IconBar::addIcon(FluxboxWindow *fluxboxwin) { - if (fluxboxwin == 0) - return 0; - - // we don't want dublicate instances - IconList::iterator it = m_iconlist.begin(); - IconList::iterator it_end = m_iconlist.end(); - for (; it != it_end; ++it) { - if ((*it)->getFluxboxWin() == fluxboxwin) - return 0; - } - - Window iconwin = createIconWindow(fluxboxwin, m_parent); - decorate(iconwin); - //add window object to list - m_iconlist.push_back(new IconBarObj(fluxboxwin, iconwin)); - - //reposition all icons to fit windowbar - repositionIcons(); - - XMapSubwindows(m_display, iconwin); - XMapWindow(m_display, iconwin); - - return iconwin; -} - -/** - Removes icon from list and - repositions the rest of the icons - Return X Window of the removed iconobj - returns None if no window was found -*/ -Window IconBar::delIcon(FluxboxWindow *fluxboxwin) { - if (fluxboxwin == 0) - return 0; - - Window retwin = None; - IconBarObj *obj = findIcon(fluxboxwin); - if (obj) { - IconList::iterator it = - std::find(m_iconlist.begin(), m_iconlist.end(), obj); - if (it != m_iconlist.end()) { - m_iconlist.erase(it); - retwin = obj->getIconWin(); - delete obj; - XDestroyWindow(m_display, retwin); - repositionIcons(); - } - } - return retwin; -} - -/** - * Removes all icons from list - * Return X Windows of the removed iconobjs - */ -IconBar::WindowList *IconBar::delAllIcons(bool ignore_stuck) { - Window retwin = None; - WindowList *ret = new WindowList(); - IconList::iterator it = m_iconlist.begin(); - IconList::iterator tmp = m_iconlist.end(); - IconList::iterator it_end = m_iconlist.end(); - while (it != it_end) { - IconBarObj *obj = *it; - if (!ignore_stuck || !obj->getFluxboxWin()->isStuck()) { - retwin = obj->getIconWin(); - ret->push_back(retwin); - tmp = it; - ++it; - m_iconlist.erase(tmp); - delete obj; - XDestroyWindow(m_display, retwin); - } else { - ++it; - } - } - repositionIcons(); - return ret; -} - -/** - renders theme to m_focus_pm - with the size width * height - -*/ -void IconBar::loadTheme(unsigned int width, unsigned int height) { - //!! TODO: iconbar style theme - - FbTk::ImageControl &image_ctrl = screen().imageControl(); - Pixmap tmp = m_focus_pm; - const FbTk::Texture *texture = &(screen().winFrameTheme().labelFocusTexture()); - - //If we are working on a PARENTRELATIVE, change to right focus value - if (texture->type() & FbTk::Texture::PARENTRELATIVE ) { - texture = &(screen().winFrameTheme().titleFocusTexture()); - } - - if (texture->type() == (FbTk::Texture::FLAT | FbTk::Texture::SOLID)) { - m_focus_pm = None; - m_focus_pixel = texture->color().pixel(); - } else { - m_focus_pm = - image_ctrl.renderImage(width, height, *texture); - } - - if (tmp) - image_ctrl.removeImage(tmp); -} - -/** - sets the background pixmap/color, - border, border width of the window -*/ -void IconBar::decorate(Window win) { - //!! TODO iconbar border width style - XSetWindowBorderWidth(m_display, win, 1); - XSetWindowBorder(m_display, win, BlackPixel(FbTk::App::instance()->display(), - screen().screenNumber())); - if (m_focus_pm) - XSetWindowBackgroundPixmap(m_display, win, m_focus_pm); - else - XSetWindowBackground(m_display, win, m_focus_pixel); -} - - -/** - Reconfigures the icons - theme, pos and width -*/ -void IconBar::reconfigure() { - repositionIcons(); - -} - -/** - Handles the expose event - just redraws all the icons -*/ -void IconBar::exposeEvent(XExposeEvent *ee) { - IconBarObj *obj = 0; - IconList::iterator it = m_iconlist.begin(); - IconList::iterator it_end = m_iconlist.end(); - for (; it != it_end; ++it) { - if ((*it)->getIconWin() == ee->window) { - obj = (*it); - break; - } - } - - if (obj) { - - Window root; - unsigned int width, height; - unsigned int border_width, depth; //not used - int x, y; - XGetGeometry(m_display, m_parent, &root, &x, &y, &width, &height, - &border_width, &depth); - - //max width on every icon - unsigned int icon_width = width / m_iconlist.size(); - - //load right size of theme - loadTheme(icon_width, height); - - draw(obj, icon_width); - - } -} - -void IconBar::enableUpdates() { - --allow_updates; - if (allow_updates <= 0) - repositionIcons(); - -} - -void IconBar::disableUpdates() { - ++allow_updates; -} - -/** - Calculates and moves/resizes the icons -*/ -void IconBar::repositionIcons() { - if (m_iconlist.size() == 0 || allow_updates > 0) - return; - - Window root; - unsigned int width, height; - unsigned int border_width, depth; //not used - int x, y; - XGetGeometry(m_display, m_parent, &root, &x, &y, &width, &height, - &border_width, &depth); - - //max width on every icon - unsigned int icon_width = width / m_iconlist.size(); - if (m_vertical) - icon_width = height / m_iconlist.size(); - //load right size of theme - loadTheme(icon_width, height); - - IconList::iterator it = m_iconlist.begin(); - IconList::iterator it_end = m_iconlist.end(); - for (x = 0; it != it_end; ++it, x += icon_width) { - Window iconwin = (*it)->getIconWin(); - if (!m_vertical) { - XMoveResizeWindow(m_display, iconwin, - x, 0, - icon_width, height); - } else { - XMoveResizeWindow(m_display, iconwin, - 0, x, - height, icon_width); - } - draw((*it), icon_width); - decorate(iconwin); - } - -} - -/** - creates the X Window of icon - @return the created X Window -*/ -Window IconBar::createIconWindow(FluxboxWindow *fluxboxwin, Window parent) { - unsigned long attrib_mask = CWBackPixmap | CWBackPixel | CWBorderPixel | - CWColormap | CWOverrideRedirect | CWEventMask; - XSetWindowAttributes attrib; - attrib.background_pixmap = None; - attrib.background_pixel = attrib.border_pixel = - BlackPixel(m_display, - screen().screenNumber()); - // fluxboxwin->screen().getWindowStyle()->tab.border_color.pixel(); - attrib.colormap = fluxboxwin->screen().rootWindow().colormap(); - attrib.override_redirect = True; - attrib.event_mask = ButtonPressMask | ButtonReleaseMask | - ButtonMotionMask | ExposureMask | EnterWindowMask; - - //create iconwindow - Window iconwin = XCreateWindow(m_display, parent, 0, 0, 1, 1, 0, - fluxboxwin->screen().rootWindow().depth(), - InputOutput, fluxboxwin->screen().rootWindow().visual(), - attrib_mask, &attrib); - - return iconwin; -} - -/** - Draws theme and string to Window w -*/ -void IconBar::draw(const IconBarObj * const obj, int width) const { - if (!obj) - return; - - const FluxboxWindow * const fluxboxwin = obj->getFluxboxWin(); - if (fluxboxwin == 0) - return; - - Window iconwin = obj->getIconWin(); - unsigned int title_text_w; - - title_text_w = m_font.textWidth(fluxboxwin->iconTitle().c_str(), - fluxboxwin->iconTitle().size()); - - unsigned int bevel_w = screen().rootTheme().bevelWidth(); - int dx = bevel_w * 2; - - // center by default - unsigned int newlen = 0; - dx = FbTk::doAlignment(m_vertical ? obj->height() : obj->width(), - bevel_w*2, FbTk::CENTER, m_font, - fluxboxwin->iconTitle().c_str(), - fluxboxwin->iconTitle().size(), - newlen); - // Draw title to m_iconwin - - XClearWindow(m_display, iconwin); - int dy = 1 + m_font.ascent(); - if (m_vertical) { - int tmp = dy; - dy = obj->height() - dx; - dx = tmp + bevel_w; - } else - dy += bevel_w; - - m_font.drawText(iconwin, - screen().screenNumber(), - screen().winFrameTheme().labelTextFocusGC(), - fluxboxwin->iconTitle().c_str(), newlen, - dx, dy, - m_vertical); - -} - -/** - Tries to find the FluxboxWindow of the X Window - in iconbar - @return the fluxboxwindow on success else 0 on failure -*/ -FluxboxWindow *IconBar::findWindow(Window w) { - - IconList::iterator it = m_iconlist.begin(); - IconList::iterator it_end = m_iconlist.end(); - for (; it != it_end; ++it) { - IconBarObj *tmp = (*it); - if (tmp) { - if (tmp->getIconWin() == w) - return tmp->getFluxboxWin(); - } - } - - return 0; -} - -/* - Tries to find a fluxboxwin icon in the iconlist - @return pointer to IconBarObj on success else 0 on failure -*/ -IconBarObj *IconBar::findIcon(FluxboxWindow *fluxboxwin) { - - IconList::iterator it = m_iconlist.begin(); - IconList::iterator it_end = m_iconlist.end(); - for (; it != it_end; ++it) { - IconBarObj *tmp = (*it); - if (tmp) { - if (tmp->getFluxboxWin() == fluxboxwin) - return tmp; - } - } - - return 0; -} - -const IconBarObj *IconBar::findIcon(const FluxboxWindow * const fluxboxwin) const { - - IconList::const_iterator it = m_iconlist.begin(); - IconList::const_iterator it_end = m_iconlist.end(); - for (; it != it_end; ++it) { - IconBarObj *tmp = (*it); - if (tmp) { - if (tmp->getFluxboxWin() == fluxboxwin) - return tmp; - } - } - - return 0; -}
D src/IconBar.hh

@@ -1,100 +0,0 @@

-// IconBar.hh for Fluxbox Window Manager -// Copyright (c) 2001 - 2003 Henrik Kinnunen (fluxgen at users.sourceforge.net) -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the "Software"), -// to deal in the Software without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Software, and to permit persons to whom the -// Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -// $Id: IconBar.hh,v 1.15 2003/06/26 12:22:42 rathnor Exp $ - -#ifndef ICONBAR_HH -#define ICONBAR_HH - -#include <X11/Xlib.h> -#include <list> - -class FluxboxWindow; -class BScreen; - -namespace FbTk { -class Font; -}; -/** - Icon object in IconBar -*/ -class IconBarObj -{ -public: - IconBarObj(FluxboxWindow *fluxboxwin, Window iconwin); - ~IconBarObj(); - Window getIconWin() const { return m_iconwin; } - FluxboxWindow *getFluxboxWin() { return m_fluxboxwin; } - const FluxboxWindow *getFluxboxWin() const { return m_fluxboxwin; } - unsigned int width() const; - unsigned int height() const; -private: - FluxboxWindow *m_fluxboxwin; - Window m_iconwin; -}; - -/** - Icon container -*/ -class IconBar -{ -public: - typedef std::list<Window> WindowList; - IconBar(BScreen &scrn, Window parent, FbTk::Font &font); - ~IconBar(); - void draw(); //TODO - void reconfigure(); - Window addIcon(FluxboxWindow *fluxboxwin); - Window delIcon(FluxboxWindow *fluxboxwin); - WindowList *delAllIcons(bool ignore_stuck = false); - void buttonPressEvent(XButtonEvent *be); - FluxboxWindow *findWindow(Window w); - IconBarObj *findIcon(FluxboxWindow * const fluxboxwin); - const IconBarObj *findIcon(const FluxboxWindow * const fluxboxwin) const; - void exposeEvent(XExposeEvent *ee); - - void enableUpdates(); - void disableUpdates(); - - void draw(const IconBarObj * const obj, int width) const; - void setVertical(bool value) { m_vertical = value; } - BScreen &screen() { return m_screen; } - const BScreen &screen() const { return m_screen; } -private: - typedef std::list<IconBarObj *> IconList; - - void loadTheme(unsigned int width, unsigned int height); - void decorate(Window win); - void repositionIcons(); - Window createIconWindow(FluxboxWindow *fluxboxwin, Window parent); - BScreen &m_screen; - Display *m_display; - Window m_parent; - IconList m_iconlist; - Pixmap m_focus_pm; - unsigned long m_focus_pixel; - bool m_vertical; - FbTk::Font &m_font; - - int allow_updates; -}; - -#endif // ICONBAR_HH