We're now using the same priorities for windows as BeOS does - this should improve

the responsiveness of the GUI, and should also fix bug #742.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18821 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2006-09-12 11:11:22 +00:00
parent d75df30b25
commit 946d88f90b
3 changed files with 13 additions and 14 deletions
+6 -4
View File
@@ -7,6 +7,7 @@
* Stefano Ceccherini ([email protected])
*/
#include <MenuBar.h>
#include <Application.h>
@@ -21,6 +22,7 @@
using BPrivate::gDefaultTokens;
struct menubar_data {
BMenuBar *menuBar;
int32 menuIndex;
@@ -34,9 +36,9 @@ struct menubar_data {
BMenuBar::BMenuBar(BRect frame, const char *title, uint32 resizeMask,
menu_layout layout, bool resizeToFit)
: BMenu(frame, title, resizeMask,
B_WILL_DRAW | B_FRAME_EVENTS, layout, resizeToFit),
menu_layout layout, bool resizeToFit)
: BMenu(frame, title, resizeMask, B_WILL_DRAW | B_FRAME_EVENTS, layout,
resizeToFit),
fBorder(B_BORDER_FRAME),
fTrackingPID(-1),
fPrevFocusToken(-1),
@@ -349,7 +351,7 @@ BMenuBar::StartMenuBar(int32 menuIndex, bool sticky, bool showMenu, BRect *speci
fMenuSem = create_sem(0, "window close sem");
_set_menu_sem_(window, fMenuSem);
fTrackingPID = spawn_thread(TrackTask, "menu_tracking", B_NORMAL_PRIORITY, NULL);
fTrackingPID = spawn_thread(TrackTask, "menu_tracking", B_DISPLAY_PRIORITY, NULL);
if (fTrackingPID >= 0) {
menubar_data data;
data.menuBar = this;
+4 -5
View File
@@ -293,11 +293,8 @@ BPopUpMenu::_go(BPoint where, bool autoInvoke, bool startOpened,
data->lock = sem;
// Spawn the tracking thread
fTrackThread = spawn_thread(entry, "popup", B_NORMAL_PRIORITY, data);
if (fTrackThread >= 0)
resume_thread(fTrackThread);
else {
fTrackThread = spawn_thread(entry, "popup", B_DISPLAY_PRIORITY, data);
if (fTrackThread < B_OK) {
// Something went wrong. Cleanup and return NULL
delete_sem(sem);
if (async && window != NULL)
@@ -306,6 +303,8 @@ BPopUpMenu::_go(BPoint where, bool autoInvoke, bool startOpened,
return NULL;
}
resume_thread(fTrackThread);
// Synchronous menu: we block on the sem till
// the other thread deletes it.
if (!async) {
+3 -5
View File
@@ -40,7 +40,6 @@
//#define DEBUG_WIN
#ifdef DEBUG_WIN
# include <stdio.h>
# define STRACE(x) printf x
#else
# define STRACE(x) ;
@@ -269,7 +268,7 @@ BWindow::Shortcut::PrepareKey(uint32 key)
BWindow::BWindow(BRect frame, const char* title, window_type type,
uint32 flags, uint32 workspace)
: BLooper(title)
: BLooper(title, B_DISPLAY_PRIORITY)
{
window_look look;
window_feel feel;
@@ -281,7 +280,7 @@ BWindow::BWindow(BRect frame, const char* title, window_type type,
BWindow::BWindow(BRect frame, const char* title, window_look look, window_feel feel,
uint32 flags, uint32 workspace)
: BLooper(title)
: BLooper(title, B_DISPLAY_PRIORITY)
{
_InitData(frame, title, look, feel, flags, workspace);
}
@@ -350,9 +349,8 @@ BWindow::BWindow(BRect frame, int32 bitmapToken)
BWindow::~BWindow()
{
if (BMenu *menu = dynamic_cast<BMenu *>(fFocus)) {
if (BMenu *menu = dynamic_cast<BMenu *>(fFocus))
menu->QuitTracking();
}
// The BWindow is locked when the destructor is called,
// we need to unlock because the menubar thread tries