Blame gladeui/glade-project-properties.c

Packit 1e8aac
/*
Packit 1e8aac
 * Copyright (C) 2013 Tristan Van Berkom.
Packit 1e8aac
 *
Packit 1e8aac
 * This library is free software; you can redistribute it and/or modify it
Packit 1e8aac
 * under the terms of the GNU Lesser General Public License as
Packit 1e8aac
 * published by the Free Software Foundation; either version 2.1 of
Packit 1e8aac
 * the License, or (at your option) any later version.
Packit 1e8aac
 *
Packit 1e8aac
 * This library is distributed in the hope that it will be useful, but
Packit 1e8aac
 * WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 1e8aac
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 1e8aac
 * Lesser General Public License for more details.
Packit 1e8aac
 *
Packit 1e8aac
 * You should have received a copy of the GNU Lesser General Public 
Packit 1e8aac
 * License along with this program; if not, write to the Free Software
Packit 1e8aac
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Packit 1e8aac
 *
Packit 1e8aac
 * Authors:
Packit 1e8aac
 *   Tristan Van Berkom <tvb@gnome.org>
Packit 1e8aac
 */
Packit 1e8aac
Packit 1e8aac
#include <config.h>
Packit 1e8aac
#include <glib/gi18n-lib.h>
Packit 1e8aac
Packit 1e8aac
#include "glade-project-properties.h"
Packit 1e8aac
#include "glade-project.h"
Packit 1e8aac
#include "glade-command.h"
Packit 1e8aac
#include "glade-app.h"
Packit 1e8aac
#include "glade-utils.h"
Packit 1e8aac
#include "glade-private.h"
Packit 1e8aac
Packit 1e8aac
/* GObjectClass */
Packit 1e8aac
static void     glade_project_properties_finalize     (GObject                *object);
Packit 1e8aac
static void     glade_project_properties_set_property (GObject                *object,
Packit 1e8aac
						       guint                   prop_id,
Packit 1e8aac
						       const GValue           *value,
Packit 1e8aac
						       GParamSpec             *pspec);
Packit 1e8aac
Packit 1e8aac
/* UI Callbacks */
Packit 1e8aac
static void     on_template_combo_box_changed         (GtkComboBox            *combo,
Packit 1e8aac
						       GladeProjectProperties *properties);
Packit 1e8aac
static void     on_template_checkbutton_toggled       (GtkToggleButton        *togglebutton,
Packit 1e8aac
						       GladeProjectProperties *properties);
Packit 1e8aac
static void     resource_default_toggled              (GtkWidget              *widget,
Packit 1e8aac
						       GladeProjectProperties *properties);
Packit 1e8aac
static void     resource_relative_toggled             (GtkWidget              *widget,
Packit 1e8aac
						       GladeProjectProperties *properties);
Packit 1e8aac
static void     resource_fullpath_toggled             (GtkWidget              *widget,
Packit 1e8aac
						       GladeProjectProperties *properties);
Packit 1e8aac
static void     on_relative_path_entry_insert_text    (GtkEditable            *editable,
Packit 1e8aac
                                                       gchar                  *new_text,
Packit 1e8aac
                                                       gint                    new_text_length,
Packit 1e8aac
                                                       gint                   *position,
Packit 1e8aac
                                                       GladeProjectProperties *properties); 
Packit 1e8aac
static void     on_relative_path_entry_changed        (GtkEntry               *entry,
Packit 1e8aac
						       GladeProjectProperties *properties);
Packit 1e8aac
static void     resource_full_path_set                (GtkFileChooserButton   *button,
Packit 1e8aac
						       GladeProjectProperties *properties);
Packit 1e8aac
static void     verify_clicked                        (GtkWidget              *button,
Packit 1e8aac
						       GladeProjectProperties *properties);
Packit 1e8aac
static void     on_domain_entry_changed               (GtkWidget              *entry,
Packit 1e8aac
						       GladeProjectProperties *properties);
Packit 1e8aac
static void     target_button_clicked                 (GtkWidget              *widget,
Packit 1e8aac
						       GladeProjectProperties *properties);
Packit 1e8aac
static void     on_glade_project_properties_hide      (GtkWidget              *widget,
Packit 1e8aac
                                                       GladeProjectProperties *properties);
Packit 1e8aac
static void     on_css_filechooser_file_set           (GtkFileChooserButton   *widget,
Packit 1e8aac
                                                       GladeProjectProperties *properties);
Packit 1e8aac
static void     on_css_checkbutton_toggled            (GtkWidget              *widget,
Packit 1e8aac
                                                       GladeProjectProperties *properties);
Packit 1e8aac
static void     on_license_comboboxtext_changed       (GtkComboBox *widget,
Packit 1e8aac
                                                       GladeProjectProperties *properties);
Packit 1e8aac
Packit 1e8aac
static void     on_license_data_changed               (GladeProjectProperties *properties);
Packit 1e8aac
Packit 1e8aac
/* Project callbacks */
Packit 1e8aac
static void     project_resource_path_changed         (GladeProject           *project,
Packit 1e8aac
						       GParamSpec             *pspec,
Packit 1e8aac
						       GladeProjectProperties *properties);
Packit 1e8aac
static void     project_template_changed              (GladeProject           *project,
Packit 1e8aac
						       GParamSpec             *pspec,
Packit 1e8aac
						       GladeProjectProperties *properties);
Packit 1e8aac
static void     project_domain_changed                (GladeProject           *project,
Packit 1e8aac
						       GParamSpec             *pspec,
Packit 1e8aac
						       GladeProjectProperties *properties);
Packit 1e8aac
static void     project_targets_changed               (GladeProject           *project,
Packit 1e8aac
						       GladeProjectProperties *properties);
Packit 1e8aac
static void     project_license_changed               (GladeProject           *project,
Packit 1e8aac
						       GParamSpec             *pspec,
Packit 1e8aac
						       GladeProjectProperties *properties);
Packit 1e8aac
static void     project_css_provider_path_changed     (GladeProject           *project,
Packit 1e8aac
                                                       GParamSpec             *pspec,
Packit 1e8aac
                                                       GladeProjectProperties *properties);
Packit 1e8aac
Packit 1e8aac
struct _GladeProjectPropertiesPrivate
Packit 1e8aac
{
Packit 1e8aac
  GladeProject *project;
Packit 1e8aac
Packit 1e8aac
  /* Properties */
Packit 1e8aac
  GtkWidget *project_wide_radio;
Packit 1e8aac
  GtkWidget *toplevel_contextual_radio;
Packit 1e8aac
  GtkWidget *toolkit_box;
Packit 1e8aac
Packit 1e8aac
  GtkWidget *resource_default_radio;
Packit 1e8aac
  GtkWidget *resource_relative_radio;
Packit 1e8aac
  GtkWidget *resource_fullpath_radio;
Packit 1e8aac
  GtkWidget *relative_path_entry;
Packit 1e8aac
  GtkWidget *full_path_button;
Packit 1e8aac
  GtkWidget *domain_entry;
Packit 1e8aac
  GtkWidget *template_combobox;
Packit 1e8aac
  GtkWidget *template_checkbutton;
Packit 1e8aac
Packit 1e8aac
  GtkWidget *css_filechooser;
Packit 1e8aac
  GtkWidget *css_checkbutton;
Packit 1e8aac
  
Packit 1e8aac
  GHashTable *target_radios;
Packit 1e8aac
Packit 1e8aac
  /* License */
Packit 1e8aac
  GtkComboBox    *license_comboboxtext;
Packit 1e8aac
  GtkTextView    *license_textview;
Packit 1e8aac
  GtkEntryBuffer *name_entrybuffer;
Packit 1e8aac
  GtkEntryBuffer *description_entrybuffer;
Packit 1e8aac
  GtkTextBuffer  *authors_textbuffer;
Packit 1e8aac
  GtkTextBuffer  *copyright_textbuffer;
Packit 1e8aac
  GtkTextBuffer  *license_textbuffer;
Packit 1e8aac
  
Packit 1e8aac
  gboolean ignore_ui_cb;
Packit 1e8aac
};
Packit 1e8aac
Packit 1e8aac
enum
Packit 1e8aac
{
Packit 1e8aac
  PROP_0,
Packit 1e8aac
  PROP_PROJECT,
Packit 1e8aac
};
Packit 1e8aac
Packit 1e8aac
G_DEFINE_TYPE_WITH_PRIVATE (GladeProjectProperties, glade_project_properties, GTK_TYPE_DIALOG);
Packit 1e8aac
Packit 1e8aac
/********************************************************
Packit 1e8aac
 *                  Class/Instance Init                 *
Packit 1e8aac
 ********************************************************/
Packit 1e8aac
static void
Packit 1e8aac
glade_project_properties_init (GladeProjectProperties *properties)
Packit 1e8aac
{
Packit 1e8aac
  GladeProjectPropertiesPrivate *priv;
Packit 1e8aac
Packit 1e8aac
  properties->priv = priv = glade_project_properties_get_instance_private (properties);
Packit 1e8aac
Packit 1e8aac
  priv->target_radios = g_hash_table_new_full (g_str_hash, g_str_equal,
Packit 1e8aac
                                               g_free, NULL);
Packit 1e8aac
Packit 1e8aac
  gtk_widget_init_template (GTK_WIDGET (properties));
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_project_properties_class_init (GladeProjectPropertiesClass *klass)
Packit 1e8aac
{
Packit 1e8aac
  GObjectClass *gobject_class;
Packit 1e8aac
  GtkWidgetClass *widget_class;
Packit 1e8aac
Packit 1e8aac
  gobject_class = G_OBJECT_CLASS (klass);
Packit 1e8aac
  widget_class  = GTK_WIDGET_CLASS (klass);
Packit 1e8aac
Packit 1e8aac
  gobject_class->finalize = glade_project_properties_finalize;
Packit 1e8aac
  gobject_class->set_property = glade_project_properties_set_property;
Packit 1e8aac
Packit 1e8aac
  g_object_class_install_property
Packit 1e8aac
    (gobject_class, PROP_PROJECT,
Packit 1e8aac
     g_param_spec_object ("project", _("Project"),
Packit 1e8aac
			  _("The project this properties dialog was created for"),
Packit 1e8aac
			  GLADE_TYPE_PROJECT,
Packit 1e8aac
			  G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
Packit 1e8aac
Packit 1e8aac
  /* Setup the template GtkBuilder xml for this class
Packit 1e8aac
   */
Packit 1e8aac
  gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/gladeui/glade-project-properties.ui");
Packit 1e8aac
Packit 1e8aac
  /* Define the relationship of the private entry and the entry defined in the xml
Packit 1e8aac
   */
Packit 1e8aac
  gtk_widget_class_bind_template_child_private (widget_class, GladeProjectProperties, resource_default_radio);
Packit 1e8aac
  gtk_widget_class_bind_template_child_private (widget_class, GladeProjectProperties, resource_relative_radio);
Packit 1e8aac
  gtk_widget_class_bind_template_child_private (widget_class, GladeProjectProperties, resource_fullpath_radio);
Packit 1e8aac
  gtk_widget_class_bind_template_child_private (widget_class, GladeProjectProperties, relative_path_entry);
Packit 1e8aac
  gtk_widget_class_bind_template_child_private (widget_class, GladeProjectProperties, full_path_button);
Packit 1e8aac
  gtk_widget_class_bind_template_child_private (widget_class, GladeProjectProperties, domain_entry);
Packit 1e8aac
  gtk_widget_class_bind_template_child_private (widget_class, GladeProjectProperties, template_checkbutton);
Packit 1e8aac
  gtk_widget_class_bind_template_child_private (widget_class, GladeProjectProperties, template_combobox);
Packit 1e8aac
  gtk_widget_class_bind_template_child_private (widget_class, GladeProjectProperties, toolkit_box);
Packit 1e8aac
  gtk_widget_class_bind_template_child_private (widget_class, GladeProjectProperties, css_filechooser);
Packit 1e8aac
  gtk_widget_class_bind_template_child_private (widget_class, GladeProjectProperties, css_checkbutton);
Packit 1e8aac
Packit 1e8aac
  gtk_widget_class_bind_template_child_private (widget_class, GladeProjectProperties, license_comboboxtext);
Packit 1e8aac
  gtk_widget_class_bind_template_child_private (widget_class, GladeProjectProperties, license_textview);
Packit 1e8aac
  gtk_widget_class_bind_template_child_private (widget_class, GladeProjectProperties, name_entrybuffer);
Packit 1e8aac
  gtk_widget_class_bind_template_child_private (widget_class, GladeProjectProperties, description_entrybuffer);
Packit 1e8aac
  gtk_widget_class_bind_template_child_private (widget_class, GladeProjectProperties, authors_textbuffer);
Packit 1e8aac
  gtk_widget_class_bind_template_child_private (widget_class, GladeProjectProperties, copyright_textbuffer);
Packit 1e8aac
  gtk_widget_class_bind_template_child_private (widget_class, GladeProjectProperties, license_textbuffer);
Packit 1e8aac
Packit 1e8aac
  
Packit 1e8aac
  /* Declare the callback ports that this widget class exposes, to bind with <signal>
Packit 1e8aac
   * connections defined in the GtkBuilder xml
Packit 1e8aac
   */
Packit 1e8aac
  gtk_widget_class_bind_template_callback (widget_class, on_template_combo_box_changed);
Packit 1e8aac
  gtk_widget_class_bind_template_callback (widget_class, on_template_checkbutton_toggled);
Packit 1e8aac
  gtk_widget_class_bind_template_callback (widget_class, resource_default_toggled);
Packit 1e8aac
  gtk_widget_class_bind_template_callback (widget_class, resource_relative_toggled);
Packit 1e8aac
  gtk_widget_class_bind_template_callback (widget_class, resource_fullpath_toggled);
Packit 1e8aac
  gtk_widget_class_bind_template_callback (widget_class, resource_full_path_set);
Packit 1e8aac
  gtk_widget_class_bind_template_callback (widget_class, verify_clicked);
Packit 1e8aac
  gtk_widget_class_bind_template_callback (widget_class, on_domain_entry_changed);
Packit 1e8aac
  gtk_widget_class_bind_template_callback (widget_class, on_relative_path_entry_insert_text);
Packit 1e8aac
  gtk_widget_class_bind_template_callback (widget_class, on_relative_path_entry_changed);
Packit 1e8aac
  gtk_widget_class_bind_template_callback (widget_class, on_glade_project_properties_hide);  
Packit 1e8aac
  gtk_widget_class_bind_template_callback (widget_class, on_css_filechooser_file_set);
Packit 1e8aac
  gtk_widget_class_bind_template_callback (widget_class, on_css_checkbutton_toggled);
Packit 1e8aac
  gtk_widget_class_bind_template_callback (widget_class, on_license_comboboxtext_changed);
Packit 1e8aac
  gtk_widget_class_bind_template_callback (widget_class, on_license_data_changed);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
/********************************************************
Packit 1e8aac
 *                     GObjectClass                     *
Packit 1e8aac
 ********************************************************/
Packit 1e8aac
static void
Packit 1e8aac
glade_project_properties_finalize (GObject *object)
Packit 1e8aac
{
Packit 1e8aac
  GladeProjectProperties        *properties = GLADE_PROJECT_PROPERTIES (object);
Packit 1e8aac
  GladeProjectPropertiesPrivate *priv = properties->priv;
Packit 1e8aac
Packit 1e8aac
  g_hash_table_destroy (priv->target_radios);
Packit 1e8aac
Packit 1e8aac
  G_OBJECT_CLASS (glade_project_properties_parent_class)->finalize (object);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
target_version_box_fill (GladeProjectProperties *properties)
Packit 1e8aac
{
Packit 1e8aac
  GladeProjectPropertiesPrivate *priv = properties->priv;
Packit 1e8aac
  GladeProject *project = priv->project;
Packit 1e8aac
  GtkWidget *vbox = priv->toolkit_box;
Packit 1e8aac
  GtkWidget *label, *active_radio, *target_radio, *hbox;
Packit 1e8aac
  GList *list, *targets;
Packit 1e8aac
Packit 1e8aac
  /* Add stuff to vbox */
Packit 1e8aac
  for (list = glade_app_get_catalogs (); list; list = g_list_next (list))
Packit 1e8aac
    {
Packit 1e8aac
      GladeCatalog *catalog = list->data;
Packit 1e8aac
      gint minor, major;
Packit 1e8aac
Packit 1e8aac
      /* Skip if theres only one option */
Packit 1e8aac
      if (g_list_length (glade_catalog_get_targets (catalog)) <= 1)
Packit 1e8aac
        continue;
Packit 1e8aac
Packit 1e8aac
      glade_project_get_target_version (project,
Packit 1e8aac
                                        glade_catalog_get_name (catalog),
Packit 1e8aac
                                        &major, &minor);
Packit 1e8aac
Packit 1e8aac
      /* Special case to mark GTK+ in upper case */
Packit 1e8aac
      if (strcmp (glade_catalog_get_name (catalog), "gtk+") == 0)
Packit 1e8aac
        label = gtk_label_new ("GTK+");
Packit 1e8aac
      else
Packit 1e8aac
        label = gtk_label_new (glade_catalog_get_name (catalog));
Packit 1e8aac
      gtk_widget_set_halign (label, GTK_ALIGN_START);
Packit 1e8aac
Packit 1e8aac
      gtk_widget_show (label);
Packit 1e8aac
      gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 2);
Packit 1e8aac
      hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
Packit 1e8aac
Packit 1e8aac
      active_radio = target_radio = NULL;
Packit 1e8aac
Packit 1e8aac
      for (targets = glade_catalog_get_targets (catalog);
Packit 1e8aac
           targets; targets = targets->next)
Packit 1e8aac
        {
Packit 1e8aac
          GladeTargetableVersion *version = targets->data;
Packit 1e8aac
          gchar *name = g_strdup_printf ("%d.%d",
Packit 1e8aac
                                         version->major,
Packit 1e8aac
                                         version->minor);
Packit 1e8aac
Packit 1e8aac
          if (!target_radio)
Packit 1e8aac
            target_radio = gtk_radio_button_new_with_label (NULL, name);
Packit 1e8aac
          else
Packit 1e8aac
            target_radio =
Packit 1e8aac
                gtk_radio_button_new_with_label_from_widget
Packit 1e8aac
                (GTK_RADIO_BUTTON (target_radio), name);
Packit 1e8aac
          g_free (name);
Packit 1e8aac
Packit 1e8aac
          g_signal_connect (G_OBJECT (target_radio), "clicked",
Packit 1e8aac
                            G_CALLBACK (target_button_clicked), properties);
Packit 1e8aac
Packit 1e8aac
          g_object_set_data (G_OBJECT (target_radio), "version", version);
Packit 1e8aac
          g_object_set_data (G_OBJECT (target_radio), "catalog",
Packit 1e8aac
                             (gchar *) glade_catalog_get_name (catalog));
Packit 1e8aac
Packit 1e8aac
          gtk_widget_show (target_radio);
Packit 1e8aac
          gtk_box_pack_end (GTK_BOX (hbox), target_radio, TRUE, TRUE, 2);
Packit 1e8aac
Packit 1e8aac
          if (major == version->major && minor == version->minor)
Packit 1e8aac
            active_radio = target_radio;
Packit 1e8aac
Packit 1e8aac
        }
Packit 1e8aac
Packit 1e8aac
      if (active_radio)
Packit 1e8aac
        {
Packit 1e8aac
          gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (active_radio), TRUE);
Packit 1e8aac
          g_hash_table_insert (priv->target_radios,
Packit 1e8aac
                               g_strdup (glade_catalog_get_name (catalog)),
Packit 1e8aac
                               gtk_radio_button_get_group (GTK_RADIO_BUTTON
Packit 1e8aac
                                                           (active_radio)));
Packit 1e8aac
        }
Packit 1e8aac
      else
Packit 1e8aac
        g_warning ("Corrupt catalog versions");
Packit 1e8aac
Packit 1e8aac
      gtk_widget_show (hbox);
Packit 1e8aac
      gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 2);
Packit 1e8aac
    }
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
update_prefs_for_resource_path (GladeProjectProperties *properties)
Packit 1e8aac
{
Packit 1e8aac
  GladeProjectPropertiesPrivate *priv = properties->priv;
Packit 1e8aac
  const gchar *resource_path;
Packit 1e8aac
Packit 1e8aac
  resource_path = glade_project_get_resource_path (priv->project);
Packit 1e8aac
  
Packit 1e8aac
  if (resource_path == NULL)
Packit 1e8aac
    {
Packit 1e8aac
      gtk_entry_set_text (GTK_ENTRY (priv->relative_path_entry), "");
Packit 1e8aac
      gtk_file_chooser_unselect_all (GTK_FILE_CHOOSER (priv->full_path_button));
Packit 1e8aac
Packit 1e8aac
      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->resource_default_radio), TRUE);
Packit 1e8aac
      gtk_widget_set_sensitive (priv->full_path_button, FALSE);
Packit 1e8aac
      gtk_widget_set_sensitive (priv->relative_path_entry, FALSE);
Packit 1e8aac
    }
Packit 1e8aac
  else if (g_path_is_absolute (resource_path) &&
Packit 1e8aac
           g_file_test (resource_path, G_FILE_TEST_IS_DIR))
Packit 1e8aac
    {
Packit 1e8aac
      gtk_entry_set_text (GTK_ENTRY (priv->relative_path_entry), "");
Packit 1e8aac
      gtk_file_chooser_select_filename (GTK_FILE_CHOOSER (priv->full_path_button),
Packit 1e8aac
                                        resource_path);
Packit 1e8aac
Packit 1e8aac
      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->resource_fullpath_radio), TRUE);
Packit 1e8aac
      gtk_widget_set_sensitive (priv->full_path_button, TRUE);
Packit 1e8aac
      gtk_widget_set_sensitive (priv->relative_path_entry, FALSE);
Packit 1e8aac
    }
Packit 1e8aac
  else
Packit 1e8aac
    {
Packit 1e8aac
      if (g_strcmp0 (resource_path, gtk_entry_get_text (GTK_ENTRY (priv->relative_path_entry))))
Packit 1e8aac
        gtk_entry_set_text (GTK_ENTRY (priv->relative_path_entry), resource_path);
Packit 1e8aac
Packit 1e8aac
      gtk_file_chooser_unselect_all (GTK_FILE_CHOOSER (priv->full_path_button));
Packit 1e8aac
Packit 1e8aac
      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->resource_relative_radio), TRUE);
Packit 1e8aac
      gtk_widget_set_sensitive (priv->relative_path_entry, TRUE);
Packit 1e8aac
      gtk_widget_set_sensitive (priv->full_path_button, FALSE);
Packit 1e8aac
    }
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_project_properties_set_project (GladeProjectProperties *properties,
Packit 1e8aac
				      GladeProject           *project)
Packit 1e8aac
{
Packit 1e8aac
  GladeProjectPropertiesPrivate *priv = properties->priv;
Packit 1e8aac
Packit 1e8aac
  /* No strong reference, we belong to the project */
Packit 1e8aac
  g_assert (priv->project == NULL);
Packit 1e8aac
  priv->project = project;
Packit 1e8aac
Packit 1e8aac
  g_signal_connect (priv->project, "notify::resource-path",
Packit 1e8aac
		    G_CALLBACK (project_resource_path_changed), properties);
Packit 1e8aac
  g_signal_connect (priv->project, "notify::template",
Packit 1e8aac
		    G_CALLBACK (project_template_changed), properties);
Packit 1e8aac
  g_signal_connect (priv->project, "notify::translation-domain",
Packit 1e8aac
		    G_CALLBACK (project_domain_changed), properties);
Packit 1e8aac
  g_signal_connect (priv->project, "notify::css-provider-path",
Packit 1e8aac
		    G_CALLBACK (project_css_provider_path_changed), properties);  
Packit 1e8aac
  g_signal_connect (priv->project, "targets-changed",
Packit 1e8aac
		    G_CALLBACK (project_targets_changed), properties);
Packit 1e8aac
  g_signal_connect (priv->project, "notify::license",
Packit 1e8aac
		    G_CALLBACK (project_license_changed), properties);
Packit 1e8aac
Packit 1e8aac
  target_version_box_fill (properties);
Packit 1e8aac
  update_prefs_for_resource_path (properties);
Packit 1e8aac
Packit 1e8aac
  project_template_changed (project, NULL, properties);
Packit 1e8aac
  project_domain_changed (project, NULL, properties);
Packit 1e8aac
  project_css_provider_path_changed (project, NULL, properties);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
glade_project_properties_set_property (GObject *object,
Packit 1e8aac
				       guint prop_id,
Packit 1e8aac
				       const GValue *value,
Packit 1e8aac
				       GParamSpec *pspec)
Packit 1e8aac
{
Packit 1e8aac
  switch (prop_id)
Packit 1e8aac
    {
Packit 1e8aac
    case PROP_PROJECT:
Packit 1e8aac
      glade_project_properties_set_project (GLADE_PROJECT_PROPERTIES (object),
Packit 1e8aac
					    g_value_get_object (value));
Packit 1e8aac
      break;
Packit 1e8aac
    default:
Packit 1e8aac
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
Packit 1e8aac
      break;
Packit 1e8aac
    }
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
/********************************************************
Packit 1e8aac
 *                     Callbacks                        *
Packit 1e8aac
 ********************************************************/
Packit 1e8aac
static void
Packit 1e8aac
target_button_clicked (GtkWidget              *widget,
Packit 1e8aac
		       GladeProjectProperties *properties)
Packit 1e8aac
{
Packit 1e8aac
  GladeProjectPropertiesPrivate *priv = properties->priv;
Packit 1e8aac
  GladeTargetableVersion        *version;
Packit 1e8aac
  gchar                         *catalog;
Packit 1e8aac
Packit 1e8aac
  if (priv->ignore_ui_cb)
Packit 1e8aac
    return;
Packit 1e8aac
Packit 1e8aac
  version = g_object_get_data (G_OBJECT (widget), "version");
Packit 1e8aac
  catalog = g_object_get_data (G_OBJECT (widget), "catalog");
Packit 1e8aac
  glade_command_set_project_target (priv->project, catalog, version->major, version->minor);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
resource_default_toggled (GtkWidget              *widget,
Packit 1e8aac
			  GladeProjectProperties *properties)
Packit 1e8aac
{
Packit 1e8aac
  GladeProjectPropertiesPrivate *priv = properties->priv;
Packit 1e8aac
Packit 1e8aac
  if (priv->ignore_ui_cb || 
Packit 1e8aac
      !gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)))
Packit 1e8aac
    return;
Packit 1e8aac
Packit 1e8aac
  glade_command_set_project_resource_path (priv->project, NULL);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
resource_relative_toggled (GtkWidget              *widget,
Packit 1e8aac
			   GladeProjectProperties *properties)
Packit 1e8aac
{
Packit 1e8aac
  GladeProjectPropertiesPrivate *priv = properties->priv;
Packit 1e8aac
  GtkToggleButton *toggle = GTK_TOGGLE_BUTTON (widget);
Packit 1e8aac
  
Packit 1e8aac
  if (priv->ignore_ui_cb || !gtk_toggle_button_get_active (toggle))
Packit 1e8aac
    return;
Packit 1e8aac
Packit 1e8aac
  glade_command_set_project_resource_path (priv->project, NULL);
Packit 1e8aac
  gtk_toggle_button_set_active (toggle, TRUE);
Packit 1e8aac
  gtk_widget_set_sensitive (priv->relative_path_entry, TRUE);
Packit 1e8aac
  gtk_widget_set_sensitive (priv->full_path_button, FALSE);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
resource_fullpath_toggled (GtkWidget              *widget,
Packit 1e8aac
			   GladeProjectProperties *properties)
Packit 1e8aac
{
Packit 1e8aac
  GladeProjectPropertiesPrivate *priv = properties->priv;
Packit 1e8aac
  GtkToggleButton *toggle = GTK_TOGGLE_BUTTON (widget);
Packit 1e8aac
Packit 1e8aac
  if (priv->ignore_ui_cb || !gtk_toggle_button_get_active (toggle))
Packit 1e8aac
    return;
Packit 1e8aac
Packit 1e8aac
  glade_command_set_project_resource_path (priv->project, NULL);
Packit 1e8aac
  gtk_toggle_button_set_active (toggle, TRUE);
Packit 1e8aac
  gtk_widget_set_sensitive (priv->relative_path_entry, FALSE);
Packit 1e8aac
  gtk_widget_set_sensitive (priv->full_path_button, TRUE);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
on_relative_path_entry_insert_text (GtkEditable            *editable,
Packit 1e8aac
                                    gchar                  *new_text,
Packit 1e8aac
                                    gint                    new_text_length,
Packit 1e8aac
                                    gint                   *position,
Packit 1e8aac
                                    GladeProjectProperties *properties) 
Packit 1e8aac
{
Packit 1e8aac
  GString *fullpath = g_string_new (gtk_entry_get_text (GTK_ENTRY(editable)));
Packit 1e8aac
Packit 1e8aac
  g_string_insert (fullpath, *position, new_text);
Packit 1e8aac
  
Packit 1e8aac
  if (g_path_is_absolute (fullpath->str))
Packit 1e8aac
    g_signal_stop_emission_by_name (editable, "insert-text");
Packit 1e8aac
  
Packit 1e8aac
  g_string_free (fullpath, TRUE);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
on_relative_path_entry_changed (GtkEntry *entry, GladeProjectProperties *properties)
Packit 1e8aac
{
Packit 1e8aac
  GladeProjectPropertiesPrivate *priv = properties->priv;
Packit 1e8aac
Packit 1e8aac
  if (priv->ignore_ui_cb)
Packit 1e8aac
    return;
Packit 1e8aac
Packit 1e8aac
  glade_command_set_project_resource_path (priv->project, gtk_entry_get_text (entry));
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
resource_full_path_set (GtkFileChooserButton *button, GladeProjectProperties *properties)
Packit 1e8aac
{
Packit 1e8aac
  GladeProjectPropertiesPrivate *priv = properties->priv;
Packit 1e8aac
  gchar *text;
Packit 1e8aac
  
Packit 1e8aac
  if (priv->ignore_ui_cb)
Packit 1e8aac
    return;
Packit 1e8aac
  
Packit 1e8aac
  text = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (button));
Packit 1e8aac
  glade_command_set_project_resource_path (priv->project, text);
Packit 1e8aac
  g_free (text);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
on_template_combo_box_changed (GtkComboBox            *combo,
Packit 1e8aac
			       GladeProjectProperties *properties)
Packit 1e8aac
{
Packit 1e8aac
  GladeProjectPropertiesPrivate *priv = properties->priv;
Packit 1e8aac
  GtkTreeIter iter;
Packit 1e8aac
Packit 1e8aac
  if (priv->ignore_ui_cb)
Packit 1e8aac
    return;
Packit 1e8aac
  
Packit 1e8aac
  if (gtk_combo_box_get_active_iter (combo, &iter))
Packit 1e8aac
    {
Packit 1e8aac
      GladeWidget *gwidget;
Packit 1e8aac
      GObject *object;
Packit 1e8aac
Packit 1e8aac
      gtk_tree_model_get (gtk_combo_box_get_model (combo), &iter,
Packit 1e8aac
                          GLADE_PROJECT_MODEL_COLUMN_OBJECT, &object, -1);
Packit 1e8aac
      
Packit 1e8aac
      gwidget = glade_widget_get_from_gobject (object);
Packit 1e8aac
Packit 1e8aac
      glade_command_set_project_template (priv->project, gwidget);
Packit 1e8aac
    }
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
on_template_checkbutton_toggled (GtkToggleButton        *togglebutton,
Packit 1e8aac
                                 GladeProjectProperties *properties)
Packit 1e8aac
{
Packit 1e8aac
  GladeProjectPropertiesPrivate *priv = properties->priv;
Packit 1e8aac
Packit 1e8aac
  if (priv->ignore_ui_cb)
Packit 1e8aac
    return;
Packit 1e8aac
  
Packit 1e8aac
  if (gtk_toggle_button_get_active (togglebutton))
Packit 1e8aac
    {
Packit 1e8aac
      gboolean composite = FALSE;
Packit 1e8aac
      GList *l;
Packit 1e8aac
Packit 1e8aac
      for (l = glade_project_toplevels (priv->project); l; l = l->next)
Packit 1e8aac
	{
Packit 1e8aac
	  GObject *object = l->data;
Packit 1e8aac
	  GladeWidget *gwidget;
Packit 1e8aac
Packit 1e8aac
	  gwidget = glade_widget_get_from_gobject (object);
Packit 1e8aac
Packit 1e8aac
	  if (GTK_IS_WIDGET (object))
Packit 1e8aac
	    {
Packit 1e8aac
	      glade_command_set_project_template (priv->project, gwidget);
Packit 1e8aac
	      composite = TRUE;
Packit 1e8aac
	      break;
Packit 1e8aac
	    }
Packit 1e8aac
	}
Packit 1e8aac
Packit 1e8aac
      if (!composite)
Packit 1e8aac
	gtk_toggle_button_set_active (togglebutton, FALSE);
Packit 1e8aac
    }
Packit 1e8aac
  else
Packit 1e8aac
    glade_command_set_project_template (priv->project, NULL);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static gboolean
Packit 1e8aac
template_visible_func (GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
Packit 1e8aac
{
Packit 1e8aac
  GtkTreeIter parent;
Packit 1e8aac
  gboolean visible;
Packit 1e8aac
  GObject *object;
Packit 1e8aac
Packit 1e8aac
  visible = !gtk_tree_model_iter_parent (model, &parent, iter);
Packit 1e8aac
Packit 1e8aac
  if (visible)
Packit 1e8aac
    {
Packit 1e8aac
      gtk_tree_model_get (model, iter,
Packit 1e8aac
			  GLADE_PROJECT_MODEL_COLUMN_OBJECT, &object,
Packit 1e8aac
			  -1);
Packit 1e8aac
Packit 1e8aac
      visible = GTK_IS_WIDGET (object);
Packit 1e8aac
      g_object_unref (object);
Packit 1e8aac
    }
Packit 1e8aac
Packit 1e8aac
  return visible;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static GtkTreeModel *
Packit 1e8aac
glade_project_toplevel_model_filter_new (GladeProjectProperties *properties)
Packit 1e8aac
{
Packit 1e8aac
  GladeProjectPropertiesPrivate *priv = properties->priv;
Packit 1e8aac
  GtkTreeModel *model;
Packit 1e8aac
Packit 1e8aac
  model = gtk_tree_model_filter_new (GTK_TREE_MODEL (priv->project), NULL);
Packit 1e8aac
  gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (model),
Packit 1e8aac
                                          template_visible_func, NULL, NULL);
Packit 1e8aac
  return model;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
verify_clicked (GtkWidget *button, GladeProjectProperties *properties)
Packit 1e8aac
{
Packit 1e8aac
  GladeProjectPropertiesPrivate *priv = properties->priv;
Packit 1e8aac
Packit 1e8aac
  if (glade_project_verify (priv->project, FALSE,
Packit 1e8aac
			    GLADE_VERIFY_VERSIONS     |
Packit 1e8aac
			    GLADE_VERIFY_DEPRECATIONS |
Packit 1e8aac
			    GLADE_VERIFY_UNRECOGNIZED))
Packit 1e8aac
    {
Packit 1e8aac
      gchar *name = glade_project_get_name (priv->project);
Packit 1e8aac
      glade_util_ui_message (glade_app_get_window (),
Packit 1e8aac
                             GLADE_UI_INFO, NULL,
Packit 1e8aac
                             _("Project %s has no deprecated widgets "
Packit 1e8aac
                               "or version mismatches."), name);
Packit 1e8aac
      g_free (name);
Packit 1e8aac
    }
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
on_domain_entry_changed (GtkWidget *entry, GladeProjectProperties *properties)
Packit 1e8aac
{
Packit 1e8aac
  GladeProjectPropertiesPrivate *priv = properties->priv;
Packit 1e8aac
Packit 1e8aac
  if (priv->ignore_ui_cb)
Packit 1e8aac
    return;
Packit 1e8aac
Packit 1e8aac
  glade_command_set_project_domain (priv->project, gtk_entry_get_text (GTK_ENTRY (entry)));
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
#define GNU_GPLv2_TEXT \
Packit 1e8aac
    "$(name) - $(description)\n" \
Packit 1e8aac
    "Copyright (C) $(copyright)\n" \
Packit 1e8aac
    "\n" \
Packit 1e8aac
    "This program is free software; you can redistribute it and/or\n" \
Packit 1e8aac
    "modify it under the terms of the GNU General Public License\n" \
Packit 1e8aac
    "as published by the Free Software Foundation; either version 2\n" \
Packit 1e8aac
    "of the License, or (at your option) any later version.\n" \
Packit 1e8aac
    "\n" \
Packit 1e8aac
    "This program is distributed in the hope that it will be useful,\n" \
Packit 1e8aac
    "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" \
Packit 1e8aac
    "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n" \
Packit 1e8aac
    "GNU General Public License for more details.\n" \
Packit 1e8aac
    "\n" \
Packit 1e8aac
    "You should have received a copy of the GNU General Public License\n" \
Packit 1e8aac
    "along with this program; if not, write to the Free Software\n" \
Packit 1e8aac
    "Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.\n"
Packit 1e8aac
Packit 1e8aac
#define GNU_LGPLv2_TEXT \
Packit 1e8aac
    "$(name) - $(description)\n" \
Packit 1e8aac
    "Copyright (C) $(copyright)\n" \
Packit 1e8aac
    "\n" \
Packit 1e8aac
    "This library is free software; you can redistribute it and/or\n" \
Packit 1e8aac
    "modify it under the terms of the GNU Lesser General Public\n" \
Packit 1e8aac
    "License as published by the Free Software Foundation; either\n" \
Packit 1e8aac
    "version 2.1 of the License, or (at your option) any later version.\n" \
Packit 1e8aac
    "\n" \
Packit 1e8aac
    "This library is distributed in the hope that it will be useful,\n" \
Packit 1e8aac
    "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" \
Packit 1e8aac
    "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n" \
Packit 1e8aac
    "Lesser General Public License for more details.\n" \
Packit 1e8aac
    "\n" \
Packit 1e8aac
    "You should have received a copy of the GNU Lesser General Public\n" \
Packit 1e8aac
    "License along with this library; if not, write to the Free Software\n" \
Packit 1e8aac
    "Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n"
Packit 1e8aac
Packit 1e8aac
#define GNU_GPLv3_TEXT \
Packit 1e8aac
    "Copyright (C) $(copyright)\n" \
Packit 1e8aac
    "\n" \
Packit 1e8aac
    "This file is part of $(name).\n" \
Packit 1e8aac
    "\n" \
Packit 1e8aac
    "$(name) is free software: you can redistribute it and/or modify\n" \
Packit 1e8aac
    "it under the terms of the GNU General Public License as published by\n" \
Packit 1e8aac
    "the Free Software Foundation, either version 3 of the License, or\n" \
Packit 1e8aac
    "(at your option) any later version.\n" \
Packit 1e8aac
    "\n" \
Packit 1e8aac
    "$(name) is distributed in the hope that it will be useful,\n" \
Packit 1e8aac
    "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" \
Packit 1e8aac
    "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n" \
Packit 1e8aac
    "GNU General Public License for more details.\n" \
Packit 1e8aac
    "\n" \
Packit 1e8aac
    "You should have received a copy of the GNU General Public License\n" \
Packit 1e8aac
    "along with $(name).  If not, see <http://www.gnu.org/licenses/>.\n"
Packit 1e8aac
Packit 1e8aac
#define GNU_LGPLv3_TEXT \
Packit 1e8aac
    "Copyright (C) $(copyright)\n" \
Packit 1e8aac
    "\n" \
Packit 1e8aac
    "This file is part of $(name).\n" \
Packit 1e8aac
    "\n" \
Packit 1e8aac
    "$(name) is free software: you can redistribute it and/or modify\n" \
Packit 1e8aac
    "it under the terms of the GNU Lesser General Public License as published by\n" \
Packit 1e8aac
    "the Free Software Foundation, either version 3 of the License, or\n" \
Packit 1e8aac
    "(at your option) any later version.\n" \
Packit 1e8aac
    "\n" \
Packit 1e8aac
    "$(name) is distributed in the hope that it will be useful,\n" \
Packit 1e8aac
    "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" \
Packit 1e8aac
    "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n" \
Packit 1e8aac
    "GNU Lesser General Public License for more details.\n" \
Packit 1e8aac
    "\n" \
Packit 1e8aac
    "You should have received a copy of the GNU Lesser General Public License\n" \
Packit 1e8aac
    "along with $(name).  If not, see <http://www.gnu.org/licenses/>.\n"
Packit 1e8aac
Packit 1e8aac
#define BSD3c_TEXT \
Packit 1e8aac
    "Copyright (c) $(copyright)\n" \
Packit 1e8aac
    "All rights reserved.\n" \
Packit 1e8aac
    "\n" \
Packit 1e8aac
    "Redistribution and use in source and binary forms, with or without\n" \
Packit 1e8aac
    "modification, are permitted provided that the following conditions are met:\n" \
Packit 1e8aac
    "    * Redistributions of source code must retain the above copyright\n" \
Packit 1e8aac
    "      notice, this list of conditions and the following disclaimer.\n" \
Packit 1e8aac
    "    * Redistributions in binary form must reproduce the above copyright\n" \
Packit 1e8aac
    "      notice, this list of conditions and the following disclaimer in the\n" \
Packit 1e8aac
    "      documentation and/or other materials provided with the distribution.\n" \
Packit 1e8aac
    "    * Neither the name of the <organization> nor the\n" \
Packit 1e8aac
    "      names of its contributors may be used to endorse or promote products\n" \
Packit 1e8aac
    "      derived from this software without specific prior written permission.\n" \
Packit 1e8aac
    "\n" \
Packit 1e8aac
    "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n" \
Packit 1e8aac
    "ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n" \
Packit 1e8aac
    "WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n" \
Packit 1e8aac
    "DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n" \
Packit 1e8aac
    "DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n" \
Packit 1e8aac
    "(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n" \
Packit 1e8aac
    "LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n" \
Packit 1e8aac
    "ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n" \
Packit 1e8aac
    "(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n" \
Packit 1e8aac
    "SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
Packit 1e8aac
Packit 1e8aac
#define BSD2c_TEXT \
Packit 1e8aac
    "Copyright (c) $(copyright)\n" \
Packit 1e8aac
    "All rights reserved.\n" \
Packit 1e8aac
    "\n" \
Packit 1e8aac
    "Redistribution and use in source and binary forms, with or without\n" \
Packit 1e8aac
    "modification, are permitted provided that the following conditions are met:\n" \
Packit 1e8aac
    "\n" \
Packit 1e8aac
    "1. Redistributions of source code must retain the above copyright notice, this\n" \
Packit 1e8aac
    "   list of conditions and the following disclaimer. \n" \
Packit 1e8aac
    "2. Redistributions in binary form must reproduce the above copyright notice,\n" \
Packit 1e8aac
    "   this list of conditions and the following disclaimer in the documentation\n" \
Packit 1e8aac
    "   and/or other materials provided with the distribution. \n" \
Packit 1e8aac
    "\n" \
Packit 1e8aac
    "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n" \
Packit 1e8aac
    "ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n" \
Packit 1e8aac
    "WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n" \
Packit 1e8aac
    "DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\n" \
Packit 1e8aac
    "ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n" \
Packit 1e8aac
    "(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n" \
Packit 1e8aac
    "LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n" \
Packit 1e8aac
    "ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n" \
Packit 1e8aac
    "(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n" \
Packit 1e8aac
    "SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
Packit 1e8aac
Packit 1e8aac
#define APACHE2_TEXT \
Packit 1e8aac
    "Copyright $(copyright)\n" \
Packit 1e8aac
    "\n" \
Packit 1e8aac
    "Licensed under the Apache License, Version 2.0 (the \"License\"); \n" \
Packit 1e8aac
    "you may not use this file except in compliance with the License. \n" \
Packit 1e8aac
    "You may obtain a copy of the License at \n" \
Packit 1e8aac
    "\n" \
Packit 1e8aac
    "    http://www.apache.org/licenses/LICENSE-2.0 \n" \
Packit 1e8aac
    "\n" \
Packit 1e8aac
    "Unless required by applicable law or agreed to in writing, software \n" \
Packit 1e8aac
    "distributed under the License is distributed on an \"AS IS\" BASIS, \n" \
Packit 1e8aac
    "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. \n" \
Packit 1e8aac
    "See the License for the specific language governing permissions and \n" \
Packit 1e8aac
    "limitations under the License. \n"
Packit 1e8aac
Packit 1e8aac
#define GNU_ALL_PERMISSIVE_TEXT \
Packit 1e8aac
    "Copyright (C) $(copyright)\n" \
Packit 1e8aac
    "\n" \
Packit 1e8aac
    "Copying and distribution of this file, with or without modification,\n" \
Packit 1e8aac
    "are permitted in any medium without royalty provided the copyright\n" \
Packit 1e8aac
    "notice and this notice are preserved.  This file is offered as-is,\n" \
Packit 1e8aac
    "without any warranty.\n"
Packit 1e8aac
Packit 1e8aac
#define MIT_TEXT \
Packit 1e8aac
    "The MIT License (MIT)\n" \
Packit 1e8aac
    "\n" \
Packit 1e8aac
    "Copyright (c) $(copyright)\n" \
Packit 1e8aac
    "\n" \
Packit 1e8aac
    "Permission is hereby granted, free of charge, to any person obtaining a copy\n" \
Packit 1e8aac
    "of this software and associated documentation files (the \"Software\"), to deal\n" \
Packit 1e8aac
    "in the Software without restriction, including without limitation the rights\n" \
Packit 1e8aac
    "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n" \
Packit 1e8aac
    "copies of the Software, and to permit persons to whom the Software is\n" \
Packit 1e8aac
    "furnished to do so, subject to the following conditions:\n" \
Packit 1e8aac
    "\n" \
Packit 1e8aac
    "The above copyright notice and this permission notice shall be included in\n" \
Packit 1e8aac
    "all copies or substantial portions of the Software.\n" \
Packit 1e8aac
    "\n" \
Packit 1e8aac
    "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n" \
Packit 1e8aac
    "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n" \
Packit 1e8aac
    "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n" \
Packit 1e8aac
    "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n" \
Packit 1e8aac
    "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n" \
Packit 1e8aac
    "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n" \
Packit 1e8aac
    "THE SOFTWARE.\n"
Packit 1e8aac
Packit 1e8aac
static gchar *
Packit 1e8aac
gpp_get_license_from_id (const gchar *id)
Packit 1e8aac
{
Packit 1e8aac
  if (!g_strcmp0 (id, "gplv2"))
Packit 1e8aac
    return GNU_GPLv2_TEXT;
Packit 1e8aac
  else if (!g_strcmp0 (id, "gplv3"))
Packit 1e8aac
    return GNU_GPLv3_TEXT;
Packit 1e8aac
  else if (!g_strcmp0 (id, "lgplv2"))
Packit 1e8aac
    return GNU_LGPLv2_TEXT;
Packit 1e8aac
  else if (!g_strcmp0 (id, "lgplv3"))
Packit 1e8aac
    return GNU_LGPLv3_TEXT;
Packit 1e8aac
  else if (!g_strcmp0 (id, "bsd2c"))
Packit 1e8aac
    return BSD2c_TEXT;
Packit 1e8aac
  else if (!g_strcmp0 (id, "bsd3c"))
Packit 1e8aac
    return BSD3c_TEXT;
Packit 1e8aac
  else if (!g_strcmp0 (id, "apache2"))
Packit 1e8aac
    return APACHE2_TEXT;
Packit 1e8aac
  else if (!g_strcmp0 (id, "mit"))
Packit 1e8aac
    return MIT_TEXT;
Packit 1e8aac
  else if (!g_strcmp0 (id, "all_permissive"))
Packit 1e8aac
    return GNU_ALL_PERMISSIVE_TEXT;
Packit 1e8aac
  else
Packit 1e8aac
    return NULL;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static gint
Packit 1e8aac
string_count_new_lines (const gchar *str)
Packit 1e8aac
{
Packit 1e8aac
  gint c = 0;
Packit 1e8aac
Packit 1e8aac
  while (*str)
Packit 1e8aac
    {
Packit 1e8aac
      if (*str == '\n')
Packit 1e8aac
        c++;
Packit 1e8aac
      str = g_utf8_next_char (str);
Packit 1e8aac
    }
Packit 1e8aac
  return c;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
gpp_update_license (GladeProjectProperties *properties, gchar *license)
Packit 1e8aac
{
Packit 1e8aac
  GladeProjectPropertiesPrivate *priv = properties->priv;
Packit 1e8aac
  const gchar *name, *description;
Packit 1e8aac
  gchar *copyright, *authors;
Packit 1e8aac
Packit 1e8aac
  if (!license)
Packit 1e8aac
    return;
Packit 1e8aac
Packit 1e8aac
  /* get data */
Packit 1e8aac
  name = gtk_entry_buffer_get_text (priv->name_entrybuffer);
Packit 1e8aac
  description = gtk_entry_buffer_get_text (priv->description_entrybuffer);
Packit 1e8aac
  
Packit 1e8aac
  g_object_get (priv->copyright_textbuffer, "text", &copyright, NULL);
Packit 1e8aac
  g_object_get (priv->authors_textbuffer, "text", &authors, NULL);
Packit 1e8aac
  
Packit 1e8aac
  /* Now we can replace strings in the license template */
Packit 1e8aac
  license = _glade_util_strreplace (license, FALSE, "$(name)", name);
Packit 1e8aac
  license = _glade_util_strreplace (license, TRUE, "$(description)", description);
Packit 1e8aac
  license = _glade_util_strreplace (license, TRUE, "$(copyright)", copyright);
Packit 1e8aac
Packit 1e8aac
  if (authors && *authors)
Packit 1e8aac
    {
Packit 1e8aac
      gchar *tmp = license;
Packit 1e8aac
Packit 1e8aac
      if (string_count_new_lines (authors))
Packit 1e8aac
        license = g_strconcat (license, "\n", "Authors:", "\n", authors, NULL);
Packit 1e8aac
      else
Packit 1e8aac
        license = g_strconcat (license, "\n", "Author:", " ", authors, NULL);
Packit 1e8aac
Packit 1e8aac
      g_free (tmp);
Packit 1e8aac
    }
Packit 1e8aac
  
Packit 1e8aac
  gtk_text_buffer_set_text (priv->license_textbuffer, license, -1);
Packit 1e8aac
Packit 1e8aac
  g_free (license);
Packit 1e8aac
  g_free (copyright);
Packit 1e8aac
  g_free (authors);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
on_license_data_changed (GladeProjectProperties *properties)
Packit 1e8aac
{
Packit 1e8aac
  const gchar *id = gtk_combo_box_get_active_id (properties->priv->license_comboboxtext);
Packit 1e8aac
  gchar *license;
Packit 1e8aac
Packit 1e8aac
  if ((license = gpp_get_license_from_id (id)))
Packit 1e8aac
    gpp_update_license (properties, license);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
on_license_comboboxtext_changed (GtkComboBox            *widget,
Packit 1e8aac
                                 GladeProjectProperties *properties)
Packit 1e8aac
{
Packit 1e8aac
  GladeProjectPropertiesPrivate *priv = properties->priv;
Packit 1e8aac
  gchar *license;
Packit 1e8aac
Packit 1e8aac
  if ((license = gpp_get_license_from_id (gtk_combo_box_get_active_id (widget))))
Packit 1e8aac
    {
Packit 1e8aac
      gpp_update_license (properties, license);
Packit 1e8aac
      gtk_text_view_set_editable (priv->license_textview, FALSE);
Packit 1e8aac
    }
Packit 1e8aac
  else
Packit 1e8aac
    {
Packit 1e8aac
      /* Other license */
Packit 1e8aac
      gtk_text_buffer_set_text (priv->license_textbuffer, "", -1);      
Packit 1e8aac
      gtk_text_view_set_editable (priv->license_textview, TRUE);
Packit 1e8aac
      gtk_widget_grab_focus (GTK_WIDGET (priv->license_textview));
Packit 1e8aac
    }
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
on_glade_project_properties_hide (GtkWidget              *widget,
Packit 1e8aac
                                  GladeProjectProperties *properties)
Packit 1e8aac
{
Packit 1e8aac
  GladeProjectPropertiesPrivate *priv = properties->priv;
Packit 1e8aac
  GtkTextIter start, end;
Packit 1e8aac
  gchar *license;
Packit 1e8aac
Packit 1e8aac
  gtk_text_buffer_get_bounds (priv->license_textbuffer, &start, &end;;
Packit 1e8aac
  license = gtk_text_buffer_get_text (priv->license_textbuffer, &start, &end, FALSE);
Packit 1e8aac
  g_strstrip (license);
Packit 1e8aac
Packit 1e8aac
  glade_command_set_project_license (priv->project, (license[0] != '\0') ? license : NULL);
Packit 1e8aac
Packit 1e8aac
  g_free (license);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
on_css_checkbutton_toggled (GtkWidget *widget, GladeProjectProperties *properties)
Packit 1e8aac
{
Packit 1e8aac
  GladeProjectPropertiesPrivate *priv = properties->priv;
Packit 1e8aac
Packit 1e8aac
  if (priv->ignore_ui_cb)
Packit 1e8aac
    return;
Packit 1e8aac
Packit 1e8aac
  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)))
Packit 1e8aac
    {
Packit 1e8aac
      gtk_widget_set_sensitive (priv->css_filechooser, TRUE);
Packit 1e8aac
    }
Packit 1e8aac
  else
Packit 1e8aac
    {
Packit 1e8aac
      gtk_widget_set_sensitive (priv->css_filechooser, FALSE);
Packit 1e8aac
      glade_project_set_css_provider_path (priv->project, NULL);
Packit 1e8aac
    }
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
on_css_filechooser_file_set (GtkFileChooserButton   *widget,
Packit 1e8aac
                             GladeProjectProperties *properties)
Packit 1e8aac
{
Packit 1e8aac
  GladeProjectPropertiesPrivate *priv = properties->priv;
Packit 1e8aac
  const gchar *path;
Packit 1e8aac
Packit 1e8aac
  if (priv->ignore_ui_cb)
Packit 1e8aac
    return;
Packit 1e8aac
Packit 1e8aac
  path = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (widget));
Packit 1e8aac
Packit 1e8aac
  glade_project_set_css_provider_path (priv->project, path);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
/******************************************************
Packit 1e8aac
 *                   Project Callbacks                *
Packit 1e8aac
 ******************************************************/
Packit 1e8aac
static void
Packit 1e8aac
project_targets_changed (GladeProject           *project,
Packit 1e8aac
			 GladeProjectProperties *properties)
Packit 1e8aac
{
Packit 1e8aac
  GladeProjectPropertiesPrivate *priv = properties->priv;
Packit 1e8aac
  GList *list;
Packit 1e8aac
  GSList *radios, *l;
Packit 1e8aac
Packit 1e8aac
  priv->ignore_ui_cb = TRUE;
Packit 1e8aac
Packit 1e8aac
  /* For each catalog */
Packit 1e8aac
  for (list = glade_app_get_catalogs (); list; list = g_list_next (list))
Packit 1e8aac
    {
Packit 1e8aac
      GladeTargetableVersion *version;
Packit 1e8aac
      GladeCatalog *catalog = list->data;
Packit 1e8aac
      gint minor, major;
Packit 1e8aac
Packit 1e8aac
      /* Skip if theres only one option */
Packit 1e8aac
      if (g_list_length (glade_catalog_get_targets (catalog)) <= 1)
Packit 1e8aac
        continue;
Packit 1e8aac
Packit 1e8aac
      /* Fetch the version for this project */
Packit 1e8aac
      glade_project_get_target_version (priv->project,
Packit 1e8aac
                                        glade_catalog_get_name (catalog),
Packit 1e8aac
                                        &major, &minor);
Packit 1e8aac
Packit 1e8aac
      /* Fetch the radios for this catalog  */
Packit 1e8aac
      if (priv->target_radios &&
Packit 1e8aac
	  (radios = g_hash_table_lookup (priv->target_radios, glade_catalog_get_name (catalog))) != NULL)
Packit 1e8aac
	{
Packit 1e8aac
	  for (l = radios; l; l = l->next)
Packit 1e8aac
	    {
Packit 1e8aac
	      GtkWidget *radio = l->data;
Packit 1e8aac
Packit 1e8aac
	      /* Activate the appropriate button for the project/catalog */
Packit 1e8aac
	      version = g_object_get_data (G_OBJECT (radio), "version");
Packit 1e8aac
	      if (version->major == major && version->minor == minor)
Packit 1e8aac
		{
Packit 1e8aac
		  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), TRUE);
Packit 1e8aac
		  break;
Packit 1e8aac
		}
Packit 1e8aac
	    }
Packit 1e8aac
	}
Packit 1e8aac
    }
Packit 1e8aac
  priv->ignore_ui_cb = FALSE;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
project_domain_changed (GladeProject           *project,
Packit 1e8aac
			GParamSpec             *pspec,
Packit 1e8aac
			GladeProjectProperties *properties)
Packit 1e8aac
{
Packit 1e8aac
  GladeProjectPropertiesPrivate *priv = properties->priv;
Packit 1e8aac
  const gchar *domain;
Packit 1e8aac
Packit 1e8aac
  priv->ignore_ui_cb = TRUE;
Packit 1e8aac
  
Packit 1e8aac
  domain = glade_project_get_translation_domain (priv->project);
Packit 1e8aac
  gtk_entry_set_text (GTK_ENTRY (priv->domain_entry), domain ? domain : "");
Packit 1e8aac
Packit 1e8aac
  priv->ignore_ui_cb = FALSE;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
project_resource_path_changed (GladeProject           *project,
Packit 1e8aac
			       GParamSpec             *pspec,
Packit 1e8aac
			       GladeProjectProperties *properties)
Packit 1e8aac
{
Packit 1e8aac
  GladeProjectPropertiesPrivate *priv = properties->priv;
Packit 1e8aac
  priv->ignore_ui_cb = TRUE;
Packit 1e8aac
  update_prefs_for_resource_path (properties);
Packit 1e8aac
  priv->ignore_ui_cb = FALSE;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
project_template_changed (GladeProject           *project,
Packit 1e8aac
			  GParamSpec             *pspec,
Packit 1e8aac
			  GladeProjectProperties *properties)
Packit 1e8aac
{
Packit 1e8aac
  GladeProjectPropertiesPrivate *priv = properties->priv;
Packit 1e8aac
  GtkTreeModel *model;
Packit 1e8aac
  GtkTreeIter iter;
Packit 1e8aac
  gboolean valid;
Packit 1e8aac
  gboolean template_found = FALSE;
Packit 1e8aac
Packit 1e8aac
  priv->ignore_ui_cb = TRUE;
Packit 1e8aac
Packit 1e8aac
  model = gtk_combo_box_get_model (GTK_COMBO_BOX (priv->template_combobox));
Packit 1e8aac
  if (!model)
Packit 1e8aac
    {
Packit 1e8aac
      model = glade_project_toplevel_model_filter_new (properties);
Packit 1e8aac
Packit 1e8aac
      gtk_combo_box_set_model (GTK_COMBO_BOX (priv->template_combobox), model);
Packit 1e8aac
      g_object_unref (model);
Packit 1e8aac
    }
Packit 1e8aac
Packit 1e8aac
  valid = gtk_tree_model_get_iter_first (model, &iter);
Packit 1e8aac
  while (valid)
Packit 1e8aac
    {
Packit 1e8aac
      GladeWidget *gwidget;
Packit 1e8aac
      GObject *obj;
Packit 1e8aac
      
Packit 1e8aac
      gtk_tree_model_get (model, &iter,
Packit 1e8aac
                          GLADE_PROJECT_MODEL_COLUMN_OBJECT, &obj,
Packit 1e8aac
                          -1);
Packit 1e8aac
Packit 1e8aac
      gwidget = glade_widget_get_from_gobject (obj);
Packit 1e8aac
      g_object_unref (obj);
Packit 1e8aac
Packit 1e8aac
      if (gwidget == glade_project_get_template (priv->project))
Packit 1e8aac
	{
Packit 1e8aac
          gtk_combo_box_set_active_iter (GTK_COMBO_BOX (priv->template_combobox), &iter);
Packit 1e8aac
Packit 1e8aac
	  template_found = TRUE;
Packit 1e8aac
	  break;
Packit 1e8aac
        }
Packit 1e8aac
Packit 1e8aac
      valid = gtk_tree_model_iter_next (model, &iter);
Packit 1e8aac
    }
Packit 1e8aac
Packit 1e8aac
  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->template_checkbutton), template_found);
Packit 1e8aac
  gtk_widget_set_sensitive (priv->template_combobox, template_found);
Packit 1e8aac
Packit 1e8aac
  if (!template_found && gtk_combo_box_get_model (GTK_COMBO_BOX (priv->template_combobox)))
Packit 1e8aac
    gtk_combo_box_set_active_iter (GTK_COMBO_BOX (priv->template_combobox), NULL);
Packit 1e8aac
Packit 1e8aac
  priv->ignore_ui_cb = FALSE;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
project_license_changed (GladeProject           *project,
Packit 1e8aac
                         GParamSpec             *pspec,
Packit 1e8aac
			 GladeProjectProperties *properties)
Packit 1e8aac
{
Packit 1e8aac
  GladeProjectPropertiesPrivate *priv = properties->priv;
Packit 1e8aac
Packit 1e8aac
  priv->ignore_ui_cb = TRUE;  
Packit 1e8aac
  gtk_text_buffer_set_text (priv->license_textbuffer, 
Packit 1e8aac
                            glade_project_get_license (project),
Packit 1e8aac
                            -1);
Packit 1e8aac
  priv->ignore_ui_cb = FALSE;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
static void
Packit 1e8aac
project_css_provider_path_changed (GladeProject           *project,
Packit 1e8aac
                                   GParamSpec             *pspec,
Packit 1e8aac
                                   GladeProjectProperties *properties)
Packit 1e8aac
{
Packit 1e8aac
  GladeProjectPropertiesPrivate *priv = properties->priv;
Packit 1e8aac
  const gchar *filename = glade_project_get_css_provider_path (project);
Packit 1e8aac
  GtkFileChooser *chooser = GTK_FILE_CHOOSER (priv->css_filechooser);
Packit 1e8aac
Packit 1e8aac
  priv->ignore_ui_cb = TRUE;
Packit 1e8aac
  
Packit 1e8aac
  if (filename)
Packit 1e8aac
    {
Packit 1e8aac
      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->css_checkbutton), TRUE);
Packit 1e8aac
      gtk_widget_set_sensitive (priv->css_filechooser, TRUE);
Packit 1e8aac
      gtk_file_chooser_set_filename (chooser, filename);
Packit 1e8aac
    }
Packit 1e8aac
  else
Packit 1e8aac
    {
Packit 1e8aac
      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->css_checkbutton), FALSE);
Packit 1e8aac
      gtk_widget_set_sensitive (priv->css_filechooser, FALSE);
Packit 1e8aac
      gtk_file_chooser_unselect_all (chooser);
Packit 1e8aac
    }
Packit 1e8aac
Packit 1e8aac
  priv->ignore_ui_cb = FALSE;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
/* Private API */
Packit 1e8aac
Packit 1e8aac
void
Packit 1e8aac
_glade_project_properties_set_license_data (GladeProjectProperties *props,
Packit 1e8aac
                                            const gchar *license,
Packit 1e8aac
                                            const gchar *name,
Packit 1e8aac
                                            const gchar *description,
Packit 1e8aac
                                            const gchar *copyright,
Packit 1e8aac
                                            const gchar *authors)
Packit 1e8aac
{
Packit 1e8aac
  if (!license ||
Packit 1e8aac
      !gtk_combo_box_set_active_id (props->priv->license_comboboxtext, license))
Packit 1e8aac
    {
Packit 1e8aac
      gtk_combo_box_set_active_id (props->priv->license_comboboxtext, "other");
Packit 1e8aac
      name = description = copyright = authors = "";
Packit 1e8aac
      license = "other";
Packit 1e8aac
    }
Packit 1e8aac
        
Packit 1e8aac
  gtk_entry_buffer_set_text (props->priv->name_entrybuffer, name ? name : "", -1);
Packit 1e8aac
  gtk_entry_buffer_set_text (props->priv->description_entrybuffer, description ? description : "", -1);
Packit 1e8aac
Packit 1e8aac
  gtk_text_buffer_set_text (props->priv->copyright_textbuffer, copyright ? copyright : "", -1);
Packit 1e8aac
  gtk_text_buffer_set_text (props->priv->authors_textbuffer, authors ? authors : "", -1);
Packit 1e8aac
Packit 1e8aac
  gpp_update_license (props, gpp_get_license_from_id (license));
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
void
Packit 1e8aac
_glade_project_properties_get_license_data (GladeProjectProperties *props,
Packit 1e8aac
                                            gchar **license,
Packit 1e8aac
                                            gchar **name,
Packit 1e8aac
                                            gchar **description,
Packit 1e8aac
                                            gchar **copyright,
Packit 1e8aac
                                            gchar **authors)
Packit 1e8aac
{
Packit 1e8aac
  const gchar *id = gtk_combo_box_get_active_id (props->priv->license_comboboxtext);
Packit 1e8aac
Packit 1e8aac
  if (!g_strcmp0 (id, "other"))
Packit 1e8aac
    {
Packit 1e8aac
      *license = *name = *description = *copyright = *authors = NULL;
Packit 1e8aac
      return;
Packit 1e8aac
    }
Packit 1e8aac
Packit 1e8aac
  *license = g_strdup (id);
Packit 1e8aac
  *name = g_strdup (gtk_entry_buffer_get_text (props->priv->name_entrybuffer));
Packit 1e8aac
  *description = g_strdup (gtk_entry_buffer_get_text (props->priv->description_entrybuffer));
Packit 1e8aac
Packit 1e8aac
  g_object_get (props->priv->copyright_textbuffer, "text", copyright, NULL);
Packit 1e8aac
  g_object_get (props->priv->authors_textbuffer, "text", authors, NULL);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
/******************************************************
Packit 1e8aac
 *                         API                        *
Packit 1e8aac
 ******************************************************/
Packit 1e8aac
GtkWidget *
Packit 1e8aac
glade_project_properties_new (GladeProject *project)
Packit 1e8aac
{
Packit 1e8aac
  return g_object_new (GLADE_TYPE_PROJECT_PROPERTIES, "project", project, NULL);
Packit 1e8aac
}