| OLD | NEW |
| 1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2009 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/first_run.h" | 5 #include "chrome/browser/first_run.h" |
| 6 | 6 |
| 7 #include <windows.h> | 7 #include <windows.h> |
| 8 #include <shellapi.h> | 8 #include <shellapi.h> |
| 9 #include <shlobj.h> | 9 #include <shlobj.h> |
| 10 | 10 |
| (...skipping 817 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 828 // Fifth row views. | 828 // Fifth row views. |
| 829 layout->StartRowWithPadding(0, 4, 0, 10); | 829 layout->StartRowWithPadding(0, 4, 0, 10); |
| 830 views::Link* link = new views::Link(why_this); | 830 views::Link* link = new views::Link(why_this); |
| 831 link->SetController(this); | 831 link->SetController(this); |
| 832 layout->AddView(link); | 832 layout->AddView(link); |
| 833 | 833 |
| 834 // We resize the window according to the layout manager. This takes into | 834 // We resize the window according to the layout manager. This takes into |
| 835 // account the differences between XP and Vista fonts and buttons. | 835 // account the differences between XP and Vista fonts and buttons. |
| 836 layout->Layout(root_view); | 836 layout->Layout(root_view); |
| 837 gfx::Size preferred = layout->GetPreferredSize(root_view); | 837 gfx::Size preferred = layout->GetPreferredSize(root_view); |
| 838 pos = ComputeWindowPosition(preferred.width(), preferred.height()); | 838 pos = ComputeWindowPosition(preferred.width(), |
| 839 preferred.height(), |
| 840 root_view->UILayoutIsRightToLeft()); |
| 839 popup->SetBounds(pos); | 841 popup->SetBounds(pos); |
| 840 | 842 |
| 841 // Carve the toast shape into the window. | 843 // Carve the toast shape into the window. |
| 842 SetToastRegion(popup->GetNativeView(), | 844 SetToastRegion(popup->GetNativeView(), |
| 843 preferred.width(), preferred.height()); | 845 preferred.width(), preferred.height()); |
| 844 // Time to show the window in a modal loop. | 846 // Time to show the window in a modal loop. |
| 845 popup_ = popup; | 847 popup_ = popup; |
| 846 popup_->Show(); | 848 popup_->Show(); |
| 847 MessageLoop::current()->Run(); | 849 MessageLoop::current()->Run(); |
| 848 return result_; | 850 return result_; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 877 | 879 |
| 878 private: | 880 private: |
| 879 enum ButtonTags { | 881 enum ButtonTags { |
| 880 BT_NONE, | 882 BT_NONE, |
| 881 BT_CLOSE_BUTTON, | 883 BT_CLOSE_BUTTON, |
| 882 BT_OK_BUTTON, | 884 BT_OK_BUTTON, |
| 883 }; | 885 }; |
| 884 | 886 |
| 885 // Returns a screen rectangle that is fit to show the window. In particular | 887 // Returns a screen rectangle that is fit to show the window. In particular |
| 886 // it has the following properties: a) is visible and b) is attached to | 888 // it has the following properties: a) is visible and b) is attached to |
| 887 // the bottom of the working area. | 889 // the bottom of the working area. For LTR machines it returns a left side |
| 888 gfx::Rect ComputeWindowPosition(int width, int height) { | 890 // rectangle and for RTL it returns a right side rectangle so that the |
| 891 // dialog does not compete with the standar place of the start menu. |
| 892 gfx::Rect ComputeWindowPosition(int width, int height, bool is_RTL) { |
| 889 // The 'Shell_TrayWnd' is the taskbar. We like to show our window in that | 893 // The 'Shell_TrayWnd' is the taskbar. We like to show our window in that |
| 890 // monitor if we can. This code works even if such window is not found. | 894 // monitor if we can. This code works even if such window is not found. |
| 891 HWND taskbar = ::FindWindowW(L"Shell_TrayWnd", NULL); | 895 HWND taskbar = ::FindWindowW(L"Shell_TrayWnd", NULL); |
| 892 HMONITOR monitor = | 896 HMONITOR monitor = |
| 893 ::MonitorFromWindow(taskbar, MONITOR_DEFAULTTOPRIMARY); | 897 ::MonitorFromWindow(taskbar, MONITOR_DEFAULTTOPRIMARY); |
| 894 MONITORINFO info = {sizeof(info)}; | 898 MONITORINFO info = {sizeof(info)}; |
| 895 if (!GetMonitorInfoW(monitor, &info)) { | 899 if (!GetMonitorInfoW(monitor, &info)) { |
| 896 // Quite unexpected. Do a best guess at a visible rectangle. | 900 // Quite unexpected. Do a best guess at a visible rectangle. |
| 897 return gfx::Rect(20, 20, width + 20, height + 20); | 901 return gfx::Rect(20, 20, width + 20, height + 20); |
| 898 } | 902 } |
| 899 // The |rcWork| is the work area. It should account for the taskbars that | 903 // The |rcWork| is the work area. It should account for the taskbars that |
| 900 // are in the screen when we called the function. | 904 // are in the screen when we called the function. |
| 901 int left = info.rcWork.right - width; | 905 int left = is_RTL ? info.rcWork.left : info.rcWork.right - width; |
| 902 int top = info.rcWork.bottom - height; | 906 int top = info.rcWork.bottom - height; |
| 903 return gfx::Rect(left, top, width, height); | 907 return gfx::Rect(left, top, width, height); |
| 904 } | 908 } |
| 905 | 909 |
| 906 // Create a windows region that looks like a toast of width |w| and | 910 // Create a windows region that looks like a toast of width |w| and |
| 907 // height |h|. This is best effort, so we don't care much if the operation | 911 // height |h|. This is best effort, so we don't care much if the operation |
| 908 // fails. | 912 // fails. |
| 909 void SetToastRegion(HWND window, int w, int h) { | 913 void SetToastRegion(HWND window, int w, int h) { |
| 910 static const POINT polygon[] = { | 914 static const POINT polygon[] = { |
| 911 {0, 4}, {1, 2}, {2, 1}, {4, 0}, // Left side. | 915 {0, 4}, {1, 2}, {2, 1}, {4, 0}, // Left side. |
| (...skipping 16 matching lines...) Expand all Loading... |
| 928 | 932 |
| 929 DISALLOW_COPY_AND_ASSIGN(TryChromeDialog); | 933 DISALLOW_COPY_AND_ASSIGN(TryChromeDialog); |
| 930 }; | 934 }; |
| 931 | 935 |
| 932 } // namespace | 936 } // namespace |
| 933 | 937 |
| 934 Upgrade::TryResult Upgrade::ShowTryChromeDialog(size_t version) { | 938 Upgrade::TryResult Upgrade::ShowTryChromeDialog(size_t version) { |
| 935 TryChromeDialog td; | 939 TryChromeDialog td; |
| 936 return td.ShowModal(); | 940 return td.ShowModal(); |
| 937 } | 941 } |
| OLD | NEW |