[gnumeric] for Sameer Morar, modify quit dialog [#527133]
- From: Andreas J. Guelzow <guelzow src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnumeric] for Sameer Morar, modify quit dialog [#527133]
- Date: Sun, 7 Nov 2010 03:28:18 +0000 (UTC)
commit 2a34ba2927fa8565714d3be4163e2df17f01c8f0
Author: Andreas J Guelzow <aguelzow pyrshep ca>
Date: Sat Nov 6 21:30:30 2010 -0600
for Sameer Morar, modify quit dialog [#527133]
2010-11-07 Sameer Morar <smorar gmail com>
* dialog-quit.c (foreach_is_file_set): new
(files_set): new
(cb_list_row_changed_save_sensitivity): new
(cb_list_row_changed_discard_sensitivity): new
(show_quit_dialog): Move Select all and Clear selection buttons to a
row above the Don't Quit and Save Selected buttons. Add a Discard
button. The Save Selected button becomes insensitive and the Discard
button becomes sensitive when no files are set to be saved. [#527133]
NEWS | 2 +
src/dialogs/ChangeLog | 11 +++
src/dialogs/dialog-quit.c | 159 +++++++++++++++++++++++++++++++++------------
3 files changed, 130 insertions(+), 42 deletions(-)
---
diff --git a/NEWS b/NEWS
index 21f46cb..696fe43 100644
--- a/NEWS
+++ b/NEWS
@@ -32,6 +32,8 @@ Morten:
Sameer Morar:
* Add key combinations to move sheets. [#634139]
+ * Modify quit dialog to be able to discard multiple files without
+ saving. [#527133]
--------------------------------------------------------------------------
Gnumeric 1.10.11
diff --git a/src/dialogs/ChangeLog b/src/dialogs/ChangeLog
index 8260346..9d2a4e1 100644
--- a/src/dialogs/ChangeLog
+++ b/src/dialogs/ChangeLog
@@ -1,3 +1,14 @@
+2010-11-07 Sameer Morar <smorar gmail com>
+
+ * dialog-quit.c (foreach_is_file_set): new
+ (files_set): new
+ (cb_list_row_changed_save_sensitivity): new
+ (cb_list_row_changed_discard_sensitivity): new
+ (show_quit_dialog): Move Select all and Clear selection buttons to a
+ row above the Don't Quit and Save Selected buttons. Add a Discard
+ button. The Save Selected button becomes insensitive and the Discard
+ button becomes sensitive when no files are set to be saved. [#527133]
+
2010-11-06 Andreas J. Guelzow <aguelzow pyrshep ca>
* cell-sort.ui: add tooltip text for the checkboxes
diff --git a/src/dialogs/dialog-quit.c b/src/dialogs/dialog-quit.c
index 85b70ce..b850883 100644
--- a/src/dialogs/dialog-quit.c
+++ b/src/dialogs/dialog-quit.c
@@ -1,3 +1,5 @@
+/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+
/*
* dialog-quit.c:
* Dialog for quit (selecting what to save)
@@ -84,6 +86,32 @@ url_renderer_func (GtkTreeViewColumn *tree_column,
g_free (filename);
}
+static gboolean
+foreach_is_file_set (GtkTreeModel *model, GtkTreePath *path,
+ GtkTreeIter *iter, gboolean *data)
+{
+ gboolean value;
+
+ gtk_tree_model_get (GTK_TREE_MODEL (model), iter,
+ QUIT_COL_CHECK, &value, -1);
+
+ *data = value;
+
+ return value;
+}
+
+static gboolean
+files_set (GtkTreeModel *model)
+{
+ gboolean files_set_state = FALSE;
+
+ gtk_tree_model_foreach (GTK_TREE_MODEL (model),
+ (GtkTreeModelForeachFunc) foreach_is_file_set,
+ &files_set_state);
+
+ return files_set_state;
+}
+
static void
cb_toggled_save (GtkCellRendererToggle *cell,
gchar *path_string,
@@ -102,7 +130,7 @@ cb_toggled_save (GtkCellRendererToggle *cell,
} else {
g_warning ("Did not get a valid iterator");
}
-
+
gtk_tree_path_free (path);
}
@@ -111,7 +139,7 @@ set_all (GtkTreeModel *model, gboolean value)
{
GtkTreeIter iter;
gboolean ok = gtk_tree_model_get_iter_first (model, &iter);
-
+
while (ok) {
gtk_list_store_set (GTK_LIST_STORE (model), &iter,
QUIT_COL_CHECK, value, -1);
@@ -133,6 +161,32 @@ cb_clear_all (G_GNUC_UNUSED GtkWidget *button,
set_all (model, FALSE);
}
+static void
+cb_list_row_changed_save_sensitivity (GtkListStore *list, GtkTreePath *path_string,
+ GtkTreeIter *iter, GtkWidget *widget)
+{
+ GtkTreeModel *model = GTK_TREE_MODEL (list);
+
+ if (files_set (model) == TRUE)
+ gtk_widget_set_sensitive (GTK_WIDGET (widget), TRUE);
+ else
+ gtk_widget_set_sensitive (GTK_WIDGET (widget), FALSE);
+}
+
+static void
+cb_list_row_changed_discard_sensitivity (GtkListStore *list,
+ GtkTreePath *path_string,
+ GtkTreeIter *iter,
+ GtkWidget *widget)
+{
+ GtkTreeModel *model = GTK_TREE_MODEL (list);
+
+ if (files_set (model) == TRUE)
+ gtk_widget_set_sensitive (GTK_WIDGET (widget), FALSE);
+ else
+ gtk_widget_set_sensitive (GTK_WIDGET (widget), TRUE);
+}
+
static gboolean
show_quit_dialog (GList *dirty, WBCGtk *wbcg)
{
@@ -159,56 +213,44 @@ show_quit_dialog (GList *dirty, WBCGtk *wbcg)
wbcg_toplevel (wbcg), 0,
NULL);
+ button = go_gtk_dialog_add_button (GTK_DIALOG (dialog),
+ _("_Discard All"),
+ GTK_STOCK_DELETE,
+ GTK_RESPONSE_NO);
+ go_widget_set_tooltip_text (GTK_WIDGET (button), _("Discard changes in all files"));
+
+ if (multiple)
+ g_signal_connect (G_OBJECT (list),
+ "row-changed",
+ G_CALLBACK (cb_list_row_changed_discard_sensitivity),
+ GTK_WIDGET (button));
+
+ button = go_gtk_dialog_add_button (GTK_DIALOG (dialog),
+ _("Don't Quit"),
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_CANCEL);
+ go_widget_set_tooltip_text (button, _("Resume editing"));
+
if (multiple) {
- button = go_gtk_dialog_add_button (dialog,
- _("Select _all"),
- GTK_STOCK_SELECT_ALL,
- RESPONSE_ALL);
- go_widget_set_tooltip_text
- (button,
- _("Select all documents for saving"));
- g_signal_connect (G_OBJECT (button), "clicked",
- G_CALLBACK (cb_select_all),
- list);
-
- button = go_gtk_dialog_add_button (dialog,
- _("_Clear Selection"),
- GTK_STOCK_CLEAR,
- RESPONSE_NONE);
- go_widget_set_tooltip_text
- (button,
- _("Unselect all documents for saving"));
- g_signal_connect (G_OBJECT (button), "clicked",
- G_CALLBACK (cb_clear_all),
- list);
-
- button = go_gtk_dialog_add_button (dialog,
+ button = go_gtk_dialog_add_button (GTK_DIALOG (dialog),
_("_Save Selected"),
GTK_STOCK_SAVE,
GTK_RESPONSE_OK);
- go_widget_set_tooltip_text
- (button,
- _("Save selected documents and then quit"));
+ go_widget_set_tooltip_text (GTK_WIDGET (button),
+ _("Save selected documents and then quit"));
+
+ g_signal_connect (G_OBJECT (list),
+ "row-changed",
+ G_CALLBACK (cb_list_row_changed_save_sensitivity),
+ GTK_WIDGET (button));
} else {
- button = go_gtk_dialog_add_button (dialog,
- _("_Discard"),
- GTK_STOCK_DELETE,
- GTK_RESPONSE_NO);
- go_widget_set_tooltip_text (button, _("Discard changes"));
-
- button = go_gtk_dialog_add_button (dialog,
+ button = go_gtk_dialog_add_button (GTK_DIALOG (dialog),
_("Save"),
GTK_STOCK_SAVE,
GTK_RESPONSE_OK);
go_widget_set_tooltip_text (button, _("Save document"));
}
-
- button = go_gtk_dialog_add_button (dialog,
- _("Don't Quit"),
- GTK_STOCK_CANCEL,
- GTK_RESPONSE_CANCEL);
- go_widget_set_tooltip_text (button, _("Resume editing"));
-
+
scrollw = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollw),
GTK_SHADOW_IN);
@@ -217,6 +259,39 @@ show_quit_dialog (GList *dirty, WBCGtk *wbcg)
gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (dialog)),
scrollw, TRUE, TRUE, 0);
+ if (multiple) {
+ GtkWidget *hbox = gtk_hbutton_box_new ();
+ gtk_button_box_set_layout (GTK_BUTTON_BOX (hbox), GTK_BUTTONBOX_END);
+ gtk_box_set_spacing (GTK_BOX (hbox), 5);
+
+ button = go_gtk_button_new_with_stock (_("Select _All"),
+ GTK_STOCK_SELECT_ALL);
+ go_widget_set_tooltip_text (GTK_WIDGET (button),
+ _("Select all documents for saving"));
+
+ g_signal_connect (G_OBJECT (button), "clicked",
+ G_CALLBACK (cb_select_all),
+ list);
+
+ gtk_box_pack_end (GTK_BOX (hbox),
+ GTK_WIDGET (button), FALSE, TRUE, 0);
+
+ button = go_gtk_button_new_with_stock (_("_Clear Selection"),
+ GTK_STOCK_CLEAR);
+ go_widget_set_tooltip_text (GTK_WIDGET(button),
+ _("Unselect all documents for saving"));
+
+ g_signal_connect (G_OBJECT (button), "clicked",
+ G_CALLBACK (cb_clear_all),
+ list);
+
+ gtk_box_pack_end (GTK_BOX (hbox),
+ GTK_WIDGET (button), FALSE, TRUE, 0);
+
+ gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (dialog)),
+ GTK_WIDGET (hbox), FALSE, FALSE, 0);
+ }
+
gtk_dialog_set_default_response (dialog, GTK_RESPONSE_OK);
tree = (GtkTreeView *)gtk_tree_view_new ();
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]