Bug 18298

Summary: mypaint doesn't start in plasma 5.6 due to missing dependencies
Product: Mageia Reporter: Fabien Deschodt <vive_les_poils>
Component: RPM PackagesAssignee: Rémi Verschelde <rverschelde>
Status: RESOLVED FIXED QA Contact:
Severity: normal    
Priority: Normal    
Version: Cauldron   
Target Milestone: ---   
Hardware: x86_64   
OS: Linux   
Whiteboard:
Source RPM: CVE:
Status comment:
Attachments: picture of mypaint

Description Fabien Deschodt 2016-04-29 19:48:51 CEST
Description of problem:
mypaint don't start in mageia-6-dev1.
It will start to load as if it is opening up, but then won't open! I have tried uninstalling and re-installing many times, but it won't work...

Version-Release number of selected component (if applicable):
mypaint 1.2.0

How reproducible:
click on the mypaint icon in the start menu and wait

Steps to Reproduce:
1.
2.
3.
Rémi Verschelde 2016-04-29 20:16:09 CEST

Assignee: bugsquad => rverschelde

Comment 1 Fabien Deschodt 2016-04-29 21:44:14 CEST
Created attachment 7714 [details]
picture of mypaint
Comment 2 Fabien Deschodt 2016-04-29 21:46:19 CEST
i have a message after opening the application, details of message : 
python
Mypaint version: 1.2.0+gitexport.f62444e
System information: Linux-4.6.0-desktop-0.rc5.1.mga6-x86_64-with-mageia-6-Cauldron
Traceback (most recent call last):
  File "/usr/share/mypaint/gui/application.py", line 379, _at_application_start(self=<gui.application.Application object>, filenames=[], fullscreen=None)
            col = self.brush_color_manager.get_color()
            self.brushmanager.select_initial_brush()
            self.brush_color_manager.set_color(col)
  variables: {'self.brushmanager.select_initial_brush': ('local', <bound method BrushManager.select_initial_brush of <gui.brushmanager.BrushManager object at 0x7fa82da9a390>>)}
  File "/usr/share/mypaint/gui/brushmanager.py", line 423, select_initial_brush(self=<gui.brushmanager.BrushManager object>)
                initial_brush = self.get_default_brush()
            self.select_brush(initial_brush)
  variables: {'initial_brush': ('local', <ManagedBrush u'deevad/2B_pencil' p=None>), 'self.select_brush': ('local', <bound method BrushManager.select_brush of <gui.brushmanager.BrushManager object at 0x7fa82da9a390>>)}
  File "/usr/share/mypaint/gui/brushmanager.py", line 701, select_brush(self=<gui.brushmanager.BrushManager object>, brush=<ManagedBrush u'deevad/2B_pencil' p=None>)
            # brush, amongst other things
            self.brush_selected(brush, brushinfo)
  variables: {'self.brush_selected': ('local', <MethodWithObservers gui.brushmanager.BrushManager.brush_selected>), 'brush': ('local', <ManagedBrush u'deevad/2B_pencil' p=None>), 'brushinfo': ('local', <lib.brush.BrushInfo object at 0x7fa82da9e2d0>)}
  File "/usr/share/mypaint/lib/observable.py", line 284, __call__(self=<MethodWithObservers gui.brushmanager.BrushManager.brush_selected>, *args=(<ManagedBrush u'deevad/2B_pencil' p=None>, <lib.brush.BrushInfo object>), **kwargs={})
                try:
                    observer(observed, *args, **kwargs)
                except BoundObserverMethod._ReferenceError:
  variables: {'observed': ('local', <gui.brushmanager.BrushManager object at 0x7fa82da9a390>), 'args': ('local', (<ManagedBrush u'deevad/2B_pencil' p=None>, <lib.brush.BrushInfo object at 0x7fa82da9e2d0>)), 'observer': ('local', <BoundObserverMethod gui.brushmodifier.BrushModifier.brush_selected_cb>), 'kwargs': ('local', {})}
  File "/usr/share/mypaint/lib/observable.py", line 467, __call__(self=<BoundObserverMethod gui.brushmodifier.BrushModifier.brush_selected_cb>, observed=<gui.brushmanager.BrushManager object>, *args=(<ManagedBrush u'deevad/2B_pencil' p=None>, <lib.brush.BrushInfo object>), **kwargs={})
                raise self._ReferenceError
            self._observer_func(observer, observed, *args, **kwargs)
            del observer
  variables: {'observed': ('local', <gui.brushmanager.BrushManager object at 0x7fa82da9a390>), 'args': ('local', (<ManagedBrush u'deevad/2B_pencil' p=None>, <lib.brush.BrushInfo object at 0x7fa82da9e2d0>)), 'self._observer_func': ('local', <function brush_selected_cb at 0x7fa82e6a6ed8>), 'observer': ('local', <gui.brushmodifier.BrushModifier object at 0x7fa82d7a1450>), 'kwargs': ('local', {})}
  File "/usr/share/mypaint/gui/brushmodifier.py", line 226, brush_selected_cb(self=<gui.brushmodifier.BrushModifier object>, bm=<gui.brushmanager.BrushManager object>, managed_brush=<ManagedBrush u'deevad/2B_pencil' p=None>, brushinfo=<lib.brush.BrushInfo object>)
            b.end_atomic()
  variables: {'b.end_atomic': ('local', <bound method BrushInfo.end_atomic of <lib.brush.BrushInfo object at 0x7fa82e6cb4d0>>)}
  File "/usr/share/mypaint/lib/brush.py", line 437, end_atomic(self=<lib.brush.BrushInfo object>)
                for f in self.observers:
                    f(pending)
  variables: {'pending': ('local', set(['comment', u'tracking_noise', u'speed2_gamma', u'speed2_slowness', u'pressure_gain_log', u'stroke_holdtime', u'stroke_duration_logarithmic', u'slow_tracking', u'change_color_v', u'elliptical_dab_ratio', u'change_color_h', u'change_color_l', u'offset_by_speed_slowness', u'speed1_gamma', u'slow_tracking_per_dab', u'colorize', u'dabs_per_basic_radius', 'group', u'opaque', u'color_s', u'opaque_multiply', u'elliptical_dab_angle', u'lock_alpha', u'snap_to_pixel', u'eraser', u'opaque_linearize', u'stroke_threshold', 'description', u'color_h', 'parent_brush_name', u'smudge_radius_log', u'speed1_slowness', u'smudge', u'change_color_hsv_s', u'radius_by_random', u'dabs_per_second', u'color_v', u'custom_input', u'hardness', u'restore_color', u'smudge_length', u'radius_logarithmic', u'change_color_hsl_s', 'notes', u'custom_input_slowness', u'offset_by_speed', u'dabs_per_actual_radius', u'offset_by_random', u'direction_filter', u'anti_aliasing'])), 'f': ('local', <bound method CanvasRenderer.brush_modified_cb of <tileddrawwidget.CanvasRenderer object at 0x7fa82e45ac80 (gui+tileddrawwidget+CanvasRenderer at 0x2a0f220)>>)}
  File "/usr/share/mypaint/gui/tileddrawwidget.py", line 632, brush_modified_cb(self=<tileddrawwidget.CanvasRenderer object at 0x7fa8...gui+tileddrawwidget+CanvasRenderer at 0x2a0f220)>, settings=set([u'anti_aliasing', u'change_color_h', u'change_color_hsl_s', u'change_color_hsv_s', u'change_color_l', u'change_color_v', ...]))
                # Reducing the number of updates is probably a good idea
                self.update_cursor()
  variables: {'self.update_cursor': ('local', <bound method CanvasRenderer.update_cursor of <tileddrawwidget.CanvasRenderer object at 0x7fa82e45ac80 (gui+tileddrawwidget+CanvasRenderer at 0x2a0f220)>>)}
  File "/usr/share/mypaint/gui/tileddrawwidget.py", line 594, update_cursor(self=<tileddrawwidget.CanvasRenderer object at 0x7fa8...gui+tileddrawwidget+CanvasRenderer at 0x2a0f220)>)
                radius, style = self._get_cursor_info()
                c = cursor.get_brush_cursor(radius, style, self.app.preferences)
            window.set_cursor(c)
  variables: {'self.app.preferences': ('local', {'frame.color_rgba': [0.12, 0.12, 0.12, 0.92], 'ui.feedback.scale': False, 'ui.feedback.last_pos': False, 'view.default_zoom': 1.0, 'brushmanager.selected_groups': [], 'ui.toolbar_items': {u'toolbar1_file': True, u'toolbar1_view_modes': True, u'toolbar1_edit': True, u'toolbar1_blendmodes': False, u'toolbar1_view_manips': False, u'toolbar1_view_resets': True, u'toolbar1_scrap': False, u'toolbar1_linemodes': True}, 'input.button_mapping': {u'<Control>Button1': u'ColorPickMode', u'<Shift>Button1': u'StraightMode', u'<Shift>Button2': u'RotateViewMode', u'Button3': u'ShowPopupMenu', u'Button2': u'PanViewMode', u'<Alt><Shift>Button2': u'FrameEditMode', u'<Control>Button2': u'ZoomViewMode', u'<Control><Shift>Button2': u'FrameEditMode', u'<Alt>Button2': u'ZoomViewMode', u'<Alt>Button1': u'ColorPickMode'}, 'ui.dark_theme_variant': True, 'misc.context_restores_color': True, 'document.autosave_backups': True, 'ui.parts': {u'main_toolbar': True, u'menubar': True}, 'ui.hide_toolbar_in_fullscreen': True, 'ui.toolbar_icon_size': u'large', 'display.colorspace': u'srgb', 'input.device_mode': u'screen', 'ui.hide_subwindows_in_fullscreen': True, 'workspace.layout': {u'fullscreen': False, u'right_sidebar': {u'h': 690, u'groups': [{u'tools': [], u'active_page': -1}], u'w': 11}, u'autohide': True, u'maximized': False, u'position': {u'y': 32, u'h': 768, u'w': 1500, u'x': 50}, u'floating': [], u'left_sidebar': {u'h': 690, u'groups': [{u'tools': [], u'active_page': -1}], u'w': 11}}, u'colors.history': [u'#336699', u'#44aa66', u'#aa6633', u'#292929', u'#000000'], 'saving.scrap_prefix': u'~/MyPaint/scrap', 'ui.hide_menubar_in_fullscreen': True, 'input.global_pressure_mapping': [[0.0, 1.0], [1.0, 0.0]], 'saving.default_format': u'openraster', 'brushmanager.selected_brush': u'deevad/2B_pencil', u'input.devices': {u'Virtual core XTEST pointer:mouse:2': {}, u'USB Optical Mouse:mouse:4': {}, u'SynPS/2 Synaptics TouchPad:touchpad:4': {}}, 'view.real_alpha_checks': True, 'document.autosave_interval': 10, 'scratchpad.last_opened_scratchpad': u'/home/fab/.local/share/mypaint/scratchpads/autosave.ora'}), 'c': (None, []), 'style': ('local', 0), 'radius': ('local', 4.73400003322535), 'cursor.get_brush_cursor': ('global', <function get_brush_cursor at 0x7fa8454137d0>)}
  File "/usr/share/mypaint/gui/cursor.py", line 100, get_brush_cursor(radius=4.73400003322535, style=0, prefs={'brushmanager.selected_brush': u'deevad/2B_pencil', 'brushmanager.selected_groups': [], u'colors.history': [u'#336699', u'#44aa66', u'#aa6633', u'#292929', u'#000000'], 'display.colorspace': u'srgb', 'document.autosave_backups': True, 'document.autosave_interval': 10, 'frame.color_rgba': [0.12, 0.12, 0.12, 0.92], 'input.button_mapping': {u'<Alt><Shift>Button2': u'FrameEditMode', u'<Alt>Button1': u'ColorPickMode', u'<Alt>Button2': u'ZoomViewMode', u'<Control><Shift>Button2': u'FrameEditMode', u'<Control>Button1': u'ColorPickMode', u'<Control>Button2': u'ZoomViewMode', u'<Shift>Button1': u'StraightMode', u'<Shift>Button2': u'RotateViewMode', u'Button2': u'PanViewMode', u'Button3': u'ShowPopupMenu'}, 'input.device_mode': u'screen', u'input.devices': {u'SynPS/2 Synaptics TouchPad:touchpad:4': {}, u'USB Optical Mouse:mouse:4': {}, u'Virtual core XTEST pointer:mouse:2': {}}, ...})
            pixbuf = _image_surface_to_pixbuf(surf)
            last_cursor = Gdk.Cursor.new_from_pixbuf(display, pixbuf,
  variables: {'surf': ('local', <cairo.ImageSurface object at 0x7fa82d727390>), '_image_surface_to_pixbuf': ('global', <function _image_surface_to_pixbuf at 0x7fa845413848>), 'pixbuf': (None, [])}
  File "/usr/share/mypaint/gui/cursor.py", line 110, _image_surface_to_pixbuf(surf=<cairo.ImageSurface object>)
        h = surf.get_height()
        return Gdk.pixbuf_get_from_surface(surf, 0, 0, w, h)
  variables: {'surf': ('local', <cairo.ImageSurface object at 0x7fa82d727390>), 'h': ('local', 10), 'w': ('local', 10), 'Gdk.pixbuf_get_from_surface': ('global', gi.FunctionInfo(pixbuf_get_from_surface))}
KeyError: 'could not find foreign type Surface'
```

hum i don't understand...
Comment 3 Fabien Deschodt 2016-04-29 21:55:20 CEST
in konsole, i have much line of errors for example : 
(mypaint:13103): Gtk-WARNING **: Theme parsing error: gtk-dark.css:4017:15: The 'icon-shadow' property has been renamed to '-gtk-icon-shadow'

and at the end, i have : 
ERROR: lib.observable: Failed to call observer <BoundObserverMethod gui.brushmodifier.BrushModifier.brush_selected_cb>
Traceback (most recent call last):
  File "/usr/share/mypaint/gui/application.py", line 379, in _at_application_start
    self.brushmanager.select_initial_brush()
  File "/usr/share/mypaint/gui/brushmanager.py", line 423, in select_initial_brush
    self.select_brush(initial_brush)
  File "/usr/share/mypaint/gui/brushmanager.py", line 701, in select_brush
    self.brush_selected(brush, brushinfo)
  File "/usr/share/mypaint/lib/observable.py", line 284, in __call__
    observer(observed, *args, **kwargs)
  File "/usr/share/mypaint/lib/observable.py", line 467, in __call__
    self._observer_func(observer, observed, *args, **kwargs)
  File "/usr/share/mypaint/gui/brushmodifier.py", line 226, in brush_selected_cb
    b.end_atomic()
  File "/usr/share/mypaint/lib/brush.py", line 437, in end_atomic
    f(pending)
  File "/usr/share/mypaint/gui/tileddrawwidget.py", line 632, in brush_modified_cb
    self.update_cursor()
  File "/usr/share/mypaint/gui/tileddrawwidget.py", line 594, in update_cursor
    c = cursor.get_brush_cursor(radius, style, self.app.preferences)
  File "/usr/share/mypaint/gui/cursor.py", line 100, in get_brush_cursor
    pixbuf = _image_surface_to_pixbuf(surf)
  File "/usr/share/mypaint/gui/cursor.py", line 110, in _image_surface_to_pixbuf
    return Gdk.pixbuf_get_from_surface(surf, 0, 0, w, h)
KeyError: 'could not find foreign type Surface'
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
Traceback (most recent call last):
  File "/usr/share/mypaint/gui/document.py", line 1811, in _view_changed_notification_idle_cb
    for cb in self.view_changed_observers:
TypeError: Couldn't find foreign struct converter for 'cairo.Context'
/usr/lib64/python2.7/site-packages/pygtkcompat/pygtkcompat.py:180: TypeError: Passing arguments to gi.types.Boxed.__init__() is deprecated. All arguments passed will be ignored.
  rect = Gdk.Rectangle(0, 0, 0, 0)
^C
Comment 4 Rémi Verschelde 2016-09-09 17:16:54 CEST
Sorry for the delay, I can confirm the bug in the current cauldron. There are various missing dependencies and likely other issues, will work on fixing it.
Rémi Verschelde 2016-09-09 17:34:03 CEST

Summary: mypaint don't start in plasma 5.6 => mypaint doesn't start in plasma 5.6 due to missing dependencies

Comment 5 Rémi Verschelde 2016-09-09 17:35:22 CEST
Thanks for the report, there were two missing dependencies (though the above errors don't show it very clearly at a first glance):
- python-numpy
- python-gi-cairo

mypaint-1.2.0-2.mga6 should now start fine. Could you test and confirm?
Comment 6 Fabien Deschodt 2016-09-12 18:55:44 CEST
Hello, 
it's all right ! 
my paint works very well in Mga-Stat 1
Thanks Rémi
Comment 7 Fabien Deschodt 2016-09-12 18:57:16 CEST
this is not a bug

Resolution: (none) => FIXED
Status: NEW => RESOLVED