X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkaboutdialog.c;h=f50fed0af12473491817512203f8b8d36d113402;hb=d484721b5ca9e82d6422cca8a3a40f001208f87b;hp=e015895dbf623bc4d3f0f92449b86cd8d50e9c2d;hpb=6faba61db10f9563cf7eb4328416445b30ae2c42;p=~andy%2Fgtk diff --git a/gtk/gtkaboutdialog.c b/gtk/gtkaboutdialog.c index e015895db..f50fed0af 100644 --- a/gtk/gtkaboutdialog.c +++ b/gtk/gtkaboutdialog.c @@ -14,9 +14,7 @@ * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * License along with this library. If not, see . */ /* @@ -49,7 +47,7 @@ #include "gtktextview.h" #include "gtkiconfactory.h" #include "gtkshow.h" -#include "gtkmainprivate.h" +#include "gtkmain.h" #include "gtkmessagedialog.h" #include "gtktogglebutton.h" #include "gtktypebuiltins.h" @@ -103,7 +101,7 @@ static GdkColor default_visited_link_color = { 0, 0x5555, 0x1a1a, 0x8b8b }; /* Translators: this is the license preamble; the string at the end * contains the URL of the license. */ -static const gchar *gtk_license_preamble = N_("This program comes with ABSOLUTELY NO WARRANTY; for details, visit %s"); +static const gchar *gtk_license_preamble = N_("This program comes with ABSOLUTELY NO WARRANTY;\nfor details, visit %s"); /* URLs for each GtkLicense type; keep in the same order as the enumeration */ static const gchar *gtk_license_urls[] = { @@ -122,6 +120,12 @@ static const gchar *gtk_license_urls[] = { "http://opensource.org/licenses/artistic-license-2.0.php" }; +typedef struct +{ + gchar *heading; + gchar **people; +} CreditSection; + struct _GtkAboutDialogPrivate { gchar *name; @@ -137,6 +141,9 @@ struct _GtkAboutDialogPrivate gchar **documenters; gchar **artists; + + GSList *credit_sections; + gint credits_page; gint license_page; @@ -163,6 +170,8 @@ struct _GtkAboutDialogPrivate guint wrap_license : 1; }; + + #define GTK_ABOUT_DIALOG_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GTK_TYPE_ABOUT_DIALOG, GtkAboutDialogPrivate)) @@ -561,6 +570,7 @@ update_credits_button_visibility (GtkAboutDialog *about) show = (priv->authors != NULL || priv->documenters != NULL || priv->artists != NULL || + priv->credit_sections != NULL || (priv->translator_credits != NULL && strcmp (priv->translator_credits, "translator_credits") && strcmp (priv->translator_credits, "translator-credits"))); @@ -775,6 +785,15 @@ gtk_about_dialog_init (GtkAboutDialog *about) gtk_about_dialog_set_logo (about, NULL); } +static void +destroy_credit_section (gpointer data) +{ + CreditSection *cs = data; + g_free (cs->heading); + g_strfreev (cs->people); + g_slice_free (CreditSection, data); +} + static void gtk_about_dialog_finalize (GObject *object) { @@ -794,6 +813,8 @@ gtk_about_dialog_finalize (GObject *object) g_strfreev (priv->documenters); g_strfreev (priv->artists); + g_slist_free_full (priv->credit_sections, destroy_credit_section); + g_slist_foreach (priv->visited_links, (GFunc)g_free, NULL); g_slist_free (priv->visited_links); @@ -993,7 +1014,7 @@ update_website (GtkAboutDialog *about) else { markup = g_strdup_printf ("%s", - priv->website_url, _("Homepage")); + priv->website_url, _("Website")); } gtk_label_set_markup (GTK_LABEL (priv->website_label), markup); @@ -1942,7 +1963,7 @@ text_view_event_after (GtkWidget *text_view, button_event = (GdkEventButton *)event; - if (button_event->button != 1) + if (button_event->button != GDK_BUTTON_PRIMARY) return FALSE; buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view)); @@ -2074,11 +2095,9 @@ text_view_new (GtkAboutDialog *about, GdkColor color; GdkColor link_color; GdkColor visited_link_color; - gint size; - PangoFontDescription *font_desc; GtkAboutDialogPrivate *priv = about->priv; - GtkStyleContext *context; - GtkStateFlags state; + GtkTextIter start_iter, end_iter; + GtkTextTag *tag; gtk_widget_style_get (GTK_WIDGET (about), "link-color", &style_link_color, @@ -2107,14 +2126,11 @@ text_view_new (GtkAboutDialog *about, gtk_text_view_set_editable (text_view, FALSE); gtk_text_view_set_wrap_mode (text_view, wrap_mode); - context = gtk_widget_get_style_context (view); - state = gtk_widget_get_state_flags (view); - - size = pango_font_description_get_size (gtk_style_context_get_font (context, state)); - font_desc = pango_font_description_new (); - pango_font_description_set_size (font_desc, size * PANGO_SCALE_SMALL); - gtk_widget_modify_font (view, font_desc); - pango_font_description_free (font_desc); + gtk_text_buffer_get_start_iter (buffer, &start_iter); + gtk_text_buffer_get_start_iter (buffer, &end_iter); + tag = gtk_text_tag_new (NULL); + g_object_set (tag, "font-scale", PANGO_SCALE_SMALL, NULL); + gtk_text_buffer_apply_tag (buffer, tag, &start_iter, &end_iter); gtk_text_view_set_left_margin (text_view, 8); gtk_text_view_set_right_margin (text_view, 8); @@ -2340,6 +2356,8 @@ add_credits_section (GtkAboutDialog *about, } /* skip one at the end */ + label = gtk_label_new (""); + gtk_grid_attach (grid, label, 1, *row, 1, 1); (*row)++; } @@ -2357,7 +2375,7 @@ create_credits_page (GtkAboutDialog *about) priv->credits_page = gtk_notebook_append_page (GTK_NOTEBOOK (priv->notebook), page_vbox, NULL); sw = gtk_scrolled_window_new (NULL, NULL); - gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_NONE); + gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_IN); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); @@ -2366,11 +2384,15 @@ create_credits_page (GtkAboutDialog *about) grid = gtk_grid_new (); gtk_container_set_border_width (GTK_CONTAINER (grid), 5); gtk_orientable_set_orientation (GTK_ORIENTABLE (grid), GTK_ORIENTATION_VERTICAL); - gtk_grid_set_column_spacing (GTK_GRID (grid), 2); - gtk_grid_set_row_spacing (GTK_GRID (grid), 12); + gtk_grid_set_column_spacing (GTK_GRID (grid), 8); + gtk_grid_set_row_spacing (GTK_GRID (grid), 2); gtk_widget_set_halign (grid, GTK_ALIGN_CENTER); gtk_widget_set_valign (grid, GTK_ALIGN_START); - gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (sw), grid); + gtk_container_add (GTK_CONTAINER (sw), grid); + gtk_style_context_add_class (gtk_widget_get_style_context (gtk_bin_get_child (GTK_BIN (sw))), + GTK_STYLE_CLASS_VIEW); + + row = 0; if (priv->authors != NULL) add_credits_section (about, GTK_GRID (grid), &row, _("Created by"), priv->authors); @@ -2393,6 +2415,16 @@ create_credits_page (GtkAboutDialog *about) if (priv->artists != NULL) add_credits_section (about, GTK_GRID (grid), &row, _("Artwork by"), priv->artists); + if (priv->credit_sections != NULL) + { + GSList *cs; + for (cs = priv->credit_sections; cs != NULL; cs = cs->next) + { + CreditSection *section = cs->data; + add_credits_section (about, GTK_GRID (grid), &row, section->heading, section->people); + } + } + gtk_widget_show_all (sw); } @@ -2422,7 +2454,6 @@ create_license_page (GtkAboutDialog *about) priv->license_page = gtk_notebook_append_page (GTK_NOTEBOOK (priv->notebook), page_vbox, NULL); sw = gtk_scrolled_window_new (NULL, NULL); - gtk_container_set_border_width (GTK_CONTAINER (sw), 5); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_IN); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); @@ -2483,7 +2514,7 @@ close_cb (GtkAboutDialog *about) * gtk_show_about_dialog: * @parent: (allow-none): transient parent, or %NULL for none * @first_property_name: the name of the first property - * @Varargs: value of first property, followed by more properties, %NULL-terminated + * @...: value of first property, followed by more properties, %NULL-terminated * * This is a convenience function for showing an application's about box. * The constructed dialog is associated with the parent window and @@ -2627,3 +2658,35 @@ gtk_about_dialog_get_license_type (GtkAboutDialog *about) return about->priv->license_type; } + +/** + * gtk_about_dialog_add_credit_section: + * @about: A #GtkAboutDialog + * @section_name: The name of the section + * @people: (array zero-terminated=1): The people who belong to that section + * + * Creates a new section in the Credits page. + * + * Since: 3.4 + */ +void +gtk_about_dialog_add_credit_section (GtkAboutDialog *about, + const gchar *section_name, + const gchar **people) +{ + GtkAboutDialogPrivate *priv; + CreditSection *new_entry; + + g_return_if_fail (GTK_IS_ABOUT_DIALOG (about)); + g_return_if_fail (section_name != NULL); + g_return_if_fail (people != NULL); + + priv = about->priv; + + new_entry = g_slice_new (CreditSection); + new_entry->heading = g_strdup ((gchar *)section_name); + new_entry->people = g_strdupv ((gchar **)people); + + priv->credit_sections = g_slist_append (priv->credit_sections, new_entry); + update_credits_button_visibility (about); +}