Ticket #4880: DesbarAutoHideFeature.2.diff
File DesbarAutoHideFeature.2.diff, 12.1 KB (added by , 13 years ago) |
---|
-
BarWindow.h
54 54 virtual void WorkspaceActivated(int32 workspace, 55 55 bool activate); 56 56 virtual void ScreenChanged(BRect size, color_space depth); 57 virtual void DispatchMessage(BMessage* message,58 BHandler* handler);59 57 virtual void MessageReceived(BMessage* message); 60 58 virtual void Minimize(bool minimize); 61 59 -
BarView.h
58 58 const float kMenuBarHeight = 21.0f; 59 59 const float kStatusHeight = 22.0f; 60 60 61 const float kHModeHiddenHeight = 1.0f; 62 const float kMaxPreventHidingDist = 80.0f; 63 61 64 class BShelf; 62 65 class TBarMenuBar; 63 66 class TExpandoMenuBar; … … 78 81 virtual void MessageReceived(BMessage* message); 79 82 virtual void MouseMoved(BPoint where, uint32 transit, 80 83 const BMessage* dragMessage); 84 virtual void MouseDown(BPoint where); 81 85 82 86 void SaveSettings(); 83 void Update AutoRaise();87 void UpdateEventMask(); 84 88 void UpdatePlacement(); 85 89 void ChangeState(int32 state, bool vertical, bool left, bool top); 90 void RaiseDeskbar(bool raise); 91 void HideDeskbar(bool hide); 86 92 87 93 bool Vertical() const; 88 94 bool Left() const; … … 136 142 TExpandoMenuBar* ExpandoMenuBar() const; 137 143 TBarMenuBar* BarMenuBar() const; 138 144 TDragRegion* DragRegion() const { return fDragRegion; } 139 145 140 146 private: 141 147 friend class TBeMenu; 142 148 friend class PreferencesWindow; -
BarApp.h
81 81 const uint32 kSuperExpando = 'SprE'; 82 82 const uint32 kExpandNewTeams = 'ExTm'; 83 83 const uint32 kAutoRaise = 'AtRs'; 84 const uint32 kAutoHide = 'AtHd'; 84 85 const uint32 kRestartTracker = 'Trak'; 85 86 86 87 // from roster_private.h … … 110 111 bool superExpando; 111 112 bool expandNewTeams; 112 113 bool autoRaise; 114 bool autoHide; 113 115 bool recentAppsEnabled; 114 116 bool recentDocsEnabled; 115 117 bool recentFoldersEnabled; -
BarWindow.cpp
106 106 107 107 108 108 void 109 TBarWindow::DispatchMessage(BMessage* message, BHandler* handler)110 {111 // Activate the window when you click on it (ie. on the tray area,112 // the menu part will do this automatically)113 if (message->what == B_MOUSE_DOWN) {114 if (!((TBarApp*)be_app)->Settings()->autoRaise)115 Activate(true);116 117 if (_IsFocusMessage(message)118 && (modifiers() & (B_CONTROL_KEY | B_COMMAND_KEY | B_OPTION_KEY119 | B_SHIFT_KEY)) == (B_CONTROL_KEY | B_COMMAND_KEY)) {120 // The window key was pressed - enter dragging code121 fBarView->DragRegion()->MouseDown(122 fBarView->DragRegion()->DragRegion().LeftTop());123 return;124 }125 }126 127 BWindow::DispatchMessage(message, handler);128 }129 130 131 void132 109 TBarWindow::MenusBeginning() 133 110 { 134 111 BPath path; … … 182 159 sBeMenu->UnlockLooper(); 183 160 } 184 161 185 fBarView->Update AutoRaise();162 fBarView->UpdateEventMask(); 186 163 } 187 164 188 165 -
PreferencesWindow.h
57 57 58 58 BCheckBox* fWindowAlwaysOnTop; 59 59 BCheckBox* fWindowAutoRaise; 60 BCheckBox* fWindowAutoHide; 60 61 }; 61 62 62 63 #endif // _PREFERENCES_WINDOW_H -
BarView.cpp
110 110 SetViewColor(ui_color(B_MENU_BACKGROUND_COLOR)); 111 111 SetFont(be_plain_font); 112 112 113 Update AutoRaise();113 UpdateEventMask(); 114 114 UpdatePlacement(); 115 115 116 116 fTrackingHookData.fTrackingHook = MenuTrackingHook; … … 182 182 { 183 183 if (Window() == NULL || EventMask() == 0) 184 184 return; 185 186 desk_settings* settings = ((TBarApp*)be_app)->Settings(); 187 bool alwaysOnTop = settings->alwaysOnTop; 188 bool autoRaise = settings->autoRaise; 189 bool autoHide = settings->autoHide; 190 191 if (!autoRaise && !autoHide) 192 return; 193 194 if (DragRegion()->IsDragging()) { 195 return; 196 } 185 197 198 bool isTopMost = Window()->Feel() == B_FLOATING_ALL_WINDOW_FEEL; 199 bool isHidden = IsHidden(); 200 186 201 // Auto-Raise 187 188 202 where = ConvertToScreen(where); 189 203 BScreen screen(Window()); 190 BRect frame = screen.Frame(); 191 if (where.x == frame.left || where.x == frame.right 192 || where.y == frame.top || where.y == frame.bottom) { 193 // cursor is on screen edge 194 if (Window()->Frame().Contains(where)) 195 Window()->Activate(); 204 BRect screenFrame = screen.Frame(); 205 if ((where.x == screenFrame.left || where.x == screenFrame.right 206 || where.y == screenFrame.top || where.y == screenFrame.bottom) 207 && Window()->Frame().Contains(where)) { 208 // cursor is on a screen edge within the window frame 209 210 if (autoRaise && !isTopMost) { 211 RaiseDeskbar(true); 212 } 213 214 if (autoHide && isHidden) { 215 HideDeskbar(false); 216 } 217 } else { 218 // cursor is not on screen edge 219 BRect preventHideArea = Window()->Frame().InsetByCopy( 220 -kMaxPreventHidingDist, -kMaxPreventHidingDist); 221 222 if (preventHideArea.Contains(where)) 223 return; 224 225 // cursor to bar distance above threshold 226 if (autoRaise && isTopMost) { 227 RaiseDeskbar(false); 228 } 229 230 if (autoHide && !isHidden) { 231 HideDeskbar(true); 232 } 196 233 } 197 234 } 198 235 199 236 200 237 void 238 TBarView::MouseDown(BPoint where) 239 { 240 where = ConvertToScreen(where); 241 242 if (Window()->Frame().Contains(where)) { 243 Window()->Activate(); 244 245 if ((modifiers() & (B_CONTROL_KEY | B_COMMAND_KEY | B_OPTION_KEY 246 | B_SHIFT_KEY)) == (B_CONTROL_KEY | B_COMMAND_KEY)) { 247 // The window key was pressed - enter dragging code 248 DragRegion()->MouseDown( 249 DragRegion()->DragRegion().LeftTop()); 250 return; 251 } 252 } else { 253 // hide deskbar if required 254 bool autoRaise = ((TBarApp*)be_app)->Settings()->autoRaise; 255 bool autoHide = ((TBarApp*)be_app)->Settings()->autoHide; 256 bool isTopMost = Window()->Feel() == B_FLOATING_ALL_WINDOW_FEEL; 257 bool isHidden = IsHidden(); 258 259 if (autoRaise && isTopMost) { 260 RaiseDeskbar(false); 261 } 262 263 if (autoHide && !isHidden) { 264 HideDeskbar(true); 265 } 266 } 267 } 268 269 270 void 201 271 TBarView::PlaceBeMenu() 202 272 { 203 273 // top or bottom, full … … 334 404 { 335 405 float windowHeight = 0; 336 406 float windowWidth = sMinimumWindowWidth; 337 if (fState == kFullState) { 338 windowHeight = screenFrame.bottom; 339 windowWidth = fBarMenuBar->Frame().Width(); 340 } else if (fState == kExpandoState) { 341 if (fVertical) { 342 // top left or right 343 windowHeight = fExpando->Frame().bottom; 407 bool calcHiddenSize = ((TBarApp*)be_app)->Settings()->autoHide 408 && IsHidden() && !DragRegion()->IsDragging(); 409 410 if (!calcHiddenSize) 411 { 412 if (fState == kFullState) { 413 windowHeight = screenFrame.bottom; 414 windowWidth = fBarMenuBar->Frame().Width(); 415 } else if (fState == kExpandoState) { 416 if (fVertical) { 417 // top left or right 418 windowHeight = fExpando->Frame().bottom; 419 } else { 420 // top or bottom, full 421 fExpando->CheckItemSizes(0); 422 windowHeight = kHModeHeight; 423 windowWidth = screenFrame.Width(); 424 } 344 425 } else { 426 // four corners 427 if (fTrayLocation != 0) 428 windowHeight = fDragRegion->Frame().bottom; 429 else 430 windowHeight = fBarMenuBar->Frame().bottom; 431 } 432 } else { 433 windowHeight = kHModeHiddenHeight; 434 435 if (fState == kExpandoState && !fVertical) { 345 436 // top or bottom, full 346 437 fExpando->CheckItemSizes(0); 347 windowHeight = kHModeHeight;348 438 windowWidth = screenFrame.Width(); 439 } else { 440 windowWidth = kHModeHiddenHeight; 349 441 } 350 } else {351 // four corners352 if (fTrayLocation != 0)353 windowHeight = fDragRegion->Frame().bottom;354 else355 windowHeight = fBarMenuBar->Frame().bottom;356 442 } 357 443 358 444 *width = windowWidth; 359 445 *height = windowHeight; 360 446 } … … 414 500 415 501 416 502 void 417 TBarView::Update AutoRaise()503 TBarView::UpdateEventMask() 418 504 { 419 if (((TBarApp*)be_app)->Settings()->autoRaise) 505 if (((TBarApp*)be_app)->Settings()->autoRaise || 506 ((TBarApp*)be_app)->Settings()->autoHide) 420 507 SetEventMask(B_POINTER_EVENTS, B_NO_POINTER_HISTORY); 421 508 else 422 509 SetEventMask(0); … … 443 530 fTop = top; 444 531 445 532 // Send a message to the preferences window to let it know to enable 446 // or disable dpreference items533 // or disable preference items 447 534 if (stateChanged || vertSwap) 448 535 be_app->PostMessage(kStateChanged); 449 536 … … 507 594 } 508 595 509 596 597 void 598 TBarView::RaiseDeskbar(bool raise) 599 { 600 if (raise) 601 Window()->SetFeel(B_FLOATING_ALL_WINDOW_FEEL); 602 else 603 Window()->SetFeel(B_NORMAL_WINDOW_FEEL); 604 } 605 606 void 607 TBarView::HideDeskbar(bool hide) 608 { 609 BScreen screen(Window()); 610 BRect screenFrame = screen.Frame(); 611 612 if (hide) { 613 Hide(); 614 PositionWindow(screenFrame); 615 SizeWindow(screenFrame); 616 } else { 617 Show(); 618 SizeWindow(screenFrame); 619 PositionWindow(screenFrame); 620 } 621 } 622 623 510 624 // window placement functions 511 625 512 626 bool -
BarApp.cpp
206 206 storedSettings.AddBool("superExpando", fSettings.superExpando); 207 207 storedSettings.AddBool("expandNewTeams", fSettings.expandNewTeams); 208 208 storedSettings.AddBool("autoRaise", fSettings.autoRaise); 209 storedSettings.AddBool("autoHide", fSettings.autoHide); 209 210 storedSettings.AddBool("recentAppsEnabled", 210 211 fSettings.recentAppsEnabled); 211 212 storedSettings.AddBool("recentDocsEnabled", … … 241 242 settings.superExpando = false; 242 243 settings.expandNewTeams = false; 243 244 settings.autoRaise = false; 245 settings.autoHide = false; 244 246 settings.recentAppsEnabled = true; 245 247 settings.recentDocsEnabled = true; 246 248 settings.recentFoldersEnabled = true; … … 290 292 storedSettings.FindBool("superExpando", &settings.superExpando); 291 293 storedSettings.FindBool("expandNewTeams", &settings.expandNewTeams); 292 294 storedSettings.FindBool("autoRaise", &settings.autoRaise); 295 storedSettings.FindBool("autoHide", &settings.autoHide); 293 296 storedSettings.FindBool("recentAppsEnabled", 294 297 &settings.recentAppsEnabled); 295 298 storedSettings.FindBool("recentDocsEnabled", … … 417 420 fSettings.autoRaise = !fSettings.autoRaise; 418 421 419 422 fBarWindow->Lock(); 420 BarView()->Update AutoRaise();423 BarView()->UpdateEventMask(); 421 424 fBarWindow->Unlock(); 422 425 break; 423 426 427 case kAutoHide: 428 fSettings.autoHide = !fSettings.autoHide; 429 430 fBarWindow->Lock(); 431 BarView()->UpdateEventMask(); 432 BarView()->HideDeskbar(fSettings.autoHide); 433 fBarWindow->Unlock(); 434 break; 435 424 436 case kTrackerFirst: 425 437 fSettings.trackerAlwaysFirst = !fSettings.trackerAlwaysFirst; 426 438 -
StatusView.h
197 197 198 198 int32 DragRegionLocation() const; 199 199 void SetDragRegionLocation(int32); 200 201 bool IsDragging() {return IsTracking();} 200 202 201 203 private: 202 204 TBarView* fBarView; -
PreferencesWindow.cpp
62 62 new BMessage(kAlwaysTop)); 63 63 fWindowAutoRaise = new BCheckBox(B_TRANSLATE("Auto-raise"), 64 64 new BMessage(kAutoRaise)); 65 fWindowAutoHide = new BCheckBox(B_TRANSLATE("Auto-hide"), 66 new BMessage(kAutoHide)); 65 67 66 68 BTextView* docTextView = fMenuRecentDocumentCount->TextView(); 67 69 BTextView* appTextView = fMenuRecentApplicationCount->TextView(); … … 122 124 123 125 fWindowAlwaysOnTop->SetValue(appSettings->alwaysOnTop); 124 126 fWindowAutoRaise->SetValue(appSettings->autoRaise); 127 fWindowAutoHide->SetValue(appSettings->autoHide); 125 128 126 129 _EnableDisableDependentItems(); 127 130 … … 134 137 135 138 fWindowAlwaysOnTop->SetTarget(be_app); 136 139 fWindowAutoRaise->SetTarget(be_app); 140 fWindowAutoHide->SetTarget(be_app); 137 141 138 142 // Layout 139 143 fMenuBox = new BBox("fMenuBox"); … … 196 200 .AddGroup(B_VERTICAL, 1) 197 201 .Add(fWindowAlwaysOnTop) 198 202 .Add(fWindowAutoRaise) 203 .Add(fWindowAutoHide) 199 204 .AddGlue() 200 205 .SetInsets(10, 10, 10, 10) 201 206 .End() … … 310 315 if (!active && IsMinimized()) 311 316 PostMessage(B_QUIT_REQUESTED); 312 317 } 313