I'm having a problem accessing data in a GtkList.
I created the widgets and callbacks with Glade and
added code to access the data. Here is a short
description of what the code is doing. 


The GtkList shm_list_widget is created inside the dataset_window.
The shm_list_widget is loaded in load_shm_list_widget().
The selected items in shm_list_widget should be accessed in
on_shm_list_widget_selection_changed(), but I keep on getting
item_str = NULL when I try to access the data with
gtk_object_get_data().  

Can anybody tell me what I'm doing wrong?????

The relevant code is:

static const gchar *ShmListKey = "ShmListKey";
static const gchar *ShmListKey = "ShmItemKey";

static GtkWidget *SHM_list_widget = NULL;  

/*-------------------------------------------------------------------------
-- void load_shm_list_widget(): Loads the GtkList shm_list_widget
-- void open_dataset_window(): Opens the Data Set Developer window
---------------------------------------------------------------------------*
/

void load_shm_list_widget(GtkWidget *tgt_window, FILE *fp)
{
   GtkWidget *local_shm_list = NULL;  
   GList *gl_list = NULL;     

   int i=0, knt=0;
   static int list_loaded = FALSE;
 
   gchar line[LNSZ], cbuff[20];
   gint  lknt = 0;

   line[0] = 0x0; cbuff[0] = 0x0;

   /*----------------------------------------------------------
   -- Create GtkListItem local_shm_list
   ------------------------------------------------------------*/

   if( local_shm_list == NULL )
       local_shm_list = gtk_list_item_new();

   /*-------------------------------------------------------------
   -- Attach to the shared memory list (shm_list) in the tgt_window
   ---------------------------------------------------------------*/

   SHM_list_widget = lookup_widget(tgt_window, "shm_list_widget");

   /*----------------------------------------------------------
   -- Check if the ***.univ file was previously read.
   ------------------------------------------------------------*/

   if( list_loaded == FALSE )
   {
       for(;;)
       {
         clean_str(20, cbuff);
         for(i=0; i < 19; i++) cbuff[i] = univ[knt].name[i];

         local_shm_list = gtk_list_item_new_with_label(cbuff);
         gl_list = g_list_append(gl_list, local_shm_list);
         gtk_widget_show(local_shm_list);
         gtk_object_set_data(GTK_OBJECT(local_shm_list), ShmListKey, "Shm
Segment");

         knt++;
         lknt++;
         if( univ[knt].name[0] == NULL) break;
       } 
        
     } /* End of section to load data from univ file */

     list_loaded = TRUE;

     gtk_list_append_items(GTK_LIST(SHM_list_widget), gl_list);

   } /* End of check for previously loaded ***.univ file */

   return;

} /* End of load_shm_list_widget() */


static void open_dataset_window(GtkWidget *dc_topLevel)
{
  /*-------------------------------------------------------------
  -- Create window if necessary
  ---------------------------------------------------------------*/

  if( open_dataset_win == NULL )
    open_dataset_win = create_dataset_window();

   /*-------------------------------------------------------------
   -- We save a pointer to the main window inside the file
   -- selection's data list, so we can get it easily in the callbacks.
   ---------------------------------------------------------------*/

  gtk_object_set_data (GTK_OBJECT (open_dataset_win), DataSetKey,
dc_topLevel);

  gtk_widget_show (open_dataset_win);
  gdk_window_raise (open_dataset_win->window);

  /*------------------------------------------------------------------------
  -- If the ***.univ file was loaded, show the data in the shm_list_widget
 
---------------------------------------------------------------------------*
/

  if( univ[0].name[0] != NULL )
      load_shm_list_widget(open_dataset_win, NULL);

}

/*-------------------------------------------------------------------------
-- Called from gtk_signal_connect() with list = shm_list_widget 
--                                       user_data = NULL
-- on_shm_list_widget_selection_change():
---------------------------------------------------------------------------*
/

void on_shm_list_widget_selection_changed(GtkList *list, gpointer user_data)
{
  GtkList *temp_list;
  GList *dlist;
  gchar *item_str = NULL;

  temp_list = list;

  dlist = GTK_LIST(temp_list)->selection;

  if( dlist == NULL ) return;

  item_str = gtk_object_get_data(dlist->data, ShmItemKey);

  g_print("Selected string: %s \n", item_str);
  g_print("Selection:%d \n", &dlist->data);

  return;
}


Cheers.....
Rick Esquibel
Embedded Software/Engineer
5000 E. McDowell Road
Mesa, AZ 85215-9797
(480) 891-8423
[EMAIL PROTECTED]

_______________________________________________
Glade-devel maillist  -  [EMAIL PROTECTED]
http://lists.helixcode.com/mailman/listinfo/glade-devel

Reply via email to