[gthumb] use the default save question dialog on a quit session signal
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb] use the default save question dialog on a quit session signal
- Date: Thu, 6 Jan 2011 20:56:39 +0000 (UTC)
commit 0a974f348e62f20518adee7021b66cc6eb7b4da8
Author: Paolo Bacchilega <paobac src gnome org>
Date: Thu Jan 6 20:47:11 2011 +0100
use the default save question dialog on a quit session signal
gthumb/gth-browser.c | 31 +++++++++---------
gthumb/gth-browser.h | 8 ++++-
gthumb/main.c | 84 ++++++++++++++++++++++++++++----------------------
3 files changed, 70 insertions(+), 53 deletions(-)
---
diff --git a/gthumb/gth-browser.c b/gthumb/gth-browser.c
index 4f71c75..e6a2913 100644
--- a/gthumb/gth-browser.c
+++ b/gthumb/gth-browser.c
@@ -76,7 +76,6 @@
#define MIN_VIEWER_SIZE 256
#define STATUSBAR_SEPARATOR " · "
-typedef void (*GthBrowserCallback) (GthBrowser *, gboolean cancelled, gpointer user_data);
enum {
LOCATION_READY,
@@ -1840,7 +1839,7 @@ _gth_browser_load (GthBrowser *browser,
}
-/* -- _gth_browser_ask_whether_to_save -- */
+/* -- gth_browser_ask_whether_to_save -- */
typedef struct {
@@ -1901,10 +1900,10 @@ ask_whether_to_save__response_cb (GtkWidget *dialog,
}
-static void
-_gth_browser_ask_whether_to_save (GthBrowser *browser,
- GthBrowserCallback callback,
- gpointer user_data)
+void
+gth_browser_ask_whether_to_save (GthBrowser *browser,
+ GthBrowserCallback callback,
+ gpointer user_data)
{
AskSaveData *data;
char *title;
@@ -1915,6 +1914,8 @@ _gth_browser_ask_whether_to_save (GthBrowser *browser,
data->callback = callback;
data->user_data = user_data;
+ gtk_window_present (GTK_WINDOW (browser));
+
title = g_strdup_printf (_("Save changes to file '%s'?"), g_file_info_get_display_name (browser->priv->current_file->info));
d = _gtk_message_dialog_new (GTK_WINDOW (browser),
GTK_DIALOG_MODAL,
@@ -2110,9 +2111,9 @@ _gth_browser_close (GthWindow *window)
if (eel_gconf_get_boolean (PREF_MSG_SAVE_MODIFIED_IMAGE, DEFAULT_MSG_SAVE_MODIFIED_IMAGE)
&& gth_browser_get_file_modified (browser))
{
- _gth_browser_ask_whether_to_save (browser,
- close__file_saved_cb,
- NULL);
+ gth_browser_ask_whether_to_save (browser,
+ close__file_saved_cb,
+ NULL);
}
else
_gth_browser_real_close (browser);
@@ -2246,9 +2247,9 @@ _gth_browser_set_current_page (GthWindow *window,
if (eel_gconf_get_boolean (PREF_MSG_SAVE_MODIFIED_IMAGE, DEFAULT_MSG_SAVE_MODIFIED_IMAGE)
&& gth_browser_get_file_modified (browser))
{
- _gth_browser_ask_whether_to_save (browser,
- set_current_page__file_saved_cb,
- GINT_TO_POINTER (page));
+ gth_browser_ask_whether_to_save (browser,
+ set_current_page__file_saved_cb,
+ GINT_TO_POINTER (page));
}
else
_gth_browser_real_set_current_page (window, page);
@@ -5342,9 +5343,9 @@ load_file_delayed_cb (gpointer user_data)
&& gth_browser_get_file_modified (browser))
{
load_file_data_ref (data);
- _gth_browser_ask_whether_to_save (browser,
- load_file__previuos_file_saved_cb,
- data);
+ gth_browser_ask_whether_to_save (browser,
+ load_file__previuos_file_saved_cb,
+ data);
}
else
_gth_browser_load_file (data->browser, data->file_data, data->view);
diff --git a/gthumb/gth-browser.h b/gthumb/gth-browser.h
index 11c4632..db4cbcf 100644
--- a/gthumb/gth-browser.h
+++ b/gthumb/gth-browser.h
@@ -42,6 +42,8 @@ typedef struct _GthBrowser GthBrowser;
typedef struct _GthBrowserClass GthBrowserClass;
typedef struct _GthBrowserPrivateData GthBrowserPrivateData;
+typedef void (*GthBrowserCallback) (GthBrowser *, gboolean cancelled, gpointer user_data);
+
typedef enum { /*< skip >*/
GTH_BROWSER_PAGE_BROWSER = 0,
GTH_BROWSER_PAGE_VIEWER,
@@ -177,7 +179,11 @@ void gth_browser_fullscreen (GthBrowser *browser);
void gth_browser_unfullscreen (GthBrowser *browser);
void gth_browser_file_menu_popup (GthBrowser *browser,
GdkEventButton *event);
-GthFileData * gth_browser_get_folder_popup_file_data (GthBrowser *browser);
+GthFileData * gth_browser_get_folder_popup_file_data (GthBrowser *browser);
+void gth_browser_ask_whether_to_save (GthBrowser *browser,
+ GthBrowserCallback
+ callback,
+ gpointer user_data);
/* protected methods */
diff --git a/gthumb/main.c b/gthumb/main.c
index 33fd1d7..1ea5522 100644
--- a/gthumb/main.c
+++ b/gthumb/main.c
@@ -141,41 +141,27 @@ gth_save_state (EggSMClient *client,
}
-static void
-dialog_response (GtkDialog *dialog, int response, gpointer user_data)
-{
- EggSMClient *client = user_data;
+/* quit_requested handler for the master client */
- gtk_widget_destroy (GTK_WIDGET (dialog));
- egg_sm_client_will_quit (client, (response != GTK_RESPONSE_NO));
-}
+
+static GList *client_window = NULL;
+
+
+static void modified_file_saved_cb (GthBrowser *browser,
+ gboolean cancelled,
+ gpointer user_data);
-/* quit_requested handler for the master client */
static void
-client_quit_requested_cb (EggSMClient *client, gpointer data)
+check_whether_to_save (EggSMClient *client)
{
- GList *scan;
- gboolean modified_file;
- for (scan = gth_window_get_window_list (); scan; scan = scan->next) {
- GtkWidget *window = scan->data;
-
- g_assert (GTH_IS_BROWSER (window));
- modified_file = gth_browser_get_file_modified (GTH_BROWSER (window));
-
- if (modified_file) {
- GtkWidget *dialog;
-
- dialog = gtk_message_dialog_new (GTK_WINDOW (window),
- GTK_DIALOG_MODAL,
- GTK_MESSAGE_QUESTION,
- GTK_BUTTONS_YES_NO,
- N_("There are unsaved changes, you want to log out?"));
- g_signal_connect (dialog,
- "response",
- G_CALLBACK (dialog_response),
- client);
- gtk_widget_show (GTK_WIDGET (dialog));
+ for (/* void */; client_window; client_window = client_window->next) {
+ GtkWidget *window = client_window->data;
+
+ if (gth_browser_get_file_modified (GTH_BROWSER (window))) {
+ gth_browser_ask_whether_to_save (GTH_BROWSER (window),
+ modified_file_saved_cb,
+ client);
return;
}
}
@@ -184,9 +170,35 @@ client_quit_requested_cb (EggSMClient *client, gpointer data)
}
-/* quit handler for the master client */
static void
-client_quit_cb (EggSMClient *client, gpointer data)
+modified_file_saved_cb (GthBrowser *browser,
+ gboolean cancelled,
+ gpointer user_data)
+{
+ EggSMClient *client = user_data;
+
+ if (cancelled) {
+ egg_sm_client_will_quit (client, FALSE);
+ }
+ else {
+ client_window = client_window->next;
+ check_whether_to_save (client);
+ }
+}
+
+
+static void
+client_quit_requested_cb (EggSMClient *client,
+ gpointer data)
+{
+ client_window = gth_window_get_window_list ();
+ check_whether_to_save (client);
+}
+
+
+static void
+client_quit_cb (EggSMClient *client,
+ gpointer data)
{
gtk_main_quit ();
}
@@ -196,22 +208,20 @@ static void
gth_session_manager_init (void)
{
EggSMClient *client = NULL;
- client = egg_sm_client_get ();
+ client = egg_sm_client_get ();
g_signal_connect (client,
"save_state",
G_CALLBACK (gth_save_state),
NULL);
-
g_signal_connect (client,
"quit_requested",
G_CALLBACK (client_quit_requested_cb),
NULL);
-
g_signal_connect (client,
"quit",
G_CALLBACK (client_quit_cb),
- NULL);
+ NULL);
}
@@ -219,7 +229,7 @@ static void
gth_restore_session (EggSMClient *client)
{
GKeyFile *state = NULL;
- guint i;
+ guint i;
state = egg_sm_client_get_state_file (client);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]