+/*
+ PSPPIRE --- A Graphical User Interface for PSPP
+ Copyright (C) 2006, 2007 Free Software Foundation
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA. */
+
+
+#include <glib.h>
#include "syntax-editor.h"
#include "data-editor.h"
#include "window-manager.h"
-static int window_count = 0;
+
+/* A list of struct editor_windows */
+static GSList *window_list = NULL;
+
static void
-deregister (GtkObject *o, gpointer data)
+deregister_window (GtkWindow *w, gpointer data)
{
- window_count --;
+ struct editor_window *e = data;
+
+ window_list = g_slist_remove (window_list, e);
- if ( 0 == window_count )
+ if ( g_slist_length (window_list) == 0 )
gtk_main_quit ();
};
+
+static void
+register_window (struct editor_window *e)
+{
+ window_list = g_slist_prepend (window_list, e);
+}
+
+
+static gint
+next_window_id (void)
+{
+ return g_slist_length (window_list);
+}
+
+void
+minimise_all_windows (void)
+{
+ const GSList *i = NULL;
+
+ for (i = window_list; i != NULL ; i = i->next)
+ {
+ struct editor_window *e = i->data;
+ gtk_window_iconify (e->window);
+ }
+}
+
static void set_window_name (struct editor_window *e, const gchar *name );
set_window_name (e, name);
- gtk_window_set_icon_from_file (GTK_WINDOW(e->window),
+ gtk_window_set_icon_from_file (GTK_WINDOW (e->window),
PKGDATADIR "/psppicon.png", 0);
- g_signal_connect (e->window, "destroy", G_CALLBACK (deregister), NULL);
+ g_signal_connect (e->window, "destroy",
+ G_CALLBACK (deregister_window), e);
- gtk_widget_show (e->window);
+ register_window (e);
- window_count ++;
+ gtk_widget_show (GTK_WIDGET (e->window));
return e;
}
+void
+default_window_name (struct editor_window *w)
+{
+ set_window_name (w, NULL);
+}
static void
set_window_name (struct editor_window *e,
switch (e->type )
{
case WINDOW_SYNTAX:
- e->name = g_strdup_printf (_("Syntax%d"), window_count);
+ e->name = g_strdup_printf (_("Syntax%d"), next_window_id () );
title = g_strdup_printf (_("%s --- PSPP Syntax Editor"), e->name);
break;
case WINDOW_DATA:
- e->name = g_strdup_printf (_("Untitled%d"), window_count);
+ e->name = g_strdup_printf (_("Untitled%d"), next_window_id () );
title = g_strdup_printf (_("%s --- PSPP Data Editor"), e->name);
break;
default:
g_assert_not_reached ();
}
- gtk_window_set_title (GTK_WINDOW(e->window), title);
+ gtk_window_set_title (GTK_WINDOW (e->window), title);
g_free (title);
}
}
g_free (basename);
- gtk_window_set_title (GTK_WINDOW(e->window), title);
+ gtk_window_set_title (GTK_WINDOW (e->window), title);
g_free (title);
}
-
-GtkWindow *
-window_toplevel (const struct editor_window *e)
-{
- return GTK_WINDOW(e->window);
-}
-
const gchar *
window_name (const struct editor_window *e)
{