obsolete
This commit is contained in:
parent
447486fd8b
commit
07190d2133
2 changed files with 0 additions and 547 deletions
447
src/IconBar.cc
447
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;
|
||||
}
|
100
src/IconBar.hh
100
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
|
Loading…
Reference in a new issue