xoblite™ / Blackbox for Windows bb5 | RC6 preview | 0.25.2.14
http://xoblite.net/
Toolbar.cpp File Reference
#include "Toolbar.h"

Functions

LRESULT CALLBACK ToolbarWndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
 

Variables

const char szToolbarName [] = "BBToolbar"
 
BImagepBImage
 
DesktoppDesktop
 
ToolbarpToolbar
 
TaskbarpTaskbar
 
TooltipspTooltips
 
SettingspSettings
 
WorkspacespWorkspaces
 
MenuCommonpMenuCommon
 
int toolbarMessageSubscription [] = { BB_RECONFIGURE, BB_TOGGLETOOLBAR, BB_TOGGLESYSTEMBAR, BB_ADDTASK, BB_REMOVETASK, BB_REDRAW, BB_ACTIVETASK, BB_ACTIVATESHELLWINDOW, BB_TASKSUPDATE, BB_TRAYUPDATE, 0 }
 

Function Documentation

◆ ToolbarWndProc()

LRESULT CALLBACK ToolbarWndProc ( HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam )
198{
199 switch (message)
200 {
201 //====================
202
203 case BB_TASKSUPDATE:
204 {
205 if ((pSettings->taskbarMode != TASKBAR_MODE_HIDDEN) && pTaskbar)
206 {
207// if (pSettings->debugLogging) SendMessage(GetBBWnd(), BB_CONSOLEMESSAGE, (WPARAM)CONSOLE_INFORMATION_MESSAGE, (LPARAM)"Toolbar -> BB_TASKSUPDATE (taskbar visible)");
208
209 if (lParam == TASKITEM_ADDED || lParam == TASKITEM_REMOVED || lParam == TASKITEM_REFRESH)
210 {
211 if (!pToolbar->throttlingAddRemoveUpdates)
212 {
213 // Wait at least 200 msec between add/remove related UI updates to avoid
214 // excessive toolbar updating when e.g. launching many-multi-window apps...
215 if (pToolbar->throttlingActivityUpdates) KillTimer(pToolbar->hToolbarWnd, TOOLBAR_THROTTLE_UPDATES_TIMER);
216 pToolbar->throttlingAddRemoveUpdates = true;
217 if (!SetTimer(pToolbar->hToolbarWnd, TOOLBAR_THROTTLE_UPDATES_TIMER, 200, (TIMERPROC)NULL)) pToolbar->throttlingAddRemoveUpdates = false;
218
219 pTaskbar->cachedTaskButtonsExist = false;
220 pToolbar->UpdatePosition();
221/*
222 if (pSettings->debugLogging)
223 {
224 if (lParam == TASKITEM_ADDED) SendMessage(GetBBWnd(), BB_CONSOLEMESSAGE, (WPARAM)CONSOLE_INFORMATION_MESSAGE, (LPARAM)"Toolbar -> TASKITEM_ADDED");
225 else if (lParam == TASKITEM_REMOVED) SendMessage(GetBBWnd(), BB_CONSOLEMESSAGE, (WPARAM)CONSOLE_INFORMATION_MESSAGE, (LPARAM)"Toolbar -> TASKITEM_REMOVED");
226 else if (lParam == TASKITEM_REFRESH) SendMessage(GetBBWnd(), BB_CONSOLEMESSAGE, (WPARAM)CONSOLE_INFORMATION_MESSAGE, (LPARAM)"Toolbar -> TASKITEM_REFRESH");
227 }
228*/
229 }
230 else pToolbar->updatesThrottled = true;
231 }
232
233 //====================
234
235 else if (lParam == TASKITEM_MODIFIED || lParam == TASKITEM_FLASHED)
236 {
237 if (wParam != NULL)
238 {
239 int i = pTaskbar->FindTask((HWND)wParam);
240 pToolbar->UpdateToolbarWindow();
241/*
242 if (pSettings->debugLogging)
243 {
244 if (lParam == TASKITEM_MODIFIED) SendMessage(GetBBWnd(), BB_CONSOLEMESSAGE, (WPARAM)CONSOLE_INFORMATION_MESSAGE, (LPARAM)"Toolbar -> TASKITEM_MODIFIED");
245 else if (lParam == TASKITEM_FLASHED) SendMessage(GetBBWnd(), BB_CONSOLEMESSAGE, (WPARAM)CONSOLE_INFORMATION_MESSAGE, (LPARAM)"Toolbar -> TASKITEM_FLASHED");
246 }
247*/
248 }
249 }
250
251 //====================
252
253 else if (lParam == TASKITEM_ACTIVATED)
254 {
255 if (pTaskbar->FindTask((HWND)wParam) >= 0)
256 {
257 if (!pToolbar->throttlingActivityUpdates || !pToolbar->throttlingAddRemoveUpdates)
258 {
259 // Wait at least 100 msec between activity related UI updates to
260 // suppress e.g. active task flipping when operating the menu...
261 pToolbar->throttlingActivityUpdates = true;
262 if (!SetTimer(pToolbar->hToolbarWnd, TOOLBAR_THROTTLE_UPDATES_TIMER, 100, (TIMERPROC)NULL)) pToolbar->throttlingActivityUpdates = false;
263 pToolbar->UpdateToolbarWindow();
264 }
265 else pToolbar->updatesThrottled = true;
266
267// if (pSettings->debugLogging) SendMessage(GetBBWnd(), BB_CONSOLEMESSAGE, (WPARAM)CONSOLE_INFORMATION_MESSAGE, (LPARAM)"Toolbar -> TASKITEM_ACTIVATED -> Taskbar item activated...");
268 }
269 else
270 {
271// if (pSettings->debugLogging) SendMessage(GetBBWnd(), BB_CONSOLEMESSAGE, (WPARAM)CONSOLE_INFORMATION_MESSAGE, (LPARAM)"Toolbar -> TASKITEM_ACTIVATED -> Non-taskbar item activated...");
272 pToolbar->UpdateToolbarWindow();
273 }
274 }
275 }
276 }
277 break;
278
279 //====================
280
281 case BB_ADDTASK:
282 {
283 pTaskbar->AddTask((HWND)wParam);
284 }
285 break;
286
287 case BB_REMOVETASK:
288 {
289 pTaskbar->RemoveTask((HWND)wParam);
290 }
291 break;
292
293 case BB_ACTIVETASK:
294 {
295 pTaskbar->SetActiveTask((HWND)wParam);
296 }
297 break;
298
299 case BB_REDRAW:
300 {
301 pTaskbar->RedrawTask((HWND)wParam);
302 }
303 break;
304
306 {
307 pTaskbar->ActivateShellWindow();
308 }
309 break;
310
311 //====================
312
313 case WM_TIMER:
314 {
315 if (wParam == TOOLBAR_THROTTLE_UPDATES_TIMER)
316 {
317 KillTimer(pToolbar->hToolbarWnd, TOOLBAR_THROTTLE_UPDATES_TIMER);
318
319 if (pToolbar->updatesThrottled)
320 {
321 if (pToolbar->throttlingAddRemoveUpdates)
322 {
323 pTaskbar->cachedTaskButtonsExist = false;
324 pToolbar->UpdatePosition();
325
326 // if (pSettings->debugLogging) SendMessage(GetBBWnd(), BB_CONSOLEMESSAGE, (WPARAM)CONSOLE_INFORMATION_MESSAGE, (LPARAM)"Toolbar -> throttlingAddRemoveUpdates ended.");
327 }
328 else // if (pToolbar->throttlingActivityUpdates)
329 {
330 pToolbar->UpdateToolbarWindow();
331
332 // if (pSettings->debugLogging) SendMessage(GetBBWnd(), BB_CONSOLEMESSAGE, (WPARAM)CONSOLE_INFORMATION_MESSAGE, (LPARAM)"Toolbar -> throttlingActivityUpdates ended.");
333 }
334 }
335
336 pToolbar->throttlingAddRemoveUpdates = pToolbar->throttlingActivityUpdates = pToolbar->updatesThrottled = false;
337
338 return 0;
339 }
340
341 //====================
342
343 else if (wParam == TOOLBAR_SAVE_WIDTH_TIMER)
344 {
345 KillTimer(pToolbar->hToolbarWnd, TOOLBAR_SAVE_WIDTH_TIMER);
346 if (pToolbar->saveWidthAfterDelay && !pSettings->toolbarVertical)
347 {
348 WriteInt(pSettings->xobrcFile, "xoblite.toolbar.horizontal.width:", pSettings->toolbarHorizontalWidth);
349 pToolbar->saveWidthAfterDelay = false;
350 }
351 return 0;
352 }
353
354 //====================
355
356 else // TOOLBAR_UPDATE_TIMER
357 {
358 bool updateToolbar = false;
359
360 // Should we update the toolbar clock? (nb. every 40x250 msec == 10 seconds; same as the Desktop clock)
361 if (pToolbar->clockTimerCounter < 40) pToolbar->clockTimerCounter++;
362 else
363 {
364 if (pToolbar->GetClockText(false)) updateToolbar = true;
365 pToolbar->clockTimerCounter = 0;
366 }
367
368 // Should we update the toolbar windowLabel? (nb. only applicable if the taskbar is hidden)
369 if (pSettings->taskbarMode == TASKBAR_MODE_HIDDEN)
370 {
371 int i = pTaskbar->GetActiveTask();
372 if (i >= 0)
373 {
374 if (pTaskbar->taskList[i]->hidden || IsIconic(pTaskbar->taskList[i]->hwnd))
375 {
376 if (wcslen(pToolbar->CurrentWindow) > 0)
377 {
378 pToolbar->CurrentWindow[0] = '\0'; // -> Display "xoblite" as the toolbar windowLabel instead...
379 updateToolbar = true;
380 }
381 }
382 else if (_wcsicmp(pToolbar->CurrentWindow, pTaskbar->taskList[i]->captionUnicode)) // Has the active task's window title text changed?
383 {
384 wcscpy(pToolbar->CurrentWindow, pTaskbar->taskList[i]->captionUnicode);
385 updateToolbar = true;
386 }
387
388 // if (updateToolbar && pSettings->debugLogging) SendMessage(GetBBWnd(), BB_CONSOLEMESSAGE, (WPARAM)CONSOLE_INFORMATION_MESSAGE, (LPARAM)"Toolbar -> TOOLBAR_UPDATE_TIMER -> WindowLabel updated.");
389 }
390 }
391
392 // Has the number of visible task buttons on the taskbar changed? (nb. this should normally happen automatically,
393 // but every now and then the toolbar and taskbar may fall out of sync drawing so let's add a failsafe... :) )
394// if (pTaskbar->GetTaskButtonsToDraw() != pTaskbar->taskButtonsLastDrawn) updateToolbar = true;
395
396 if (updateToolbar) pToolbar->UpdateToolbarWindow();
397
398 return 0;
399 }
400 }
401 break;
402
403 //====================
404
405 case WM_DROPFILES:
406 {
407 return pTaskbar->DropFiles(hwnd, wParam, (pSettings->taskbarMode != TASKBAR_MODE_HIDDEN));
408 }
409 break;
410
411 //====================
412
413 case BB_RECONFIGURE:
414 {
415 SetRectEmpty(&pToolbar->currentWindowLabelRect);
416 pToolbar->UpdatePosition(); // Gets new settings and resizes window if needed...
417
418 if (pSettings->taskbarTooltips)
419 {
420 // Update the tooltips colours (background+text), matching the current toolbar style colors...
421// SendMessage(pTooltips->hToolTipsWnd, TTM_SETTIPBKCOLOR, (WPARAM)pSettings->Toolbar->TextColor, 0);
422// SendMessage(pTooltips->hToolTipsWnd, TTM_SETTIPTEXTCOLOR, (WPARAM)pSettings->Toolbar->Color, 0);
423// SendMessage(pTooltips->hToolTipsWnd, TTM_SETTIPBKCOLOR, (WPARAM)pSettings->ToolbarWindowLabel->Color, 0);
424// SendMessage(pTooltips->hToolTipsWnd, TTM_SETTIPTEXTCOLOR, (WPARAM)pSettings->ToolbarWindowLabel->TextColor, 0);
425 }
426 }
427 break;
428
429 //====================
430
431 case BB_TOGGLETOOLBAR:
432 {
433 if (!pSettings->toolbarHidden) pSettings->toolbarHidden = true;
434 else pSettings->toolbarHidden = false;
435
436 if (!pSettings->toolbarHidden) pToolbar->UpdatePosition();
437 ShowWindow(pToolbar->hToolbarWnd, pSettings->toolbarHidden ? SW_HIDE : SW_SHOWNOACTIVATE);
438
439 if (pDesktop) pDesktop->UpdateDesktopWindow(); // In case e.g. the workspace indicators need to be moved given the new toolbar placement
440
442
443 WriteBool(pSettings->xobrcFile, "xoblite.toolbar.hidden:", pSettings->toolbarHidden);
444 }
445 break;
446
447 //====================
448
450 {
451 pToolbar->ToolbarModeButtonPressed(true);
452 }
453 break;
454
455 //====================
456
457 case WM_CLOSE:
458 return 0;
459
460 //====================
461
462 case WM_DISPLAYCHANGE:
463 {
464 if (pSettings->toolbarHidden) break;
465 pToolbar->UpdatePosition();
466 }
467 break;
468
469 case WM_SETTINGCHANGE:
470 {
471 // Update the toolbar's position (and maybe also dimensions) if the work area changes...
472 // (e.g. if the Explorer taskbar is moved to another screen edge)
473 if (pSettings->toolbarHidden) break;
474 if (wParam == SPI_SETWORKAREA) pToolbar->UpdatePosition();
475 return 0;
476 }
477
478 //====================
479/*
480 case WM_MOUSEACTIVATE:
481 return MA_NOACTIVATE;
482
483 case WM_ACTIVATE:
484 if (LOWORD(wParam) == WA_ACTIVE || LOWORD(wParam) == WA_CLICKACTIVE) SetActiveWindow(hwnd);
485 return 0;
486*/
487 //====================
488
489 case WM_EXITSIZEMOVE:
490 {
491 if (pToolbar->ToolbarPosInProgress)
492 {
493 pToolbar->ToolbarPosInProgress = false;
494
495 RECT r;
496 GetWindowRect(pToolbar->hToolbarWnd, &r);
497 pSettings->ToolbarPlacement.placement = PLACEMENT_MANUAL;
498 pSettings->ToolbarPlacement.rcx = pToolbar->ToolbarX = r.left;
499 pSettings->ToolbarPlacement.rcy = pToolbar->ToolbarY = r.top;
500
501// pToolbar->UpdatePosition();
502 pToolbar->UpdateToolbarWindow();
503
504 KillTimer(pToolbar->hToolbarWnd, TOOLBAR_SAVE_WIDTH_TIMER);
505 pToolbar->saveWidthAfterDelay = true;
506 SetTimer(pToolbar->hToolbarWnd, TOOLBAR_SAVE_WIDTH_TIMER, 1000, (TIMERPROC)NULL);
507 }
508
509 return 0;
510 }
511
512 //====================
513
514 // Allow window to move if control key is being held down,
515 // holding down the shift key and left clicking moves the window
516 // back to the default position...
517 case WM_NCHITTEST:
518 {
519 if ((GetAsyncKeyState(VK_CONTROL) & 0x8000))
520 {
521 POINT pt;
522 pt.x = GET_X_LPARAM(lParam);
523 pt.y = GET_Y_LPARAM(lParam);
524 ScreenToClient(hwnd, &pt);
525
526 if ((pSettings->taskbarMode != TASKBAR_MODE_HIDDEN) && PtInRect(&pToolbar->winlabelRect, pt)) return HTCLIENT;
527 else
528 {
529 pToolbar->ToolbarPosInProgress = true;
530 return HTCAPTION;
531 }
532 }
533 else return HTCLIENT;
534 }
535 break;
536
537 //====================
538
539 case WM_LBUTTONDBLCLK:
540 {
541 if (GetAsyncKeyState(VK_MENU) & 0x8000)
542 {
543 if (pSettings->toolbarVertical)
544 {
545 if (pToolbar->toolbarVerticalPeeking) pToolbar->toolbarVerticalPeeking = false;
546 else pToolbar->toolbarVerticalPeeking = true;
547 pToolbar->UpdatePosition();
548 }
549 }
550 else
551 {
552 POINT pt = {LOWORD(lParam), HIWORD(lParam)};
553 // Doubleclick on the workspace label -> edit current workspace name
554 if (!pSettings->toolbarLabelHidden && (pSettings->numberOfWorkspaces > 1) && PtInRect(&pToolbar->labelRect, pt)) BBExecute(GetDesktopWindow(), NULL, pSettings->preferredEditor, pSettings->xobrcDefaultFile, NULL, SW_SHOWNORMAL, false);
555 // Doubleclick on the clock -> open date/time properties
556 else if (!pSettings->toolbarClockHidden && PtInRect(&pToolbar->clockRect, pt)) BBExecute(GetDesktopWindow(), NULL, "control.exe", "timedate.cpl", NULL, SW_SHOWNORMAL, false);
557 }
558 }
559 break;
560
561 //====================
562
563 case WM_LBUTTONDOWN:
564 case WM_LBUTTONUP:
565 case WM_RBUTTONDOWN:
566 case WM_RBUTTONUP:
567 case WM_MBUTTONDOWN:
568 case WM_MBUTTONUP:
569 case WM_XBUTTONDOWN:
570 case WM_XBUTTONUP:
571 {
572 if (pSettings->taskbarMode != TASKBAR_MODE_HIDDEN)
573 {
574 if (pTaskbar->MouseButtonOnTaskbar(hwnd, message, wParam, lParam))
575 {
576 return DefWindowProc(hwnd, message, wParam, lParam);
577 }
578 }
579
580 //====================
581
582 if (message == WM_LBUTTONDOWN)
583 {
584 TRACKMOUSEEVENT track;
585 ZeroMemory(&track,sizeof(track));
586 track.cbSize = sizeof(track);
587 track.dwFlags = TME_LEAVE;
588 track.dwHoverTime = HOVER_DEFAULT;
589 track.hwndTrack = pToolbar->hToolbarWnd;
590 _TrackMouseEvent(&track);
591
592 POINT pt = {LOWORD(lParam), HIWORD(lParam)};
593
594 if (!pSettings->toolbarDownUpButtonsHidden && (pSettings->numberOfWorkspaces > 1))
595 {
596 if (PtInRect(&pToolbar->button1Rect, pt))
597 {
598 pToolbar->ButtonPressed1 = true;
599 // InvalidateRect(pToolbar->hToolbarWnd, &pToolbar->button1Rect, false);
600 pToolbar->UpdateToolbarWindow();
601 }
602 else if (PtInRect(&pToolbar->button2Rect, pt))
603 {
604 pToolbar->ButtonPressed2 = true;
605 // InvalidateRect(pToolbar->hToolbarWnd, &pToolbar->button2Rect, false);
606 pToolbar->UpdateToolbarWindow();
607 }
608 }
609
610 if (!pSettings->toolbarLeftRightButtonsHidden)
611 {
612 if (PtInRect(&pToolbar->button3Rect, pt))
613 {
614 pToolbar->ButtonPressed3 = true;
615 // InvalidateRect(pToolbar->hToolbarWnd, &pToolbar->button3Rect, false);
616 pToolbar->UpdateToolbarWindow();
617 }
618 else if (PtInRect(&pToolbar->button4Rect, pt))
619 {
620 pToolbar->ButtonPressed4 = true;
621 // InvalidateRect(pToolbar->hToolbarWnd, &pToolbar->button4Rect, false);
622 pToolbar->UpdateToolbarWindow();
623 }
624 }
625
626 if (pMenuCommon) pMenuCommon->Hide();
627 }
628
629 //====================
630
631 else if (message == WM_LBUTTONUP)
632 {
633 if (pToolbar->ButtonPressed1) // Toolbar "down" button
634 {
635 if ((strlen(pSettings->toolbarDownButtonOverride) > 0) && !(GetAsyncKeyState(VK_MENU) & 0x8000))
636 {
637 BBSmartExecute(pSettings->toolbarDownButtonOverride); // -> User configured override command for the "down" button
638 }
639 else SendMessage(pToolbar->hBlackboxWnd, BB_WORKSPACE, 0, 0); // -> Previous workspace ("DeskLeft")
640 }
641 else if (pToolbar->ButtonPressed2) // Toolbar "up" button
642 {
643 if ((strlen(pSettings->toolbarUpButtonOverride) > 0) && !(GetAsyncKeyState(VK_MENU) & 0x8000))
644 {
645 BBSmartExecute(pSettings->toolbarUpButtonOverride); // -> User configured override command for the "up" button
646 }
647 else SendMessage(pToolbar->hBlackboxWnd, BB_WORKSPACE, 1, 0); // -> Next workspace ("DeskRight")
648 }
649 else if (pToolbar->ButtonPressed3) // Toolbar "left" button
650 {
651 if ((strlen(pSettings->toolbarLeftButtonOverride) > 0) && !(GetAsyncKeyState(VK_MENU) & 0x8000))
652 {
653 BBSmartExecute(pSettings->toolbarLeftButtonOverride); // -> User configured override command for the "left" button
654 }
655 else pToolbar->ToolbarModeButtonPressed(false); // -> Previous toolbar mode
656 }
657 else if (pToolbar->ButtonPressed4) // Toolbar "right" button
658 {
659 if ((strlen(pSettings->toolbarRightButtonOverride) > 0) && !(GetAsyncKeyState(VK_MENU) & 0x8000))
660 {
661 BBSmartExecute(pSettings->toolbarRightButtonOverride); // -> User configured override command for the "right" button
662 }
663 else pToolbar->ToolbarModeButtonPressed(true); // -> Next toolbar mode
664 }
665
666 pToolbar->ButtonPressed1 = pToolbar->ButtonPressed2 = pToolbar->ButtonPressed3 = pToolbar->ButtonPressed4 = false;
667 pToolbar->UpdateToolbarWindow();
668 }
669
670 //====================
671
672 else if (message == WM_RBUTTONUP)
673 {
674 if (GetAsyncKeyState(VK_MENU) & 0x8000) SendMessage(GetBBWnd(), BB_MENU, 0, 0); // -> Main menu
675 else
676 {
677 POINT pt = {LOWORD(lParam), HIWORD(lParam)};
678// if (!pSettings->toolbarLabelHidden && (pSettings->numberOfWorkspaces > 1) && PtInRect(&pToolbar->labelRect, pt)) SendMessage(GetBBWnd(), BB_MENU, 1, 0); // -> Workspaces menu
679// else if (!pSettings->toolbarClockHidden && PtInRect(&pToolbar->clockRect, pt)) SendMessage(GetBBWnd(), BB_MENU, 2, 0); // -> Configuration menu
680// else SendMessage(GetBBWnd(), BB_MENU, 0, 0); // -> Main menu
681 if (!pSettings->toolbarClockHidden && PtInRect(&pToolbar->clockRect, pt)) SendMessage(GetBBWnd(), BB_MENU, 2, 0); // -> Configuration menu
682 else SendMessage(GetBBWnd(), BB_MENU, 0, 0); // -> Main menu
683 }
684 }
685
686 //====================
687
688 else if (message == WM_MBUTTONUP)
689 {
690 if (GetAsyncKeyState(VK_MENU) & 0x8000) PostMessage(GetBBWnd(), BB_TOGGLEDOCK, 0, 0); // -> Toggle dock
691 else if (GetAsyncKeyState(VK_SHIFT) & 0x8000) PostMessage(GetBBWnd(), BB_TOGGLEPLUGINS, 0, 0); // -> Toggle plugins
692 else
693 {
694 POINT pt = {LOWORD(lParam), HIWORD(lParam)};
695 if ((pSettings->taskbarMode != TASKBAR_MODE_HIDDEN) || !PtInRect(&pToolbar->winlabelRect, pt)) pToolbar->ToolbarModeButtonPressed(true); // -> Next toolbar mode
696 }
697 }
698
699 //====================
700
701 else if (message == WM_XBUTTONDOWN)
702 {
703 if (HIWORD(wParam) == XBUTTON1)
704 {
705 if (GetAsyncKeyState(VK_MENU) & 0x8000)
706 {
707 if (pSettings->toolbarVertical)
708 {
709 if (pToolbar->toolbarVerticalPeeking) pToolbar->toolbarVerticalPeeking = false;
710 else pToolbar->toolbarVerticalPeeking = true;
711 pToolbar->UpdatePosition();
713 }
714 }
715// else if (GetAsyncKeyState(VK_SHIFT) & 0x8000) BBExecute(GetDesktopWindow(), NULL, "control.exe", "desk.cpl,,3", NULL, SW_SHOWNORMAL, false);
716 else
717 {
718 // Toggle toolbar orientation... (horizontal<->vertical)
719 if (pSettings->toolbarVertical) pSettings->toolbarVertical = false;
720 else pSettings->toolbarVertical = true;
721
722 pToolbar->UpdatePosition();
724
725 WriteBool(pSettings->xobrcFile, "xoblite.toolbar.vertical:", pSettings->toolbarVertical);
726 }
727 }
728 else if (HIWORD(wParam) == XBUTTON2)
729 {
730 if (pSettings->toolbarVertical)
731 {
732 // Toggle toolbar peeking if already in vertical orientation...
733 if (pToolbar->toolbarVerticalPeeking) pToolbar->toolbarVerticalPeeking = false;
734 else pToolbar->toolbarVerticalPeeking = true;
735 }
736 else
737 {
738 // Change to vertical toolbar orientation and enable peeking directly...
739 pSettings->toolbarVertical = true;
740 pToolbar->toolbarVerticalPeeking = true;
741// WriteBool(pSettings->xobrcFile, "xoblite.toolbar.vertical:", pSettings->toolbarVertical);
742 }
743
744 pToolbar->UpdatePosition();
746 }
747 }
748 }
749 break;
750
751 //====================
752
753 case WM_MOUSEWHEEL: // -> Regular vertical mouse scroll wheel i.e. up/down movement
754 case WM_MOUSEHWHEEL: // -> Horizontal mouse scroll wheel (or more commonly, a touchpad) i.e. left/right movement
755 {
756 // Only allow mousewheel resizing when the control key is held down...
757 if ((message == WM_MOUSEWHEEL) && (GetAsyncKeyState(VK_CONTROL) & 0x8000))
758 {
759 // ...when the toolbar width is defined as a percentage of the screen size...
760 if (pSettings->toolbarHorizontalWidth > 100) break;
761 // ...and the toolbar is horizontally oriented...
762 if (pSettings->toolbarVertical) break;
763
764 bool sizechanged = false;
765
766 if (GET_WHEEL_DELTA_WPARAM(wParam) < 0)
767 {
768 if (pSettings->toolbarHorizontalWidth > 30)
769 {
770 pSettings->toolbarHorizontalWidth--;
771 sizechanged = true;
772 }
773 }
774 else
775 {
776 if (pSettings->toolbarHorizontalWidth < 100)
777 {
778 pSettings->toolbarHorizontalWidth++;
779 sizechanged = true;
780 }
781 }
782
783 if (sizechanged)
784 {
785 pToolbar->GetDimensions();
786 pToolbar->GetPlacement();
787
788 // Force re-rendering of the background and task button bitmaps...
789 pToolbar->cachedBitmapsExist = false;
790 if (pSettings->taskbarMode != TASKBAR_MODE_HIDDEN) pTaskbar->cachedTaskButtonsExist = false;
791 pToolbar->UpdateToolbarWindow();
792
793 if (pSettings->toolbarOnTop) SetWindowPos(pToolbar->hToolbarWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOMOVE);
794 else SetWindowPos(pToolbar->hToolbarWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOMOVE);
795
796 // Due to the number of repeated updates when using the mousewheel to change the toolbar width,
797 // we wait a second before saving the width to xoblite.rc, in case we're not done resizing yet...
798 KillTimer(pToolbar->hToolbarWnd, TOOLBAR_SAVE_WIDTH_TIMER);
799 pToolbar->saveWidthAfterDelay = true;
800 SetTimer(pToolbar->hToolbarWnd, TOOLBAR_SAVE_WIDTH_TIMER, 1000, (TIMERPROC)NULL);
801 }
802 }
803
804 //====================
805
806 // ...otherwise the mousewheel controls the visible span of taskbar items, if the total
807 // number of taskbar items is > than the configured maximum simultaneously visible...
808 else if (pSettings->taskbarMode != TASKBAR_MODE_HIDDEN)
809 {
810 if (((message == WM_MOUSEWHEEL) && (GET_WHEEL_DELTA_WPARAM(wParam) < 0)) || ((message == WM_MOUSEHWHEEL) && (GET_WHEEL_DELTA_WPARAM(wParam) > 0)))
811 {
812 pTaskbar->taskButtonsOffset++;
813 int firstButton = pTaskbar->FindFirstVisible();
814 if (pTaskbar->FindLastVisible(firstButton) < 0) pTaskbar->taskButtonsOffset--; // Couldn't scroll further down/right...
815 else pToolbar->UpdateToolbarWindow();
816 }
817 else if (pTaskbar->taskButtonsOffset > 0)
818 {
819 pTaskbar->taskButtonsOffset--;
820 pToolbar->UpdateToolbarWindow();
821 }
822 }
823 }
824 break;
825
826 //====================
827/*
828 case WM_MOUSEMOVE:
829 {
830 }
831 break;
832*/
833 //====================
834/*
835 case WM_MOUSEHOVER:
836 case WM_NCMOUSEHOVER:
837 {
838 // Do something?
839// pSettings->toolbarTransparencyAlpha = 255;
840 pToolbar->UpdateToolbarWindow();
841 break;
842 }
843*/
844 case WM_MOUSELEAVE:
845 case WM_NCMOUSELEAVE:
846 {
847 pToolbar->ButtonPressed1 = pToolbar->ButtonPressed2 = pToolbar->ButtonPressed3 = pToolbar->ButtonPressed4 = false;
848 pToolbar->UpdateToolbarWindow();
849 }
850 break;
851
852 //====================
853
854 // If moved, snap window to screen edges...
855 case WM_WINDOWPOSCHANGING:
856 {
857 // Snap window to screen edges when in manual positioning mode?
858 if ((pSettings->ToolbarPlacement.placement == PLACEMENT_MANUAL) && pSettings->toolbarSnapToEdges)
859 {
860 if (pToolbar)
861 {
862 if (IsWindowVisible(hwnd)) SnapWindowToEdge((WINDOWPOS*)lParam, pSettings->edgeSnapThreshold, true);
863 }
864 }
865 }
866 return 0;
867
868 //====================
869
870 default:
871 return DefWindowProc(hwnd,message,wParam,lParam);
872
873 //====================
874 }
875 return 0;
876}
void WriteBool(LPCSTR fp, LPCSTR keyword, bool value)
Definition BBApi.cpp:3131
void WriteInt(LPCSTR fp, LPCSTR keyword, int value)
Definition BBApi.cpp:3144
Desktop * pDesktop
Definition Blackbox.cpp:37
Taskbar * pTaskbar
Definition Blackbox.cpp:47
void BBSmartExecute(LPSTR inputString)
Definition BBApi.cpp:1767
MenuCommon * pMenuCommon
Definition Blackbox.cpp:41
void SnapWindowToEdge(WINDOWPOS *pwPos, int nDist, bool bUseScreenSize)
Definition BBApi.cpp:1970
HINSTANCE BBExecute(HWND Owner, LPCSTR szOperation, LPCSTR szCommand, LPCSTR szArgs, LPCSTR szDirectory, int nShowCmd, bool noErrorMsgs)
Definition BBApi.cpp:1648
Settings * pSettings
Definition Blackbox.cpp:46
HWND GetBBWnd()
Definition BBApi.cpp:128
#define BB_ACTIVETASK
Definition BBApi.h:198
#define TASKITEM_ACTIVATED
Definition BBApi.h:288
#define BB_TOGGLEPLUGINS
Definition BBApi.h:167
#define TASKITEM_MODIFIED
Definition BBApi.h:287
#define TASKITEM_ADDED
Definition BBApi.h:286
#define BB_MENU
Definition BBApi.h:160
#define BB_RECONFIGURE
Definition BBApi.h:147
#define BB_ADDTASK
Definition BBApi.h:195
#define BB_REDRAW
Definition BBApi.h:200
#define TASKITEM_FLASHED
Definition BBApi.h:291
#define BB_WORKSPACE
Definition BBApi.h:183
#define TASKITEM_REFRESH
Definition BBApi.h:290
#define TASKITEM_REMOVED
Definition BBApi.h:289
#define BB_TOGGLESYSTEMBAR
Definition BBApi.h:163
#define BB_ACTIVATESHELLWINDOW
Definition BBApi.h:197
#define BB_REMOVETASK
Definition BBApi.h:196
#define BB_TOGGLEDOCK
Definition BBApi.h:170
#define BB_TASKSUPDATE
Definition BBApi.h:187
#define BB_TOGGLETOOLBAR
Definition BBApi.h:171
Toolbar * pToolbar
Definition Blackbox.cpp:48
#define GET_Y_LPARAM(lp)
Definition Menu.h:60
#define GET_X_LPARAM(lp)
Definition Menu.h:56
#define PLACEMENT_MANUAL
Definition Settings.h:67
#define TASKBAR_MODE_HIDDEN
Definition Settings.h:42
void PlaySoundFX(int sound)
Definition Sounds.cpp:40
@ SFX_TOGGLE_ELEMENT
Definition Sounds.h:48
#define TOOLBAR_THROTTLE_UPDATES_TIMER
Definition Toolbar.h:52
#define TOOLBAR_SAVE_WIDTH_TIMER
Definition Toolbar.h:53

Variable Documentation

◆ szToolbarName

const char szToolbarName[] = "BBToolbar"

◆ pBImage

BImage* pBImage
extern

◆ pDesktop

Desktop* pDesktop
extern

◆ pToolbar

Toolbar* pToolbar
extern

◆ pTaskbar

Taskbar* pTaskbar
extern

◆ pTooltips

Tooltips* pTooltips
extern

◆ pSettings

Settings* pSettings
extern

◆ pWorkspaces

Workspaces* pWorkspaces
extern

◆ pMenuCommon

MenuCommon* pMenuCommon
extern

◆ toolbarMessageSubscription