Enabled the various "Clear saved foobar now" buttons in prefs:

2004-07-21  Michael Natterer  <mitch@gimp.org>

	Enabled the various "Clear saved foobar now" buttons in prefs:

	* app/gui/session.[ch]
	* app/menus/menus.[ch]
	* app/widgets/gimpdevices.[ch]: implemented the _clear()
	functions: unlink() the rc file and set an internal flag that it
	has been deleted. Added "gboolean always_save" parameter to the
	_save() functions and don't save anything if it is FALSE and the
	internal deletion flag has been set.

	* app/gui/gui.c
	* app/widgets/gimpdevicestatus.c: changed accordingly.

	* app/gui/preferences-dialog.c: added callbacks for all "Save now"
	and "Clear now" buttons and show error messages if clearing fails.
	Inform the user that she has to restart GIMP to see the effect of
	the clearing.
This commit is contained in:
Michael Natterer 2004-07-21 16:11:31 +00:00 committed by Michael Natterer
parent e7479951b5
commit cc6288a4fb
11 changed files with 489 additions and 86 deletions

View File

@ -1,3 +1,23 @@
2004-07-21 Michael Natterer <mitch@gimp.org>
Enabled the various "Clear saved foobar now" buttons in prefs:
* app/gui/session.[ch]
* app/menus/menus.[ch]
* app/widgets/gimpdevices.[ch]: implemented the _clear()
functions: unlink() the rc file and set an internal flag that it
has been deleted. Added "gboolean always_save" parameter to the
_save() functions and don't save anything if it is FALSE and the
internal deletion flag has been set.
* app/gui/gui.c
* app/widgets/gimpdevicestatus.c: changed accordingly.
* app/gui/preferences-dialog.c: added callbacks for all "Save now"
and "Clear now" buttons and show error messages if clearing fails.
Inform the user that she has to restart GIMP to see the effect of
the clearing.
2004-07-21 Michael Natterer <mitch@gimp.org>
* app/core/gimpmarshal.list

View File

@ -88,6 +88,18 @@ static void prefs_input_dialog_able_callback (GtkWidget *widget,
gpointer data);
static void prefs_keyboard_shortcuts_dialog (GtkWidget *widget,
Gimp *gimp);
static void prefs_menus_save_callback (GtkWidget *widget,
Gimp *gimp);
static void prefs_menus_clear_callback (GtkWidget *widget,
Gimp *gimp);
static void prefs_session_save_callback (GtkWidget *widget,
Gimp *gimp);
static void prefs_session_clear_callback (GtkWidget *widget,
Gimp *gimp);
static void prefs_devices_save_callback (GtkWidget *widget,
Gimp *gimp);
static void prefs_devices_clear_callback (GtkWidget *widget,
Gimp *gimp);
/* private variables */
@ -519,6 +531,108 @@ prefs_keyboard_shortcuts_dialog (GtkWidget *widget,
gtk_widget_show (dialog);
}
static void
prefs_menus_save_callback (GtkWidget *widget,
Gimp *gimp)
{
GtkWidget *clear_button;
menus_save (gimp, TRUE);
clear_button = g_object_get_data (G_OBJECT (widget), "clear-button");
if (clear_button)
gtk_widget_set_sensitive (clear_button, TRUE);
}
static void
prefs_menus_clear_callback (GtkWidget *widget,
Gimp *gimp)
{
GError *error = NULL;
if (! menus_clear (gimp, &error))
{
g_message (error->message);
g_clear_error (&error);
}
else
{
gtk_widget_set_sensitive (widget, FALSE);
g_message (_("Your keyboard shortcuts will be reset to default values "
"the next time you start GIMP."));
}
}
static void
prefs_session_save_callback (GtkWidget *widget,
Gimp *gimp)
{
GtkWidget *clear_button;
session_save (gimp, TRUE);
clear_button = g_object_get_data (G_OBJECT (widget), "clear-button");
if (clear_button)
gtk_widget_set_sensitive (clear_button, TRUE);
}
static void
prefs_session_clear_callback (GtkWidget *widget,
Gimp *gimp)
{
GError *error = NULL;
if (! session_clear (gimp, &error))
{
g_message (error->message);
g_clear_error (&error);
}
else
{
gtk_widget_set_sensitive (widget, FALSE);
g_message (_("Your window setup will be reset to default values. "
"the next time you start GIMP."));
}
}
static void
prefs_devices_save_callback (GtkWidget *widget,
Gimp *gimp)
{
GtkWidget *clear_button;
gimp_devices_save (gimp, TRUE);
clear_button = g_object_get_data (G_OBJECT (widget), "clear-button");
if (clear_button)
gtk_widget_set_sensitive (clear_button, TRUE);
}
static void
prefs_devices_clear_callback (GtkWidget *widget,
Gimp *gimp)
{
GError *error = NULL;
if (! gimp_devices_clear (gimp, &error))
{
g_message (error->message);
g_clear_error (&error);
}
else
{
gtk_widget_set_sensitive (widget, FALSE);
g_message (_("Your input device settings will be reset to "
"default values the next time you start GIMP."));
}
}
static GtkWidget *
prefs_notebook_append_page (Gimp *gimp,
GtkNotebook *notebook,
@ -1006,6 +1120,7 @@ prefs_dialog_new (Gimp *gimp,
GtkWidget *vbox2;
GtkWidget *hbox;
GtkWidget *button;
GtkWidget *button2;
GtkWidget *fileselection;
GtkWidget *patheditor;
GtkWidget *table;
@ -1246,16 +1361,18 @@ prefs_dialog_new (Gimp *gimp,
button = prefs_button_add (GTK_STOCK_SAVE,
_("Save Keyboard Shortcuts Now"),
GTK_BOX (vbox2));
g_signal_connect_swapped (button, "clicked",
G_CALLBACK (menus_save),
gimp);
g_signal_connect (button, "clicked",
G_CALLBACK (prefs_menus_save_callback),
gimp);
button = prefs_button_add (GTK_STOCK_CLEAR,
_("Clear Saved Keyboard Shortcuts Now"),
GTK_BOX (vbox2));
g_signal_connect_swapped (button, "clicked",
G_CALLBACK (menus_clear),
gimp);
button2 = prefs_button_add (GTK_STOCK_CLEAR,
_("Clear Saved Keyboard Shortcuts Now"),
GTK_BOX (vbox2));
g_signal_connect (button2, "clicked",
G_CALLBACK (prefs_menus_clear_callback),
gimp);
g_object_set_data (G_OBJECT (button), "clear-button", button2);
/***********/
@ -1879,16 +1996,18 @@ prefs_dialog_new (Gimp *gimp,
button = prefs_button_add (GTK_STOCK_SAVE,
_("Save Input Device Settings Now"),
GTK_BOX (vbox2));
g_signal_connect_swapped (button, "clicked",
G_CALLBACK (gimp_devices_save),
gimp);
g_signal_connect (button, "clicked",
G_CALLBACK (prefs_devices_save_callback),
gimp);
button = prefs_button_add (GTK_STOCK_CLEAR,
_("Clear Saved Input Device Settings Now"),
GTK_BOX (vbox2));
g_signal_connect_swapped (button, "clicked",
G_CALLBACK (gimp_devices_clear),
gimp);
button2 = prefs_button_add (GTK_STOCK_CLEAR,
_("Clear Saved Input Device Settings Now"),
GTK_BOX (vbox2));
g_signal_connect (button2, "clicked",
G_CALLBACK (prefs_devices_clear_callback),
gimp);
g_object_set_data (G_OBJECT (button), "clear-button", button2);
/****************************/
@ -2118,16 +2237,18 @@ prefs_dialog_new (Gimp *gimp,
button = prefs_button_add (GTK_STOCK_SAVE,
_("Save Window Positions Now"),
GTK_BOX (vbox2));
g_signal_connect_swapped (button, "clicked",
G_CALLBACK (session_save),
gimp);
g_signal_connect (button, "clicked",
G_CALLBACK (prefs_session_save_callback),
gimp);
button = prefs_button_add (GTK_STOCK_CLEAR,
_("Clear Saved Window Positions Now"),
GTK_BOX (vbox2));
g_signal_connect_swapped (button, "clicked",
G_CALLBACK (session_clear),
gimp);
button2 = prefs_button_add (GTK_STOCK_CLEAR,
_("Clear Saved Window Positions Now"),
GTK_BOX (vbox2));
g_signal_connect (button2, "clicked",
G_CALLBACK (prefs_session_clear_callback),
gimp);
g_object_set_data (G_OBJECT (button), "clear-button", button2);
/*****************/

View File

@ -435,15 +435,15 @@ gui_exit_callback (Gimp *gimp,
gimp->message_handler = GIMP_CONSOLE;
if (gui_config->save_session_info)
session_save (gimp);
session_save (gimp, FALSE);
color_history_save ();
if (gui_config->save_accels)
menus_save (gimp);
menus_save (gimp, FALSE);
if (gui_config->save_device_status)
gimp_devices_save (gimp);
gimp_devices_save (gimp, FALSE);
if (TRUE /* gui_config->save_controllers */)
gimp_controllers_save (gimp);
@ -473,6 +473,7 @@ gui_exit_after_callback (Gimp *gimp,
g_object_unref (image_ui_manager);
image_ui_manager = NULL;
session_exit (gimp);
menus_exit (gimp);
actions_exit (gimp);
render_exit (gimp);

View File

@ -88,6 +88,18 @@ static void prefs_input_dialog_able_callback (GtkWidget *widget,
gpointer data);
static void prefs_keyboard_shortcuts_dialog (GtkWidget *widget,
Gimp *gimp);
static void prefs_menus_save_callback (GtkWidget *widget,
Gimp *gimp);
static void prefs_menus_clear_callback (GtkWidget *widget,
Gimp *gimp);
static void prefs_session_save_callback (GtkWidget *widget,
Gimp *gimp);
static void prefs_session_clear_callback (GtkWidget *widget,
Gimp *gimp);
static void prefs_devices_save_callback (GtkWidget *widget,
Gimp *gimp);
static void prefs_devices_clear_callback (GtkWidget *widget,
Gimp *gimp);
/* private variables */
@ -519,6 +531,108 @@ prefs_keyboard_shortcuts_dialog (GtkWidget *widget,
gtk_widget_show (dialog);
}
static void
prefs_menus_save_callback (GtkWidget *widget,
Gimp *gimp)
{
GtkWidget *clear_button;
menus_save (gimp, TRUE);
clear_button = g_object_get_data (G_OBJECT (widget), "clear-button");
if (clear_button)
gtk_widget_set_sensitive (clear_button, TRUE);
}
static void
prefs_menus_clear_callback (GtkWidget *widget,
Gimp *gimp)
{
GError *error = NULL;
if (! menus_clear (gimp, &error))
{
g_message (error->message);
g_clear_error (&error);
}
else
{
gtk_widget_set_sensitive (widget, FALSE);
g_message (_("Your keyboard shortcuts will be reset to default values "
"the next time you start GIMP."));
}
}
static void
prefs_session_save_callback (GtkWidget *widget,
Gimp *gimp)
{
GtkWidget *clear_button;
session_save (gimp, TRUE);
clear_button = g_object_get_data (G_OBJECT (widget), "clear-button");
if (clear_button)
gtk_widget_set_sensitive (clear_button, TRUE);
}
static void
prefs_session_clear_callback (GtkWidget *widget,
Gimp *gimp)
{
GError *error = NULL;
if (! session_clear (gimp, &error))
{
g_message (error->message);
g_clear_error (&error);
}
else
{
gtk_widget_set_sensitive (widget, FALSE);
g_message (_("Your window setup will be reset to default values. "
"the next time you start GIMP."));
}
}
static void
prefs_devices_save_callback (GtkWidget *widget,
Gimp *gimp)
{
GtkWidget *clear_button;
gimp_devices_save (gimp, TRUE);
clear_button = g_object_get_data (G_OBJECT (widget), "clear-button");
if (clear_button)
gtk_widget_set_sensitive (clear_button, TRUE);
}
static void
prefs_devices_clear_callback (GtkWidget *widget,
Gimp *gimp)
{
GError *error = NULL;
if (! gimp_devices_clear (gimp, &error))
{
g_message (error->message);
g_clear_error (&error);
}
else
{
gtk_widget_set_sensitive (widget, FALSE);
g_message (_("Your input device settings will be reset to "
"default values the next time you start GIMP."));
}
}
static GtkWidget *
prefs_notebook_append_page (Gimp *gimp,
GtkNotebook *notebook,
@ -1006,6 +1120,7 @@ prefs_dialog_new (Gimp *gimp,
GtkWidget *vbox2;
GtkWidget *hbox;
GtkWidget *button;
GtkWidget *button2;
GtkWidget *fileselection;
GtkWidget *patheditor;
GtkWidget *table;
@ -1246,16 +1361,18 @@ prefs_dialog_new (Gimp *gimp,
button = prefs_button_add (GTK_STOCK_SAVE,
_("Save Keyboard Shortcuts Now"),
GTK_BOX (vbox2));
g_signal_connect_swapped (button, "clicked",
G_CALLBACK (menus_save),
gimp);
g_signal_connect (button, "clicked",
G_CALLBACK (prefs_menus_save_callback),
gimp);
button = prefs_button_add (GTK_STOCK_CLEAR,
_("Clear Saved Keyboard Shortcuts Now"),
GTK_BOX (vbox2));
g_signal_connect_swapped (button, "clicked",
G_CALLBACK (menus_clear),
gimp);
button2 = prefs_button_add (GTK_STOCK_CLEAR,
_("Clear Saved Keyboard Shortcuts Now"),
GTK_BOX (vbox2));
g_signal_connect (button2, "clicked",
G_CALLBACK (prefs_menus_clear_callback),
gimp);
g_object_set_data (G_OBJECT (button), "clear-button", button2);
/***********/
@ -1879,16 +1996,18 @@ prefs_dialog_new (Gimp *gimp,
button = prefs_button_add (GTK_STOCK_SAVE,
_("Save Input Device Settings Now"),
GTK_BOX (vbox2));
g_signal_connect_swapped (button, "clicked",
G_CALLBACK (gimp_devices_save),
gimp);
g_signal_connect (button, "clicked",
G_CALLBACK (prefs_devices_save_callback),
gimp);
button = prefs_button_add (GTK_STOCK_CLEAR,
_("Clear Saved Input Device Settings Now"),
GTK_BOX (vbox2));
g_signal_connect_swapped (button, "clicked",
G_CALLBACK (gimp_devices_clear),
gimp);
button2 = prefs_button_add (GTK_STOCK_CLEAR,
_("Clear Saved Input Device Settings Now"),
GTK_BOX (vbox2));
g_signal_connect (button2, "clicked",
G_CALLBACK (prefs_devices_clear_callback),
gimp);
g_object_set_data (G_OBJECT (button), "clear-button", button2);
/****************************/
@ -2118,16 +2237,18 @@ prefs_dialog_new (Gimp *gimp,
button = prefs_button_add (GTK_STOCK_SAVE,
_("Save Window Positions Now"),
GTK_BOX (vbox2));
g_signal_connect_swapped (button, "clicked",
G_CALLBACK (session_save),
gimp);
g_signal_connect (button, "clicked",
G_CALLBACK (prefs_session_save_callback),
gimp);
button = prefs_button_add (GTK_STOCK_CLEAR,
_("Clear Saved Window Positions Now"),
GTK_BOX (vbox2));
g_signal_connect_swapped (button, "clicked",
G_CALLBACK (session_clear),
gimp);
button2 = prefs_button_add (GTK_STOCK_CLEAR,
_("Clear Saved Window Positions Now"),
GTK_BOX (vbox2));
g_signal_connect (button2, "clicked",
G_CALLBACK (prefs_session_clear_callback),
gimp);
g_object_set_data (G_OBJECT (button), "clear-button", button2);
/*****************/

View File

@ -21,13 +21,21 @@
#include "config.h"
#include <errno.h>
#include <stdio.h>
#include <string.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#include <gtk/gtk.h>
#include "libgimpbase/gimpbase.h"
#ifdef G_OS_WIN32
#include "libgimpbase/gimpwin32-io.h"
#endif
#include "gui-types.h"
#include "config/gimpconfig-error.h"
@ -56,6 +64,11 @@ enum
static gchar * session_filename (Gimp *gimp);
/* private variables */
static gboolean sessionrc_deleted = FALSE;
/* public functions */
void
@ -157,6 +170,12 @@ session_init (Gimp *gimp)
g_free (filename);
}
void
session_exit (Gimp *gimp)
{
g_return_if_fail (GIMP_IS_GIMP (gimp));
}
void
session_restore (Gimp *gimp)
{
@ -166,13 +185,17 @@ session_restore (Gimp *gimp)
}
void
session_save (Gimp *gimp)
session_save (Gimp *gimp,
gboolean always_save)
{
GimpConfigWriter *writer;
gchar *filename;
g_return_if_fail (GIMP_IS_GIMP (gimp));
if (sessionrc_deleted && ! always_save)
return;
filename = session_filename (gimp);
writer =
@ -203,14 +226,36 @@ session_save (Gimp *gimp)
gimp_config_writer_close (writer);
gimp_config_writer_finish (writer, "end of sessionrc", NULL);
sessionrc_deleted = FALSE;
}
void
session_clear (Gimp *gimp)
gboolean
session_clear (Gimp *gimp,
GError **error)
{
g_return_if_fail (GIMP_IS_GIMP (gimp));
gchar *filename;
gboolean success = TRUE;
g_print ("TODO: implement session_clear()\n");
g_return_val_if_fail (GIMP_IS_GIMP (gimp), FALSE);
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
filename = session_filename (gimp);
if (unlink (filename) != 0 && errno != ENOENT)
{
g_set_error (error, 0, 0, _("Deleting \"%s\" failed: %s"),
gimp_filename_to_utf8 (filename), g_strerror (errno));
success = FALSE;
}
else
{
sessionrc_deleted = TRUE;
}
g_free (filename);
return success;
}

View File

@ -20,10 +20,15 @@
#define __SESSION_H__
void session_init (Gimp *gimp);
void session_restore (Gimp *gimp);
void session_save (Gimp *gimp);
void session_clear (Gimp *gimp);
void session_init (Gimp *gimp);
void session_exit (Gimp *gimp);
void session_restore (Gimp *gimp);
void session_save (Gimp *gimp,
gboolean always_save);
gboolean session_clear (Gimp *gimp,
GError **error);
#endif /* __SESSION_H__ */

View File

@ -18,10 +18,19 @@
#include "config.h"
#include <errno.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#include <gtk/gtk.h>
#include "libgimpbase/gimpbase.h"
#ifdef G_OS_WIN32
#include "libgimpbase/gimpwin32-io.h"
#endif
#include "menus-types.h"
#include "config/gimpguiconfig.h"
@ -37,6 +46,8 @@
#include "tool-options-menu.h"
#include "toolbox-menu.h"
#include "gimp-intl.h"
/* local function prototypes */
@ -45,7 +56,12 @@ static void menu_can_change_accels (GimpGuiConfig *config);
/* global variables */
GimpMenuFactory *global_menu_factory = NULL;
GimpMenuFactory * global_menu_factory = NULL;
/* private variables */
static gboolean menurc_deleted = FALSE;
/* public functions */
@ -266,7 +282,6 @@ menus_exit (Gimp *gimp)
g_return_if_fail (global_menu_factory != NULL);
g_return_if_fail (global_menu_factory->gimp == gimp);
g_object_unref (global_menu_factory);
global_menu_factory = NULL;
@ -288,23 +303,49 @@ menus_restore (Gimp *gimp)
}
void
menus_save (Gimp *gimp)
menus_save (Gimp *gimp,
gboolean always_save)
{
gchar *filename;
g_return_if_fail (GIMP_IS_GIMP (gimp));
if (menurc_deleted && ! always_save)
return;
filename = gimp_personal_rc_file ("menurc");
gtk_accel_map_save (filename);
g_free (filename);
menurc_deleted = FALSE;
}
void
menus_clear (Gimp *gimp)
gboolean
menus_clear (Gimp *gimp,
GError **error)
{
g_return_if_fail (GIMP_IS_GIMP (gimp));
gchar *filename;
gboolean success = TRUE;
g_print ("TODO: implement menus_clear()\n");
g_return_val_if_fail (GIMP_IS_GIMP (gimp), FALSE);
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
filename = gimp_personal_rc_file ("menurc");
if (unlink (filename) != 0 && errno != ENOENT)
{
g_set_error (error, 0, 0, _("Deleting \"%s\" failed: %s"),
gimp_filename_to_utf8 (filename), g_strerror (errno));
success = FALSE;
}
else
{
menurc_deleted = TRUE;
}
g_free (filename);
return success;
}

View File

@ -23,11 +23,15 @@
extern GimpMenuFactory *global_menu_factory;
void menus_init (Gimp *gimp);
void menus_exit (Gimp *gimp);
void menus_restore (Gimp *gimp);
void menus_save (Gimp *gimp);
void menus_clear (Gimp *gimp);
void menus_init (Gimp *gimp);
void menus_exit (Gimp *gimp);
void menus_restore (Gimp *gimp);
void menus_save (Gimp *gimp,
gboolean always_save);
gboolean menus_clear (Gimp *gimp,
GError **error);
#endif /* __MENUS_H__ */

View File

@ -18,11 +18,20 @@
#include "config.h"
#include <errno.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#include <gtk/gtk.h>
#include "libgimpcolor/gimpcolor.h"
#include "libgimpbase/gimpbase.h"
#ifdef G_OS_WIN32
#include "libgimpbase/gimpwin32-io.h"
#endif
#include "widgets-types.h"
#include "core/gimp.h"
@ -38,6 +47,8 @@
#include "gimpdeviceinfo.h"
#include "gimpdevices.h"
#include "gimp-intl.h"
#define GIMP_DEVICE_MANAGER_DATA_KEY "gimp-device-manager"
@ -49,6 +60,7 @@ struct _GimpDeviceManager
GimpContainer *device_info_list;
GdkDevice *current_device;
GimpDeviceChangeNotify change_notify;
gboolean devicerc_deleted;
};
@ -151,7 +163,8 @@ gimp_devices_restore (Gimp *gimp)
}
void
gimp_devices_save (Gimp *gimp)
gimp_devices_save (Gimp *gimp,
gboolean always_save)
{
GimpDeviceManager *manager;
gchar *filename;
@ -163,6 +176,9 @@ gimp_devices_save (Gimp *gimp)
g_return_if_fail (manager != NULL);
if (manager->devicerc_deleted && ! always_save)
return;
filename = gimp_personal_rc_file ("devicerc");
if (! gimp_config_serialize_to_file (GIMP_CONFIG (manager->device_info_list),
@ -177,14 +193,40 @@ gimp_devices_save (Gimp *gimp)
}
g_free (filename);
manager->devicerc_deleted = FALSE;
}
void
gimp_devices_clear (Gimp *gimp)
gboolean
gimp_devices_clear (Gimp *gimp,
GError **error)
{
g_return_if_fail (GIMP_IS_GIMP (gimp));
GimpDeviceManager *manager;
gchar *filename;
gboolean success = TRUE;
g_print ("TODO: implement gimp_devices_clear()\n");
g_return_val_if_fail (GIMP_IS_GIMP (gimp), FALSE);
manager = gimp_device_manager_get (gimp);
g_return_val_if_fail (manager != NULL, FALSE);
filename = gimp_personal_rc_file ("devicerc");
if (unlink (filename) != 0 && errno != ENOENT)
{
g_set_error (error, 0, 0, _("Deleting \"%s\" failed: %s"),
gimp_filename_to_utf8 (filename), g_strerror (errno));
success = FALSE;
}
else
{
manager->devicerc_deleted = TRUE;
}
g_free (filename);
return success;
}
GdkDevice *

View File

@ -28,8 +28,11 @@ void gimp_devices_init (Gimp *gimp,
void gimp_devices_exit (Gimp *gimp);
void gimp_devices_restore (Gimp *gimp);
void gimp_devices_save (Gimp *gimp);
void gimp_devices_clear (Gimp *gimp);
void gimp_devices_save (Gimp *gimp,
gboolean always_save);
gboolean gimp_devices_clear (Gimp *gimp,
GError **error);
GdkDevice * gimp_devices_get_current (Gimp *gimp);

View File

@ -405,7 +405,7 @@ static void
gimp_device_status_save_clicked (GtkWidget *button,
GimpDeviceStatus *status)
{
gimp_devices_save (status->gimp);
gimp_devices_save (status->gimp, TRUE);
}
static void