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

Side by Side Diff: chrome/browser/ui/views/frame/browser_frame_win.cc

Issue 10596005: On Windows 8 when a metro application is snapped running desktop application windows are resized as (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 6 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 | « chrome/browser/ui/views/frame/browser_frame_win.h ('k') | 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/views/frame/browser_frame_win.h" 5 #include "chrome/browser/ui/views/frame/browser_frame_win.h"
6 6
7 #include <dwmapi.h> 7 #include <dwmapi.h>
8 #include <shellapi.h> 8 #include <shellapi.h>
9
10 #include <set> 9 #include <set>
11 10
12 #include "base/command_line.h" 11 #include "base/command_line.h"
13 #include "base/utf_string_conversions.h" 12 #include "base/utf_string_conversions.h"
14 #include "base/win/metro.h" 13 #include "base/win/metro.h"
15 #include "chrome/app/chrome_command_ids.h" 14 #include "chrome/app/chrome_command_ids.h"
16 #include "chrome/browser/lifetime/application_lifetime.h" 15 #include "chrome/browser/lifetime/application_lifetime.h"
17 #include "chrome/browser/search_engines/template_url.h" 16 #include "chrome/browser/search_engines/template_url.h"
18 #include "chrome/browser/search_engines/template_url_service.h" 17 #include "chrome/browser/search_engines/template_url_service.h"
19 #include "chrome/browser/search_engines/template_url_service_factory.h" 18 #include "chrome/browser/search_engines/template_url_service_factory.h"
20 #include "chrome/browser/ui/toolbar/wrench_menu_model.h" 19 #include "chrome/browser/ui/toolbar/wrench_menu_model.h"
21 #include "chrome/browser/ui/views/frame/browser_view.h" 20 #include "chrome/browser/ui/views/frame/browser_view.h"
22 #include "chrome/browser/ui/views/frame/system_menu_model.h" 21 #include "chrome/browser/ui/views/frame/system_menu_model.h"
23 #include "chrome/browser/ui/views/frame/system_menu_model_delegate.h" 22 #include "chrome/browser/ui/views/frame/system_menu_model_delegate.h"
24 #include "chrome/browser/ui/views/tabs/tab_strip.h" 23 #include "chrome/browser/ui/views/tabs/tab_strip.h"
25 #include "chrome/common/chrome_constants.h" 24 #include "chrome/common/chrome_constants.h"
26 #include "chrome/common/chrome_switches.h" 25 #include "chrome/common/chrome_switches.h"
27 #include "content/public/browser/browser_accessibility_state.h" 26 #include "content/public/browser/browser_accessibility_state.h"
28 #include "content/public/browser/page_navigator.h" 27 #include "content/public/browser/page_navigator.h"
29 #include "content/public/browser/web_contents.h" 28 #include "content/public/browser/web_contents.h"
30 #include "content/public/common/page_transition_types.h" 29 #include "content/public/common/page_transition_types.h"
31 #include "googleurl/src/gurl.h" 30 #include "googleurl/src/gurl.h"
32 #include "grit/generated_resources.h" 31 #include "grit/generated_resources.h"
33 #include "grit/theme_resources.h" 32 #include "grit/theme_resources.h"
33 #include "ui/base/l10n/l10n_util.h"
34 #include "ui/base/models/simple_menu_model.h" 34 #include "ui/base/models/simple_menu_model.h"
35 #include "ui/base/resource/resource_bundle.h" 35 #include "ui/base/resource/resource_bundle.h"
36 #include "ui/base/theme_provider.h" 36 #include "ui/base/theme_provider.h"
37 #include "ui/gfx/font.h" 37 #include "ui/gfx/font.h"
38 #include "ui/views/controls/menu/native_menu_win.h" 38 #include "ui/views/controls/menu/native_menu_win.h"
39 #include "ui/views/views_delegate.h" 39 #include "ui/views/views_delegate.h"
40 #include "ui/views/widget/native_widget_win.h" 40 #include "ui/views/widget/native_widget_win.h"
41 #include "ui/views/widget/widget.h" 41 #include "ui/views/widget/widget.h"
42 #include "ui/views/window/non_client_view.h" 42 #include "ui/views/window/non_client_view.h"
43 #include "webkit/glue/window_open_disposition.h" 43 #include "webkit/glue/window_open_disposition.h"
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 88
89 /////////////////////////////////////////////////////////////////////////////// 89 ///////////////////////////////////////////////////////////////////////////////
90 // BrowserFrameWin, public: 90 // BrowserFrameWin, public:
91 91
92 BrowserFrameWin::BrowserFrameWin(BrowserFrame* browser_frame, 92 BrowserFrameWin::BrowserFrameWin(BrowserFrame* browser_frame,
93 BrowserView* browser_view) 93 BrowserView* browser_view)
94 : views::NativeWidgetWin(browser_frame), 94 : views::NativeWidgetWin(browser_frame),
95 browser_view_(browser_view), 95 browser_view_(browser_view),
96 browser_frame_(browser_frame), 96 browser_frame_(browser_frame),
97 system_menu_delegate_(new SystemMenuModelDelegate(browser_view, 97 system_menu_delegate_(new SystemMenuModelDelegate(browser_view,
98 browser_view->browser())) { 98 browser_view->browser())),
99 cached_minimize_button_x_delta_(0) {
99 if (base::win::IsMetroProcess()) { 100 if (base::win::IsMetroProcess()) {
100 browser_view->SetWindowSwitcherButton( 101 browser_view->SetWindowSwitcherButton(
101 MakeWindowSwitcherButton(this, browser_view->IsOffTheRecord())); 102 MakeWindowSwitcherButton(this, browser_view->IsOffTheRecord()));
102 } 103 }
103 } 104 }
104 105
105 BrowserFrameWin::~BrowserFrameWin() { 106 BrowserFrameWin::~BrowserFrameWin() {
106 } 107 }
107 108
108 // static 109 // static
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 void BrowserFrameWin::ShowWithWindowState(ui::WindowShowState show_state) { 244 void BrowserFrameWin::ShowWithWindowState(ui::WindowShowState show_state) {
244 AdjustFrameForImmersiveMode(); 245 AdjustFrameForImmersiveMode();
245 views::NativeWidgetWin::ShowWithWindowState(show_state); 246 views::NativeWidgetWin::ShowWithWindowState(show_state);
246 } 247 }
247 248
248 void BrowserFrameWin::Close() { 249 void BrowserFrameWin::Close() {
249 CloseImmersiveFrame(); 250 CloseImmersiveFrame();
250 views::NativeWidgetWin::Close(); 251 views::NativeWidgetWin::Close();
251 } 252 }
252 253
254 void BrowserFrameWin::OnActivate(UINT action, BOOL minimized, HWND window) {
255 if (action != WA_INACTIVE)
256 CacheMinimizeButtonDelta();
257 views::NativeWidgetWin::OnActivate(action, minimized, window);
258 }
259
253 //////////////////////////////////////////////////////////////////////////////// 260 ////////////////////////////////////////////////////////////////////////////////
254 // BrowserFrameWin, NativeBrowserFrame implementation: 261 // BrowserFrameWin, NativeBrowserFrame implementation:
255 262
256 views::NativeWidget* BrowserFrameWin::AsNativeWidget() { 263 views::NativeWidget* BrowserFrameWin::AsNativeWidget() {
257 return this; 264 return this;
258 } 265 }
259 266
260 const views::NativeWidget* BrowserFrameWin::AsNativeWidget() const { 267 const views::NativeWidget* BrowserFrameWin::AsNativeWidget() const {
261 return this; 268 return this;
262 } 269 }
263 270
264 void BrowserFrameWin::InitSystemContextMenu() { 271 void BrowserFrameWin::InitSystemContextMenu() {
265 system_menu_contents_.reset(new SystemMenuModel(system_menu_delegate_.get())); 272 system_menu_contents_.reset(new SystemMenuModel(system_menu_delegate_.get()));
266 // We add the menu items in reverse order so that insertion_index never needs 273 // We add the menu items in reverse order so that insertion_index never needs
267 // to change. 274 // to change.
268 if (browser_view_->IsBrowserTypeNormal()) 275 if (browser_view_->IsBrowserTypeNormal())
269 BuildSystemMenuForBrowserWindow(); 276 BuildSystemMenuForBrowserWindow();
270 else 277 else
271 BuildSystemMenuForAppOrPopupWindow(); 278 BuildSystemMenuForAppOrPopupWindow();
272 system_menu_.reset( 279 system_menu_.reset(
273 new views::NativeMenuWin(system_menu_contents_.get(), GetNativeWindow())); 280 new views::NativeMenuWin(system_menu_contents_.get(), GetNativeWindow()));
274 system_menu_->Rebuild(); 281 system_menu_->Rebuild();
275 } 282 }
276 283
277 int BrowserFrameWin::GetMinimizeButtonOffset() const { 284 int BrowserFrameWin::GetMinimizeButtonOffset() const {
278 TITLEBARINFOEX titlebar_info; 285 // The WM_GETTITLEBARINFOEX message can fail if we are not active/visible.
286 TITLEBARINFOEX titlebar_info = {0};
279 titlebar_info.cbSize = sizeof(TITLEBARINFOEX); 287 titlebar_info.cbSize = sizeof(TITLEBARINFOEX);
280 SendMessage(GetNativeView(), WM_GETTITLEBARINFOEX, 0, (WPARAM)&titlebar_info); 288 BOOL ret = SendMessage(GetNativeView(), WM_GETTITLEBARINFOEX, 0,
sky 2012/06/21 18:13:40 Remove 'ret' since as you said its always true ad
ananta 2012/06/21 18:27:46 Done.
289 reinterpret_cast<WPARAM>(&titlebar_info));
281 290
282 CPoint minimize_button_corner(titlebar_info.rgrect[2].left, 291 CPoint minimize_button_corner(titlebar_info.rgrect[2].left,
283 titlebar_info.rgrect[2].top); 292 titlebar_info.rgrect[2].top);
284 MapWindowPoints(HWND_DESKTOP, GetNativeView(), &minimize_button_corner, 1); 293 MapWindowPoints(HWND_DESKTOP, GetNativeView(), &minimize_button_corner, 1);
285 294
286 return minimize_button_corner.x; 295 if (minimize_button_corner.x)
296 return minimize_button_corner.x;
297
298 DCHECK(cached_minimize_button_x_delta_);
299
300 RECT client_rect = {0};
301 GetClientRect(&client_rect);
302
303 if (base::i18n::IsRTL())
304 return cached_minimize_button_x_delta_;
305 else
306 return client_rect.right - cached_minimize_button_x_delta_;
287 } 307 }
288 308
289 void BrowserFrameWin::TabStripDisplayModeChanged() { 309 void BrowserFrameWin::TabStripDisplayModeChanged() {
290 UpdateDWMFrame(); 310 UpdateDWMFrame();
291 } 311 }
292 312
293 void BrowserFrameWin::ButtonPressed(views::Button* sender, 313 void BrowserFrameWin::ButtonPressed(views::Button* sender,
294 const views::Event& event) { 314 const views::Event& event) {
295 HMODULE metro = base::win::GetMetroModule(); 315 HMODULE metro = base::win::GetMetroModule();
296 if (!metro) 316 if (!metro)
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
498 current_tab_info->title = base::win::LocalAllocAndCopyString( 518 current_tab_info->title = base::win::LocalAllocAndCopyString(
499 browser->GetWindowTitleForCurrentTab()); 519 browser->GetWindowTitleForCurrentTab());
500 520
501 WebContents* current_tab = browser->GetActiveWebContents(); 521 WebContents* current_tab = browser->GetActiveWebContents();
502 DCHECK(current_tab); 522 DCHECK(current_tab);
503 523
504 current_tab_info->url = base::win::LocalAllocAndCopyString( 524 current_tab_info->url = base::win::LocalAllocAndCopyString(
505 UTF8ToWide(current_tab->GetURL().spec())); 525 UTF8ToWide(current_tab->GetURL().spec()));
506 } 526 }
507 527
528 void BrowserFrameWin::CacheMinimizeButtonDelta() {
529 int minimize_offset = GetMinimizeButtonOffset();
sky 2012/06/21 18:13:40 The way you have the code now you're only going to
ananta 2012/06/21 18:27:46 Thanks for catching this. Isolated the WM_GETTITLE
530 if (!minimize_offset)
531 return;
532
533 RECT rect = {0};
534 GetClientRect(&rect);
535 // Calculate and cache the value of the minimize button delta, i.e. the
536 // offset to be applied to the left or right edge of the client rect
537 // depending on whether the language is RTL or not.
538 // This cached value is only used if the WM_GETTITLEBARINFOEX message fails
539 // to get the offset of the minimize button.
540 if (base::i18n::IsRTL())
541 cached_minimize_button_x_delta_ = minimize_offset;
542 else
543 cached_minimize_button_x_delta_ = rect.right - minimize_offset;
544 }
508 545
509 //////////////////////////////////////////////////////////////////////////////// 546 ////////////////////////////////////////////////////////////////////////////////
510 // BrowserFrame, public: 547 // BrowserFrame, public:
511 548
512 // static 549 // static
513 const gfx::Font& BrowserFrame::GetTitleFont() { 550 const gfx::Font& BrowserFrame::GetTitleFont() {
514 static gfx::Font* title_font = 551 static gfx::Font* title_font =
515 new gfx::Font(views::NativeWidgetWin::GetWindowTitleFont()); 552 new gfx::Font(views::NativeWidgetWin::GetWindowTitleFont());
516 return *title_font; 553 return *title_font;
517 } 554 }
518 555
519 //////////////////////////////////////////////////////////////////////////////// 556 ////////////////////////////////////////////////////////////////////////////////
520 // NativeBrowserFrame, public: 557 // NativeBrowserFrame, public:
521 558
522 // static 559 // static
523 NativeBrowserFrame* NativeBrowserFrame::CreateNativeBrowserFrame( 560 NativeBrowserFrame* NativeBrowserFrame::CreateNativeBrowserFrame(
524 BrowserFrame* browser_frame, 561 BrowserFrame* browser_frame,
525 BrowserView* browser_view) { 562 BrowserView* browser_view) {
526 return new BrowserFrameWin(browser_frame, browser_view); 563 return new BrowserFrameWin(browser_frame, browser_view);
527 } 564 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/frame/browser_frame_win.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698