On Thu, 2008-06-12 at 11:12 +0200, Kees Scherpenhuijzen wrote: > 2008/6/12, James Scott Jr <[EMAIL PROTECTED]>: > > Kees, > > > > I cannot seem figure out what your trying to do. The code I see in the > > notes is not something I understand; and I am an experienced gtk > > developer. > > > > Please back away from the code for a minute and try to describe what it > > is your trying to achieve with this interface or application that > > spawned this series of notes. I'm hoping you just started off > > completely wrong with the wrong assumptions about how to achieve your > > goal. In which case I/we can put you back on track. But for now I > > cannot keep up. > > > > Why do I say this? > > 1. "i trying to make an object inherited from GTK_ACTION, this all is > > managed." > > Response: > > * If you want to inherit from GTK_ACTION you make a completely new > > widget. Look for info on writing widgets from scratch. > > > > * Wrapping a function around a g_object_new as you have done in both > > examples is miss-leading at best. You cannot make an existing > > gtk_object do something it was not designed to; i.e. add a struct in its > > object_new() parms. You can g_object_set|get_data() on an existing > > object; register a function for signal from an object so you can modify > > its external behaviour, on and on... > > > > Ok. Back to "tell me what your trying to do?" > > > > James, > > > > > > > > > > On Wed, 2008-06-11 at 23:54 +0200, Kees Scherpenhuijzen wrote: > > > 2008/5/14 Kees Scherpenhuijzen <[EMAIL PROTECTED]>: > > > > heyy, > > > > > > > > @ the moment i trying to make an object inherited from GTK_ACTION, > > > > this all is managed. > > > > Only now i'm trying to initialize the object with an variable, a > > > > struct. Ie read the manual about the wrapper that is used, only i > > > > can't seem > > > > to find a way in which i can add the struct to g_object_new or > > > > otherwise. > > > > > > > > to be clear, in this function: > > > > GtkAction* > > > > menu_action_new (const gchar *name, > > > > const gchar *label) > > > > { > > > > GtkAction* action; > > > > _thunar_return_val_if_fail (name != NULL, NULL); > > > > _thunar_return_val_if_fail (label != NULL, NULL); > > > > > > > > action = g_object_new (MENU_TYPE_ACTION, > > > > "hide-if-empty", FALSE, > > > > "label", label, > > > > "name", name, > > > > NULL); > > > > return action; > > > > } > > > > > > > > i want to add the struct so i don't need any get of set functions, is > > > > this possible? > > > > > > > > the thing i want to do is to init : > > > > menu_thing *item; > > > > in: > > > > struct _MenuTemplatesAction > > > > { > > > > GtkAction __parent__; > > > > menu_thing *item; > > > > }; > > > > > > > > I hope this enough info to get me close to an answer > > > > > > > > > > > > -- > > > > Kees > > > > > > > > > > Hi, > > > > > > I've saw some examples about this problem and tried it with no luck. i > > > saw that the object was cast and just added. > > > i've tried: > > > GtkAction* > > > menu_action_new (const gchar *name, > > > const gchar *label, > > > Model *model) > > > { > > > GtkAction* action; > > > _thunar_return_val_if_fail (name != NULL, NULL); > > > _thunar_return_val_if_fail (label != NULL, NULL); > > > > > > action = g_object_new (MENU_TYPE_ACTION, > > > "hide-if-empty", FALSE, > > > "label", label, > > > "name", name, > > > NULL); > > > > > > MENU_ACTION(action)->items = model; > > > > > > if(G_TYPE_FUNDAMENTAL (action) == G_TYPE_OBJECT) > > > { > > > g_message(model->menu->name); > > > g_message(action->items); > > > g_message("test"); > > > } > > > return action; > > > } > > > but it seems the second g_message won't print, it gives an segmentation > > > fault. > > > > > > extra info: #define MENU_ACTION(obj) > > > (G_TYPE_CHECK_INSTANCE_CAST ((obj), MENU_TYPE_ACTION, > > > MenuTemplatesAction)) > > > > > > What am i missing here? > > > > > > Thanks in advance > > > > > > > > Hey, > > I'm sorry if i'm not clear enough. maybe it's my english :P. > > But to make everything clear: > I'm trying to make a widget which can make menuitems out of a struct. > The struct isn't thought out so i'm not getting to deep in that. > The template i'm rewriting is found @ > http://svn.xfce.org/svn/xfce/thunar/trunk/thunar/thunar-templates-action.c > > What i'm trying to is when the action is created, I wan't to > initialize the object with a variable, so when the object is > shown(thunar_templates_action_menu_shown is used) the variable(struct) > is initialized. > > I hope this clears the situation a bit. > > And thanks for the help
Kees, Your English is fine. It was really the code throwing me off. I will try to answer some of the memory related questions first. Assuming you want to add a pointer, to a gtk_action object, of an allocated memory structure containing instance data; there are two ways I can thing of getting that done before writing my own widget -- which makes all things possible. 1. Create the gtk_action first then append a user-data pointer to the object with g_object_set_data() or g_object_set_data_full(). The full varient frees the allocated memory when the object is destroyed. 2. Most certainly we will connect a routine to the "activate" signal of the gtk_action object. When we connect the signal attach a pointer to our user-data to the signal using g_object_connect(); typedef struct _your_struct { gchar my_string[50]; GtkWidget *my_widget; gpointer reserved; } your_struct; typedef your_struct *ptr_your_struct; object = gtk_action_new(); gpointer gptr_your_struct = g_new0(your_struct,1); Item 1. g_object_set_data(object,"any-but-same-label", gptr_your_struct) ... gptr_your_struct = g_object_get_data(object,"any-but-same-label") Item 2. g_object_connect(object, "activate",fn_handler, gptr_your_struct, NULL); ... void fn_handler(GtkAction *action, gpointer user_data) { gptr_your_struct pData = NULL; pData = (gptr_your_struct)user_data; ... g_message ("My data is %s", pData->my_string); ... } These methods work. Now if the above is not enough functionality then you will be creating your own true Widget. For that all I can say is "Creating a GTK widget from scratch" is already will documented. However, look over the tools gtk-demo (its likely already installed), and devhelp (local api documentation). Why the segfault? I need to see more code before I can say definitively - but it seems your approach to menu_action_new() is incorrect, as is your attempt at creating a widget. There is more code and structure to creating a widget. The one or two routines you posted is not enough for me (maybe someone else). I think the whole (widget) thing with the header will be needed, please post more code so I can see the structure of the whole widget. Here is a hint: menu_action_new(0 should create a menu_action object first! then inside the class init routine create any supporting objects, like the gtk_action. James, _______________________________________________ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list