[nautilus] navigation-bar: remove useless abstract class



commit ca1fa0c2b05edd8e76bb6314a7cb7c1adc4f3319
Author: Cosimo Cecchi <cosimoc gnome org>
Date:   Tue Feb 8 13:06:34 2011 -0500

    navigation-bar: remove useless abstract class
    
    Merge the useful pieces into NautilusLocationBar itself, which is the
    only implementor anyway.

 src/Makefile.am                       |    2 -
 src/nautilus-location-bar.c           |  266 +++++++++++++++++----------------
 src/nautilus-location-bar.h           |   12 +-
 src/nautilus-navigation-bar.c         |  166 --------------------
 src/nautilus-navigation-bar.h         |   75 ---------
 src/nautilus-navigation-window-pane.c |    7 +-
 src/nautilus-navigation-window.c      |    6 +-
 7 files changed, 149 insertions(+), 385 deletions(-)
---
diff --git a/src/Makefile.am b/src/Makefile.am
index aee0997..03d7ffc 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -94,8 +94,6 @@ nautilus_SOURCES = \
 	nautilus-mime-actions.h 		\
 	nautilus-navigation-action.c		\
 	nautilus-navigation-action.h		\
-	nautilus-navigation-bar.c         	\
-	nautilus-navigation-bar.h		\
 	nautilus-navigation-window-menus.c      \
 	nautilus-navigation-window.c            \
 	nautilus-navigation-window.h            \
diff --git a/src/nautilus-location-bar.c b/src/nautilus-location-bar.c
index 5a34a34..9999b12 100644
--- a/src/nautilus-location-bar.c
+++ b/src/nautilus-location-bar.c
@@ -74,6 +74,14 @@ enum {
 	NAUTILUS_DND_NTARGETS
 };
 
+enum {
+	CANCEL,
+	LOCATION_CHANGED,
+	LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL];
+
 static const GtkTargetEntry drag_types [] = {
 	{ NAUTILUS_DND_URI_LIST_TYPE,   0, NAUTILUS_DND_URI_LIST },
 	{ NAUTILUS_DND_TEXT_PLAIN_TYPE, 0, NAUTILUS_DND_TEXT_PLAIN },
@@ -84,16 +92,8 @@ static const GtkTargetEntry drop_types [] = {
 	{ NAUTILUS_DND_TEXT_PLAIN_TYPE, 0, NAUTILUS_DND_TEXT_PLAIN },
 };
 
-static char *nautilus_location_bar_get_location     (NautilusNavigationBar    *navigation_bar); 
-static void  nautilus_location_bar_set_location     (NautilusNavigationBar    *navigation_bar,
-						     const char               *location);
-static void  nautilus_location_bar_class_init       (NautilusLocationBarClass *class);
-static void  nautilus_location_bar_init             (NautilusLocationBar      *bar);
-static void  nautilus_location_bar_update_label     (NautilusLocationBar      *bar);
-
-EEL_CLASS_BOILERPLATE (NautilusLocationBar,
-		       nautilus_location_bar,
-		       NAUTILUS_TYPE_NAVIGATION_BAR)
+G_DEFINE_TYPE (NautilusLocationBar, nautilus_location_bar,
+	       GTK_TYPE_HBOX);
 
 static NautilusNavigationWindow *
 nautilus_location_bar_get_window (GtkWidget *bar)
@@ -101,6 +101,44 @@ nautilus_location_bar_get_window (GtkWidget *bar)
 	return NAUTILUS_NAVIGATION_WINDOW (gtk_widget_get_ancestor (bar, NAUTILUS_TYPE_WINDOW));
 }
 
+/**
+ * nautilus_location_bar_get_location
+ *
+ * Get the "URI" represented by the text in the location bar.
+ *
+ * @bar: A NautilusLocationBar.
+ *
+ * returns a newly allocated "string" containing the mangled
+ * (by g_file_parse_name) text that the user typed in...maybe a URI 
+ * but not guaranteed.
+ *
+ **/
+static char *
+nautilus_location_bar_get_location (NautilusLocationBar *bar) 
+{
+	char *user_location, *uri;
+	GFile *location;
+	
+	user_location = gtk_editable_get_chars (GTK_EDITABLE (bar->details->entry), 0, -1);
+	location = g_file_parse_name (user_location);
+	g_free (user_location);
+	uri = g_file_get_uri (location);
+	g_object_unref (location);
+	return uri;
+}
+
+static void
+emit_location_changed (NautilusLocationBar *bar)
+{
+	char *location;
+
+	location = nautilus_location_bar_get_location (bar);
+	g_signal_emit (bar,
+		       signals[LOCATION_CHANGED], 0,
+		       location);
+	g_free (location);
+}
+
 static void
 drag_data_received_callback (GtkWidget *widget,
 		       	     GdkDragContext *context,
@@ -121,8 +159,8 @@ drag_data_received_callback (GtkWidget *widget,
 	char *prompt;
 	char *detail;
 	GFile *location;
+	NautilusLocationBar *self = NAUTILUS_LOCATION_BAR (widget);
 
-	g_assert (NAUTILUS_IS_LOCATION_BAR (widget));
 	g_assert (data != NULL);
 	g_assert (callback_data == NULL);
 
@@ -170,9 +208,8 @@ drag_data_received_callback (GtkWidget *widget,
 		}
 	}
 
-	nautilus_navigation_bar_set_location (NAUTILUS_NAVIGATION_BAR (widget),
-					      names[0]);	
-	nautilus_navigation_bar_location_changed (NAUTILUS_NAVIGATION_BAR (widget));
+	nautilus_location_bar_set_location (self, names[0]);	
+	emit_location_changed (self);
 
 	if (new_windows_for_extras) {
 		int i;
@@ -203,14 +240,14 @@ drag_data_get_callback (GtkWidget *widget,
 		 	guint32 time,
 			gpointer callback_data)
 {
-	NautilusNavigationBar *bar;
+	NautilusLocationBar *self;
 	char *entry_text;
 
 	g_assert (selection_data != NULL);
-	bar = NAUTILUS_NAVIGATION_BAR (callback_data);
+	self = callback_data;
+
+	entry_text = nautilus_location_bar_get_location (self);
 
-	entry_text = nautilus_navigation_bar_get_location (bar);
-	
 	switch (info) {
 	case NAUTILUS_DND_URI_LIST:
 	case NAUTILUS_DND_TEXT_PLAIN:
@@ -291,17 +328,53 @@ static void
 editable_activate_callback (GtkEntry *entry,
 			    gpointer user_data)
 {
-	NautilusNavigationBar *bar;
+	NautilusLocationBar *self = user_data;
 	const char *entry_text;
 
-	bar = NAUTILUS_NAVIGATION_BAR (user_data);
-
 	entry_text = gtk_entry_get_text (entry);
 	if (entry_text != NULL && *entry_text != '\0') {
-		nautilus_navigation_bar_location_changed (bar);
+		emit_location_changed (self);
 	}
 }
 
+/**
+ * nautilus_location_bar_update_label
+ *
+ * if the text in the entry matches the uri, set the label to "location", otherwise use "goto"
+ *
+ **/
+static void
+nautilus_location_bar_update_label (NautilusLocationBar *bar)
+{
+	const char *current_text;
+	GFile *location;
+	GFile *last_location;
+	
+	if (bar->details->last_location == NULL){
+		gtk_label_set_text (GTK_LABEL (bar->details->label), GO_TO_LABEL);
+		nautilus_location_entry_set_secondary_action (NAUTILUS_LOCATION_ENTRY (bar->details->entry), 
+							      NAUTILUS_LOCATION_ENTRY_ACTION_GOTO);
+		return;
+	}
+
+	current_text = gtk_entry_get_text (GTK_ENTRY (bar->details->entry));
+	location = g_file_parse_name (current_text);
+	last_location = g_file_parse_name (bar->details->last_location);
+	
+	if (g_file_equal (last_location, location)) {
+		gtk_label_set_text (GTK_LABEL (bar->details->label), LOCATION_LABEL);
+		nautilus_location_entry_set_secondary_action (NAUTILUS_LOCATION_ENTRY (bar->details->entry), 
+							      NAUTILUS_LOCATION_ENTRY_ACTION_CLEAR);
+	} else {		 
+		gtk_label_set_text (GTK_LABEL (bar->details->label), GO_TO_LABEL);
+		nautilus_location_entry_set_secondary_action (NAUTILUS_LOCATION_ENTRY (bar->details->entry), 
+							      NAUTILUS_LOCATION_ENTRY_ACTION_GOTO);
+	}
+
+	g_object_unref (location);
+	g_object_unref (last_location);
+}
+
 static void
 editable_changed_callback (GtkEntry *entry,
 			   gpointer user_data)
@@ -309,13 +382,9 @@ editable_changed_callback (GtkEntry *entry,
 	nautilus_location_bar_update_label (NAUTILUS_LOCATION_BAR (user_data));
 }
 
-static void
-real_activate (NautilusNavigationBar *navigation_bar)
+void
+nautilus_location_bar_activate (NautilusLocationBar *bar)
 {
-	NautilusLocationBar *bar;
-
-	bar = NAUTILUS_LOCATION_BAR (navigation_bar);
-
 	/* Put the keyboard focus in the text field when switching to this mode,
 	 * and select all text for easy overtyping 
 	 */
@@ -324,12 +393,12 @@ real_activate (NautilusNavigationBar *navigation_bar)
 }
 
 static void
-real_cancel (NautilusNavigationBar *navigation_bar)
+nautilus_location_bar_cancel (NautilusLocationBar *bar)
 {
 	char *last_location;
 
-	last_location = NAUTILUS_LOCATION_BAR (navigation_bar)->details->last_location;
-	nautilus_navigation_bar_set_location (navigation_bar, last_location);
+	last_location = bar->details->last_location;
+	nautilus_location_bar_set_location (bar, last_location);
 }
 
 static void
@@ -339,18 +408,6 @@ finalize (GObject *object)
 
 	bar = NAUTILUS_LOCATION_BAR (object);
 
-	g_free (bar->details);
-
-	EEL_CALL_PARENT (G_OBJECT_CLASS, finalize, (object));
-}
-
-static void
-destroy (GtkWidget *object)
-{
-	NautilusLocationBar *bar;
-
-	bar = NAUTILUS_LOCATION_BAR (object);
-	
 	/* cancel the pending idle call, if any */
 	if (bar->details->idle_id != 0) {
 		g_source_remove (bar->details->idle_id);
@@ -359,29 +416,43 @@ destroy (GtkWidget *object)
 	
 	g_free (bar->details->last_location);
 	bar->details->last_location = NULL;
-	
-	EEL_CALL_PARENT (GTK_WIDGET_CLASS, destroy, (object));
+
+	G_OBJECT_CLASS (nautilus_location_bar_parent_class)->finalize (object);
 }
 
 static void
-nautilus_location_bar_class_init (NautilusLocationBarClass *class)
+nautilus_location_bar_class_init (NautilusLocationBarClass *klass)
 {
 	GObjectClass *gobject_class;
-	GtkWidgetClass *widget_class;
-	NautilusNavigationBarClass *navigation_bar_class;
+	GtkBindingSet *binding_set;
 
-	gobject_class = G_OBJECT_CLASS (class);
+	gobject_class = G_OBJECT_CLASS (klass);
 	gobject_class->finalize = finalize;
 
-	widget_class = GTK_WIDGET_CLASS (class);
-	widget_class->destroy = destroy;
-	
-	navigation_bar_class = NAUTILUS_NAVIGATION_BAR_CLASS (class);
-
-	navigation_bar_class->activate = real_activate;
-	navigation_bar_class->cancel = real_cancel;
-	navigation_bar_class->get_location = nautilus_location_bar_get_location;
-	navigation_bar_class->set_location = nautilus_location_bar_set_location;
+	klass->cancel = nautilus_location_bar_cancel;
+
+	signals[CANCEL] = g_signal_new
+		("cancel",
+		 G_TYPE_FROM_CLASS (klass),
+		 G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+		 G_STRUCT_OFFSET (NautilusLocationBarClass,
+				  cancel),
+		 NULL, NULL,
+		 g_cclosure_marshal_VOID__VOID,
+		 G_TYPE_NONE, 0);
+
+	signals[LOCATION_CHANGED] = g_signal_new
+		("location_changed",
+		 G_TYPE_FROM_CLASS (klass),
+		 G_SIGNAL_RUN_LAST, 0,
+		 NULL, NULL,
+		 g_cclosure_marshal_VOID__STRING,
+		 G_TYPE_NONE, 1, G_TYPE_STRING);
+
+	binding_set = gtk_binding_set_by_class (klass);
+	gtk_binding_entry_add_signal (binding_set, GDK_KEY_Escape, 0, "cancel", 0);
+
+	g_type_class_add_private (klass, sizeof (NautilusLocationBarDetails));
 }
 
 static void
@@ -392,7 +463,8 @@ nautilus_location_bar_init (NautilusLocationBar *bar)
 	GtkWidget *event_box;
 	GtkWidget *hbox;
 
-	bar->details = g_new0 (NautilusLocationBarDetails, 1);
+	bar->details = G_TYPE_INSTANCE_GET_PRIVATE (bar, NAUTILUS_TYPE_LOCATION_BAR,
+						    NautilusLocationBarDetails);
 
 	hbox = gtk_hbox_new (0, FALSE);
 
@@ -467,17 +539,14 @@ nautilus_location_bar_new (NautilusNavigationWindowPane *pane)
 	return bar;
 }
 
-static void
-nautilus_location_bar_set_location (NautilusNavigationBar *navigation_bar,
+void
+nautilus_location_bar_set_location (NautilusLocationBar *bar,
 				    const char *location)
 {
-	NautilusLocationBar *bar;
 	char *formatted_location;
 	GFile *file;
 
 	g_assert (location != NULL);
-	
-	bar = NAUTILUS_LOCATION_BAR (navigation_bar);
 
 	/* Note: This is called in reaction to external changes, and 
 	 * thus should not emit the LOCATION_CHANGED signal. */
@@ -504,76 +573,9 @@ nautilus_location_bar_set_location (NautilusNavigationBar *navigation_bar,
 	nautilus_location_bar_update_label (bar);
 }
 
-/**
- * nautilus_location_bar_get_location
- *
- * Get the "URI" represented by the text in the location bar.
- *
- * @bar: A NautilusLocationBar.
- *
- * returns a newly allocated "string" containing the mangled
- * (by g_file_parse_name) text that the user typed in...maybe a URI 
- * but not guaranteed.
- *
- **/
-static char *
-nautilus_location_bar_get_location (NautilusNavigationBar *navigation_bar) 
-{
-	NautilusLocationBar *bar;
-	char *user_location, *uri;
-	GFile *location;
-
-	bar = NAUTILUS_LOCATION_BAR (navigation_bar);
-	
-	user_location = gtk_editable_get_chars (GTK_EDITABLE (bar->details->entry), 0, -1);
-	location = g_file_parse_name (user_location);
-	g_free (user_location);
-	uri = g_file_get_uri (location);
-	g_object_unref (location);
-	return uri;
-}
-	       
-/**
- * nautilus_location_bar_update_label
- *
- * if the text in the entry matches the uri, set the label to "location", otherwise use "goto"
- *
- **/
-static void
-nautilus_location_bar_update_label (NautilusLocationBar *bar)
-{
-	const char *current_text;
-	GFile *location;
-	GFile *last_location;
-	
-	if (bar->details->last_location == NULL){
-		gtk_label_set_text (GTK_LABEL (bar->details->label), GO_TO_LABEL);
-		nautilus_location_entry_set_secondary_action (NAUTILUS_LOCATION_ENTRY (bar->details->entry), 
-							      NAUTILUS_LOCATION_ENTRY_ACTION_GOTO);
-		return;
-	}
-
-	current_text = gtk_entry_get_text (GTK_ENTRY (bar->details->entry));
-	location = g_file_parse_name (current_text);
-	last_location = g_file_parse_name (bar->details->last_location);
-	
-	if (g_file_equal (last_location, location)) {
-		gtk_label_set_text (GTK_LABEL (bar->details->label), LOCATION_LABEL);
-		nautilus_location_entry_set_secondary_action (NAUTILUS_LOCATION_ENTRY (bar->details->entry), 
-							      NAUTILUS_LOCATION_ENTRY_ACTION_CLEAR);
-	} else {		 
-		gtk_label_set_text (GTK_LABEL (bar->details->label), GO_TO_LABEL);
-		nautilus_location_entry_set_secondary_action (NAUTILUS_LOCATION_ENTRY (bar->details->entry), 
-							      NAUTILUS_LOCATION_ENTRY_ACTION_GOTO);
-	}
-
-	g_object_unref (location);
-	g_object_unref (last_location);
-}
-
 /* change background color based on activity state */
 void
-nautilus_location_bar_set_active(NautilusLocationBar *location_bar, gboolean is_active)
+nautilus_location_bar_set_active (NautilusLocationBar *location_bar, gboolean is_active)
 {
 	if (is_active) {
 		/* reset style to default */
diff --git a/src/nautilus-location-bar.h b/src/nautilus-location-bar.h
index aa4052a..0b76138 100644
--- a/src/nautilus-location-bar.h
+++ b/src/nautilus-location-bar.h
@@ -30,7 +30,6 @@
 #ifndef NAUTILUS_LOCATION_BAR_H
 #define NAUTILUS_LOCATION_BAR_H
 
-#include "nautilus-navigation-bar.h"
 #include "nautilus-navigation-window.h"
 #include "nautilus-navigation-window-pane.h"
 #include <libnautilus-private/nautilus-entry.h>
@@ -51,12 +50,15 @@
 typedef struct NautilusLocationBarDetails NautilusLocationBarDetails;
 
 typedef struct NautilusLocationBar {
-	NautilusNavigationBar parent;
+	GtkHBox parent;
 	NautilusLocationBarDetails *details;
 } NautilusLocationBar;
 
 typedef struct {
-	NautilusNavigationBarClass parent_class;
+	GtkHBoxClass parent_class;
+
+	/* for GtkBindingSet */
+	void         (* cancel)           (NautilusLocationBar *bar);
 } NautilusLocationBarClass;
 
 GType      nautilus_location_bar_get_type     	(void);
@@ -65,4 +67,8 @@ void       nautilus_location_bar_set_active     (NautilusLocationBar *location_b
 						 gboolean is_active);
 NautilusEntry * nautilus_location_bar_get_entry (NautilusLocationBar *location_bar);
 
+void	nautilus_location_bar_activate	 (NautilusLocationBar *bar);
+void    nautilus_location_bar_set_location     (NautilusLocationBar *bar,
+						const char          *location);
+
 #endif /* NAUTILUS_LOCATION_BAR_H */
diff --git a/src/nautilus-navigation-window-pane.c b/src/nautilus-navigation-window-pane.c
index 4c156ed..19d35f8 100644
--- a/src/nautilus-navigation-window-pane.c
+++ b/src/nautilus-navigation-window-pane.c
@@ -25,7 +25,6 @@
 #include "nautilus-navigation-window-pane.h"
 #include "nautilus-window-private.h"
 #include "nautilus-window-manage-views.h"
-#include "nautilus-navigation-bar.h"
 #include "nautilus-pathbar.h"
 #include "nautilus-location-bar.h"
 #include "nautilus-notebook.h"
@@ -543,7 +542,7 @@ real_sync_location_widgets (NautilusWindowPane *pane)
 
 		/* this may be NULL if we just created the slot */
 		uri = nautilus_window_slot_get_location_uri (slot);
-		nautilus_navigation_bar_set_location (NAUTILUS_NAVIGATION_BAR (navigation_pane->navigation_bar), uri);
+		nautilus_location_bar_set_location (NAUTILUS_LOCATION_BAR (navigation_pane->navigation_bar), uri);
 		g_free (uri);
 		nautilus_path_bar_set_path (NAUTILUS_PATH_BAR (navigation_pane->path_bar), slot->location);
 	}
@@ -728,8 +727,8 @@ nautilus_navigation_window_pane_show_navigation_bar_temporarily (NautilusNavigat
 		nautilus_navigation_window_pane_set_bar_mode (pane, NAUTILUS_BAR_NAVIGATION);
 		pane->temporary_navigation_bar = TRUE;
 	}
-	nautilus_navigation_bar_activate
-		(NAUTILUS_NAVIGATION_BAR (pane->navigation_bar));
+	nautilus_location_bar_activate
+		(NAUTILUS_LOCATION_BAR (pane->navigation_bar));
 }
 
 gboolean
diff --git a/src/nautilus-navigation-window.c b/src/nautilus-navigation-window.c
index f3119d2..a259a85 100644
--- a/src/nautilus-navigation-window.c
+++ b/src/nautilus-navigation-window.c
@@ -187,7 +187,7 @@ nautilus_navigation_window_is_in_temporary_navigation_bar (GtkWidget *widget,
 
 	for (walk = NAUTILUS_WINDOW(window)->details->panes; walk; walk = walk->next) {
 		NautilusNavigationWindowPane *pane = walk->data;
-		if(gtk_widget_get_ancestor (widget, NAUTILUS_TYPE_NAVIGATION_BAR) != NULL &&
+		if(gtk_widget_get_ancestor (widget, NAUTILUS_TYPE_LOCATION_BAR) != NULL &&
 			       pane->temporary_navigation_bar)
 			is_in_any = TRUE;
 	}
@@ -453,8 +453,8 @@ real_prompt_for_location (NautilusWindow *window, const char *initial)
 	nautilus_navigation_window_pane_show_navigation_bar_temporarily (pane);
 	
 	if (initial) {
-		nautilus_navigation_bar_set_location (NAUTILUS_NAVIGATION_BAR (pane->navigation_bar),
-						      initial);
+		nautilus_location_bar_set_location (NAUTILUS_LOCATION_BAR (pane->navigation_bar),
+						    initial);
 	}
 }
 



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