summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ClientPattern.cc64
-rw-r--r--src/FbCommands.cc5
-rw-r--r--src/FbTk/StringUtil.cc7
-rw-r--r--src/FbTk/StringUtil.hh2
-rw-r--r--src/Layer.hh50
-rw-r--r--src/Screen.cc4
-rw-r--r--src/SystemTray.cc8
7 files changed, 60 insertions, 80 deletions
diff --git a/src/ClientPattern.cc b/src/ClientPattern.cc
index 84f421a..41080fa 100644
--- a/src/ClientPattern.cc
+++ b/src/ClientPattern.cc
@@ -102,39 +102,42 @@ ClientPattern::ClientPattern(const char *str):
102 negate = true; 102 negate = true;
103 memstr.assign(memstr, 0, memstr.length()-1); 103 memstr.assign(memstr, 0, memstr.length()-1);
104 } 104 }
105 if (strcasecmp(memstr.c_str(), "name") == 0) { 105
106 memstr = FbTk::StringUtil::toLower(memstr);
107
108 if (memstr == "name") {
106 prop = NAME; 109 prop = NAME;
107 } else if (strcasecmp(memstr.c_str(), "class") == 0) { 110 } else if (memstr == "class") {
108 prop = CLASS; 111 prop = CLASS;
109 } else if (strcasecmp(memstr.c_str(), "title") == 0) { 112 } else if (memstr == "title") {
110 prop = TITLE; 113 prop = TITLE;
111 } else if (strcasecmp(memstr.c_str(), "role") == 0) { 114 } else if (memstr == "role") {
112 prop = ROLE; 115 prop = ROLE;
113 } else if (strcasecmp(memstr.c_str(), "transient") == 0) { 116 } else if (memstr == "transient") {
114 prop = TRANSIENT; 117 prop = TRANSIENT;
115 } else if (strcasecmp(memstr.c_str(), "maximized") == 0) { 118 } else if (memstr == "maximized") {
116 prop = MAXIMIZED; 119 prop = MAXIMIZED;
117 } else if (strcasecmp(memstr.c_str(), "minimized") == 0) { 120 } else if (memstr == "minimized") {
118 prop = MINIMIZED; 121 prop = MINIMIZED;
119 } else if (strcasecmp(memstr.c_str(), "shaded") == 0) { 122 } else if (memstr == "shaded") {
120 prop = SHADED; 123 prop = SHADED;
121 } else if (strcasecmp(memstr.c_str(), "stuck") == 0) { 124 } else if (memstr == "stuck") {
122 prop = STUCK; 125 prop = STUCK;
123 } else if (strcasecmp(memstr.c_str(), "focushidden") == 0) { 126 } else if (memstr == "focushidden") {
124 prop = FOCUSHIDDEN; 127 prop = FOCUSHIDDEN;
125 } else if (strcasecmp(memstr.c_str(), "iconhidden") == 0) { 128 } else if (memstr == "iconhidden") {
126 prop = ICONHIDDEN; 129 prop = ICONHIDDEN;
127 } else if (strcasecmp(memstr.c_str(), "workspace") == 0) { 130 } else if (memstr == "workspace") {
128 prop = WORKSPACE; 131 prop = WORKSPACE;
129 } else if (strcasecmp(memstr.c_str(), "workspacename") == 0) { 132 } else if (memstr == "workspacename") {
130 prop = WORKSPACENAME; 133 prop = WORKSPACENAME;
131 } else if (strcasecmp(memstr.c_str(), "head") == 0) { 134 } else if (memstr == "head") {
132 prop = HEAD; 135 prop = HEAD;
133 } else if (strcasecmp(memstr.c_str(), "layer") == 0) { 136 } else if (memstr == "layer") {
134 prop = LAYER; 137 prop = LAYER;
135 } else if (strcasecmp(memstr.c_str(), "urgent") == 0) { 138 } else if (memstr == "urgent") {
136 prop = URGENT; 139 prop = URGENT;
137 } else if (strcasecmp(memstr.c_str(), "screen") == 0) { 140 } else if (memstr == "screen") {
138 prop = SCREEN; 141 prop = SCREEN;
139 } else { 142 } else {
140 prop = NAME; 143 prop = NAME;
@@ -279,9 +282,7 @@ bool ClientPattern::match(const Focusable &win) const {
279 if ((*it)->orig == "[current]") { 282 if ((*it)->orig == "[current]") {
280 WinClient *focused = FocusControl::focusedWindow(); 283 WinClient *focused = FocusControl::focusedWindow();
281 if ((*it)->prop == WORKSPACE) { 284 if ((*it)->prop == WORKSPACE) {
282 char tmpstr[128]; 285 if (!(*it)->negate ^ (getProperty((*it)->prop, win) == FbTk::StringUtil::number2String(win.screen().currentWorkspaceID())))
283 sprintf(tmpstr, "%d", win.screen().currentWorkspaceID());
284 if (!(*it)->negate ^ (getProperty((*it)->prop, win) == tmpstr))
285 return false; 286 return false;
286 } else if ((*it)->prop == WORKSPACENAME) { 287 } else if ((*it)->prop == WORKSPACENAME) {
287 const Workspace *w = win.screen().currentWorkspace(); 288 const Workspace *w = win.screen().currentWorkspace();
@@ -292,16 +293,11 @@ bool ClientPattern::match(const Focusable &win) const {
292 (getProperty((*it)->prop, win) == 293 (getProperty((*it)->prop, win) ==
293 getProperty((*it)->prop, *focused)))) 294 getProperty((*it)->prop, *focused))))
294 return false; 295 return false;
295 } else if ((*it)->prop == HEAD && 296 } else if ((*it)->prop == HEAD && (*it)->orig == "[mouse]") {
296 (*it)->orig == "[mouse]") { 297 if (!(*it)->negate ^ (getProperty((*it)->prop, win) == FbTk::StringUtil::number2String(win.screen().getCurrHead())))
297 int mouse_head = win.screen().getCurrHead();
298 char num[32];
299 sprintf(num, "%d", mouse_head);
300 if (!(*it)->negate ^ (getProperty((*it)->prop, win) == num))
301 return false; 298 return false;
302 299
303 } else if (!(*it)->negate ^ 300 } else if (!(*it)->negate ^ (*it)->regexp.match(getProperty((*it)->prop, win)))
304 (*it)->regexp.match(getProperty((*it)->prop, win)))
305 return false; 301 return false;
306 } 302 }
307 return true; 303 return true;
@@ -385,9 +381,7 @@ string ClientPattern::getProperty(WinProperty prop, const Focusable &client) {
385 break; 381 break;
386 case WORKSPACE: { 382 case WORKSPACE: {
387 unsigned int wsnum = (fbwin ? fbwin->workspaceNumber() : client.screen().currentWorkspaceID()); 383 unsigned int wsnum = (fbwin ? fbwin->workspaceNumber() : client.screen().currentWorkspaceID());
388 char tmpstr[128]; 384 return FbTk::StringUtil::number2String(wsnum);
389 sprintf(tmpstr, "%d", wsnum);
390 return std::string(tmpstr);
391 break; 385 break;
392 } 386 }
393 case WORKSPACENAME: { 387 case WORKSPACENAME: {
@@ -401,9 +395,7 @@ string ClientPattern::getProperty(WinProperty prop, const Focusable &client) {
401 if (!fbwin) 395 if (!fbwin)
402 return ""; 396 return "";
403 int head = client.screen().getHead(fbwin->fbWindow()); 397 int head = client.screen().getHead(fbwin->fbWindow());
404 char tmpstr[128]; 398 return FbTk::StringUtil::number2String(head);
405 sprintf(tmpstr, "%d", head);
406 return std::string(tmpstr);
407 break; 399 break;
408 } 400 }
409 case LAYER: 401 case LAYER:
@@ -415,9 +407,7 @@ string ClientPattern::getProperty(WinProperty prop, const Focusable &client) {
415 break; 407 break;
416 case SCREEN: { 408 case SCREEN: {
417 int screenId = client.screen().screenNumber(); 409 int screenId = client.screen().screenNumber();
418 char tmpstr[32]; 410 return FbTk::StringUtil::number2String(screenId);
419 sprintf(tmpstr, "%d", screenId);
420 return std::string(tmpstr);
421 break; 411 break;
422 } 412 }
423 } 413 }
diff --git a/src/FbCommands.cc b/src/FbCommands.cc
index 26a431a..f050669 100644
--- a/src/FbCommands.cc
+++ b/src/FbCommands.cc
@@ -144,7 +144,6 @@ int ExecuteCmd::run() {
144 144
145 string displaystring("DISPLAY="); 145 string displaystring("DISPLAY=");
146 displaystring += DisplayString(FbTk::App::instance()->display()); 146 displaystring += DisplayString(FbTk::App::instance()->display());
147 char intbuff[64];
148 int screen_num = m_screen_num; 147 int screen_num = m_screen_num;
149 if (screen_num < 0) { 148 if (screen_num < 0) {
150 if (Fluxbox::instance()->mouseScreen() == 0) 149 if (Fluxbox::instance()->mouseScreen() == 0)
@@ -153,8 +152,6 @@ int ExecuteCmd::run() {
153 screen_num = Fluxbox::instance()->mouseScreen()->screenNumber(); 152 screen_num = Fluxbox::instance()->mouseScreen()->screenNumber();
154 } 153 }
155 154
156 sprintf(intbuff, "%d", screen_num);
157
158 // get shell path from the environment 155 // get shell path from the environment
159 // this process exits immediately, so we don't have to worry about memleaks 156 // this process exits immediately, so we don't have to worry about memleaks
160 const char *shell = getenv("SHELL"); 157 const char *shell = getenv("SHELL");
@@ -163,7 +160,7 @@ int ExecuteCmd::run() {
163 160
164 // remove last number of display and add screen num 161 // remove last number of display and add screen num
165 displaystring.erase(displaystring.size()-1); 162 displaystring.erase(displaystring.size()-1);
166 displaystring += intbuff; 163 displaystring += FbTk::StringUtil::number2String(screen_num);
167 164
168 setsid(); 165 setsid();
169 putenv(const_cast<char *>(displaystring.c_str())); 166 putenv(const_cast<char *>(displaystring.c_str()));
diff --git a/src/FbTk/StringUtil.cc b/src/FbTk/StringUtil.cc
index 18e000e..a0e402d 100644
--- a/src/FbTk/StringUtil.cc
+++ b/src/FbTk/StringUtil.cc
@@ -60,6 +60,13 @@ namespace FbTk {
60 60
61namespace StringUtil { 61namespace StringUtil {
62 62
63
64std::string number2String(int num) {
65 char s[128];
66 sprintf(s, "%d", num);
67 return std::string(s);
68}
69
63/** 70/**
64 Tries to find a string in another and 71 Tries to find a string in another and
65 ignoring the case of the characters 72 ignoring the case of the characters
diff --git a/src/FbTk/StringUtil.hh b/src/FbTk/StringUtil.hh
index 35f23a2..6493f74 100644
--- a/src/FbTk/StringUtil.hh
+++ b/src/FbTk/StringUtil.hh
@@ -30,6 +30,8 @@ namespace FbTk {
30 30
31namespace StringUtil { 31namespace StringUtil {
32 32
33/// creates a number to a string
34std::string number2String(int num);
33 35
34/// Similar to `strstr' but this function ignores the case of both strings 36/// Similar to `strstr' but this function ignores the case of both strings
35const char *strcasestr(const char *str, const char *ptn); 37const char *strcasestr(const char *str, const char *ptn);
diff --git a/src/Layer.hh b/src/Layer.hh
index da8f04c..14054b0 100644
--- a/src/Layer.hh
+++ b/src/Layer.hh
@@ -22,16 +22,7 @@
22#ifndef LAYER_HH 22#ifndef LAYER_HH
23#define LAYER_HH 23#define LAYER_HH
24 24
25#include <string> 25#include "FbTk/StringUtil.hh"
26#include <cstdio>
27
28#ifdef HAVE_CSTRING
29 #include <cstring>
30#else
31 #include <string.h>
32#endif
33
34using std::string;
35 26
36/** 27/**
37 * (This is not the layer->raise/lower handling stuff, @see FbTk::Layer) 28 * (This is not the layer->raise/lower handling stuff, @see FbTk::Layer)
@@ -54,52 +45,51 @@ public:
54 45
55 explicit Layer(int i) : m_num(i) {}; 46 explicit Layer(int i) : m_num(i) {};
56 47
57 static int getNumFromString(const string &str) { 48 static int getNumFromString(const std::string &str) {
58 int tempnum = 0; 49 int tempnum = 0;
50 std::string v = FbTk::StringUtil::toLower(str);
59 if (sscanf(str.c_str(), "%d", &tempnum) == 1) 51 if (sscanf(str.c_str(), "%d", &tempnum) == 1)
60 return tempnum; 52 return tempnum;
61 if (strcasecmp(str.c_str(), "Menu") == 0) 53 if (v == "menu")
62 return ::Layer::MENU; 54 return ::Layer::MENU;
63 if (strcasecmp(str.c_str(), "AboveDock") == 0) 55 if (v == "abovedock")
64 return ::Layer::ABOVE_DOCK; 56 return ::Layer::ABOVE_DOCK;
65 if (strcasecmp(str.c_str(), "Dock") == 0) 57 if (v == "dock")
66 return ::Layer::DOCK; 58 return ::Layer::DOCK;
67 if (strcasecmp(str.c_str(), "Top") == 0) 59 if (v == "top")
68 return ::Layer::TOP; 60 return ::Layer::TOP;
69 if (strcasecmp(str.c_str(), "Normal") == 0) 61 if (v == "normal")
70 return ::Layer::NORMAL; 62 return ::Layer::NORMAL;
71 if (strcasecmp(str.c_str(), "Bottom") == 0) 63 if (v == "bottom")
72 return ::Layer::BOTTOM; 64 return ::Layer::BOTTOM;
73 if (strcasecmp(str.c_str(), "Desktop") == 0) 65 if (v == "desktop")
74 return ::Layer::DESKTOP; 66 return ::Layer::DESKTOP;
75 return -1; 67 return -1;
76 } 68 }
77 69
78 static string getString(int num) { 70 static std::string getString(int num) {
79 switch (num) { 71 switch (num) {
80 case ::Layer::MENU: 72 case ::Layer::MENU:
81 return string("Menu"); 73 return std::string("Menu");
82 case ::Layer::ABOVE_DOCK: 74 case ::Layer::ABOVE_DOCK:
83 return string("AboveDock"); 75 return std::string("AboveDock");
84 case ::Layer::DOCK: 76 case ::Layer::DOCK:
85 return string("Dock"); 77 return std::string("Dock");
86 case ::Layer::TOP: 78 case ::Layer::TOP:
87 return string("Top"); 79 return std::string("Top");
88 case ::Layer::NORMAL: 80 case ::Layer::NORMAL:
89 return string("Normal"); 81 return std::string("Normal");
90 case ::Layer::BOTTOM: 82 case ::Layer::BOTTOM:
91 return string("Bottom"); 83 return std::string("Bottom");
92 case ::Layer::DESKTOP: 84 case ::Layer::DESKTOP:
93 return string("Desktop"); 85 return std::string("Desktop");
94 default: 86 default:
95 char tmpstr[128]; 87 return FbTk::StringUtil::number2String(num);
96 sprintf(tmpstr, "%d", num);
97 return string(tmpstr);
98 } 88 }
99 } 89 }
100 90
101 int getNum() const { return m_num; } 91 int getNum() const { return m_num; }
102 string getString() const { return getString(m_num); } 92 std::string getString() const { return getString(m_num); }
103 93
104 Layer &operator=(int num) { m_num = num; return *this; } 94 Layer &operator=(int num) { m_num = num; return *this; }
105 95
diff --git a/src/Screen.cc b/src/Screen.cc
index 1581571..9e340f8 100644
--- a/src/Screen.cc
+++ b/src/Screen.cc
@@ -1231,10 +1231,8 @@ bool BScreen::isKdeDockapp(Window client) const {
1231bool BScreen::addKdeDockapp(Window client) { 1231bool BScreen::addKdeDockapp(Window client) {
1232 1232
1233 XSelectInput(FbTk::App::instance()->display(), client, StructureNotifyMask); 1233 XSelectInput(FbTk::App::instance()->display(), client, StructureNotifyMask);
1234 char intbuff[16];
1235 sprintf(intbuff, "%d", screenNumber());
1236 string atom_name("_NET_SYSTEM_TRAY_S"); 1234 string atom_name("_NET_SYSTEM_TRAY_S");
1237 atom_name += intbuff; // append number 1235 atom_name += FbTk::StringUtil::number2String(screenNumber());
1238 // find the right atomhandler that has the name: _NET_SYSTEM_TRAY_S<num> 1236 // find the right atomhandler that has the name: _NET_SYSTEM_TRAY_S<num>
1239 AtomHandler *handler = Fluxbox::instance()->getAtomHandler(atom_name); 1237 AtomHandler *handler = Fluxbox::instance()->getAtomHandler(atom_name);
1240 FbTk::EventHandler *evh = 0; 1238 FbTk::EventHandler *evh = 0;
diff --git a/src/SystemTray.cc b/src/SystemTray.cc
index 05d8d09..3a38bb1 100644
--- a/src/SystemTray.cc
+++ b/src/SystemTray.cc
@@ -180,10 +180,8 @@ SystemTray::SystemTray(const FbTk::FbWindow& parent,
180 Display *disp = fluxbox->display(); 180 Display *disp = fluxbox->display();
181 181
182 // setup atom name to _NET_SYSTEM_TRAY_S<screen number> 182 // setup atom name to _NET_SYSTEM_TRAY_S<screen number>
183 char intbuff[16];
184 sprintf(intbuff, "%d", m_window.screenNumber());
185 string atom_name("_NET_SYSTEM_TRAY_S"); 183 string atom_name("_NET_SYSTEM_TRAY_S");
186 atom_name += intbuff; // append number 184 atom_name += FbTk::StringUtil::number2String(m_window.screenNumber());
187 185
188 // get selection owner and see if it's free 186 // get selection owner and see if it's free
189 Atom tray_atom = XInternAtom(disp, atom_name.c_str(), False); 187 Atom tray_atom = XInternAtom(disp, atom_name.c_str(), False);
@@ -232,10 +230,8 @@ SystemTray::~SystemTray() {
232 fluxbox->removeAtomHandler(m_handler.get()); 230 fluxbox->removeAtomHandler(m_handler.get());
233 Display *disp = fluxbox->display(); 231 Display *disp = fluxbox->display();
234 // setup atom name to _NET_SYSTEM_TRAY_S<screen number> 232 // setup atom name to _NET_SYSTEM_TRAY_S<screen number>
235 char intbuff[16];
236 sprintf(intbuff, "%d", m_window.screenNumber());
237 string atom_name("_NET_SYSTEM_TRAY_S"); 233 string atom_name("_NET_SYSTEM_TRAY_S");
238 atom_name += intbuff; // append number 234 atom_name += FbTk::StringUtil::number2String(m_window.screenNumber());
239 235
240 // get selection owner and see if it's free 236 // get selection owner and see if it's free
241 Atom tray_atom = XInternAtom(disp, atom_name.c_str(), False); 237 Atom tray_atom = XInternAtom(disp, atom_name.c_str(), False);