[pitivi] clipproperties: Allow dragging effects when no effects
- From: Thibault Saunier <tsaunier src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pitivi] clipproperties: Allow dragging effects when no effects
- Date: Fri, 16 Mar 2018 17:32:06 +0000 (UTC)
commit 7a6d5c08c3b2bee7783251d9d2b1a09692d77539
Author: Alexandru Băluț <alexandru balut gmail com>
Date: Wed Mar 14 20:22:14 2018 +0100
clipproperties: Allow dragging effects when no effects
Only the treeview which listed the effects was able to receive dragged
effects. The same methods are now connected to the entire effects
container.
pitivi/clipproperties.py | 52 +++++++++++++++++++++++++++++++++---------------
1 file changed, 36 insertions(+), 16 deletions(-)
---
diff --git a/pitivi/clipproperties.py b/pitivi/clipproperties.py
index 20edbd1a..84f1f943 100644
--- a/pitivi/clipproperties.py
+++ b/pitivi/clipproperties.py
@@ -203,7 +203,13 @@ class EffectProperties(Gtk.Expander, Loggable):
name_col.add_attribute(name_cell, "text", COL_NAME_TEXT)
self.treeview.append_column(name_col)
- # Allow the treeview to accept EFFECT_TARGET_ENTRY when drag&dropping.
+ # Allow the entire expander to accept EFFECT_TARGET_ENTRY when
+ # drag&dropping.
+ self.drag_dest_set(Gtk.DestDefaults.DROP, [EFFECT_TARGET_ENTRY],
+ Gdk.DragAction.COPY)
+
+ # Allow also the treeview to accept EFFECT_TARGET_ENTRY when
+ # drag&dropping so the effect can be dragged at a specific position.
self.treeview.enable_model_drag_dest([EFFECT_TARGET_ENTRY],
Gdk.DragAction.COPY)
@@ -251,9 +257,12 @@ class EffectProperties(Gtk.Expander, Loggable):
# Connect all the widget signals
self.treeview_selection.connect("changed", self._treeviewSelectionChangedCb)
- self.treeview.connect("drag-motion", self._dragMotionCb)
- self.treeview.connect("drag-leave", self._dragLeaveCb)
- self.treeview.connect("drag-data-received", self._dragDataReceivedCb)
+ self.connect("drag-motion", self._drag_motion_cb)
+ self.connect("drag-leave", self._drag_leave_cb)
+ self.connect("drag-data-received", self._drag_data_received_cb)
+ self.treeview.connect("drag-motion", self._drag_motion_cb)
+ self.treeview.connect("drag-leave", self._drag_leave_cb)
+ self.treeview.connect("drag-data-received", self._drag_data_received_cb)
self.treeview.connect("query-tooltip", self._treeViewQueryTooltipCb)
self.app.project_manager.connect_after(
"new-project-loaded", self._newProjectLoadedCb)
@@ -336,28 +345,38 @@ class EffectProperties(Gtk.Expander, Loggable):
effect.get_parent().remove(effect)
self._updateTreeview()
- # pylint: disable=too-many-arguments
- def _dragMotionCb(self, unused_tree_view, unused_drag_context, unused_x, unused_y, unused_timestamp):
+ def _drag_motion_cb(self, unused_widget, unused_drag_context, unused_x, unused_y, unused_timestamp):
+ """Highlights some widgets to indicate it can receive drag&drop."""
self.debug(
"Something is being dragged in the clip properties' effects list")
- self.drag_highlight()
+ self.no_effect_infobar.drag_highlight()
+ # It would be nicer to highlight only the treeview, but
+ # it does not seem to have a visible effect.
+ self._vbox.drag_highlight()
- def _dragLeaveCb(self, unused_tree_view, unused_drag_context, unused_timestamp):
- self.info(
+ def _drag_leave_cb(self, unused_widget, unused_drag_context, unused_timestamp):
+ """Unhighlights the widgets which can receive drag&drop."""
+ self.debug(
"The item being dragged has left the clip properties' effects list")
- self.drag_unhighlight()
+ self.no_effect_infobar.drag_unhighlight()
+ self._vbox.drag_unhighlight()
# pylint: disable=too-many-arguments
- def _dragDataReceivedCb(self, treeview, drag_context, x, y, selection_data, unused_info, timestamp):
+ def _drag_data_received_cb(self, widget, drag_context, x, y, selection_data, unused_info, timestamp):
if not self.clip:
# Indicate that a drop will not be accepted.
Gdk.drag_status(drag_context, 0, timestamp)
return
- dest_row = treeview.get_dest_row_at_pos(x, y)
+
+ dest_row = self.treeview.get_dest_row_at_pos(x, y)
if drag_context.get_suggested_action() == Gdk.DragAction.COPY:
# An effect dragged probably from the effects list.
factory_name = str(selection_data.get_data(), "UTF-8")
- drop_index = self.__get_new_effect_index(dest_row)
+ if widget is self.treeview:
+ drop_index = self.__get_new_effect_index(dest_row)
+ else:
+ drop_index = len(self.storemodel)
+ self.debug("Effect dragged at position %s", drop_index)
effect_info = self.app.effects.getInfo(factory_name)
pipeline = self._project.pipeline
with self.app.action_log.started("add effect",
@@ -370,7 +389,7 @@ class EffectProperties(Gtk.Expander, Loggable):
# An effect dragged from the same treeview to change its position.
# Source
source_index, drop_index = self.__get_move_indexes(
- dest_row, treeview.get_model())
+ dest_row, self.treeview.get_model())
self.__move_effect(self.clip, source_index, drop_index)
drag_context.finish(True, False, timestamp)
@@ -494,8 +513,9 @@ class EffectProperties(Gtk.Expander, Loggable):
to_append.append(effect_info.description)
to_append.append(effect)
self.storemodel.append(to_append)
- self.no_effect_infobar.set_visible(len(self.storemodel) == 0)
- self._vbox.set_visible(len(self.storemodel) > 0)
+ has_effects = len(self.storemodel) > 0
+ self.no_effect_infobar.set_visible(not has_effects)
+ self._vbox.set_visible(has_effects)
def _treeviewSelectionChangedCb(self, unused_treeview):
selection_is_emtpy = self.treeview_selection.count_selected_rows() == 0
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]