Boscop / web-view

Rust bindings for webview, a tiny cross-platform library to render web-based GUIs for desktop applications
MIT License
1.93k stars 176 forks source link

Suggestion: Ability to add a top left/tab icon #23

Open eedahl opened 6 years ago

eedahl commented 6 years ago

Following your suggestion I've added an icon to my exe file. It would be nice to also be able to add a top left/tab icon, but at least the naive approach of adding <link rel="icon" src="app-icon.png"> doesn't work. (In fact I can't seem to use local/folder paths at all).

Boscop commented 6 years ago

You mean the icon that appears in the title bar and task bar?

Doesn't it use the exe icon for that?

eedahl commented 6 years ago

It uses the exe icon for the task bar, but not for the upper left hand side corner.

https://gyazo.com/5e00afd945c9d862d6734cb23686555e https://gyazo.com/ae15922cb6247b2ff3240ddcf1750796

Jonesey13 commented 4 years ago

For anyone trying to get this working, this was the change I made to pass the icon from the app to the window:

//webview_edge.cpp

   browser_window(msg_cb_t cb, const char* title, int width, int height, bool resizable)
        : m_cb(cb)
    {
        HINSTANCE hInstance = GetModuleHandle(nullptr);

        HWND currentWindow = GetActiveWindow();

        // "1" is the default icon resource name used by winres 
        HICON parentIcon = (HICON)LoadImage(
            hInstance, 
            MAKEINTRESOURCE(1), 
            IMAGE_ICON, 
            0, 
            0,
            LR_DEFAULTSIZE
        );

        WNDCLASSEX wc;
        ZeroMemory(&wc, sizeof(WNDCLASSEX));
        wc.cbSize = sizeof(WNDCLASSEX);
        wc.hInstance = hInstance;
        wc.lpfnWndProc = WebviewWndProc;
        wc.lpszClassName = L"webview";
        wc.hIcon = parentIcon; // add the icon here
        RegisterClassEx(&wc);

This is my rust build script:

\\build.rs
use winres;

fn main() {
    let mut res = winres::WindowsResource::new();
    res.set_icon("Micro.ico");
    res.compile().unwrap();
}

I can't think of an easy way to locate the icon used by the taskbar (and so have had to refer to the icon resource by name).

One possibility would be to agree upon a default resource name to be used for the window icon (rather than just 1!). winres supports setting the resource id so this wouldn't cause issues for Rust users.