我正在尝试实施拖放功能我的gtk-gui的丢弃行为。
使用下面的代码我可以拖动一个按钮...我不知道如何将拖动的按钮回滚到原来的位置,如果它被丢弃的地方。 (到目前为止,我没有指定gtk_drag_dest
)。这是我的代码的相关片段:
GtkTargetEntry targetEntry;
void on_drag_end(GtkWidget *widget, GdkDragContext *context,GtkWidget *box)
{
gtk_container_add(GTK_CONTAINER(box),widget);
}
void on_drag_begin(GtkWidget *widget, GdkDragContext *context,GtkWidget *box)
{
gtk_container_remove(GTK_CONTAINER(box),widget);
gtk_drag_set_icon_widget ( context, widget, 1, 1);
}
void myFunc(GtkWidget *mainTable, ...)
{
GtkWidget *box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL,0);
gtk_container_add (GTK_CONTAINER (mainTable), box);
GtkWidget *button = gtk_button_new_with_label ("X");
g_signal_connect(button, "drag-begin",G_CALLBACK(on_drag_begin),box);
g_signal_connect(button, "drag-end",G_CALLBACK(on_drag_end),box);
gtk_drag_source_set(button,GDK_BUTTON1_MASK,&targetEntry,1,GDK_ACTION_MOVE);
gtk_container_add (GTK_CONTAINER (box), button);
}
当我在gtk_container_add
中调用拖动on_drag_end
时释放鼠标按钮时出现以下错误:
Gtk-WARNING **:尝试将类型为GtkButton的小部件添加到 GtkBox类型的容器,但小部件已经在容器内 GtkWindow类型,请从现有的小部件中删除 容器第一。
那么如何从拖放窗口中删除按钮?我可以从上下文中以某种方式获得拖放窗口吗?
修改
如果我像这样修改on_drag_end
:
void on_drag_end(GtkWidget *widget, GdkDragContext *context,GtkWidget *box)
{
GtkWidget *parent = gtk_widget_get_parent(widget);
gtk_container_remove(GTK_CONTAINER(parent),widget);
gtk_container_add(GTK_CONTAINER(box),widget);
}
gtk_container_remove
上会弹出一个不同的错误:
(cron-gui:3319):Gtk-CRITICAL **:gtk_bin_remove:断言 'priv->孩子==孩子'失败