Correctly set window icon from ICO
This commit is contained in:
parent
ea2807c890
commit
d26480b74e
6 changed files with 34 additions and 13 deletions
|
@ -9,6 +9,7 @@
|
||||||
#include "atom/browser/api/atom_api_web_contents.h"
|
#include "atom/browser/api/atom_api_web_contents.h"
|
||||||
#include "atom/browser/browser.h"
|
#include "atom/browser/browser.h"
|
||||||
#include "atom/browser/native_window.h"
|
#include "atom/browser/native_window.h"
|
||||||
|
#include "atom/common/api/atom_api_native_image.h"
|
||||||
#include "atom/common/native_mate_converters/callback.h"
|
#include "atom/common/native_mate_converters/callback.h"
|
||||||
#include "atom/common/native_mate_converters/gfx_converter.h"
|
#include "atom/common/native_mate_converters/gfx_converter.h"
|
||||||
#include "atom/common/native_mate_converters/gurl_converter.h"
|
#include "atom/common/native_mate_converters/gurl_converter.h"
|
||||||
|
@ -99,6 +100,15 @@ Window::Window(v8::Isolate* isolate, const mate::Dictionary& options) {
|
||||||
window_->InitFromOptions(options);
|
window_->InitFromOptions(options);
|
||||||
window_->AddObserver(this);
|
window_->AddObserver(this);
|
||||||
AttachAsUserData(window_.get());
|
AttachAsUserData(window_.get());
|
||||||
|
|
||||||
|
#if defined(OS_WIN)
|
||||||
|
// Sets the window icon.
|
||||||
|
mate::Handle<NativeImage> icon;
|
||||||
|
if (options.Get(options::kIcon, &icon) && !icon.IsEmpty()) {
|
||||||
|
static_cast<NativeWindowViews*>(window_.get())->SetIcon(
|
||||||
|
icon->GetHICON(GetSystemMetrics(SM_CXSMICON)), icon->GetHICON(256));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
Window::~Window() {
|
Window::~Window() {
|
||||||
|
|
|
@ -65,9 +65,6 @@ NativeWindow::NativeWindow(
|
||||||
// mode.
|
// mode.
|
||||||
ui::GpuSwitchingManager::SetTransparent(transparent_);
|
ui::GpuSwitchingManager::SetTransparent(transparent_);
|
||||||
|
|
||||||
// Read icon before window is created.
|
|
||||||
options.Get(options::kIcon, &icon_);
|
|
||||||
|
|
||||||
WindowList::AddWindow(this);
|
WindowList::AddWindow(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -251,7 +251,6 @@ class NativeWindow : public base::SupportsUserData,
|
||||||
bool transparent() const { return transparent_; }
|
bool transparent() const { return transparent_; }
|
||||||
SkRegion* draggable_region() const { return draggable_region_.get(); }
|
SkRegion* draggable_region() const { return draggable_region_.get(); }
|
||||||
bool enable_larger_than_screen() const { return enable_larger_than_screen_; }
|
bool enable_larger_than_screen() const { return enable_larger_than_screen_; }
|
||||||
gfx::ImageSkia icon() const { return icon_; }
|
|
||||||
|
|
||||||
void set_has_dialog_attached(bool has_dialog_attached) {
|
void set_has_dialog_attached(bool has_dialog_attached) {
|
||||||
has_dialog_attached_ = has_dialog_attached;
|
has_dialog_attached_ = has_dialog_attached;
|
||||||
|
@ -307,9 +306,6 @@ class NativeWindow : public base::SupportsUserData,
|
||||||
// Whether window can be resized larger than screen.
|
// Whether window can be resized larger than screen.
|
||||||
bool enable_larger_than_screen_;
|
bool enable_larger_than_screen_;
|
||||||
|
|
||||||
// Window icon.
|
|
||||||
gfx::ImageSkia icon_;
|
|
||||||
|
|
||||||
// The windows has been closed.
|
// The windows has been closed.
|
||||||
bool is_closed_;
|
bool is_closed_;
|
||||||
|
|
||||||
|
|
|
@ -221,6 +221,10 @@ NativeWindowViews::NativeWindowViews(
|
||||||
std::string window_type;
|
std::string window_type;
|
||||||
if (options.Get(options::kType, &window_type))
|
if (options.Get(options::kType, &window_type))
|
||||||
SetWindowType(GetAcceleratedWidget(), window_type);
|
SetWindowType(GetAcceleratedWidget(), window_type);
|
||||||
|
|
||||||
|
// Set window icon.
|
||||||
|
options.Get(options::kIcon, &icon_);
|
||||||
|
window_->UpdateWindowIcon();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Add web view.
|
// Add web view.
|
||||||
|
@ -273,7 +277,6 @@ NativeWindowViews::NativeWindowViews(
|
||||||
use_content_size_)
|
use_content_size_)
|
||||||
size = ContentSizeToWindowSize(size);
|
size = ContentSizeToWindowSize(size);
|
||||||
|
|
||||||
window_->UpdateWindowIcon();
|
|
||||||
window_->CenterWindow(size);
|
window_->CenterWindow(size);
|
||||||
Layout();
|
Layout();
|
||||||
}
|
}
|
||||||
|
@ -842,13 +845,15 @@ bool NativeWindowViews::ShouldHandleSystemCommands() const {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(USE_X11)
|
||||||
gfx::ImageSkia NativeWindowViews::GetWindowAppIcon() {
|
gfx::ImageSkia NativeWindowViews::GetWindowAppIcon() {
|
||||||
return icon();
|
return icon_;
|
||||||
}
|
}
|
||||||
|
|
||||||
gfx::ImageSkia NativeWindowViews::GetWindowIcon() {
|
gfx::ImageSkia NativeWindowViews::GetWindowIcon() {
|
||||||
return GetWindowAppIcon();
|
return GetWindowAppIcon();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
views::Widget* NativeWindowViews::GetWidget() {
|
views::Widget* NativeWindowViews::GetWidget() {
|
||||||
return window_.get();
|
return window_.get();
|
||||||
|
|
|
@ -104,12 +104,14 @@ class NativeWindowViews : public NativeWindow,
|
||||||
|
|
||||||
gfx::AcceleratedWidget GetAcceleratedWidget() override;
|
gfx::AcceleratedWidget GetAcceleratedWidget() override;
|
||||||
|
|
||||||
views::Widget* widget() const { return window_.get(); }
|
|
||||||
|
|
||||||
#if defined(OS_WIN)
|
#if defined(OS_WIN)
|
||||||
|
void SetIcon(HICON small_icon, HICON app_icon);
|
||||||
|
|
||||||
TaskbarHost& taskbar_host() { return taskbar_host_; }
|
TaskbarHost& taskbar_host() { return taskbar_host_; }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
views::Widget* widget() const { return window_.get(); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// views::WidgetObserver:
|
// views::WidgetObserver:
|
||||||
void OnWidgetActivationChanged(
|
void OnWidgetActivationChanged(
|
||||||
|
@ -125,8 +127,10 @@ class NativeWindowViews : public NativeWindow,
|
||||||
bool CanMinimize() const override;
|
bool CanMinimize() const override;
|
||||||
base::string16 GetWindowTitle() const override;
|
base::string16 GetWindowTitle() const override;
|
||||||
bool ShouldHandleSystemCommands() const override;
|
bool ShouldHandleSystemCommands() const override;
|
||||||
|
#if defined(USE_X11)
|
||||||
gfx::ImageSkia GetWindowAppIcon() override;
|
gfx::ImageSkia GetWindowAppIcon() override;
|
||||||
gfx::ImageSkia GetWindowIcon() override;
|
gfx::ImageSkia GetWindowIcon() override;
|
||||||
|
#endif
|
||||||
views::Widget* GetWidget() override;
|
views::Widget* GetWidget() override;
|
||||||
const views::Widget* GetWidget() const override;
|
const views::Widget* GetWidget() const override;
|
||||||
views::View* GetContentsView() override;
|
views::View* GetContentsView() override;
|
||||||
|
@ -145,7 +149,6 @@ class NativeWindowViews : public NativeWindow,
|
||||||
// MessageHandlerDelegate:
|
// MessageHandlerDelegate:
|
||||||
bool PreHandleMSG(
|
bool PreHandleMSG(
|
||||||
UINT message, WPARAM w_param, LPARAM l_param, LRESULT* result) override;
|
UINT message, WPARAM w_param, LPARAM l_param, LRESULT* result) override;
|
||||||
|
|
||||||
void HandleSizeEvent(WPARAM w_param, LPARAM l_param);
|
void HandleSizeEvent(WPARAM w_param, LPARAM l_param);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -185,6 +188,9 @@ class NativeWindowViews : public NativeWindow,
|
||||||
// we need to make sure size constraints are restored when window becomes
|
// we need to make sure size constraints are restored when window becomes
|
||||||
// resizable again.
|
// resizable again.
|
||||||
extensions::SizeConstraints old_size_constraints_;
|
extensions::SizeConstraints old_size_constraints_;
|
||||||
|
|
||||||
|
// Window icon.
|
||||||
|
gfx::ImageSkia icon_;
|
||||||
#elif defined(OS_WIN)
|
#elif defined(OS_WIN)
|
||||||
// Weak ref.
|
// Weak ref.
|
||||||
AtomDesktopWindowTreeHostWin* atom_desktop_window_tree_host_win_;
|
AtomDesktopWindowTreeHostWin* atom_desktop_window_tree_host_win_;
|
||||||
|
@ -202,7 +208,6 @@ class NativeWindowViews : public NativeWindow,
|
||||||
|
|
||||||
// If true we have enabled a11y
|
// If true we have enabled a11y
|
||||||
bool enabled_a11y_support_;
|
bool enabled_a11y_support_;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Handles unhandled keyboard messages coming back from the renderer process.
|
// Handles unhandled keyboard messages coming back from the renderer process.
|
||||||
|
|
|
@ -73,6 +73,14 @@ const char* AppCommandToString(int command_id) {
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
void NativeWindowViews::SetIcon(HICON small_icon, HICON app_icon) {
|
||||||
|
HWND hwnd = GetAcceleratedWidget();
|
||||||
|
SendMessage(hwnd, WM_SETICON, ICON_SMALL,
|
||||||
|
reinterpret_cast<LPARAM>(small_icon));
|
||||||
|
SendMessage(hwnd, WM_SETICON, ICON_BIG,
|
||||||
|
reinterpret_cast<LPARAM>(app_icon));
|
||||||
|
}
|
||||||
|
|
||||||
bool NativeWindowViews::ExecuteWindowsCommand(int command_id) {
|
bool NativeWindowViews::ExecuteWindowsCommand(int command_id) {
|
||||||
std::string command = AppCommandToString(command_id);
|
std::string command = AppCommandToString(command_id);
|
||||||
NotifyWindowExecuteWindowsCommand(command);
|
NotifyWindowExecuteWindowsCommand(command);
|
||||||
|
|
Loading…
Reference in a new issue