g_object_get_data changed data association



dear sir or madam,

i am developing applications with GTK+ and have some problem, following is some digest of my code.

=====================================
  store = gtk_list_store_new(NUMS_MAX_FORCE, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, 
G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
  g_object_set_data(G_OBJECT(window), "staad_max_force_store", store);
  printf("## start store memory=%p\n", g_object_get_data(G_OBJECT(window), "staad_max_force_store"));
  printf("## is store=%d\n", GTK_IS_LIST_STORE(store));
  printf("## name store=%s\n", G_OBJECT_TYPE_NAME(store));
=====================================

i install a list store by above codes. then i want to update the list store somewhere later.

=====================================
/* for debug */
  if(g_object_get_data(G_OBJECT(widget), "staad_max_force_store") == NULL)
    printf("NULL\n");
  else
  {
    printf("store memory=%p\n", g_object_get_data(G_OBJECT(widget), "staad_max_force_store"));
    printf("## name store=%s\n", G_OBJECT_TYPE_NAME(g_object_get_data(G_OBJECT(widget), 
"staad_max_force_store")));
  }

      while(curr_data)
      {
    i = 0;

    curr_item = curr_data->content;
    while(curr_item)
    {
      gtk_list_store_append(store, &iter);
      if(++i == 1)
      {
        gtk_list_store_set(store, &iter, MAX_FORCE_MEM_NUM, (local1 = char_to_utf8 (curr_data->mem_num)), 
MAX_FORCE_ITEM, (local2 = char_to_utf8 (curr_item->item)), MAX_FORCE_FX, (local3 = char_to_utf8 
(curr_item->FX)), MAX_FORCE_FY, (local4 = char_to_utf8 (curr_item->FY)), MAX_FORCE_FZ, (local5 = char_to_utf8 
(curr_item->FZ)), MAX_FORCE_MX, (local6 = char_to_utf8 (curr_item->MX)), MAX_FORCE_MY, (local7 = char_to_utf8 
(curr_item->MY)), MAX_FORCE_MZ, (local8 = char_to_utf8 (curr_item->MZ)), -1);         
        g_free(local8);
      }
      else
        gtk_list_store_set(store, &iter, MAX_FORCE_ITEM, (local1 = char_to_utf8 (curr_item->item)), 
MAX_FORCE_FX, (local2 = char_to_utf8 (curr_item->FX)), MAX_FORCE_FY, (local3 = char_to_utf8 (curr_item->FY)), 
MAX_FORCE_FZ, (local4 = char_to_utf8 (curr_item->FZ)), MAX_FORCE_MX, (local5 = char_to_utf8 (curr_item->MX)), 
MAX_FORCE_MY, (local6 = char_to_utf8 (curr_item->MY)), MAX_FORCE_MZ, (local7 = char_to_utf8 (curr_item->MZ)), 
-1);         
      g_free(local1);
      g_free(local2);
      g_free(local3);
      g_free(local4);
      g_free(local5);
      g_free(local6);
      g_free(local7);

      curr_item = curr_item->next;
    }
    curr_data = curr_data->next;
      }

=====================================

after using "g_object_get_data(G_OBJECT(widget), "staad_max_force_store")", i hope to get the store i defined 
at the beginning. but in fact i didn't get the list store, but something else -- instead of a list store. of 
course, the store can't be updated.

from my debug info, the data gotten from "g_object_get_data(G_OBJECT(widget), "staad_max_force_store")" has 
the same memory address with that defined "g_object_set_data(G_OBJECT(window), "staad_max_force_store", 
store);", but "G_OBJECT_TYPE_NAME(store)" changed.

so, i would like to know if there is hint to be used for "g_object_get_data" and "g_object_set_data". what 
could be the problem?

p.s.: in my program, there is public area -- a gtkbox to be used by all sub-program. if i always run the 
above sub-program, the problem mentioned above won't come up. but, if i run the above sub-program first, then 
change to another sub-program, and later i come back to the above sub-program, the above problem comes up. 
during this process, i used "gtk_widget_destroy" to destroy the widget of the first sub-program in the public 
area and build the widget for the next coming sub-program. i am wondering if the "gtk_widget_destroy" 
disturbs the data associations table.

i think my question is a little confusing because i could not describe the question clearly enough. i do hope 
you could read my words above and try to give me some suggestion. thanks a lot.

looking forward to your reply.

best regards,

wu yu
_________________________________________________________________
Keep your kids safer online with Windows Live Family Safety.
http://www.windowslive.com/family_safety/overview.html?ocid=TXT_TAGLM_WL_family_safety_072008


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