diff --git a/app/display/gimptoolgui.c b/app/display/gimptoolgui.c index 52d42ccbcb..28e1aff0e9 100644 --- a/app/display/gimptoolgui.c +++ b/app/display/gimptoolgui.c @@ -65,6 +65,7 @@ struct _GimpToolGuiPrivate gchar *description; GList *response_entries; gint default_response; + gboolean focus_on_map; gboolean overlay; @@ -133,6 +134,7 @@ gimp_tool_gui_init (GimpToolGui *gui) GimpToolGuiPrivate *private = GET_PRIVATE (gui); private->default_response = -1; + private->focus_on_map = TRUE; private->vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); g_object_ref_sink (private->vbox); @@ -433,6 +435,36 @@ gimp_tool_gui_get_overlay (GimpToolGui *gui) return GET_PRIVATE (gui)->overlay; } +void +gimp_tool_gui_set_focus_on_map (GimpToolGui *gui, + gboolean focus_on_map) +{ + GimpToolGuiPrivate *private; + + g_return_if_fail (GIMP_IS_TOOL_GUI (gui)); + + private = GET_PRIVATE (gui); + + if (private->focus_on_map == focus_on_map) + return; + + private->focus_on_map = focus_on_map ? TRUE : FALSE; + + if (! private->overlay) + { + gtk_window_set_focus_on_map (GTK_WINDOW (private->dialog), + private->focus_on_map); + } +} + +gboolean +gimp_tool_gui_get_focus_on_map (GimpToolGui *gui) +{ + g_return_val_if_fail (GIMP_IS_TOOL_GUI (gui), FALSE); + + return GET_PRIVATE (gui)->focus_on_map; +} + void gimp_tool_gui_set_default_response (GimpToolGui *gui, gint response_id) @@ -589,6 +621,9 @@ gimp_tool_gui_create_dialog (GimpToolGui *gui) gtk_dialog_set_default_response (GTK_DIALOG (private->dialog), private->default_response); + gtk_window_set_focus_on_map (GTK_WINDOW (private->dialog), + private->focus_on_map); + gtk_container_set_border_width (GTK_CONTAINER (private->vbox), 6); gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (private->dialog))), private->vbox, TRUE, TRUE, 0); diff --git a/app/display/gimptoolgui.h b/app/display/gimptoolgui.h index 372eb408b3..b98eae22a5 100644 --- a/app/display/gimptoolgui.h +++ b/app/display/gimptoolgui.h @@ -75,6 +75,10 @@ void gimp_tool_gui_set_overlay (GimpToolGui *gui, gboolean overlay); gboolean gimp_tool_gui_get_overlay (GimpToolGui *gui); +void gimp_tool_gui_set_focus_on_map (GimpToolGui *gui, + gboolean focus_on_map); +gboolean gimp_tool_gui_get_focus_on_map (GimpToolGui *gui); + void gimp_tool_gui_set_default_response (GimpToolGui *gui, gint response_id); void gimp_tool_gui_set_response_sensitive (GimpToolGui *gui, diff --git a/app/tools/gimpcolorpickertool.c b/app/tools/gimpcolorpickertool.c index fe688519fb..debec15347 100644 --- a/app/tools/gimpcolorpickertool.c +++ b/app/tools/gimpcolorpickertool.c @@ -301,8 +301,6 @@ static void gimp_color_picker_tool_info_create (GimpColorPickerTool *picker_tool) { GimpTool *tool = GIMP_TOOL (picker_tool); - GtkWidget *dialog; - GtkWidget *vbox; GtkWidget *hbox; GtkWidget *frame; GimpRGB color; @@ -318,12 +316,7 @@ gimp_color_picker_tool_info_create (GimpColorPickerTool *picker_tool) NULL); - dialog = gimp_tool_gui_get_dialog (picker_tool->gui); - vbox = gimp_tool_gui_get_vbox (picker_tool->gui); - - if (GTK_IS_DIALOG (dialog)) - gtk_window_set_focus_on_map (GTK_WINDOW (dialog), FALSE); - + gimp_tool_gui_set_focus_on_map (picker_tool->gui, FALSE); gimp_tool_gui_set_viewable (picker_tool->gui, GIMP_VIEWABLE (tool->drawable)); @@ -332,7 +325,8 @@ gimp_color_picker_tool_info_create (GimpColorPickerTool *picker_tool) picker_tool); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (gimp_tool_gui_get_vbox (picker_tool->gui)), + hbox, FALSE, FALSE, 0); gtk_widget_show (hbox); picker_tool->color_frame1 = gimp_color_frame_new (); diff --git a/app/tools/gimpmeasuretool.c b/app/tools/gimpmeasuretool.c index bd24c360fa..6901352763 100644 --- a/app/tools/gimpmeasuretool.c +++ b/app/tools/gimpmeasuretool.c @@ -1039,8 +1039,6 @@ gimp_measure_tool_dialog_new (GimpMeasureTool *measure) { GimpTool *tool = GIMP_TOOL (measure); GimpToolGui *gui; - GtkWidget *dialog; - GtkWidget *vbox; GtkWidget *table; GtkWidget *label; @@ -1052,11 +1050,7 @@ gimp_measure_tool_dialog_new (GimpMeasureTool *measure) NULL); - dialog = gimp_tool_gui_get_dialog (gui); - vbox = gimp_tool_gui_get_vbox (gui); - - if (GTK_IS_DIALOG (dialog)) - gtk_window_set_focus_on_map (GTK_WINDOW (dialog), FALSE); + gimp_tool_gui_set_focus_on_map (gui, FALSE); g_signal_connect (gui, "response", G_CALLBACK (g_object_unref), @@ -1065,7 +1059,8 @@ gimp_measure_tool_dialog_new (GimpMeasureTool *measure) table = gtk_table_new (4, 5, TRUE); gtk_table_set_col_spacings (GTK_TABLE (table), 6); gtk_table_set_row_spacings (GTK_TABLE (table), 6); - gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (gimp_tool_gui_get_vbox (gui)), table, + TRUE, TRUE, 0); gtk_widget_show (table);