summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/IconbarTool.cc18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/IconbarTool.cc b/src/IconbarTool.cc
index ad4eeeb..30db541 100644
--- a/src/IconbarTool.cc
+++ b/src/IconbarTool.cc
@@ -430,6 +430,7 @@ void IconbarTool::hide() {
430void IconbarTool::setAlignment(Container::Alignment align) { 430void IconbarTool::setAlignment(Container::Alignment align) {
431 *m_rc_alignment = align; 431 *m_rc_alignment = align;
432 update(0); 432 update(0);
433 m_menu.reconfigure();
433} 434}
434 435
435void IconbarTool::setMode(Mode mode) { 436void IconbarTool::setMode(Mode mode) {
@@ -453,6 +454,8 @@ void IconbarTool::setMode(Mode mode) {
453 m_icon_container.showSubwindows(); 454 m_icon_container.showSubwindows();
454 455
455 renderTheme(); 456 renderTheme();
457
458 m_menu.reconfigure();
456} 459}
457 460
458unsigned int IconbarTool::width() const { 461unsigned int IconbarTool::width() const {
@@ -505,8 +508,11 @@ void IconbarTool::update(FbTk::Subject *subj) {
505 return; 508 return;
506 } else if (subj == &(winsubj->win().workspaceSig())) { 509 } else if (subj == &(winsubj->win().workspaceSig())) {
507 // we can ignore this signal if we're in ALLWINDOWS mode 510 // we can ignore this signal if we're in ALLWINDOWS mode
508 if (mode() == ALLWINDOWS) 511 // unless the window was focused and has nothing to revert to
512 if (mode() == ALLWINDOWS || mode() == ICONS || mode() == NOICONS) {
513 m_focus_timer.start();
509 return; 514 return;
515 }
510 516
511 // workspace changed for this window, and if it's not on current workspace we remove it 517 // workspace changed for this window, and if it's not on current workspace we remove it
512 if (m_screen.currentWorkspaceID() != winsubj->win().workspaceNumber()) { 518 if (m_screen.currentWorkspaceID() != winsubj->win().workspaceNumber()) {
@@ -543,7 +549,7 @@ void IconbarTool::update(FbTk::Subject *subj) {
543 bool remove_all = false; // if we should readd all windows 549 bool remove_all = false; // if we should readd all windows
544 550
545 if (subj != 0 && typeid(*subj) == typeid(BScreen::ScreenSubject) && 551 if (subj != 0 && typeid(*subj) == typeid(BScreen::ScreenSubject) &&
546 mode() != ALLWINDOWS && mode() != ICONS ) { 552 mode() != ALLWINDOWS && mode() != ICONS && mode() != NOICONS) {
547 BScreen::ScreenSubject *screen_subj = static_cast<BScreen::ScreenSubject *>(subj); 553 BScreen::ScreenSubject *screen_subj = static_cast<BScreen::ScreenSubject *>(subj);
548 // current workspace sig 554 // current workspace sig
549 if (&m_screen.currentWorkspaceSig() == screen_subj ) { 555 if (&m_screen.currentWorkspaceSig() == screen_subj ) {
@@ -838,11 +844,15 @@ bool IconbarTool::checkDuplicate(FluxboxWindow &win) {
838 844
839void IconbarTool::timedRender() { 845void IconbarTool::timedRender() {
840 WinClient *client = FocusControl::focusedWindow(); 846 WinClient *client = FocusControl::focusedWindow();
841 if (client == 0 || client->fbwindow() == 0) 847 IconButton *current_button = static_cast<IconButton *>(m_icon_container.selected());
848
849 if (client == 0 || client->fbwindow() == 0) {
850 if (current_button != 0)
851 renderButton(*current_button);
842 return; 852 return;
853 }
843 854
844 IconButton *button = findButton(*client->fbwindow()); 855 IconButton *button = findButton(*client->fbwindow());
845 IconButton *current_button = static_cast<IconButton *>(m_icon_container.selected());
846 // if old window is the same as the new focused window then ignore this render 856 // if old window is the same as the new focused window then ignore this render
847 // else render old client and new client 857 // else render old client and new client
848 if (button == current_button) 858 if (button == current_button)