X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fwindow-manager.c;h=91f44a59f8f592b8942817544fd74eef241e8d3c;hb=c86f5b8a45cca158b46a4fe3b48280e88ce9aba1;hp=5fcf39dfac6d04374bdc5268d85289c18f138418;hpb=a486e7cbf4f95d19bb208796e4c92a040cf48f65;p=pspp-builds.git diff --git a/src/ui/gui/window-manager.c b/src/ui/gui/window-manager.c index 5fcf39df..91f44a59 100644 --- a/src/ui/gui/window-manager.c +++ b/src/ui/gui/window-manager.c @@ -1,5 +1,28 @@ +/* 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 3 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, see . */ + + +#include + +#include "relocatable.h" + +#include #include "syntax-editor.h" #include "data-editor.h" +#include "output-viewer.h" #include #define _(msgid) gettext (msgid) @@ -9,17 +32,48 @@ #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 ); @@ -35,6 +89,9 @@ window_create (enum window_type type, const gchar *name) case WINDOW_DATA: e = (struct editor_window *) new_data_editor (); break; + case WINDOW_OUTPUT: + e = (struct editor_window *) new_output_viewer (); + break; default: g_assert_not_reached (); }; @@ -45,18 +102,24 @@ window_create (enum window_type type, const gchar *name) set_window_name (e, name); - gtk_window_set_icon_from_file (GTK_WINDOW(e->window), - PKGDATADIR "/psppicon.png", 0); + gtk_window_set_icon_from_file (GTK_WINDOW (e->window), + relocate (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, @@ -65,43 +128,51 @@ set_window_name (struct editor_window *e, gchar *title ; g_free (e->name); + e->name = NULL; if ( name ) { - e->name = g_strdup (name); - return ; + e->name = g_strdup (name); + return; } 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; + case WINDOW_OUTPUT: + e->name = g_strdup_printf (_("Output%d"), next_window_id () ); + title = g_strdup_printf (_("%s --- PSPP Output"), 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); } +/* Set the name of this window based on FILENAME. + FILENAME is in "filename encoding" */ void window_set_name_from_filename (struct editor_window *e, - const gchar *filename) + const gchar *fn) { gchar *title; + gchar *filename = g_filename_to_utf8 (fn, -1, NULL, NULL, NULL); gchar *basename = g_path_get_basename (filename); set_window_name (e, filename); - switch (e->type ) + switch (e->type) { case WINDOW_SYNTAX: title = g_strdup_printf (_("%s --- PSPP Syntax Editor"), basename); @@ -114,16 +185,10 @@ window_set_name_from_filename (struct editor_window *e, } 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); + g_free (filename); } const gchar *