2001-08-07  Michael Natterer  <mitch@gimp.org>

	* libgimpwidgets/gimpbutton.[ch]: cleanup.

	* app/Makefile.am
	* app/errorconsole.[ch]: removed...

	* app/gui/Makefile.am
	* app/gui/error-console-dialog.[ch]: ...added here. Lots of cleanup,
	create a vbox instead of a dialog.

	* app/gui/dialogs-constructors.c
	* app/gui/dialogs.c: added a dockable for the error console.

	* app/errors.c
	* app/gui/gui.c
	* app/gui/menus.c: changed accordingly.

	* app/widgets/gimpcontainerview.c: conntect "extended_clicked" to
	the "extended_clicked" callback, not "clicked".

	* app/widgets/gimplayerlistview.c: set the layer option box'
	spacing in "style_set".

	* app/widgets/gimplistitem.c: argh.

	* themes/Default/gtkrc: changed the default theme to set a smaller
	font only for the dockable because that's where saving screen
	estate really makes sense. May need some further tweaking.
This commit is contained in:
Michael Natterer 2001-08-07 00:06:06 +00:00 committed by Michael Natterer
parent 028f5e2d0c
commit 1c9069c4ca
25 changed files with 509 additions and 399 deletions

View File

@ -1,3 +1,33 @@
2001-08-07 Michael Natterer <mitch@gimp.org>
* libgimpwidgets/gimpbutton.[ch]: cleanup.
* app/Makefile.am
* app/errorconsole.[ch]: removed...
* app/gui/Makefile.am
* app/gui/error-console-dialog.[ch]: ...added here. Lots of cleanup,
create a vbox instead of a dialog.
* app/gui/dialogs-constructors.c
* app/gui/dialogs.c: added a dockable for the error console.
* app/errors.c
* app/gui/gui.c
* app/gui/menus.c: changed accordingly.
* app/widgets/gimpcontainerview.c: conntect "extended_clicked" to
the "extended_clicked" callback, not "clicked".
* app/widgets/gimplayerlistview.c: set the layer option box'
spacing in "style_set".
* app/widgets/gimplistitem.c: argh.
* themes/Default/gtkrc: changed the default theme to set a smaller
font only for the dockable because that's where saving screen
estate really makes sense. May need some further tweaking.
2001-08-06 Daniel Egger <egger@suse.de>
* autogen.sh: Fix error message to reflect that one needs

View File

@ -16,8 +16,6 @@ gimp_SOURCES = @STRIP_BEGIN@ \
devices.h \
docindex.c \
docindex.h \
errorconsole.c \
errorconsole.h \
gimpprogress.c \
gimpprogress.h \
nav_window.c \

View File

@ -57,11 +57,8 @@
#include "color-area.h"
#include "colormap-dialog.h"
#include "dialogs.h"
#include "devices.h"
#include "dialogs-constructors.h"
#include "docindex.h"
#include "errorconsole.h"
#include "gdisplay.h"
#include "error-console-dialog.h"
#include "gradient-editor.h"
#include "gradient-select.h"
#include "gradients-commands.h"
@ -79,6 +76,8 @@
#include "toolbox.h"
#include "app_procs.h"
#include "devices.h"
#include "docindex.h"
#include "gdisplay.h"
#include "gimprc.h"
#include "module_db.h"
@ -207,13 +206,6 @@ dialogs_palette_select_get (GimpDialogFactory *factory,
return palette_dialog_create ();
}
GtkWidget *
dialogs_error_console_get (GimpDialogFactory *factory,
GimpContext *context)
{
return error_console_create ();
}
GtkWidget *
dialogs_document_index_get (GimpDialogFactory *factory,
GimpContext *context)
@ -705,9 +697,9 @@ dialogs_path_list_view_new (GimpDialogFactory *factory,
view = paths_dialog_create ();
g_signal_connect (G_OBJECT (view), "destroy",
G_CALLBACK (gtk_widget_destroyed),
&view);
g_object_weak_ref (G_OBJECT (view),
(GDestroyNotify) gtk_widget_destroyed,
&view);
dockable = dialogs_dockable_new (view,
"Path List", "Paths",
@ -746,6 +738,34 @@ dialogs_indexed_palette_new (GimpDialogFactory *factory,
}
/* misc dockables */
GtkWidget *
dialogs_error_console_get (GimpDialogFactory *factory,
GimpContext *context)
{
static GtkWidget *view = NULL;
GtkWidget *dockable;
if (view)
return NULL;
view = error_console_create ();
g_object_weak_ref (G_OBJECT (view),
(GDestroyNotify) gtk_widget_destroyed,
&view);
dockable = dialogs_dockable_new (view,
"Error Console", "Errors",
NULL,
NULL);
return dockable;
}
/* editor dialogs */
void

View File

@ -45,7 +45,6 @@ static const GimpDialogFactoryEntry toplevel_entries[] =
{ "gimp:pattern-select-dialog", dialogs_pattern_select_get, TRUE, TRUE, FALSE, TRUE },
{ "gimp:gradient-select-dialog", dialogs_gradient_select_get, TRUE, TRUE, FALSE, TRUE },
{ "gimp:palette-select-dialog", dialogs_palette_select_get, TRUE, TRUE, FALSE, TRUE },
{ "gimp:error-console-dialog", dialogs_error_console_get, TRUE, TRUE, TRUE, TRUE },
{ "gimp:document-index-dialog", dialogs_document_index_get, TRUE, TRUE, TRUE, TRUE },
{ "gimp:preferences-dialog", dialogs_preferences_get, TRUE, FALSE, FALSE, TRUE },
{ "gimp:input-devices-dialog", dialogs_input_devices_get, TRUE, FALSE, FALSE, TRUE },
@ -83,7 +82,9 @@ static const GimpDialogFactoryEntry dock_entries[] =
{ "gimp:layer-list", dialogs_layer_list_view_new, FALSE, FALSE, FALSE, TRUE },
{ "gimp:channel-list", dialogs_channel_list_view_new, FALSE, FALSE, FALSE, TRUE },
{ "gimp:path-list", dialogs_path_list_view_new, TRUE, FALSE, FALSE, TRUE },
{ "gimp:indexed-palette", dialogs_indexed_palette_new, FALSE, FALSE, FALSE, TRUE }
{ "gimp:indexed-palette", dialogs_indexed_palette_new, FALSE, FALSE, FALSE, TRUE },
{ "gimp:error-console", dialogs_error_console_get, TRUE, FALSE, FALSE, TRUE }
};
static const gint n_dock_entries = (sizeof (dock_entries) /
sizeof (dock_entries[0]));

View File

@ -28,12 +28,15 @@
#include <gtk/gtk.h>
#include "core/core-types.h"
#include "widgets/widgets-types.h"
#include "widgets/gimpdialogfactory.h"
#include "widgets/gimpwidgets-utils.h"
#include "gui/dialogs.h"
#include "gui/error-console-dialog.h"
#include "appenv.h"
#include "errorconsole.h"
#include "errors.h"
#ifdef G_OS_WIN32
@ -56,6 +59,8 @@ gimp_message_log_func (const gchar *log_domain,
break;
case ERROR_CONSOLE:
gimp_dialog_factory_dialog_raise (global_dock_factory,
"gimp:error-console");
error_console_add ((gchar *) message);
break;

View File

@ -36,6 +36,8 @@ libappgui_a_SOURCES = @STRIP_BEGIN@ \
dialogs-constructors.h \
edit-commands.c \
edit-commands.h \
error-console-dialog.c \
error-console-dialog.h \
file-commands.c \
file-commands.h \
file-dialog-utils.c \

View File

@ -57,11 +57,8 @@
#include "color-area.h"
#include "colormap-dialog.h"
#include "dialogs.h"
#include "devices.h"
#include "dialogs-constructors.h"
#include "docindex.h"
#include "errorconsole.h"
#include "gdisplay.h"
#include "error-console-dialog.h"
#include "gradient-editor.h"
#include "gradient-select.h"
#include "gradients-commands.h"
@ -79,6 +76,8 @@
#include "toolbox.h"
#include "app_procs.h"
#include "devices.h"
#include "docindex.h"
#include "gdisplay.h"
#include "gimprc.h"
#include "module_db.h"
@ -207,13 +206,6 @@ dialogs_palette_select_get (GimpDialogFactory *factory,
return palette_dialog_create ();
}
GtkWidget *
dialogs_error_console_get (GimpDialogFactory *factory,
GimpContext *context)
{
return error_console_create ();
}
GtkWidget *
dialogs_document_index_get (GimpDialogFactory *factory,
GimpContext *context)
@ -705,9 +697,9 @@ dialogs_path_list_view_new (GimpDialogFactory *factory,
view = paths_dialog_create ();
g_signal_connect (G_OBJECT (view), "destroy",
G_CALLBACK (gtk_widget_destroyed),
&view);
g_object_weak_ref (G_OBJECT (view),
(GDestroyNotify) gtk_widget_destroyed,
&view);
dockable = dialogs_dockable_new (view,
"Path List", "Paths",
@ -746,6 +738,34 @@ dialogs_indexed_palette_new (GimpDialogFactory *factory,
}
/* misc dockables */
GtkWidget *
dialogs_error_console_get (GimpDialogFactory *factory,
GimpContext *context)
{
static GtkWidget *view = NULL;
GtkWidget *dockable;
if (view)
return NULL;
view = error_console_create ();
g_object_weak_ref (G_OBJECT (view),
(GDestroyNotify) gtk_widget_destroyed,
&view);
dockable = dialogs_dockable_new (view,
"Error Console", "Errors",
NULL,
NULL);
return dockable;
}
/* editor dialogs */
void

View File

@ -45,7 +45,6 @@ static const GimpDialogFactoryEntry toplevel_entries[] =
{ "gimp:pattern-select-dialog", dialogs_pattern_select_get, TRUE, TRUE, FALSE, TRUE },
{ "gimp:gradient-select-dialog", dialogs_gradient_select_get, TRUE, TRUE, FALSE, TRUE },
{ "gimp:palette-select-dialog", dialogs_palette_select_get, TRUE, TRUE, FALSE, TRUE },
{ "gimp:error-console-dialog", dialogs_error_console_get, TRUE, TRUE, TRUE, TRUE },
{ "gimp:document-index-dialog", dialogs_document_index_get, TRUE, TRUE, TRUE, TRUE },
{ "gimp:preferences-dialog", dialogs_preferences_get, TRUE, FALSE, FALSE, TRUE },
{ "gimp:input-devices-dialog", dialogs_input_devices_get, TRUE, FALSE, FALSE, TRUE },
@ -83,7 +82,9 @@ static const GimpDialogFactoryEntry dock_entries[] =
{ "gimp:layer-list", dialogs_layer_list_view_new, FALSE, FALSE, FALSE, TRUE },
{ "gimp:channel-list", dialogs_channel_list_view_new, FALSE, FALSE, FALSE, TRUE },
{ "gimp:path-list", dialogs_path_list_view_new, TRUE, FALSE, FALSE, TRUE },
{ "gimp:indexed-palette", dialogs_indexed_palette_new, FALSE, FALSE, FALSE, TRUE }
{ "gimp:indexed-palette", dialogs_indexed_palette_new, FALSE, FALSE, FALSE, TRUE },
{ "gimp:error-console", dialogs_error_console_get, TRUE, FALSE, FALSE, TRUE }
};
static const gint n_dock_entries = (sizeof (dock_entries) /
sizeof (dock_entries[0]));

View File

@ -58,57 +58,313 @@
#include "libgimp/gimpintl.h"
enum
typedef enum
{
ERRORS_ALL,
ERRORS_SELECTION
};
} ErrorScope;
static GtkWidget *error_console = NULL;
static GtkWidget *text_view = NULL;
static GtkTextBuffer *text_buffer = NULL;
/* local function prototypes */
static void error_console_destroy_callback (gpointer data);
static gboolean text_clicked_callback (GtkWidget *widget,
GdkEventButton *event,
GtkMenu *menu);
static void error_console_clear_callback (GtkWidget *widget,
GtkTextBuffer *buffer);
static void error_console_write_all_callback (GtkWidget *widget,
GtkTextBuffer *buffer);
static void error_console_write_selection_callback (GtkWidget *widget,
GtkTextBuffer *buffer);
static void error_console_create_file_dialog (GtkTextBuffer *buffer,
ErrorScope textscope);
static void error_console_file_ok_callback (GtkWidget *widget,
gpointer data);
static gboolean error_console_write_file (GtkTextBuffer *text_buffer,
const gchar *path,
ErrorScope textscope);
/* private variables */
static GtkWidget *error_console = NULL;
/* public functions */
GtkWidget *
error_console_create (void)
{
GtkTextBuffer *text_buffer;
GtkWidget *text_view;
GtkWidget *scrolled_window;
GtkWidget *menu;
GtkWidget *menuitem;
if (error_console)
return error_console;
text_buffer = gtk_text_buffer_new (NULL);
error_console = gtk_vbox_new (FALSE, 0);
g_object_set_data (G_OBJECT (error_console), "text-buffer", text_buffer);
g_object_weak_ref (G_OBJECT (error_console), error_console_destroy_callback,
NULL);
scrolled_window = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
gtk_container_add (GTK_CONTAINER (error_console), scrolled_window);
gtk_widget_show (scrolled_window);
menu = gtk_menu_new ();
menuitem = gtk_menu_item_new_with_label (_("Clear Console"));
gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
gtk_widget_show (menuitem);
g_signal_connect (G_OBJECT (menuitem), "activate",
G_CALLBACK (error_console_clear_callback),
text_buffer);
menuitem = gtk_menu_item_new ();
gtk_widget_set_sensitive (menuitem, FALSE);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
gtk_widget_show (menuitem);
menuitem = gtk_menu_item_new_with_label (_("Write all errors to file..."));
gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
gtk_widget_show (menuitem);
menuitem = gtk_menu_item_new_with_label (_("Write all errors to file..."));
gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
gtk_widget_show (menuitem);
g_signal_connect_swapped (G_OBJECT (menuitem), "activate",
G_CALLBACK (error_console_write_all_callback),
text_buffer);
menuitem = gtk_menu_item_new_with_label (_("Write selection to file..."));
gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
gtk_widget_show (menuitem);
g_signal_connect_swapped (G_OBJECT (menuitem), "activate",
G_CALLBACK (error_console_write_selection_callback),
text_buffer);
/* The output text widget */
text_view = gtk_text_view_new_with_buffer (text_buffer);
g_object_unref (G_OBJECT (text_buffer));
gtk_text_view_set_editable (GTK_TEXT_VIEW (text_view), FALSE);
gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (text_view), GTK_WRAP_WORD);
gtk_container_add (GTK_CONTAINER (scrolled_window), text_view);
gtk_widget_show (text_view);
g_signal_connect (G_OBJECT (text_view), "button_press_event",
G_CALLBACK (text_clicked_callback),
menu);
/* FIXME: interact with preferences */
message_handler = ERROR_CONSOLE;
return error_console;
}
void
error_console_add (const gchar *errormsg)
{
if (! error_console)
{
g_warning ("error_console_add(): error_console widget is NULL");
message_handler = MESSAGE_BOX;
g_message (errormsg);
return;
}
if (errormsg)
{
GtkTextBuffer *buffer;
GtkTextIter end;
buffer = g_object_get_data (G_OBJECT (error_console), "text-buffer");
gtk_text_buffer_get_end_iter (buffer, &end);
gtk_text_buffer_place_cursor (buffer, &end);
gtk_text_buffer_insert_at_cursor (buffer, errormsg, -1);
gtk_text_buffer_insert_at_cursor (buffer, "\n", -1);
}
}
/* private functions */
static void
error_console_close_callback (GtkWidget *widget,
gpointer data)
error_console_destroy_callback (gpointer data)
{
gtk_widget_hide (error_console);
error_console = NULL;
/* FIXME: interact with preferences */
message_handler = MESSAGE_BOX;
}
static void
error_console_clear_callback (GtkWidget *widget,
gpointer data)
static gboolean
text_clicked_callback (GtkWidget *widget,
GdkEventButton *event,
GtkMenu *menu)
{
switch (event->button)
{
case 1:
case 2:
return FALSE;
break;
case 3:
gtk_menu_popup (menu, NULL, NULL, NULL, NULL, event->button, event->time);
/* wheelmouse support */
case 4:
{
GtkAdjustment *adj = GTK_TEXT_VIEW (widget)->vadjustment;
gdouble new_value = adj->value - adj->page_increment / 2;
new_value = CLAMP (new_value, adj->lower, adj->upper - adj->page_size);
gtk_adjustment_set_value (adj, new_value);
}
break;
case 5:
{
GtkAdjustment *adj = GTK_TEXT_VIEW (widget)->vadjustment;
gdouble new_value = adj->value + adj->page_increment / 2;
new_value = CLAMP (new_value, adj->lower, adj->upper - adj->page_size);
gtk_adjustment_set_value (adj, new_value);
}
break;
default:
break;
}
return TRUE;
}
static void
error_console_clear_callback (GtkWidget *widget,
GtkTextBuffer *buffer)
{
GtkTextBuffer *buffer;
GtkTextIter start_iter;
GtkTextIter end_iter;
buffer = (GtkTextBuffer *) data;
gtk_text_buffer_get_start_iter (buffer, &start_iter);
gtk_text_buffer_get_end_iter (buffer, &end_iter);
gtk_text_buffer_delete (buffer, &start_iter, &end_iter);
}
void
error_console_free (void)
{
if (error_console)
static void
error_console_write_all_callback (GtkWidget *widget,
GtkTextBuffer *buffer)
{
error_console_create_file_dialog (buffer, ERRORS_ALL);
}
static void
error_console_write_selection_callback (GtkWidget *widget,
GtkTextBuffer *buffer)
{
error_console_create_file_dialog (buffer, ERRORS_SELECTION);
}
static void
error_console_create_file_dialog (GtkTextBuffer *buffer,
ErrorScope textscope)
{
GtkFileSelection *filesel;
if (! gtk_text_buffer_get_selection_bounds (buffer, NULL, NULL) &&
textscope == ERRORS_SELECTION)
{
gtk_widget_destroy (error_console);
error_console = NULL;
g_message (_("Can't save, nothing selected!"));
return;
}
filesel =
GTK_FILE_SELECTION (gtk_file_selection_new (_("Save error log to file...")));
g_object_set_data (G_OBJECT (filesel), "text-buffer",
buffer);
g_object_set_data (G_OBJECT (filesel), "text-scope",
GINT_TO_POINTER (textscope));
gtk_window_set_position (GTK_WINDOW (filesel), GTK_WIN_POS_MOUSE);
gtk_window_set_wmclass (GTK_WINDOW (filesel), "save_errors", "Gimp");
gtk_container_set_border_width (GTK_CONTAINER (filesel), 2);
gtk_container_set_border_width (GTK_CONTAINER (filesel->button_area), 2);
g_signal_connect_swapped (G_OBJECT (filesel->cancel_button), "clicked",
G_CALLBACK (gtk_widget_destroy),
filesel);
g_signal_connect_swapped (G_OBJECT (filesel), "delete_event",
G_CALLBACK (gtk_widget_destroy),
filesel);
g_signal_connect (G_OBJECT (filesel->ok_button), "clicked",
G_CALLBACK (error_console_file_ok_callback),
filesel);
/* Connect the "F1" help key */
gimp_help_connect (GTK_WIDGET (filesel),
gimp_standard_help_func,
"dialogs/error_console.html");
gtk_widget_show (GTK_WIDGET (filesel));
}
static void
error_console_file_ok_callback (GtkWidget *widget,
gpointer data)
{
GtkWidget *filesel;
const gchar *filename;
GtkTextBuffer *buffer;
ErrorScope textscope;
filesel = (GtkWidget *) data;
filename = gtk_file_selection_get_filename (GTK_FILE_SELECTION (filesel));
buffer = g_object_get_data (G_OBJECT (filesel),
"text-buffer");
textscope = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (filesel),
"text-scope"));
if (! error_console_write_file (buffer, filename, textscope))
{
g_message (_("Error opening file \"%s\":\n%s"),
filename, g_strerror (errno));
}
else
{
gtk_widget_destroy (filesel);
}
}
static gboolean
error_console_write_file (const gchar *path,
gint textscope)
error_console_write_file (GtkTextBuffer *text_buffer,
const gchar *path,
ErrorScope textscope)
{
GtkTextIter start_iter;
GtkTextIter end_iter;
@ -153,231 +409,3 @@ error_console_write_file (const gchar *path,
return TRUE;
}
static void
error_console_file_ok_callback (GtkWidget *widget,
gpointer data)
{
GtkWidget *filesel;
const gchar *filename;
gint textscope;
filesel = (GtkWidget *) data;
filename = gtk_file_selection_get_filename (GTK_FILE_SELECTION (filesel));
textscope = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (filesel),
"text-scope"));
if (! error_console_write_file (filename, textscope))
{
gchar *message;
message = g_strdup_printf (_("Error opening file %s: %s"),
filename, g_strerror (errno));
g_message (message);
g_free (message);
}
else
{
gtk_widget_destroy (filesel);
}
}
static void
error_console_menu_callback (gint textscope)
{
GtkWidget *filesel;
if (! gtk_text_buffer_get_selection_bounds (text_buffer, NULL, NULL) &&
textscope == ERRORS_SELECTION)
{
g_message (_("Can't save, nothing selected!"));
return;
}
filesel = gtk_file_selection_new (_("Save error log to file..."));
gtk_window_set_position (GTK_WINDOW (filesel), GTK_WIN_POS_MOUSE);
gtk_window_set_wmclass (GTK_WINDOW (filesel), "save_errors", "Gimp");
gtk_container_set_border_width (GTK_CONTAINER (filesel), 2);
gtk_container_set_border_width (GTK_CONTAINER (GTK_FILE_SELECTION (filesel)->button_area), 2);
g_signal_connect_swapped (G_OBJECT (GTK_FILE_SELECTION (filesel)->cancel_button),
"clicked",
G_CALLBACK (gtk_widget_destroy),
filesel);
g_object_set_data (G_OBJECT (filesel), "text-scope",
GINT_TO_POINTER (textscope));
g_signal_connect (G_OBJECT (GTK_FILE_SELECTION (filesel)->ok_button),
"clicked",
G_CALLBACK (error_console_file_ok_callback),
filesel);
g_signal_connect_swapped (G_OBJECT (GTK_FILE_SELECTION (filesel)->cancel_button),
"delete_event",
G_CALLBACK (gtk_widget_destroy),
filesel);
/* Connect the "F1" help key */
gimp_help_connect (filesel,
gimp_standard_help_func,
"dialogs/error_console.html");
gtk_widget_show (filesel);
}
static gboolean
text_clicked_callback (GtkWidget *widget,
GdkEventButton *event,
gpointer data)
{
GtkMenu *menu = (GtkMenu *) data;
menu = (GtkMenu *) data;
switch (event->button)
{
case 1:
case 2:
return FALSE;
break;
case 3:
gtk_menu_popup (menu, NULL, NULL, NULL, NULL, event->button, event->time);
/* wheelmouse support */
case 4:
{
GtkAdjustment *adj = GTK_TEXT_VIEW (text_view)->vadjustment;
gdouble new_value = adj->value - adj->page_increment / 2;
new_value = CLAMP (new_value, adj->lower, adj->upper - adj->page_size);
gtk_adjustment_set_value (adj, new_value);
}
break;
case 5:
{
GtkAdjustment *adj = GTK_TEXT_VIEW (text_view)->vadjustment;
gdouble new_value = adj->value + adj->page_increment / 2;
new_value = CLAMP (new_value, adj->lower, adj->upper - adj->page_size);
gtk_adjustment_set_value (adj, new_value);
}
break;
default:
break;
}
return TRUE;
}
GtkWidget *
error_console_create (void)
{
GtkWidget *scrolled_window;
GtkWidget *menu;
GtkWidget *menuitem;
if (error_console)
return error_console;
text_buffer = gtk_text_buffer_new (NULL);
error_console = gimp_dialog_new (_("GIMP Error Console"), "error_console",
gimp_standard_help_func,
"dialogs/error_console.html",
GTK_WIN_POS_NONE,
TRUE, TRUE, FALSE,
GTK_STOCK_CLEAR, error_console_clear_callback,
text_buffer, NULL, NULL, FALSE, FALSE,
GTK_STOCK_CLOSE, error_console_close_callback,
text_buffer, NULL, NULL, TRUE, TRUE,
NULL);
/* The next line should disappear when setting the size works in SM */
gtk_widget_set_usize (error_console, 250, 300);
scrolled_window = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 4);
gtk_container_add (GTK_CONTAINER (GTK_DIALOG (error_console)->vbox),
scrolled_window);
gtk_widget_show (scrolled_window);
menu = gtk_menu_new ();
menuitem = gtk_menu_item_new_with_label (_("Write all errors to file..."));
gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
gtk_widget_show (menuitem);
g_signal_connect_swapped (G_OBJECT (menuitem), "activate",
G_CALLBACK (error_console_menu_callback),
GINT_TO_POINTER (ERRORS_ALL));
menuitem = gtk_menu_item_new_with_label (_("Write selection to file..."));
gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
gtk_widget_show (menuitem);
g_signal_connect_swapped (G_OBJECT (menuitem), "activate",
G_CALLBACK (error_console_menu_callback),
GINT_TO_POINTER (ERRORS_SELECTION));
/* The output text widget */
text_view = gtk_text_view_new_with_buffer (text_buffer);
g_object_unref (G_OBJECT (text_buffer));
gtk_text_view_set_editable (GTK_TEXT_VIEW (text_view), FALSE);
gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (text_view), GTK_WRAP_WORD);
gtk_container_add (GTK_CONTAINER (scrolled_window), text_view);
gtk_widget_show (text_view);
g_signal_connect (G_OBJECT (text_view), "button_press_event",
G_CALLBACK (text_clicked_callback),
GTK_MENU (menu));
gtk_widget_show (error_console);
/* FIXME: interact with preferences */
message_handler = ERROR_CONSOLE;
return error_console;
}
void
error_console_add (const gchar *errormsg)
{
if (! error_console)
{
error_console_create ();
}
else
{
if (! GTK_WIDGET_VISIBLE (error_console))
{
gtk_widget_show (error_console);
/* FIXME: interact with preferences */
message_handler = ERROR_CONSOLE;
}
else
gdk_window_raise (error_console->window);
}
if (errormsg)
{
GtkTextIter end;
gtk_text_buffer_get_end_iter (text_buffer, &end);
gtk_text_buffer_place_cursor (text_buffer, &end);
gtk_text_buffer_insert_at_cursor (text_buffer, errormsg, -1);
gtk_text_buffer_insert_at_cursor (text_buffer, "\n", -1);
}
}

View File

@ -19,14 +19,13 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef __ERROR_CONSOLE_H__
#define __ERROR_CONSOLE_H__
#ifndef __ERROR_CONSOLE_DIALOG_H__
#define __ERROR_CONSOLE_DIALOG_H__
void error_console_add (const gchar *errormsg);
GtkWidget * error_console_create (void);
void error_console_free (void);
#endif /* __ERROR_CONSOLE_H__ */
#endif /* __ERROR_CONSOLE_DIALOG_H__ */

View File

@ -41,7 +41,6 @@
#include "devices.h"
#include "dialogs.h"
#include "docindex.h"
#include "errorconsole.h"
#include "file-open-dialog.h"
#include "file-save-dialog.h"
#include "gradient-select.h"
@ -354,7 +353,6 @@ gui_exit (Gimp *gimp)
/* handle this in the dialog factory: */
document_index_free ();
error_console_free ();
tool_options_dialog_free ();
toolbox_free ();

View File

@ -237,8 +237,8 @@ static GimpItemFactoryEntry toolbox_entries[] =
"gimp:document-index-dialog",
"file/dialogs/document_index.html", NULL },
{ { N_("/File/Dialogs/Error Console..."), NULL,
dialogs_create_toplevel_cmd_callback, 0 },
"gimp:error-console-dialog",
dialogs_create_dockable_cmd_callback, 0 },
"gimp:error-console",
"file/dialogs/error_console.html", NULL },
#ifdef DISPLAY_FILTERS
{ { N_("/File/Dialogs/Display Filters..."), NULL,
@ -664,7 +664,8 @@ static GimpItemFactoryEntry image_entries[] =
NULL,
"image/dialogs/scale_image.html", NULL },
{ { N_("/Image/Duplicate"), "<control>D",
image_duplicate_cmd_callback, 0 },
image_duplicate_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_DUPLICATE },
NULL,
"image/duplicate.html", NULL },
@ -838,8 +839,8 @@ static GimpItemFactoryEntry image_entries[] =
"gimp:document-index-dialog",
"dialogs/document_index.html", NULL },
{ { N_("/Dialogs/Error Console..."), NULL,
dialogs_create_toplevel_cmd_callback, 0 },
"gimp:error-console-dialog",
dialogs_create_dockable_cmd_callback, 0 },
"gimp:error-console",
"dialogs/error_console.html", NULL },
#ifdef DISPLAY_FILTERS
{ { N_("/Dialogs/Display Filters..."), NULL,
@ -1219,6 +1220,10 @@ static GimpItemFactoryEntry dialogs_entries[] =
dialogs_add_tab_cmd_callback, 0 },
"gimp:indexed-palette",
NULL, NULL },
{ { N_("/Add Tab/Error Console..."), NULL,
dialogs_add_tab_cmd_callback, 0 },
"gimp:error-console",
NULL, NULL },
SEPARATOR ("/Add Tab/---"),

View File

@ -237,8 +237,8 @@ static GimpItemFactoryEntry toolbox_entries[] =
"gimp:document-index-dialog",
"file/dialogs/document_index.html", NULL },
{ { N_("/File/Dialogs/Error Console..."), NULL,
dialogs_create_toplevel_cmd_callback, 0 },
"gimp:error-console-dialog",
dialogs_create_dockable_cmd_callback, 0 },
"gimp:error-console",
"file/dialogs/error_console.html", NULL },
#ifdef DISPLAY_FILTERS
{ { N_("/File/Dialogs/Display Filters..."), NULL,
@ -664,7 +664,8 @@ static GimpItemFactoryEntry image_entries[] =
NULL,
"image/dialogs/scale_image.html", NULL },
{ { N_("/Image/Duplicate"), "<control>D",
image_duplicate_cmd_callback, 0 },
image_duplicate_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_DUPLICATE },
NULL,
"image/duplicate.html", NULL },
@ -838,8 +839,8 @@ static GimpItemFactoryEntry image_entries[] =
"gimp:document-index-dialog",
"dialogs/document_index.html", NULL },
{ { N_("/Dialogs/Error Console..."), NULL,
dialogs_create_toplevel_cmd_callback, 0 },
"gimp:error-console-dialog",
dialogs_create_dockable_cmd_callback, 0 },
"gimp:error-console",
"dialogs/error_console.html", NULL },
#ifdef DISPLAY_FILTERS
{ { N_("/Dialogs/Display Filters..."), NULL,
@ -1219,6 +1220,10 @@ static GimpItemFactoryEntry dialogs_entries[] =
dialogs_add_tab_cmd_callback, 0 },
"gimp:indexed-palette",
NULL, NULL },
{ { N_("/Add Tab/Error Console..."), NULL,
dialogs_add_tab_cmd_callback, 0 },
"gimp:error-console",
NULL, NULL },
SEPARATOR ("/Add Tab/---"),

View File

@ -564,7 +564,7 @@ gimp_container_view_add_button (GimpContainerView *view,
if (extended_callback)
g_signal_connect (G_OBJECT (button), "extended_clicked",
callback,
extended_callback,
callback_data);
image = gtk_image_new_from_stock (stock_id, GTK_ICON_SIZE_BUTTON);

View File

@ -237,8 +237,8 @@ static GimpItemFactoryEntry toolbox_entries[] =
"gimp:document-index-dialog",
"file/dialogs/document_index.html", NULL },
{ { N_("/File/Dialogs/Error Console..."), NULL,
dialogs_create_toplevel_cmd_callback, 0 },
"gimp:error-console-dialog",
dialogs_create_dockable_cmd_callback, 0 },
"gimp:error-console",
"file/dialogs/error_console.html", NULL },
#ifdef DISPLAY_FILTERS
{ { N_("/File/Dialogs/Display Filters..."), NULL,
@ -664,7 +664,8 @@ static GimpItemFactoryEntry image_entries[] =
NULL,
"image/dialogs/scale_image.html", NULL },
{ { N_("/Image/Duplicate"), "<control>D",
image_duplicate_cmd_callback, 0 },
image_duplicate_cmd_callback, 0,
"<StockItem>", GIMP_STOCK_DUPLICATE },
NULL,
"image/duplicate.html", NULL },
@ -838,8 +839,8 @@ static GimpItemFactoryEntry image_entries[] =
"gimp:document-index-dialog",
"dialogs/document_index.html", NULL },
{ { N_("/Dialogs/Error Console..."), NULL,
dialogs_create_toplevel_cmd_callback, 0 },
"gimp:error-console-dialog",
dialogs_create_dockable_cmd_callback, 0 },
"gimp:error-console",
"dialogs/error_console.html", NULL },
#ifdef DISPLAY_FILTERS
{ { N_("/Dialogs/Display Filters..."), NULL,
@ -1219,6 +1220,10 @@ static GimpItemFactoryEntry dialogs_entries[] =
dialogs_add_tab_cmd_callback, 0 },
"gimp:indexed-palette",
NULL, NULL },
{ { N_("/Add Tab/Error Console..."), NULL,
dialogs_add_tab_cmd_callback, 0 },
"gimp:error-console",
NULL, NULL },
SEPARATOR ("/Add Tab/---"),

View File

@ -244,8 +244,11 @@ static void
gimp_layer_list_view_style_set (GtkWidget *widget,
GtkStyle *prev_style)
{
gint content_spacing;
gint button_spacing;
GimpLayerListView *layer_view;
gint content_spacing;
gint button_spacing;
layer_view = GIMP_LAYER_LIST_VIEW (widget);
gtk_widget_style_get (widget,
"content_spacing",
@ -254,9 +257,7 @@ gimp_layer_list_view_style_set (GtkWidget *widget,
&button_spacing,
NULL);
#ifdef __GNUC__
#warning TODO: gimp_layer_list_view_style_set()
#endif
gtk_box_set_spacing (GTK_BOX (layer_view->options_box), content_spacing);
if (GTK_WIDGET_CLASS (parent_class)->style_set)
GTK_WIDGET_CLASS (parent_class)->style_set (widget, prev_style);
@ -313,9 +314,6 @@ gimp_layer_list_view_select_item (GimpContainerView *view,
gboolean options_sensitive = FALSE;
gboolean anchor_sensitive = FALSE;
gboolean raise_sensitive = FALSE;
gboolean lower_sensitive = FALSE;
gboolean duplicate_sensitive = FALSE;
gboolean edit_sensitive = FALSE;
list_view = GIMP_LAYER_LIST_VIEW (view);
drawable_view = GIMP_DRAWABLE_LIST_VIEW (view);
@ -334,13 +332,13 @@ gimp_layer_list_view_select_item (GimpContainerView *view,
if (gimp_layer_is_floating_sel (GIMP_LAYER (item)))
{
anchor_sensitive = TRUE;
gtk_widget_set_sensitive (drawable_view->lower_button, FALSE);
gtk_widget_set_sensitive (drawable_view->duplicate_button, FALSE);
gtk_widget_set_sensitive (drawable_view->edit_button, FALSE);
}
else
{
lower_sensitive = TRUE;
duplicate_sensitive = TRUE;
edit_sensitive = TRUE;
if (gimp_drawable_has_alpha (GIMP_DRAWABLE (item)) &&
gimp_container_get_child_index (view->container,
GIMP_OBJECT (item)))
@ -350,12 +348,9 @@ gimp_layer_list_view_select_item (GimpContainerView *view,
}
}
gtk_widget_set_sensitive (list_view->options_box, options_sensitive);
gtk_widget_set_sensitive (drawable_view->raise_button, raise_sensitive);
gtk_widget_set_sensitive (drawable_view->lower_button, lower_sensitive);
gtk_widget_set_sensitive (drawable_view->duplicate_button, duplicate_sensitive);
gtk_widget_set_sensitive (drawable_view->edit_button, edit_sensitive);
gtk_widget_set_sensitive (list_view->anchor_button, anchor_sensitive);
gtk_widget_set_sensitive (list_view->options_box, options_sensitive);
gtk_widget_set_sensitive (drawable_view->raise_button, raise_sensitive);
gtk_widget_set_sensitive (list_view->anchor_button, anchor_sensitive);
}

View File

@ -244,8 +244,11 @@ static void
gimp_layer_list_view_style_set (GtkWidget *widget,
GtkStyle *prev_style)
{
gint content_spacing;
gint button_spacing;
GimpLayerListView *layer_view;
gint content_spacing;
gint button_spacing;
layer_view = GIMP_LAYER_LIST_VIEW (widget);
gtk_widget_style_get (widget,
"content_spacing",
@ -254,9 +257,7 @@ gimp_layer_list_view_style_set (GtkWidget *widget,
&button_spacing,
NULL);
#ifdef __GNUC__
#warning TODO: gimp_layer_list_view_style_set()
#endif
gtk_box_set_spacing (GTK_BOX (layer_view->options_box), content_spacing);
if (GTK_WIDGET_CLASS (parent_class)->style_set)
GTK_WIDGET_CLASS (parent_class)->style_set (widget, prev_style);
@ -313,9 +314,6 @@ gimp_layer_list_view_select_item (GimpContainerView *view,
gboolean options_sensitive = FALSE;
gboolean anchor_sensitive = FALSE;
gboolean raise_sensitive = FALSE;
gboolean lower_sensitive = FALSE;
gboolean duplicate_sensitive = FALSE;
gboolean edit_sensitive = FALSE;
list_view = GIMP_LAYER_LIST_VIEW (view);
drawable_view = GIMP_DRAWABLE_LIST_VIEW (view);
@ -334,13 +332,13 @@ gimp_layer_list_view_select_item (GimpContainerView *view,
if (gimp_layer_is_floating_sel (GIMP_LAYER (item)))
{
anchor_sensitive = TRUE;
gtk_widget_set_sensitive (drawable_view->lower_button, FALSE);
gtk_widget_set_sensitive (drawable_view->duplicate_button, FALSE);
gtk_widget_set_sensitive (drawable_view->edit_button, FALSE);
}
else
{
lower_sensitive = TRUE;
duplicate_sensitive = TRUE;
edit_sensitive = TRUE;
if (gimp_drawable_has_alpha (GIMP_DRAWABLE (item)) &&
gimp_container_get_child_index (view->container,
GIMP_OBJECT (item)))
@ -350,12 +348,9 @@ gimp_layer_list_view_select_item (GimpContainerView *view,
}
}
gtk_widget_set_sensitive (list_view->options_box, options_sensitive);
gtk_widget_set_sensitive (drawable_view->raise_button, raise_sensitive);
gtk_widget_set_sensitive (drawable_view->lower_button, lower_sensitive);
gtk_widget_set_sensitive (drawable_view->duplicate_button, duplicate_sensitive);
gtk_widget_set_sensitive (drawable_view->edit_button, edit_sensitive);
gtk_widget_set_sensitive (list_view->anchor_button, anchor_sensitive);
gtk_widget_set_sensitive (list_view->options_box, options_sensitive);
gtk_widget_set_sensitive (drawable_view->raise_button, raise_sensitive);
gtk_widget_set_sensitive (list_view->anchor_button, anchor_sensitive);
}

View File

@ -545,20 +545,15 @@ gimp_list_item_button_state_changed (GtkWidget *widget,
*/
if (GTK_WIDGET_DRAWABLE (list_item))
{
GdkEventExpose event;
GdkRectangle rect;
event.type = GDK_EXPOSE;
event.send_event = TRUE;
event.window = list_item->window;
event.area.x = widget->allocation.x;
event.area.y = widget->allocation.y;
event.area.width = widget->allocation.width;
event.area.height = widget->allocation.height;
event.count = 0;
rect.x = widget->allocation.x;
rect.y = widget->allocation.y;
rect.width = widget->allocation.width;
rect.height = widget->allocation.height;
gdk_window_ref (event.window);
gtk_widget_event (list_item, (GdkEvent*) &event);
gdk_window_unref (event.window);
gdk_window_invalidate_rect (list_item->window, &rect, FALSE);
gdk_window_process_updates (list_item->window, FALSE);
}
}
}

View File

@ -124,10 +124,10 @@ static guint preview_signals[LAST_SIGNAL] = { 0 };
static GtkPreviewClass *parent_class = NULL;
GtkType
GType
gimp_preview_get_type (void)
{
static GtkType preview_type = 0;
static GType preview_type = 0;
if (! preview_type)
{

View File

@ -124,10 +124,10 @@ static guint preview_signals[LAST_SIGNAL] = { 0 };
static GtkPreviewClass *parent_class = NULL;
GtkType
GType
gimp_preview_get_type (void)
{
static GtkType preview_type = 0;
static GType preview_type = 0;
if (! preview_type)
{

View File

@ -124,10 +124,10 @@ static guint preview_signals[LAST_SIGNAL] = { 0 };
static GtkPreviewClass *parent_class = NULL;
GtkType
GType
gimp_preview_get_type (void)
{
static GtkType preview_type = 0;
static GType preview_type = 0;
if (! preview_type)
{

View File

@ -124,10 +124,10 @@ static guint preview_signals[LAST_SIGNAL] = { 0 };
static GtkPreviewClass *parent_class = NULL;
GtkType
GType
gimp_preview_get_type (void)
{
static GtkType preview_type = 0;
static GType preview_type = 0;
if (! preview_type)
{

View File

@ -50,12 +50,12 @@ static guint button_signals[LAST_SIGNAL] = { 0 };
static GtkButtonClass *parent_class = NULL;
GtkType
GType
gimp_button_get_type (void)
{
static guint button_type = 0;
static GType button_type = 0;
if (!button_type)
if (! button_type)
{
GtkTypeInfo button_info =
{
@ -127,18 +127,21 @@ static gboolean
gimp_button_button_press (GtkWidget *widget,
GdkEventButton *bevent)
{
g_return_val_if_fail (widget != NULL, FALSE);
GimpButton *button;
g_return_val_if_fail (GIMP_IS_BUTTON (widget), FALSE);
g_return_val_if_fail (bevent != NULL, FALSE);
button = GIMP_BUTTON (widget);
if (bevent->type == GDK_BUTTON_PRESS && bevent->button == 1)
{
GimpButton *button;
button = GIMP_BUTTON (widget);
button->press_state = bevent->state;
}
else
{
button->press_state = 0;
}
if (GTK_WIDGET_CLASS (parent_class)->button_press_event)
return GTK_WIDGET_CLASS (parent_class)->button_press_event (widget, bevent);
@ -146,15 +149,13 @@ gimp_button_button_press (GtkWidget *widget,
return TRUE;
}
static gint
static gboolean
gimp_button_button_release (GtkWidget *widget,
GdkEventButton *bevent)
{
GtkButton *button;
gboolean extended_clicked = FALSE;
gboolean retval = TRUE;
g_return_val_if_fail (widget != NULL, FALSE);
g_return_val_if_fail (GIMP_IS_BUTTON (widget), FALSE);
g_return_val_if_fail (bevent != NULL, FALSE);
@ -180,8 +181,7 @@ gimp_button_button_release (GtkWidget *widget,
}
if (GTK_WIDGET_CLASS (parent_class)->button_release_event)
retval = GTK_WIDGET_CLASS (parent_class)->button_release_event (widget,
bevent);
GTK_WIDGET_CLASS (parent_class)->button_release_event (widget, bevent);
if (extended_clicked)
{
@ -195,5 +195,5 @@ gimp_button_button_release (GtkWidget *widget,
gtk_widget_draw (widget, NULL);
}
return retval;
return TRUE;
}

View File

@ -55,7 +55,9 @@ struct _GimpButtonClass
guint modifier_state);
};
GtkType gimp_button_get_type (void);
GType gimp_button_get_type (void);
GtkWidget * gimp_button_new (void);

View File

@ -16,24 +16,38 @@
# include "imagerc"
style "gimp-global-style"
style "gimp-normal-font-style"
{
font_name = "sans 12"
}
style "gimp-small-font-style"
{
font_name = "sans 11"
}
style "gimp-tiny-font-style"
{
font_name = "sans 8"
}
class "GtkWidget" style "gimp-normal-font-style"
class "*Ruler*" style "gimp-tiny-font-style"
style "gimp-dialog-style"
{
GtkDialog::content_area_border = 0
GtkDialog::button_spacing = 4
GtkDialog::action_area_border = 4
# GtkSpinButton::shadow_type = none
# when changing the font size, also change GtkRange::slider_width below
# so the labels stay nicely aligned with the horizontzal sliders
#
font_name = "sans 11"
}
class "GtkWidget" style "gimp-global-style"
widget "*GtkDialog*" style "gimp-dialog-style"
style "gimp-hscale-style" = "gimp-global-style"
style "gimp-hscale-style"
{
GtkRange::slider_width = 11
}
@ -41,15 +55,7 @@ style "gimp-hscale-style" = "gimp-global-style"
class "GtkHScale" style "gimp-hscale-style"
style "gimp-ruler"
{
font_name = "sans 8"
}
class "*Ruler*" style "gimp-ruler"
style "gimp-dock-style"
style "gimp-dock-style" = "gimp-small-font-style"
{
GimpDockable::content_border = 2
GimpContainerView::content_spacing = 2
@ -58,7 +64,7 @@ style "gimp-dock-style"
GimpContainerEditor::button_spacing = 2
}
widget "*GimpDock*" style "gimp-dock-style"
widget "*Gimp*Dock*" style "gimp-dock-style"
style "gimp-tooltips"