]> git.ipfire.org Git - thirdparty/qemu.git/commitdiff
ui: install logo icons to $prefix/share/icons
authorDaniel P. Berrangé <berrange@redhat.com>
Thu, 10 Jan 2019 12:00:45 +0000 (12:00 +0000)
committerGerd Hoffmann <kraxel@redhat.com>
Mon, 21 Jan 2019 08:43:13 +0000 (09:43 +0100)
QEMU currently installs logos to $prefix/share/qemu/ which means no GUI
toolkit or applications can find them by default.

The accepted standards for desktop applications declare that application
logos / icons should be installed under $prefix/share/icons, so use this
directory location.

Pre-rendered icons are provided at the standard sizes expected for GUI
applications, along with the scalable SVG, to ensure maximum portability.

The PNGs are rendered from the SVG using inkscape, however, this is not
wired up into the default make rules to avoid requiring inkscape as a
mandatory tool in build systems / developer workstations.

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Message-id: 20190110120047.25369-2-berrange@redhat.com
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
16 files changed:
Makefile
configure
pc-bios/qemu-icon.bmp [deleted file]
ui/gtk.c
ui/icons/Makefile [new file with mode: 0644]
ui/icons/qemu.svg [moved from pc-bios/qemu_logo_no_text.svg with 100% similarity]
ui/icons/qemu_128x128.png [new file with mode: 0644]
ui/icons/qemu_16x16.png [new file with mode: 0644]
ui/icons/qemu_24x24.png [new file with mode: 0644]
ui/icons/qemu_256x256.png [new file with mode: 0644]
ui/icons/qemu_32x32.bmp [new file with mode: 0644]
ui/icons/qemu_32x32.png [new file with mode: 0644]
ui/icons/qemu_48x48.png [new file with mode: 0644]
ui/icons/qemu_512x512.png [new file with mode: 0644]
ui/icons/qemu_64x64.png [new file with mode: 0644]
ui/sdl2.c

index dccba1dca27ffe80be59ee7d8e2407a53bd1e422..e4218d11927a4f742d12ca1d6db8398dfa69cc78 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -667,7 +667,6 @@ pxe-pcnet.rom pxe-rtl8139.rom pxe-virtio.rom \
 efi-e1000.rom efi-eepro100.rom efi-ne2k_pci.rom \
 efi-pcnet.rom efi-rtl8139.rom efi-virtio.rom \
 efi-e1000e.rom efi-vmxnet3.rom \
-qemu-icon.bmp qemu_logo_no_text.svg \
 bamboo.dtb canyonlands.dtb petalogix-s3adsp1800.dtb petalogix-ml605.dtb \
 multiboot.bin linuxboot.bin linuxboot_dma.bin kvmvapic.bin \
 s390-ccw.img s390-netboot.img \
@@ -720,6 +719,7 @@ ifneq (,$(findstring qemu-ga,$(TOOLS)))
 endif
 endif
 
+ICON_SIZES=16x16 24x24 32x32 48x48 64x64 128x128 256x256 512x512
 
 install: all $(if $(BUILD_DOCS),install-doc) install-datadir install-localstatedir
 ifneq ($(TOOLS),)
@@ -741,6 +741,17 @@ ifneq ($(BLOBS),)
                $(INSTALL_DATA) $(SRC_PATH)/pc-bios/$$x "$(DESTDIR)$(qemu_datadir)"; \
        done
 endif
+       for s in $(ICON_SIZES); do \
+               mkdir -p "$(DESTDIR)/$(qemu_icondir)/hicolor/$${s}/apps"; \
+               $(INSTALL_DATA) $(SRC_PATH)/ui/icons/qemu_$${s}.png \
+                       "$(DESTDIR)/$(qemu_icondir)/hicolor/$${s}/apps/qemu.png"; \
+       done; \
+       mkdir -p "$(DESTDIR)/$(qemu_icondir)/hicolor/32x32/apps"; \
+       $(INSTALL_DATA) $(SRC_PATH)/ui/icons/qemu_32x32.bmp \
+               "$(DESTDIR)/$(qemu_icondir)/hicolor/32x32/apps/qemu.bmp"; \
+       mkdir -p "$(DESTDIR)/$(qemu_icondir)/hicolor/scalable/apps"; \
+       $(INSTALL_DATA) $(SRC_PATH)/ui/icons/qemu.svg \
+               "$(DESTDIR)/$(qemu_icondir)/hicolor/scalable/apps/qemu.svg"
 ifdef CONFIG_GTK
        $(MAKE) -C po $@
 endif
index 3eee3fcf70868670c750d46f4aa65f71d6585860..ce54cd2bdc0a716bb321ddb5cb49a8bb64f22b77 100755 (executable)
--- a/configure
+++ b/configure
@@ -5745,6 +5745,7 @@ qemu_confdir=$sysconfdir$confsuffix
 qemu_moddir=$libdir$confsuffix
 qemu_datadir=$datadir$confsuffix
 qemu_localedir="$datadir/locale"
+qemu_icondir="$datadir/icons"
 
 # We can only support ivshmem if we have eventfd
 if [ "$eventfd" = "yes" ]; then
@@ -6210,6 +6211,7 @@ if test "$mingw32" = "no" ; then
 fi
 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
+echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
 echo "GIT=$git" >> $config_host_mak
 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
diff --git a/pc-bios/qemu-icon.bmp b/pc-bios/qemu-icon.bmp
deleted file mode 100644 (file)
index 72d9a2f..0000000
Binary files a/pc-bios/qemu-icon.bmp and /dev/null differ
index 579990b8655f3f63d378bfcbfd818de0aa61245b..ec63befa16f0868922cffd61ed62c4a2deabdd8f 100644 (file)
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -2214,8 +2214,8 @@ static void gtk_display_init(DisplayState *ds, DisplayOptions *opts)
     VirtualConsole *vc;
 
     GtkDisplayState *s = g_malloc0(sizeof(*s));
-    char *filename;
     GdkDisplay *window_display;
+    GtkIconTheme *theme;
 
     if (!gtkinit) {
         fprintf(stderr, "gtk initialization failed\n");
@@ -2224,6 +2224,9 @@ static void gtk_display_init(DisplayState *ds, DisplayOptions *opts)
     assert(opts->type == DISPLAY_TYPE_GTK);
     s->opts = opts;
 
+    theme = gtk_icon_theme_get_default();
+    gtk_icon_theme_prepend_search_path(theme, CONFIG_QEMU_ICONDIR);
+
     s->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
     s->vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
     s->notebook = gtk_notebook_new();
@@ -2248,17 +2251,7 @@ static void gtk_display_init(DisplayState *ds, DisplayOptions *opts)
     qemu_add_mouse_mode_change_notifier(&s->mouse_mode_notifier);
     qemu_add_vm_change_state_handler(gd_change_runstate, s);
 
-    filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, "qemu_logo_no_text.svg");
-    if (filename) {
-        GError *error = NULL;
-        GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file(filename, &error);
-        if (pixbuf) {
-            gtk_window_set_icon(GTK_WINDOW(s->window), pixbuf);
-        } else {
-            g_error_free(error);
-        }
-        g_free(filename);
-    }
+    gtk_window_set_icon_name(GTK_WINDOW(s->window), "qemu");
 
     gd_create_menus(s);
 
diff --git a/ui/icons/Makefile b/ui/icons/Makefile
new file mode 100644 (file)
index 0000000..20bd64c
--- /dev/null
@@ -0,0 +1,13 @@
+
+# Regenerate bitmaps from the SVG using inkscape CLI export
+# and ImageMagick. Don't use ImageMagick for the initial
+# SVG conversion, since it merely calls inkscape, but uses
+# 96 DPI res resulting in poor quality output.
+
+regenerate:
+       for s in 16 24 32 48 64 128 256 512; \
+       do \
+           inkscape --without-gui --export-png=qemu_$${s}x$${s}.png \
+               --export-width=$$s --export-height=$$s qemu.svg ; \
+       done
+       convert qemu_32x32.png qemu_32x32.bmp
diff --git a/ui/icons/qemu_128x128.png b/ui/icons/qemu_128x128.png
new file mode 100644 (file)
index 0000000..9683180
Binary files /dev/null and b/ui/icons/qemu_128x128.png differ
diff --git a/ui/icons/qemu_16x16.png b/ui/icons/qemu_16x16.png
new file mode 100644 (file)
index 0000000..ff4f046
Binary files /dev/null and b/ui/icons/qemu_16x16.png differ
diff --git a/ui/icons/qemu_24x24.png b/ui/icons/qemu_24x24.png
new file mode 100644 (file)
index 0000000..f039c6e
Binary files /dev/null and b/ui/icons/qemu_24x24.png differ
diff --git a/ui/icons/qemu_256x256.png b/ui/icons/qemu_256x256.png
new file mode 100644 (file)
index 0000000..a39c0e3
Binary files /dev/null and b/ui/icons/qemu_256x256.png differ
diff --git a/ui/icons/qemu_32x32.bmp b/ui/icons/qemu_32x32.bmp
new file mode 100644 (file)
index 0000000..c0daa54
Binary files /dev/null and b/ui/icons/qemu_32x32.bmp differ
diff --git a/ui/icons/qemu_32x32.png b/ui/icons/qemu_32x32.png
new file mode 100644 (file)
index 0000000..b746096
Binary files /dev/null and b/ui/icons/qemu_32x32.png differ
diff --git a/ui/icons/qemu_48x48.png b/ui/icons/qemu_48x48.png
new file mode 100644 (file)
index 0000000..0672812
Binary files /dev/null and b/ui/icons/qemu_48x48.png differ
diff --git a/ui/icons/qemu_512x512.png b/ui/icons/qemu_512x512.png
new file mode 100644 (file)
index 0000000..86aaa63
Binary files /dev/null and b/ui/icons/qemu_512x512.png differ
diff --git a/ui/icons/qemu_64x64.png b/ui/icons/qemu_64x64.png
new file mode 100644 (file)
index 0000000..e00c8b4
Binary files /dev/null and b/ui/icons/qemu_64x64.png differ
index a10b6e3a08ca71a4a2701a44f0268711b415890c..4c0d5db473f496efbefc63da19a67ecc8005eaf7 100644 (file)
--- a/ui/sdl2.c
+++ b/ui/sdl2.c
@@ -762,7 +762,6 @@ static void sdl2_display_early_init(DisplayOptions *o)
 static void sdl2_display_init(DisplayState *ds, DisplayOptions *o)
 {
     uint8_t data = 0;
-    char *filename;
     int i;
     SDL_SysWMinfo info;
 
@@ -837,15 +836,12 @@ static void sdl2_display_init(DisplayState *ds, DisplayOptions *o)
     }
 
     /* Load a 32x32x4 image. White pixels are transparent. */
-    filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, "qemu-icon.bmp");
-    if (filename) {
-        SDL_Surface *image = SDL_LoadBMP(filename);
-        if (image) {
-            uint32_t colorkey = SDL_MapRGB(image->format, 255, 255, 255);
-            SDL_SetColorKey(image, SDL_TRUE, colorkey);
-            SDL_SetWindowIcon(sdl2_console[0].real_window, image);
-        }
-        g_free(filename);
+    SDL_Surface *image = SDL_LoadBMP(CONFIG_QEMU_ICONDIR
+                                     "/hicolor/32x32/apps/qemu.bmp");
+    if (image) {
+        uint32_t colorkey = SDL_MapRGB(image->format, 255, 255, 255);
+        SDL_SetColorKey(image, SDL_TRUE, colorkey);
+        SDL_SetWindowIcon(sdl2_console[0].real_window, image);
     }
 
     gui_grab = 0;