chiark / gitweb /
Make multidrag a bit more independent of Disobedience
[disorder] / disobedience / queue-generic.h
index 9a493e8dbe5edc42b888dd804e9b44b95b15eb41..c15b3834b6fb4facf9758d88ded2dd585f40f218 100644 (file)
@@ -15,6 +15,9 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
+/** @file disobedience/queue-generic.h
+ * @brief Disobedience queue widgets
+ */
 #ifndef QUEUE_GENERIC_H
 #define QUEUE_GENERIC_H
 
@@ -52,7 +55,7 @@ struct queuelike {
   const char *name;
   
   /** @brief Initialization function */
-  void (*init)(void);
+  void (*init)(struct queuelike *ql);
 
   /** @brief Columns */
   const struct queue_column *columns;
@@ -87,6 +90,22 @@ struct queuelike {
 
   /** @brief Menu callbacks */
   struct tabtype tabtype;
+
+  /** @brief Drag-drop callback, or NULL for no drag+drop
+   * @param ql Owning queuelike
+   * @param ntracks Number of tracks to be dropped
+   * @param tracks List of track names
+   * @param ids List of track IDs
+   * @param after_me Drop after this or NULL to drop at head
+   *
+   * If the rearrangement is impossible then the displayed queue must be put
+   * back.
+   */
+  void (*drop)(struct queuelike *ql, int ntracks, char **tracks, char **ids,
+               struct queue_entry *after_me);
+
+  /** @brief Stashed drag target row */
+  GtkTreePath *drag_target;
 };
 
 enum {
@@ -131,6 +150,9 @@ void ql_remove_activate(GtkMenuItem *menuitem,
 int ql_play_sensitive(void *extra);
 void ql_play_activate(GtkMenuItem *menuitem,
                       gpointer user_data);
+int ql_adopt_sensitive(void *extra);
+void ql_adopt_activate(GtkMenuItem *menuitem,
+                       gpointer user_data);
 gboolean ql_button_release(GtkWidget *widget,
                            GdkEventButton *event,
                            gpointer user_data);
@@ -151,6 +173,8 @@ const char *column_length(const struct queue_entry *q,
 struct tabtype *ql_tabtype(struct queuelike *ql);
 struct queue_entry *ql_iter_to_q(GtkTreeModel *model,
                                  GtkTreeIter *iter);
+struct queue_entry *ql_path_to_q(GtkTreeModel *model,
+                                 GtkTreePath *path);
 
 #endif /* QUEUE_GENERIC_H */