glom r1616 - in trunk: . glom/utility_widgets



Author: jhs
Date: Thu May 22 14:20:32 2008
New Revision: 1616
URL: http://svn.gnome.org/viewvc/glom?rev=1616&view=rev

Log:
2008-05-22  Johannes Schmid  <johannes schmid openismus com>

	* glom/utility_widgets/flowtable_dnd.cc:
	* glom/utility_widgets/flowtable_dnd.h:
	Fixed some crashers when starting a drag from no item

Modified:
   trunk/ChangeLog
   trunk/glom/utility_widgets/flowtable_dnd.cc
   trunk/glom/utility_widgets/flowtable_dnd.h

Modified: trunk/glom/utility_widgets/flowtable_dnd.cc
==============================================================================
--- trunk/glom/utility_widgets/flowtable_dnd.cc	(original)
+++ trunk/glom/utility_widgets/flowtable_dnd.cc	Thu May 22 14:20:32 2008
@@ -77,7 +77,6 @@
   child.signal_drag_end().connect (sigc::bind<Gtk::Widget*>(sigc::mem_fun (*this, &FlowTableDnd::on_child_drag_end), &child), false);
   child.signal_drag_data_get().connect (sigc::bind<Gtk::Widget*>(sigc::mem_fun (*this, &FlowTableDnd::on_child_drag_data_get), &child), false);
   child.signal_drag_data_delete().connect (sigc::bind<Gtk::Widget*>(sigc::mem_fun (*this, &FlowTableDnd::on_child_drag_data_delete), &child), false);
-  
   if (!(child.get_flags() & Gtk::NO_WINDOW))
   { 
     std::list<Gtk::TargetEntry> drag_targets;
@@ -382,12 +381,13 @@
 {
   FlowTableItem* item = find_current_dnd_item (child);
   LayoutWidgetBase* base = dnd_datawidget_from_item (item);
+  gpointer data = 0;
   if (base)
   {
-    gpointer data = base;
-    selection_data.set ("LayoutWidgetBase*", 8, (guint8*)&data, 
-                             sizeof(gpointer*));
+    data = base;
   }
+  selection_data.set ("LayoutWidgetBase*", 8, (guint8*)&data, 
+                      sizeof(gpointer*));
 }
 
 void FlowTableDnd::on_child_drag_begin (const Glib::RefPtr<Gdk::DragContext>& drag_context,
@@ -396,6 +396,7 @@
   FlowTableItem* item = find_current_dnd_item (child);
   if (!item)
   {
+    gdk_drag_abort (drag_context->gobj(), 0);
     return;
   }
   if (item->m_first)
@@ -410,6 +411,8 @@
                         Gtk::Widget* child)
 {
   FlowTableItem* item = find_current_dnd_item (child);
+  if (!item)
+    return;
   LayoutWidgetBase* base = dnd_datawidget_from_item (item);
   if (base->get_dnd_in_progress())
   {

Modified: trunk/glom/utility_widgets/flowtable_dnd.h
==============================================================================
--- trunk/glom/utility_widgets/flowtable_dnd.h	(original)
+++ trunk/glom/utility_widgets/flowtable_dnd.h	Thu May 22 14:20:32 2008
@@ -44,7 +44,6 @@
   virtual bool on_drag_motion(const Glib::RefPtr<Gdk::DragContext>& drag_context, int x, int y, guint time);
   virtual void on_drag_leave(const Glib::RefPtr<Gdk::DragContext>& drag_context, guint time);
   virtual void on_drag_data_received(const Glib::RefPtr<Gdk::DragContext>& drag_context, int, int, const Gtk::SelectionData& selection_data, guint, guint time);
-    
   virtual bool on_child_drag_motion(const Glib::RefPtr<Gdk::DragContext>& drag_context, int x, int y, guint time, Gtk::Widget* child);
   virtual void on_child_drag_leave(const Glib::RefPtr<Gdk::DragContext>& drag_context, guint time);
   virtual void on_child_drag_data_received(const Glib::RefPtr<Gdk::DragContext>& drag_context, int, int, 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]