Hourglass always appearing when painting with wacom

When I use the wacom tablet at every stroke the round hourglass appears.
I have set the time between backups to 60 seconds but I have the same problem.
Please help.
Thanks in advance

Basic System Details

MyPaint version:

Mypaint w64
2.0.0-alpha +git.869de4eb

Operating System + Version:

Windows 10

Make and Model of Graphic Tablet:
Wacom Bamboo CTH-460

I’m assuming this does not happen with MyPaint 1.2.1?

Does the same thing happen when drawing with a mouse, or using other tablets (if you have any available)?

In the About window, can you copy and paste the line below the one with the version number.
I would suspect some Gtk regression.

the line below the version number is :
(Python 2.7.16, GTK 3.24.9, GdkPixbuf 2.38.1, Cairo 1.16.0, GLib 2.60.4)
Today I have no more this problem but I don’t know why; maybe this version is not stable.
What is a Gtk regression?

I installed version 1.2.1 and at the first stroke I get this error:
python
Mypaint version: 1.2.1+gitexport.bcf5a28d
System information: Windows-10-10.0.18362-SP0
Using: Python 2.7.13, GTK 3.22.7, GdkPixbuf 2.36.4, Cairo 1.15.4, GLib 2.50.1
Traceback (most recent call last):
File “C:/Program Files/mypaint-w64-v12/mingw64/share/mypaint/gui/document.py”, line 623, button_release_cb(self=<gui.document.Document object>, tdw=<tileddrawwidget.TiledDrawWidget object at 0x000…0dd5faf0 (TiledDrawWidget at 0x000000000e797410)>, event=<Gdk.EventButton object at 0x00000000104ff3c0 (void at 0x000000000e734840)>)
# Normal event dispatch
return CanvasController.button_release_cb(self, tdw, event)
variables: {‘CanvasController.button_release_cb’: (‘global’, ), ‘tdw’: (‘local’, <tileddrawwidget.TiledDrawWidget object at 0x000000000dd5faf0 (TiledDrawWidget at 0x000000000e797410)>), ‘self’: (‘local’, <gui.document.Document object at 0x000000000dd74a90>), ‘event’: (‘local’, <Gdk.EventButton object at 0x00000000104ff3c0 (void at 0x000000000e734840)>)}
File “C:/Program Files/mypaint-w64-v12/mingw64/share/mypaint/gui/document.py”, line 114, button_release_cb(self=<gui.document.Document object>, tdw=<tileddrawwidget.TiledDrawWidget object at 0x000…0dd5faf0 (TiledDrawWidget at 0x000000000e797410)>, event=<Gdk.EventButton object at 0x00000000104ff3c0 (void at 0x000000000e734840)>)
mode = self.modes.top
result = mode.button_release_cb(tdw, event)
self._update_last_event_info(tdw, event)
variables: {‘mode.button_release_cb’: (‘local’, <bound method FreehandMode.button_release_cb of <gui.freehand.FreehandMode object at 0x000000000f033e50>>), ‘tdw’: (‘local’, <tileddrawwidget.TiledDrawWidget object at 0x000000000dd5faf0 (TiledDrawWidget at 0x000000000e797410)>), ‘result’: (None, ), ‘event’: (‘local’, <Gdk.EventButton object at 0x00000000104ff3c0 (void at 0x000000000e734840)>)}
File “C:/Program Files/mypaint-w64-v12/mingw64/share/mypaint/gui/freehand.py”, line 410, button_release_cb(self=<gui.freehand.FreehandMode object>, tdw=<tileddrawwidget.TiledDrawWidget object at 0x000…0dd5faf0 (TiledDrawWidget at 0x000000000e797410)>, event=<Gdk.EventButton object at 0x00000000104ff3c0 (void at 0x000000000e734840)>)
# Notify observers after processing the event
self.doc.input_stroke_ended(event)
variables: {‘self.doc.input_stroke_ended’: (‘local’, ), ‘event’: (‘local’, <Gdk.EventButton object at 0x00000000104ff3c0 (void at 0x000000000e734840)>)}
File “C:/Program Files/mypaint-w64-v12/mingw64/share/mypaint/lib/observable.py”, line 284, call(self=, *args=(<Gdk.EventButton object at 0x00000000104ff3c0 (void at 0x000000000e734840)>,), **kwargs={})
try:
observer(observed, *args, **kwargs)
except BoundObserverMethod._ReferenceError:
variables: {‘observed’: (‘local’, <gui.document.Document object at 0x000000000dd74a90>), ‘args’: (‘local’, (<Gdk.EventButton object at 0x00000000104ff3c0 (void at 0x000000000e734840)>,)), ‘observer’: (‘local’, ), ‘kwargs’: (‘local’, {})}
File “C:/Program Files/mypaint-w64-v12/mingw64/share/mypaint/lib/observable.py”, line 467, call(self=, observed=<gui.document.Document object>, *args=(<Gdk.EventButton object at 0x00000000104ff3c0 (void at 0x000000000e734840)>,), **kwargs={})
raise self._ReferenceError
self._observer_func(observer, observed, *args, **kwargs)
del observer
variables: {‘observed’: (‘local’, <gui.document.Document object at 0x000000000dd74a90>), ‘args’: (‘local’, (<Gdk.EventButton object at 0x00000000104ff3c0 (void at 0x000000000e734840)>,)), ‘self._observer_func’: (‘local’, <function _input_stroke_ended_cb at 0x000000000dcf5b18>), ‘observer’: (‘local’, <gui.brushmanager.BrushManager object at 0x000000000e463250>), ‘kwargs’: (‘local’, {})}
File “C:/Program Files/mypaint-w64-v12/mingw64/share/mypaint/gui/brushmanager.py”, line 787, _input_stroke_ended_cb(self=<gui.brushmanager.BrushManager object>, doc=<gui.document.Document object>, event=<Gdk.EventButton object at 0x00000000104ff3c0 (void at 0x000000000e734840)>)
for i, hb in enumerate(self.history):
hb_info = hb.brushinfo
hb_parent_name = hb_info.settings.get(“parent_brush_name”)
variables: {‘hb.brushinfo’: (‘local’, <lib.brush.BrushInfo object at 0x000000000eddef90>), ‘hb_info’: (‘local’, <lib.brush.BrushInfo object at 0x000000000edde810>)}
File “C:/Program Files/mypaint-w64-v12/mingw64/share/mypaint/gui/brushmanager.py”, line 969, get_brushinfo(self=<ManagedBrush u’history_3’ p=deevad/watercolor_expressive>)
def get_brushinfo(self):
self._ensure_settings_loaded()
return self._brushinfo
variables: {‘self._ensure_settings_loaded’: (‘local’, <bound method ManagedBrush._ensure_settings_loaded of <ManagedBrush u’history_3’ p=deevad/watercolor_expressive>>)}
File “C:/Program Files/mypaint-w64-v12/mingw64/share/mypaint/gui/brushmanager.py”, line 1211, _ensure_settings_loaded(self=<ManagedBrush u’history_3’ p=deevad/watercolor_expressive>)
logger.debug(“Loading %r…”, self)
self.load()
assert self._settings_loaded
variables: {‘self.load’: (‘local’, <bound method ManagedBrush.load of <ManagedBrush u’history_3’ p=deevad/watercolor_expressive>>)}
File “C:/Program Files/mypaint-w64-v12/mingw64/share/mypaint/gui/brushmanager.py”, line 1153, load(self=<ManagedBrush u’history_3’ p=deevad/watercolor_expressive>)
self._load_preview()
self._load_settings()
variables: {‘self._load_settings’: (‘local’, <bound method ManagedBrush._load_settings of <ManagedBrush u’history_3’ p=deevad/watercolor_expressive>>)}
File “C:/Program Files/mypaint-w64-v12/mingw64/share/mypaint/gui/brushmanager.py”, line 1175, _load_settings(self=<ManagedBrush u’history_3’ p=deevad/watercolor_expressive>)
try:
self._brushinfo.load_from_string(brushinfo_str)
except BrushInfo.ParseError, e:
variables: {‘self._brushinfo.load_from_string’: (‘local’, <bound method BrushInfo.load_from_string of <lib.brush.BrushInfo object at 0x000000000eddef90>>), ‘brushinfo_str’: (‘local’, ‘{\n “comment”: “MyPaint brush file”, \n “description”: “A brush with sensitivity on size while producing a fringe to simulate watercolor”, \n “group”: “”, \n “notes”: “A brush preset part of the Brushkit v0.6 \n created in october 2012 by David Revoy ( aka Deevad ) \n source: http://www.davidrevoy.com/article142/ressource-mypaint-brushes \n license: CC-Zero/Public-Domain”, \n “parent_brush_name”: “deevad/watercolor_expressive”, \n “settings”: {\n “anti_aliasing”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “change_color_h”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “change_color_hsl_s”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “change_color_hsv_s”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “change_color_l”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “change_color_v”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “color_h”: {\n “base_value”: 0.6566264794722573, \n “inputs”: {}\n }, \n “color_s”: {\n “base_value”: 0.7619451326933229, \n “inputs”: {}\n }, \n “color_v”: {\n “base_value”: 0.18176406445118393, \n “inputs”: {}\n }, \n “colorize”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “custom_input”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “custom_input_slowness”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “dabs_per_actual_radius”: {\n “base_value”: 2.0, \n “inputs”: {}\n }, \n “dabs_per_basic_radius”: {\n “base_value”: 6.0, \n “inputs”: {}\n }, \n “dabs_per_second”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “direction_filter”: {\n “base_value”: 2.0, \n “inputs”: {}\n }, \n “elliptical_dab_angle”: {\n “base_value”: 90.0, \n “inputs”: {\n “random”: [\n [\n 0.0, \n -180.0\n ], \n [\n 1.0, \n 180.0\n ]\n ]\n }\n }, \n “elliptical_dab_ratio”: {\n “base_value”: 4.0, \n “inputs”: {\n “pressure”: [\n [\n 0.0, \n -0.0\n ], \n [\n 0.75, \n -0.0\n ], \n [\n 1.0, \n -2.7\n ]\n ], \n “speed1”: [\n [\n 0.0, \n -0.37\n ], \n [\n 4.0, \n 0.37\n ]\n ]\n }\n }, \n “eraser”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “gridmap_scale”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “gridmap_scale_x”: {\n “base_value”: 1.0, \n “inputs”: {}\n }, \n “gridmap_scale_y”: {\n “base_value”: 1.0, \n “inputs”: {}\n }, \n “hardness”: {\n “base_value”: 0.23, \n “inputs”: {\n “pressure”: [\n [\n 0.0, \n -0.0\n ], \n [\n 0.746914, \n -0.0\n ], \n [\n 0.884375, \n -0.0\n ], \n [\n 1.0, \n -0.032083\n ]\n ]\n }\n }, \n “lock_alpha”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_angle”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_angle_2”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_angle_2_asc”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_angle_2_view”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_angle_adj”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_angle_asc”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_angle_view”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_by_random”: {\n “base_value”: 0.0, \n “inputs”: {\n “pressure”: [\n [\n 0.0, \n 0.0\n ], \n [\n 0.75, \n 0.0\n ], \n [\n 1.0, \n 0.8\n ]\n ]\n }\n }, \n “offset_by_speed”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_by_speed_slowness”: {\n “base_value”: 1.0, \n “inputs”: {}\n }, \n “offset_multiplier”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_x”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_y”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “opaque”: {\n “base_value”: 2.0, \n “inputs”: {\n “random”: [\n [\n 0.0, \n 1.0\n ], \n [\n 1.0, \n 1.0\n ]\n ]\n }\n }, \n “opaque_linearize”: {\n “base_value”: 0.9, \n “inputs”: {}\n }, \n “opaque_multiply”: {\n “base_value”: 0.0, \n “inputs”: {\n “pressure”: [\n [\n 0.0, \n 0.0\n ], \n [\n 0.040123, \n 0.885417\n ], \n [\n 0.138889, \n 1.0\n ], \n [\n 1.0, \n 1.0\n ]\n ]\n }\n }, \n “paint_mode”: {\n “base_value”: 1.0, \n “inputs”: {}\n }, \n “posterize”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “posterize_num”: {\n “base_value”: 0.05000000074505806, \n “inputs”: {}\n }, \n “pressure_gain_log”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “radius_by_random”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “radius_logarithmic”: {\n “base_value”: 3.5, \n “inputs”: {\n “pressure”: [\n [\n 0.0, \n -2.9\n ], \n [\n 1.0, \n 0.845833\n ]\n ]\n }\n }, \n “restore_color”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “slow_tracking”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “slow_tracking_per_dab”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “smudge”: {\n “base_value”: 0.71, \n “inputs”: {\n “pressure”: [\n [\n 0.0, \n -0.65\n ], \n [\n 0.5, \n -0.358854\n ], \n [\n 0.796875, \n -0.094792\n ], \n [\n 1.0, \n 0.24375\n ]\n ], \n “speed1”: [\n [\n 0.0, \n -0.01\n ], \n [\n 4.0, \n 0.01\n ]\n ]\n }\n }, \n “smudge_bucket”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “smudge_length”: {\n “base_value”: 0.1, \n “inputs”: {}\n }, \n “smudge_length_log”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “smudge_radius_log”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “smudge_transparency”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “snap_to_pixel”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “speed1_gamma”: {\n “base_value”: 4.0, \n “inputs”: {}\n }, \n “speed1_slowness”: {\n “base_value”: 0.04, \n “inputs”: {}\n }, \n “speed2_gamma”: {\n “base_value”: 4.0, \n “inputs”: {}\n }, \n “speed2_slowness”: {\n “base_value”: 0.8, \n “inputs”: {}\n }, \n “stroke_duration_logarithmic”: {\n “base_value”: 6.5, \n “inputs”: {}\n }, \n “stroke_holdtime”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “stroke_threshold”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “tracking_noise”: {\n “base_value”: 0.0, \n “inputs”: {}\n }\n }, \n “version”: 3\n}’)}
File “C:/Program Files/mypaint-w64-v12/mingw64/share/mypaint/lib/brush.py”, line 181, load_from_string(self=<lib.brush.BrushInfo object>, settings_str=’{\n “comment”: “MyPaint brush file”, \n "des…“inputs”: {}\n }\n }, \n “version”: 3\n}’)
# new json-based brush format
self.from_json(settings_str)
elif settings_str.startswith(’#’):
variables: {‘self.from_json’: (‘local’, <bound method BrushInfo.from_json of <lib.brush.BrushInfo object at 0x000000000eddef90>>), ‘settings_str’: (‘local’, ‘{\n “comment”: “MyPaint brush file”, \n “description”: “A brush with sensitivity on size while producing a fringe to simulate watercolor”, \n “group”: “”, \n “notes”: “A brush preset part of the Brushkit v0.6 \n created in october 2012 by David Revoy ( aka Deevad ) \n source: http://www.davidrevoy.com/article142/ressource-mypaint-brushes \n license: CC-Zero/Public-Domain”, \n “parent_brush_name”: “deevad/watercolor_expressive”, \n “settings”: {\n “anti_aliasing”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “change_color_h”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “change_color_hsl_s”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “change_color_hsv_s”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “change_color_l”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “change_color_v”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “color_h”: {\n “base_value”: 0.6566264794722573, \n “inputs”: {}\n }, \n “color_s”: {\n “base_value”: 0.7619451326933229, \n “inputs”: {}\n }, \n “color_v”: {\n “base_value”: 0.18176406445118393, \n “inputs”: {}\n }, \n “colorize”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “custom_input”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “custom_input_slowness”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “dabs_per_actual_radius”: {\n “base_value”: 2.0, \n “inputs”: {}\n }, \n “dabs_per_basic_radius”: {\n “base_value”: 6.0, \n “inputs”: {}\n }, \n “dabs_per_second”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “direction_filter”: {\n “base_value”: 2.0, \n “inputs”: {}\n }, \n “elliptical_dab_angle”: {\n “base_value”: 90.0, \n “inputs”: {\n “random”: [\n [\n 0.0, \n -180.0\n ], \n [\n 1.0, \n 180.0\n ]\n ]\n }\n }, \n “elliptical_dab_ratio”: {\n “base_value”: 4.0, \n “inputs”: {\n “pressure”: [\n [\n 0.0, \n -0.0\n ], \n [\n 0.75, \n -0.0\n ], \n [\n 1.0, \n -2.7\n ]\n ], \n “speed1”: [\n [\n 0.0, \n -0.37\n ], \n [\n 4.0, \n 0.37\n ]\n ]\n }\n }, \n “eraser”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “gridmap_scale”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “gridmap_scale_x”: {\n “base_value”: 1.0, \n “inputs”: {}\n }, \n “gridmap_scale_y”: {\n “base_value”: 1.0, \n “inputs”: {}\n }, \n “hardness”: {\n “base_value”: 0.23, \n “inputs”: {\n “pressure”: [\n [\n 0.0, \n -0.0\n ], \n [\n 0.746914, \n -0.0\n ], \n [\n 0.884375, \n -0.0\n ], \n [\n 1.0, \n -0.032083\n ]\n ]\n }\n }, \n “lock_alpha”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_angle”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_angle_2”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_angle_2_asc”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_angle_2_view”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_angle_adj”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_angle_asc”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_angle_view”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_by_random”: {\n “base_value”: 0.0, \n “inputs”: {\n “pressure”: [\n [\n 0.0, \n 0.0\n ], \n [\n 0.75, \n 0.0\n ], \n [\n 1.0, \n 0.8\n ]\n ]\n }\n }, \n “offset_by_speed”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_by_speed_slowness”: {\n “base_value”: 1.0, \n “inputs”: {}\n }, \n “offset_multiplier”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_x”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_y”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “opaque”: {\n “base_value”: 2.0, \n “inputs”: {\n “random”: [\n [\n 0.0, \n 1.0\n ], \n [\n 1.0, \n 1.0\n ]\n ]\n }\n }, \n “opaque_linearize”: {\n “base_value”: 0.9, \n “inputs”: {}\n }, \n “opaque_multiply”: {\n “base_value”: 0.0, \n “inputs”: {\n “pressure”: [\n [\n 0.0, \n 0.0\n ], \n [\n 0.040123, \n 0.885417\n ], \n [\n 0.138889, \n 1.0\n ], \n [\n 1.0, \n 1.0\n ]\n ]\n }\n }, \n “paint_mode”: {\n “base_value”: 1.0, \n “inputs”: {}\n }, \n “posterize”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “posterize_num”: {\n “base_value”: 0.05000000074505806, \n “inputs”: {}\n }, \n “pressure_gain_log”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “radius_by_random”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “radius_logarithmic”: {\n “base_value”: 3.5, \n “inputs”: {\n “pressure”: [\n [\n 0.0, \n -2.9\n ], \n [\n 1.0, \n 0.845833\n ]\n ]\n }\n }, \n “restore_color”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “slow_tracking”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “slow_tracking_per_dab”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “smudge”: {\n “base_value”: 0.71, \n “inputs”: {\n “pressure”: [\n [\n 0.0, \n -0.65\n ], \n [\n 0.5, \n -0.358854\n ], \n [\n 0.796875, \n -0.094792\n ], \n [\n 1.0, \n 0.24375\n ]\n ], \n “speed1”: [\n [\n 0.0, \n -0.01\n ], \n [\n 4.0, \n 0.01\n ]\n ]\n }\n }, \n “smudge_bucket”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “smudge_length”: {\n “base_value”: 0.1, \n “inputs”: {}\n }, \n “smudge_length_log”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “smudge_radius_log”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “smudge_transparency”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “snap_to_pixel”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “speed1_gamma”: {\n “base_value”: 4.0, \n “inputs”: {}\n }, \n “speed1_slowness”: {\n “base_value”: 0.04, \n “inputs”: {}\n }, \n “speed2_gamma”: {\n “base_value”: 4.0, \n “inputs”: {}\n }, \n “speed2_slowness”: {\n “base_value”: 0.8, \n “inputs”: {}\n }, \n “stroke_duration_logarithmic”: {\n “base_value”: 6.5, \n “inputs”: {}\n }, \n “stroke_holdtime”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “stroke_threshold”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “tracking_noise”: {\n “base_value”: 0.0, \n “inputs”: {}\n }\n }, \n “version”: 3\n}’)}
File “C:/Program Files/mypaint-w64-v12/mingw64/share/mypaint/lib/brush.py”, line 165, from_json(self=<lib.brush.BrushInfo object>, json_string=’{\n “comment”: “MyPaint brush file”, \n "des…“inputs”: {}\n }\n }, \n “version”: 3\n}’)
if k not in self.settings:
print ‘ignoring unknown brush setting %r’ % k
continue
variables: {‘k’: (‘local’, u’offset_angle_2_view’)}
IOError: [Errno 9] Bad file descriptor

Gtk is the toolkit MyPaint uses for its graphical interface (windows, buttons, etc).
In this case a regression means that something that used to work, no longer works, or now produces an unwanted result. For example, my guess here was that the change from GTK 3.22.7 to GTK 3.24.9 brought about the change.

Yesterday, did the hourglass problem persist even after restarting MyPaint (if you tried that)?

And no, when a software version has an “alpha” or “beta” anywhere, it usually means that it’s not stable. However, even the stable releases have always had some glitches and other issues on Windows. Unfortunately we don’t have any devs who are primarily Windows-users, as far as I know, and a great deal of the libraries that MyPaint uses are de-facto Linux-first.

I think the new error comes down to the fact that the last known brush you used was from the newer build, so it loads a brush that the older version fails to handle in some way. Simply switch the brush and the error should disappear. The fact that the failure (to handle the newer brush) causes an IOError does seem like a bug though.

Yesterday the problem persisted even after restarting mypaint. Now I have uninstalled version 1.2 and I will try to use the latest version hoping to have no more problems.