Sebastian,
    Empiezo por aclarar que no soy esperto, pero quizas ayude...
    Por lo que veo el cout lo haces en on_event_drag_data_get, el tema es
que creo que este se llama cuando otro control acepta el drop, y en el
codigo que mandaste todavia nadie lo esta aceptando.
    Eso se maneja con la parte de los targuets
    Proba 2 cosas:
      1. buscar el evento de cuando inicia el drag y tirar el cout ahi como
para ver si esta pasando
      2. revisar el codigo que acepta el drop a ver si esta aceptando el
targuet que le pasas.

 Saludos

On 5/25/07, Sebastian Durandeu <[EMAIL PROTECTED]> wrote:

Perdon, salio cortado...(es la hora...)
Tengo un código que no me funciona la vdd no tengo la menor idea de que
esta pasando o que moco me estaré mandando.
Si alguien tiene ganas y paciencia y puede mirarlo, agradecería!

La cosa es asi, tengo una calse Drag_Object que tiene el comportamiento
básico para obtener un string cuando ocurre un drag en un EventBox.
En los hijos quiero redefinir la función  std::string obtener_info_drag()
para que cada hijo me de un string diferente.

class Drag_Object: public Gtk::EventBox{

private:
    /*Tipos de datos de drag*/
    std::list<Gtk::TargetEntry> listTargets;

public:

    Drag_Object(BaseObjectType* cobject, const
Glib::RefPtr<Gnome::Glade::Xml>&);

    virtual void on_event_drag_data_get(
        const Glib::RefPtr<Gdk::DragContext>&,
        Gtk::SelectionData& selection_data, guint, guint);

    /*Metodo de obtención de la información de Drag
     * Se redefine en los hijos de donde se realiza el drag*/
    virtual std::string obtener_info_drag() = 0;

    virtual ~Drag_Object(){};

};

Drag_Object::Drag_Object(BaseObjectType* cobject, const
Glib::RefPtr<Gnome::Glade::Xml>&):Gtk::EventBox(cobject){

      this->listTargets.push_back( Gtk::TargetEntry("STRING") );
      this->listTargets.push_back( Gtk::TargetEntry("text/plain") );

      /*Hago que el event box sea una fuente de drag*/
      this->drag_source_set(listTargets);

      /*Conecto la señal de drag con el metodo de obtener la
       * info de drag*/
      this->signal_drag_data_get().connect(sigc::mem_fun(*this,
              &Drag_Object::on_event_drag_data_get));

}

void Drag_Object::on_event_drag_data_get(
        const Glib::RefPtr<Gdk::DragContext>&,
        Gtk::SelectionData& selection_data, guint, guint){

        std::string info = this->obtener_info_drag();
        std::cout<<info<<std::endl;           --------------------->  ACA
NO LLEGA NADA (vacio)!


//       /*Obtengo la informacion de drag*/
//       std::string info;// = *this->obtener_infos_drag();
//
//        /*Devuelvo la informacion de drag al objeto donde se realizo el
Drop*/
//        selection_data.set(selection_data.get_target(), 8 /* 8 bits
format */,
//          (const guchar*)info.c_str(),
//          info.size() /* largo de la informacion */);

}
------------------------------------------------------------------------------------------------------

CLASE HIJA (la instancio a partir de un get_widget_derived() de
liblgademm)

class DerDragSinPlantar: public Drag_Object{

public:

    const static std::string drag_tag;

    DerDragSinPlantar(BaseObjectType* cobject, const
Glib::RefPtr<Gnome::Glade::Xml>& refGlade)
        :Drag_Object(cobject,refGlade){}

    virtual std::string obtener_infos_drag() { return drag_tag; };

    virtual ~DerDragSinPlantar(){}
};

const std::string DerDragSinPlantar::drag_tag = "sin_plantar";

La cuestion es que probe cambiar el std::string que devuelve la funcion
por int (tb por Glib:ustring) para hacerlo mas simple y directamente pincha
el programa cuando hago el drag & drop.
Cualquier sugerencia es bienvenida...
No me parece demasiado complicado, pero hay otras formas mas faciles de
hacerlo....
Ahora....porque no anda!?? jeje

Muchas Gracias!!
sebastian

_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion


_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion

Responder a