]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtkaboutdialog.c
Add some additional docs on precision. (#309238, Steve Chaplin)
[~andy/gtk] / gtk / gtkaboutdialog.c
index c3584ad9f4a5599e4e1a482fab58225d8deebad6..b276f1193d66aae5bb083b3fd2d6838aea5bf127 100644 (file)
@@ -47,6 +47,7 @@
 #include "gtkvbox.h"
 #include "gtkviewport.h"
 #include "gtkiconfactory.h"
+#include "gtkprivate.h"
 #include "gtkintl.h"
 
 #include "gtkalias.h"
@@ -83,6 +84,7 @@ struct _GtkAboutDialogPrivate
   GdkCursor *hand_cursor;
   GdkCursor *regular_cursor;
   gboolean hovering_over_link;
+  gboolean wrap_license;
 };
 
 #define GTK_ABOUT_DIALOG_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GTK_TYPE_ABOUT_DIALOG, GtkAboutDialogPrivate))
@@ -103,7 +105,8 @@ enum
   PROP_TRANSLATOR_CREDITS,
   PROP_ARTISTS,
   PROP_LOGO,
-  PROP_LOGO_ICON_NAME
+  PROP_LOGO_ICON_NAME,
+  PROP_WRAP_LICENSE
 };
 
 static void                 gtk_about_dialog_finalize       (GObject            *object);
@@ -189,8 +192,6 @@ gtk_about_dialog_class_init (GtkAboutDialogClass *klass)
 
   widget_class->style_set = gtk_about_dialog_style_set;
 
-#define STATIC_STRINGS G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB
-
   /**
    * GtkAboutDialog:name:
    *
@@ -205,7 +206,7 @@ gtk_about_dialog_class_init (GtkAboutDialogClass *klass)
                                                        P_("Program name"),
                                                        P_("The name of the program. If this is not set, it defaults to g_get_application_name()"),
                                                        NULL,
-                                                       G_PARAM_READWRITE|STATIC_STRINGS));
+                                                       GTK_PARAM_READWRITE));
 
   /**
    * GtkAboutDialog:version:
@@ -220,7 +221,7 @@ gtk_about_dialog_class_init (GtkAboutDialogClass *klass)
                                                        P_("Program version"),
                                                        P_("The version of the program"),
                                                        NULL,
-                                                       G_PARAM_READWRITE|STATIC_STRINGS));
+                                                       GTK_PARAM_READWRITE));
 
   /**
    * GtkAboutDialog:copyright:
@@ -235,7 +236,7 @@ gtk_about_dialog_class_init (GtkAboutDialogClass *klass)
                                                        P_("Copyright string"),
                                                        P_("Copyright information for the program"),
                                                        NULL,
-                                                       G_PARAM_READWRITE|STATIC_STRINGS));
+                                                       GTK_PARAM_READWRITE));
        
 
   /**
@@ -253,15 +254,16 @@ gtk_about_dialog_class_init (GtkAboutDialogClass *klass)
                                                        P_("Comments string"),
                                                        P_("Comments about the program"),
                                                        NULL,
-                                                       G_PARAM_READWRITE|STATIC_STRINGS));
+                                                       GTK_PARAM_READWRITE));
 
   /**
    * GtkAboutDialog:license:
    *
    * The license of the program. This string is displayed in a 
    * text view in a secondary dialog, therefore it is fine to use
-   * a long multi-paragraph text. Note that the text is not wrapped
-   * in the text view, thus it must contain the intended linebreaks.
+   * a long multi-paragraph text. Note that the text is only wrapped
+   * in the text view if the "wrap-license" property is set to %TRUE;
+   * otherwise the text itself must contain the intended linebreaks.
    *
    * Since: 2.6
    */  
@@ -271,7 +273,7 @@ gtk_about_dialog_class_init (GtkAboutDialogClass *klass)
                                                        _("License"),
                                                        _("The license of the program"),
                                                        NULL,
-                                                       G_PARAM_READWRITE|STATIC_STRINGS));
+                                                       GTK_PARAM_READWRITE));
 
   /**
    * GtkAboutDialog:website:
@@ -287,7 +289,7 @@ gtk_about_dialog_class_init (GtkAboutDialogClass *klass)
                                                        P_("Website URL"),
                                                        P_("The URL for the link to the website of the program"),
                                                        NULL,
-                                                       G_PARAM_READWRITE|STATIC_STRINGS));
+                                                       GTK_PARAM_READWRITE));
 
   /**
    * GtkAboutDialog:website-label:
@@ -304,7 +306,7 @@ gtk_about_dialog_class_init (GtkAboutDialogClass *klass)
                                                        P_("Website label"),
                                                        P_("The label for the link to the website of the program. If this is not set, it defaults to the URL"),
                                                        NULL,
-                                                       G_PARAM_READWRITE|STATIC_STRINGS));
+                                                       GTK_PARAM_READWRITE));
 
   /**
    * GtkAboutDialog:authors:
@@ -321,7 +323,7 @@ gtk_about_dialog_class_init (GtkAboutDialogClass *klass)
                                                       P_("Authors"),
                                                       P_("List of authors of the program"),
                                                       G_TYPE_STRV,
-                                                      G_PARAM_READWRITE|STATIC_STRINGS));
+                                                      GTK_PARAM_READWRITE));
 
   /**
    * GtkAboutDialog:documenters:
@@ -338,7 +340,7 @@ gtk_about_dialog_class_init (GtkAboutDialogClass *klass)
                                                       P_("Documenters"),
                                                       P_("List of people documenting the program"),
                                                       G_TYPE_STRV,
-                                                      G_PARAM_READWRITE|STATIC_STRINGS));
+                                                      GTK_PARAM_READWRITE));
 
   /**
    * GtkAboutDialog:artists:
@@ -355,7 +357,7 @@ gtk_about_dialog_class_init (GtkAboutDialogClass *klass)
                                                       P_("Artists"),
                                                       P_("List of people who have contributed artwork to the program"),
                                                       G_TYPE_STRV,
-                                                      G_PARAM_READWRITE|STATIC_STRINGS));
+                                                      GTK_PARAM_READWRITE));
 
 
   /**
@@ -373,7 +375,7 @@ gtk_about_dialog_class_init (GtkAboutDialogClass *klass)
                                                        P_("Translator credits"),
                                                        P_("Credits to the translators. This string should be marked as translatable"),
                                                        NULL,
-                                                       G_PARAM_READWRITE|STATIC_STRINGS));
+                                                       GTK_PARAM_READWRITE));
        
   /**
    * GtkAboutDialog:logo:
@@ -389,7 +391,7 @@ gtk_about_dialog_class_init (GtkAboutDialogClass *klass)
                                                        P_("Logo"),
                                                        P_("A logo for the about box. If this is not set, it defaults to gtk_window_get_default_icon_list()"),
                                                        GDK_TYPE_PIXBUF,
-                                                       G_PARAM_READWRITE|STATIC_STRINGS));
+                                                       GTK_PARAM_READWRITE));
 
   /**
    * GtkAboutDialog:logo-icon-name:
@@ -405,7 +407,21 @@ gtk_about_dialog_class_init (GtkAboutDialogClass *klass)
                                                        P_("Logo Icon Name"),
                                                        P_("A named icon to use as the logo for the about box."),
                                                        NULL,
-                                                       G_PARAM_READWRITE|STATIC_STRINGS));
+                                                       GTK_PARAM_READWRITE));
+  /**
+   * GtkAboutDialog:wrap-license:
+   *
+   * Whether to wrap the text in the license dialog.
+   *
+   * Since: 2.8
+   */  
+  g_object_class_install_property (object_class,
+                                  PROP_WRAP_LICENSE,
+                                  g_param_spec_boolean ("wrap-license",
+                                                        P_("Wrap license"),
+                                                        P_("Whether to wrap the license text."),
+                                                        FALSE,
+                                                        GTK_PARAM_READWRITE));
 
   /* Style properties */
   gtk_widget_class_install_style_property (widget_class,
@@ -413,7 +429,7 @@ gtk_about_dialog_class_init (GtkAboutDialogClass *klass)
                                                                P_("Link Color"),
                                                                P_("Color of hyperlinks"),
                                                                GDK_TYPE_COLOR,
-                                                               G_PARAM_READABLE|STATIC_STRINGS));
+                                                               GTK_PARAM_READABLE));
 
   g_type_class_add_private (object_class, sizeof (GtkAboutDialogPrivate));
 }
@@ -443,6 +459,7 @@ gtk_about_dialog_init (GtkAboutDialog *about)
   priv->hand_cursor = gdk_cursor_new (GDK_HAND2);
   priv->regular_cursor = gdk_cursor_new (GDK_XTERM);
   priv->hovering_over_link = FALSE;
+  priv->wrap_license = FALSE;
 
   gtk_dialog_set_has_separator (GTK_DIALOG (about), FALSE);
   
@@ -490,6 +507,7 @@ gtk_about_dialog_init (GtkAboutDialog *about)
 
   /* Add the credits button */
   button = gtk_button_new_from_stock (_("C_redits"));
+  gtk_widget_set_no_show_all (button, TRUE);
   gtk_box_pack_end (GTK_BOX (GTK_DIALOG (about)->action_area), 
                    button, FALSE, TRUE, 0); 
   gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (GTK_DIALOG (about)->action_area), button, TRUE);
@@ -499,6 +517,7 @@ gtk_about_dialog_init (GtkAboutDialog *about)
 
   /* Add the license button */
   button = gtk_button_new_from_stock (_("_License"));
+  gtk_widget_set_no_show_all (button, TRUE);
   gtk_box_pack_end (GTK_BOX (GTK_DIALOG (about)->action_area), 
                    button, FALSE, TRUE, 0); 
   gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (GTK_DIALOG (about)->action_area), button, TRUE);
@@ -550,6 +569,7 @@ gtk_about_dialog_set_property (GObject      *object,
                               GParamSpec   *pspec)
 {
   GtkAboutDialog *about = GTK_ABOUT_DIALOG (object);
+  GtkAboutDialogPrivate *priv = (GtkAboutDialogPrivate *)about->private_data;
 
   switch (prop_id) 
     {
@@ -592,6 +612,9 @@ gtk_about_dialog_set_property (GObject      *object,
     case PROP_LOGO_ICON_NAME:
       gtk_about_dialog_set_logo_icon_name (about, g_value_get_string (value));
       break;
+    case PROP_WRAP_LICENSE:
+      priv->wrap_license = g_value_get_boolean (value);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -659,6 +682,9 @@ gtk_about_dialog_get_property (GObject    *object,
       else
        g_value_set_string (value, NULL);
       break;
+    case PROP_WRAP_LICENSE:
+      g_value_set_boolean (value, priv->wrap_license);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -1010,6 +1036,59 @@ gtk_about_dialog_set_license (GtkAboutDialog *about,
   g_object_notify (G_OBJECT (about), "license");
 }
 
+/**
+ * gtk_about_dialog_get_wrap_license:
+ * @about: a #GtkAboutDialog
+ *
+ * Returns whether the license text in @about is 
+ * automatically wrapped.
+ *
+ * Returns: %TRUE if the license text is wrapped 
+ *
+ * Since: 2.8
+ */
+gboolean
+gtk_about_dialog_get_wrap_license (GtkAboutDialog *about)
+{
+  GtkAboutDialogPrivate *priv;
+
+  g_return_val_if_fail (GTK_IS_ABOUT_DIALOG (about), FALSE);
+
+  priv = (GtkAboutDialogPrivate *)about->private_data;
+
+  return priv->wrap_license;
+}
+
+/**
+ * gtk_about_dialog_set_wrap_license:
+ * @about: a #GtkAboutDialog
+ * @wrap_license: whether to wrap the license
+ *
+ * Sets whether the license text in @about is 
+ * automatically wrapped.
+ * 
+ * Since: 2.8
+ */
+void
+gtk_about_dialog_set_wrap_license (GtkAboutDialog *about,
+                                   gboolean        wrap_license)
+{
+  GtkAboutDialogPrivate *priv;
+
+  g_return_if_fail (GTK_IS_ABOUT_DIALOG (about));
+
+  priv = (GtkAboutDialogPrivate *)about->private_data;
+
+  wrap_license = wrap_license != FALSE;
+  
+  if (priv->wrap_license != wrap_license)
+    {
+       priv->wrap_license = wrap_license;
+
+       g_object_notify (G_OBJECT (about), "wrap-license");
+    }
+}
+
 /**
  * gtk_about_dialog_get_website:
  * @about: a #GtkAboutDialog
@@ -1148,7 +1227,7 @@ gtk_about_dialog_set_website_label (GtkAboutDialog *about,
     }
   g_free (tmp);
 
-  g_object_notify (G_OBJECT (about), "website_label");
+  g_object_notify (G_OBJECT (about), "website-label");
 }
 
 /**
@@ -1456,7 +1535,7 @@ gtk_about_dialog_set_logo (GtkAboutDialog *about,
   g_object_freeze_notify (G_OBJECT (about));
 
   if (gtk_image_get_storage_type (GTK_IMAGE (priv->logo_image)) == GTK_IMAGE_ICON_NAME)
-    g_object_notify (G_OBJECT (about), "logo_icon_name");
+    g_object_notify (G_OBJECT (about), "logo-icon-name");
 
   if (logo != NULL) 
     gtk_image_set_from_pixbuf (GTK_IMAGE (priv->logo_image), logo);
@@ -1538,7 +1617,7 @@ gtk_about_dialog_set_logo_icon_name (GtkAboutDialog *about,
 
   gtk_image_set_from_icon_name (GTK_IMAGE (priv->logo_image), icon_name,
                                GTK_ICON_SIZE_DIALOG);
-  g_object_notify (G_OBJECT (about), "logo_icon_name");
+  g_object_notify (G_OBJECT (about), "logo-icon-name");
 
   g_object_thaw_notify (G_OBJECT (about));
 }
@@ -2052,6 +2131,8 @@ display_license_dialog (GtkWidget *button,
   gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), sw, TRUE, TRUE, 0);
 
   view = gtk_text_view_new ();
+  gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (view), 
+                              priv->wrap_license ? GTK_WRAP_WORD : GTK_WRAP_NONE);
   gtk_text_buffer_set_text (gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)), 
                            priv->license, -1);