[virt-tools-list] [PATCH virt-manager] Do not use deprecated gdk_cursor_new
Cole Robinson
crobinso at redhat.com
Wed May 3 17:39:12 UTC 2017
On 05/03/2017 10:50 AM, Pavel Grunt wrote:
> On Wed, 2017-05-03 at 10:31 -0400, Cole Robinson wrote:
>> On 05/03/2017 05:09 AM, Pavel Grunt wrote:
>>> It relies on the presence of X cursor fonts in the system. Use
>>> recommended gdk_cursor_new_from_name and use cursor names that
>>> works
>>> on different backends.
>>>
>>> Deprecated since Gdk 3.16
>>>
>>> https://bugzilla.redhat.com/show_bug.cgi?id=1442612
>>> ---
>>> virtManager/asyncjob.py | 5 +++--
>>> virtManager/baseclass.py | 12 +++++++-----
>>> 2 files changed, 10 insertions(+), 7 deletions(-)
>>>
>>> diff --git a/virtManager/asyncjob.py b/virtManager/asyncjob.py
>>> index 0fd3beed..cbc872c4 100644
>>> --- a/virtManager/asyncjob.py
>>> +++ b/virtManager/asyncjob.py
>>> @@ -286,8 +286,9 @@ class vmmAsyncJob(vmmGObjectUI):
>>> self.topwin.present()
>>>
>>> if not self.cancel_cb and self.show_progress:
>>> - self.topwin.get_window().set_cursor(
>>> - Gdk.Cursor.new(Gdk.CursorType.WATCH))
>>> + gdk_window = self.topwin.get_window()
>>> + gdk_window.set_cursor(
>>> + Gdk.Cursor.new_from_name(gdk_window.get_display()
>>> , "progress"))
>>> self._bg_thread.start()
>>>
>>>
>>> diff --git a/virtManager/baseclass.py b/virtManager/baseclass.py
>>> index 7f3b7592..73b87fa7 100644
>>> --- a/virtManager/baseclass.py
>>> +++ b/virtManager/baseclass.py
>>> @@ -241,15 +241,17 @@ class vmmGObjectUI(vmmGObject):
>>>
>>> def set_finish_cursor(self):
>>> self.topwin.set_sensitive(False)
>>> - cursor = Gdk.Cursor.new(Gdk.CursorType.WATCH)
>>> - self.topwin.get_window().set_cursor(cursor>
>>> + gdk_window = self.topwin.get_window()
>>> + cursor =
>>> Gdk.Cursor.new_from_name(gdk_window.get_display(), "progress")
>>> + gdk_window.set_cursor(cursor)
>>>
>>> def reset_finish_cursor(self, topwin=None):
>>> if not topwin:
>>> topwin = self.topwin
>>>
>>> topwin.set_sensitive(True)
>>> - if not topwin.get_window():
>>> + gdk_window = topwin.get_window()
>>> + if not gdk_window:
>>> return
>>> - cursor = Gdk.Cursor.new(Gdk.CursorType.TOP_LEFT_ARROW)
>>> - topwin.get_window().set_cursor(cursor)
>>> + cursor =
>>> Gdk.Cursor.new_from_name(gdk_window.get_display(), "default")
>>> + gdk_window.set_cursor(cursor)
>>>
>>
>>
>> Does using Gdk.Cursor.new_from_display() fix the issue as well?
>
> no, the same issue. If the cursor id is not available than it will
> crash
>
>> That way we
>> can still use the CursorType value, rather than hardcoded strings
> what is the benefit of using hardcoded cursor types instead of strings
> which are defined in all the platforms :)?
>
> https://developer.gnome.org/gdk3/stable/gdk3-Cursors.html#GdkCursorTyp
> e
>
>
>>
>> Also is there an easy way to reproduce that bug?
> remove/rename the cursor - the theme is stored in /usr/share/icons/
>
>> I couldn't hit it with stock
>> config
>>
> I think the real bug is in the gdk bindings - per docs it is allowed
> to return NULL from the constructor if the cursor type/name does not
> exist - "Returns a new GdkCursor, or NULL if there is no cursor with
> the given name. "
>
> https://developer.gnome.org/gdk3/stable/gdk3-Cursors.html#gdk-cursor-n
> ew-from-name
>
> Anyway I think it is better to try-catch than forcing users to switch
> their cursor theme :)
>
I just assumed CursorType vs string values were equivalent, thanks for
explaining things. I've pushed your patch now
Thanks,
Cole
More information about the virt-tools-list
mailing list