void connect_help (GtkBuilder *xml) { GSList *helps = gtk_builder_get_objects (xml); GSList *i; for ( i = helps; i ; i = g_slist_next (i)) { GObject *o = i->data; if ( GTK_IS_WIDGET (o) ) { const gchar *name = gtk_buildable_get_name (GTK_BUILDABLE (o)); gchar s[12] = {0}; if ( name) strncpy (s, name, 11); s[11] = '\0'; if ( 0 == strcmp ("help_button", s)) { g_signal_connect (o, "clicked", give_help, 0); } } } g_slist_free (helps); }
/** This function builds a hash table of "interesting" widgets, * i.e. widgets whose name starts with "pref/". This table is * needed to perform name->widget lookups when binding the widgets * to their matching preferences. * * @internal * * @param builder A pointer to builder glade file currently being * added to the dialog. * * @param dialog A pointer to the dialog. The hash table is stored * as a pointer off the dialog so that it can be found in the binding * code. */ static void gnc_prefs_build_widget_table (GtkBuilder *builder, GtkWidget *dialog) { GHashTable *prefs_table; GSList *interesting, *runner; const gchar *name; const gchar *wname; GtkWidget *widget; prefs_table = g_object_get_data(G_OBJECT(dialog), PREFS_WIDGET_HASH); interesting = gtk_builder_get_objects(builder); for (runner = interesting; runner; runner = g_slist_next(runner)) { widget = runner->data; if (GTK_IS_WIDGET(widget)) { wname = gtk_widget_get_name(widget); name = gtk_buildable_get_name(GTK_BUILDABLE(widget)); DEBUG("Widget type is %s and buildable get name is %s", wname, name); if (g_str_has_prefix (name, "pref")) g_hash_table_insert(prefs_table, (gchar *)name, widget); } } g_slist_free(interesting); }
static GObject * get_toplevel (GtkBuilder *builder, gchar *name) { GObject *toplevel = NULL; GObject *object; if (name == NULL) { GSList *l, *objects = gtk_builder_get_objects (builder); /* Iterate trough objects and search for a window or widget */ for (l = objects; l; l = g_slist_next (l)) { GObject *obj = l->data; if (!GTK_IS_WIDGET (obj) || gtk_widget_get_parent (GTK_WIDGET (obj))) continue; if (toplevel == NULL) toplevel = obj; else if (GTK_IS_WINDOW (obj)) toplevel = obj; } g_slist_free (objects); if (toplevel == NULL) { g_printerr (_("UI definition has no previewable widgets.\n")); exit (1); } } else { object = gtk_builder_get_object (builder, name); if (object == NULL) { g_printerr (_("Object %s not found in UI definition.\n"), name); exit (1); } if (!GTK_IS_WIDGET (object)) { g_printerr (_("Object is not previewable.\n")); exit (1); } toplevel = object; } return g_object_ref_sink (toplevel); }
GtkWidget* gtk_builder_find_menu_item(GtkBuilder* builder, const gchar* name) { GSList* objects = gtk_builder_get_objects(builder); GSList* object = objects; GtkWidget* rv = NULL; while (object != NULL) { const gchar* type_name = G_OBJECT_TYPE_NAME ((GObject*) object->data); GtkWidget* gtw = (GtkWidget*) object->data; //X printf("name=%s node=%s\n", name, gtk_widget_get_name(gtw)); if (strcmp (name, gtk_widget_get_name(gtw)) == 0) { rv = gtw; break; } object = object->next; } g_slist_free (objects); return rv; }
static GtkWidget * builder_get_toplevel (GtkBuilder *builder) { GSList *list, *walk; GtkWidget *window = NULL; list = gtk_builder_get_objects (builder); for (walk = list; walk; walk = walk->next) { if (GTK_IS_WINDOW (walk->data) && gtk_widget_get_parent (walk->data) == NULL) { window = walk->data; break; } } g_slist_free (list); return window; }
int main (int argc, char *argv[]) { GtkBuilder *builder; GtkWidget *window; GSList *o, *l; GtkWidget *widget; AtkObject *accessible; gtk_init (&argc, &argv); builder = gtk_builder_new (); gtk_builder_add_from_file (builder, argv[1], NULL); window = (GtkWidget *)gtk_builder_get_object (builder, "window1"); o = gtk_builder_get_objects (builder); for (l = o; l;l = l->next) { if (!GTK_IS_WIDGET (l->data)) continue; widget = l->data; g_signal_connect (widget, "notify::has-focus", G_CALLBACK (notify_cb), NULL); accessible = gtk_widget_get_accessible (widget); g_signal_connect (accessible, "state-change::focused", G_CALLBACK (state_change_cb), NULL); } g_slist_free (o); g_timeout_add (100, compare_focus, NULL); gtk_widget_show (window); gtk_main (); return 0; }
void app_init (App * app) { GError *err = NULL; app->definitions = gtk_builder_new (); gtk_builder_add_from_file (app->definitions, UI_DEFINITIONS_FILE, &err); if (err != NULL) { g_printerr ("Error while loading app definitions file: %s\n", err->message); g_error_free (err); gtk_main_quit (); } gtk_builder_connect_signals (app->definitions, app); app->objects = gtk_builder_get_objects (app->definitions); app_init_colors (app); }
/** * go_gtk_builder_load: * @uifile: the name of the file load * @domain: the translation domain * @gcc: #GOCmdContext * * Simple utility to open ui files * * Since 0.9.6 * Returns: (transfer full): a new #GtkBuilder or NULL * * @uifile should be one of these: * * res:NAME -- data from resource manager * data:DATA -- data right here * filename -- data from local file * * Data may be compressed, regardless of source. **/ GtkBuilder * go_gtk_builder_load (char const *uifile, char const *domain, GOCmdContext *gcc) { GtkBuilder *gui; GError *error = NULL; gboolean ok = FALSE; g_return_val_if_fail (uifile != NULL, NULL); gui = gtk_builder_new (); if (domain) gtk_builder_set_translation_domain (gui, domain); if (strncmp (uifile, "res:", 4) == 0) { size_t len; gconstpointer data = go_rsm_lookup (uifile + 4, &len); GsfInput *src = data ? gsf_input_memory_new (data, len, FALSE) : NULL; ok = apply_ui_from_file (gui, src, NULL, &error); } else if (strncmp (uifile, "data:", 5) == 0) { const char *data = uifile + 5; GsfInput *src = gsf_input_memory_new (data, strlen (data), FALSE); ok = apply_ui_from_file (gui, src, NULL, &error); } else { /* we need to set the current directory so that the builder can find pixbufs */ GsfInput *src = gsf_input_stdio_new (uifile, &error); ok = apply_ui_from_file (gui, src, uifile, &error); } if (!ok) { g_object_unref (gui); gui = NULL; } if (gui == NULL && gcc != NULL) { char *msg; if (error) { msg = g_strdup (error->message); g_error_free (error); } else msg = g_strdup_printf (_("Unable to open file '%s'"), uifile); go_cmd_context_error_system (gcc, msg); g_free (msg); } else if (error) g_error_free (error); if (gui && go_debug_flag ("leaks")) { GSList *l, *objs = gtk_builder_get_objects (gui); for (l = objs; l; l = l->next) { GObject *obj = l->data; /* Darn -- cannot access object name! */ char *name = g_strdup_printf ("Anonymous from %s", uifile); go_debug_check_finalized (obj, name); g_free (name); } g_slist_free (objs); } return gui; }