? .cdtproject ? .project ? depcomp ? intltool-extract.in ? intltool-merge.in ? intltool-update.in ? gedit/gedit-document.old.c ? gedit/gedit-print-job-preview.c.paolo ? gedit/gedit-vfs-utils.c ? gedit/gedit-vfs-utils.h ? gedit/gedit.diff ? gedit/output.pdf ? gedit/dialogs/search-panel.gladep ? plugins/sample_test ? plugins/savecopy/savecopy.c.paolo Index: gedit/gedit-app.c =================================================================== RCS file: /cvs/gnome/gedit/gedit/Attic/gedit-app.c,v retrieving revision 1.1.2.6 diff -u -p -r1.1.2.6 gedit-app.c --- gedit/gedit-app.c 27 Apr 2005 15:49:50 -0000 1.1.2.6 +++ gedit/gedit-app.c 10 Jun 2005 08:50:58 -0000 @@ -118,6 +118,13 @@ window_delete_event (GeditWindow *window GdkEvent *event, GeditApp *app) { + GeditWindowState ws; + + ws = gedit_window_get_state (window); + + if (ws & GEDIT_WINDOW_STATE_SAVING) + return TRUE; + gedit_cmd_file_close_all (NULL, window); /* Check if all the tabs have been closed */ Index: gedit/gedit-commands.c =================================================================== RCS file: /cvs/gnome/gedit/gedit/gedit-commands.c,v retrieving revision 1.51.2.43 diff -u -p -r1.51.2.43 gedit-commands.c --- gedit/gedit-commands.c 21 May 2005 19:28:58 -0000 1.51.2.43 +++ gedit/gedit-commands.c 10 Jun 2005 08:50:58 -0000 @@ -1,4 +1,3 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* * gedit-commands.c * This file is part of gedit @@ -938,6 +937,8 @@ gedit_cmd_file_close_all (GtkAction *a GList *l; gboolean close = FALSE; + g_return_if_fail (!(gedit_window_get_state (window) & GEDIT_WINDOW_STATE_SAVING)); + gedit_debug (DEBUG_COMMANDS); unsaved_docs = NULL; @@ -1036,6 +1037,8 @@ void gedit_cmd_file_quit (GtkAction *action, GeditWindow *window) { + g_return_if_fail (!(gedit_window_get_state (window) & GEDIT_WINDOW_STATE_SAVING)); + gedit_cmd_file_close_all (NULL, window); gtk_widget_destroy (GTK_WIDGET (window)); Index: gedit/gedit-debug.c =================================================================== RCS file: /cvs/gnome/gedit/gedit/gedit-debug.c,v retrieving revision 1.8.6.3 diff -u -p -r1.8.6.3 gedit-debug.c --- gedit/gedit-debug.c 10 May 2005 14:36:41 -0000 1.8.6.3 +++ gedit/gedit-debug.c 10 Jun 2005 08:50:58 -0000 @@ -73,6 +73,8 @@ gedit_debug_init () debug = debug | GEDIT_DEBUG_UTILS; if (g_getenv ("GEDIT_DEBUG_METADATA") != NULL) debug = debug | GEDIT_DEBUG_METADATA; + if (g_getenv ("GEDIT_DEBUG_WINDOW") != NULL) + debug = debug | GEDIT_DEBUG_WINDOW; } void Index: gedit/gedit-debug.h =================================================================== RCS file: /cvs/gnome/gedit/gedit/gedit-debug.h,v retrieving revision 1.6.6.4 diff -u -p -r1.6.6.4 gedit-debug.h --- gedit/gedit-debug.h 10 May 2005 14:36:41 -0000 1.6.6.4 +++ gedit/gedit-debug.h 10 Jun 2005 08:50:58 -0000 @@ -62,6 +62,7 @@ typedef enum { GEDIT_DEBUG_SESSION = 1 << 9, GEDIT_DEBUG_UTILS = 1 << 10, GEDIT_DEBUG_METADATA = 1 << 11, + GEDIT_DEBUG_WINDOW = 1 << 12, } GeditDebugSection; @@ -77,6 +78,7 @@ typedef enum { #define DEBUG_SESSION GEDIT_DEBUG_SESSION, __FILE__, __LINE__, GEDIT_FUNCTION #define DEBUG_UTILS GEDIT_DEBUG_UTILS, __FILE__, __LINE__, GEDIT_FUNCTION #define DEBUG_METADATA GEDIT_DEBUG_METADATA,__FILE__, __LINE__, GEDIT_FUNCTION +#define DEBUG_WINDOW GEDIT_DEBUG_WINDOW, __FILE__, __LINE__, GEDIT_FUNCTION void gedit_debug_init (void); Index: gedit/gedit-document-loader.c =================================================================== RCS file: /cvs/gnome/gedit/gedit/Attic/gedit-document-loader.c,v retrieving revision 1.1.2.17 diff -u -p -r1.1.2.17 gedit-document-loader.c --- gedit/gedit-document-loader.c 21 May 2005 10:26:06 -0000 1.1.2.17 +++ gedit/gedit-document-loader.c 10 Jun 2005 08:50:58 -0000 @@ -53,6 +53,11 @@ #define GEDIT_DOCUMENT_LOADER_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), GEDIT_TYPE_DOCUMENT_LOADER, GeditDocumentLoaderPrivate)) +static void async_close_cb (GnomeVFSAsyncHandle *handle, + GnomeVFSResult result, + gpointer data); + + struct _GeditDocumentLoaderPrivate { GeditDocument *document; @@ -146,6 +151,22 @@ gedit_document_loader_finalize (GObject { GeditDocumentLoaderPrivate *priv = GEDIT_DOCUMENT_LOADER (object)->priv; + if (priv->handle != NULL) + { + if (priv->info_handle != NULL) + { + gnome_vfs_async_cancel (priv->info_handle); + gnome_vfs_async_close (priv->info_handle, + async_close_cb, + NULL); + } + + gnome_vfs_async_cancel (priv->handle); + gnome_vfs_async_close (priv->handle, + async_close_cb, + NULL); + } + g_free (priv->uri); if (priv->info) Index: gedit/gedit-notebook.h =================================================================== RCS file: /cvs/gnome/gedit/gedit/Attic/gedit-notebook.h,v retrieving revision 1.1.2.3 diff -u -p -r1.1.2.3 gedit-notebook.h --- gedit/gedit-notebook.h 19 Mar 2005 18:37:34 -0000 1.1.2.3 +++ gedit/gedit-notebook.h 10 Jun 2005 08:50:58 -0000 @@ -106,7 +106,7 @@ void gedit_notebook_add_tab (GeditNote void gedit_notebook_remove_tab (GeditNotebook *nb, GeditTab *tab); - + void gedit_notebook_remove_all_tabs (GeditNotebook *nb); void gedit_notebook_reorder_tab (GeditNotebook *src, Index: gedit/gedit-tab.c =================================================================== RCS file: /cvs/gnome/gedit/gedit/Attic/gedit-tab.c,v retrieving revision 1.1.2.38 diff -u -p -r1.1.2.38 gedit-tab.c --- gedit/gedit-tab.c 19 May 2005 14:18:01 -0000 1.1.2.38 +++ gedit/gedit-tab.c 10 Jun 2005 08:50:59 -0000 @@ -128,6 +128,9 @@ static void gedit_tab_finalize (GObject *object) { GeditTab *tab = GEDIT_TAB (object); + + if (tab->priv->timer != NULL) + g_timer_destroy (tab->priv->timer); g_free (tab->priv->save_uri); Index: gedit/gedit-ui.h =================================================================== RCS file: /cvs/gnome/gedit/gedit/Attic/gedit-ui.h,v retrieving revision 1.1.2.10 diff -u -p -r1.1.2.10 gedit-ui.h --- gedit/gedit-ui.h 3 May 2005 18:13:13 -0000 1.1.2.10 +++ gedit/gedit-ui.h 10 Jun 2005 08:51:00 -0000 @@ -61,9 +61,7 @@ static const GtkActionEntry gedit_always N_("Open a file from a specified location"), G_CALLBACK (gedit_cmd_file_open_uri) }, { "FilePageSetup", NULL, N_("Page Set_up..."), NULL, N_("Setup the page settings"), G_CALLBACK (gedit_cmd_file_page_setup) }, - { "FileQuit", GTK_STOCK_QUIT, NULL, "Q", - N_("Quit the program"), G_CALLBACK (gedit_cmd_file_quit) }, - + /* Edit menu */ { "EditPreferences", GTK_STOCK_PREFERENCES, N_("Pr_eferences"), NULL, N_("Configure the application"), G_CALLBACK (gedit_cmd_edit_preferences) }, @@ -90,6 +88,8 @@ static const GtkActionEntry gedit_menu_e N_("Print the current page"), G_CALLBACK (gedit_cmd_file_print) }, { "FileClose", GTK_STOCK_CLOSE, NULL, "W", N_("Close the current file"), G_CALLBACK (gedit_cmd_file_close) }, + { "FileQuit", GTK_STOCK_QUIT, NULL, "Q", + N_("Quit the program"), G_CALLBACK (gedit_cmd_file_quit) }, /* Edit menu */ { "EditUndo", GTK_STOCK_UNDO, NULL, "Z", Index: gedit/gedit-view.c =================================================================== RCS file: /cvs/gnome/gedit/gedit/gedit-view.c,v retrieving revision 1.59.2.9 diff -u -p -r1.59.2.9 gedit-view.c --- gedit/gedit-view.c 21 May 2005 09:50:30 -0000 1.59.2.9 +++ gedit/gedit-view.c 10 Jun 2005 08:51:00 -0000 @@ -477,7 +477,7 @@ gedit_view_scroll_to_cursor (GeditView * gtk_text_view_scroll_to_mark (GTK_TEXT_VIEW (view), gtk_text_buffer_get_insert (buffer), - GEDIT_VIEW_SCROLL_MARGIN, + 0.25, FALSE, 0.0, 0.0); Index: gedit/gedit-window-private.h =================================================================== RCS file: /cvs/gnome/gedit/gedit/Attic/gedit-window-private.h,v retrieving revision 1.1.2.1 diff -u -p -r1.1.2.1 gedit-window-private.h --- gedit/gedit-window-private.h 10 May 2005 09:00:30 -0000 1.1.2.1 +++ gedit/gedit-window-private.h 10 Jun 2005 08:51:00 -0000 @@ -74,12 +74,14 @@ struct _GeditWindowPrivate gint width; gint height; - GdkWindowState state; + GdkWindowState window_state; gint side_panel_size; gint bottom_panel_size; gboolean removing_all_tabs; + + GeditWindowState state; GtkWindowGroup *window_group; }; Index: gedit/gedit-window.c =================================================================== RCS file: /cvs/gnome/gedit/gedit/Attic/gedit-window.c,v retrieving revision 1.4.2.72 diff -u -p -r1.4.2.72 gedit-window.c --- gedit/gedit-window.c 2 Jun 2005 08:19:48 -0000 1.4.2.72 +++ gedit/gedit-window.c 10 Jun 2005 08:51:01 -0000 @@ -81,6 +81,12 @@ static guint signals[LAST_SIGNAL] = { 0 enum { + PROP_0, + PROP_STATE +}; + +enum +{ TARGET_URI_LIST = 100 }; @@ -92,6 +98,26 @@ static const GtkTargetEntry drag_types[] G_DEFINE_TYPE(GeditWindow, gedit_window, GTK_TYPE_WINDOW) static void +gedit_window_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + GeditWindow *window = GEDIT_WINDOW (object); + + switch (prop_id) + { + case PROP_STATE: + g_value_set_int (value, + gedit_window_get_state (window)); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void gedit_window_finalize (GObject *object) { GeditWindow *window = GEDIT_WINDOW (object); @@ -115,7 +141,7 @@ gedit_window_destroy (GtkObject *object) gedit_prefs_manager_set_window_width (window->priv->width); if (gedit_prefs_manager_window_state_can_set ()) - gedit_prefs_manager_set_window_state (window->priv->state); + gedit_prefs_manager_set_window_state (window->priv->window_state); if ((window->priv->side_panel_size > 0) && gedit_prefs_manager_side_panel_size_can_set ()) @@ -136,7 +162,7 @@ window_state_event (GtkWidget { GeditWindow *window = GEDIT_WINDOW (widget); - window->priv->state = event->new_window_state; + window->priv->window_state = event->new_window_state; if (event->changed_mask & (GDK_WINDOW_STATE_MAXIMIZED | GDK_WINDOW_STATE_FULLSCREEN)) @@ -173,6 +199,8 @@ gedit_window_class_init (GeditWindowClas GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->finalize = gedit_window_finalize; + object_class->get_property = gedit_window_get_property; + gobject_class->destroy = gedit_window_destroy; widget_class->window_state_event = window_state_event; @@ -227,6 +255,16 @@ gedit_window_class_init (GeditWindowClas G_TYPE_NONE, 0); + g_object_class_install_property (object_class, + PROP_STATE, + g_param_spec_int ("state", + "State", + "The windows's state", + 0, /* GEDIT_WINDOW_STATE_NORMAL */ + G_MAXINT, + 0, /* GEDIT_WINDOW_STATE_NORMAL */ + G_PARAM_READABLE)); + g_type_class_add_private (object_class, sizeof(GeditWindowPrivate)); } @@ -1065,7 +1103,7 @@ clone_window (GeditWindow *origin) origin->priv->width, origin->priv->height); - if ((origin->priv->state & GDK_WINDOW_STATE_MAXIMIZED) != 0) + if ((origin->priv->window_state & GDK_WINDOW_STATE_MAXIMIZED) != 0) { gtk_window_set_default_size (window, gedit_prefs_manager_get_default_window_width (), @@ -1082,7 +1120,7 @@ clone_window (GeditWindow *origin) gtk_window_unmaximize (window); } - if ((origin->priv->state & GDK_WINDOW_STATE_STICKY ) != 0) + if ((origin->priv->window_state & GDK_WINDOW_STATE_STICKY ) != 0) gtk_window_stick (window); else gtk_window_unstick (window); @@ -1340,8 +1378,102 @@ notebook_switch_page (GtkNotebook *b } static void +analyze_tab_state (GeditTab *tab, GeditWindowState *ws) +{ + GeditTabState ts; + + ts = gedit_tab_get_state (tab); + + switch (ts) + { + case GEDIT_TAB_STATE_LOADING: + case GEDIT_TAB_STATE_REVERTING: + *ws |= GEDIT_WINDOW_STATE_LOADING; + break; + + case GEDIT_TAB_STATE_SAVING: + *ws |= GEDIT_WINDOW_STATE_SAVING; + break; + + case GEDIT_TAB_STATE_PRINTING: + case GEDIT_TAB_STATE_PRINT_PREVIEWING: + *ws |= GEDIT_WINDOW_STATE_PRINTING; + break; + + default: + /* NOP */ + break; + } +} + +static void +update_window_state (GeditWindow *window, + GeditTab *tab) +{ + GeditTabState ts; + GeditWindowState old_ws; + + gedit_debug_message (DEBUG_WINDOW, "Old state: %x", window->priv->state); + + ts = gedit_tab_get_state (tab); + + old_ws = window->priv->state; + + switch (ts) + { + case GEDIT_TAB_STATE_LOADING: + case GEDIT_TAB_STATE_REVERTING: + window->priv->state |= GEDIT_WINDOW_STATE_LOADING; + break; + + case GEDIT_TAB_STATE_SAVING: + window->priv->state |= GEDIT_WINDOW_STATE_SAVING; + break; + + case GEDIT_TAB_STATE_PRINTING: + case GEDIT_TAB_STATE_PRINT_PREVIEWING: + window->priv->state |= GEDIT_WINDOW_STATE_PRINTING; + break; + + default: + { + GeditWindowState ws = 0; + + gtk_container_foreach (GTK_CONTAINER (window->priv->notebook), + (GtkCallback)analyze_tab_state, + &ws); + + window->priv->state = ws; + } + } + + gedit_debug_message (DEBUG_WINDOW, "New state: %x", window->priv->state); + + if (old_ws != window->priv->state) + { + GtkAction *action; + + action = gtk_action_group_get_action (window->priv->action_group, + "FileQuit"); + gtk_action_set_sensitive (action, + !(window->priv->state & GEDIT_WINDOW_STATE_SAVING)); + + action = gtk_action_group_get_action (window->priv->action_group, + "FileCloseAll"); + gtk_action_set_sensitive (action, + !(window->priv->state & GEDIT_WINDOW_STATE_SAVING)); + + g_object_notify (G_OBJECT (window), "state"); + } +} + +static void sync_state (GeditTab *tab, GParamSpec *pspec, GeditWindow *window) -{ +{ + gedit_debug (DEBUG_WINDOW); + + update_window_state (window, tab); + if (tab != window->priv->active_tab) return; @@ -1996,6 +2128,7 @@ gedit_window_init (GeditWindow *window) window->priv->active_tab = NULL; window->priv->num_tabs = 0; window->priv->removing_all_tabs = FALSE; + window->priv->state = GEDIT_WINDOW_STATE_NORMAL; window->priv->window_group = gtk_window_group_new (); gtk_window_group_add_window (window->priv->window_group, GTK_WINDOW (window)); @@ -2262,7 +2395,8 @@ void gedit_window_close_all_tabs (GeditWindow *window) { g_return_if_fail (GEDIT_IS_WINDOW (window)); - + g_return_if_fail (!(window->priv->state & GEDIT_WINDOW_STATE_SAVING)); + window->priv->removing_all_tabs = TRUE; gedit_notebook_remove_all_tabs (GEDIT_NOTEBOOK (window->priv->notebook)); @@ -2527,4 +2661,12 @@ gedit_window_get_statusbar (GeditWindow g_return_val_if_fail (GEDIT_IS_WINDOW (window), 0); return window->priv->statusbar; +} + +GeditWindowState +gedit_window_get_state (GeditWindow *window) +{ + g_return_val_if_fail (GEDIT_IS_WINDOW (window), GEDIT_WINDOW_STATE_NORMAL); + + return window->priv->state; } Index: gedit/gedit-window.h =================================================================== RCS file: /cvs/gnome/gedit/gedit/Attic/gedit-window.h,v retrieving revision 1.3.2.26 diff -u -p -r1.3.2.26 gedit-window.h --- gedit/gedit-window.h 2 Jun 2005 08:19:48 -0000 1.3.2.26 +++ gedit/gedit-window.h 10 Jun 2005 08:51:01 -0000 @@ -38,6 +38,14 @@ G_BEGIN_DECLS +typedef enum +{ + GEDIT_WINDOW_STATE_NORMAL = 0, + GEDIT_WINDOW_STATE_SAVING = 1 << 1, + GEDIT_WINDOW_STATE_PRINTING = 1 << 2, + GEDIT_WINDOW_STATE_LOADING = 1 << 3 +} GeditWindowState; + /* * Type checking and casting macros */ @@ -131,6 +139,8 @@ GtkWidget *gedit_window_get_statusbar ( GtkUIManager *gedit_window_get_ui_manager (GeditWindow *window); +GeditWindowState gedit_window_get_state (GeditWindow *window); + /* * Non exported functions */