Commit cf1e3ae1 authored by Alexandru Băluț's avatar Alexandru Băluț

project: Avoid propagating incorrect values

Property setters such as videowidth.setter set `int(value)` and then
they emit `value`, which can be different. Cleaned up the code a bit.

Differential Revision: https://phabricator.freedesktop.org/D1931
parent 12af40bc
......@@ -1014,13 +1014,11 @@ class MainWindow(Gtk.ApplicationWindow, Loggable):
# FIXME GES we should re-enable this when possible
# medialibrary.connect("missing-plugins", self._sourceListMissingPluginsCb)
project.connect("project-changed", self._projectChangedCb)
project.connect(
"rendering-settings-changed", self._renderingSettingsChangedCb)
project.connect("rendering-settings-changed",
self._rendering_settings_changed_cb)
project.ges_timeline.connect("notify::duration",
self._timelineDurationChangedCb)
# Missing Plugins Support
def _sourceListMissingPluginsCb(
self, unused_project, unused_uri, unused_factory,
details, unused_descriptions, missingPluginsCallback):
......@@ -1036,8 +1034,6 @@ class MainWindow(Gtk.ApplicationWindow, Loggable):
missingPluginsCallback)
return res
# Pitivi current project callbacks
def _setProject(self, project):
"""Disconnects and then reconnects callbacks to the specified project.
......@@ -1049,7 +1045,7 @@ class MainWindow(Gtk.ApplicationWindow, Loggable):
return False
self.viewer.setPipeline(project.pipeline)
self._renderingSettingsChangedCb(project)
self._reset_viewer_aspect_ratio(project)
self.clipconfig.project = project
# When creating a blank project there's no project URI yet.
......@@ -1059,12 +1055,14 @@ class MainWindow(Gtk.ApplicationWindow, Loggable):
def _disconnectFromProject(self, project):
project.disconnect_by_func(self._projectChangedCb)
project.disconnect_by_func(self._renderingSettingsChangedCb)
project.disconnect_by_func(self._rendering_settings_changed_cb)
project.ges_timeline.disconnect_by_func(self._timelineDurationChangedCb)
# Pitivi current project callbacks
def _rendering_settings_changed_cb(self, project, unused_item):
"""Handles Project metadata changes."""
self._reset_viewer_aspect_ratio(project)
def _renderingSettingsChangedCb(self, project, unused_item=None, unused_value=None):
def _reset_viewer_aspect_ratio(self, project):
"""Resets the viewer aspect ratio."""
self.viewer.setDisplayAspectRatio(project.getDAR())
self.viewer.timecode_entry.setFramerate(project.videorate)
......@@ -1079,8 +1077,6 @@ class MainWindow(Gtk.ApplicationWindow, Loggable):
self.debug("Timeline duration changed to %s", duration)
self.render_button.set_sensitive(duration > 0)
# other
def _showExportDialog(self, project):
self.log("Export requested")
chooser = Gtk.FileChooserDialog(title=_("Export To..."),
......
......@@ -659,8 +659,7 @@ class Project(Loggable, GES.Project):
"start-importing": (GObject.SignalFlags.RUN_LAST, None, ()),
"project-changed": (GObject.SignalFlags.RUN_LAST, None, ()),
"rendering-settings-changed": (GObject.SignalFlags.RUN_LAST, None,
(GObject.TYPE_PYOBJECT,
GObject.TYPE_PYOBJECT,)),
(GObject.TYPE_PYOBJECT,)),
"settings-set-from-imported-asset": (GObject.SignalFlags.RUN_LAST, None,
(GES.Asset,)),
"video-size-changed": (GObject.SignalFlags.RUN_LAST, None, ()),
......@@ -866,7 +865,7 @@ class Project(Loggable, GES.Project):
@videowidth.setter
def videowidth(self, value):
if self.setVideoRestriction("width", int(value)):
self._emitChange("rendering-settings-changed", "width", value)
self._emit_change("width")
@property
def videoheight(self):
......@@ -875,7 +874,7 @@ class Project(Loggable, GES.Project):
@videoheight.setter
def videoheight(self, value):
if self.setVideoRestriction("height", int(value)):
self._emitChange("rendering-settings-changed", "height", value)
self._emit_change("height")
@property
def videorate(self):
......@@ -884,7 +883,7 @@ class Project(Loggable, GES.Project):
@videorate.setter
def videorate(self, value):
if self.setVideoRestriction("framerate", value):
self._emitChange("rendering-settings-changed", "videorate", value)
self._emit_change("videorate")
@property
def audiochannels(self):
......@@ -893,7 +892,7 @@ class Project(Loggable, GES.Project):
@audiochannels.setter
def audiochannels(self, value):
if self.__setAudioRestriction("channels", int(value)):
self._emitChange("rendering-settings-changed", "channels", value)
self._emit_change("channels")
@property
def audiorate(self):
......@@ -905,7 +904,7 @@ class Project(Loggable, GES.Project):
@audiorate.setter
def audiorate(self, value):
if self.__setAudioRestriction("rate", int(value)):
self._emitChange("rendering-settings-changed", "rate", value)
self._emit_change("rate")
@property
def aencoder(self):
......@@ -920,7 +919,7 @@ class Project(Loggable, GES.Project):
self.audio_profile.set_preset_name(value)
# Gst.Preset can be set exclusively through EncodingTagets for now.
self.audio_profile.set_preset(None)
self._emitChange("rendering-settings-changed", "aencoder", value)
self._emit_change("aencoder")
def _enforce_video_encoder_restrictions(self, encoder, profile=None):
"""Enforces @encoder specific restrictions."""
......@@ -944,7 +943,7 @@ class Project(Loggable, GES.Project):
# Gst.Preset can be set exclusively through EncodingTagets for now.
self.video_profile.set_preset(None)
self._enforce_video_encoder_restrictions(value)
self._emitChange("rendering-settings-changed", "vencoder", value)
self._emit_change("vencoder")
@property
def muxer(self):
......@@ -957,7 +956,7 @@ class Project(Loggable, GES.Project):
if caps:
self.container_profile.set_format(caps)
self.container_profile.set_preset_name(value)
self._emitChange("rendering-settings-changed", "muxer", value)
self._emit_change("muxer")
def _get_caps_from_feature(self, name):
"""Gets the caps for the source static pad template of a feature."""
......@@ -1783,8 +1782,8 @@ class Project(Loggable, GES.Project):
if emit:
self.emit("settings-set-from-imported-asset", asset)
def _emitChange(self, signal, key, value):
self.emit(signal, key, value)
def _emit_change(self, key):
self.emit("rendering-settings-changed", key)
# TODO: Remove this when it's possible to undo/redo these changes.
self.setModificationState(True)
......
......@@ -438,8 +438,8 @@ class RenderDialog(Loggable):
self._displayRenderSettings()
self.window.connect("delete-event", self._deleteEventCb)
self.project.connect(
"rendering-settings-changed", self._settings_changed_cb)
self.project.connect("rendering-settings-changed",
self._rendering_settings_changed_cb)
# Monitor changes
......@@ -601,7 +601,8 @@ class RenderDialog(Loggable):
self.window.set_icon_name("system-run-symbolic")
self.window.set_transient_for(self.app.gui)
def _settings_changed_cb(self, unused_project, key, value):
def _rendering_settings_changed_cb(self, unused_project, unused_item):
"""Handles Project metadata changes."""
self.updateResolution()
def __initialize_muxers_model(self):
......@@ -996,7 +997,7 @@ class RenderDialog(Loggable):
def _closeButtonClickedCb(self, unused_button):
self.debug("Render dialog's Close button clicked")
self.project.disconnect_by_func(self._settings_changed_cb)
self.project.disconnect_by_func(self._rendering_settings_changed_cb)
self.destroy()
def _deleteEventCb(self, unused_window, unused_event):
......@@ -1126,7 +1127,7 @@ class RenderDialog(Loggable):
self.updateResolution()
def updateResolution(self):
width, height = self.project.getVideoWidthAndHeight(True)
width, height = self.project.getVideoWidthAndHeight(render=True)
self.resolution_label.set_text("%%d" % (width, height))
def _projectSettingsButtonClickedCb(self, unused_button):
......
......@@ -1406,7 +1406,7 @@ class TimelineContainer(Gtk.Grid, Zoomable, Loggable):
self._project = project
if self._project:
self._project.connect("rendering-settings-changed",
self._renderingSettingsChangedCb)
self._rendering_settings_changed_cb)
self.ges_timeline = project.ges_timeline
else:
self.ges_timeline = None
......@@ -1864,29 +1864,22 @@ class TimelineContainer(Gtk.Grid, Zoomable, Loggable):
self.log("Timeline has lost focus")
self.updateActions()
# Callbacks
def _renderingSettingsChangedCb(self, project, item, value):
"""Handles Project metadata changes.
We filter out the one we are not interested in.
If `item` is None, it means we called it ourself, and want to force
getting the project videorate value
"""
def _rendering_settings_changed_cb(self, project, item):
"""Handles Project metadata changes."""
if item == "videorate" or item is None:
if value is None:
value = project.videorate
self._framerate = value
self.ruler.setProjectFrameRate(self._framerate)
self._update_ruler(project.videorate)
if item in ["width", "height", "videorate", "rate", "channels"]:
project.update_restriction_caps()
def _update_ruler(self, videorate):
self._framerate = videorate
self.ruler.setProjectFrameRate(self._framerate)
def _projectLoadedCb(self, unused_project_manager, project):
"""Connects to the project's timeline and pipeline."""
if self._project:
self._project.disconnect_by_func(self._renderingSettingsChangedCb)
self._project.disconnect_by_func(self._rendering_settings_changed_cb)
try:
self.timeline._pipeline.disconnect_by_func(
self.timeline.positionCb)
......@@ -1900,11 +1893,9 @@ class TimelineContainer(Gtk.Grid, Zoomable, Loggable):
self.setProject(project)
if project:
self.ruler.setPipeline(project.pipeline)
self.ruler.setProjectFrameRate(project.videorate)
self.ruler.zoomChanged()
self._update_ruler(project.videorate)
self._renderingSettingsChangedCb(project, None, None)
self.timeline.set_best_zoom_ratio(allow_zoom_in=True)
self.timeline.update_snapping_distance()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment