|
Packit |
1e8aac |
#include <glib.h>
|
|
Packit |
1e8aac |
#include <glib-object.h>
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
#include <gladeui/glade-app.h>
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Avoid warnings from GVFS-RemoteVolumeMonitor */
|
|
Packit |
1e8aac |
static gboolean
|
|
Packit |
1e8aac |
ignore_gvfs_warning (const gchar *log_domain,
|
|
Packit |
1e8aac |
GLogLevelFlags log_level,
|
|
Packit |
1e8aac |
const gchar *message,
|
|
Packit |
1e8aac |
gpointer user_data)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
if (g_strcmp0 (log_domain, "GVFS-RemoteVolumeMonitor") == 0)
|
|
Packit |
1e8aac |
return FALSE;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
return TRUE;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static gboolean
|
|
Packit |
1e8aac |
main_loop_quit_cb (gpointer data)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
gtk_main_quit ();
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
return FALSE;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
check_finalized (gpointer data,
|
|
Packit |
1e8aac |
GObject *where_the_object_was)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
gboolean *did_finalize = (gboolean *)data;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
*did_finalize = TRUE;
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
test_create_widget (gconstpointer data)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeWidgetAdaptor *adaptor = (GladeWidgetAdaptor *)data;
|
|
Packit |
1e8aac |
GladeWidget *widget;
|
|
Packit |
1e8aac |
GObject *object;
|
|
Packit |
1e8aac |
gboolean widget_finalized = FALSE;
|
|
Packit |
1e8aac |
gboolean object_finalized = FALSE;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_test_log_set_fatal_handler (ignore_gvfs_warning, NULL);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
widget = glade_widget_adaptor_create_widget (adaptor, FALSE, NULL);
|
|
Packit |
1e8aac |
g_assert (GLADE_IS_WIDGET (widget));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
object = glade_widget_get_object (widget);
|
|
Packit |
1e8aac |
g_assert (G_IS_OBJECT (object));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_object_weak_ref (G_OBJECT (widget), check_finalized, &widget_finalized);
|
|
Packit |
1e8aac |
g_object_weak_ref (G_OBJECT (object), check_finalized, &object_finalized);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* filechoosers hold a reference until an async operation is complete */
|
|
Packit |
1e8aac |
if (GTK_IS_FILE_CHOOSER (object))
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
g_timeout_add (2000, main_loop_quit_cb, NULL);
|
|
Packit |
1e8aac |
gtk_main();
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
/* Our plugin code adds an idle when cell renderers are created */
|
|
Packit |
1e8aac |
else if (GTK_IS_CELL_RENDERER (object))
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
g_timeout_add (50, main_loop_quit_cb, NULL);
|
|
Packit |
1e8aac |
gtk_main();
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Get rid of the GladeWidget and assert that it finalizes along
|
|
Packit |
1e8aac |
* with it's internal object
|
|
Packit |
1e8aac |
*/
|
|
Packit |
1e8aac |
g_object_unref (widget);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_assert (widget_finalized);
|
|
Packit |
1e8aac |
g_assert (object_finalized);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static gint
|
|
Packit |
1e8aac |
adaptor_cmp (gconstpointer a, gconstpointer b)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
return g_strcmp0 (glade_widget_adaptor_get_name ((gpointer)a),
|
|
Packit |
1e8aac |
glade_widget_adaptor_get_name ((gpointer)b));
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
int
|
|
Packit |
1e8aac |
main (int argc,
|
|
Packit |
1e8aac |
char *argv[])
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GList *adaptors, *l;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
gtk_test_init (&argc, &argv, NULL);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
glade_init ();
|
|
Packit |
1e8aac |
glade_app_get ();
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
adaptors = g_list_sort (glade_widget_adaptor_list_adaptors (), adaptor_cmp);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
for (l = adaptors; l; l = l->next)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeWidgetAdaptor *adaptor = l->data;
|
|
Packit |
1e8aac |
GType adaptor_type;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
adaptor_type = glade_widget_adaptor_get_object_type (adaptor);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
if (G_TYPE_IS_INSTANTIATABLE (adaptor_type) && !G_TYPE_IS_ABSTRACT (adaptor_type) &&
|
|
Packit |
1e8aac |
/* FIXME: FileChooserButton leaks a GTask which will crash in the following test */
|
|
Packit |
1e8aac |
adaptor_type != GTK_TYPE_FILE_CHOOSER_BUTTON &&
|
|
Packit |
1e8aac |
/* FIXME: GtkRecentChooser tries to remove an unknown source id */
|
|
Packit |
1e8aac |
!g_type_is_a (adaptor_type, GTK_TYPE_RECENT_CHOOSER) &&
|
|
Packit |
1e8aac |
/* FIXME: can not create a themed icon without a name */
|
|
Packit |
1e8aac |
!g_type_is_a (adaptor_type, G_TYPE_THEMED_ICON) &&
|
|
Packit |
1e8aac |
/* FIXME: Dialogs now use a headerbar by default making gtk give a warning when adding a widget to the action area */
|
|
Packit |
1e8aac |
!g_type_is_a (adaptor_type, GTK_TYPE_DIALOG) &&
|
|
Packit |
1e8aac |
/* FIXME: The same goes for assistant */
|
|
Packit |
1e8aac |
!g_type_is_a (adaptor_type, GTK_TYPE_ASSISTANT) &&
|
|
Packit |
1e8aac |
/* FIXME: GtkPopoverMenu gives a few warnings */
|
|
Packit |
1e8aac |
!g_type_is_a (adaptor_type, GTK_TYPE_POPOVER_MENU))
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
gchar *test_path = g_strdup_printf ("/CreateWidget/%s", glade_widget_adaptor_get_name (adaptor));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_test_add_data_func (test_path, adaptor, test_create_widget);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_free (test_path);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
g_list_free (adaptors);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
return g_test_run ();
|
|
Packit |
1e8aac |
}
|