aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormarkt <markt>2007-02-02 19:04:57 (GMT)
committermarkt <markt>2007-02-02 19:04:57 (GMT)
commit2b25b05b27a0d4735ace950d667510bb4cf309b7 (patch)
tree7e426a707fb2195e4e357e06a58a51062a8dcdf7
parentde9ac128956c08aef22e68306c4f3fdcfde0221d (diff)
downloadfluxbox_paul-2b25b05b27a0d4735ace950d667510bb4cf309b7.zip
fluxbox_paul-2b25b05b27a0d4735ace950d667510bb4cf309b7.tar.bz2
added SetAlpha key command
-rw-r--r--ChangeLog11
-rw-r--r--src/CurrentWindowCmd.cc30
-rw-r--r--src/CurrentWindowCmd.hh10
-rw-r--r--src/FbCommandFactory.cc25
-rw-r--r--src/FbWinFrame.cc19
5 files changed, 91 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 278079f..61408c3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,16 @@
1 (Format: Year/Month/Day) 1 (Format: Year/Month/Day)
2Changes for 1.0rc3: 2Changes for 1.0rc3:
3*07/02/02:
4 * Update window transparency immediately when using pseudotransparency,
5 also introduced new key command: SetAlpha [[+-]<int> [[+-]<int>]] (Mark)
6 - with no arguments, returns the focused window to default settings
7 - with one argument, changes both focused and unfocused settings the same
8 way
9 - with two arguments, the first changes the focused alpha, and the second
10 changes the unfocused alpha
11 E.g. SetAlpha 127 +5 will set the focused alpha to 127 and increment the
12 unfocused alpha by 5 (until it reaches 255)
13 FbWinFrame.cc FbCommandFactory.cc CurrentWindowCmd.cc/hh
3*07/01/26: 14*07/01/26:
4 * Fix default workspace names, and don't show empty menus (Mark) 15 * Fix default workspace names, and don't show empty menus (Mark)
5 Workspace.cc FbTk/Menu.cc 16 Workspace.cc FbTk/Menu.cc
diff --git a/src/CurrentWindowCmd.cc b/src/CurrentWindowCmd.cc
index a975bdd..fcc141b 100644
--- a/src/CurrentWindowCmd.cc
+++ b/src/CurrentWindowCmd.cc
@@ -173,3 +173,33 @@ FullscreenCmd::FullscreenCmd() { }
173void FullscreenCmd::real_execute() { 173void FullscreenCmd::real_execute() {
174 fbwindow().setFullscreen(!fbwindow().isFullscreen()); 174 fbwindow().setFullscreen(!fbwindow().isFullscreen());
175} 175}
176
177SetAlphaCmd::SetAlphaCmd(int focused, bool relative,
178 int unfocused, bool un_relative) :
179 m_focus(focused), m_unfocus(unfocused),
180 m_relative(relative), m_un_relative(un_relative) { }
181
182void SetAlphaCmd::real_execute() {
183 if (m_focus == 256 && m_unfocus == 256) {
184 // made up signal to return to default
185 fbwindow().setUseDefaultAlpha(true);
186 return;
187 }
188
189 int new_alpha;
190 if (m_relative) {
191 new_alpha = fbwindow().getFocusedAlpha() + m_focus;
192 if (new_alpha < 0) new_alpha = 0;
193 if (new_alpha > 255) new_alpha = 255;
194 fbwindow().setFocusedAlpha(new_alpha);
195 } else
196 fbwindow().setFocusedAlpha(m_focus);
197
198 if (m_un_relative) {
199 new_alpha = fbwindow().getUnfocusedAlpha() + m_unfocus;
200 if (new_alpha < 0) new_alpha = 0;
201 if (new_alpha > 255) new_alpha = 255;
202 fbwindow().setUnfocusedAlpha(new_alpha);
203 } else
204 fbwindow().setUnfocusedAlpha(m_unfocus);
205}
diff --git a/src/CurrentWindowCmd.hh b/src/CurrentWindowCmd.hh
index d013b24..c1b9140 100644
--- a/src/CurrentWindowCmd.hh
+++ b/src/CurrentWindowCmd.hh
@@ -197,4 +197,14 @@ public:
197protected: 197protected:
198 void real_execute(); 198 void real_execute();
199}; 199};
200
201class SetAlphaCmd: public WindowHelperCmd {
202public:
203 SetAlphaCmd(int focus, bool rel, int unfocus, bool unrel);
204protected:
205 void real_execute();
206private:
207 int m_focus, m_unfocus;
208 int m_relative, m_un_relative;
209};
200#endif // CURRENTWINDOWCMD_HH 210#endif // CURRENTWINDOWCMD_HH
diff --git a/src/FbCommandFactory.cc b/src/FbCommandFactory.cc
index ece8c9e..b82332a 100644
--- a/src/FbCommandFactory.cc
+++ b/src/FbCommandFactory.cc
@@ -123,6 +123,7 @@ FbCommandFactory::FbCommandFactory() {
123 "sendtoworkspace", 123 "sendtoworkspace",
124 "sendtonextworkspace", 124 "sendtonextworkspace",
125 "sendtoprevworkspace", 125 "sendtoprevworkspace",
126 "setalpha",
126 "setenv", 127 "setenv",
127 "sethead", 128 "sethead",
128 "setmodkey", 129 "setmodkey",
@@ -247,7 +248,29 @@ FbTk::Command *FbCommandFactory::stringToCommand(const std::string &command,
247 return new CurrentWindowCmd(&FluxboxWindow::maximizeVertical); 248 return new CurrentWindowCmd(&FluxboxWindow::maximizeVertical);
248 else if (command == "maximizehorizontal") 249 else if (command == "maximizehorizontal")
249 return new CurrentWindowCmd(&FluxboxWindow::maximizeHorizontal); 250 return new CurrentWindowCmd(&FluxboxWindow::maximizeHorizontal);
250 else if (command == "resize") { 251 else if (command == "setalpha") {
252 typedef vector<string> StringTokens;
253 StringTokens tokens;
254 FbTk::StringUtil::stringtok<StringTokens>(tokens, arguments);
255
256 int focused, unfocused;
257 bool relative, un_rel;
258
259 if (tokens.empty()) { // set default alpha
260 focused = unfocused = 256;
261 relative = un_rel = false;
262 } else {
263 relative = un_rel = (tokens[0][0] == '+' || tokens[0][0] == '-');
264 focused = unfocused = atoi(tokens[0].c_str());
265 }
266
267 if (tokens.size() > 1) { // set different unfocused alpha
268 un_rel = (tokens[1][0] == '+' || tokens[1][0] == '-');
269 unfocused = atoi(tokens[1].c_str());
270 }
271
272 return new SetAlphaCmd(focused, relative, unfocused, un_rel);
273 } else if (command == "resize") {
251 FbTk_istringstream is(arguments.c_str()); 274 FbTk_istringstream is(arguments.c_str());
252 int dx = 0, dy = 0; 275 int dx = 0, dy = 0;
253 is >> dx >> dy; 276 is >> dx >> dy;
diff --git a/src/FbWinFrame.cc b/src/FbWinFrame.cc
index 30d8389..e78ed5f 100644
--- a/src/FbWinFrame.cc
+++ b/src/FbWinFrame.cc
@@ -546,8 +546,15 @@ void FbWinFrame::setAlpha(bool focused, unsigned char alpha) {
546 else 546 else
547 m_unfocused_alpha = alpha; 547 m_unfocused_alpha = alpha;
548 548
549 if (m_focused == focused) 549 if (m_focused == focused) {
550 m_window.setOpaque(alpha); 550 if (FbTk::Transparent::haveComposite())
551 m_window.setOpaque(alpha);
552 else {
553 // don't need to setAlpha, since apply updates them anyway
554 applyAll();
555 clearAll();
556 }
557 }
551} 558}
552 559
553unsigned char FbWinFrame::getAlpha(bool focused) const 560unsigned char FbWinFrame::getAlpha(bool focused) const
@@ -569,7 +576,13 @@ void FbWinFrame::setUseDefaultAlpha(bool default_alpha)
569 576
570 m_use_default_alpha = default_alpha; 577 m_use_default_alpha = default_alpha;
571 578
572 m_window.setOpaque(getAlpha(m_focused)); 579 if (FbTk::Transparent::haveComposite())
580 m_window.setOpaque(getAlpha(m_focused));
581 else {
582 // don't need to setAlpha, since apply updates them anyway
583 applyAll();
584 clearAll();
585 }
573} 586}
574 587
575void FbWinFrame::setDoubleClickTime(unsigned int time) { 588void FbWinFrame::setDoubleClickTime(unsigned int time) {