summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorGravatar waker <wakeroid@gmail.com>2012-10-08 22:30:50 +0200
committerGravatar waker <wakeroid@gmail.com>2012-10-08 22:30:50 +0200
commitb07ade8fa94036aeb1ffa6db4ca1ef182237ccc5 (patch)
treec3218985df099f84b7314d4fc94c69c76826f607 /plugins
parent4224404f39f6e570790d469fb5455fd8f2784014 (diff)
gtkui: playlist popup menu positioning WIP
Diffstat (limited to 'plugins')
-rw-r--r--plugins/gtkui/ddblistview.h3
-rw-r--r--plugins/gtkui/plcommon.c34
2 files changed, 36 insertions, 1 deletions
diff --git a/plugins/gtkui/ddblistview.h b/plugins/gtkui/ddblistview.h
index 143ef28c..f2ead8ce 100644
--- a/plugins/gtkui/ddblistview.h
+++ b/plugins/gtkui/ddblistview.h
@@ -266,6 +266,9 @@ ddb_listview_clear_sort (DdbListview *listview);
void
ddb_listview_lock_columns (DdbListview *lv, gboolean lock);
+int
+ddb_listview_get_row_pos (DdbListview *listview, int row_idx);
+
G_END_DECLS
#endif // __DDBLISTVIEW_H
diff --git a/plugins/gtkui/plcommon.c b/plugins/gtkui/plcommon.c
index c633cb60..aa1b0f8b 100644
--- a/plugins/gtkui/plcommon.c
+++ b/plugins/gtkui/plcommon.c
@@ -438,6 +438,38 @@ find_popup (GtkWidget *widget,
return found_widget;
}
+#if 0
+// experimental code to position the popup at the item
+static void
+popup_menu_position_func (GtkMenu *menu, gint *x, gint *y, gboolean *push_in, gpointer user_data) {
+ // find 1st selected item
+ DdbListview *lv = user_data;
+ int winx, winy;
+ gdk_window_get_position (gtk_widget_get_window (GTK_WIDGET (lv->list)), &winx, &winy);
+ DdbListviewIter it = lv->binding->head ();
+ int idx = 0;
+ while (it) {
+ if (lv->binding->is_selected (it)) {
+ break;
+ }
+ DdbListviewIter next = lv->binding->next (it);
+ lv->binding->unref (it);
+ it = next;
+ idx++;
+ }
+ if (it) {
+ // get Y position
+ *y = ddb_listview_get_row_pos (lv, idx) + winy;
+ lv->binding->unref (it);
+ }
+ else {
+ *y = winy; // mouse_y
+ }
+ *x = winx; // mouse_x
+ *push_in = TRUE;
+}
+#endif
+
void
list_context_menu (DdbListview *listview, DdbListviewIter it, int idx) {
clicked_idx = deadbeef->pl_get_idx_of (it);
@@ -652,7 +684,7 @@ list_context_menu (DdbListview *listview, DdbListviewIter it, int idx) {
g_signal_connect ((gpointer) properties1, "activate",
G_CALLBACK (main_properties_activate),
NULL);
- gtk_menu_popup (GTK_MENU (playlist_menu), NULL, NULL, NULL, listview, 0, gtk_get_current_event_time());
+ gtk_menu_popup (GTK_MENU (playlist_menu), NULL, NULL, NULL/*popup_menu_position_func*/, listview, 0, gtk_get_current_event_time());
}
void