Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(596)

Side by Side Diff: chrome/browser/ui/cocoa/panels/panel_window_controller_cocoa.mm

Issue 275693002: Fix the bug that minimized panel window might steal focus on Mac (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/cocoa/panels/panel_window_controller_cocoa.h" 5 #include "chrome/browser/ui/cocoa/panels/panel_window_controller_cocoa.h"
6 6
7 #import <Cocoa/Cocoa.h> 7 #import <Cocoa/Cocoa.h>
8 8
9 #include "base/auto_reset.h" 9 #include "base/auto_reset.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 570 matching lines...) Expand 10 before | Expand all | Expand 10 after
581 - (int)titlebarHeightInScreenCoordinates { 581 - (int)titlebarHeightInScreenCoordinates {
582 NSView* titlebar = [self titlebarView]; 582 NSView* titlebar = [self titlebarView];
583 return NSHeight([titlebar convertRect:[titlebar bounds] toView:nil]); 583 return NSHeight([titlebar convertRect:[titlebar bounds] toView:nil]);
584 } 584 }
585 585
586 // TODO(dcheng): These two selectors are almost copy-and-paste from 586 // TODO(dcheng): These two selectors are almost copy-and-paste from
587 // BrowserWindowController. Figure out the appropriate way of code sharing, 587 // BrowserWindowController. Figure out the appropriate way of code sharing,
588 // whether it's refactoring more things into BrowserWindowUtils or making a 588 // whether it's refactoring more things into BrowserWindowUtils or making a
589 // common base controller for browser windows. 589 // common base controller for browser windows.
590 - (void)windowDidBecomeKey:(NSNotification*)notification { 590 - (void)windowDidBecomeKey:(NSNotification*)notification {
591 // Prevent the minimized panel from invoking any activation logic. This is
Dmitry Titov 2014/05/16 16:37:38 I'm not sure I understand the change being made. I
jianli 2014/05/20 00:56:00 We do instruct canBecomeKeyWindow to return NO bu
592 // because Cocoa does not support deactivating a window and it could still
593 // try to activate the minimized panel window.
594 if (windowShim_->panel()->IsMinimized())
595 return;
596
591 // We need to activate the controls (in the "WebView"). To do this, get the 597 // We need to activate the controls (in the "WebView"). To do this, get the
592 // selected WebContents's RenderWidgetHostView and tell it to activate. 598 // selected WebContents's RenderWidgetHostView and tell it to activate.
593 if (WebContents* contents = windowShim_->panel()->GetWebContents()) { 599 if (WebContents* contents = windowShim_->panel()->GetWebContents()) {
594 if (content::RenderWidgetHostView* rwhv = 600 if (content::RenderWidgetHostView* rwhv =
595 contents->GetRenderWidgetHostView()) 601 contents->GetRenderWidgetHostView())
596 rwhv->SetActive(true); 602 rwhv->SetActive(true);
597 } 603 }
598 604
599 windowShim_->panel()->OnActiveStateChanged(true); 605 windowShim_->panel()->OnActiveStateChanged(true);
600 606
601 // Make the window user-resizable when it gains the focus. 607 // Make the window user-resizable when it gains the focus.
602 [[self window] setStyleMask: 608 [[self window] setStyleMask:
603 [[self window] styleMask] | NSResizableWindowMask]; 609 [[self window] styleMask] | NSResizableWindowMask];
604 } 610 }
605 611
606 - (void)windowDidResignKey:(NSNotification*)notification { 612 - (void)windowDidResignKey:(NSNotification*)notification {
607 // If our app is still active and we're still the key window, ignore this 613 // If our app is still active and we're still the key window, ignore this
608 // message, since it just means that a menu extra (on the "system status bar") 614 // message, since it just means that a menu extra (on the "system status bar")
609 // was activated; we'll get another |-windowDidResignKey| if we ever really 615 // was activated; we'll get another |-windowDidResignKey| if we ever really
610 // lose key window status. 616 // lose key window status.
611 if ([NSApp isActive] && ([NSApp keyWindow] == [self window])) 617 if ([NSApp isActive] && ([NSApp keyWindow] == [self window]))
612 return; 618 return;
613 619
614 [self onWindowDidResignKey]; 620 [self onWindowDidResignKey];
615
616 // Make the window not user-resizable when it loses the focus. This is to
617 // solve the problem that the bottom edge of the active panel does not
618 // trigger the user-resizing if this panel stacks with another inactive
619 // panel at the bottom.
620 [[self window] setStyleMask:
621 [[self window] styleMask] & ~NSResizableWindowMask];
622 } 621 }
623 622
624 - (void)windowWillStartLiveResize:(NSNotification*)notification { 623 - (void)windowWillStartLiveResize:(NSNotification*)notification {
625 // Check if the user-resizing is allowed for the triggering edge/corner. 624 // Check if the user-resizing is allowed for the triggering edge/corner.
626 // This is an extra safe guard because we are not able to track the mouse 625 // This is an extra safe guard because we are not able to track the mouse
627 // movement outside the window and Cocoa could trigger the user-resizing 626 // movement outside the window and Cocoa could trigger the user-resizing
628 // when the mouse moves a bit outside the edge/corner. 627 // when the mouse moves a bit outside the edge/corner.
629 if (![self canResizeByMouseAtCurrentLocation]) 628 if (![self canResizeByMouseAtCurrentLocation])
630 return; 629 return;
631 userResizing_ = YES; 630 userResizing_ = YES;
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
734 - (void)onWindowDidResignKey { 733 - (void)onWindowDidResignKey {
735 // We need to deactivate the controls (in the "WebView"). To do this, get the 734 // We need to deactivate the controls (in the "WebView"). To do this, get the
736 // selected WebContents's RenderWidgetHostView and tell it to deactivate. 735 // selected WebContents's RenderWidgetHostView and tell it to deactivate.
737 if (WebContents* contents = windowShim_->panel()->GetWebContents()) { 736 if (WebContents* contents = windowShim_->panel()->GetWebContents()) {
738 if (content::RenderWidgetHostView* rwhv = 737 if (content::RenderWidgetHostView* rwhv =
739 contents->GetRenderWidgetHostView()) 738 contents->GetRenderWidgetHostView())
740 rwhv->SetActive(false); 739 rwhv->SetActive(false);
741 } 740 }
742 741
743 windowShim_->panel()->OnActiveStateChanged(false); 742 windowShim_->panel()->OnActiveStateChanged(false);
743
744 // Make the window not user-resizable when it loses the focus. This is to
745 // solve the problem that the bottom edge of the active panel does not
746 // trigger the user-resizing if this panel stacks with another inactive
747 // panel at the bottom.
748 [[self window] setStyleMask:
749 [[self window] styleMask] & ~NSResizableWindowMask];
744 } 750 }
745 751
746 - (void)preventBecomingKeyWindow:(BOOL)prevent { 752 - (void)preventBecomingKeyWindow:(BOOL)prevent {
747 canBecomeKeyWindow_ = !prevent; 753 canBecomeKeyWindow_ = !prevent;
748 } 754 }
749 755
750 - (void)fullScreenModeChanged:(bool)isFullScreen { 756 - (void)fullScreenModeChanged:(bool)isFullScreen {
751 [self updateWindowLevel]; 757 [self updateWindowLevel];
752 758
753 // If the panel is not always on top, its z-order should not be affected if 759 // If the panel is not always on top, its z-order should not be affected if
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
909 - (NSRect)contentRectForFrameRect:(NSRect)frameRect { 915 - (NSRect)contentRectForFrameRect:(NSRect)frameRect {
910 NSRect contentRect = [[[self window] contentView] convertRect:frameRect 916 NSRect contentRect = [[[self window] contentView] convertRect:frameRect
911 fromView:nil]; 917 fromView:nil];
912 contentRect.size.height -= panel::kTitlebarHeight; 918 contentRect.size.height -= panel::kTitlebarHeight;
913 if (contentRect.size.height < 0) 919 if (contentRect.size.height < 0)
914 contentRect.size.height = 0; 920 contentRect.size.height = 0;
915 return contentRect; 921 return contentRect;
916 } 922 }
917 923
918 @end 924 @end
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698