summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuan Pablo Ugarte <juanpablougarte@gmail.com>2014-04-19 21:14:41 -0300
committerJuan Pablo Ugarte <juanpablougarte@gmail.com>2014-04-22 19:34:57 -0300
commitfeea43d65563149b46ae42fd476f735627cb3d19 (patch)
treee581e63afe10d460992015392077c8195a7309c7
parent6b022595cbe95499547bf7ac472c23400e87ff46 (diff)
downloadglade-feea43d65563149b46ae42fd476f735627cb3d19.tar.gz
Fixed Bug 727914 "Logo is not shown in About-dialog"
Made GtkAboutDialog logo and logo-icon-name properties optional since they are mutually exclusive. The editor is responsible for enabling then accordingly.
-rw-r--r--plugins/gtk+/glade-about-dialog-editor.c82
-rw-r--r--plugins/gtk+/glade-gtk-about-dialog.c25
-rw-r--r--plugins/gtk+/gtk+.xml.in4
3 files changed, 54 insertions, 57 deletions
diff --git a/plugins/gtk+/glade-about-dialog-editor.c b/plugins/gtk+/glade-about-dialog-editor.c
index 6734fc39..696d1a5b 100644
--- a/plugins/gtk+/glade-about-dialog-editor.c
+++ b/plugins/gtk+/glade-about-dialog-editor.c
@@ -25,7 +25,7 @@
#include "glade-about-dialog-editor.h"
-static void glade_about_dialog_editor_editable_init (GladeEditableIface * iface);
+static void glade_about_dialog_editor_editable_init (GladeEditableIface *iface);
/* Callbacks */
static void license_type_pre_commit (GladePropertyShell *shell,
@@ -45,6 +45,8 @@ struct _GladeAboutDialogEditorPrivate
GtkWidget *license_label;
GtkWidget *license_editor;
GtkWidget *wrap_license_editor;
+ GtkWidget *logo_file_editor;
+ GtkWidget *logo_icon_editor;
GtkWidget *logo_file_radio;
GtkWidget *logo_icon_radio;
@@ -67,6 +69,8 @@ glade_about_dialog_editor_class_init (GladeAboutDialogEditorClass * klass)
gtk_widget_class_bind_template_child_private (widget_class, GladeAboutDialogEditor, license_label);
gtk_widget_class_bind_template_child_private (widget_class, GladeAboutDialogEditor, license_editor);
gtk_widget_class_bind_template_child_private (widget_class, GladeAboutDialogEditor, wrap_license_editor);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeAboutDialogEditor, logo_file_editor);
+ gtk_widget_class_bind_template_child_private (widget_class, GladeAboutDialogEditor, logo_icon_editor);
gtk_widget_class_bind_template_child_private (widget_class, GladeAboutDialogEditor, logo_file_radio);
gtk_widget_class_bind_template_child_private (widget_class, GladeAboutDialogEditor, logo_icon_radio);
@@ -77,7 +81,7 @@ glade_about_dialog_editor_class_init (GladeAboutDialogEditorClass * klass)
}
static void
-glade_about_dialog_editor_init (GladeAboutDialogEditor * self)
+glade_about_dialog_editor_init (GladeAboutDialogEditor *self)
{
self->priv = glade_about_dialog_editor_get_instance_private (self);
@@ -85,7 +89,14 @@ glade_about_dialog_editor_init (GladeAboutDialogEditor * self)
}
static void
-glade_about_dialog_editor_load (GladeEditable * editable, GladeWidget * widget)
+glade_eprop_disable_check (GtkWidget *child, gpointer data)
+{
+ if (GLADE_IS_EDITOR_PROPERTY (child))
+ g_object_set (child, "disable-check", TRUE, NULL);
+}
+
+static void
+glade_about_dialog_editor_load (GladeEditable *editable, GladeWidget *widget)
{
GladeAboutDialogEditor *dialog_editor = GLADE_ABOUT_DIALOG_EDITOR (editable);
GladeAboutDialogEditorPrivate *priv = dialog_editor->priv;
@@ -110,15 +121,21 @@ glade_about_dialog_editor_load (GladeEditable * editable, GladeWidget * widget)
/* Set the radio button state to our virtual property */
glade_widget_property_get (widget, "glade-logo-as-file", &as_file);
+ gtk_container_forall (GTK_CONTAINER (priv->logo_file_editor), glade_eprop_disable_check, NULL);
+ gtk_container_forall (GTK_CONTAINER (priv->logo_icon_editor), glade_eprop_disable_check, NULL);
+
+ glade_widget_property_set_enabled (widget, "logo-icon-name", !as_file);
+ glade_widget_property_set_enabled (widget, "logo", as_file);
+
if (as_file)
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->logo_file_radio), TRUE);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->logo_file_radio), TRUE);
else
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->logo_icon_radio), TRUE);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->logo_icon_radio), TRUE);
}
}
static void
-glade_about_dialog_editor_editable_init (GladeEditableIface * iface)
+glade_about_dialog_editor_editable_init (GladeEditableIface *iface)
{
parent_editable_iface = g_type_interface_peek_parent (iface);
@@ -159,30 +176,23 @@ license_type_post_commit (GladePropertyShell *shell,
}
static void
-logo_icon_toggled (GtkWidget *widget,
- GladeAboutDialogEditor *editor)
+glade_about_dialog_editor_set_logo_as_file (GladeAboutDialogEditor *editor,
+ gboolean logo_as_file)
{
- GladeAboutDialogEditorPrivate *priv = editor->priv;
GladeWidget *gwidget = glade_editable_loaded_widget (GLADE_EDITABLE (editor));
GladeProperty *property;
if (glade_editable_loading (GLADE_EDITABLE (editor)) || !gwidget)
return;
- if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->logo_icon_radio)))
- return;
-
glade_editable_block (GLADE_EDITABLE (editor));
- glade_command_push_group (_("Setting %s to use a logo icon"),
+ glade_command_push_group (logo_as_file ? _("Setting %s to use logo file") :
+ _("Setting %s to use a logo icon"),
glade_widget_get_name (gwidget));
- property = glade_widget_get_property (gwidget, "logo-icon-name");
- glade_command_set_property (property, NULL);
- property = glade_widget_get_property (gwidget, "logo");
- glade_command_set_property (property, NULL);
property = glade_widget_get_property (gwidget, "glade-logo-as-file");
- glade_command_set_property (property, FALSE);
+ glade_command_set_property (property, logo_as_file);
glade_command_pop_group ();
@@ -193,37 +203,21 @@ logo_icon_toggled (GtkWidget *widget,
}
static void
-logo_file_toggled (GtkWidget *widget,
- GladeAboutDialogEditor *editor)
+logo_icon_toggled (GtkWidget *widget, GladeAboutDialogEditor *editor)
{
- GladeAboutDialogEditorPrivate *priv = editor->priv;
- GladeWidget *gwidget = glade_editable_loaded_widget (GLADE_EDITABLE (editor));
- GladeProperty *property;
-
- if (glade_editable_loading (GLADE_EDITABLE (editor)) || !gwidget)
+ if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)))
return;
- if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->logo_file_radio)))
- return;
-
- glade_editable_block (GLADE_EDITABLE (editor));
-
- glade_command_push_group (_("Setting %s to use logo file"),
- glade_widget_get_name (gwidget));
-
- property = glade_widget_get_property (gwidget, "logo-icon-name");
- glade_command_set_property (property, NULL);
- property = glade_widget_get_property (gwidget, "logo");
- glade_command_set_property (property, NULL);
- property = glade_widget_get_property (gwidget, "glade-logo-as-file");
- glade_command_set_property (property, TRUE);
-
- glade_command_pop_group ();
+ glade_about_dialog_editor_set_logo_as_file (editor, FALSE);
+}
- glade_editable_unblock (GLADE_EDITABLE (editor));
+static void
+logo_file_toggled (GtkWidget *widget, GladeAboutDialogEditor *editor)
+{
+ if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)))
+ return;
- /* reload buttons and sensitivity and stuff... */
- glade_editable_load (GLADE_EDITABLE (editor), gwidget);
+ glade_about_dialog_editor_set_logo_as_file (editor, TRUE);
}
GtkWidget *
diff --git a/plugins/gtk+/glade-gtk-about-dialog.c b/plugins/gtk+/glade-gtk-about-dialog.c
index f6fcde81..92d80574 100644
--- a/plugins/gtk+/glade-gtk-about-dialog.c
+++ b/plugins/gtk+/glade-gtk-about-dialog.c
@@ -69,8 +69,9 @@ glade_gtk_about_dialog_construct_object (GladeWidgetAdaptor *adaptor,
}
void
-glade_gtk_about_dialog_read_widget (GladeWidgetAdaptor * adaptor,
- GladeWidget * widget, GladeXmlNode * node)
+glade_gtk_about_dialog_read_widget (GladeWidgetAdaptor *adaptor,
+ GladeWidget *widget,
+ GladeXmlNode *node)
{
if (!(glade_xml_node_verify_silent (node, GLADE_XML_TAG_WIDGET) ||
glade_xml_node_verify_silent (node, GLADE_XML_TAG_TEMPLATE)))
@@ -87,21 +88,23 @@ glade_gtk_about_dialog_read_widget (GladeWidgetAdaptor * adaptor,
}
void
-glade_gtk_about_dialog_set_property (GladeWidgetAdaptor * adaptor,
- GObject * object,
- const gchar * id, const GValue * value)
+glade_gtk_about_dialog_set_property (GladeWidgetAdaptor *adaptor,
+ GObject *object,
+ const gchar *id,
+ const GValue *value)
{
if (!strcmp (id, "glade-logo-as-file"))
{
GladeWidget *gwidget = glade_widget_get_from_gobject (object);
+ GladeProperty *logo = glade_widget_get_property (gwidget, "logo");
+ GladeProperty *icon = glade_widget_get_property (gwidget, "logo-icon-name");
+ gboolean as_file = g_value_get_boolean (value);
- glade_widget_property_set_sensitive (gwidget, "logo", FALSE, NOT_SELECTED_MSG);
- glade_widget_property_set_sensitive (gwidget, "logo-icon-name", FALSE, NOT_SELECTED_MSG);
+ glade_property_set_sensitive (icon, !as_file, as_file ? NOT_SELECTED_MSG : NULL);
+ glade_property_set_enabled (icon, !as_file);
- if (g_value_get_boolean (value))
- glade_widget_property_set_sensitive (gwidget, "logo", TRUE, NULL);
- else
- glade_widget_property_set_sensitive (gwidget, "logo-icon-name", TRUE, NULL);
+ glade_property_set_sensitive (logo, as_file, as_file ? NULL : NOT_SELECTED_MSG);
+ glade_property_set_enabled (logo, as_file);
}
else
GWA_GET_CLASS (GTK_TYPE_DIALOG)->set_property (adaptor, object, id, value);
diff --git a/plugins/gtk+/gtk+.xml.in b/plugins/gtk+/gtk+.xml.in
index 3661e90b..ed3f872e 100644
--- a/plugins/gtk+/gtk+.xml.in
+++ b/plugins/gtk+/gtk+.xml.in
@@ -2839,8 +2839,8 @@
<property id="version" custom-layout="True"/>
<property id="license" translatable="True" multiline="True" custom-layout="True"/>
<property id="wrap-license" custom-layout="True"/>
- <property id="logo-icon-name" themed-icon="True" custom-layout="True"/>
- <property id="logo" custom-layout="True"/>
+ <property id="logo-icon-name" themed-icon="True" custom-layout="True" optional="True"/>
+ <property id="logo" custom-layout="True" optional="True"/>
<property id="website" custom-layout="True"/>
<property id="website-label" translatable="True" multiline="True" custom-layout="True"/>
<property id="authors" custom-layout="True"/>