diff options
author | waker <wakeroid@gmail.com> | 2012-10-08 22:30:50 +0200 |
---|---|---|
committer | waker <wakeroid@gmail.com> | 2012-10-08 22:30:50 +0200 |
commit | b07ade8fa94036aeb1ffa6db4ca1ef182237ccc5 (patch) | |
tree | c3218985df099f84b7314d4fc94c69c76826f607 /plugins/gtkui | |
parent | 4224404f39f6e570790d469fb5455fd8f2784014 (diff) |
gtkui: playlist popup menu positioning WIP
Diffstat (limited to 'plugins/gtkui')
-rw-r--r-- | plugins/gtkui/ddblistview.h | 3 | ||||
-rw-r--r-- | plugins/gtkui/plcommon.c | 34 |
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 |