cosmetic patch from slava semushin, removes whitespaces and

uses only those things from "namespace std" what we really need.
This commit is contained in:
mathias 2006-10-27 06:57:43 +00:00
parent 34b7f7ddfc
commit 10082d821d
20 changed files with 677 additions and 571 deletions

View file

@ -1,5 +1,12 @@
(Format: Year/Month/Day)
Changes for 1.0rc3:
*06/10/27:
* Cosmetic patch from Slave Semushin
Slit.cc Screen.cc Keys.cc main.cc ToolbarTheme.cc FbTk/MultLayers.cc
FbTk/Transparent.cc FbTk/Resource.cc FbTk/Theme.cc FbTk/XLayer.cc
FbTk/Image.cc FbTk/Color.cc FbTk/FbString.cc Remember.cc RegExp.cc
WinClient.cc Shape.cc ClientPattern.cc FbWinFrame.cc
*06/10/16:
* Added CachedPixmap (Henrik)
FbTk/CachedPixmap.hh/cc

View file

@ -47,10 +47,10 @@
#endif
// needed as well for index on some systems (e.g. solaris)
#include <strings.h>
#include <strings.h>
using std::string;
using namespace std;
ClientPattern::ClientPattern():
m_matchlimit(0),
@ -63,13 +63,13 @@ ClientPattern::ClientPattern(const char *str):
{
/* A rough grammar of a pattern is:
PATTERN ::= MATCH+ LIMIT?
MATCH ::= '(' word ')'
MATCH ::= '(' word ')'
| '(' propertyname '=' word ')'
LIMIT ::= '{' number '}'
i.e. one or more match definitions, followed by
an optional limit on the number of apps to match to
Match definitions are enclosed in parentheses, and if no
property name is given, then CLASSNAME is assumed.
If no limit is specified, no limit is applied (i.e. limit = infinity)
@ -81,7 +81,7 @@ ClientPattern::ClientPattern(const char *str):
string match;
int err = 1; // for starting first loop
while (had_error == 0 && err > 0) {
err = FbTk::StringUtil::getStringBetween(match,
err = FbTk::StringUtil::getStringBetween(match,
str + pos,
'(', ')', " \t\n", true);
if (err > 0) {
@ -115,7 +115,7 @@ ClientPattern::ClientPattern(const char *str):
}
}
pos += err;
}
}
}
if (pos == 0 && had_error == 0) {
// no match terms given, this is not allowed
@ -125,7 +125,7 @@ ClientPattern::ClientPattern(const char *str):
if (had_error == 0) {
// otherwise, we check for a number
string number;
err = FbTk::StringUtil::getStringBetween(number,
err = FbTk::StringUtil::getStringBetween(number,
str+pos,
'{', '}');
if (err > 0) {
@ -134,7 +134,7 @@ ClientPattern::ClientPattern(const char *str):
pos+=err;
}
// we don't care if there isn't one
// there shouldn't be anything else on the line
match = str + pos;
size_t uerr;// need a special type here
@ -154,7 +154,7 @@ ClientPattern::ClientPattern(const char *str):
m_terms.pop_back();
}
}
}
}
ClientPattern::~ClientPattern() {
// delete all the terms
@ -165,7 +165,7 @@ ClientPattern::~ClientPattern() {
}
// return a string representation of this pattern
std::string ClientPattern::toString() const {
string ClientPattern::toString() const {
string pat;
Terms::const_iterator it = m_terms.begin();
Terms::const_iterator it_end = m_terms.end();
@ -206,7 +206,7 @@ std::string ClientPattern::toString() const {
// does this client match this pattern?
bool ClientPattern::match(const WinClient &win) const {
if (m_matchlimit != 0 && m_nummatches >= m_matchlimit ||
if (m_matchlimit != 0 && m_nummatches >= m_matchlimit ||
m_terms.empty())
return false; // already matched out
@ -225,7 +225,7 @@ bool ClientPattern::match(const WinClient &win) const {
// add an expression to match against
// The first argument is a regular expression, the second is the member
// function that we wish to match against.
bool ClientPattern::addTerm(const std::string &str, WinProperty prop) {
bool ClientPattern::addTerm(const string &str, WinProperty prop) {
Term *term = new Term(str, true);
term->orig = str;
@ -239,7 +239,7 @@ bool ClientPattern::addTerm(const std::string &str, WinProperty prop) {
return true;
}
std::string ClientPattern::getProperty(WinProperty prop, const WinClient &client) const {
string ClientPattern::getProperty(WinProperty prop, const WinClient &client) const {
switch (prop) {
case TITLE:
return client.title();

View file

@ -28,7 +28,10 @@
#include "I18n.hh"
#include <iostream>
using namespace std;
using std::cerr;
using std::endl;
using std::string;
namespace {
@ -56,9 +59,9 @@ Color::Color(const Color &col_copy):
}
Color::Color(unsigned short red, unsigned short green, unsigned short blue, int screen):
m_red(red), m_green(green), m_blue(blue),
m_red(red), m_green(green), m_blue(blue),
m_pixel(0), m_allocated(false),
m_screen(screen) {
m_screen(screen) {
allocate(red, green, blue, screen);
}
@ -95,7 +98,7 @@ bool Color::setFromString(const char *color_string, int screen) {
return false;
setPixel(color.pixel);
setRGB(maxValue(color.red),
setRGB(maxValue(color.red),
maxValue(color.green),
maxValue(color.blue));
setAllocated(true);
@ -107,7 +110,7 @@ bool Color::setFromString(const char *color_string, int screen) {
bool Color::validColorString(const char *color_string, int screen) {
XColor color;
Display *disp = App::instance()->display();
Colormap colm = DefaultColormap(disp, screen);
Colormap colm = DefaultColormap(disp, screen);
// trim white space
string color_string_tmp = color_string;
StringUtil::removeFirstWhitespace(color_string_tmp);
@ -120,7 +123,7 @@ Color &Color::operator = (const Color &col_copy) {
// check for aliasing
if (this == &col_copy)
return *this;
copy(col_copy);
return *this;
}
@ -134,7 +137,7 @@ void Color::free() {
setPixel(0);
setRGB(0, 0, 0);
setAllocated(false);
}
}
}
void Color::copy(const Color &col_copy) {
@ -144,12 +147,12 @@ void Color::copy(const Color &col_copy) {
setPixel(col_copy.pixel());
return;
}
allocate(col_copy.red()*0xFF,
allocate(col_copy.red()*0xFF,
col_copy.green()*0xFF,
col_copy.blue()*0xFF,
col_copy.m_screen);
}
void Color::allocate(unsigned short red, unsigned short green, unsigned short blue, int screen) {
@ -158,10 +161,10 @@ void Color::allocate(unsigned short red, unsigned short green, unsigned short bl
XColor color;
// fill xcolor structure
color.red = red;
color.green = green;
color.green = green;
color.blue = blue;
if (!XAllocColor(disp, DefaultColormap(disp, screen), &color)) {
_FB_USES_NLS;
cerr<<"FbTk::Color: "<<_FBTK_CONSOLETEXT(Error, ColorAllocation, "Allocation error.", "XAllocColor failed...")<<endl;
@ -173,7 +176,7 @@ void Color::allocate(unsigned short red, unsigned short green, unsigned short bl
setPixel(color.pixel);
setAllocated(true);
}
m_screen = screen;
}

View file

@ -40,7 +40,13 @@
#include <locale.h>
#include <iostream>
using namespace std;
using std::string;
#ifdef DEBUG
using std::cerr;
using std::endl;
#endif // DEBUG
namespace FbTk {
@ -54,7 +60,7 @@ static iconv_t *iconv_convs = 0;
static int iconv_convs[CONVSIZE];
#endif // HAVE_ICONV
static std::string locale_codeset;
static string locale_codeset;
/// Initialise all of the iconv conversion descriptors
void init() {
@ -70,9 +76,9 @@ void init() {
locale_codeset = nl_langinfo(CODESET);
#else // openbsd doesnt have this (yet?)
locale_codeset = "";
std::string locale = setlocale(LC_CTYPE, NULL);
string locale = setlocale(LC_CTYPE, NULL);
size_t pos = locale.find('.');
if (pos != std::string::npos)
if (pos != string::npos)
locale_codeset = locale.substr(pos);
#endif // CODESET
@ -85,7 +91,7 @@ void init() {
iconv_convs[FB2LOCALE] = iconv_open(locale_codeset.c_str(), "UTF-8");
iconv_convs[LOCALE2FB] = iconv_open("UTF-8", locale_codeset.c_str());
#else
for (int i=0; i < CONVSIZE; ++i)
for (int i=0; i < CONVSIZE; ++i)
iconv_convs[i] = 0;
#endif // HAVE_ICONV
@ -96,7 +102,7 @@ void shutdown() {
if (iconv_convs == 0)
return;
for (int i=0; i < CONVSIZE; ++i)
for (int i=0; i < CONVSIZE; ++i)
if (iconv_convs[i] != (iconv_t)(-1))
iconv_close(iconv_convs[i]);
@ -118,18 +124,18 @@ void shutdown() {
@return the recoded string, or 0 on failure
*/
/**
/**
--NOTE--
In the "C" locale, this will strip any high-bit characters
because C means 7-bit ASCII charset. If you don't want this
then you need to set your locale to something UTF-8, OR something
ISO8859-1.
*/
std::string recode(iconv_t cd,
const std::string &in) {
string recode(iconv_t cd,
const string &in) {
// If empty message, yes this can happen, return
if (in.empty())
if (in.empty())
return "";
if (cd == ((iconv_t)(-1)))
@ -183,7 +189,7 @@ std::string recode(iconv_t cd,
}
// copy to our return string
std::string ret;
string ret;
ret.append(out, outsize - outbytesleft);
// reset the conversion descriptor
@ -195,27 +201,27 @@ std::string recode(iconv_t cd,
return ret;
}
#else
std::string recode(int cd,
const std::string &str) {
string recode(int cd,
const string &str) {
return str;
}
#endif // HAVE_ICONV
FbString XStrToFb(const std::string &src) {
FbString XStrToFb(const string &src) {
return recode(iconv_convs[X2FB], src);
}
std::string FbStrToX(const FbString &src) {
string FbStrToX(const FbString &src) {
return recode(iconv_convs[FB2X], src);
}
/// Handle thislocale string encodings (strings coming from userspace)
FbString LocaleStrToFb(const std::string &src) {
FbString LocaleStrToFb(const string &src) {
return recode(iconv_convs[LOCALE2FB], src);
}
std::string FbStrToLocale(const FbString &src) {
string FbStrToLocale(const FbString &src) {
return recode(iconv_convs[FB2LOCALE], src);
}
@ -231,7 +237,7 @@ bool haveUTF8() {
}; // end namespace StringUtil
StringConvertor::StringConvertor(EncodingTarget target):
StringConvertor::StringConvertor(EncodingTarget target):
#ifdef HAVE_ICONV
m_iconv((iconv_t)(-1)) {
if (target == ToLocaleStr)
@ -251,9 +257,9 @@ StringConvertor::~StringConvertor() {
#endif
}
bool StringConvertor::setSource(const std::string &encoding) {
bool StringConvertor::setSource(const string &encoding) {
#ifdef HAVE_ICONV
std::string tempenc = encoding;
string tempenc = encoding;
if (encoding == "")
tempenc = FbStringUtil::locale_codeset;
@ -270,8 +276,8 @@ bool StringConvertor::setSource(const std::string &encoding) {
return false;
#endif
}
std::string StringConvertor::recode(const std::string &src) {
string StringConvertor::recode(const string &src) {
#ifdef HAVE_ICONV
return FbStringUtil::recode(m_iconv, src);
#else

View file

@ -39,7 +39,10 @@
#include <list>
#include <iostream>
#include <set>
using namespace std;
using std::string;
using std::list;
using std::set;
namespace FbTk {
@ -60,9 +63,9 @@ void Image::init() {
void Image::shutdown() {
std::set<ImageBase*> handlers;
// one imagehandler could be registered
set<ImageBase*> handlers;
// one imagehandler could be registered
// for more than one type
ImageMap::iterator it = s_image_map.begin();
ImageMap::iterator it_end = s_image_map.end();
@ -72,8 +75,8 @@ void Image::shutdown() {
}
// free the unique handlers
std::set<ImageBase*>::iterator handler_it = handlers.begin();
std::set<ImageBase*>::iterator handler_it_end = handlers.end();
set<ImageBase*>::iterator handler_it = handlers.begin();
set<ImageBase*>::iterator handler_it_end = handlers.end();
for(; handler_it != handler_it_end; handler_it++) {
delete (*handler_it);
}
@ -81,26 +84,26 @@ void Image::shutdown() {
s_image_map.clear();
}
PixmapWithMask *Image::load(const std::string &filename, int screen_num) {
PixmapWithMask *Image::load(const string &filename, int screen_num) {
if (filename == "")
return false;
// determine file ending
std::string extension(StringUtil::toUpper(StringUtil::findExtension(filename)));
string extension(StringUtil::toUpper(StringUtil::findExtension(filename)));
// valid handle?
if (s_image_map.find(extension) == s_image_map.end())
return false;
// load file
PixmapWithMask *pm = s_image_map[extension]->load(filename, screen_num);
// failed?, try different search paths
if (pm == 0 && s_search_paths.size()) {
// first we need to get basename of current filename
std::string base_filename = StringUtil::basename(filename);
std::string path = "";
string base_filename = StringUtil::basename(filename);
string path = "";
// append each search path and try to load
StringList::iterator it = s_search_paths.begin();
StringList::iterator it_end = s_search_paths.end();
@ -115,13 +118,13 @@ PixmapWithMask *Image::load(const std::string &filename, int screen_num) {
return pm;
}
bool Image::registerType(const std::string &type, ImageBase &base) {
bool Image::registerType(const string &type, ImageBase &base) {
string ucase_type = StringUtil::toUpper(type);
// not empty and not this base?
if (s_image_map[ucase_type] != 0 &&
s_image_map[ucase_type] != &base)
s_image_map[ucase_type] != &base)
return false;
// already registered?
if (s_image_map[ucase_type] == &base)
@ -136,7 +139,7 @@ void Image::remove(ImageBase &base) {
// find and remove all referenses to base
ImageMap::iterator it = s_image_map.begin();
ImageMap::iterator it_end = s_image_map.end();
std::list<std::string> remove_list;
list<string> remove_list;
for (; it != it_end; ++it) {
if (it->second == &base)
remove_list.push_back(it->first);
@ -148,11 +151,11 @@ void Image::remove(ImageBase &base) {
}
}
void Image::addSearchPath(const std::string &search_path) {
void Image::addSearchPath(const string &search_path) {
s_search_paths.push_back(search_path);
}
void Image::removeSearchPath(const std::string &search_path) {
void Image::removeSearchPath(const string &search_path) {
s_search_paths.remove(search_path);
}

View file

@ -28,14 +28,13 @@
#include "App.hh"
#include <iostream>
using namespace std;
using namespace FbTk;
MultLayers::MultLayers(int numlayers) :
m_lock(0)
m_lock(0)
{
for (int i=0; i < numlayers; ++i)
for (int i=0; i < numlayers; ++i)
m_layers.push_back(new XLayer(*this, i));
}
@ -48,7 +47,7 @@ MultLayers::~MultLayers() {
XLayerItem *MultLayers::getLowestItemAboveLayer(int layernum) {
if (layernum >= static_cast<signed>(m_layers.size()) || layernum <= 0)
if (layernum >= static_cast<signed>(m_layers.size()) || layernum <= 0)
return 0;
layernum--; // next one up
@ -57,7 +56,7 @@ XLayerItem *MultLayers::getLowestItemAboveLayer(int layernum) {
layernum--;
return item;
}
}
XLayerItem *MultLayers::getItemBelow(XLayerItem &item) {
XLayer &curr_layer = item.getLayer();
@ -74,24 +73,24 @@ XLayerItem *MultLayers::getItemBelow(XLayerItem &item) {
}
return ret;
}
}
XLayerItem *MultLayers::getItemAbove(XLayerItem &item) {
XLayer &curr_layer = item.getLayer();
// assume that the LayerItem does exist in a layer.
XLayerItem *ret = curr_layer.getItemAbove(item);
if (!ret) {
ret = getLowestItemAboveLayer(curr_layer.getLayerNum());
}
}
return ret;
}
}
void MultLayers::addToTop(XLayerItem &item, int layernum) {
if (layernum < 0)
layernum = 0;
if (layernum < 0)
layernum = 0;
else if (layernum >= static_cast<signed>(m_layers.size()))
layernum = m_layers.size()-1;
@ -106,7 +105,7 @@ void MultLayers::raise(XLayer &layer) {
if (layernum >= static_cast<signed>(m_layers.size() - 1))
// already on top
return;
// not yet implemented
}
@ -116,7 +115,7 @@ void MultLayers::lower(XLayer &layer) {
if (layernum == 0)
// already on bottom
return;
// not yet implemented
}
@ -143,16 +142,16 @@ void MultLayers::moveToLayer(XLayerItem &item, int layernum) {
return;
// clamp layer number
if (layernum < 0)
layernum = 0;
else if (layernum >= static_cast<signed>(m_layers.size()))
if (layernum < 0)
layernum = 0;
else if (layernum >= static_cast<signed>(m_layers.size()))
layernum = m_layers.size()-1;
// remove item from old layer and insert it into the
// remove item from old layer and insert it into the
item.setLayer(*m_layers[layernum]);
}
void MultLayers::restack() {
if (!isUpdatable())
if (!isUpdatable())
return;
int layernum=0, winnum=0, size = this->size();
@ -162,13 +161,13 @@ void MultLayers::restack() {
XLayer::ItemList::iterator it = m_layers[layernum]->getItemList().begin();
XLayer::ItemList::iterator it_end = m_layers[layernum]->getItemList().end();
// add all windows from each layeritem in each layer
for (; it != it_end; ++it) {
XLayerItem::Windows::const_iterator wit = (*it)->getWindows().begin();
XLayerItem::Windows::const_iterator wit_end = (*it)->getWindows().end();
for (; wit != wit_end; ++wit) {
if ((*wit)->window())
if ((*wit)->window())
winlist[winnum++] = (*wit)->window();
}
}

View file

@ -32,7 +32,9 @@
#include <assert.h>
#endif
using namespace std;
using std::cerr;
using std::endl;
using std::string;
namespace FbTk {
@ -55,7 +57,7 @@ ResourceManager::~ResourceManager() {
bool ResourceManager::m_init = false;
/**
reloads all resources from resourcefile
reloads all resources from resourcefile
@return true on success else false
*/
bool ResourceManager::load(const char *filename) {
@ -72,18 +74,18 @@ bool ResourceManager::load(const char *filename) {
unlock();
return false;
}
XrmValue value;
char *value_type;
//get list and go throu all the resources and load them
ResourceList::iterator i = m_resourcelist.begin();
ResourceList::iterator i_end = m_resourcelist.end();
ResourceList::iterator i_end = m_resourcelist.end();
for (; i != i_end; ++i) {
Resource_base *resource = *i;
if (XrmGetResource(**m_database, resource->name().c_str(),
resource->altName().c_str(), &value_type, &value))
resource->altName().c_str(), &value_type, &value))
resource->setFromString(value.addr);
else {
_FB_USES_NLS;
@ -104,11 +106,11 @@ bool ResourceManager::load(const char *filename) {
*/
bool ResourceManager::save(const char *filename, const char *mergefilename) {
assert(filename);
// empty database
XrmDatabaseHelper database;
string rc_string;
string rc_string;
ResourceList::iterator i = m_resourcelist.begin();
ResourceList::iterator i_end = m_resourcelist.end();
//write all resources to database
@ -125,7 +127,7 @@ bool ResourceManager::save(const char *filename, const char *mergefilename) {
if (mergefilename) {
// force reload of file
m_filename = mergefilename;
if (m_database)
if (m_database)
delete m_database;
m_database = 0;
@ -149,31 +151,31 @@ bool ResourceManager::save(const char *filename, const char *mergefilename) {
return true;
}
Resource_base *ResourceManager::findResource(const std::string &resname) {
Resource_base *ResourceManager::findResource(const string &resname) {
// find resource name
ResourceList::iterator i = m_resourcelist.begin();
ResourceList::iterator i_end = m_resourcelist.end();
for (; i != i_end; ++i) {
if ((*i)->name() == resname ||
(*i)->altName() == resname)
(*i)->altName() == resname)
return *i;
}
return 0;
}
const Resource_base *ResourceManager::findResource(const std::string &resname) const {
const Resource_base *ResourceManager::findResource(const string &resname) const {
// find resource name
ResourceList::const_iterator i = m_resourcelist.begin();
ResourceList::const_iterator i_end = m_resourcelist.end();
for (; i != i_end; ++i) {
if ((*i)->name() == resname ||
(*i)->altName() == resname)
(*i)->altName() == resname)
return *i;
}
return 0;
}
string ResourceManager::resourceValue(const std::string &resname) const {
string ResourceManager::resourceValue(const string &resname) const {
const Resource_base *res = findResource(resname);
if (res != 0)
return res->getString();
@ -181,7 +183,7 @@ string ResourceManager::resourceValue(const std::string &resname) const {
return "";
}
void ResourceManager::setResourceValue(const std::string &resname, const std::string &value) {
void ResourceManager::setResourceValue(const string &resname, const string &value) {
Resource_base *res = findResource(resname);
if (res != 0)
res->setFromString(value.c_str());

View file

@ -39,7 +39,9 @@
#include <iostream>
#include <algorithm>
using namespace std;
using std::cerr;
using std::endl;
using std::string;
namespace FbTk {
@ -49,8 +51,8 @@ struct LoadThemeHelper {
m_tm.loadTheme(*tm);
}
void operator ()(ThemeManager::ThemeList &tmlist) {
for_each(tmlist.begin(), tmlist.end(),
for_each(tmlist.begin(), tmlist.end(),
*this);
// send reconfiguration signal to theme and listeners
ThemeManager::ThemeList::iterator it = tmlist.begin();
@ -61,7 +63,7 @@ struct LoadThemeHelper {
}
}
ThemeManager &m_tm;
ThemeManager &m_tm;
};
Theme::Theme(int screen_num):m_screen_num(screen_num) {
@ -78,9 +80,9 @@ ThemeManager &ThemeManager::instance() {
}
ThemeManager::ThemeManager():
// max_screens: we initialize this later so we can set m_verbose
// max_screens: we initialize this later so we can set m_verbose
// without having a display connection
m_max_screens(-1),
m_max_screens(-1),
m_verbose(false),
m_themelocation("") {
@ -96,7 +98,7 @@ bool ThemeManager::registerTheme(Theme &tm) {
if (m_max_screens < tm.screenNum() || tm.screenNum() < 0)
return false;
// TODO: use find and return false if it's already there
// instead of unique
// instead of unique
m_themes[tm.screenNum()].push_back(&tm);
m_themes[tm.screenNum()].unique();
@ -112,10 +114,10 @@ bool ThemeManager::unregisterTheme(Theme &tm) {
return true;
}
bool ThemeManager::load(const std::string &filename,
const std::string &overlay_filename, int screen_num) {
std::string location = FbTk::StringUtil::expandFilename(filename);
std::string prefix = "";
bool ThemeManager::load(const string &filename,
const string &overlay_filename, int screen_num) {
string location = FbTk::StringUtil::expandFilename(filename);
string prefix = "";
if (FileUtil::isDirectory(filename.c_str())) {
prefix = location;
@ -139,7 +141,7 @@ bool ThemeManager::load(const std::string &filename,
if (!overlay_filename.empty()) {
std::string overlay_location = FbTk::StringUtil::expandFilename(overlay_filename);
string overlay_location = FbTk::StringUtil::expandFilename(overlay_filename);
if (FileUtil::isRegularFile(overlay_location.c_str())) {
XrmDatabaseHelper overlay_db;
if (overlay_db.load(overlay_location.c_str())) {
@ -204,7 +206,7 @@ bool ThemeManager::loadItem(ThemeItem_base &resource) {
}
/// handles resource item loading with specific name/altname
bool ThemeManager::loadItem(ThemeItem_base &resource, const std::string &name, const std::string &alt_name) {
bool ThemeManager::loadItem(ThemeItem_base &resource, const string &name, const string &alt_name) {
XrmValue value;
char *value_type;
if (XrmGetResource(*m_database, name.c_str(),
@ -217,7 +219,7 @@ bool ThemeManager::loadItem(ThemeItem_base &resource, const std::string &name, c
return true;
}
std::string ThemeManager::resourceValue(const std::string &name, const std::string &altname) {
string ThemeManager::resourceValue(const string &name, const string &altname) {
XrmValue value;
char *value_type;
if (*m_database != 0 && XrmGetResource(*m_database, name.c_str(),
@ -232,10 +234,10 @@ void ThemeManager::listItems() {
ThemeList::iterator it = m_themelist.begin();
ThemeList::iterator it_end = m_themelist.end();
for (; it != it_end; ++it) {
std::list<ThemeItem_base *>::iterator item = (*it)->itemList().begin();
std::list<ThemeItem_base *>::iterator item_end = (*it)->itemList().end();
list<ThemeItem_base *>::iterator item = (*it)->itemList().begin();
list<ThemeItem_base *>::iterator item_end = (*it)->itemList().end();
for (; item != item_end; ++item) {
if (typeid(**item) == typeid(ThemeItem<Texture>)) {
cerr<<(*item)->name()<<": <texture type>"<<endl;
cerr<<(*item)->name()<<".pixmap: <filename>"<<endl;
@ -249,7 +251,7 @@ void ThemeManager::listItems() {
cerr<<(*item)->name()<<": <boolean>"<<endl;
} else if (typeid(**item) == typeid(ThemeItem<PixmapWithMask>)) {
cerr<<(*item)->name()<<": <filename>"<<endl;
} else if (typeid(**item) == typeid(ThemeItem<std::string>)) {
} else if (typeid(**item) == typeid(ThemeItem<string>)) {
cerr<<(*item)->name()<<": <string>"<<endl;
} else if (typeid(**item) == typeid(ThemeItem<Font>)) {
cerr<<(*item)->name()<<": <font>"<<endl;
@ -258,7 +260,7 @@ void ThemeManager::listItems() {
}
}
}
}
*/
}; // end namespace FbTk

View file

@ -35,7 +35,13 @@
#include <iostream>
#include <stdio.h>
using namespace std;
#ifdef HAVE_XRENDER
using std::cerr;
using std::endl;
#endif // HAVE_XRENDER
namespace {
#ifdef HAVE_XRENDER
@ -52,8 +58,8 @@ Picture createAlphaPic(Window drawable, unsigned char alpha) {
PictFormatDepth | PictFormatAlphaMask,
&pic_format, 0);
if (format == 0) {
cerr<<"FbTk::Transparent: "<<_FBTK_CONSOLETEXT(Error, NoRenderFormat,
"Warning: Failed to find valid format for alpha.",
cerr<<"FbTk::Transparent: "<<_FBTK_CONSOLETEXT(Error, NoRenderFormat,
"Warning: Failed to find valid format for alpha.",
"transparency requires a pict format, can't get one...")<<endl;
return 0;
}
@ -63,7 +69,7 @@ Picture createAlphaPic(Window drawable, unsigned char alpha) {
1, 1, 8);
if (alpha_pm == 0) {
cerr<<"FbTk::Transparent: "<<_FBTK_CONSOLETEXT(Error, NoRenderPixmap,
"Warning: Failed to create alpha pixmap.",
"Warning: Failed to create alpha pixmap.",
"XCreatePixmap failed for our transparency pixmap")<<endl;
return 0;
}
@ -75,8 +81,8 @@ Picture createAlphaPic(Window drawable, unsigned char alpha) {
format, CPRepeat, &attr);
if (alpha_pic == 0) {
XFreePixmap(disp, alpha_pm);
cerr<<"FbTk::Transparent: "<<_FBTK_CONSOLETEXT(Error, NoRenderPicture,
"Warning: Failed to create alpha picture.",
cerr<<"FbTk::Transparent: "<<_FBTK_CONSOLETEXT(Error, NoRenderPicture,
"Warning: Failed to create alpha picture.",
"XRenderCreatePicture failed")<<endl;
return 0;
}
@ -234,15 +240,15 @@ void Transparent::setDest(Drawable dest, int screen_num) {
// create new dest pic if we have a valid dest drawable
if (dest != 0) {
XRenderPictFormat *format =
XRenderPictFormat *format =
XRenderFindVisualFormat(disp,
DefaultVisual(disp, screen_num));
if (format == 0) {
_FB_USES_NLS;
cerr<<"FbTk::Transparent: ";
fprintf(stderr,
_FBTK_CONSOLETEXT(Error, NoRenderVisualFormat,
"Failed to find format for screen(%d)",
fprintf(stderr,
_FBTK_CONSOLETEXT(Error, NoRenderVisualFormat,
"Failed to find format for screen(%d)",
"XRenderFindVisualFormat failed... include %d for screen number").
c_str(), screen_num);
@ -284,8 +290,8 @@ void Transparent::setSource(Drawable source, int screen_num) {
if (format == 0) {
_FB_USES_NLS;
cerr<<"FbTk::Transparent: ";
fprintf(stderr, _FBTK_CONSOLETEXT(Error, NoRenderVisualFormat,
"Failed to find format for screen(%d)",
fprintf(stderr, _FBTK_CONSOLETEXT(Error, NoRenderVisualFormat,
"Failed to find format for screen(%d)",
"XRenderFindVisualFormat failed... include %d for screen number").
c_str(), screen_num);
cerr<<endl;

View file

@ -27,9 +27,15 @@
#include "App.hh"
#include <iostream>
using namespace std;
using std::find;
using namespace FbTk;
#ifdef DEBUG
using std::cerr;
using std::endl;
#endif // DEBUG
XLayer::XLayer(MultLayers &manager, int layernum):
m_manager(manager), m_layernum(layernum) {
}
@ -51,7 +57,7 @@ void XLayer::restack() {
it_end = itemList().end();
Window *winlist = new Window[num_windows];
size_t j=0;
// add all the windows from each item
for (; it != it_end; ++it) {
XLayerItem::Windows::const_iterator wit = (*it)->getWindows().begin();
@ -87,13 +93,13 @@ void XLayer::stackBelowItem(XLayerItem *item, XLayerItem *above) {
Window *winlist;
size_t winnum, size, num = item->numWindows();
// if there are no windows provided for above us,
// if there are no windows provided for above us,
// then we must have to go right to the top of the stack
if (!above) { // must need to go right to top
if (item->getWindows().front()->window())
XRaiseWindow(FbTk::App::instance()->display(), item->getWindows().front()->window());
// if this XLayerItem has more than one window,
// if this XLayerItem has more than one window,
// then we'll stack the rest in under the front one too
// our size needs to be the number of windows in the group, since there isn't one above.
if (num > 1) {
@ -120,7 +126,7 @@ void XLayer::stackBelowItem(XLayerItem *item, XLayerItem *above) {
XLayerItem::Windows::iterator it = item->getWindows().begin();
XLayerItem::Windows::iterator it_end = item->getWindows().end();
for (; it != it_end; ++it) {
if ((*it)->window())
if ((*it)->window())
winlist[winnum++] = (*it)->window();
}
@ -128,7 +134,7 @@ void XLayer::stackBelowItem(XLayerItem *item, XLayerItem *above) {
XRestackWindows(FbTk::App::instance()->display(), winlist, winnum);
delete [] winlist;
}
// We can't just use Restack here, because it won't do anything if they're
@ -139,17 +145,17 @@ void XLayer::alignItem(XLayerItem &item) {
return;
}
// Note: some other things effectively assume that the window list is
// Note: some other things effectively assume that the window list is
// sorted from highest to lowest
// get our item
iterator myit = std::find(itemList().begin(), itemList().end(), &item);
iterator myit = find(itemList().begin(), itemList().end(), &item);
iterator it = myit;
// go to the one above it in our layer (top is front, so we decrement)
--it;
// keep going until we find one that is currently visible to the user
while (it != itemList().begin() && !(*it)->visible())
while (it != itemList().begin() && !(*it)->visible())
--it;
if (it == itemList().begin() && !(*it)->visible())
@ -166,7 +172,7 @@ XLayer::iterator XLayer::insert(XLayerItem &item, unsigned int pos) {
if (pos != 0)
cerr<<__FILE__<<"("<<__LINE__<<"): Insert using non-zero position not valid in XLayer"<<endl;
#endif // DEBUG
itemList().push_front(&item);
// restack below next window up
stackBelowItem(&item, m_manager.getLowestItemAboveLayer(m_layernum));
@ -188,9 +194,9 @@ void XLayer::cycleUp() {
// need to find highest visible window, and move it to bottom
iterator it = itemList().begin();
iterator it_end = itemList().end();
while (it != it_end && !(*it)->visible())
while (it != it_end && !(*it)->visible())
++it;
// if there is something to do
if (it != it_end)
lower(**it);
@ -202,34 +208,34 @@ void XLayer::cycleDown() {
// so use a reverse iterator, and the same logic as cycleUp()
reverse_iterator it = itemList().rbegin();
reverse_iterator it_end = itemList().rend();
while (it != it_end && !(*it)->visible())
while (it != it_end && !(*it)->visible())
++it;
// if there is something to do
if (it != it_end)
raise(**it);
}
void XLayer::stepUp(XLayerItem &item) {
// need to find next visible window upwards, and put it above that
if (&item == itemList().front())
if (&item == itemList().front())
return; // nothing to do
// TODO: is there a better way of doing this?
// get our item
iterator myit = std::find(itemList().begin(), itemList().end(), &item);
iterator myit = find(itemList().begin(), itemList().end(), &item);
iterator it = myit;
// go to the one above it in our layer (top is front, so we decrement)
--it;
// keep going until we find one that is currently visible to the user
while (it != itemList().begin() && !(*it)->visible())
while (it != itemList().begin() && !(*it)->visible())
--it;
if (it == itemList().begin() && !(*it)->visible()) {
// reached front item, but it wasn't visible, therefore it was already raised
} else {
@ -243,7 +249,7 @@ void XLayer::stepUp(XLayerItem &item) {
if (it == itemList().begin()) {
stackBelowItem(&item, m_manager.getLowestItemAboveLayer(m_layernum));
} else {
// otherwise go up one in this layer (i.e. above the one we want to go above)
// otherwise go up one in this layer (i.e. above the one we want to go above)
--it;
// and stack below that.
stackBelowItem(&item, *it);
@ -255,11 +261,11 @@ void XLayer::stepDown(XLayerItem &item) {
// need to find next visible window down, and put it below that
// if we're already the bottom of the layer
if (&item == itemList().back())
if (&item == itemList().back())
return; // nothing to do
// get our position
iterator myit = std::find(itemList().begin(), itemList().end(), &item);
iterator myit = find(itemList().begin(), itemList().end(), &item);
iterator it = myit;
// go one below it (top is front, so we must increment)
@ -267,7 +273,7 @@ void XLayer::stepDown(XLayerItem &item) {
iterator it_end = itemList().end();
// keep going down until we find a visible one
while (it != it_end && !(*it)->visible())
while (it != it_end && !(*it)->visible())
it++;
// if we didn't reach the end, then stack below the
@ -283,7 +289,7 @@ void XLayer::raise(XLayerItem &item) {
if (&item == itemList().front())
return; // nothing to do
iterator it = std::find(itemList().begin(), itemList().end(), &item);
iterator it = find(itemList().begin(), itemList().end(), &item);
if (it != itemList().end())
itemList().erase(it);
else {
@ -295,7 +301,7 @@ void XLayer::raise(XLayerItem &item) {
itemList().push_front(&item);
stackBelowItem(&item, m_manager.getLowestItemAboveLayer(m_layernum));
}
void XLayer::tempRaise(XLayerItem &item) {
@ -304,7 +310,7 @@ void XLayer::tempRaise(XLayerItem &item) {
if (&item == itemList().front())
return; // nothing to do
iterator it = std::find(itemList().begin(), itemList().end(), &item);
iterator it = find(itemList().begin(), itemList().end(), &item);
if (it == itemList().end()) {
#ifdef DEBUG
cerr<<__FILE__<<"("<<__LINE__<<"): WARNING: raise on item not in layer["<<m_layernum<<"]"<<endl;
@ -314,17 +320,17 @@ void XLayer::tempRaise(XLayerItem &item) {
// don't add it back to the top
stackBelowItem(&item, m_manager.getLowestItemAboveLayer(m_layernum));
}
void XLayer::lower(XLayerItem &item) {
// assume already in this layer
// is it already the lowest?
if (&item == itemList().back())
if (&item == itemList().back())
return; // nothing to do
iterator it = std::find(itemList().begin(), itemList().end(), &item);
iterator it = find(itemList().begin(), itemList().end(), &item);
if (it != itemList().end())
// remove this item
itemList().erase(it);
@ -344,13 +350,13 @@ void XLayer::lower(XLayerItem &item) {
// go up one so we have an object (which must exist, since at least this item is in the layer)
it--;
// go down another one
// must exist, otherwise our item must == itemList().back()
it--;
it--;
// and restack our window below that one.
stackBelowItem(&item, *it);
stackBelowItem(&item, *it);
}
void XLayer::raiseLayer(XLayerItem &item) {
@ -367,15 +373,15 @@ void XLayer::moveToLayer(XLayerItem &item, int layernum) {
XLayerItem *XLayer::getLowestItem() {
if (itemList().empty())
if (itemList().empty())
return 0;
else
else
return itemList().back();
}
XLayerItem *XLayer::getItemBelow(XLayerItem &item) {
// get our iterator
iterator it = std::find(itemList().begin(), itemList().end(), &item);
iterator it = find(itemList().begin(), itemList().end(), &item);
// go one lower
it++;
@ -389,12 +395,12 @@ XLayerItem *XLayer::getItemBelow(XLayerItem &item) {
XLayerItem *XLayer::getItemAbove(XLayerItem &item) {
// get our iterator
iterator it = std::find(itemList().begin(), itemList().end(), &item);
iterator it = find(itemList().begin(), itemList().end(), &item);
// if this is the beginning (top-most item), do nothing, otherwise give the next one up
// if this is the beginning (top-most item), do nothing, otherwise give the next one up
// the list (which must be there since we aren't the beginning)
if (it == itemList().begin())
return 0;
else
else
return *(--it);
}

View file

@ -43,9 +43,11 @@
#include <X11/X.h>
#include <iostream>
using namespace std; // mem_fun
FbWinFrame::FbWinFrame(BScreen &screen, FbWinFrameTheme &theme, FbTk::ImageControl &imgctrl,
using std::mem_fun;
using std::string;
FbWinFrame::FbWinFrame(BScreen &screen, FbWinFrameTheme &theme, FbTk::ImageControl &imgctrl,
FbTk::XLayer &layer,
int x, int y,
unsigned int width, unsigned int height):
@ -55,7 +57,7 @@ FbWinFrame::FbWinFrame(BScreen &screen, FbWinFrameTheme &theme, FbTk::ImageContr
m_window(theme.screenNum(), x, y, width, height, ButtonPressMask | ButtonReleaseMask |
ButtonMotionMask | EnterWindowMask, true),
m_layeritem(window(), layer),
m_titlebar(m_window, 0, 0, 100, 16,
m_titlebar(m_window, 0, 0, 100, 16,
ButtonPressMask | ButtonReleaseMask |
ButtonMotionMask | ExposureMask |
EnterWindowMask | LeaveWindowMask),
@ -78,8 +80,8 @@ FbWinFrame::FbWinFrame(BScreen &screen, FbWinFrameTheme &theme, FbTk::ImageContr
ButtonMotionMask | ExposureMask |
EnterWindowMask | LeaveWindowMask),
m_bevel(1),
m_use_titlebar(true),
m_use_tabs(true),
m_use_titlebar(true),
m_use_tabs(true),
m_use_handle(true),
m_focused(false),
m_visible(false),
@ -104,7 +106,7 @@ FbWinFrame::~FbWinFrame() {
removeAllButtons();
}
bool FbWinFrame::setOnClickTitlebar(FbTk::RefCount<FbTk::Command> &ref, int mousebutton_num,
bool FbWinFrame::setOnClickTitlebar(FbTk::RefCount<FbTk::Command> &ref, int mousebutton_num,
bool double_click, bool pressed) {
// find mousebutton_num
if (mousebutton_num < 1 || mousebutton_num > 5)
@ -127,7 +129,7 @@ bool FbWinFrame::setTabMode(TabMode tabmode) {
bool ret = true;
// setting tabmode to notset forces it through when
// setting tabmode to notset forces it through when
// something is likely to change
if (tabmode == NOTSET)
tabmode = m_tabmode;
@ -183,7 +185,7 @@ bool FbWinFrame::setTabMode(TabMode tabmode) {
m_tab_container.raise();
m_tab_container.show();
if (!m_use_tabs)
ret = false;
@ -234,7 +236,7 @@ void FbWinFrame::shade() {
alignTabs();
// need to update our shape
if ( m_shape.get() )
m_shape->update();
m_shape->update();
} else { // should be unshaded
m_window.resize(m_width_before_shade, m_height_before_shade);
reconfigure();
@ -251,10 +253,10 @@ void FbWinFrame::resize(unsigned int width, unsigned int height) {
}
// need an atomic moveresize where possible
void FbWinFrame::moveResizeForClient(int x, int y,
unsigned int width, unsigned int height,
int win_gravity,
unsigned int client_bw,
void FbWinFrame::moveResizeForClient(int x, int y,
unsigned int width, unsigned int height,
int win_gravity,
unsigned int client_bw,
bool move, bool resize) {
// total height for frame
@ -266,16 +268,16 @@ void FbWinFrame::moveResizeForClient(int x, int y,
moveResize(x, y, width, height, move, resize);
}
void FbWinFrame::resizeForClient(unsigned int width, unsigned int height,
void FbWinFrame::resizeForClient(unsigned int width, unsigned int height,
int win_gravity, unsigned int client_bw) {
moveResizeForClient(0, 0, width, height, win_gravity, client_bw, false, true);
}
void FbWinFrame::moveResize(int x, int y, unsigned int width, unsigned int height, bool move, bool resize) {
if (move && x == window().x() && y == window().y())
if (move && x == window().x() && y == window().y())
move = false;
if (resize && width == FbWinFrame::width() && height == FbWinFrame::height())
if (resize && width == FbWinFrame::width() && height == FbWinFrame::height())
resize = false;
if (!move && !resize)
@ -320,11 +322,11 @@ void FbWinFrame::moveResize(int x, int y, unsigned int width, unsigned int heigh
}
}
void FbWinFrame::quietMoveResize(int x, int y,
void FbWinFrame::quietMoveResize(int x, int y,
unsigned int width, unsigned int height) {
m_window.moveResize(x, y, width, height);
if (m_tabmode == EXTERNAL) {
switch(m_screen.getTabPlacement()) {
case LEFTTOP:
case RIGHTTOP:
@ -444,7 +446,7 @@ void FbWinFrame::alignTabs() {
void FbWinFrame::notifyMoved(bool clear) {
// not important if no alpha...
unsigned char alpha = (m_focused?theme().focusedAlpha():theme().unfocusedAlpha());
if (alpha == 255)
if (alpha == 255)
return;
if (m_tabmode == EXTERNAL && m_use_tabs || m_use_titlebar) {
@ -516,7 +518,7 @@ void FbWinFrame::setFocus(bool newvalue) {
if (currentLabel()) {
if (newvalue) // focused
applyFocusLabel(*m_current_label);
applyFocusLabel(*m_current_label);
else // unfocused
applyActiveLabel(*m_current_label);
}
@ -536,7 +538,7 @@ void FbWinFrame::addLeftButton(FbTk::Button *btn) {
return;
applyButton(*btn); // setup theme and other stuff
m_buttons_left.push_back(btn);
}
@ -562,7 +564,7 @@ void FbWinFrame::removeAllButtons() {
}
}
FbWinFrame::ButtonId FbWinFrame::createTab(const std::string &title, FbTk::Command *command,
FbWinFrame::ButtonId FbWinFrame::createTab(const string &title, FbTk::Command *command,
int tabs_padding) {
FbTk::TextButton *button = new FbTk::TextButton(m_tab_container,
theme().font(),
@ -573,7 +575,7 @@ FbWinFrame::ButtonId FbWinFrame::createTab(const std::string &title, FbTk::Comma
ButtonReleaseMask | ButtonMotionMask |
EnterWindowMask);
FbTk::EventManager::instance()->add(*button, button->window());
FbTk::RefCount<FbTk::Command> refcmd(command);
button->setOnClick(refcmd);
@ -681,7 +683,7 @@ void FbWinFrame::setClientWindow(FbTk::FbWindow &win) {
win.setEventMask(NoEventMask);
win.reparent(m_window, 0, clientArea().y());
// remask window so we get events
win.setEventMask(PropertyChangeMask | StructureNotifyMask |
win.setEventMask(PropertyChangeMask | StructureNotifyMask |
FocusChangeMask);
m_window.setEventMask(ButtonPressMask | ButtonReleaseMask |
@ -691,7 +693,7 @@ void FbWinFrame::setClientWindow(FbTk::FbWindow &win) {
XSetWindowAttributes attrib_set;
attrib_set.event_mask = PropertyChangeMask | StructureNotifyMask | FocusChangeMask;
attrib_set.do_not_propagate_mask = ButtonPressMask | ButtonReleaseMask |
attrib_set.do_not_propagate_mask = ButtonPressMask | ButtonReleaseMask |
ButtonMotionMask;
XChangeWindowAttributes(win.display(), win.window(), CWEventMask|CWDontPropagate, &attrib_set);
@ -852,7 +854,7 @@ void FbWinFrame::removeEventHandler() {
void FbWinFrame::buttonPressEvent(XButtonEvent &event) {
// we can ignore which window the event was generated for
if (event.window == m_label.window() && m_current_label)
if (event.window == m_label.window() && m_current_label)
event.window = m_current_label->window();
m_tab_container.tryButtonPressEvent(event);
@ -871,9 +873,9 @@ void FbWinFrame::buttonPressEvent(XButtonEvent &event) {
void FbWinFrame::buttonReleaseEvent(XButtonEvent &event) {
// we can ignore which window the event was generated for
if (event.window == m_label.window() && m_current_label)
if (event.window == m_label.window() && m_current_label)
event.window = m_current_label->window();
// we continue even if a button got the event
m_tab_container.tryButtonReleaseEvent(event);
@ -891,7 +893,7 @@ void FbWinFrame::buttonReleaseEvent(XButtonEvent &event) {
bool double_click = (event.time - last_release_time <= m_double_click_time);
last_release_time = event.time;
int real_button = event.button - 1;
if (double_click && *m_commands[real_button].double_click)
m_commands[real_button].double_click->execute();
else if (*m_commands[real_button].click)
@ -918,7 +920,7 @@ void FbWinFrame::exposeEvent(XExposeEvent &event) {
return;
// create compare function
// that we should use with find_if
// that we should use with find_if
FbTk::CompareEqual_base<FbTk::FbWindow, Window> compare(&FbTk::FbWindow::window,
event.window);
@ -966,18 +968,18 @@ void FbWinFrame::reconfigure() {
m_window.resize(m_window.width(), m_window.height() -
orig_handle_h + theme().handleWidth());
handle().resize(handle().width(),
handle().resize(handle().width(),
theme().handleWidth());
gripLeft().resize(buttonHeight(),
gripLeft().resize(buttonHeight(),
theme().handleWidth());
gripRight().resize(gripLeft().width(),
gripRight().resize(gripLeft().width(),
gripLeft().height());
// align titlebar and render it
if (m_use_titlebar) {
reconfigureTitlebar();
m_titlebar.raise();
} else
} else
m_titlebar.lower();
if (m_tabmode == EXTERNAL) {
@ -1009,7 +1011,7 @@ void FbWinFrame::reconfigure() {
client_top += titlebar_height;
client_height -= titlebar_height;
}
// align handle and grips
const int grip_height = m_handle.height();
const int grip_width = 20; //TODO
@ -1111,35 +1113,35 @@ void FbWinFrame::reconfigureTitlebar() {
int orig_height = m_titlebar.height();
// resize titlebar to window size with font height
int title_height = m_theme.font().height() == 0 ? 16 :
int title_height = m_theme.font().height() == 0 ? 16 :
m_theme.font().height() + m_bevel*2 + 2;
if (m_theme.titleHeight() != 0)
title_height = m_theme.titleHeight();
// if the titlebar grows in size, make sure the whole window does too
if (orig_height != title_height)
if (orig_height != title_height)
m_window.resize(m_window.width(), m_window.height()-orig_height+title_height);
m_titlebar.invalidateBackground();
m_titlebar.moveResize(-m_titlebar.borderWidth(), -m_titlebar.borderWidth(),
m_window.width(), title_height);
// draw left buttons first
unsigned int next_x = m_bevel;
unsigned int next_x = m_bevel;
unsigned int button_size = buttonHeight();
m_button_size = button_size;
for (size_t i=0; i < m_buttons_left.size(); i++, next_x += button_size + m_bevel) {
// probably on theme reconfigure, leave bg alone for now
m_buttons_left[i]->invalidateBackground();
m_buttons_left[i]->moveResize(next_x, m_bevel,
m_buttons_left[i]->moveResize(next_x, m_bevel,
button_size, button_size);
}
next_x += m_bevel;
// space left on titlebar between left and right buttons
int space_left = m_titlebar.width() - next_x;
if (!m_buttons_right.empty())
if (!m_buttons_right.empty())
space_left -= m_buttons_right.size() * (button_size + m_bevel);
space_left -= m_bevel;
@ -1167,7 +1169,7 @@ void FbWinFrame::reconfigureTitlebar() {
next_x += m_label.width() + m_bevel;
// finaly set new buttons to the right
for (size_t i=0; i < m_buttons_right.size();
for (size_t i=0; i < m_buttons_right.size();
++i, next_x += button_size + m_bevel) {
m_buttons_right[i]->invalidateBackground();
m_buttons_right[i]->moveResize(next_x, m_bevel,
@ -1201,21 +1203,21 @@ void FbWinFrame::renderTitlebar() {
}
// render pixmaps
render(m_theme.titleFocusTexture(), m_title_focused_color,
render(m_theme.titleFocusTexture(), m_title_focused_color,
m_title_focused_pm,
m_titlebar.width(), m_titlebar.height());
render(m_theme.titleUnfocusTexture(), m_title_unfocused_color,
render(m_theme.titleUnfocusTexture(), m_title_unfocused_color,
m_title_unfocused_pm,
m_titlebar.width(), m_titlebar.height());
//!! TODO: don't render label if internal tabs
render(m_theme.labelFocusTexture(), m_label_focused_color,
render(m_theme.labelFocusTexture(), m_label_focused_color,
m_label_focused_pm,
m_label.width(), m_label.height());
render(m_theme.labelUnfocusTexture(), m_label_unfocused_color,
render(m_theme.labelUnfocusTexture(), m_label_unfocused_color,
m_label_unfocused_pm,
m_label.width(), m_label.height());
@ -1235,23 +1237,23 @@ void FbWinFrame::renderTabContainer() {
if (m_tabmode == EXTERNAL && tc_unfocused->type() & FbTk::Texture::PARENTRELATIVE)
tc_unfocused = &m_theme.titleUnfocusTexture();
render(*tc_focused, m_tabcontainer_focused_color,
render(*tc_focused, m_tabcontainer_focused_color,
m_tabcontainer_focused_pm,
m_tab_container.width(), m_tab_container.height(), m_tab_container.orientation());
render(*tc_unfocused, m_tabcontainer_unfocused_color,
render(*tc_unfocused, m_tabcontainer_unfocused_color,
m_tabcontainer_unfocused_pm,
m_tab_container.width(), m_tab_container.height(), m_tab_container.orientation());
render(m_theme.labelFocusTexture(), m_labelbutton_focused_color,
render(m_theme.labelFocusTexture(), m_labelbutton_focused_color,
m_labelbutton_focused_pm,
m_tab_container.width(), m_tab_container.height(), m_tab_container.orientation());
render(m_theme.labelUnfocusTexture(), m_labelbutton_unfocused_color,
render(m_theme.labelUnfocusTexture(), m_labelbutton_unfocused_color,
m_labelbutton_unfocused_pm,
m_tab_container.width(), m_tab_container.height(), m_tab_container.orientation());
render(m_theme.labelActiveTexture(), m_labelbutton_active_color,
render(m_theme.labelActiveTexture(), m_labelbutton_active_color,
m_labelbutton_active_pm,
m_tab_container.width(), m_tab_container.height(), m_tab_container.orientation());
@ -1263,7 +1265,7 @@ void FbWinFrame::applyTitlebar() {
// set up pixmaps for titlebar windows
Pixmap label_pm = None;
Pixmap title_pm = None;
Pixmap title_pm = None;
FbTk::Color label_color;
FbTk::Color title_color;
getCurrentFocusPixmap(label_pm, title_pm,
@ -1301,18 +1303,18 @@ void FbWinFrame::renderHandles() {
return;
}
render(m_theme.handleFocusTexture(), m_handle_focused_color,
render(m_theme.handleFocusTexture(), m_handle_focused_color,
m_handle_focused_pm,
m_handle.width(), m_handle.height());
render(m_theme.handleUnfocusTexture(), m_handle_unfocused_color,
render(m_theme.handleUnfocusTexture(), m_handle_unfocused_color,
m_handle_unfocused_pm,
m_handle.width(), m_handle.height());
render(m_theme.gripFocusTexture(), m_grip_focused_color, m_grip_focused_pm,
m_grip_left.width(), m_grip_left.height());
render(m_theme.gripUnfocusTexture(), m_grip_unfocused_color,
render(m_theme.gripUnfocusTexture(), m_grip_unfocused_color,
m_grip_unfocused_pm,
m_grip_left.width(), m_grip_left.height());
@ -1339,7 +1341,7 @@ void FbWinFrame::applyHandles() {
} else {
m_grip_left.setBackgroundColor(m_grip_focused_color);
m_grip_right.setBackgroundColor(m_grip_focused_color);
}
}
} else {
@ -1347,7 +1349,7 @@ void FbWinFrame::applyHandles() {
m_handle.setBackgroundPixmap(m_handle_unfocused_pm);
} else {
m_handle.setBackgroundColor(m_handle_unfocused_color);
}
}
if (m_grip_unfocused_pm) {
m_grip_left.setBackgroundPixmap(m_grip_unfocused_pm);
@ -1355,7 +1357,7 @@ void FbWinFrame::applyHandles() {
} else {
m_grip_left.setBackgroundColor(m_grip_unfocused_color);
m_grip_right.setBackgroundColor(m_grip_unfocused_color);
}
}
}
}
@ -1367,15 +1369,15 @@ void FbWinFrame::renderButtons() {
return;
}
render(m_theme.buttonFocusTexture(), m_button_color,
render(m_theme.buttonFocusTexture(), m_button_color,
m_button_pm,
m_button_size, m_button_size);
render(m_theme.buttonUnfocusTexture(), m_button_unfocused_color,
render(m_theme.buttonUnfocusTexture(), m_button_unfocused_color,
m_button_unfocused_pm,
m_button_size, m_button_size);
render(m_theme.buttonPressedTexture(), m_button_pressed_color,
render(m_theme.buttonPressedTexture(), m_button_pressed_color,
m_button_pressed_pm,
m_button_size, m_button_size);
}
@ -1477,7 +1479,7 @@ void FbWinFrame::render(const FbTk::Texture &tex, FbTk::Color &col, Pixmap &pm,
pm = m_imagectrl.renderImage(w, h, tex, orient);
}
if (tmp)
if (tmp)
m_imagectrl.removeImage(tmp);
}
@ -1489,7 +1491,7 @@ void FbWinFrame::getCurrentFocusPixmap(Pixmap &label_pm, Pixmap &title_pm,
label_pm = m_label_focused_pm;
else
label_color = m_label_focused_color;
if (m_title_focused_pm != 0)
title_pm = m_title_focused_pm;
else
@ -1499,12 +1501,12 @@ void FbWinFrame::getCurrentFocusPixmap(Pixmap &label_pm, Pixmap &title_pm,
label_pm = m_label_unfocused_pm;
else
label_color = m_label_unfocused_color;
if (m_title_unfocused_pm != 0)
title_pm = m_title_unfocused_pm;
else
title_color = m_title_unfocused_color;
}
}
}
void FbWinFrame::applyTabContainer() {
@ -1553,11 +1555,11 @@ void FbWinFrame::setBorderWidth(unsigned int border_width) {
gravityTranslate(grav_x, grav_y, -m_active_gravity, m_active_orig_client_bw, false);
// we need to change the size of the window
// we need to change the size of the window
// if the border width changes...
if (m_use_titlebar)
if (m_use_titlebar)
bw_changes += static_cast<signed>(border_width - titlebar().borderWidth());
if (m_use_handle)
if (m_use_handle)
bw_changes += static_cast<signed>(border_width - handle().borderWidth());
window().setBorderWidth(border_width);
@ -1662,7 +1664,7 @@ private:
// this function translates its arguments according to win_gravity
// if win_gravity is negative, it does an inverse translation
// This function should be used when a window is mapped/unmapped/pos configured
void FbWinFrame::gravityTranslate(int &x, int &y,
void FbWinFrame::gravityTranslate(int &x, int &y,
int win_gravity, unsigned int client_bw, bool move_frame) {
bool invert = false;
if (win_gravity < 0) {
@ -1670,18 +1672,18 @@ void FbWinFrame::gravityTranslate(int &x, int &y,
win_gravity = -win_gravity; // make +ve
}
/* Ok, so, gravity says which point of the frame is put where the
/* Ok, so, gravity says which point of the frame is put where the
* corresponding bit of window would have been
* Thus, x,y always refers to where top left of the WINDOW would be placed
* but given that we're wrapping it in a frame, we actually place
* it so that the given reference point is in the same spot as the
* window's reference point would have been.
* i.e. east gravity says that the centre of the right hand side of the
* i.e. east gravity says that the centre of the right hand side of the
* frame is placed where the centre of the rhs of the window would
* have been if there was no frame.
* Hope that makes enough sense.
*
* NOTE: the gravity calculations are INDEPENDENT of the client
* NOTE: the gravity calculations are INDEPENDENT of the client
* window width/height.
*
* If you get confused with the calculations, draw a picture.
@ -1753,7 +1755,7 @@ void FbWinFrame::gravityTranslate(int &x, int &y,
}
int FbWinFrame::widthOffset() const {
if (m_tabmode != EXTERNAL || !m_use_tabs)
if (m_tabmode != EXTERNAL || !m_use_tabs)
return 0;
// same height offset for top and bottom tabs
@ -1771,7 +1773,7 @@ int FbWinFrame::widthOffset() const {
}
int FbWinFrame::heightOffset() const {
if (m_tabmode != EXTERNAL || !m_use_tabs)
if (m_tabmode != EXTERNAL || !m_use_tabs)
return 0;
switch (m_screen.getTabPlacement()) {
@ -1788,7 +1790,7 @@ int FbWinFrame::heightOffset() const {
}
int FbWinFrame::xOffset() const {
if (m_tabmode != EXTERNAL || !m_use_tabs)
if (m_tabmode != EXTERNAL || !m_use_tabs)
return 0;
switch (m_screen.getTabPlacement()) {
@ -1803,7 +1805,7 @@ int FbWinFrame::xOffset() const {
}
int FbWinFrame::yOffset() const {
if (m_tabmode != EXTERNAL || !m_use_tabs)
if (m_tabmode != EXTERNAL || !m_use_tabs)
return 0;
switch (m_screen.getTabPlacement()) {

View file

@ -89,7 +89,11 @@
#include <map>
#include <memory>
using namespace std;
using std::cerr;
using std::endl;
using std::string;
using std::vector;
using std::ifstream;
Keys::Keys():
m_display(FbTk::App::instance()->display())
@ -171,7 +175,7 @@ bool Keys::save(const char *filename) const {
// return true;
}
bool Keys::addBinding(const std::string &linebuffer) {
bool Keys::addBinding(const string &linebuffer) {
vector<string> val;
// Parse arguments
@ -187,7 +191,7 @@ bool Keys::addBinding(const std::string &linebuffer) {
unsigned int key = 0, mod = 0;
t_key *current_key=0, *last_key=0;
size_t argc = 0;
std::string keyMode = "default:";
string keyMode = "default:";
if (val[0][val[0].length()-1] == ':') {
argc++;
@ -213,21 +217,21 @@ bool Keys::addBinding(const std::string &linebuffer) {
// +[1-9] - number between +1 and +9
// numbers 10 and above
//
if (val[argc].size() > 1 && (isdigit(val[argc][0]) &&
(isdigit(val[argc][1]) || val[argc][1] == 'x') ||
if (val[argc].size() > 1 && (isdigit(val[argc][0]) &&
(isdigit(val[argc][1]) || val[argc][1] == 'x') ||
val[argc][0] == '+' && isdigit(val[argc][1])) ) {
key = strtoul(val[argc].c_str(), NULL, 0);
if (errno == EINVAL || errno == ERANGE)
key = 0;
} else // convert from string symbol
key = FbTk::KeyUtil::getKey(val[argc].c_str());
key = FbTk::KeyUtil::getKey(val[argc].c_str());
if (key == 0) {
cerr<<_FB_CONSOLETEXT(Keys, InvalidKeyMod,
"Keys: Invalid key/modifier on line",
cerr<<_FB_CONSOLETEXT(Keys, InvalidKeyMod,
"Keys: Invalid key/modifier on line",
"A bad key/modifier string was found on line (number following)")<<" "<<
m_current_line<<"): "<<linebuffer<<endl;
return false;
@ -391,7 +395,7 @@ bool Keys::mergeTree(t_key *newtree, t_key *basetree) {
return false;
}
void Keys::keyMode(std::string keyMode = "default") {
void Keys::keyMode(string keyMode = "default") {
keyspace_t::iterator it = m_map.find(keyMode + ":");
if (it == m_map.end())
m_keylist = m_map["default:"];

View file

@ -33,7 +33,12 @@
#include <string>
#include <iostream>
using namespace std;
using std::string;
#ifdef USE_REGEXP
using std::cerr;
using std::endl;
#endif // USE_REGEXP
/********************************************************
@ -42,7 +47,7 @@ using namespace std;
// full_match is to say if we match on this regexp using the full string
// or just a substring. Substrings aren't supported if not HAVE_REGEXP
RegExp::RegExp(const std::string &str, bool full_match):
RegExp::RegExp(const string &str, bool full_match):
#ifdef USE_REGEXP
m_regex(0) {
string match;
@ -83,7 +88,7 @@ RegExp::~RegExp() {
#endif // USE_REGEXP
}
bool RegExp::match(const std::string &str) const {
bool RegExp::match(const string &str) const {
#ifdef USE_REGEXP
if (m_regex)
return regexec(m_regex, str.c_str(), 0, 0, 0) == 0;
@ -97,7 +102,7 @@ bool RegExp::match(const std::string &str) const {
bool RegExp::error() const {
#ifdef USE_REGEXP
return m_regex == 0;
return m_regex == 0;
#else
return m_str == "";
#endif // USE_REGEXP

View file

@ -2,7 +2,7 @@
// Copyright (c) 2003 - 2006 Henrik Kinnunen (fluxgen at fluxbox dot org)
// and Simon Bowden (rathnor at users.sourceforge.net)
// Copyright (c) 2002 Xavier Brouckaert
//
//
// 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
@ -56,7 +56,17 @@
#include <set>
using namespace std;
using std::cerr;
using std::endl;
using std::string;
using std::list;
using std::set;
using std::make_pair;
using std::ifstream;
using std::ofstream;
using std::hex;
using std::dec;
namespace {
@ -254,7 +264,7 @@ Remember::~Remember() {
// the patterns free the "Application"s
// the client mapping shouldn't need cleaning
Patterns::iterator it;
std::set<Application *> all_apps; // no duplicates
set<Application *> all_apps; // no duplicates
while (!m_pats->empty()) {
it = m_pats->begin();
delete it->first; // ClientPattern
@ -262,7 +272,7 @@ Remember::~Remember() {
m_pats->erase(it);
}
std::set<Application *>::iterator ait = all_apps.begin(); // no duplicates
set<Application *>::iterator ait = all_apps.begin(); // no duplicates
for (; ait != all_apps.end(); ++ait) {
delete (*ait);
}
@ -300,7 +310,7 @@ Application * Remember::add(WinClient &winclient) {
return app;
}
int Remember::parseApp(std::ifstream &file, Application &app, std::string *first_line) {
int Remember::parseApp(ifstream &file, Application &app, string *first_line) {
string line;
_FB_USES_NLS;
int row = 0;
@ -346,13 +356,13 @@ int Remember::parseApp(std::ifstream &file, Application &app, std::string *first
continue; //read next line
if (strcasecmp(str_key.c_str(), "Workspace") == 0) {
unsigned int w;
if (getuint(str_label.c_str(), w))
if (getuint(str_label.c_str(), w))
app.rememberWorkspace(w);
else
had_error = true;
} else if (strcasecmp(str_key.c_str(), "Head") == 0) {
unsigned int h;
if (getuint(str_label.c_str(), h))
if (getuint(str_label.c_str(), h))
app.rememberHead(h);
else
had_error = true;
@ -403,7 +413,7 @@ int Remember::parseApp(std::ifstream &file, Application &app, std::string *first
}
}
if (!had_error && sscanf(str_label.c_str(), "%u %u", &x, &y) == 2)
if (!had_error && sscanf(str_label.c_str(), "%u %u", &x, &y) == 2)
app.rememberPosition(x, y, r);
else
had_error = true;
@ -476,8 +486,8 @@ int Remember::parseApp(std::ifstream &file, Application &app, std::string *first
This function is used to search for old instances of the same pattern
(when reloading apps file). More than one pattern might match, but only
if the application is the same (also note that they'll be adjacent).
We REMOVE and delete any matching patterns from the old list, as they're
effectively moved into the new
We REMOVE and delete any matching patterns from the old list, as they're
effectively moved into the new
*/
Application *Remember::findMatchingPatterns(ClientPattern *pat, Patterns *patlist, bool is_group) {
@ -519,10 +529,11 @@ void Remember::reconfigure() {
time_t timestamp = FbTk::FileUtil::getLastStatusChangeTimestamp(apps_string.c_str());
if (m_last_timestamp > 0 && m_last_timestamp == timestamp)
return;
#ifdef DEBUG
cerr<<__FILE__<<"("<<__FUNCTION__<<"): Loading apps file ["<<apps_string<<"]"<<endl;
#endif // DEBUG
ifstream apps_file(apps_string.c_str());
// we merge the old patterns with new ones
@ -536,7 +547,7 @@ void Remember::reconfigure() {
string line;
int row = 0;
bool in_group = false;
std::list<ClientPattern *> grouped_pats;
list<ClientPattern *> grouped_pats;
while (getline(apps_file, line) && ! apps_file.eof()) {
row++;
FbTk::StringUtil::removeFirstWhitespace(line);
@ -554,7 +565,7 @@ void Remember::reconfigure() {
if (!in_group) {
if ((err = pat->error()) == 0) {
Application *app = findMatchingPatterns(pat, old_pats, false);
if (!app)
if (!app)
app = new Application(false);
m_pats->push_back(make_pair(pat, app));
@ -578,8 +589,8 @@ void Remember::reconfigure() {
// otherwise assume that it is the start of the attributes
Application *app = 0;
// search for a matching app
std::list<ClientPattern *>::iterator it = grouped_pats.begin();
std::list<ClientPattern *>::iterator it_end = grouped_pats.end();
list<ClientPattern *>::iterator it = grouped_pats.begin();
list<ClientPattern *>::iterator it_end = grouped_pats.end();
while (!app && it != it_end) {
app = findMatchingPatterns(*it, old_pats, true);
++it;
@ -617,9 +628,9 @@ void Remember::reconfigure() {
// Clean up old state
// can't just delete old patterns list. Need to delete the
// patterns themselves, plus the applications!
Patterns::iterator it;
std::set<Application *> old_apps; // no duplicates
set<Application *> old_apps; // no duplicates
while (!old_pats->empty()) {
it = old_pats->begin();
delete it->first; // ClientPattern
@ -640,7 +651,7 @@ void Remember::reconfigure() {
}
}
std::set<Application *>::iterator ait = old_apps.begin(); // no duplicates
set<Application *>::iterator ait = old_apps.begin(); // no duplicates
for (; ait != old_apps.end(); ++ait) {
delete (*ait);
}
@ -667,7 +678,7 @@ void Remember::save() {
Patterns::iterator it = m_pats->begin();
Patterns::iterator it_end = m_pats->end();
std::set<Application *> grouped_apps; // no duplicates
set<Application *> grouped_apps; // no duplicates
for (; it != it_end; ++it) {
Application &a = *it->second;

View file

@ -135,19 +135,32 @@ extern "C" {
#endif // XINERAMA
#include <iostream>
#include <memory>
#include <algorithm>
#include <functional>
#include <stack>
using namespace std;
using std::cerr;
using std::endl;
using std::string;
using std::make_pair;
using std::pair;
using std::list;
using std::vector;
using std::mem_fun;
using std::bind2nd;
using std::equal_to;
#ifdef DEBUG
using std::hex;
using std::dec;
#endif // DEBUG
static bool running = true;
namespace {
int anotherWMRunning(Display *display, XErrorEvent *) {
_FB_USES_NLS;
cerr<<_FB_CONSOLETEXT(Screen, AnotherWMRunning,
cerr<<_FB_CONSOLETEXT(Screen, AnotherWMRunning,
"BScreen::BScreen: an error occured while querying the X server.\n"
" another window manager already running on display ",
"Message when another WM is found already active on all screens")
@ -161,8 +174,8 @@ int anotherWMRunning(Display *display, XErrorEvent *) {
class TabPlacementMenuItem: public FbTk::MenuItem {
public:
TabPlacementMenuItem(FbTk::FbString & label, BScreen &screen,
FbWinFrame::TabPlacement place,
TabPlacementMenuItem(FbTk::FbString & label, BScreen &screen,
FbWinFrame::TabPlacement place,
FbTk::RefCount<FbTk::Command> &cmd):
FbTk::MenuItem(label, cmd),
m_screen(screen),
@ -244,9 +257,9 @@ getString() const {
} // end namespace FbTk
BScreen::ScreenResource::ScreenResource(FbTk::ResourceManager &rm,
const std::string &scrname,
const std::string &altscrname):
BScreen::ScreenResource::ScreenResource(FbTk::ResourceManager &rm,
const string &scrname,
const string &altscrname):
image_dither(rm, false, scrname+".imageDither", altscrname+".ImageDither"),
opaque_move(rm, false, scrname + ".opaqueMove", altscrname+".OpaqueMove"),
full_max(rm, true, scrname+".fullMaximization", altscrname+".FullMaximization"),
@ -274,9 +287,9 @@ BScreen::ScreenResource::ScreenResource(FbTk::ResourceManager &rm,
menu_mode(rm, FbTk::MenuTheme::DELAY_OPEN, scrname+".menuMode", altscrname+".MenuMode"),
gc_line_width(rm, 1, scrname+".overlay.lineWidth", altscrname+".Overlay.LineWidth"),
gc_line_style(rm,
FbTk::GContext::LINESOLID,
scrname+".overlay.lineStyle",
gc_line_style(rm,
FbTk::GContext::LINESOLID,
scrname+".overlay.lineStyle",
altscrname+".Overlay.LineStyle"),
gc_join_style(rm,
FbTk::GContext::JOINMITER,
@ -290,24 +303,24 @@ BScreen::ScreenResource::ScreenResource(FbTk::ResourceManager &rm,
scroll_reverse(rm, false, scrname+".windowScrollReverse", altscrname+".WindowScrollReverse"),
max_over_tabs(rm, false, scrname+".tabs.maxOver", altscrname+".Tabs.MaxOver"),
default_internal_tabs(rm, false /* TODO: autoconf option? */ , scrname+".tabs.intitlebar", altscrname+".Tabs.InTitlebar") {
}
BScreen::BScreen(FbTk::ResourceManager &rm,
const std::string &screenname,
const std::string &altscreenname,
int scrn, int num_layers) :
const string &screenname,
const string &altscreenname,
int scrn, int num_layers) :
m_clientlist_sig(*this), // client signal
m_iconlist_sig(*this), // icon list signal
m_workspacecount_sig(*this), // workspace count signal
m_workspacenames_sig(*this), // workspace names signal
m_workspacenames_sig(*this), // workspace names signal
m_workspace_area_sig(*this), // workspace area signal
m_currentworkspace_sig(*this), // current workspace signal
m_reconfigure_sig(*this), // reconfigure signal
m_resize_sig(*this),
m_layermanager(num_layers),
m_windowtheme(new FbWinFrameTheme(scrn)),
m_windowtheme(new FbWinFrameTheme(scrn)),
// the order of windowtheme and winbutton theme is important
// because winbutton need to rescale the pixmaps in winbutton theme
// after fbwinframe have resized them
@ -315,7 +328,7 @@ BScreen::BScreen(FbTk::ResourceManager &rm,
m_menutheme(new MenuTheme(scrn)),
m_root_window(scrn),
m_geom_window(m_root_window,
0, 0, 10, 10,
0, 0, 10, 10,
false, // override redirect
true), // save under
m_pos_window(m_root_window,
@ -370,17 +383,17 @@ BScreen::BScreen(FbTk::ResourceManager &rm,
// TODO fluxgen: check if this is the right place
m_head_areas = new HeadArea[numHeads() ? numHeads() : 1];
_FB_USES_NLS;
fprintf(stderr, _FB_CONSOLETEXT(Screen, ManagingScreen,
"BScreen::BScreen: managing screen %d "
"using visual 0x%lx, depth %d\n",
"using visual 0x%lx, depth %d\n",
"informational message saying screen number (%d), visual (%lx), and colour depth (%d)").c_str(),
screenNumber(), XVisualIDFromVisual(rootWindow().visual()),
rootWindow().depth());
rootWindow().setCursor(XCreateFontCursor(disp, XC_left_ptr));
// load this screens resources
@ -388,7 +401,7 @@ BScreen::BScreen(FbTk::ResourceManager &rm,
fluxbox->load_rc(*this);
// setup image cache engine
m_image_control.reset(new FbTk::ImageControl(scrn, true,
m_image_control.reset(new FbTk::ImageControl(scrn, true,
fluxbox->colorsPerChannel(),
fluxbox->getCacheLife(), fluxbox->getCacheMax()));
imageControl().installRootColormap();
@ -435,13 +448,13 @@ BScreen::BScreen(FbTk::ResourceManager &rm,
}
m_current_workspace = m_workspaces_list.front();
//!! TODO: we shouldn't do this more than once, but since slit handles their
// own resources we must do this.
fluxbox->load_rc(*this);
m_configmenu.reset(createMenu(_FB_XTEXT(Menu, Configuration,
m_configmenu.reset(createMenu(_FB_XTEXT(Menu, Configuration,
"Configuration", "Title of configuration menu")));
setupConfigmenu(*m_configmenu.get());
m_configmenu->setInternalMenu();
@ -472,21 +485,21 @@ BScreen::BScreen(FbTk::ResourceManager &rm,
#endif // SLIT
rm.unlock();
XFlush(disp);
}
BScreen::~BScreen() {
if (! managed)
return;
if (m_rootmenu.get() != 0)
m_rootmenu->removeAll();
// Since workspacemenu holds client list menus (from workspace)
// we need to destroy it before we destroy workspaces
m_workspacemenu.reset(0);
@ -508,7 +521,7 @@ BScreen::~BScreen() {
mit->second->setInternalMenu(false);
}
}
if (geom_pixmap != None)
imageControl().removeImage(geom_pixmap);
@ -521,7 +534,7 @@ BScreen::~BScreen() {
destroyAndClear(m_netizen_list);
destroyAndClear(m_managed_resources);
//why not destroyAndClear(m_icon_list); ?
//why not destroyAndClear(m_icon_list); ?
//problem with that: a delete FluxboxWindow* calls m_diesig.notify()
//which leads to screen.removeWindow() which leads to removeIcon(win)
//which would modify the m_icon_list anyways...
@ -533,7 +546,7 @@ BScreen::~BScreen() {
delete (tmp.back());
tmp.pop_back();
}
if (hasXinerama() && m_xinerama_headinfo) {
delete [] m_xinerama_headinfo;
}
@ -654,8 +667,8 @@ void BScreen::initWindows() {
}
unsigned int BScreen::currentWorkspaceID() const {
return m_current_workspace->workspaceID();
unsigned int BScreen::currentWorkspaceID() const {
return m_current_workspace->workspaceID();
}
const Strut* BScreen::availableWorkspaceArea(int head) const {
@ -663,10 +676,10 @@ const Strut* BScreen::availableWorkspaceArea(int head) const {
}
unsigned int BScreen::maxLeft(int head) const {
// we ignore strut if we're doing full maximization
if (hasXinerama())
return doFullMax() ? getHeadX(head) :
return doFullMax() ? getHeadX(head) :
getHeadX(head) + availableWorkspaceArea(head)->left();
else
return doFullMax() ? 0 : availableWorkspaceArea(head)->left();
@ -675,7 +688,7 @@ unsigned int BScreen::maxLeft(int head) const {
unsigned int BScreen::maxRight(int head) const {
// we ignore strut if we're doing full maximization
if (hasXinerama())
return doFullMax() ? getHeadX(head) + getHeadWidth(head) :
return doFullMax() ? getHeadX(head) + getHeadWidth(head) :
getHeadX(head) + getHeadWidth(head) - availableWorkspaceArea(head)->right();
else
return doFullMax() ? width() : width() - availableWorkspaceArea(head)->right();
@ -723,21 +736,21 @@ void BScreen::update(FbTk::Subject *subj) {
const Icons::iterator it_end = iconList().end();
for (; it != it_end; ++it)
fluxbox->updateFrameExtents(**it);
}
FbTk::Menu *BScreen::createMenu(const std::string &label) {
FbTk::Menu *menu = new FbMenu(menuTheme(),
imageControl(),
FbTk::Menu *BScreen::createMenu(const string &label) {
FbTk::Menu *menu = new FbMenu(menuTheme(),
imageControl(),
*layerManager().getLayer(Layer::MENU));
if (!label.empty())
menu->setLabel(label);
return menu;
}
FbTk::Menu *BScreen::createToggleMenu(const std::string &label) {
FbTk::Menu *menu = new ToggleMenu(menuTheme(),
imageControl(),
FbTk::Menu *BScreen::createToggleMenu(const string &label) {
FbTk::Menu *menu = new ToggleMenu(menuTheme(),
imageControl(),
*layerManager().getLayer(Layer::MENU));
if (!label.empty())
menu->setLabel(label);
@ -748,7 +761,7 @@ FbTk::Menu *BScreen::createToggleMenu(const std::string &label) {
void BScreen::addExtraWindowMenu(const FbTk::FbString &label, FbTk::Menu *menu) {
menu->setInternalMenu();
menu->disableTitle();
m_extramenus.push_back(std::make_pair(label, menu));
m_extramenus.push_back(make_pair(label, menu));
// recreate window menu
m_windowmenu.reset(MenuCreator::createMenuType("windowmenu", screenNumber()));
m_windowmenu->setInternalMenu();
@ -772,7 +785,7 @@ void BScreen::hideMenus() {
(*it)->menu().hide();
}
// hide all client menus
hideWindowMenus();
hideWindowMenus();
}
@ -843,7 +856,7 @@ void BScreen::reconfigure() {
m_windowmenu->setInternalMenu();
// We need to check to see if the timestamps
// changed before we actually can restore the menus
// changed before we actually can restore the menus
// in the same way, since we can't really say if
// any submenu is in the same place as before if the
// menu changed.
@ -873,7 +886,7 @@ void BScreen::reconfigure() {
FbTk::Menu *menu = m_rootmenu.get();
for (size_t i = 0; i < remember_sub.size(); i++ ) {
int sub = remember_sub[i];
if (!menu || sub < 0)
if (!menu || sub < 0)
break;
FbTk::MenuItem *item = menu->find(sub);
if (item != 0) {
@ -889,12 +902,12 @@ void BScreen::reconfigure() {
for_each(m_workspaces_list.begin(),
m_workspaces_list.end(),
mem_fun(&Workspace::reconfigure));
// reconfigure Icons
for_each(m_icon_list.begin(),
m_icon_list.end(),
mem_fun(&FluxboxWindow::reconfigure));
imageControl().cleanCache();
// notify objects that the screen is reconfigured
m_reconfigure_sig.notify();
@ -952,7 +965,7 @@ void BScreen::updateWorkspaceNamesAtom() {
}
void BScreen::addIcon(FluxboxWindow *w) {
if (w == 0)
if (w == 0)
return;
// make sure we have a unique list
@ -973,7 +986,7 @@ void BScreen::removeIcon(FluxboxWindow *w) {
Icons::iterator erase_it = remove_if(iconList().begin(),
iconList().end(),
bind2nd(equal_to<FluxboxWindow *>(), w));
// no need to send iconlist signal if we didn't
// no need to send iconlist signal if we didn't
// change the iconlist
if (erase_it != m_icon_list.end()) {
iconList().erase(erase_it);
@ -985,7 +998,7 @@ void BScreen::removeWindow(FluxboxWindow *win) {
#ifdef DEBUG
cerr<<"BScreen::removeWindow("<<win<<")"<<endl;
#endif // DEBUG
// extra precaution, if for some reason, the
// extra precaution, if for some reason, the
// icon list should be out of sync
removeIcon(win);
// remove from workspace
@ -1022,20 +1035,20 @@ void BScreen::removeClient(WinClient &client) {
int BScreen::addWorkspace() {
bool save_name = getNameOfWorkspace(m_workspaces_list.size()) != "" ? false : true;
Workspace *wkspc = new Workspace(*this, m_layermanager,
Workspace *wkspc = new Workspace(*this, m_layermanager,
getNameOfWorkspace(m_workspaces_list.size()),
m_workspaces_list.size());
m_workspaces_list.push_back(wkspc);
if (save_name)
addWorkspaceName(wkspc->name().c_str()); //update names
saveWorkspaces(m_workspaces_list.size());
updateNetizenWorkspaceCount();
updateNetizenWorkspaceCount();
return m_workspaces_list.size();
}
/// removes last workspace
@ -1059,7 +1072,7 @@ int BScreen::removeLastWorkspace() {
m_clientlist_sig.notify();
//remove last workspace
m_workspaces_list.pop_back();
m_workspaces_list.pop_back();
updateNetizenWorkspaceCount();
saveWorkspaces(m_workspaces_list.size());
@ -1104,10 +1117,10 @@ void BScreen::changeWorkspaceID(unsigned int id) {
// set new workspace
m_current_workspace = getWorkspace(id);
// This is a little tricks to reduce flicker
// This is a little tricks to reduce flicker
// this way we can set focus pixmap on frame before we show it
// and using ExposeEvent to redraw without flicker
/*
/*
WinClient *win = getLastFocusedWindow(currentWorkspaceID());
if (win && win->fbwindow())
win->fbwindow()->setFocusFlag(true);
@ -1146,7 +1159,7 @@ void BScreen::sendToWorkspace(unsigned int id, FluxboxWindow *win, bool changeWS
win->deiconify();
// if the window isn't on current workspace, hide it
if (id != currentWorkspace()->workspaceID())
if (id != currentWorkspace()->workspaceID())
win->withdraw(true);
windowMenu().hide();
@ -1182,7 +1195,7 @@ void BScreen::addNetizen(Window win) {
Workspace::Windows::iterator win_it = (*it)->windowList().begin();
Workspace::Windows::iterator win_it_end = (*it)->windowList().end();
for (; win_it != win_it_end; ++win_it) {
net->sendWindowAdd((*win_it)->clientWindow(),
net->sendWindowAdd((*win_it)->clientWindow(),
(*it)->workspaceID());
}
}
@ -1199,7 +1212,7 @@ void BScreen::removeNetizen(Window w) {
if ((*it)->window() == w) {
Netizen *n = *it;
delete n;
m_netizen_list.erase(it);
m_netizen_list.erase(it);
break;
}
}
@ -1218,7 +1231,7 @@ void BScreen::updateNetizenWorkspaceCount() {
for_each(m_netizen_list.begin(),
m_netizen_list.end(),
mem_fun(&Netizen::sendWorkspaceCount));
m_workspacecount_sig.notify();
m_workspacecount_sig.notify();
}
@ -1235,14 +1248,14 @@ void BScreen::updateNetizenWindowAdd(Window w, unsigned long p) {
// update the list of clients
m_clientlist_sig.notify();
// and then send the signal to listeners
Netizens::iterator it = m_netizen_list.begin();
Netizens::iterator it_end = m_netizen_list.end();
for (; it != it_end; ++it) {
(*it)->sendWindowAdd(w, p);
}
}
@ -1250,7 +1263,7 @@ void BScreen::updateNetizenWindowDel(Window w) {
for_each(m_netizen_list.begin(),
m_netizen_list.end(),
bind2nd(mem_fun(&Netizen::sendWindowDel), w));
m_clientlist_sig.notify();
}
@ -1285,12 +1298,12 @@ bool BScreen::isKdeDockapp(Window client) const {
Display *disp = FbTk::App::instance()->display();
// Check if KDE v2.x dock applet
if (XGetWindowProperty(disp, client,
XInternAtom(FbTk::App::instance()->display(),
XInternAtom(FbTk::App::instance()->display(),
"_KDE_NET_WM_SYSTEM_TRAY_WINDOW_FOR", False),
0l, 1l, False,
XA_WINDOW, &ajunk, &ijunk, &uljunk,
&uljunk, (unsigned char **) &data) == Success) {
if (data)
iskdedockapp = true;
XFree((void *) data);
@ -1299,7 +1312,7 @@ bool BScreen::isKdeDockapp(Window client) const {
// Check if KDE v1.x dock applet
if (!iskdedockapp) {
Atom kwm1 = XInternAtom(FbTk::App::instance()->display(),
Atom kwm1 = XInternAtom(FbTk::App::instance()->display(),
"KWM_DOCKWINDOW", False);
if (XGetWindowProperty(disp, client,
kwm1, 0l, 1l, False,
@ -1309,7 +1322,7 @@ bool BScreen::isKdeDockapp(Window client) const {
XFree((void *) data);
data = 0;
}
}
}
return iskdedockapp;
}
@ -1317,9 +1330,9 @@ bool BScreen::isKdeDockapp(Window client) const {
bool BScreen::addKdeDockapp(Window client) {
XSelectInput(FbTk::App::instance()->display(), client, StructureNotifyMask);
char intbuff[16];
char intbuff[16];
sprintf(intbuff, "%d", screenNumber());
std::string atom_name("_NET_SYSTEM_TRAY_S");
string atom_name("_NET_SYSTEM_TRAY_S");
atom_name += intbuff; // append number
// find the right atomhandler that has the name: _NET_SYSTEM_TRAY_S<num>
AtomHandler *handler = Fluxbox::instance()->getAtomHandler(atom_name);
@ -1333,7 +1346,7 @@ bool BScreen::addKdeDockapp(Window client) {
#endif // SLIT
return false;
} else {
// this handler is a special case
// this handler is a special case
// so we call setupClient in it
WinClient winclient(client, *this);
handler->setupClient(winclient);
@ -1381,14 +1394,14 @@ FluxboxWindow *BScreen::createWindow(Window client) {
win = new FluxboxWindow(*winclient,
winFrameTheme(),
*layerManager().getLayer(Layer::NORMAL));
if (!win->isManaged()) {
delete win;
return 0;
}
}
}
}
// always put on end of focused list, if it gets focused it'll get pushed up
// there is only the one win client at this stage
focusControl().addFocusBack(*winclient);
@ -1422,7 +1435,7 @@ FluxboxWindow *BScreen::createWindow(WinClient &client) {
slit()->addClient(win->clientWindow());
}
#endif // SLIT
if (!win->isManaged()) {
delete win;
@ -1440,7 +1453,7 @@ FluxboxWindow *BScreen::createWindow(WinClient &client) {
Strut *BScreen::requestStrut(int head, int left, int right, int top, int bottom) {
if (head > numHeads() && head != 1) {
// head does not exist (if head == 1, then numHeads() == 0,
// head does not exist (if head == 1, then numHeads() == 0,
// which means no xinerama, but there's a head after all
head = numHeads();
}
@ -1462,7 +1475,7 @@ Strut *BScreen::requestStrut(int head, int left, int right, int top, int bottom)
}
void BScreen::clearStrut(Strut *str) {
if (str->next())
if (str->next())
clearStrut(str->next());
int head = str->head() ? str->head() - 1 : 0;
m_head_areas[head].clearStrut(str);
@ -1493,7 +1506,7 @@ string BScreen::getNameOfWorkspace(unsigned int workspace) const {
return "";
}
void BScreen::reassociateWindow(FluxboxWindow *w, unsigned int wkspc_id,
void BScreen::reassociateWindow(FluxboxWindow *w, unsigned int wkspc_id,
bool ignore_sticky) {
if (w == 0)
return;
@ -1510,10 +1523,10 @@ void BScreen::reassociateWindow(FluxboxWindow *w, unsigned int wkspc_id,
getWorkspace(wkspc_id)->addWindow(*w);
// client list need to notify now even though
// we didn't remove/add any window,
// so listeners that uses the client list to
// so listeners that uses the client list to
// show whats on current/other workspace
// gets updated
m_clientlist_sig.notify();
m_clientlist_sig.notify();
} else if (ignore_sticky || ! w->isStuck()) {
// fresh windows have workspaceNumber == -1, which leads to
// an invalid workspace (unsigned int)
@ -1534,12 +1547,12 @@ void BScreen::initMenus() {
void BScreen::initMenu() {
if (m_rootmenu.get()) {
// since all menus in root is submenus in m_rootmenu
// just remove every item in m_rootmenu and then clear m_rootmenu_list
while (m_rootmenu->numberOfItems())
m_rootmenu->remove(0);
m_rootmenu->remove(0);
m_rootmenu_list.clear();
} else
@ -1571,7 +1584,7 @@ void BScreen::initMenu() {
void BScreen::addConfigMenu(const FbTk::FbString &label, FbTk::Menu &menu) {
m_configmenu_list.push_back(std::make_pair(label, &menu));
m_configmenu_list.push_back(make_pair(label, &menu));
setupConfigmenu(*m_configmenu.get());
}
@ -1585,7 +1598,7 @@ void BScreen::removeConfigMenu(FbTk::Menu &menu) {
setupConfigmenu(*m_configmenu.get());
}
}
void BScreen::addManagedResource(FbTk::Resource_base *resource) {
@ -1600,12 +1613,12 @@ void BScreen::setupConfigmenu(FbTk::Menu &menu) {
FbTk::MacroCommand *s_a_reconf_macro = new FbTk::MacroCommand();
FbTk::MacroCommand *s_a_reconftabs_macro = new FbTk::MacroCommand();
FbTk::RefCount<FbTk::Command> saverc_cmd(new FbTk::SimpleCommand<Fluxbox>(
*Fluxbox::instance(),
*Fluxbox::instance(),
&Fluxbox::save_rc));
FbTk::RefCount<FbTk::Command> reconf_cmd(CommandParser::instance().parseLine("reconfigure"));
FbTk::RefCount<FbTk::Command> reconftabs_cmd(new FbTk::SimpleCommand<BScreen>(
*this,
*this,
&BScreen::reconfigureTabs));
s_a_reconf_macro->add(saverc_cmd);
s_a_reconf_macro->add(reconf_cmd);
@ -1614,15 +1627,15 @@ void BScreen::setupConfigmenu(FbTk::Menu &menu) {
FbTk::RefCount<FbTk::Command> save_and_reconfigure(s_a_reconf_macro);
FbTk::RefCount<FbTk::Command> save_and_reconftabs(s_a_reconftabs_macro);
// create focus menu
// we don't set this to internal menu so will
// we don't set this to internal menu so will
// be deleted toghether with the parent
FbTk::FbString focusmenu_label = _FB_XTEXT(Configmenu, FocusModel,
"Focus Model",
"Focus Model",
"Method used to give focus to windows");
FbTk::Menu *focus_menu = createMenu(focusmenu_label);
#define _BOOLITEM(m,a, b, c, d, e, f) (m).insert(new BoolMenuItem(_FB_XTEXT(a, b, c, d), e, f))
#define _FOCUSITEM(a, b, c, d, e) \
focus_menu->insert(new FocusModelMenuItem(_FB_XTEXT(a, b, c, d), focusControl(), \
@ -1641,9 +1654,9 @@ void BScreen::setupConfigmenu(FbTk::Menu &menu) {
focusControl(), FocusControl::CLICKTABFOCUS, save_and_reconfigure));
focus_menu->insert(new TabFocusModelMenuItem(_FB_XTEXT(Configmenu,
MouseTabFocus, "MouseTabFocus", "Hover over tab to focus windows"),
focusControl(), FocusControl::MOUSETABFOCUS, save_and_reconfigure));
focusControl(), FocusControl::MOUSETABFOCUS, save_and_reconfigure));
focus_menu->insert(new BoolMenuItem(_FB_XTEXT(Configmenu,
focus_menu->insert(new BoolMenuItem(_FB_XTEXT(Configmenu,
AutoRaise,
"Auto Raise",
"Auto Raise windows on sloppy"),
@ -1659,7 +1672,7 @@ void BScreen::setupConfigmenu(FbTk::Menu &menu) {
// BEGIN tab menu
FbTk::FbString tabmenu_label = _FB_XTEXT(Configmenu, TabMenu,
"Tab Options",
"Tab Options",
"heading for tab-related options");
FbTk::Menu *tab_menu = createMenu(tabmenu_label);
FbTk::FbString tabplacement_label = _FB_XTEXT(Menu, Placement, "Placement", "Title of Placement menu");
@ -1675,7 +1688,7 @@ void BScreen::setupConfigmenu(FbTk::Menu &menu) {
*resource.max_over_tabs, save_and_reconfigure));
FbTk::MenuItem *tab_width_item =
new IntResMenuItem(_FB_XTEXT(Configmenu, ExternalTabWidth,
new IntResMenuItem(_FB_XTEXT(Configmenu, ExternalTabWidth,
"External Tab Width",
"Width of external-style tabs"),
resource.tab_width, 10, 3000, /* silly number */
@ -1722,7 +1735,7 @@ void BScreen::setupConfigmenu(FbTk::Menu &menu) {
"Image Dithering", "Image Dithering",
*resource.image_dither, save_and_reconfigure);
_BOOLITEM(menu, Configmenu, OpaqueMove,
"Opaque Window Moving",
"Opaque Window Moving",
"Window Moving with whole window visible (as opposed to outline moving)",
*resource.opaque_move, saverc_cmd);
_BOOLITEM(menu, Configmenu, FullMax,
@ -1747,7 +1760,7 @@ void BScreen::setupConfigmenu(FbTk::Menu &menu) {
}
_BOOLITEM(menu, Configmenu, WorkspaceWarping,
"Workspace Warping",
"Workspace Warping",
"Workspace Warping - dragging windows to the edge and onto the next workspace",
*resource.workspace_warping, saverc_cmd);
_BOOLITEM(menu, Configmenu, DesktopWheeling,
@ -1757,7 +1770,7 @@ void BScreen::setupConfigmenu(FbTk::Menu &menu) {
"Decorate Transient Windows", "Decorate Transient Windows",
*resource.decorate_transient, saverc_cmd);
_BOOLITEM(menu, Configmenu, ClickRaises,
"Click Raises", "Click Raises",
"Click Raises", "Click Raises",
*resource.click_raises, saverc_cmd);
#ifdef HAVE_XRENDER
@ -1765,37 +1778,37 @@ void BScreen::setupConfigmenu(FbTk::Menu &menu) {
FbTk::Transparent::haveComposite()) {
FbTk::FbString alphamenu_label = _FB_XTEXT(Configmenu, Transparency,
"Transparency",
"Transparency",
"Menu containing various transparency options");
FbTk::Menu *alpha_menu = createMenu(alphamenu_label);
if (FbTk::Transparent::haveComposite(true)) {
alpha_menu->insert(new BoolMenuItem(_FB_XTEXT(Configmenu, ForcePseudoTrans,
"Force Pseudo-Transparency",
"Force Pseudo-Transparency",
"When composite is available, still use old pseudo-transparency"),
Fluxbox::instance()->getPseudoTrans(), save_and_reconfigure));
}
FbTk::MenuItem *focused_alpha_item =
new IntResMenuItem(_FB_XTEXT(Configmenu, FocusedAlpha,
new IntResMenuItem(_FB_XTEXT(Configmenu, FocusedAlpha,
"Focused Window Alpha",
"Transparency level of the focused window"),
resource.focused_alpha, 0, 255, *alpha_menu);
focused_alpha_item->setCommand(saverc_cmd);
alpha_menu->insert(focused_alpha_item);
FbTk::MenuItem *unfocused_alpha_item =
new IntResMenuItem(_FB_XTEXT(Configmenu,
UnfocusedAlpha,
"Unfocused Window Alpha",
FbTk::MenuItem *unfocused_alpha_item =
new IntResMenuItem(_FB_XTEXT(Configmenu,
UnfocusedAlpha,
"Unfocused Window Alpha",
"Transparency level of unfocused windows"),
resource.unfocused_alpha, 0, 255, *alpha_menu);
unfocused_alpha_item->setCommand(saverc_cmd);
alpha_menu->insert(unfocused_alpha_item);
FbTk::MenuItem *menu_alpha_item =
new IntResMenuItem(_FB_XTEXT(Configmenu, MenuAlpha,
FbTk::MenuItem *menu_alpha_item =
new IntResMenuItem(_FB_XTEXT(Configmenu, MenuAlpha,
"Menu Alpha", "Transparency level of menu"),
resource.menu_alpha, 0, 255, *alpha_menu);
menu_alpha_item->setCommand(saverc_cmd);
@ -1807,7 +1820,7 @@ void BScreen::setupConfigmenu(FbTk::Menu &menu) {
#endif // HAVE_XRENDER
#undef _BOOLITEM
// finaly update menu
// finaly update menu
menu.updateMenu();
}
@ -1833,9 +1846,9 @@ void BScreen::showPosition(int x, int y) {
m_pos_window.move(getHeadX(head) + (getHeadWidth(head) - m_pos_window.width()) / 2,
getHeadY(head) + (getHeadHeight(head) - m_pos_window.height()) / 2);
} else {
m_pos_window.move((width() - m_pos_window.width()) / 2,
m_pos_window.move((width() - m_pos_window.width()) / 2,
(height() - m_pos_window.height()) / 2);
}
@ -1854,10 +1867,10 @@ void BScreen::showPosition(int x, int y) {
screenNumber(),
winFrameTheme().labelTextFocusGC(),
label, strlen(label),
winFrameTheme().bevelWidth(),
winFrameTheme().bevelWidth() +
winFrameTheme().bevelWidth(),
winFrameTheme().bevelWidth() +
winFrameTheme().font().ascent());
}
@ -1880,7 +1893,7 @@ void BScreen::showGeometry(int gx, int gy) {
m_geom_window.move(getHeadX(head) + (getHeadWidth(head) - m_geom_window.width()) / 2,
getHeadY(head) + (getHeadHeight(head) - m_geom_window.height()) / 2);
} else {
m_geom_window.move((width() - m_geom_window.width()) / 2,
m_geom_window.move((width() - m_geom_window.width()) / 2,
(height() - m_geom_window.height()) / 2);
}
@ -1889,7 +1902,7 @@ void BScreen::showGeometry(int gx, int gy) {
geom_visible = true;
}
char label[256];
_FB_USES_NLS;
@ -1906,9 +1919,9 @@ void BScreen::showGeometry(int gx, int gy) {
screenNumber(),
winFrameTheme().labelTextFocusGC(),
label, strlen(label),
winFrameTheme().bevelWidth(),
winFrameTheme().bevelWidth() +
winFrameTheme().font().ascent());
winFrameTheme().bevelWidth(),
winFrameTheme().bevelWidth() +
winFrameTheme().font().ascent());
}
@ -2106,7 +2119,7 @@ void BScreen::initXinerama() {
if (!XineramaIsActive(display)) {
#ifdef DEBUG
cerr<<"BScreen::initXinerama(): dont have Xinerama"<<endl;
#endif // DEBUG
#endif // DEBUG
m_xinerama_avail = false;
m_xinerama_headinfo = 0;
m_xinerama_num_heads = 0;
@ -2114,7 +2127,7 @@ void BScreen::initXinerama() {
}
#ifdef DEBUG
cerr<<"BScreen::initXinerama(): have Xinerama"<<endl;
#endif // DEBUG
#endif // DEBUG
m_xinerama_avail = true;
XineramaScreenInfo *screen_info;
@ -2161,7 +2174,7 @@ int BScreen::getHead(int x, int y) const {
int BScreen::getHead(FbTk::FbWindow &win) const {
if (hasXinerama())
return getHead(win.x() + win.width()/2, win.y() + win.height()/2);
else
else
return 0;
}
@ -2176,7 +2189,7 @@ int BScreen::getCurrHead() const {
Window ignore_w;
XQueryPointer(FbTk::App::instance()->display(),
rootWindow().window(), &ignore_w,
rootWindow().window(), &ignore_w,
&ignore_w, &root_x, &root_y,
&ignore_i, &ignore_i, &ignore_ui);
#endif // XINERAMA
@ -2225,17 +2238,17 @@ pair<int,int> BScreen::clampToHead(int head, int x, int y, int w, int h) const {
// a better way would be to search the closest head
if (head == 0 && numHeads() != 0)
head = 1;
int hx = getHeadX(head);
int hy = getHeadY(head);
int hw = getHeadWidth(head);
int hh = getHeadHeight(head);
if (x + w > hx + hw)
x = hx + hw - w;
if (y + h > hy + hh)
y = hy + hh - h;
if (x < hx)
x = hx;
if (y < hy)

View file

@ -1,6 +1,6 @@
// Shape.cc
// Copyright (c) 2003 - 2006 Henrik Kinnunen (fluxgen at fluxbox dot org)
//
//
// 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
@ -28,6 +28,10 @@
#include "FbTk/GContext.hh"
#include "FbTk/FbPixmap.hh"
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif // HAVE_CONFIG_H
#ifdef HAVE_CSTRING
#include <cstring>
#else
@ -35,9 +39,6 @@
#endif
#include <X11/Xutil.h>
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif // HAVE_CONFIG_H
#ifdef SHAPE
#include <X11/extensions/shape.h>
@ -45,15 +46,16 @@
#include <iostream>
#include <algorithm>
using namespace std;
using std::min;
namespace {
FbTk::FbPixmap *createShape(const FbTk::FbWindow &win, int place) {
if (win.window() == 0 || place == 0 ||
if (win.window() == 0 || place == 0 ||
win.width() < 3 || win.height() < 3)
return 0;
static char left_bits[] = { 0xc0, 0xf8, 0xfc, 0xfe, 0xfe, 0xfe, 0xff, 0xff };
static char right_bits[] = { 0x03, 0x1f, 0x3f, 0x7f, 0x7f, 0x7f, 0xff, 0xff};
static char bottom_left_bits[] = { 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xfc, 0xf8, 0xc0 };
@ -74,7 +76,7 @@ FbTk::FbPixmap *createShape(const FbTk::FbWindow &win, int place) {
return 0;
memset(data, 0xFF, data_size);
XImage *ximage = XCreateImage(disp,
DefaultVisual(disp, win.screenNumber()),
1,
@ -96,20 +98,20 @@ FbTk::FbPixmap *createShape(const FbTk::FbWindow &win, int place) {
}
}
}
if (place & Shape::TOPRIGHT) {
for (int y=0; y<pixmap_height; y++) {
for (int x=0; x<pixmap_width; x++) {
XPutPixel(ximage, x + win_width - pixmap_width, y,
XPutPixel(ximage, x + win_width - pixmap_width, y,
(right_bits[y] & (0x01 << x)) ? 1 : 0);
}
}
}
}
if (place & Shape::BOTTOMLEFT) {
for (int y=0; y<pixmap_height; y++) {
for (int x=0; x<pixmap_width; x++) {
XPutPixel(ximage, x, y + win_height - pixmap_height,
XPutPixel(ximage, x, y + win_height - pixmap_height,
(bottom_left_bits[y] & (0x01 << x)) ? 1 : 0);
}
}
@ -128,7 +130,7 @@ FbTk::FbPixmap *createShape(const FbTk::FbWindow &win, int place) {
FbTk::GContext gc(*pm);
XPutImage(disp, pm->drawable(), gc.gc(), ximage, 0, 0, 0, 0,
win_width, win_height);
@ -177,7 +179,7 @@ void Shape::update() {
}
// the m_shape can be = 0 which will just reset the shape mask
// and make the window normal
// and make the window normal
XShapeCombineMask(FbTk::App::instance()->display(),
m_win->window(),
ShapeBounding,
@ -197,7 +199,7 @@ void Shape::setWindow(FbTk::FbWindow &win) {
void Shape::setShapeNotify(const FbTk::FbWindow &win) {
#ifdef SHAPE
XShapeSelectInput(FbTk::App::instance()->display(),
XShapeSelectInput(FbTk::App::instance()->display(),
win.window(), ShapeNotifyMask);
#endif // SHAPE
}
@ -209,7 +211,7 @@ bool Shape::isShaped(const FbTk::FbWindow &win) {
int not_used;
unsigned int not_used2;
XShapeQueryExtents(FbTk::App::instance()->display(),
win.window(),
win.window(),
&shaped, /// bShaped
&not_used, &not_used, // xbs, ybs
&not_used2, &not_used2, // wbs, hbs

View file

@ -78,7 +78,19 @@
#include <iostream>
#include <algorithm>
using namespace std;
using std::string;
using std::pair;
using std::list;
using std::ifstream;
using std::ofstream;
using std::endl;
#ifdef DEBUG
using std::cerr;
using std::hex;
using std::dec;
#endif // DEBUG
namespace FbTk {
@ -108,9 +120,9 @@ void FbTk::Resource<Slit::Placement>::setFromString(const char *strval) {
template<>
void FbTk::Resource<Slit::Direction>::setFromString(const char *strval) {
if (strcasecmp(strval, "Vertical") == 0)
if (strcasecmp(strval, "Vertical") == 0)
m_value = Slit::VERTICAL;
else if (strcasecmp(strval, "Horizontal") == 0)
else if (strcasecmp(strval, "Horizontal") == 0)
m_value = Slit::HORIZONTAL;
else
setDefaultValue();
@ -130,7 +142,7 @@ string FbTk::Resource<Slit::Placement>::getString() const {
break;
case Slit::TOPCENTER:
return string("TopCenter");
break;
break;
case Slit::BOTTOMCENTER:
return string("BottomCenter");
break;
@ -162,7 +174,7 @@ string FbTk::Resource<Slit::Direction>::getString() const {
return string("Vertical");
}
} // end namespace FbTk
namespace {
namespace {
class SlitClientMenuItem: public FbTk::MenuItem{
public:
@ -172,7 +184,7 @@ public:
FbTk::MenuItem::setSelected(client.visible());
setToggleItem(true);
}
const std::string &label() const {
const string &label() const {
return m_client.matchName();
}
bool isSelected() const {
@ -197,9 +209,9 @@ private:
class SlitDirMenuItem: public FbTk::MenuItem {
public:
SlitDirMenuItem(const FbTk::FbString &label, Slit &slit, FbTk::RefCount<FbTk::Command> &cmd)
:FbTk::MenuItem(label,cmd),
m_slit(slit),
m_label(label) {
:FbTk::MenuItem(label,cmd),
m_slit(slit),
m_label(label) {
setLabel(m_label); // update label
}
@ -216,23 +228,23 @@ public:
void setLabel(const FbTk::FbString &label) {
_FB_USES_NLS;
m_label = (label);
std::string reallabel = m_label + " " +
( m_slit.direction() == Slit::HORIZONTAL ?
string reallabel = m_label + " " +
( m_slit.direction() == Slit::HORIZONTAL ?
_FB_XTEXT(Align, Horizontal, "Horizontal", "Horizontal"):
_FB_XTEXT(Align, Vertical, "Vertical", "Vertical"));
FbTk::MenuItem::setLabel(reallabel);
}
private:
Slit &m_slit;
std::string m_label;
string m_label;
};
class PlaceSlitMenuItem: public FbTk::MenuItem {
public:
PlaceSlitMenuItem(const FbTk::FbString &label, Slit &slit, Slit::Placement place, FbTk::RefCount<FbTk::Command> &cmd):
FbTk::MenuItem(label, cmd), m_slit(slit), m_place(place) {
}
bool isEnabled() const { return m_slit.placement() != m_place; }
void click(int button, int time) {
@ -246,13 +258,13 @@ private:
}; // End anonymous namespace
unsigned int Slit::s_eventmask = SubstructureRedirectMask | ButtonPressMask |
unsigned int Slit::s_eventmask = SubstructureRedirectMask | ButtonPressMask |
EnterWindowMask | LeaveWindowMask | ExposureMask;
Slit::Slit(BScreen &scr, FbTk::XLayer &layer, const char *filename)
: m_hidden(false),
m_screen(scr),
m_slitmenu(scr.menuTheme(),
m_slitmenu(scr.menuTheme(),
scr.imageControl(),
*scr.layerManager().getLayer(Layer::MENU)),
m_clientlist_menu(scr.menuTheme(),
@ -260,9 +272,9 @@ Slit::Slit(BScreen &scr, FbTk::XLayer &layer, const char *filename)
*scr.layerManager().getLayer(Layer::MENU)),
frame(scr.rootWindow()),
//For KDE dock applets
m_kwm1_dockwindow(XInternAtom(FbTk::App::instance()->display(),
m_kwm1_dockwindow(XInternAtom(FbTk::App::instance()->display(),
"KWM_DOCKWINDOW", False)), //KDE v1.x
m_kwm2_dockwindow(XInternAtom(FbTk::App::instance()->display(),
m_kwm2_dockwindow(XInternAtom(FbTk::App::instance()->display(),
"_KDE_NET_WM_SYSTEM_TRAY_WINDOW_FOR", False)), //KDE v2.x
m_layeritem(0),
@ -271,20 +283,20 @@ Slit::Slit(BScreen &scr, FbTk::XLayer &layer, const char *filename)
m_strut(0),
// resources
// lock in first resource
m_rc_auto_hide(scr.resourceManager().lock(), false,
m_rc_auto_hide(scr.resourceManager().lock(), false,
scr.name() + ".slit.autoHide", scr.altName() + ".Slit.AutoHide"),
// TODO: this resource name must change
m_rc_maximize_over(scr.resourceManager(), false,
scr.name() + ".slit.maxOver", scr.altName() + ".Slit.MaxOver"),
m_rc_placement(scr.resourceManager(), BOTTOMRIGHT,
scr.name() + ".slit.placement", scr.altName() + ".Slit.Placement"),
m_rc_direction(scr.resourceManager(), VERTICAL,
m_rc_direction(scr.resourceManager(), VERTICAL,
scr.name() + ".slit.direction", scr.altName() + ".Slit.Direction"),
m_rc_alpha(scr.resourceManager(), 255,
m_rc_alpha(scr.resourceManager(), 255,
scr.name() + ".slit.alpha", scr.altName() + ".Slit.Alpha"),
m_rc_on_head(scr.resourceManager(), 0,
scr.name() + ".slit.onhead", scr.altName() + ".Slit.onHead"),
m_rc_layernum(scr.resourceManager(), Layer(Layer::DOCK),
m_rc_layernum(scr.resourceManager(), Layer(Layer::DOCK),
scr.name() + ".slit.layer", scr.altName() + ".Slit.Layer") {
_FB_USES_NLS;
@ -307,7 +319,7 @@ Slit::Slit(BScreen &scr, FbTk::XLayer &layer, const char *filename)
FbTk::EventManager::instance()->add(*this, frame.window);
if (FbTk::Transparent::haveComposite()) {
frame.window.setOpaque(*m_rc_alpha);
} else {
@ -319,7 +331,7 @@ Slit::Slit(BScreen &scr, FbTk::XLayer &layer, const char *filename)
m_layermenu.reset(new LayerMenu(scr.menuTheme(),
scr.imageControl(),
*scr.layerManager().
getLayer(Layer::MENU),
getLayer(Layer::MENU),
this,
true));
m_layermenu->setLabel(_FB_XTEXT(Slit, Layer, "Slit Layer", "Title of Slit Layer Menu"));
@ -343,7 +355,7 @@ Slit::~Slit() {
screen().imageControl().removeImage(frame.pixmap);
// otherwise it will try to access it on deletion
screen().removeConfigMenu(m_slitmenu);
screen().removeConfigMenu(m_slitmenu);
shutdown();
}
@ -429,7 +441,7 @@ void Slit::addClient(Window w) {
// Look for slot in client list by name
SlitClient *client = 0;
std::string match_name;
string match_name;
match_name = Xutil::getWMClassName(w);
SlitClients::iterator it = m_client_list.begin();
SlitClients::iterator it_end = m_client_list.end();
@ -445,7 +457,7 @@ void Slit::addClient(Window w) {
}
// Otherwise keep looking for an unused match or a non-match
found_match = true; // Possibly redundant
} else if (found_match) {
// Insert before first non-match after a previously found match?
client = new SlitClient(&screen(), w);
@ -466,7 +478,7 @@ void Slit::addClient(Window w) {
if ((wmhints->flags & IconWindowHint) &&
(wmhints->icon_window != None)) {
XMoveWindow(disp, client->clientWindow(), screen().width() + 10,
screen().height() + 10);
screen().height() + 10);
XMapWindow(disp, client->clientWindow());
client->setIconWindow(wmhints->icon_window);
client->setWindow(client->iconWindow());
@ -486,12 +498,12 @@ void Slit::addClient(Window w) {
FbAtoms *fbatoms = FbAtoms::instance();
if (XGetWMProtocols(disp, w, &proto, &num_return)) {
for (int i = 0; i < num_return; ++i) {
if (proto[i] == fbatoms->getFluxboxStructureMessagesAtom())
screen().addNetizen(w);
}
XFree((void *) proto);
#ifdef DEBUG
} else {
@ -500,13 +512,13 @@ void Slit::addClient(Window w) {
}
XWindowAttributes attrib;
#ifdef KDE
if (screen().isKdeDockapp(w))
if (screen().isKdeDockapp(w))
client->resize(24, 24);
else
#endif // KDE
{
if (XGetWindowAttributes(disp, client->window(), &attrib)) {
client->resize(attrib.width, attrib.height);
@ -521,7 +533,7 @@ void Slit::addClient(Window w) {
// disable events to frame.window
frame.window.setEventMask(NoEventMask);
client->disableEvents();
XReparentWindow(disp, client->window(), frame.window.window(), 0, 0);
XMapRaised(disp, client->window());
@ -530,7 +542,7 @@ void Slit::addClient(Window w) {
frame.window.setEventMask(s_eventmask);
// setup event for slit client window
client->enableEvents();
// flush events
// XFlush(disp);
@ -651,9 +663,9 @@ void Slit::reconfigure() {
num_windows++;
if (height_inc) {
// increase height of slit for each client (VERTICAL mode)
frame.height += (*client_it)->height() + bevel_width;
frame.height += (*client_it)->height() + bevel_width;
// the slit should always have the width of the largest client
if (frame.width < (*client_it)->width())
if (frame.width < (*client_it)->width())
frame.width = (*client_it)->width();
} else {
// increase width of slit for each client (HORIZONTAL mode)
@ -695,7 +707,7 @@ void Slit::reconfigure() {
frame.window.setBackgroundPixmap(frame.pixmap);
}
if (tmp)
if (tmp)
image_ctrl.removeImage(tmp);
if (FbTk::Transparent::haveComposite()) {
@ -733,7 +745,7 @@ void Slit::reconfigure() {
continue;
//client created window?
if ((*client_it)->visible())
if ((*client_it)->visible())
(*client_it)->show();
else {
(*client_it)->disableEvents();
@ -776,7 +788,7 @@ void Slit::reconfigure() {
x += (*client_it)->width() + bevel_width;
} // end for
if (doAutoHide() && !isHidden() && !m_timer.isTiming())
if (doAutoHide() && !isHidden() && !m_timer.isTiming())
m_timer.start();
else if (!doAutoHide() && isHidden())
toggleHidden(); // restore visible
@ -891,12 +903,12 @@ void Slit::reposition() {
frame.x = head_x + head_w - frame.width - border_width*2;
frame.y = head_y + head_h - frame.height - border_width*2;
if (direction() == VERTICAL) {
frame.x_hidden = head_x + head_w -
frame.x_hidden = head_x + head_w -
bevel_width - border_width;
frame.y_hidden = frame.y;
} else {
frame.x_hidden = frame.x;
frame.y_hidden = head_y + head_h -
frame.y_hidden = head_y + head_h -
bevel_width - border_width;
}
break;
@ -924,12 +936,12 @@ void Slit::shutdown() {
void Slit::clientUp(SlitClient* client) {
if (!client || m_client_list.size() < 2)
return;
if (client == m_client_list.front()) {
cycleClientsUp();
return;
}
SlitClients::iterator it = m_client_list.begin();
for(it++; it != m_client_list.end(); it++) {
if ((*it) == client) {
@ -945,12 +957,12 @@ void Slit::clientUp(SlitClient* client) {
void Slit::clientDown(SlitClient* client) {
if (!client || m_client_list.size() < 2)
return;
if (client == m_client_list.back()) {
cycleClientsDown();
return;
}
SlitClients::reverse_iterator it = m_client_list.rbegin();
for(it++; it != m_client_list.rend(); it++) {
if ((*it) == client) {
@ -1000,13 +1012,13 @@ void Slit::handleEvent(XEvent &event) {
}
void Slit::buttonPressEvent(XButtonEvent &e) {
if (e.window != frame.window.window())
if (e.window != frame.window.window())
return;
if (e.button == Button3) {
if (! m_slitmenu.isVisible()) {
int x = e.x_root - (m_slitmenu.width() / 2),
y = e.y_root - (m_slitmenu.height() / 2);
y = e.y_root - (m_slitmenu.height() / 2);
if (x < 0)
x = 0;
@ -1032,10 +1044,10 @@ void Slit::enterNotifyEvent(XCrossingEvent &) {
return;
if (isHidden()) {
if (! m_timer.isTiming())
if (! m_timer.isTiming())
m_timer.start();
} else {
if (m_timer.isTiming())
if (m_timer.isTiming())
m_timer.stop();
}
}
@ -1046,12 +1058,12 @@ void Slit::leaveNotifyEvent(XCrossingEvent &ev) {
return;
if (isHidden()) {
if (m_timer.isTiming())
if (m_timer.isTiming())
m_timer.stop();
} else {
if (! m_timer.isTiming()) {
// the menu is open, keep it firing until it closes
if (m_slitmenu.isVisible())
if (m_slitmenu.isVisible())
m_timer.fireOnce(false);
m_timer.start();
}
@ -1072,7 +1084,7 @@ void Slit::configureRequestEvent(XConfigureRequestEvent &event) {
xwc.sibling = event.above;
xwc.stack_mode = event.detail;
XConfigureWindow(FbTk::App::instance()->display(),
XConfigureWindow(FbTk::App::instance()->display(),
event.window, event.value_mask, &xwc);
SlitClients::iterator it = m_client_list.begin();
@ -1090,12 +1102,12 @@ void Slit::configureRequestEvent(XConfigureRequestEvent &event) {
}
}
if (reconf)
if (reconf)
reconfigure();
}
void Slit::exposeEvent(XExposeEvent &ev) {
// we don't need to clear the entire window
// we don't need to clear the entire window
// just the are that gets exposed
frame.window.clearArea(ev.x, ev.y, ev.width, ev.height);
}
@ -1112,11 +1124,11 @@ void Slit::toggleHidden() {
if (doAutoHide()) {
if (!m_slitmenu.isVisible()) {
m_timer.fireOnce(true);
} else
} else
return;
} else
} else
if (!isHidden()) return;
m_hidden = ! m_hidden; // toggle hidden state
if (isHidden())
frame.window.move(frame.x_hidden, frame.y_hidden);
@ -1130,18 +1142,18 @@ void Slit::loadClientList(const char *filename) {
// save filename so we can save client list later
m_filename = filename;
std::string real_filename= FbTk::StringUtil::expandFilename(filename);
string real_filename= FbTk::StringUtil::expandFilename(filename);
struct stat buf;
if (stat(real_filename.c_str(), &buf) == 0) {
std::ifstream file(real_filename.c_str());
std::string name;
ifstream file(real_filename.c_str());
string name;
while (! file.eof()) {
name = "";
std::getline(file, name); // get the entire line
getline(file, name); // get the entire line
if (name.empty())
continue;
// remove whitespaces from start and end
FbTk::StringUtil::removeFirstWhitespace(name);
@ -1159,7 +1171,7 @@ void Slit::loadClientList(const char *filename) {
}
void Slit::updateClientmenu() {
if (screen().isShuttingdown())
if (screen().isShuttingdown())
return;
_FB_USES_NLS;
@ -1183,9 +1195,9 @@ void Slit::updateClientmenu() {
m_clientlist_menu.insert(new FbTk::MenuSeparator());
FbTk::RefCount<FbTk::Command> savecmd(new FbTk::SimpleCommand<Slit>(*this, &Slit::saveClientList));
m_clientlist_menu.insert(_FB_XTEXT(Slit,
m_clientlist_menu.insert(_FB_XTEXT(Slit,
SaveSlitList,
"Save SlitList", "Saves the current order in the slit"),
"Save SlitList", "Saves the current order in the slit"),
savecmd);
m_clientlist_menu.updateMenu();
@ -1193,15 +1205,15 @@ void Slit::updateClientmenu() {
void Slit::saveClientList() {
std::ofstream file(FbTk::StringUtil::expandFilename(m_filename).c_str());
ofstream file(FbTk::StringUtil::expandFilename(m_filename).c_str());
SlitClients::iterator it = m_client_list.begin();
SlitClients::iterator it_end = m_client_list.end();
std::string prevName;
std::string name;
string prevName;
string name;
for (; it != it_end; ++it) {
name = (*it)->matchName();
if (name != prevName)
file << name.c_str() << std::endl;
file << name.c_str() << endl;
prevName = name;
}
@ -1231,7 +1243,7 @@ void Slit::setupMenu() {
FbMenu *placement_menu = new FbMenu(m_screen.menuTheme(),
m_screen.imageControl(),
*m_screen.layerManager().getLayer(::Layer::MENU));
// setup base menu
m_slitmenu.setLabel(_FB_XTEXT(Slit, Slit, "Slit", "The Slit"));
@ -1258,17 +1270,17 @@ void Slit::setupMenu() {
*m_rc_auto_hide,
save_and_reconfigure_slit));
m_slitmenu.insert(new BoolMenuItem(_FB_XTEXT(Common, MaximizeOver,"Maximize Over", "Maximize over this thing when maximizing"),
*m_rc_maximize_over,
m_slitmenu.insert(new BoolMenuItem(_FB_XTEXT(Common, MaximizeOver,"Maximize Over", "Maximize over this thing when maximizing"),
*m_rc_maximize_over,
save_and_reconfigure_slit));
// this saves resources and clears the slit window to update alpha value
FbTk::MenuItem *alpha_menuitem =
FbTk::MenuItem *alpha_menuitem =
new IntResMenuItem(_FB_XTEXT(Common, Alpha, "Alpha", "Transparency level"),
m_rc_alpha,
0, 255, m_slitmenu);
// setup command for alpha value
MacroCommand *alpha_macrocmd = new MacroCommand();
MacroCommand *alpha_macrocmd = new MacroCommand();
RefCount<Command> alpha_cmd(new SimpleCommand<Slit>(*this, &Slit::updateAlpha));
alpha_macrocmd->add(saverc_cmd);
alpha_macrocmd->add(alpha_cmd);
@ -1277,7 +1289,7 @@ void Slit::setupMenu() {
m_slitmenu.insert(alpha_menuitem);
m_slitmenu.insert(new SlitDirMenuItem(_FB_XTEXT(Slit, Direction, "Slit Direction", "Orientation of slit"),
m_slitmenu.insert(new SlitDirMenuItem(_FB_XTEXT(Slit, Direction, "Slit Direction", "Orientation of slit"),
*this,
save_and_reconfigure));
m_slitmenu.insert(_FB_XTEXT(Slit, ClientsMenu, "Clients", "Slit client menu"), &m_clientlist_menu);
@ -1289,7 +1301,7 @@ void Slit::setupMenu() {
m_layermenu->setInternalMenu();
m_clientlist_menu.setInternalMenu();
m_slitmenu.setInternalMenu();
typedef pair<FbTk::FbString, Slit::Placement> PlacementP;
typedef list<PlacementP> Placements;
Placements place_menu;
@ -1304,7 +1316,7 @@ void Slit::setupMenu() {
place_menu.push_back(PlacementP(_FB_XTEXT(Align, TopRight, "Top Right", "Top Right"), Slit::TOPRIGHT));
place_menu.push_back(PlacementP(_FB_XTEXT(Align, RightCenter, "Right Center", "Right Center"), Slit::RIGHTCENTER));
place_menu.push_back(PlacementP(_FB_XTEXT(Align, BottomRight, "Bottom Right", "Bottom Right"), Slit::BOTTOMRIGHT));
// create items in sub menu
for (size_t i=0; i<9; ++i) {
@ -1316,9 +1328,9 @@ void Slit::setupMenu() {
placement_menu->setItemEnabled(i, false);
} else {
placement_menu->insert(new PlaceSlitMenuItem(str, *this,
placement,
placement,
save_and_reconfigure));
}
place_menu.pop_front();
}

View file

@ -26,14 +26,16 @@
#include "FbTk/App.hh"
#include <iostream>
using namespace std;
#include <string>
using std::string;
ToolbarTheme::ToolbarTheme(int screen_num):
FbTk::Theme(screen_num),
m_toolbar(*this, "toolbar", "Toolbar"),
m_border(*this, "toolbar", "Toolbar"),
m_bevel_width(*this, "toolbar.bevelWidth", "Toolbar.BevelWidth"),
m_shape(*this, "toolbar.shaped", "Toolbar.Shaped"),
m_shape(*this, "toolbar.shaped", "Toolbar.Shaped"),
m_height(*this, "toolbar.height", "Toolbar.Height"),
m_button_size(*this, "toolbar.button.size", "Toolbar.Button.Size") {
// set default value
@ -48,9 +50,9 @@ ToolbarTheme::~ToolbarTheme() {
}
bool ToolbarTheme::fallback(FbTk::ThemeItem_base &item) {
if (item.name().find(".borderWidth") != std::string::npos) {
if (item.name().find(".borderWidth") != string::npos) {
return FbTk::ThemeManager::instance().loadItem(item, "borderWidth", "BorderWidth");
} else if (item.name().find(".borderColor") != std::string::npos) {
} else if (item.name().find(".borderColor") != string::npos) {
return FbTk::ThemeManager::instance().loadItem(item, "borderColor", "BorderColor");
} else if (item.name() == "toolbar.bevelWidth") {
return FbTk::ThemeManager::instance().loadItem(item, "bevelWidth", "BevelWidth");

View file

@ -44,8 +44,16 @@
#include <assert.h>
#endif
using namespace std;
using std::string;
using std::list;
using std::mem_fun;
#ifdef DEBUG
using std::cerr;
using std::endl;
using std::hex;
using std::dec;
#endif // DEBUG
WinClient::TransientWaitMap WinClient::s_transient_wait;
@ -75,7 +83,7 @@ WinClient::WinClient(Window win, BScreen &screen, FluxboxWindow *fbwin):FbTk::Fb
m_mwm_hint(0),
m_focus_mode(F_PASSIVE),
m_diesig(*this), m_focussig(*this),
m_screen(screen),
m_screen(screen),
m_strut(0) {
updateWMProtocols();
updateBlackboxHints();
@ -86,7 +94,7 @@ WinClient::WinClient(Window win, BScreen &screen, FluxboxWindow *fbwin):FbTk::Fb
updateTitle();
updateIconTitle();
Fluxbox::instance()->saveWindowSearch(win, this);
if (window_group != None)
if (window_group != None)
Fluxbox::instance()->saveGroupSearch(window_group, this);
// search for this in transient waiting list
@ -127,7 +135,7 @@ WinClient::~WinClient() {
transient_for->transientList().remove(this);
transient_for = 0;
}
while (!transients.empty()) {
transients.back()->transient_for = 0;
transients.pop_back();
@ -158,8 +166,8 @@ WinClient::~WinClient() {
}
bool WinClient::acceptsFocus() const {
return (m_focus_mode == F_LOCALLYACTIVE ||
m_focus_mode == F_PASSIVE ||
return (m_focus_mode == F_LOCALLYACTIVE ||
m_focus_mode == F_PASSIVE ||
m_focus_mode == F_GLOBALLYACTIVE && send_focus_message);
}
@ -222,11 +230,11 @@ bool WinClient::getWMIconName(XTextProperty &textprop) const {
return XGetWMName(display(), window(), &textprop);
}
const std::string &WinClient::getWMClassName() const {
const string &WinClient::getWMClassName() const {
return m_instance_name;
}
const std::string &WinClient::getWMClassClass() const {
const string &WinClient::getWMClassClass() const {
return m_class_name;
}
@ -236,15 +244,15 @@ void WinClient::updateWMClassHint() {
#ifdef DEBUG
cerr<<"WinClient: Failed to read class hint!"<<endl;
#endif //DEBUG
} else {
} else {
if (ch.res_name != 0) {
m_instance_name = const_cast<char *>(ch.res_name);
XFree(ch.res_name);
ch.res_name = 0;
} else
} else
m_instance_name = "";
if (ch.res_class != 0) {
m_class_name = const_cast<char *>(ch.res_class);
XFree(ch.res_class);
@ -266,7 +274,7 @@ void WinClient::updateTransientInfo() {
if (transientFor() != 0) {
transientFor()->transientList().remove(this);
}
transient_for = 0;
// determine if this is a transient window
Window win = 0;
@ -284,24 +292,24 @@ void WinClient::updateTransientInfo() {
#endif // DEBUG
return;
}
if (win != None && m_win->screen().rootWindow() == win) {
// transient for root window... = transient for group
// I don't think we are group-aware yet
return;
return;
}
transient_for = Fluxbox::instance()->searchWindow(win);
// if we did not find a transient WinClient but still
// have a transient X window, then we have to put the
// have a transient X window, then we have to put the
// X transient_for window in a waiting list and update this clients transient
// list later when the transient_for has a Winclient
if (!transient_for) {
// We might also already waiting for an old transient_for;
//
//
// this call fixes issue 2:
// If transients changes to new transient_for before the old transient_for is created.
// If transients changes to new transient_for before the old transient_for is created.
// (see comment in WinClient.hh)
//
removeTransientFromWaitingList();
@ -335,11 +343,11 @@ void WinClient::updateTransientInfo() {
void WinClient::updateTitle() {
// why 512? very very long wmnames seem to either
// why 512? very very long wmnames seem to either
// crash fluxbox or to make it have high cpuload
// see also:
// see also:
// http://www.securityfocus.com/archive/1/382398/2004-11-24/2004-11-30/2
//
//
// TODO: - find out why this mostly happens when using xft-fonts
// - why other windowmanagers (pekwm/pwm3/openbox etc) are
// also influenced
@ -492,7 +500,7 @@ void WinClient::updateWMHints() {
m_focus_mode = F_NOINPUT;
}
} else // InputHint not present: ignoring send_focus_message and assuming F_PASSIVE
m_focus_mode = F_PASSIVE;
m_focus_mode = F_PASSIVE;
if (wmhint->flags & StateHint)
initial_state = wmhint->initial_state;
@ -626,7 +634,7 @@ void WinClient::setGroupLeftWindow(Window win) {
if (m_screen.isShuttingdown())
return;
Atom group_left_hint = XInternAtom(display(), "_FLUXBOX_GROUP_LEFT", False);
changeProperty(group_left_hint, XA_WINDOW, 32,
changeProperty(group_left_hint, XA_WINDOW, 32,
PropModeReplace, (unsigned char *) &win, 1);
}
@ -672,7 +680,7 @@ bool WinClient::validateClient() const {
XEvent e;
if (( XCheckTypedWindowEvent(display(), window(), DestroyNotify, &e) ||
XCheckTypedWindowEvent(display(), window(), UnmapNotify, &e))
XCheckTypedWindowEvent(display(), window(), UnmapNotify, &e))
&& XPutBackEvent(display(), &e)) {
Fluxbox::instance()->ungrab();
return false;
@ -681,7 +689,7 @@ bool WinClient::validateClient() const {
return true;
}
void WinClient::setStrut(Strut *strut) {
void WinClient::setStrut(Strut *strut) {
clearStrut();
m_strut = strut;
}
@ -736,14 +744,14 @@ void WinClient::updateWMProtocols() {
Note that its slightly simplified in that only the
line gradient is given - this is because for aspect
ratios, we always have the line going through the origin
* Based on this formula:
http://astronomy.swin.edu.au/~pbourke/geometry/pointline/
Note that a gradient from origin goes through ( grad , 1 )
*/
void closestPointToLine(double &ret_x, double &ret_y,
void closestPointToLine(double &ret_x, double &ret_y,
double point_x, double point_y,
double gradient) {
double u = (point_x * gradient + point_y) /
@ -763,13 +771,13 @@ void closestPointToLine(double &ret_x, double &ret_y,
*
* See ICCCM section 4.1.2.3
*/
void WinClient::applySizeHints(int &width, int &height,
void WinClient::applySizeHints(int &width, int &height,
int *display_width, int *display_height) {
int i = width, j = height;
// Check minimum size
if (width < 0 || width < static_cast<signed>(min_width))
if (width < 0 || width < static_cast<signed>(min_width))
width = min_width;
if (height < 0 || height < static_cast<signed>(min_height))
@ -783,8 +791,8 @@ void WinClient::applySizeHints(int &width, int &height,
height = max_height;
// we apply aspect ratios before incrementals
// Too difficult to exactly satisfy both incremental+aspect
// in most situations
// Too difficult to exactly satisfy both incremental+aspect
// in most situations
// (they really shouldn't happen at the same time anyway).
/* aspect ratios are applied exclusive to the base_width
@ -809,11 +817,11 @@ void WinClient::applySizeHints(int &width, int &height,
double widthd = static_cast<double>(width - base_width);
double heightd = static_cast<double>(height - base_height);
double min = static_cast<double>(min_aspect_x) /
static_cast<double>(min_aspect_y);
double min = static_cast<double>(min_aspect_x) /
static_cast<double>(min_aspect_y);
double max = static_cast<double>(max_aspect_x) /
static_cast<double>(max_aspect_y);
double max = static_cast<double>(max_aspect_x) /
static_cast<double>(max_aspect_y);
double actual = widthd / heightd;
@ -836,7 +844,7 @@ void WinClient::applySizeHints(int &width, int &height,
// enforce incremental size limits, wrt base size
// only calculate this if we really need to
i = (width - static_cast<signed>(base_width)) /
i = (width - static_cast<signed>(base_width)) /
static_cast<signed>(width_inc);
width = i*static_cast<signed>(width_inc) +
static_cast<signed>(base_width);
@ -857,9 +865,9 @@ void WinClient::removeTransientFromWaitingList() {
// holds the windows that dont have empty
// transient waiting list
std::list<Window> remove_list;
list<Window> remove_list;
// The worst case complexity is huge, but since we usually do not (virtualy never)
// The worst case complexity is huge, but since we usually do not (virtualy never)
// have a large transient waiting list the time spent here is neglectable
TransientWaitMap::iterator t_it = s_transient_wait.begin();
TransientWaitMap::iterator t_it_end = s_transient_wait.end();
@ -872,8 +880,8 @@ void WinClient::removeTransientFromWaitingList() {
}
// erase empty waiting lists
std::list<Window>::iterator it = remove_list.begin();
std::list<Window>::iterator it_end = remove_list.end();
list<Window>::iterator it = remove_list.begin();
list<Window>::iterator it_end = remove_list.end();
for (; it != it_end; ++it)
s_transient_wait.erase(*it);
}

View file

@ -59,8 +59,21 @@
#include <stdexcept>
#include <typeinfo>
using namespace std;
void showInfo(ostream &ostr) {
using std::cout;
using std::cerr;
using std::endl;
using std::string;
using std::ostream;
using std::ofstream;
using std::streambuf;
using std::auto_ptr;
using std::out_of_range;
using std::runtime_error;
using std::bad_cast;
using std::bad_alloc;
using std::exception;
static void showInfo(ostream &ostr) {
_FB_USES_NLS;
ostr<<_FB_CONSOLETEXT(Common, FluxboxVersion, "Fluxbox version", "Fluxbox version heading")<<": "<<__fluxbox_version<<endl;
@ -73,7 +86,7 @@ void showInfo(ostream &ostr) {
ostr<<_FB_CONSOLETEXT(Common, Compiler, "Compiler", "Compiler used to build fluxbox")<<": "<<__fluxbox_compiler<<endl;
#endif // __fluxbox_compiler
#ifdef __fluxbox_compiler_version
ostr<<_FB_CONSOLETEXT(Common, CompilerVersion, "Compiler version", "Compiler version used to build fluxbox")<<": "<<__fluxbox_compiler_version<<endl;
ostr<<_FB_CONSOLETEXT(Common, CompilerVersion, "Compiler version", "Compiler version used to build fluxbox")<<": "<<__fluxbox_compiler_version<<endl;
#endif // __fluxbox_compiler_version
ostr<<endl<<_FB_CONSOLETEXT(Common, Defaults, "Defaults", "Default values compiled in")<<":"<<endl;
@ -177,9 +190,9 @@ void showInfo(ostream &ostr) {
int main(int argc, char **argv) {
std::string session_display = "";
std::string rc_file;
std::string log_filename;
string session_display = "";
string rc_file;
string log_filename;
FbTk::NLSInit("fluxbox.cat");
_FB_USES_NLS;
@ -191,7 +204,7 @@ int main(int argc, char **argv) {
if ((++i) >= argc) {
cerr<<_FB_CONSOLETEXT(main, RCRequiresArg,
"error: '-rc' requires an argument", "the -rc option requires a file argument")<<endl;;
"error: '-rc' requires an argument", "the -rc option requires a file argument")<<endl;
exit(1);
}
@ -208,7 +221,7 @@ int main(int argc, char **argv) {
}
session_display = argv[i];
std::string display_env = "DISPLAY=" + session_display;
string display_env = "DISPLAY=" + session_display;
if (putenv(const_cast<char *>(display_env.c_str()))) {
cerr<<_FB_CONSOLETEXT(main, WarnDisplayEnv,
"warning: couldn't set environment variable 'DISPLAY'",
@ -252,7 +265,7 @@ int main(int argc, char **argv) {
#ifdef __EMX__
_chdir2(getenv("X11ROOT"));
#endif // __EMX__
std::auto_ptr<Fluxbox> fluxbox;
auto_ptr<Fluxbox> fluxbox;
int exitcode=EXIT_FAILURE;
streambuf *outbuf = 0;
@ -279,17 +292,17 @@ int main(int argc, char **argv) {
exitcode = EXIT_SUCCESS;
} catch (std::out_of_range &oor) {
} catch (out_of_range &oor) {
cerr<<"Fluxbox: "<<_FB_CONSOLETEXT(main, ErrorOutOfRange, "Out of range", "Error message")<<": "<<oor.what()<<endl;
} catch (std::runtime_error &re) {
} catch (runtime_error &re) {
cerr<<"Fluxbox: "<<_FB_CONSOLETEXT(main, ErrorRuntime, "Runtime error", "Error message")<<": "<<re.what()<<endl;
} catch (std::bad_cast &bc) {
cerr<<"Fluxbox: "<<_FB_CONSOLETEXT(main, ErrorBadCast, "Bad cast", "Error message")<<": "<<bc.what()<<endl;
} catch (std::bad_alloc &ba) {
} catch (bad_cast &bc) {
cerr<<"Fluxbox: "<<_FB_CONSOLETEXT(main, ErrorBadCast, "Bad cast", "Error message")<<": "<<bc.what()<<endl;
} catch (bad_alloc &ba) {
cerr<<"Fluxbox: "<<_FB_CONSOLETEXT(main, ErrorBadAlloc, "Bad Alloc", "Error message")<<": "<<ba.what()<<endl;
} catch (std::exception &e) {
} catch (exception &e) {
cerr<<"Fluxbox: "<<_FB_CONSOLETEXT(main, ErrorStandardException, "Standard Exception", "Error message")<<": "<<e.what()<<endl;
} catch (std::string error_str) {
} catch (string error_str) {
cerr<<_FB_CONSOLETEXT(Common, Error, "Error", "Error message header")<<": "<<error_str<<endl;
} catch (...) {
cerr<<"Fluxbox: "<<_FB_CONSOLETEXT(main, ErrorUnknown, "Unknown error", "Error message")<<"."<<endl;
@ -297,11 +310,11 @@ int main(int argc, char **argv) {
}
bool restarting = false;
std::string restart_argument;
string restart_argument;
if (fluxbox.get()) {
restarting = fluxbox->isRestarting();
restart_argument = fluxbox->getRestartArgument();
restart_argument = fluxbox->getRestartArgument();
}
// destroy fluxbox