current label button focused
This commit is contained in:
parent
274e0a928e
commit
67929002b1
3 changed files with 118 additions and 49 deletions
|
@ -19,7 +19,7 @@
|
||||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
// DEALINGS IN THE SOFTWARE.
|
// DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
// $Id: FbWinFrame.cc,v 1.20 2003/04/16 10:56:37 fluxgen Exp $
|
// $Id: FbWinFrame.cc,v 1.21 2003/04/16 12:26:21 fluxgen Exp $
|
||||||
|
|
||||||
#include "FbWinFrame.hh"
|
#include "FbWinFrame.hh"
|
||||||
#include "ImageControl.hh"
|
#include "ImageControl.hh"
|
||||||
|
@ -261,6 +261,17 @@ void FbWinFrame::removeLabelButton(FbTk::Button &btn) {
|
||||||
m_labelbuttons.erase(erase_it);
|
m_labelbuttons.erase(erase_it);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FbWinFrame::setLabelButtonFocus(FbTk::Button &btn) {
|
||||||
|
ButtonList::iterator it = find(m_labelbuttons.begin(),
|
||||||
|
m_labelbuttons.end(),
|
||||||
|
&btn);
|
||||||
|
if (it == m_labelbuttons.end())
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_current_label = *it; // current focused button
|
||||||
|
renderLabelButtons();
|
||||||
|
}
|
||||||
|
|
||||||
void FbWinFrame::setClientWindow(FbTk::FbWindow &win) {
|
void FbWinFrame::setClientWindow(FbTk::FbWindow &win) {
|
||||||
setClientWindow(win.window());
|
setClientWindow(win.window());
|
||||||
}
|
}
|
||||||
|
@ -649,51 +660,25 @@ void FbWinFrame::renderTitlebar() {
|
||||||
m_label.width(), m_label.height());
|
m_label.width(), m_label.height());
|
||||||
|
|
||||||
// finaly set up pixmaps for titlebar windows
|
// finaly set up pixmaps for titlebar windows
|
||||||
Pixmap labelpm = None;
|
Pixmap label_pm = None;
|
||||||
FbTk::Color labelcolor;
|
Pixmap title_pm = None;
|
||||||
|
FbTk::Color label_color;
|
||||||
if (m_focused) {
|
FbTk::Color title_color;
|
||||||
if (m_label_focused_pm != 0){
|
getCurrentFocusPixmap(label_pm, title_pm,
|
||||||
labelpm = m_label_focused_pm;
|
label_color, title_color);
|
||||||
m_label.setBackgroundPixmap(m_label_focused_pm);
|
|
||||||
} else {
|
|
||||||
labelcolor = m_label_focused_color;
|
|
||||||
m_label.setBackgroundColor(m_label_focused_color);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_title_focused_pm != 0)
|
|
||||||
m_titlebar.setBackgroundPixmap(m_title_focused_pm);
|
|
||||||
else
|
|
||||||
m_titlebar.setBackgroundColor(m_title_focused_color);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
if (m_label_unfocused_pm != 0) {
|
|
||||||
labelpm = m_label_unfocused_pm;
|
|
||||||
m_label.setBackgroundPixmap(m_label_unfocused_pm);
|
|
||||||
} else {
|
|
||||||
labelcolor = m_label_unfocused_color;
|
|
||||||
m_label.setBackgroundColor(m_label_unfocused_color);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (m_title_unfocused_pm != 0)
|
|
||||||
m_titlebar.setBackgroundPixmap(m_title_unfocused_pm);
|
|
||||||
else
|
|
||||||
m_titlebar.setBackgroundColor(m_title_unfocused_color);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
ButtonList::iterator btn_it = m_labelbuttons.begin();
|
if (label_pm != 0)
|
||||||
ButtonList::iterator btn_it_end = m_labelbuttons.end();
|
m_label.setBackgroundPixmap(label_pm);
|
||||||
for (; btn_it != btn_it_end; ++btn_it) {
|
else
|
||||||
(*btn_it)->setGC(theme().labelTextFocusGC());
|
m_label.setBackgroundColor(label_color);
|
||||||
(*btn_it)->window().setBorderWidth(1);
|
|
||||||
if (labelpm)
|
|
||||||
(*btn_it)->setBackgroundPixmap(labelpm);
|
|
||||||
else
|
|
||||||
(*btn_it)->setBackgroundColor(labelcolor);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (title_pm != 0)
|
||||||
|
m_titlebar.setBackgroundPixmap(title_pm);
|
||||||
|
else
|
||||||
|
m_titlebar.setBackgroundColor(title_color);
|
||||||
|
|
||||||
|
renderLabelButtons();
|
||||||
redrawTitle();
|
redrawTitle();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -779,6 +764,7 @@ void FbWinFrame::renderButtons() {
|
||||||
|
|
||||||
void FbWinFrame::init() {
|
void FbWinFrame::init() {
|
||||||
// clear pixmaps
|
// clear pixmaps
|
||||||
|
m_current_label = 0; // no focused button at first
|
||||||
m_title_focused_pm = m_title_unfocused_pm = 0;
|
m_title_focused_pm = m_title_unfocused_pm = 0;
|
||||||
m_label_focused_pm = m_label_unfocused_pm = 0;
|
m_label_focused_pm = m_label_unfocused_pm = 0;
|
||||||
m_button_unfocused_pm = m_button_pressed_pm = 0;
|
m_button_unfocused_pm = m_button_pressed_pm = 0;
|
||||||
|
@ -843,3 +829,68 @@ void FbWinFrame::render(const FbTk::Texture &tex, FbTk::Color &col, Pixmap &pm,
|
||||||
m_imagectrl.removeImage(tmp);
|
m_imagectrl.removeImage(tmp);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FbWinFrame::getCurrentFocusPixmap(Pixmap &label_pm, Pixmap &title_pm,
|
||||||
|
FbTk::Color &label_color, FbTk::Color &title_color) {
|
||||||
|
if (m_focused) {
|
||||||
|
if (m_label_focused_pm != 0)
|
||||||
|
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
|
||||||
|
title_color = m_title_focused_color;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
getUnFocusPixmap(label_pm, title_pm,
|
||||||
|
label_color, title_color);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void FbWinFrame::getUnFocusPixmap(Pixmap &label_pm, Pixmap &title_pm,
|
||||||
|
FbTk::Color &label_color, FbTk::Color &title_color) {
|
||||||
|
if (m_label_unfocused_pm != 0)
|
||||||
|
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::renderLabelButtons() {
|
||||||
|
Pixmap label_pm = None;
|
||||||
|
Pixmap not_used_pm = None;
|
||||||
|
FbTk::Color label_color;
|
||||||
|
FbTk::Color not_used_color;
|
||||||
|
getCurrentFocusPixmap(label_pm, not_used_pm,
|
||||||
|
label_color, not_used_color);
|
||||||
|
|
||||||
|
ButtonList::iterator btn_it = m_labelbuttons.begin();
|
||||||
|
ButtonList::iterator btn_it_end = m_labelbuttons.end();
|
||||||
|
for (; btn_it != btn_it_end; ++btn_it) {
|
||||||
|
(*btn_it)->setGC(theme().labelTextFocusGC());
|
||||||
|
(*btn_it)->window().setBorderWidth(1);
|
||||||
|
if ((*btn_it) != m_current_label) {
|
||||||
|
if (m_label_unfocused_pm != 0)
|
||||||
|
(*btn_it)->setBackgroundPixmap(m_label_unfocused_pm);
|
||||||
|
else
|
||||||
|
(*btn_it)->setBackgroundColor(m_label_unfocused_color);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
if (label_pm)
|
||||||
|
(*btn_it)->setBackgroundPixmap(label_pm);
|
||||||
|
else
|
||||||
|
(*btn_it)->setBackgroundColor(label_color);
|
||||||
|
}
|
||||||
|
|
||||||
|
(*btn_it)->clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
// DEALINGS IN THE SOFTWARE.
|
// DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
// $Id: FbWinFrame.hh,v 1.5 2003/04/14 14:38:21 fluxgen Exp $
|
// $Id: FbWinFrame.hh,v 1.6 2003/04/16 12:24:28 fluxgen Exp $
|
||||||
|
|
||||||
#ifndef FBWINFRAME_HH
|
#ifndef FBWINFRAME_HH
|
||||||
#define FBWINFRAME_HH
|
#define FBWINFRAME_HH
|
||||||
|
@ -42,7 +42,8 @@ namespace FbTk {
|
||||||
class ImageControl;
|
class ImageControl;
|
||||||
};
|
};
|
||||||
|
|
||||||
/// holds a window frame with a client window (see: <a href="fluxbox_fbwinframe.png">image</a>)
|
/// holds a window frame with a client window
|
||||||
|
/// (see: <a href="fluxbox_fbwinframe.png">image</a>)
|
||||||
class FbWinFrame:public FbTk::EventHandler {
|
class FbWinFrame:public FbTk::EventHandler {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -89,7 +90,8 @@ public:
|
||||||
void addLabelButton(FbTk::Button &btn);
|
void addLabelButton(FbTk::Button &btn);
|
||||||
/// removes a specific button from label window
|
/// removes a specific button from label window
|
||||||
void removeLabelButton(FbTk::Button &btn);
|
void removeLabelButton(FbTk::Button &btn);
|
||||||
|
/// which button is to be rendered focused
|
||||||
|
void setLabelButtonFocus(FbTk::Button &btn);
|
||||||
/// attach a client window for client area
|
/// attach a client window for client area
|
||||||
void setClientWindow(Window win);
|
void setClientWindow(Window win);
|
||||||
/// same as above but with FbWindow
|
/// same as above but with FbWindow
|
||||||
|
@ -172,6 +174,11 @@ private:
|
||||||
/// renders to pixmap or sets color
|
/// renders to pixmap or sets color
|
||||||
void render(const FbTk::Texture &tex, FbTk::Color &col, Pixmap &pm,
|
void render(const FbTk::Texture &tex, FbTk::Color &col, Pixmap &pm,
|
||||||
unsigned int width, unsigned int height);
|
unsigned int width, unsigned int height);
|
||||||
|
void getUnFocusPixmap(Pixmap &label_pm, Pixmap &title_pm,
|
||||||
|
FbTk::Color &label_color, FbTk::Color &title_color);
|
||||||
|
void getCurrentFocusPixmap(Pixmap &label_pm, Pixmap &title_pm,
|
||||||
|
FbTk::Color &label_color, FbTk::Color &title_color);
|
||||||
|
void renderLabelButtons();
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
/// initiate some commont variables
|
/// initiate some commont variables
|
||||||
|
@ -197,6 +204,7 @@ private:
|
||||||
ButtonList m_buttons_left, ///< buttons to the left
|
ButtonList m_buttons_left, ///< buttons to the left
|
||||||
m_buttons_right; ///< buttons to the right
|
m_buttons_right; ///< buttons to the right
|
||||||
ButtonList m_labelbuttons; ///< holds buttons inside label window
|
ButtonList m_labelbuttons; ///< holds buttons inside label window
|
||||||
|
FbTk::Button *m_current_label; ///< which button is focused at the moment
|
||||||
std::string m_titletext; ///< text to be displayed int m_label
|
std::string m_titletext; ///< text to be displayed int m_label
|
||||||
int m_bevel; ///< bevel between titlebar items and titlebar
|
int m_bevel; ///< bevel between titlebar items and titlebar
|
||||||
bool m_use_titlebar; ///< if we should use titlebar
|
bool m_use_titlebar; ///< if we should use titlebar
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
// DEALINGS IN THE SOFTWARE.
|
// DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
// $Id: Window.cc,v 1.139 2003/04/16 00:38:06 fluxgen Exp $
|
// $Id: Window.cc,v 1.140 2003/04/16 12:27:49 fluxgen Exp $
|
||||||
|
|
||||||
#include "Window.hh"
|
#include "Window.hh"
|
||||||
|
|
||||||
|
@ -307,7 +307,8 @@ void FluxboxWindow::init() {
|
||||||
btn->setJustify(m_frame.theme().justify());
|
btn->setJustify(m_frame.theme().justify());
|
||||||
m_labelbuttons[m_client] = btn;
|
m_labelbuttons[m_client] = btn;
|
||||||
m_frame.addLabelButton(*btn);
|
m_frame.addLabelButton(*btn);
|
||||||
btn->show();
|
m_frame.setLabelButtonFocus(*btn);
|
||||||
|
btn->show();
|
||||||
FbTk::EventManager &evm = *FbTk::EventManager::instance();
|
FbTk::EventManager &evm = *FbTk::EventManager::instance();
|
||||||
// we need motion notify so we mask it
|
// we need motion notify so we mask it
|
||||||
btn->window().setEventMask(ExposureMask | ButtonPressMask | ButtonReleaseMask |
|
btn->window().setEventMask(ExposureMask | ButtonPressMask | ButtonReleaseMask |
|
||||||
|
@ -594,6 +595,13 @@ bool FluxboxWindow::detachClient(WinClient &client) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FluxboxWindow::detachCurrentClient() {
|
||||||
|
// should only operate if we had more than one client
|
||||||
|
if (numClients() <= 1)
|
||||||
|
return;
|
||||||
|
detachClient(*m_client);
|
||||||
|
}
|
||||||
|
|
||||||
/// removes client from client list, does not create new fluxboxwindow for it
|
/// removes client from client list, does not create new fluxboxwindow for it
|
||||||
bool FluxboxWindow::removeClient(WinClient &client) {
|
bool FluxboxWindow::removeClient(WinClient &client) {
|
||||||
if (client.m_win != this || numClients() == 0)
|
if (client.m_win != this || numClients() == 0)
|
||||||
|
@ -662,6 +670,7 @@ void FluxboxWindow::nextClient() {
|
||||||
else
|
else
|
||||||
m_client = *it;
|
m_client = *it;
|
||||||
m_client->raise();
|
m_client->raise();
|
||||||
|
m_frame.setLabelButtonFocus(*m_labelbuttons[m_client]);
|
||||||
setInputFocus();
|
setInputFocus();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -680,6 +689,7 @@ void FluxboxWindow::prevClient() {
|
||||||
m_client = *(--it);
|
m_client = *(--it);
|
||||||
|
|
||||||
m_client->raise();
|
m_client->raise();
|
||||||
|
m_frame.setLabelButtonFocus(*m_labelbuttons[m_client]);
|
||||||
setInputFocus();
|
setInputFocus();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -691,6 +701,7 @@ void FluxboxWindow::setCurrentClient(WinClient &client) {
|
||||||
m_client = &client;
|
m_client = &client;
|
||||||
m_client->raise();
|
m_client->raise();
|
||||||
Fluxbox::instance()->setFocusedWindow(this);
|
Fluxbox::instance()->setFocusedWindow(this);
|
||||||
|
m_frame.setLabelButtonFocus(*m_labelbuttons[m_client]);
|
||||||
setInputFocus();
|
setInputFocus();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2365,7 +2376,6 @@ void FluxboxWindow::motionNotifyEvent(XMotionEvent &me) {
|
||||||
// drag'n'drop code for tabs
|
// drag'n'drop code for tabs
|
||||||
//
|
//
|
||||||
if (m_attaching_tab == 0) {
|
if (m_attaching_tab == 0) {
|
||||||
cerr<<"starting m_attching_tab for this="<<this<<endl;
|
|
||||||
// start drag'n'drop for tab
|
// start drag'n'drop for tab
|
||||||
m_attaching_tab = client;
|
m_attaching_tab = client;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue