From 4d6b4f512ce94da4f0d28bd018a6e388aac3d03e Mon Sep 17 00:00:00 2001 From: Michael Natterer Date: Thu, 20 Mar 2003 15:49:48 +0000 Subject: [PATCH] implement GtkDialog::close() and synthesize a "delete_event" 2003-03-20 Michael Natterer * libgimpwidgets/gimpdialog.c: implement GtkDialog::close() and synthesize a "delete_event" unconditionally. * app/widgets/gimpviewabledialog.c: emit "close" instead of synthesizing "delete_event". * app/widgets/gimppreview.[ch]: removed "extended_clicked" signal and added "GdkModifierType state" to "clicked"'s signature. * app/gui/file-open-dialog.c * app/gui/test-commands.c * app/widgets/gimpcontainergridview.c * app/widgets/gimptoolbox-indicator-area.c: changed accordingly. --- ChangeLog | 16 +++++++++++++ app/dialogs/file-open-dialog.c | 20 ++++------------ app/gui/file-open-dialog.c | 20 ++++------------ app/gui/test-commands.c | 5 ++++ app/widgets/gimpcontainergridview.c | 6 +++-- app/widgets/gimppreview.c | 30 ++++-------------------- app/widgets/gimppreview.h | 9 ++++--- app/widgets/gimptoolbox-indicator-area.c | 15 +++++++----- app/widgets/gimpview.c | 30 ++++-------------------- app/widgets/gimpview.h | 9 ++++--- app/widgets/gimpviewabledialog.c | 19 +-------------- libgimpwidgets/gimpdialog.c | 26 ++++++++++++++++++++ 12 files changed, 87 insertions(+), 118 deletions(-) diff --git a/ChangeLog b/ChangeLog index b376617d13..263e037ba3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,19 @@ +2003-03-20 Michael Natterer + + * libgimpwidgets/gimpdialog.c: implement GtkDialog::close() and + synthesize a "delete_event" unconditionally. + + * app/widgets/gimpviewabledialog.c: emit "close" instead of + synthesizing "delete_event". + + * app/widgets/gimppreview.[ch]: removed "extended_clicked" signal + and added "GdkModifierType state" to "clicked"'s signature. + + * app/gui/file-open-dialog.c + * app/gui/test-commands.c + * app/widgets/gimpcontainergridview.c + * app/widgets/gimptoolbox-indicator-area.c: changed accordingly. + 2003-03-20 Sven Neumann * app/core/gimpimage-new.c (gimp_image_new_values_new): default diff --git a/app/dialogs/file-open-dialog.c b/app/dialogs/file-open-dialog.c index 3161729d62..60b2672209 100644 --- a/app/dialogs/file-open-dialog.c +++ b/app/dialogs/file-open-dialog.c @@ -76,9 +76,7 @@ static gboolean file_open_thumbnail_button_press (GtkWidget *widget, GdkEventButton *bevent, GtkWidget *open_dialog); static void file_open_thumbnail_clicked (GtkWidget *widget, - GtkWidget *open_dialog); -static void file_open_thumbnail_ext_clicked (GtkWidget *widget, - guint state, + GdkModifierType state, GtkWidget *open_dialog); static void file_open_ok_callback (GtkWidget *widget, GtkWidget *open_dialog); @@ -293,9 +291,6 @@ file_open_dialog_create (Gimp *gimp, g_signal_connect (open_options_preview, "clicked", G_CALLBACK (file_open_thumbnail_clicked), open_dialog); - g_signal_connect (open_options_preview, "extended_clicked", - G_CALLBACK (file_open_thumbnail_ext_clicked), - open_dialog); open_options_title = gtk_label_new (_("No Selection")); gtk_box_pack_start (GTK_BOX (vbox2), @@ -578,16 +573,9 @@ file_open_thumbnail_button_press (GtkWidget *widget, } static void -file_open_thumbnail_clicked (GtkWidget *widget, - GtkWidget *open_dialog) -{ - file_open_create_thumbnails (open_dialog, FALSE); -} - -static void -file_open_thumbnail_ext_clicked (GtkWidget *widget, - guint state, - GtkWidget *open_dialog) +file_open_thumbnail_clicked (GtkWidget *widget, + GdkModifierType state, + GtkWidget *open_dialog) { gboolean always_create; diff --git a/app/gui/file-open-dialog.c b/app/gui/file-open-dialog.c index 3161729d62..60b2672209 100644 --- a/app/gui/file-open-dialog.c +++ b/app/gui/file-open-dialog.c @@ -76,9 +76,7 @@ static gboolean file_open_thumbnail_button_press (GtkWidget *widget, GdkEventButton *bevent, GtkWidget *open_dialog); static void file_open_thumbnail_clicked (GtkWidget *widget, - GtkWidget *open_dialog); -static void file_open_thumbnail_ext_clicked (GtkWidget *widget, - guint state, + GdkModifierType state, GtkWidget *open_dialog); static void file_open_ok_callback (GtkWidget *widget, GtkWidget *open_dialog); @@ -293,9 +291,6 @@ file_open_dialog_create (Gimp *gimp, g_signal_connect (open_options_preview, "clicked", G_CALLBACK (file_open_thumbnail_clicked), open_dialog); - g_signal_connect (open_options_preview, "extended_clicked", - G_CALLBACK (file_open_thumbnail_ext_clicked), - open_dialog); open_options_title = gtk_label_new (_("No Selection")); gtk_box_pack_start (GTK_BOX (vbox2), @@ -578,16 +573,9 @@ file_open_thumbnail_button_press (GtkWidget *widget, } static void -file_open_thumbnail_clicked (GtkWidget *widget, - GtkWidget *open_dialog) -{ - file_open_create_thumbnails (open_dialog, FALSE); -} - -static void -file_open_thumbnail_ext_clicked (GtkWidget *widget, - guint state, - GtkWidget *open_dialog) +file_open_thumbnail_clicked (GtkWidget *widget, + GdkModifierType state, + GtkWidget *open_dialog) { gboolean always_create; diff --git a/app/gui/test-commands.c b/app/gui/test-commands.c index 0929d8835d..1c33e49b14 100644 --- a/app/gui/test-commands.c +++ b/app/gui/test-commands.c @@ -65,6 +65,7 @@ container_view_scale_callback (GtkAdjustment *adj, static void brushes_callback (GtkWidget *widget, + GdkModifierType state, GimpContainerView *view) { gimp_container_view_set_container (view, view->context->gimp->brush_factory->container); @@ -72,6 +73,7 @@ brushes_callback (GtkWidget *widget, static void patterns_callback (GtkWidget *widget, + GdkModifierType state, GimpContainerView *view) { gimp_container_view_set_container (view, view->context->gimp->pattern_factory->container); @@ -79,6 +81,7 @@ patterns_callback (GtkWidget *widget, static void gradients_callback (GtkWidget *widget, + GdkModifierType state, GimpContainerView *view) { gimp_container_view_set_container (view, view->context->gimp->gradient_factory->container); @@ -86,6 +89,7 @@ gradients_callback (GtkWidget *widget, static void palettes_callback (GtkWidget *widget, + GdkModifierType state, GimpContainerView *view) { gimp_container_view_set_container (view, view->context->gimp->palette_factory->container); @@ -93,6 +97,7 @@ palettes_callback (GtkWidget *widget, static void images_callback (GtkWidget *widget, + GdkModifierType state, GimpContainerView *view) { gimp_container_view_set_container (view, view->context->gimp->images); diff --git a/app/widgets/gimpcontainergridview.c b/app/widgets/gimpcontainergridview.c index d335b03f7f..d4dad03d11 100644 --- a/app/widgets/gimpcontainergridview.c +++ b/app/widgets/gimpcontainergridview.c @@ -59,6 +59,7 @@ static void gimp_container_grid_view_select_item (GimpContainerView *v static void gimp_container_grid_view_clear_items (GimpContainerView *view); static void gimp_container_grid_view_set_preview_size (GimpContainerView *view); static void gimp_container_grid_view_item_selected (GtkWidget *widget, + GdkModifierType state, gpointer data); static void gimp_container_grid_view_item_activated (GtkWidget *widget, gpointer data); @@ -342,8 +343,9 @@ gimp_container_grid_view_set_preview_size (GimpContainerView *view) } static void -gimp_container_grid_view_item_selected (GtkWidget *widget, - gpointer data) +gimp_container_grid_view_item_selected (GtkWidget *widget, + GdkModifierType state, + gpointer data) { gimp_container_view_item_selected (GIMP_CONTAINER_VIEW (data), GIMP_PREVIEW (widget)->viewable); diff --git a/app/widgets/gimppreview.c b/app/widgets/gimppreview.c index 8ed097bb17..6bf1f7ab81 100644 --- a/app/widgets/gimppreview.c +++ b/app/widgets/gimppreview.c @@ -51,7 +51,6 @@ enum { CLICKED, DOUBLE_CLICKED, - EXTENDED_CLICKED, CONTEXT, LAST_SIGNAL }; @@ -133,8 +132,9 @@ gimp_preview_class_init (GimpPreviewClass *klass) G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (GimpPreviewClass, clicked), NULL, NULL, - gimp_marshal_VOID__VOID, - G_TYPE_NONE, 0); + gimp_marshal_VOID__FLAGS, + G_TYPE_NONE, 1, + GDK_TYPE_MODIFIER_TYPE); preview_signals[DOUBLE_CLICKED] = g_signal_new ("double_clicked", @@ -145,16 +145,6 @@ gimp_preview_class_init (GimpPreviewClass *klass) gimp_marshal_VOID__VOID, G_TYPE_NONE, 0); - preview_signals[EXTENDED_CLICKED] = - g_signal_new ("extended_clicked", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (GimpPreviewClass, extended_clicked), - NULL, NULL, - gimp_marshal_VOID__FLAGS, - G_TYPE_NONE, 1, - GDK_TYPE_MODIFIER_TYPE); - preview_signals[CONTEXT] = g_signal_new ("context", G_TYPE_FROM_CLASS (klass), @@ -177,7 +167,6 @@ gimp_preview_class_init (GimpPreviewClass *klass) klass->clicked = NULL; klass->double_clicked = NULL; - klass->extended_clicked = NULL; klass->context = NULL; } @@ -443,17 +432,8 @@ gimp_preview_button_release_event (GtkWidget *widget, if (preview->clickable && preview->in_button) { - if (preview->press_state & - (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK)) - { - g_signal_emit (widget, - preview_signals[EXTENDED_CLICKED], 0, - preview->press_state); - } - else - { - g_signal_emit (widget, preview_signals[CLICKED], 0); - } + g_signal_emit (widget, preview_signals[CLICKED], 0, + preview->press_state); } } else diff --git a/app/widgets/gimppreview.h b/app/widgets/gimppreview.h index d95eaf966e..052850e45d 100644 --- a/app/widgets/gimppreview.h +++ b/app/widgets/gimppreview.h @@ -62,11 +62,10 @@ struct _GimpPreviewClass GtkDrawingAreaClass parent_class; /* signals */ - void (* clicked) (GimpPreview *preview); - void (* double_clicked) (GimpPreview *preview); - void (* extended_clicked) (GimpPreview *preview, - guint modifier_state); - void (* context) (GimpPreview *preview); + void (* clicked) (GimpPreview *preview, + GdkModifierType modifier_state); + void (* double_clicked) (GimpPreview *preview); + void (* context) (GimpPreview *preview); }; diff --git a/app/widgets/gimptoolbox-indicator-area.c b/app/widgets/gimptoolbox-indicator-area.c index 7cbe097ae5..ef7d171c71 100644 --- a/app/widgets/gimptoolbox-indicator-area.c +++ b/app/widgets/gimptoolbox-indicator-area.c @@ -48,8 +48,9 @@ static void -brush_preview_clicked (GtkWidget *widget, - GimpToolbox *toolbox) +brush_preview_clicked (GtkWidget *widget, + GdkModifierType state, + GimpToolbox *toolbox) { gimp_dialog_factory_dialog_raise (GIMP_DOCK (toolbox)->dialog_factory, "gimp-brush-grid", -1); @@ -68,8 +69,9 @@ brush_preview_drop_brush (GtkWidget *widget, } static void -pattern_preview_clicked (GtkWidget *widget, - GimpToolbox *toolbox) +pattern_preview_clicked (GtkWidget *widget, + GdkModifierType state, + GimpToolbox *toolbox) { gimp_dialog_factory_dialog_raise (GIMP_DOCK (toolbox)->dialog_factory, "gimp-pattern-grid", -1); @@ -88,8 +90,9 @@ pattern_preview_drop_pattern (GtkWidget *widget, } static void -gradient_preview_clicked (GtkWidget *widget, - GimpToolbox *toolbox) +gradient_preview_clicked (GtkWidget *widget, + GdkModifierType state, + GimpToolbox *toolbox) { gimp_dialog_factory_dialog_raise (GIMP_DOCK (toolbox)->dialog_factory, "gimp-gradient-list", -1); diff --git a/app/widgets/gimpview.c b/app/widgets/gimpview.c index 8ed097bb17..6bf1f7ab81 100644 --- a/app/widgets/gimpview.c +++ b/app/widgets/gimpview.c @@ -51,7 +51,6 @@ enum { CLICKED, DOUBLE_CLICKED, - EXTENDED_CLICKED, CONTEXT, LAST_SIGNAL }; @@ -133,8 +132,9 @@ gimp_preview_class_init (GimpPreviewClass *klass) G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (GimpPreviewClass, clicked), NULL, NULL, - gimp_marshal_VOID__VOID, - G_TYPE_NONE, 0); + gimp_marshal_VOID__FLAGS, + G_TYPE_NONE, 1, + GDK_TYPE_MODIFIER_TYPE); preview_signals[DOUBLE_CLICKED] = g_signal_new ("double_clicked", @@ -145,16 +145,6 @@ gimp_preview_class_init (GimpPreviewClass *klass) gimp_marshal_VOID__VOID, G_TYPE_NONE, 0); - preview_signals[EXTENDED_CLICKED] = - g_signal_new ("extended_clicked", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (GimpPreviewClass, extended_clicked), - NULL, NULL, - gimp_marshal_VOID__FLAGS, - G_TYPE_NONE, 1, - GDK_TYPE_MODIFIER_TYPE); - preview_signals[CONTEXT] = g_signal_new ("context", G_TYPE_FROM_CLASS (klass), @@ -177,7 +167,6 @@ gimp_preview_class_init (GimpPreviewClass *klass) klass->clicked = NULL; klass->double_clicked = NULL; - klass->extended_clicked = NULL; klass->context = NULL; } @@ -443,17 +432,8 @@ gimp_preview_button_release_event (GtkWidget *widget, if (preview->clickable && preview->in_button) { - if (preview->press_state & - (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK)) - { - g_signal_emit (widget, - preview_signals[EXTENDED_CLICKED], 0, - preview->press_state); - } - else - { - g_signal_emit (widget, preview_signals[CLICKED], 0); - } + g_signal_emit (widget, preview_signals[CLICKED], 0, + preview->press_state); } } else diff --git a/app/widgets/gimpview.h b/app/widgets/gimpview.h index d95eaf966e..052850e45d 100644 --- a/app/widgets/gimpview.h +++ b/app/widgets/gimpview.h @@ -62,11 +62,10 @@ struct _GimpPreviewClass GtkDrawingAreaClass parent_class; /* signals */ - void (* clicked) (GimpPreview *preview); - void (* double_clicked) (GimpPreview *preview); - void (* extended_clicked) (GimpPreview *preview, - guint modifier_state); - void (* context) (GimpPreview *preview); + void (* clicked) (GimpPreview *preview, + GdkModifierType modifier_state); + void (* double_clicked) (GimpPreview *preview); + void (* context) (GimpPreview *preview); }; diff --git a/app/widgets/gimpviewabledialog.c b/app/widgets/gimpviewabledialog.c index c6b5730ec2..c1a6aba986 100644 --- a/app/widgets/gimpviewabledialog.c +++ b/app/widgets/gimpviewabledialog.c @@ -335,22 +335,5 @@ gimp_viewable_dialog_name_changed (GimpObject *object, static void gimp_viewable_dialog_close (GimpViewableDialog *dialog) { - GtkWidget *widget = GTK_WIDGET (dialog); - - /* Synthesize delete_event to close dialog. */ - - if (widget->window) - { - GdkEventAny event; - - event.type = GDK_DELETE; - event.window = widget->window; - event.send_event = TRUE; - - g_object_ref (event.window); - - gtk_main_do_event ((GdkEvent *) &event); - - g_object_unref (event.window); - } + g_signal_emit_by_name (dialog, "close"); } diff --git a/libgimpwidgets/gimpdialog.c b/libgimpwidgets/gimpdialog.c index 44ba154e05..6fcb636f88 100644 --- a/libgimpwidgets/gimpdialog.c +++ b/libgimpwidgets/gimpdialog.c @@ -37,6 +37,7 @@ static void gimp_dialog_init (GimpDialog *dialog); static gboolean gimp_dialog_delete_event (GtkWidget *widget, GdkEventAny *event); +static void gimp_dialog_close (GtkDialog *dialog); static GtkDialogClass *parent_class = NULL; @@ -74,12 +75,16 @@ static void gimp_dialog_class_init (GimpDialogClass *klass) { GtkWidgetClass *widget_class; + GtkDialogClass *dialog_class; widget_class = GTK_WIDGET_CLASS (klass); + dialog_class = GTK_DIALOG_CLASS (klass); parent_class = g_type_class_peek_parent (klass); widget_class->delete_event = gimp_dialog_delete_event; + + dialog_class->close = gimp_dialog_close; } static void @@ -102,6 +107,27 @@ gimp_dialog_delete_event (GtkWidget *widget, return TRUE; } +static void +gimp_dialog_close (GtkDialog *dialog) +{ + /* Synthesize delete_event to close dialog. */ + + GtkWidget *widget = GTK_WIDGET (dialog); + + if (widget->window) + { + GdkEvent *event; + + event = gdk_event_new (GDK_DELETE); + + event->any.window = g_object_ref (widget->window); + event->any.send_event = TRUE; + + gtk_main_do_event (event); + gdk_event_free (event); + } +} + /** * gimp_dialog_new: * @title: The dialog's title which will be set with