Esempio n. 1
0
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);
}
Esempio n. 2
0
/** 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);

}
Esempio n. 3
0
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;
}      
Esempio n. 5
0
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;
}
Esempio n. 6
0
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;
}
Esempio n. 7
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);
 }
Esempio n. 8
0
/**
 * 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;
}