GtkImage support improved. Finally no more g_object_set_data() :)

* src/glade-gtk.c: GtkImage support improved. Finally no more
  g_object_set_data() :)

* src/glade-project.c: Emit "parse-finished" after setting project's
  loading flag.

* src/glade-property-class.[ch]:
  make glade_property_class_make_object_from_string () returns a missing
  image icon if resource file is not found. This also make glade do not
  forget missing files.

* src/glade-gnome.c:  fixed a silly warning in
  glade_gnome_date_edit_post_create()
This commit is contained in:
Juan Pablo Ugarte 2006-09-12 22:14:50 +00:00
parent 5c33581869
commit 8ca884cb25
6 changed files with 81 additions and 62 deletions

View File

@ -1,3 +1,19 @@
2006-09-08 Juan Pablo Ugarte <juanpablougarte@gmail.com>
* src/glade-gtk.c: GtkImage support improved. Finally no more
g_object_set_data() :)
* src/glade-project.c: Emit "parse-finished" after setting project's
loading flag.
* src/glade-property-class.[ch]:
make glade_property_class_make_object_from_string () returns a missing
image icon if resource file is not found. This also make glade do not
forget missing files.
* src/glade-gnome.c: fixed a silly warning in
glade_gnome_date_edit_post_create()
2006-09-08 Juan Pablo Ugarte <juanpablougarte@gmail.com>
* src/glade-gtk.c: added glade_gtk_combo_box_entry_get_internal_child()

View File

@ -284,6 +284,12 @@ glade_gnome_app_bar_post_create (GObject *object, GladeCreateReason reason)
}
/* GnomeDateEdit */
static void
glade_gnome_date_edit_set_no_show_all (GtkWidget *widget, gpointer data)
{
gtk_widget_set_no_show_all (widget, TRUE);
}
void GLADEGNOME_API
glade_gnome_date_edit_post_create (GObject *object, GladeCreateReason reason)
{
@ -294,7 +300,7 @@ glade_gnome_date_edit_post_create (GObject *object, GladeCreateReason reason)
* gtk_widget_show_all() (its, for example, called after a paste)
*/
gtk_container_foreach (GTK_CONTAINER (object),
gtk_widget_set_no_show_all, TRUE);
glade_gnome_date_edit_set_no_show_all, NULL);
}
/* GnomeDruid */

View File

@ -3336,14 +3336,10 @@ glade_gtk_image_pixel_size_changed (GladeProperty *property,
}
static void
glade_gtk_image_parse_finished (GladeProject *project,
GladeWidget *gimage)
glade_gtk_image_parse_finished (GladeProject *project, GladeWidget *gimage)
{
GObject *image = glade_widget_get_object (gimage);
GladeProperty *property;
gint size;
g_object_set_data (image, "glade-image-post-ran", GINT_TO_POINTER (1));
if (glade_widget_property_default (gimage, "icon-name") == FALSE)
glade_widget_property_set (gimage, "glade-type", GLADEGTK_IMAGE_ICONTHEME);
@ -3354,17 +3350,18 @@ glade_gtk_image_parse_finished (GladeProject *project,
else
glade_widget_property_reset (gimage, "glade-type");
if ((property = glade_widget_get_property (gimage, "pixel-size")) != NULL)
{
glade_widget_property_get (gimage, "pixel-size", &size);
if (size >= 0)
glade_widget_property_set_sensitive
(gimage, "icon-size", FALSE,
if ((property = glade_widget_get_property (gimage, "pixel-size")) == NULL)
return;
glade_widget_property_get (gimage, "pixel-size", &size);
if (size >= 0)
glade_widget_property_set_sensitive (gimage, "icon-size", FALSE,
_("Pixel Size takes precedence over Icon size"));
g_signal_connect (G_OBJECT (property), "value-changed",
G_CALLBACK (glade_gtk_image_pixel_size_changed),
gimage);
}
g_signal_connect (G_OBJECT (property), "value-changed",
G_CALLBACK (glade_gtk_image_pixel_size_changed),
gimage);
}
void GLADEGTK_API
@ -3372,19 +3369,16 @@ glade_gtk_image_post_create (GObject *object, GladeCreateReason reason)
{
GladeWidget *gimage;
if (reason != GLADE_CREATE_LOAD) return;
g_return_if_fail (GTK_IS_IMAGE (object));
gimage = glade_widget_get_from_gobject (object);
g_return_if_fail (GLADE_IS_WIDGET (gimage));
if (reason == GLADE_CREATE_USER)
g_object_set_data (object, "glade-image-post-ran",
GINT_TO_POINTER (1));
if (reason == GLADE_CREATE_LOAD)
g_signal_connect (glade_widget_get_project (gimage),
"parse-finished",
G_CALLBACK (glade_gtk_image_parse_finished),
gimage);
g_signal_connect (glade_widget_get_project (gimage),
"parse-finished",
G_CALLBACK (glade_gtk_image_parse_finished),
gimage);
}
void GLADEGTK_API
@ -3407,11 +3401,10 @@ glade_gtk_image_set_icon_name (GObject *object, GValue *value)
static void
glade_gtk_image_refresh (GladeWidget *gwidget, const gchar *property)
{
gchar *val;
gpointer p;
glade_widget_property_set_sensitive (gwidget, property, TRUE, NULL);
glade_widget_property_get (gwidget, property, &val);
glade_widget_property_set (gwidget, property, val);
glade_widget_property_get (gwidget, property, &p);
glade_widget_property_set (gwidget, property, p);
}
void GLADEGTK_API
@ -3425,10 +3418,8 @@ glade_gtk_image_set_type (GObject *object, GValue *value)
g_return_if_fail (GLADE_IS_WIDGET (gwidget));
/* Exit if we're still loading project objects */
if (GPOINTER_TO_INT (g_object_get_data (object,
"glade-image-post-ran")) == 0)
return;
if (glade_util_object_is_loading (object)) return;
switch ((type = g_value_get_enum (value)))
{
case GLADEGTK_IMAGE_STOCK:
@ -3449,7 +3440,7 @@ glade_gtk_image_set_type (GObject *object, GValue *value)
glade_gtk_image_disable_icon_name (gwidget);
glade_gtk_image_refresh (gwidget, "pixbuf");
break;
}
}
}
/* This basicly just sets the virtual "glade-stock" property
@ -3458,30 +3449,27 @@ glade_gtk_image_set_type (GObject *object, GValue *value)
void GLADEGTK_API
glade_gtk_image_set_stock (GObject *object, GValue *value)
{
GladeWidget *gwidget;
GEnumClass *eclass;
GEnumValue *eval;
const gchar *str;
gboolean loaded = FALSE;
gint icon_size;
GladeWidget *gwidget;
const gchar *str;
gint icon_size;
g_return_if_fail (GTK_IS_IMAGE (object));
gwidget = glade_widget_get_from_gobject (object);
g_return_if_fail (GLADE_IS_WIDGET (gwidget));
loaded = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (gwidget), "glade-loaded"));
g_object_set_data (G_OBJECT (gwidget), "glade-loaded", GINT_TO_POINTER (TRUE));
if ((str = g_value_get_string (value)) && loaded == FALSE)
if ((str = g_value_get_string (value)) &&
glade_util_object_is_loading (object))
{
eclass = g_type_class_ref (GLADE_TYPE_STOCK);
GEnumClass *eclass = g_type_class_ref (GLADE_TYPE_STOCK);
GEnumValue *eval;
if ((eval = g_enum_get_value_by_nick (eclass, str)) != NULL)
{
g_object_set_data (G_OBJECT (gwidget), "glade-stock", GINT_TO_POINTER (eval->value));
glade_widget_property_set (gwidget, "glade-stock", eval->value);
}
glade_widget_property_set (gwidget, "glade-stock",
eval->value);
g_type_class_unref (eclass);
}
if (str == NULL && glade_widget_superuser ()) return;
/* Set the real property */
glade_widget_property_get (gwidget, "icon-size", &icon_size);

View File

@ -1446,15 +1446,15 @@ glade_project_new_from_interface (GladeInterface *interface, const gchar *path)
glade_project_add_object (project, NULL, widget->object);
}
/* Emit "parse-finished" signal */
g_signal_emit (project, glade_project_signals [PARSE_FINISHED], 0);
/* Reset project status here too so that you get a clean
* slate after calling glade_project_open().
*/
project->changed = FALSE;
project->loading = FALSE;
/* Emit "parse-finished" signal */
g_signal_emit (project, glade_project_signals [PARSE_FINISHED], 0);
return project;
}

View File

@ -742,19 +742,26 @@ glade_property_class_make_object_from_string (GladePropertyClass *property_class
if (property_class->pspec->value_type == GDK_TYPE_PIXBUF && project)
{
static GtkWidget *widget = NULL;
GdkPixbuf *pixbuf;
fullpath = glade_project_resource_fullpath (project, string);
if ((pixbuf = gdk_pixbuf_new_from_file (fullpath, NULL)) != NULL)
if ((pixbuf = gdk_pixbuf_new_from_file (fullpath, NULL)) == NULL)
{
g_object_set_data_full (G_OBJECT(pixbuf),
"GladeFileName",
g_strdup (string),
g_free);
object = G_OBJECT(pixbuf);
if (widget == NULL) widget = gtk_label_new ("");
pixbuf = gtk_widget_render_icon (widget,
GTK_STOCK_MISSING_IMAGE,
GTK_ICON_SIZE_MENU, NULL);
}
if (pixbuf)
{
object = G_OBJECT (pixbuf);
g_object_set_data_full (object, "GladeFileName",
g_strdup (string), g_free);
}
g_free (fullpath);
}
if (property_class->pspec->value_type == GTK_TYPE_ADJUSTMENT)

View File

@ -174,7 +174,9 @@ struct _GladePropertyClass
* directory).
*/
gboolean transfer_on_paste;
gboolean transfer_on_paste; /* If this is a packing prop,
* wether we should transfer it on paste.
*/
/* Delagate to verify if this is a valid value for this property,
* if this function exists and returns FALSE, then glade_property_set