Ejemplo n.º 1
0
static void
gimp_session_info_finalize (GObject *object)
{
  GimpSessionInfo *info = GIMP_SESSION_INFO (object);

  gimp_session_info_clear_info (info);

  gimp_session_info_set_widget (info, NULL);

  G_OBJECT_CLASS (parent_class)->finalize (object);
}
Ejemplo n.º 2
0
static gboolean
gimp_session_info_restore_docks (GimpRestoreDocksData *data)
{
  GimpSessionInfo     *info    = data->info;
  GimpDialogFactory   *factory = data->factory;
  GdkScreen           *screen  = data->screen;
  gint                 monitor = data->monitor;
  GtkWidget           *dialog  = data->dialog;
  GList               *iter;

  if (GIMP_IS_DOCK_CONTAINER (dialog))
    {
      /* We expect expect there to always be docks. In sessionrc files
       * from <= 2.6 not all dock window entries had dock entries, but we
       * take care of that during sessionrc parsing
       */
      for (iter = info->p->docks; iter; iter = g_list_next (iter))
        {
          GimpSessionInfoDock *dock_info = (GimpSessionInfoDock *) iter->data;
          GtkWidget           *dock;

          dock =
            GTK_WIDGET (gimp_session_info_dock_restore (dock_info,
                                                        factory,
                                                        screen,
                                                        monitor,
                                                        GIMP_DOCK_CONTAINER (dialog)));

          if (dock && dock_info->position != 0)
            {
              GtkWidget *parent = gtk_widget_get_parent (dock);

              if (GTK_IS_PANED (parent))
                {
                  GtkPaned *paned = GTK_PANED (parent);

                  if (dock == gtk_paned_get_child2 (paned))
                    gtk_paned_set_position (paned, dock_info->position);
                }
            }
        }
    }

  gimp_session_info_clear_info (info);

  g_object_unref (dialog);
  g_object_unref (screen);
  g_object_unref (factory);
  g_object_unref (info);

  g_slice_free (GimpRestoreDocksData, data);

  return FALSE;
}
Ejemplo n.º 3
0
static void
gimp_dialog_factories_restore_foreach (gconstpointer      key,
                                       GimpDialogFactory *factory,
                                       gpointer           data)
{
  GList *infos;

  for (infos = factory->session_infos; infos; infos = g_list_next (infos))
    {
      GimpSessionInfo *info = infos->data;

      if (info->open)
        {
          gimp_session_info_restore (info, factory);
          gimp_session_info_clear_info (info);
        }
    }
}
Ejemplo n.º 4
0
static void
gimp_dialog_factories_save_foreach (gconstpointer      key,
                                    GimpDialogFactory *factory,
                                    GimpConfigWriter  *writer)
{
  GList *infos;

  for (infos = factory->session_infos; infos; infos = g_list_next (infos))
    {
      GimpSessionInfo *info = infos->data;

      /*  we keep session info entries for all toplevel dialogs created
       *  by the factory but don't save them if they don't want to be
       *  managed
       */
      if (info->dockable_entry ||
          (info->toplevel_entry && ! info->toplevel_entry->session_managed))
        continue;

      if (info->widget)
        gimp_session_info_get_info (info);

      gimp_config_writer_open (writer, "session-info");
      gimp_config_writer_string (writer,
                                 gimp_object_get_name (GIMP_OBJECT (factory)));
      gimp_config_writer_string (writer,
                                 info->toplevel_entry ?
                                 info->toplevel_entry->identifier :
                                 "dock");

      GIMP_CONFIG_GET_INTERFACE (info)->serialize (GIMP_CONFIG (info),
                                                   writer,
                                                   NULL);

      gimp_config_writer_close (writer);

      if (info->widget)
        gimp_session_info_clear_info (info);
    }
}