@@ -35,6 +35,8 @@ struct _EggFindBarPrivate
3535 GtkToolItem * status_separator ;
3636 GtkToolItem * status_item ;
3737 GtkToolItem * case_button ;
38+ GtkToolItem * close_separator ;
39+ GtkToolItem * close_button ;
3840
3941 GtkWidget * find_entry ;
4042 GtkWidget * status_label ;
@@ -204,6 +206,12 @@ egg_find_bar_emit_previous (EggFindBar *find_bar)
204206 g_signal_emit (find_bar , find_bar_signals [PREVIOUS ], 0 );
205207}
206208
209+ static void
210+ egg_find_bar_emit_close (EggFindBar * find_bar )
211+ {
212+ g_signal_emit (find_bar , find_bar_signals [CLOSE ], 0 );
213+ }
214+
207215static void
208216next_clicked_callback (GtkButton * button ,
209217 void * data )
@@ -242,6 +250,15 @@ entry_activate_callback (GtkEntry *entry,
242250 egg_find_bar_emit_next (find_bar );
243251}
244252
253+ static void
254+ close_clicked_callback (GtkButton * widget ,
255+ void * data )
256+ {
257+ EggFindBar * find_bar = EGG_FIND_BAR (data );
258+
259+ egg_find_bar_emit_close (find_bar );
260+ }
261+
245262static void
246263entry_changed_callback (GtkEntry * entry ,
247264 void * data )
@@ -281,6 +298,7 @@ egg_find_bar_init (EggFindBar *find_bar)
281298 GtkWidget * box ;
282299 GtkToolItem * item ;
283300 GtkWidget * arrow ;
301+ GtkWidget * cross ;
284302
285303 /* Data */
286304 priv = egg_find_bar_get_instance_private (find_bar );
@@ -348,6 +366,22 @@ egg_find_bar_init (EggFindBar *find_bar)
348366 gtk_widget_set_halign (priv -> status_label , GTK_ALIGN_START );
349367 gtk_widget_set_valign (priv -> status_label , GTK_ALIGN_CENTER );
350368
369+ /* Close Separator */
370+ priv -> close_separator = gtk_separator_tool_item_new ();
371+ /* The effect of setting draw to FALSE and expand to TRUE will
372+ * push items added to the toolbar after this separator to the
373+ * end of the toolbar. */
374+ gtk_separator_tool_item_set_draw (GTK_SEPARATOR_TOOL_ITEM (priv -> close_separator ),
375+ FALSE);
376+ gtk_tool_item_set_expand (priv -> close_separator , TRUE);
377+
378+ /* Close button */
379+ cross = gtk_image_new_from_icon_name ("window-close-symbolic" ,
380+ GTK_ICON_SIZE_BUTTON );
381+ priv -> close_button = gtk_tool_button_new (cross , NULL );
382+ gtk_widget_set_tooltip_text (GTK_WIDGET (priv -> close_button ),
383+ _ ("Close find bar" ));
384+
351385
352386 g_signal_connect (priv -> find_entry , "changed" ,
353387 G_CALLBACK (entry_changed_callback ),
@@ -364,6 +398,9 @@ egg_find_bar_init (EggFindBar *find_bar)
364398 g_signal_connect (priv -> case_button , "toggled" ,
365399 G_CALLBACK (case_sensitive_toggled_callback ),
366400 find_bar );
401+ g_signal_connect (priv -> close_button , "clicked" ,
402+ G_CALLBACK (close_clicked_callback ),
403+ find_bar );
367404
368405 gtk_box_pack_start (GTK_BOX (box ), label , FALSE, FALSE, 0 );
369406 gtk_box_pack_start (GTK_BOX (box ), priv -> find_entry , TRUE, TRUE, 0 );
@@ -375,13 +412,17 @@ egg_find_bar_init (EggFindBar *find_bar)
375412 gtk_toolbar_insert (GTK_TOOLBAR (find_bar ), priv -> status_separator , -1 );
376413 gtk_container_add (GTK_CONTAINER (priv -> status_item ), priv -> status_label );
377414 gtk_toolbar_insert (GTK_TOOLBAR (find_bar ), priv -> status_item , -1 );
415+ gtk_toolbar_insert (GTK_TOOLBAR (find_bar ), priv -> close_separator , -1 );
416+ gtk_toolbar_insert (GTK_TOOLBAR (find_bar ), priv -> close_button , -1 );
378417
379418 /* don't show status separator/label until they are set */
380419
381420 gtk_widget_show_all (GTK_WIDGET (item ));
382421 gtk_widget_show_all (GTK_WIDGET (priv -> next_button ));
383422 gtk_widget_show_all (GTK_WIDGET (priv -> previous_button ));
384423 gtk_widget_show_all (GTK_WIDGET (priv -> case_button ));
424+ gtk_widget_show_all (GTK_WIDGET (priv -> close_separator ));
425+ gtk_widget_show_all (GTK_WIDGET (priv -> close_button ));
385426 gtk_widget_show (priv -> status_label );
386427}
387428
0 commit comments