Patchwork ui/gtk: Set QEMU window icon

login
register
mail settings
Submitter Stefan Weil
Date March 30, 2013, 2:21 p.m.
Message ID <1364653300-26813-1-git-send-email-sw@weilnetz.de>
Download mbox | patch
Permalink /patch/232522/
State Accepted
Headers show

Comments

Stefan Weil - March 30, 2013, 2:21 p.m.
The QEMU icon which is already used for SDL
is now also loaded by GTK.

Signed-off-by: Stefan Weil <sw@weilnetz.de>
---
 ui/gtk.c |   13 +++++++++++++
 1 file changed, 13 insertions(+)
Anthony Liguori - April 2, 2013, 8:21 p.m.
Applied.  Thanks.

Regards,

Anthony Liguori
Jan Kiszka - April 10, 2013, 11:48 a.m.
On 2013-03-30 15:21, Stefan Weil wrote:
> The QEMU icon which is already used for SDL
> is now also loaded by GTK.
> 
> Signed-off-by: Stefan Weil <sw@weilnetz.de>
> ---
>  ui/gtk.c |   13 +++++++++++++
>  1 file changed, 13 insertions(+)
> 
> diff --git a/ui/gtk.c b/ui/gtk.c
> index a5a8156..c15023b 100644
> --- a/ui/gtk.c
> +++ b/ui/gtk.c
> @@ -1363,6 +1363,7 @@ static const DisplayChangeListenerOps dcl_ops = {
>  void gtk_display_init(DisplayState *ds)
>  {
>      GtkDisplayState *s = g_malloc0(sizeof(*s));
> +    char *filename;
>  
>      gtk_init(NULL, NULL);
>  
> @@ -1394,6 +1395,18 @@ void gtk_display_init(DisplayState *ds)
>  
>      gtk_notebook_append_page(GTK_NOTEBOOK(s->notebook), s->drawing_area, gtk_label_new("VGA"));
>  
> +    filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, "qemu-icon.bmp");
> +    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);
> +    }
> +
>      gd_create_menus(s);
>  
>      gd_connect_signals(s);
> 

With gtk 2.22 I'm lacking transparency of that icon (it has a white
background). The icon is fine with SDL. Is that an issue of this
particular gtk version or actually a general problem with
gdk_pixbuf_new_from_file?

Jan
Stefan Weil - April 11, 2013, 7:46 p.m.
Am 10.04.2013 13:48, schrieb Jan Kiszka:
> On 2013-03-30 15:21, Stefan Weil wrote:
>> The QEMU icon which is already used for SDL
>> is now also loaded by GTK.
>>
>> Signed-off-by: Stefan Weil<sw@weilnetz.de>
>> ---
>>   ui/gtk.c |   13 +++++++++++++
>>   1 file changed, 13 insertions(+)
>>
>> diff --git a/ui/gtk.c b/ui/gtk.c
>> index a5a8156..c15023b 100644
>> --- a/ui/gtk.c
>> +++ b/ui/gtk.c
>> @@ -1363,6 +1363,7 @@ static const DisplayChangeListenerOps dcl_ops = {
>>   void gtk_display_init(DisplayState *ds)
>>   {
>>       GtkDisplayState *s = g_malloc0(sizeof(*s));
>> +    char *filename;
>>
>>       gtk_init(NULL, NULL);
>>
>> @@ -1394,6 +1395,18 @@ void gtk_display_init(DisplayState *ds)
>>
>>       gtk_notebook_append_page(GTK_NOTEBOOK(s->notebook), s->drawing_area, gtk_label_new("VGA"));
>>
>> +    filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, "qemu-icon.bmp");
>> +    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);
>> +    }
>> +
>>       gd_create_menus(s);
>>
>>       gd_connect_signals(s);
>>
>
> With gtk 2.22 I'm lacking transparency of that icon (it has a white
> background). The icon is fine with SDL. Is that an issue of this
> particular gtk version or actually a general problem with
> gdk_pixbuf_new_from_file?
>
> Jan

I'm afraid that you won't get a transparent background as long
as the image format does not support transparency.

SDL only accepts BMP files and obviously translates the white background
to a transparent one.

I could have added a PNG icon for gtk, but did not do so because I
thought that the BMP file looked sufficiently good (better than the
default icon on my Debian hosts). There could be a GUI option
which allows setting an arbitrary icon file. It would allow users
to choose icons with transparency for gtk and also different icons
for multiple QEMU instances.

Stefan

PS. Try the appended qemu-icon.bmp. It won't work with SDL, but show
the desired result with gtk because it is not a BMP file, but a PNG
file with transparent background.
Jan Kiszka - April 12, 2013, 6:55 a.m.
On 2013-04-11 21:46, Stefan Weil wrote:
> Am 10.04.2013 13:48, schrieb Jan Kiszka:
>> On 2013-03-30 15:21, Stefan Weil wrote:
>>> The QEMU icon which is already used for SDL
>>> is now also loaded by GTK.
>>>
>>> Signed-off-by: Stefan Weil<sw@weilnetz.de>
>>> ---
>>>   ui/gtk.c |   13 +++++++++++++
>>>   1 file changed, 13 insertions(+)
>>>
>>> diff --git a/ui/gtk.c b/ui/gtk.c
>>> index a5a8156..c15023b 100644
>>> --- a/ui/gtk.c
>>> +++ b/ui/gtk.c
>>> @@ -1363,6 +1363,7 @@ static const DisplayChangeListenerOps dcl_ops = {
>>>   void gtk_display_init(DisplayState *ds)
>>>   {
>>>       GtkDisplayState *s = g_malloc0(sizeof(*s));
>>> +    char *filename;
>>>
>>>       gtk_init(NULL, NULL);
>>>
>>> @@ -1394,6 +1395,18 @@ void gtk_display_init(DisplayState *ds)
>>>
>>>       gtk_notebook_append_page(GTK_NOTEBOOK(s->notebook),
>>> s->drawing_area, gtk_label_new("VGA"));
>>>
>>> +    filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, "qemu-icon.bmp");
>>> +    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);
>>> +    }
>>> +
>>>       gd_create_menus(s);
>>>
>>>       gd_connect_signals(s);
>>>
>>
>> With gtk 2.22 I'm lacking transparency of that icon (it has a white
>> background). The icon is fine with SDL. Is that an issue of this
>> particular gtk version or actually a general problem with
>> gdk_pixbuf_new_from_file?
>>
>> Jan
> 
> I'm afraid that you won't get a transparent background as long
> as the image format does not support transparency.
> 
> SDL only accepts BMP files and obviously translates the white background
> to a transparent one.
> 
> I could have added a PNG icon for gtk, but did not do so because I
> thought that the BMP file looked sufficiently good (better than the
> default icon on my Debian hosts). There could be a GUI option
> which allows setting an arbitrary icon file. It would allow users
> to choose icons with transparency for gtk and also different icons
> for multiple QEMU instances.
> 
> Stefan
> 
> PS. Try the appended qemu-icon.bmp. It won't work with SDL, but show
> the desired result with gtk because it is not a BMP file, but a PNG
> file with transparent background.

Then why not use separate icons for both UIs (until SDL is removed)?

Jan

Patch

diff --git a/ui/gtk.c b/ui/gtk.c
index a5a8156..c15023b 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -1363,6 +1363,7 @@  static const DisplayChangeListenerOps dcl_ops = {
 void gtk_display_init(DisplayState *ds)
 {
     GtkDisplayState *s = g_malloc0(sizeof(*s));
+    char *filename;
 
     gtk_init(NULL, NULL);
 
@@ -1394,6 +1395,18 @@  void gtk_display_init(DisplayState *ds)
 
     gtk_notebook_append_page(GTK_NOTEBOOK(s->notebook), s->drawing_area, gtk_label_new("VGA"));
 
+    filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, "qemu-icon.bmp");
+    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);
+    }
+
     gd_create_menus(s);
 
     gd_connect_signals(s);