microsoft / vcpkg

C++ Library Manager for Windows, Linux, and MacOS
MIT License
22.29k stars 6.18k forks source link

Missing window button icons from the GTK+ application built using vcpkg environment #7827

Open kakyoism opened 4 years ago

kakyoism commented 4 years ago

Although I successfully built the GNOME official GTK+ example using vcpkg, the running application main window shows empty maximize/minimize/close buttons, with console output:

(hello_gtk.exe:1936): Gtk-WARNING **: Could not find the icon 'window-minimize-symbolic-ltr'. The 'hicolor' theme
was not found either, perhaps you need to install it.
You can get a copy from:
        http://icon-theme.freedesktop.org/releases

The window looks like this: gtk-empty-window-buttons

From a casual stackoverflow search, I noticed that most similar questions are about MSYS2, where installing an icon-set package or fixing the relative folder structure would solve the issue. But with vcpkg, I found that certain magic happens when building the app: All the dependency DLLs will be copied to the EXE folder. This makes it hard to understand what's going on with the relative paths.

Another problem is that it's unclear how to install any GNOME icon themes using vcpkg.

Any ideas how to fix this?

kakyoism commented 4 years ago

I worked around the problem by fixing the icons manually. The GTK doc was a big help.

However, having that 3-paragraph instruction for a manual hack is a shame. There should be a one-click fix in vcpkg, even if there were legal concerns.

Neumann-A commented 4 years ago

All the dependency DLLs will be copied to the EXE folder. This makes it hard to understand what's going on with the relative paths.

That has to do with where Windows searches for DLLs. You can toogle that feature by VCPKG_APPLOCAL_DEPS. If you deactivate it, dont forget to add the triplets/(debug/)bin folder to PATH variable or you will be greated with an error message when starting your application

I worked around the problem by fixing the icons manually.

did you need to install anything extra on top of gtk or did you just move folders around?

kakyoism commented 4 years ago

did you need to install anything extra on top of gtk or did you just move folders around?

Like I mentioned in my last message, I basically did what GTK doc says. To find out, you can click that inline link and jump to Section Building and distributing your application.

Neumann-A commented 4 years ago

hmm at least the old windows style should work correctly which could be considered a vcpkg issue. Installing other/additional themes or icons should be done by your cmake script and is not a vcpkg issue.

kakyoism commented 4 years ago

hmm at least the old windows style should work correctly which could be considered a vcpkg issue. Installing other/additional themes or icons should be done by your cmake script and is not a vcpkg issue.

Agreed. The default Windows theme should be available out of the box.

napoleonlijun commented 4 years ago

Have you fix this?

sam20908 commented 3 years ago

Looking forward for this to be fixed too. I had to redistribute a copy of the entire "share" folder in MSYS2 when installing the icons in there. It isn't convenient to redistribute such a big folder along with my application.

jrm86 commented 3 years ago

Having the same issue. The "GTK doc" linked above is a dead link.

Edit: Found the page, despite the dead link. Here it is. Some of the instructions there are really not specific enough. Is the stuff in Step 2 and Step 3 going into the share/themes/Windows10/gtk-3.0 directory, or do they get their own directory? This isn't clear by the statement "Perform the same steps" in Step 3. Where is share/glib-2.0/schemas coming from in Step 5? Should it already exist, or am I creating it? What is its contents?

In short, there's a lot of unstated assumptions being made and details left out of the instructions. For someone having zero experience with GTK, I'm left with a brute force "keep moving stuff around in the directories until it works" kind of approach.

I know I'm mostly commenting on the GTK documentation, but their poor documentation should be a good motivation to make installation easier here for Windows (or Microsoft can write a better alternative documentation for this issue).

sam20908 commented 3 years ago

It'd be cool if vcpkg can use their downloaded MSYS2 to download the icons and treat them "like DLLs" so they get copied to the right destination.

kakyoism commented 3 years ago

Having the same issue. The "GTK doc" linked above is a dead link.

Edit: Found the page, despite the dead link. Here it is. Some of the instructions there are really not specific enough. Is the stuff in Step 2 and Step 3 going into the share/themes/Windows10/gtk-3.0 directory, or do they get their own directory? This isn't clear by the statement "Perform the same steps" in Step 3. Where is share/glib-2.0/schemas coming from in Step 5? Should it already exist, or am I creating it? What is its contents?

In short, there's a lot of unstated assumptions being made and details left out of the instructions. For someone having zero experience with GTK, I'm left with a brute force "keep moving stuff around in the directories until it works" kind of approach.

I know I'm mostly commenting on the GTK documentation, but their poor documentation should be a good motivation to make installation easier here for Windows (or Microsoft can write a better alternative documentation for this issue).

Completely agreed. These are not hard problems but probably need traction to get the dev attention. Having such a visible problem would be a surprise to any newcomers and thus a bad PR.

Kristopher38 commented 3 years ago

I'm having a very similar issue, has anyone figured a fix for missing icons? Fixing the relative folder structure didn't help at all, I tried a few configurations but no luck, and as said previously the docs on this are awful. The only way I found to make it work is to run the application placed inside MSYS2 environment (i.e. your MSYS2 home directory) from the MSYS2 console itself, but I want to get rid of those requirements.

ghost commented 3 years ago

Here's a Windows 10-themed 32-bit GTK program I wrote that you can use to see how and if the styling works for you: https://github.com/procedural/magicacsg_copy_layers_program