summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorGravatar Alexey Yakovenko <wakeroid@gmail.com>2010-05-26 20:12:19 +0200
committerGravatar Alexey Yakovenko <wakeroid@gmail.com>2010-05-26 20:12:19 +0200
commit165c52fa38948e52ddeaca2bf824760989ccc3dd (patch)
tree8b82930f8ba0d843c39ca94086242cec8fe01f5c /plugins
parented7386e42133dc2251b361b443347cdd2aa6887e (diff)
redraw playlist dnd marker in expose event
Diffstat (limited to 'plugins')
-rw-r--r--plugins/gtkui/ddblistview.c46
1 files changed, 33 insertions, 13 deletions
diff --git a/plugins/gtkui/ddblistview.c b/plugins/gtkui/ddblistview.c
index 0412581b..dc6e6952 100644
--- a/plugins/gtkui/ddblistview.c
+++ b/plugins/gtkui/ddblistview.c
@@ -302,6 +302,7 @@ ddb_listview_init(DdbListview *listview)
// listview->areaselect_dx = -1;
// listview->areaselect_dy = -1;
listview->dragwait = 0;
+ listview->drag_source_playlist = -1;
listview->shift_sel_anchor = -1;
listview->header_dragging = -1;
@@ -718,13 +719,34 @@ ddb_listview_list_expose_event (GtkWidget *widget,
return FALSE;
}
+static void
+ddb_listview_draw_dnd_marker (DdbListview *ps) {
+ if (ps->drag_motion_y < 0) {
+ return;
+ }
+ int drag_motion_y = ps->drag_motion_y - ps->scrollpos;
+
+ GtkWidget *widget = ps->list;
+ GdkColor clr;
+ gtkui_get_listview_cursor_color (&clr);
+ GdkGC *gc = gdk_gc_new (widget->window);
+ gdk_gc_set_rgb_fg_color (gc, &clr);
+ gdk_draw_rectangle (widget->window, gc, TRUE, 0, drag_motion_y-1, widget->allocation.width, 3);
+ gdk_draw_rectangle (widget->window, gc, TRUE, 0, drag_motion_y-3, 3, 7);
+ gdk_draw_rectangle (widget->window, gc, TRUE, widget->allocation.width-3, drag_motion_y-3, 3, 7);
+ g_object_unref (gc);
+
+}
+
void
ddb_listview_list_expose (DdbListview *listview, int x, int y, int w, int h) {
-// printf ("listview height: %d\n", listview->list->allocation.height);
GtkWidget *widget = listview->list;
if (widget->window && listview->backbuf) {
draw_drawable (widget->window, widget->style->black_gc, listview->backbuf, x, y, x, y, w, h);
}
+ if (listview->drag_motion_y >= 0 && listview->drag_motion_y-listview->scrollpos-3 < y+h && listview->drag_motion_y-listview->scrollpos+3 >= y) {
+ ddb_listview_draw_dnd_marker (listview);
+ }
}
gboolean
@@ -1952,31 +1974,29 @@ ddb_listview_list_track_dragdrop (DdbListview *ps, int y) {
GtkWidget *widget = ps->list;
if (ps->drag_motion_y != -1) {
// erase previous track
- draw_drawable (widget->window, widget->style->black_gc, ps->backbuf, 0, ps->drag_motion_y-3, 0, ps->drag_motion_y-3, widget->allocation.width, 7);
+ draw_drawable (widget->window, widget->style->black_gc, ps->backbuf, 0, ps->drag_motion_y-3-ps->scrollpos, 0, ps->drag_motion_y-ps->scrollpos-3, widget->allocation.width, 7);
}
+ if (y == -1) {
+ ps->drag_motion_y = -1;
+ return;
+ }
int sel = ddb_listview_dragdrop_get_row_from_coord (ps, y);
if (sel == -1) {
if (ps->binding->count () == 0) {
ps->drag_motion_y = 0;
}
else {
- ps->drag_motion_y = ddb_listview_get_row_pos (ps, ps->binding->count ()-1) - ps->scrollpos + ps->rowheight;
+ // after last row
+ ps->drag_motion_y = ddb_listview_get_row_pos (ps, ps->binding->count ()-1) + ps->rowheight;
}
}
else {
- ps->drag_motion_y = ddb_listview_get_row_pos (ps, sel) - ps->scrollpos;
+ ps->drag_motion_y = ddb_listview_get_row_pos (ps, sel);
}
- GdkColor clr;
- gtkui_get_listview_cursor_color (&clr);
- GdkGC *gc = gdk_gc_new (widget->window);
- gdk_gc_set_rgb_fg_color (gc, &clr);
- gdk_draw_rectangle (widget->window, gc, TRUE, 0, ps->drag_motion_y-1, widget->allocation.width, 3);
- gdk_draw_rectangle (widget->window, gc, TRUE, 0, ps->drag_motion_y-3, 3, 7);
- gdk_draw_rectangle (widget->window, gc, TRUE, widget->allocation.width-3, ps->drag_motion_y-3, 3, 7);
- g_object_unref (gc);
-
+ ddb_listview_draw_dnd_marker (ps);
+
if (y < 10) {
ps->scroll_pointer_y = y;
ps->scroll_mode = 1;