[anjuta] document-manager: hide search box when pressing escape inside the document widget.



commit 1365658883eb43dbc0866996fe7cb3d877c00971
Author: Carl-Anton Ingmarsson <ca ingmarsson gmail com>
Date:   Fri Nov 16 14:02:43 2012 +0100

    document-manager: hide search box when pressing escape inside the document widget.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=688460

 plugins/document-manager/anjuta-docman.c |   26 ++++++++++++++++++++++++++
 plugins/document-manager/search-box.c    |   22 ++++++++++++++--------
 plugins/document-manager/search-box.h    |    1 +
 3 files changed, 41 insertions(+), 8 deletions(-)
---
diff --git a/plugins/document-manager/anjuta-docman.c b/plugins/document-manager/anjuta-docman.c
index 6ac365e..bd0d07a 100644
--- a/plugins/document-manager/anjuta-docman.c
+++ b/plugins/document-manager/anjuta-docman.c
@@ -36,6 +36,7 @@
 #include "file_history.h"
 #include "plugin.h"
 #include "action-callbacks.h"
+#include "search-box.h"
 
 #define MENU_PLACEHOLDER "/MenuMain/PlaceHolderDocumentsMenus/Documents/PlaceholderDocuments"
 
@@ -87,6 +88,7 @@ struct _AnjutaDocmanPage {
 	GtkWidget *label;
 	GtkWidget *menu_label;	/* notebook page-switch menu-label */
 	gboolean is_current;
+	guint doc_widget_key_press_id;
 };
 
 static guint docman_signals[LAST_SIGNAL] = { 0 };
@@ -388,6 +390,23 @@ anjuta_docman_update_documents_menu (AnjutaDocman* docman)
 	priv->documents_merge_id = id;
 }
 
+static gboolean
+on_doc_widget_key_press_event (GtkWidget *widget,
+                               GdkEventKey *event,
+                               AnjutaDocman *docman)
+{
+	AnjutaDocmanPage *page;
+
+	page = anjuta_docman_get_current_page (docman);
+	if (widget == page->widget && event->keyval == GDK_KEY_Escape)
+	{
+		search_box_hide (SEARCH_BOX (docman->priv->plugin->search_box));
+		return TRUE;
+	}
+
+	return FALSE;
+}
+
 static void
 on_notebook_page_close_button_click (GtkButton* button,
 									AnjutaDocman* docman)
@@ -703,6 +722,10 @@ anjuta_docman_page_init (AnjutaDocman *docman, IAnjutaDocument *doc,
 	                  G_CALLBACK (on_notebook_tab_double_click),
 	                  docman);
 
+	page->doc_widget_key_press_id =
+		g_signal_connect (G_OBJECT (doc), "key-press-event",
+		                  G_CALLBACK (on_doc_widget_key_press_event), docman);
+
 	page->widget = GTK_WIDGET (doc);	/* this is the notebook-page child widget */
 	page->doc = doc;
 	page->box = box;
@@ -1301,6 +1324,9 @@ anjuta_docman_remove_document (AnjutaDocman *docman, IAnjutaDocument *doc)
 
 			g_signal_emit (G_OBJECT (docman), docman_signals[DOC_CHANGED], 0, NULL);
 		}
+
+		g_signal_handler_disconnect (doc, page->doc_widget_key_press_id);
+
 		g_free (page);
 	}
 	gtk_widget_destroy(GTK_WIDGET(doc));
diff --git a/plugins/document-manager/search-box.c b/plugins/document-manager/search-box.c
index c2ada5c..e36040d 100644
--- a/plugins/document-manager/search-box.c
+++ b/plugins/document-manager/search-box.c
@@ -89,7 +89,7 @@ G_DEFINE_TYPE (SearchBox, search_box, GTK_TYPE_HBOX);
 static void
 on_search_box_hide (GtkWidget* button, SearchBox* search_box)
 {
-	gtk_widget_hide (GTK_WIDGET (search_box));
+	search_box_hide (search_box);
 }
 
 static void
@@ -186,13 +186,7 @@ on_goto_key_pressed (GtkWidget* entry, GdkEventKey* event, SearchBox* search_box
 		}
 		case GDK_KEY_Escape:
 		{
-			gtk_widget_hide (GTK_WIDGET (search_box));
-			search_box_set_entry_color (search_box, TRUE);
-			if (search_box->priv->current_editor)
-			{
-				ianjuta_document_grab_focus (IANJUTA_DOCUMENT (search_box->priv->current_editor), 
-											 NULL);
-			}
+			search_box_hide (search_box);
 		}
 		default:
 		{
@@ -1151,6 +1145,18 @@ search_box_grab_line_focus (SearchBox* search_box)
 }
 
 void
+search_box_hide (SearchBox* search_box)
+{
+	gtk_widget_hide (GTK_WIDGET (search_box));
+	search_box_set_entry_color (search_box, TRUE);
+	if (search_box->priv->current_editor)
+	{
+		ianjuta_document_grab_focus (IANJUTA_DOCUMENT (search_box->priv->current_editor),
+		                             NULL);
+	}
+}
+
+void
 search_box_set_replace (SearchBox* search_box, gboolean replace)
 {
 	if (replace) 
diff --git a/plugins/document-manager/search-box.h b/plugins/document-manager/search-box.h
index 04578fe..10e84bb 100644
--- a/plugins/document-manager/search-box.h
+++ b/plugins/document-manager/search-box.h
@@ -58,6 +58,7 @@ GtkWidget* search_box_new (AnjutaDocman* docman);
 
 void search_box_fill_search_focus (SearchBox* search_box, gboolean on_replace);
 void search_box_grab_line_focus (SearchBox* search_box);
+void search_box_hide (SearchBox* search_box);
 void search_box_set_replace (SearchBox* object, gboolean replace);
 gboolean search_box_incremental_search (SearchBox* search_box, gboolean search_forward,
                                         gboolean wrap);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]