Xfce Forum

Sub domains
 

You are not logged in.

#1 2021-04-01 21:52:18

cjsmall
Member
Registered: 2012-12-02
Posts: 49

How to force new windows to be on top (in front)

Xubuntu 20.04

In Window Manager Settings I have:

[x] Focus follows mouse
[x] Automatically give focus to newly created windows
[x] Raise window when clicking inside application window

When I create a new window (e.g., opening mutt mail or creating a new terminal with a keyboard shortcut, the new window will open above or below other existing windows apparently depending upon where those windows were in the window stack previously.  For example, if one or more existing windows were active and raised prior to the new window's creation, then the new window will be placed behind the raised ones.  In other cases, the new window will appear on top.

Is there any setting that will force new windows to always appear on top without having to change my focus and raise policies?

Note: I've tried "Automatically raise windows when they receive focus" with various delays, which in some ways achieves what I want, but I don't like the window flipping that occurs when the mouse is just randomly placed on the screen or slowly moved about, so I'm hoping there is another trick to just forcing the raising of new windows without activating that.

Offline

#2 2022-03-14 17:15:30

cjsmall
Member
Registered: 2012-12-02
Posts: 49

Re: How to force new windows to be on top (in front)

No responses to this so I wanted to tickle it again.  This problem persists on 20.04 and is causing no end of problems with window creation often being completely hidden behind other existing windows.  New windows should always be created on the top of the stack.

Offline

#3 2022-03-15 01:17:38

ToZ
Administrator
From: Canada
Registered: 2011-06-02
Posts: 10,948

Re: How to force new windows to be on top (in front)

I'm trying to replicate this on my 20.04 system and I can't. New windows are always created on the top of the stack for me.

Can you post back the results of the following commands:

xfconf-query -c xfwm4 -lv
xfconf-query -c xfce4-panel -lv

Also, can try creating a secondary account on your computer, making only the changes you indicate above in the Window Manager Settings, and see of the problem replicates with this new user account?


Please remember to mark your thread [SOLVED] to make it easier for others to find
--- How To Ask For Help | FAQ | Developer Wiki  |  Community | Contribute ---

Offline

#4 2022-03-15 03:12:19

cjsmall
Member
Registered: 2012-12-02
Posts: 49

Re: How to force new windows to be on top (in front)

188-> xfconf-query -c xfwm4 -lv
/general/activate_action                 bring
/general/borderless_maximize             true
/general/box_move                        false
/general/box_resize                      false
/general/button_layout                   O|HMC
/general/button_offset                   0
/general/button_spacing                  0
/general/click_to_focus                  false
/general/cycle_apps_only                 false
/general/cycle_draw_frame                true
/general/cycle_hidden                    true
/general/cycle_minimum                   true
/general/cycle_preview                   true
/general/cycle_raise                     false
/general/cycle_tabwin_mode               0
/general/cycle_workspaces                false
/general/double_click_action             none
/general/double_click_distance           5
/general/double_click_time               250
/general/easy_click                      Super
/general/focus_delay                     5
/general/focus_hint                      true
/general/focus_new                       true
/general/frame_border_top                0
/general/frame_opacity                   100
/general/full_width_title                true
/general/horiz_scroll_opacity            false
/general/inactive_opacity                100
/general/maximized_offset                0
/general/mousewheel_rollup               true
/general/move_opacity                    100
/general/placement_mode                  mouse
/general/placement_ratio                 44
/general/popup_opacity                   100
/general/prevent_focus_stealing          true
/general/raise_delay                     627
/general/raise_on_click                  true
/general/raise_on_focus                  false
/general/raise_with_any_button           true
/general/repeat_urgent_blink             false
/general/resize_opacity                  100
/general/restore_on_move                 true
/general/scroll_workspaces               true
/general/shadow_delta_height             0
/general/shadow_delta_width              0
/general/shadow_delta_x                  0
/general/shadow_delta_y                  -3
/general/shadow_opacity                  50
/general/show_app_icon                   false
/general/show_dock_shadow                true
/general/show_frame_shadow               false
/general/show_popup_shadow               true
/general/snap_resist                     true
/general/snap_to_border                  true
/general/snap_to_windows                 true
/general/snap_width                      47
/general/sync_to_vblank                  false
/general/theme                           Default
/general/tile_on_move                    false
/general/title_alignment                 left
/general/title_font                      Sans Bold 9
/general/title_horizontal_offset         0
/general/title_shadow_active             false
/general/title_shadow_inactive           false
/general/title_vertical_offset_active    0
/general/title_vertical_offset_inactive  0
/general/titleless_maximize              false
/general/toggle_workspaces               false
/general/unredirect_overlays             false
/general/urgent_blink                    false
/general/use_compositing                 true
/general/vblank_mode                     auto
/general/workspace_count                 8
/general/workspace_names                 <<UNSUPPORTED>>
/general/wrap_cycle                      true
/general/wrap_layout                     true
/general/wrap_resistance                 48
/general/wrap_windows                    true
/general/wrap_workspaces                 false
/general/zoom_desktop                    true
189-> xfconf-query -c xfce4-panel -lv
/configver                                                  2
/panels                                                     <<UNSUPPORTED>>
/panels/panel-0/autohide-behavior                           0
/panels/panel-0/background-alpha                            80
/panels/panel-0/background-style                            0
/panels/panel-0/enter-opacity                               100
/panels/panel-0/leave-opacity                               100
/panels/panel-0/length                                      100
/panels/panel-0/length-adjust                               true
/panels/panel-0/mode                                        0
/panels/panel-0/plugin-ids                                  <<UNSUPPORTED>>
/panels/panel-0/position                                    p=6;x=0;y=0
/panels/panel-0/position-locked                             true
/panels/panel-0/size                                        40
/panels/panel-0/span-monitors                               false
/panels/panel-1/background-alpha                            80
/panels/panel-1/length                                      100
/panels/panel-1/output-name                                 screen-1
/panels/panel-1/plugin-ids                                  <<UNSUPPORTED>>
/panels/panel-1/position                                    p=11;x=1085;y=25
/panels/panel-1/position-locked                             true
/panels/panel-1/size                                        40
/plugins/clipman/settings/add-primary-clipboard             false
/plugins/clipman/settings/history-ignore-primary-clipboard  true
/plugins/clipman/settings/max-images-in-history             0
/plugins/clipman/settings/max-texts-in-history              40
/plugins/clipman/settings/save-on-quit                      false
/plugins/clipman/tweaks/never-confirm-history-clear         true
/plugins/clipman/tweaks/paste-on-activate                   2
/plugins/clipman/tweaks/popup-at-pointer                    true
/plugins/clipman/tweaks/reorder-items                       false
/plugins/plugin-1                                           separator
/plugins/plugin-10                                          launcher
/plugins/plugin-10/arrow-position                           5
/plugins/plugin-10/items                                    <<UNSUPPORTED>>
/plugins/plugin-11                                          launcher
/plugins/plugin-11/arrow-position                           5
/plugins/plugin-11/items                                    <<UNSUPPORTED>>
/plugins/plugin-12                                          launcher
/plugins/plugin-12/arrow-position                           5
/plugins/plugin-12/items                                    <<UNSUPPORTED>>
/plugins/plugin-13                                          launcher
/plugins/plugin-13/arrow-position                           5
/plugins/plugin-13/items                                    <<UNSUPPORTED>>
/plugins/plugin-14                                          launcher
/plugins/plugin-14/arrow-position                           5
/plugins/plugin-14/items                                    <<UNSUPPORTED>>
/plugins/plugin-15                                          weather
/plugins/plugin-16                                          mailwatch
/plugins/plugin-17                                          separator
/plugins/plugin-17/style                                    1
/plugins/plugin-18                                          launcher
/plugins/plugin-18/arrow-position                           5
/plugins/plugin-18/items                                    <<UNSUPPORTED>>
/plugins/plugin-19                                          separator
/plugins/plugin-2                                           separator
/plugins/plugin-20                                          launcher
/plugins/plugin-20/arrow-position                           5
/plugins/plugin-20/items                                    <<UNSUPPORTED>>
/plugins/plugin-21                                          launcher
/plugins/plugin-21/arrow-position                           5
/plugins/plugin-21/items                                    <<UNSUPPORTED>>
/plugins/plugin-22                                          launcher
/plugins/plugin-22/arrow-position                           5
/plugins/plugin-22/items                                    <<UNSUPPORTED>>
/plugins/plugin-23                                          separator
/plugins/plugin-23/style                                    0
/plugins/plugin-25                                          launcher
/plugins/plugin-25/arrow-position                           5
/plugins/plugin-25/items                                    <<UNSUPPORTED>>
/plugins/plugin-26                                          launcher
/plugins/plugin-26/arrow-position                           5
/plugins/plugin-26/items                                    <<UNSUPPORTED>>
/plugins/plugin-28                                          launcher
/plugins/plugin-28/arrow-position                           5
/plugins/plugin-28/items                                    <<UNSUPPORTED>>
/plugins/plugin-29                                          launcher
/plugins/plugin-29/arrow-position                           5
/plugins/plugin-29/items                                    <<UNSUPPORTED>>
/plugins/plugin-3                                           xfce4-clipman-plugin
/plugins/plugin-30                                          launcher
/plugins/plugin-30/arrow-position                           5
/plugins/plugin-30/items                                    <<UNSUPPORTED>>
/plugins/plugin-31                                          separator
/plugins/plugin-31/style                                    1
/plugins/plugin-32                                          separator
/plugins/plugin-32/style                                    1
/plugins/plugin-33                                          indicator
/plugins/plugin-33/align-left                               true
/plugins/plugin-33/known-indicators                         <<UNSUPPORTED>>
/plugins/plugin-33/mode-whitelist                           true
/plugins/plugin-33/single-row                               true
/plugins/plugin-33/whitelist                                <<UNSUPPORTED>>
/plugins/plugin-34                                          separator
/plugins/plugin-34/style                                    1
/plugins/plugin-35                                          separator
/plugins/plugin-35/style                                    1
/plugins/plugin-36                                          separator
/plugins/plugin-36/style                                    1
/plugins/plugin-37                                          indicator
/plugins/plugin-37/align-left                               true
/plugins/plugin-37/blacklist                                <<UNSUPPORTED>>
/plugins/plugin-37/known-indicators                         <<UNSUPPORTED>>
/plugins/plugin-37/mode-whitelist                           false
/plugins/plugin-37/single-row                               true
/plugins/plugin-37/whitelist                                <<UNSUPPORTED>>
/plugins/plugin-38                                          separator
/plugins/plugin-38/expand                                   true
/plugins/plugin-38/style                                    1
/plugins/plugin-4                                           separator
/plugins/plugin-4/style                                     1
/plugins/plugin-40                                          pulseaudio
/plugins/plugin-40/enable-keyboard-shortcuts                true
/plugins/plugin-40/mpris-players                            banshee;chromium.instance15664;chromium.instance16312;chromium.instance20624;chromium.instance2542929;chromium.instance262856;chromium.instance2674199;chromium.instance2675868;chromium.instance26829;chromium.instance367;chromium.instance3999176;chromium.instance4009996;chromium.instance528867;chromium.instance760904;chromium.instance828556;clementine;firefox.instance10510;firefox.instance107871;firefox.instance10861;firefox.instance1157774;firefox.instance13032;firefox.instance1429705;firefox.instance14530;firefox.instance1478056;firefox.instance1527958;firefox.instance1548570;firefox.instance1611369;firefox.instance16269;firefox.instance1647302;firefox.instance171027;firefox.instance1719296;firefox.instance1814675;firefox.instance1818821;firefox.instance182579;firefox.instance1890585;firefox.instance1978284;firefox.instance1992117;firefox.instance206519;firefox.instance2079870;firefox.instance2160902;firefox.instance2162076;firefox.instance224062;firefox.instance2255368;firefox.instance22623;firefox.instance231576;firefox.instance2430380;firefox.instance2461041;firefox.instance265112;firefox.instance2668445;firefox.instance2715784;firefox.instance2847994;firefox.instance2953925;firefox.instance3080625;firefox.instance3108899;firefox.instance3318451;firefox.instance3632412;firefox.instance3792635;firefox.instance3806453;firefox.instance4009724;firefox.instance420227;firefox.instance43951;firefox.instance4431;firefox.instance4534;firefox.instance4551;firefox.instance4608;firefox.instance4611;firefox.instance4635;firefox.instance4658;firefox.instance4686;firefox.instance4690;firefox.instance4691;firefox.instance4723;firefox.instance4726;firefox.instance4734;firefox.instance4754;firefox.instance4757;firefox.instance4782;firefox.instance4787;firefox.instance4828;firefox.instance4834;firefox.instance4858;firefox.instance4887;firefox.instance4912;firefox.instance4926;firefox.instance4932;firefox.instance4936;firefox.instance4938;firefox.instance4941;firefox.instance4959;firefox.instance4994;firefox.instance5006;firefox.instance5012;firefox.instance5025;firefox.instance5038;firefox.instance5041;firefox.instance5074;firefox.instance515051;firefox.instance5171;firefox.instance5233;firefox.instance5234;firefox.instance5238;firefox.instance5254;firefox.instance5283;firefox.instance5329;firefox.instance5340;firefox.instance5418;firefox.instance5533;firefox.instance5617;firefox.instance5662;firefox.instance5741;firefox.instance579513;firefox.instance5802;firefox.instance6033;firefox.instance6257;firefox.instance6328;firefox.instance6333;firefox.instance6359;firefox.instance6397;firefox.instance64420;firefox.instance6618;firefox.instance6625;firefox.instance668929;firefox.instance686360;firefox.instance6900;firefox.instance694449;firefox.instance7123;firefox.instance7514;firefox.instance7539;firefox.instance7674;firefox.instance783068;firefox.instance784678;firefox.instance793447;firefox.instance866510;firefox.instance8889;firefox.instance9376;firefox.instance964887;firefox.instance9824;rhythmbox;vlc;vlc.instance19319;vlc.instance19517;vlc.instance19784;vlc.instance30052
/plugins/plugin-40/show-notifications                       false
/plugins/plugin-41                                          separator
/plugins/plugin-41/style                                    1
/plugins/plugin-42                                          launcher
/plugins/plugin-42/arrow-position                           5
/plugins/plugin-42/items                                    <<UNSUPPORTED>>
/plugins/plugin-43                                          pager
/plugins/plugin-43/rows                                     1
/plugins/plugin-44                                          launcher
/plugins/plugin-44/arrow-position                           5
/plugins/plugin-44/items                                    <<UNSUPPORTED>>
/plugins/plugin-45                                          launcher
/plugins/plugin-45/arrow-position                           5
/plugins/plugin-45/items                                    <<UNSUPPORTED>>
/plugins/plugin-46                                          launcher
/plugins/plugin-46/arrow-position                           5
/plugins/plugin-46/items                                    <<UNSUPPORTED>>
/plugins/plugin-47                                          launcher
/plugins/plugin-47/arrow-position                           5
/plugins/plugin-47/items                                    <<UNSUPPORTED>>
/plugins/plugin-48                                          launcher
/plugins/plugin-48/arrow-position                           5
/plugins/plugin-48/items                                    <<UNSUPPORTED>>
/plugins/plugin-49                                          launcher
/plugins/plugin-49/arrow-position                           5
/plugins/plugin-49/items                                    <<UNSUPPORTED>>
/plugins/plugin-5                                           launcher
/plugins/plugin-5/arrow-position                            5
/plugins/plugin-5/items                                     <<UNSUPPORTED>>
/plugins/plugin-50                                          launcher
/plugins/plugin-50/arrow-position                           5
/plugins/plugin-50/items                                    <<UNSUPPORTED>>
/plugins/plugin-51                                          launcher
/plugins/plugin-51/arrow-position                           5
/plugins/plugin-51/items                                    <<UNSUPPORTED>>
/plugins/plugin-52                                          launcher
/plugins/plugin-52/arrow-position                           5
/plugins/plugin-52/items                                    <<UNSUPPORTED>>
/plugins/plugin-53                                          tasklist
/plugins/plugin-54                                          separator
/plugins/plugin-54/style                                    1
/plugins/plugin-55                                          clock
/plugins/plugin-55/digital-format                           %a %b %d,  %I:%M %p
/plugins/plugin-56                                          launcher
/plugins/plugin-56/arrow-position                           5
/plugins/plugin-56/items                                    <<UNSUPPORTED>>
/plugins/plugin-57                                          launcher
/plugins/plugin-57/arrow-position                           5
/plugins/plugin-57/items                                    <<UNSUPPORTED>>
/plugins/plugin-58                                          launcher
/plugins/plugin-58/arrow-position                           5
/plugins/plugin-58/items                                    <<UNSUPPORTED>>
/plugins/plugin-59                                          launcher
/plugins/plugin-59/arrow-position                           5
/plugins/plugin-59/items                                    <<UNSUPPORTED>>
/plugins/plugin-6                                           separator
/plugins/plugin-6/expand                                    false
/plugins/plugin-6/style                                     0
/plugins/plugin-60                                          launcher
/plugins/plugin-60/arrow-position                           5
/plugins/plugin-60/items                                    <<UNSUPPORTED>>
/plugins/plugin-62                                          separator
/plugins/plugin-63                                          separator
/plugins/plugin-63/expand                                   true
/plugins/plugin-63/style                                    0
/plugins/plugin-65                                          tasklist
/plugins/plugin-65/show-handle                              false
/plugins/plugin-65/sort-order                               4
/plugins/plugin-69                                          separator
/plugins/plugin-7                                           clock
/plugins/plugin-7/digital-format                            %a %b %d,  %I:%M %p
/plugins/plugin-70                                          separator
/plugins/plugin-70/style                                    0
/plugins/plugin-71                                          pulseaudio
/plugins/plugin-71/enable-keyboard-shortcuts                true
/plugins/plugin-71/mpris-players                            chromium.instance2542929;chromium.instance262856;chromium.instance2674199;chromium.instance2675868;chromium.instance3999176;chromium.instance528867;chromium.instance828556;clementine;firefox.instance10510;firefox.instance107871;firefox.instance10861;firefox.instance1157774;firefox.instance13032;firefox.instance1429705;firefox.instance14530;firefox.instance1527958;firefox.instance1611369;firefox.instance16269;firefox.instance1647302;firefox.instance171027;firefox.instance1719296;firefox.instance1814675;firefox.instance1890585;firefox.instance1978284;firefox.instance206519;firefox.instance2079870;firefox.instance2160902;firefox.instance224062;firefox.instance2255368;firefox.instance231576;firefox.instance2430380;firefox.instance2461041;firefox.instance265112;firefox.instance2668445;firefox.instance2715784;firefox.instance2847994;firefox.instance2953925;firefox.instance3080625;firefox.instance3108899;firefox.instance3318451;firefox.instance3632412;firefox.instance3792635;firefox.instance3806453;firefox.instance4009724;firefox.instance420227;firefox.instance43951;firefox.instance4431;firefox.instance4534;firefox.instance4551;firefox.instance4608;firefox.instance4611;firefox.instance4635;firefox.instance4658;firefox.instance4686;firefox.instance4690;firefox.instance4691;firefox.instance4723;firefox.instance4726;firefox.instance4734;firefox.instance4754;firefox.instance4757;firefox.instance4782;firefox.instance4787;firefox.instance4828;firefox.instance4834;firefox.instance4858;firefox.instance4887;firefox.instance4912;firefox.instance4926;firefox.instance4932;firefox.instance4936;firefox.instance4938;firefox.instance4941;firefox.instance4959;firefox.instance4994;firefox.instance5006;firefox.instance5012;firefox.instance5025;firefox.instance5038;firefox.instance5074;firefox.instance515051;firefox.instance5171;firefox.instance5234;firefox.instance5238;firefox.instance5254;firefox.instance5283;firefox.instance5329;firefox.instance5340;firefox.instance5418;firefox.instance5533;firefox.instance5617;firefox.instance5662;firefox.instance5741;firefox.instance579513;firefox.instance5802;firefox.instance6033;firefox.instance6257;firefox.instance6328;firefox.instance6333;firefox.instance6359;firefox.instance6397;firefox.instance64420;firefox.instance6618;firefox.instance668929;firefox.instance6900;firefox.instance694449;firefox.instance7514;firefox.instance7539;firefox.instance7674;firefox.instance783068;firefox.instance784678;firefox.instance793447;firefox.instance866510;firefox.instance8889;firefox.instance9376;firefox.instance964887;firefox.instance9824;vlc
/plugins/plugin-71/show-notifications                       false
/plugins/plugin-72                                          separator
/plugins/plugin-8                                           pager
/plugins/plugin-8/rows                                      1
/plugins/plugin-9                                           launcher
/plugins/plugin-9/arrow-position                            5
/plugins/plugin-9/items        

As for a test, try this:

Go to: Settings Manager -> Window Manager -> Keyboard and assign a key to Raise or lower window

Create a large window on the screen and use this key to set it to front and/or back.  Now launch another program that places a window on the screen.  If the large window is in front, then the new window will be placed behind it.  If the large window is set to the back, then the new window will be created on top of it.  This is 100% repeatable for me.

In the real world I carefully tile my windows so that there is no overlap, and thus, the position of any given window in the stack is unpredictable from visual inspection.  Thus, when I start a new program, it may appear, or else be hidden behind the existing window(s).  I just had a case where I was launching a picture viewing app (geeqie).  The window didn't appear!  I tried again and again and it failed.  Only later did I discover five sessions of the viewer hidden behind my browser window which happened to share the same geopetry and position on the screen.

Here is a related problem that I reported elsewhere.  I have multiple virtual desktops running in in Xubuntu.  I use Super-ArrowKeys to move between adjacent desktops and Shift-Super-Arrowkeys to move the active window to the adjacent desktop.  The same problem raises it ugly head when I try to move a window across multiple desktops.  The window being moved may move onto a screen where it falls below another window.  Then the Shift-Super-Arrowkey picks up the top window and drags it along to the next desktop.  Everything gets totally screwed up!

The simple solution to both problems would be to make sure that the window manager always sets a newly created window, or a moving window, to the top of the stack.  I think this makes sense and can see no argument for not doing so.

I hope this makes things a bit clearer.

Offline

#5 2022-03-15 10:46:51

ToZ
Administrator
From: Canada
Registered: 2011-06-02
Posts: 10,948

Re: How to force new windows to be on top (in front)

Try disabling "Activate focus stealing prevention" at Window Manager Tweaks > Focus.


Please remember to mark your thread [SOLVED] to make it easier for others to find
--- How To Ask For Help | FAQ | Developer Wiki  |  Community | Contribute ---

Offline

#6 2022-03-15 15:30:29

cjsmall
Member
Registered: 2012-12-02
Posts: 49

Re: How to force new windows to be on top (in front)

ToZ:  Yes, that fixed the problem of the new window being placed beneath the stack.  Thanks!

Apparently, the new window now gets placed at the top of the stack, because moving that window to adjacent virtual workspaces (as described above) does not get it "orphaned" beneath another window.  However, i still see that if a window is placed at the bottom of the stack and then moved to an adjacent workspace it will still get hidden beneath any other window it encounters, so it might still be advisable to raise a moving window to the top of the stack to avoid this.

I have Raise window when any mouse button is pressed checked, but this isn't in force when keyboard shortcuts are being used.  Maybe this setting should also be implied for these types of move operations which are acting similar to a mouse drag of the window to a new workspace.

I've been trying to research what Activate focus stealing prevention actually does and am still confused.  I assumed that this was intended to prevent the mouse from being grabbed by pop-up dialogs, but after reading some online discussions I'm confused.  Is there a clear explanation of what this does and what else I should expect by turning it off?

Offline

#7 2022-03-15 16:38:53

ToZ
Administrator
From: Canada
Registered: 2011-06-02
Posts: 10,948

Re: How to force new windows to be on top (in front)

cjsmall wrote:

I have Raise window when any mouse button is pressed checked, but this isn't in force when keyboard shortcuts are being used.  Maybe this setting should also be implied for these types of move operations which are acting similar to a mouse drag of the window to a new workspace.

You could try creating a bug report to see if the developer will make this change. But this would then assume that anyone moving a window with keyboard shortcuts wants that window to receive focus (depending on the focus configurations) - not sure how much of an issue that would be.

I've been trying to research what Activate focus stealing prevention actually does and am still confused.  I assumed that this was intended to prevent the mouse from being grabbed by pop-up dialogs, but after reading some online discussions I'm confused.  Is there a clear explanation of what this does and what else I should expect by turning it off?

My understanding is that it prevents other applications from suddenly grabbing focus. For example, a long running process that completes and displays a "done" dialog while you're typing, a thunar job that prompts asking if you want to delete, rename an existing file, etc). It just means ignore all focus calls unless I explicitly focus a window. I believe this is why urgency blinking exists - gives you a indication that something else is asking for attention.


Please remember to mark your thread [SOLVED] to make it easier for others to find
--- How To Ask For Help | FAQ | Developer Wiki  |  Community | Contribute ---

Offline

Board footer

Powered by FluxBB