summaryrefslogtreecommitdiff
path: root/src/ephy-location-controller.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ephy-location-controller.c')
-rw-r--r--src/ephy-location-controller.c1205
1 files changed, 591 insertions, 614 deletions
diff --git a/src/ephy-location-controller.c b/src/ephy-location-controller.c
index 44b9fbc11..cef9802d1 100644
--- a/src/ephy-location-controller.c
+++ b/src/ephy-location-controller.c
@@ -42,783 +42,760 @@
* #EphyLocationController handles navigation together with #EphyLocationEntry
*/
-struct _EphyLocationController
-{
- GObject parent_instance;
-
- EphyWindow *window;
- EphyLocationEntry *location_entry;
- EphyTitleBox *title_box;
- GList *actions;
- char *address;
- EphyNode *smart_bmks;
- EphyBookmarks *bookmarks;
- GdkPixbuf *icon;
- guint editable : 1;
- guint show_icon : 1;
- gboolean sync_address_is_blocked;
+struct _EphyLocationController {
+ GObject parent_instance;
+
+ EphyWindow *window;
+ EphyLocationEntry *location_entry;
+ EphyTitleBox *title_box;
+ GList *actions;
+ char *address;
+ EphyNode *smart_bmks;
+ EphyBookmarks *bookmarks;
+ GdkPixbuf *icon;
+ guint editable : 1;
+ guint show_icon : 1;
+ gboolean sync_address_is_blocked;
};
-static void ephy_location_controller_finalize (GObject *object);
-static void user_changed_cb (GtkWidget *widget,
- EphyLocationController *controller);
-static void sync_address (EphyLocationController *controller,
- GParamSpec *pspec,
- GtkWidget *widget);
-
-enum
-{
- PROP_0,
- PROP_ADDRESS,
- PROP_EDITABLE,
- PROP_ICON,
- PROP_SHOW_ICON,
- PROP_WINDOW,
- PROP_LOCATION_ENTRY,
- PROP_TITLE_BOX,
- LAST_PROP
+static void ephy_location_controller_finalize (GObject *object);
+static void user_changed_cb (GtkWidget *widget,
+ EphyLocationController *controller);
+static void sync_address (EphyLocationController *controller,
+ GParamSpec *pspec,
+ GtkWidget *widget);
+
+enum {
+ PROP_0,
+ PROP_ADDRESS,
+ PROP_EDITABLE,
+ PROP_ICON,
+ PROP_SHOW_ICON,
+ PROP_WINDOW,
+ PROP_LOCATION_ENTRY,
+ PROP_TITLE_BOX,
+ LAST_PROP
};
static GParamSpec *obj_properties[LAST_PROP];
-enum
-{
- LOCK_CLICKED,
- LAST_SIGNAL
+enum {
+ LOCK_CLICKED,
+ LAST_SIGNAL
};
static guint signals[LAST_SIGNAL];
G_DEFINE_TYPE_WITH_CODE (EphyLocationController, ephy_location_controller, G_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (EPHY_TYPE_LINK,
- NULL))
+ G_IMPLEMENT_INTERFACE (EPHY_TYPE_LINK,
+ NULL))
static gboolean
match_func (GtkEntryCompletion *completion,
- const char *key,
- GtkTreeIter *iter,
- gpointer data)
+ const char *key,
+ GtkTreeIter *iter,
+ gpointer data)
{
- /* We want every row in the model to show up. */
- return TRUE;
+ /* We want every row in the model to show up. */
+ return TRUE;
}
static void
-action_activated_cb (GtkEntryCompletion *completion,
- gint index,
- EphyLocationController *controller)
-{
- GtkWidget *entry;
- char *content;
-
- entry = gtk_entry_completion_get_entry (completion);
- content = gtk_editable_get_chars (GTK_EDITABLE (entry), 0, -1);
- if (content)
- {
- EphyNode *node;
- const char *smart_url;
- char *url;
-
- node = (EphyNode *)g_list_nth_data (controller->actions, index);
- smart_url = ephy_node_get_property_string
- (node, EPHY_NODE_BMK_PROP_LOCATION);
- g_return_if_fail (smart_url != NULL);
-
- url = ephy_bookmarks_resolve_address
- (controller->bookmarks, smart_url, content);
- g_free (content);
- if (url == NULL) return;
-
- ephy_link_open (EPHY_LINK (controller), url, NULL,
- ephy_link_flags_from_current_event () | EPHY_LINK_TYPED);
-
- g_free (url);
- }
+action_activated_cb (GtkEntryCompletion *completion,
+ gint index,
+ EphyLocationController *controller)
+{
+ GtkWidget *entry;
+ char *content;
+
+ entry = gtk_entry_completion_get_entry (completion);
+ content = gtk_editable_get_chars (GTK_EDITABLE (entry), 0, -1);
+ if (content) {
+ EphyNode *node;
+ const char *smart_url;
+ char *url;
+
+ node = (EphyNode *)g_list_nth_data (controller->actions, index);
+ smart_url = ephy_node_get_property_string
+ (node, EPHY_NODE_BMK_PROP_LOCATION);
+ g_return_if_fail (smart_url != NULL);
+
+ url = ephy_bookmarks_resolve_address
+ (controller->bookmarks, smart_url, content);
+ g_free (content);
+ if (url == NULL) return;
+
+ ephy_link_open (EPHY_LINK (controller), url, NULL,
+ ephy_link_flags_from_current_event () | EPHY_LINK_TYPED);
+
+ g_free (url);
+ }
}
static void
entry_drag_data_received_cb (GtkWidget *widget,
- GdkDragContext *context,
- gint x, gint y,
- GtkSelectionData *selection_data,
- guint info,
- guint time,
- EphyLocationController *controller)
-{
- GtkEntry *entry;
- GdkAtom url_type;
- GdkAtom text_type;
- const guchar *sel_data;
-
- sel_data = gtk_selection_data_get_data (selection_data);
-
- url_type = gdk_atom_intern (EPHY_DND_URL_TYPE, FALSE);
- text_type = gdk_atom_intern (EPHY_DND_TEXT_TYPE, FALSE);
-
- if (gtk_selection_data_get_length (selection_data) <= 0 || sel_data == NULL)
- return;
-
- entry = GTK_ENTRY (widget);
-
- if (gtk_selection_data_get_target (selection_data) == url_type)
- {
- char **uris;
-
- uris = g_uri_list_extract_uris ((char *)sel_data);
- if (uris != NULL && uris[0] != NULL && *uris[0] != '\0')
- {
- gtk_entry_set_text (entry, (char *)uris[0]);
- ephy_link_open (EPHY_LINK (controller),
- uris[0],
- NULL,
- ephy_link_flags_from_current_event ());
- }
- g_strfreev (uris);
- } else if (gtk_selection_data_get_target (selection_data) == text_type) {
- char *address;
-
- gtk_entry_set_text (entry, (const gchar *)sel_data);
- address = ephy_embed_utils_normalize_or_autosearch_address ((const gchar *)sel_data);
- ephy_link_open (EPHY_LINK (controller),
- address,
- NULL,
- ephy_link_flags_from_current_event ());
- g_free (address);
- }
+ GdkDragContext *context,
+ gint x, gint y,
+ GtkSelectionData *selection_data,
+ guint info,
+ guint time,
+ EphyLocationController *controller)
+{
+ GtkEntry *entry;
+ GdkAtom url_type;
+ GdkAtom text_type;
+ const guchar *sel_data;
+
+ sel_data = gtk_selection_data_get_data (selection_data);
+
+ url_type = gdk_atom_intern (EPHY_DND_URL_TYPE, FALSE);
+ text_type = gdk_atom_intern (EPHY_DND_TEXT_TYPE, FALSE);
+
+ if (gtk_selection_data_get_length (selection_data) <= 0 || sel_data == NULL)
+ return;
+
+ entry = GTK_ENTRY (widget);
+
+ if (gtk_selection_data_get_target (selection_data) == url_type) {
+ char **uris;
+
+ uris = g_uri_list_extract_uris ((char *)sel_data);
+ if (uris != NULL && uris[0] != NULL && *uris[0] != '\0') {
+ gtk_entry_set_text (entry, (char *)uris[0]);
+ ephy_link_open (EPHY_LINK (controller),
+ uris[0],
+ NULL,
+ ephy_link_flags_from_current_event ());
+ }
+ g_strfreev (uris);
+ } else if (gtk_selection_data_get_target (selection_data) == text_type) {
+ char *address;
+
+ gtk_entry_set_text (entry, (const gchar *)sel_data);
+ address = ephy_embed_utils_normalize_or_autosearch_address ((const gchar *)sel_data);
+ ephy_link_open (EPHY_LINK (controller),
+ address,
+ NULL,
+ ephy_link_flags_from_current_event ());
+ g_free (address);
+ }
}
static void
-entry_activate_cb (GtkEntry *entry,
- EphyLocationController *controller)
+entry_activate_cb (GtkEntry *entry,
+ EphyLocationController *controller)
{
- EphyBookmarks *bookmarks;
- const char *content;
- char *address;
- char *effective_address;
+ EphyBookmarks *bookmarks;
+ const char *content;
+ char *address;
+ char *effective_address;
- if (controller->sync_address_is_blocked)
- {
- controller->sync_address_is_blocked = FALSE;
- g_signal_handlers_unblock_by_func (controller, G_CALLBACK (sync_address), entry);
- }
+ if (controller->sync_address_is_blocked) {
+ controller->sync_address_is_blocked = FALSE;
+ g_signal_handlers_unblock_by_func (controller, G_CALLBACK (sync_address), entry);
+ }
- content = gtk_entry_get_text (entry);
- if (content == NULL || content[0] == '\0') return;
+ content = gtk_entry_get_text (entry);
+ if (content == NULL || content[0] == '\0') return;
- bookmarks = ephy_shell_get_bookmarks (ephy_shell_get_default ());
+ bookmarks = ephy_shell_get_bookmarks (ephy_shell_get_default ());
- address = ephy_bookmarks_resolve_address (bookmarks, content, NULL);
- g_return_if_fail (address != NULL);
+ address = ephy_bookmarks_resolve_address (bookmarks, content, NULL);
+ g_return_if_fail (address != NULL);
- effective_address = ephy_embed_utils_normalize_or_autosearch_address (g_strstrip (address));
- g_free (address);
+ effective_address = ephy_embed_utils_normalize_or_autosearch_address (g_strstrip (address));
+ g_free (address);
#if 0
- if (!ephy_embed_utils_address_has_web_scheme (effective_address))
- {
- /* After normalization there are still some cases that are
- * impossible to tell apart. One example is <URI>:<PORT> and <NON
- * WEB SCHEME>:<DATA>. To fix this, let's do a HEAD request to the
- * effective URI prefxed with http://; if we get OK Status the URI
- * exists, and we'll go ahead, otherwise we'll try to launch a
- * proper handler through gtk_show_uri. We only do this in
- * ephy_web_view_load_url, since this case is only relevant for URIs
- * typed in the location entry, which uses this method to do the
- * load. */
- /* TODO: however, this is not really possible, because normalize_or_autosearch_address
- * prepends http:// for anything that doesn't look like a URL.
- */
- }
+ if (!ephy_embed_utils_address_has_web_scheme (effective_address)) {
+ /* After normalization there are still some cases that are
+ * impossible to tell apart. One example is <URI>:<PORT> and <NON
+ * WEB SCHEME>:<DATA>. To fix this, let's do a HEAD request to the
+ * effective URI prefxed with http://; if we get OK Status the URI
+ * exists, and we'll go ahead, otherwise we'll try to launch a
+ * proper handler through gtk_show_uri. We only do this in
+ * ephy_web_view_load_url, since this case is only relevant for URIs
+ * typed in the location entry, which uses this method to do the
+ * load. */
+ /* TODO: however, this is not really possible, because normalize_or_autosearch_address
+ * prepends http:// for anything that doesn't look like a URL.
+ */
+ }
#endif
- ephy_link_open (EPHY_LINK (controller), effective_address, NULL,
- ephy_link_flags_from_current_event () | EPHY_LINK_TYPED);
+ ephy_link_open (EPHY_LINK (controller), effective_address, NULL,
+ ephy_link_flags_from_current_event () | EPHY_LINK_TYPED);
- g_free (effective_address);
+ g_free (effective_address);
}
static void
update_done_cb (EphyHistoryService *service,
- gboolean success,
- gpointer result_data,
- gpointer user_data)
-{
- /* FIXME: this hack is needed for the completion entry popup
- * to resize smoothly. See:
- * https://bugzilla.gnome.org/show_bug.cgi?id=671074 */
- gtk_entry_completion_complete (GTK_ENTRY_COMPLETION (user_data));
+ gboolean success,
+ gpointer result_data,
+ gpointer user_data)
+{
+ /* FIXME: this hack is needed for the completion entry popup
+ * to resize smoothly. See:
+ * https://bugzilla.gnome.org/show_bug.cgi?id=671074 */
+ gtk_entry_completion_complete (GTK_ENTRY_COMPLETION (user_data));
}
static void
user_changed_cb (GtkWidget *widget, EphyLocationController *controller)
{
- const char *address;
- GtkTreeModel *model;
- GtkEntryCompletion *completion;
+ const char *address;
+ GtkTreeModel *model;
+ GtkEntryCompletion *completion;
- address = ephy_location_entry_get_location (EPHY_LOCATION_ENTRY (widget));
+ address = ephy_location_entry_get_location (EPHY_LOCATION_ENTRY (widget));
- LOG ("user_changed_cb, address %s", address);
+ LOG ("user_changed_cb, address %s", address);
- completion = gtk_entry_get_completion (GTK_ENTRY (widget));
- model = gtk_entry_completion_get_model (completion);
+ completion = gtk_entry_get_completion (GTK_ENTRY (widget));
+ model = gtk_entry_completion_get_model (completion);
- ephy_completion_model_update_for_string (EPHY_COMPLETION_MODEL (model), address,
- update_done_cb, completion);
+ ephy_completion_model_update_for_string (EPHY_COMPLETION_MODEL (model), address,
+ update_done_cb, completion);
}
static void
-lock_clicked_cb (GtkWidget *widget,
- EphyLocationController *controller)
+lock_clicked_cb (GtkWidget *widget,
+ EphyLocationController *controller)
{
- g_signal_emit (controller, signals[LOCK_CLICKED], 0);
+ g_signal_emit (controller, signals[LOCK_CLICKED], 0);
}
static void
sync_address (EphyLocationController *controller,
- GParamSpec *pspec,
- GtkWidget *widget)
+ GParamSpec *pspec,
+ GtkWidget *widget)
{
- EphyLocationEntry *lentry = EPHY_LOCATION_ENTRY (widget);
+ EphyLocationEntry *lentry = EPHY_LOCATION_ENTRY (widget);
- LOG ("sync_address %s", controller->address);
+ LOG ("sync_address %s", controller->address);
- g_signal_handlers_block_by_func (widget, G_CALLBACK (user_changed_cb), controller);
- ephy_location_entry_set_location (lentry, controller->address);
- ephy_title_box_set_address (controller->title_box, controller->address);
- g_signal_handlers_unblock_by_func (widget, G_CALLBACK (user_changed_cb), controller);
+ g_signal_handlers_block_by_func (widget, G_CALLBACK (user_changed_cb), controller);
+ ephy_location_entry_set_location (lentry, controller->address);
+ ephy_title_box_set_address (controller->title_box, controller->address);
+ g_signal_handlers_unblock_by_func (widget, G_CALLBACK (user_changed_cb), controller);
}
static void
title_box_mode_changed_cb (EphyTitleBox *title_box,
- GParamSpec *psec,
- gpointer user_data)
+ GParamSpec *psec,
+ gpointer user_data)
{
- EphyLocationController *controller = EPHY_LOCATION_CONTROLLER (user_data);
+ EphyLocationController *controller = EPHY_LOCATION_CONTROLLER (user_data);
- sync_address (controller, NULL, GTK_WIDGET (controller->location_entry));
+ sync_address (controller, NULL, GTK_WIDGET (controller->location_entry));
}
static char *
-get_location_cb (EphyLocationEntry *entry,
- EphyLocationController *controller)
+get_location_cb (EphyLocationEntry *entry,
+ EphyLocationController *controller)
{
- EphyEmbed *embed;
+ EphyEmbed *embed;
- embed = ephy_embed_container_get_active_child
- (EPHY_EMBED_CONTAINER (controller->window));
+ embed = ephy_embed_container_get_active_child
+ (EPHY_EMBED_CONTAINER (controller->window));
- return g_strdup (ephy_web_view_get_address (ephy_embed_get_web_view (embed)));
+ return g_strdup (ephy_web_view_get_address (ephy_embed_get_web_view (embed)));
}
static char *
-get_title_cb (EphyLocationEntry *entry,
- EphyLocationController *controller)
+get_title_cb (EphyLocationEntry *entry,
+ EphyLocationController *controller)
{
- EphyEmbed *embed;
+ EphyEmbed *embed;
- embed = ephy_embed_container_get_active_child
- (EPHY_EMBED_CONTAINER (controller->window));
+ embed = ephy_embed_container_get_active_child
+ (EPHY_EMBED_CONTAINER (controller->window));
- return g_strdup (ephy_embed_get_title (embed));
+ return g_strdup (ephy_embed_get_title (embed));
}
static void
remove_completion_actions (EphyLocationController *controller,
- EphyLocationEntry *lentry)
+ EphyLocationEntry *lentry)
{
- GtkEntryCompletion *completion;
- GList *l;
+ GtkEntryCompletion *completion;
+ GList *l;
- completion = gtk_entry_get_completion (GTK_ENTRY (lentry));
+ completion = gtk_entry_get_completion (GTK_ENTRY (lentry));
- for (l = controller->actions; l != NULL; l = l->next)
- {
- gtk_entry_completion_delete_action (completion, 0);
- }
+ for (l = controller->actions; l != NULL; l = l->next) {
+ gtk_entry_completion_delete_action (completion, 0);
+ }
- g_signal_handlers_disconnect_by_func
- (completion, G_CALLBACK (action_activated_cb), controller);
+ g_signal_handlers_disconnect_by_func
+ (completion, G_CALLBACK (action_activated_cb), controller);
}
static void
add_completion_actions (EphyLocationController *controller,
- EphyLocationEntry *lentry)
+ EphyLocationEntry *lentry)
{
- GtkEntryCompletion *completion;
- GList *l;
+ GtkEntryCompletion *completion;
+ GList *l;
- completion = gtk_entry_get_completion (GTK_ENTRY (lentry));
+ completion = gtk_entry_get_completion (GTK_ENTRY (lentry));
- for (l = controller->actions; l != NULL; l = l->next)
- {
- EphyNode *bmk = l->data;
- const char *title;
- int index;
+ for (l = controller->actions; l != NULL; l = l->next) {
+ EphyNode *bmk = l->data;
+ const char *title;
+ int index;
- index = g_list_position (controller->actions, l);
- title = ephy_node_get_property_string
- (bmk, EPHY_NODE_BMK_PROP_TITLE);
- gtk_entry_completion_insert_action_text (completion, index, (char*)title);
- }
+ index = g_list_position (controller->actions, l);
+ title = ephy_node_get_property_string
+ (bmk, EPHY_NODE_BMK_PROP_TITLE);
+ gtk_entry_completion_insert_action_text (completion, index, (char *)title);
+ }
- g_signal_connect (completion, "action_activated",
- G_CALLBACK (action_activated_cb), controller);
+ g_signal_connect (completion, "action_activated",
+ G_CALLBACK (action_activated_cb), controller);
}
static gboolean
-focus_in_event_cb (GtkWidget *entry,
- GdkEventFocus *event,
- EphyLocationController *controller)
+focus_in_event_cb (GtkWidget *entry,
+ GdkEventFocus *event,
+ EphyLocationController *controller)
{
- if (!controller->sync_address_is_blocked)
- {
- controller->sync_address_is_blocked = TRUE;
- g_signal_handlers_block_by_func (controller, G_CALLBACK (sync_address), entry);
- }
+ if (!controller->sync_address_is_blocked) {
+ controller->sync_address_is_blocked = TRUE;
+ g_signal_handlers_block_by_func (controller, G_CALLBACK (sync_address), entry);
+ }
- return FALSE;
+ return FALSE;
}
static gboolean
-focus_out_event_cb (GtkWidget *entry,
- GdkEventFocus *event,
- EphyLocationController *controller)
+focus_out_event_cb (GtkWidget *entry,
+ GdkEventFocus *event,
+ EphyLocationController *controller)
{
- if (controller->sync_address_is_blocked)
- {
- controller->sync_address_is_blocked = FALSE;
- g_signal_handlers_unblock_by_func (controller, G_CALLBACK (sync_address), entry);
- }
+ if (controller->sync_address_is_blocked) {
+ controller->sync_address_is_blocked = FALSE;
+ g_signal_handlers_unblock_by_func (controller, G_CALLBACK (sync_address), entry);
+ }
- return FALSE;
+ return FALSE;
}
static void
-switch_page_cb (GtkNotebook *notebook,
- GtkWidget *page,
- guint page_num,
- EphyLocationController *controller)
-{
- if (controller->sync_address_is_blocked == TRUE)
- {
- controller->sync_address_is_blocked = FALSE;
- g_signal_handlers_unblock_by_func (controller, G_CALLBACK (sync_address), controller->location_entry);
- }
+switch_page_cb (GtkNotebook *notebook,
+ GtkWidget *page,
+ guint page_num,
+ EphyLocationController *controller)
+{
+ if (controller->sync_address_is_blocked == TRUE) {
+ controller->sync_address_is_blocked = FALSE;
+ g_signal_handlers_unblock_by_func (controller, G_CALLBACK (sync_address), controller->location_entry);
+ }
}
static void
ephy_location_controller_constructed (GObject *object)
{
- EphyLocationController *controller = EPHY_LOCATION_CONTROLLER (object);
- EphyHistoryService *history_service;
- EphyBookmarks *bookmarks;
- EphyCompletionModel *model;
- GtkWidget *notebook, *widget;
-
- G_OBJECT_CLASS (ephy_location_controller_parent_class)->constructed (object);
-
- notebook = ephy_window_get_notebook (controller->window);
- widget = GTK_WIDGET (controller->location_entry);
-
- g_signal_connect (notebook, "switch-page",
- G_CALLBACK (switch_page_cb), controller);
-
- history_service = EPHY_HISTORY_SERVICE (ephy_embed_shell_get_global_history_service (ephy_embed_shell_get_default ()));
- bookmarks = ephy_shell_get_bookmarks (ephy_shell_get_default ());
- model = ephy_completion_model_new (history_service, bookmarks);
- ephy_location_entry_set_completion (controller->location_entry,
- GTK_TREE_MODEL (model),
- EPHY_COMPLETION_TEXT_COL,
- EPHY_COMPLETION_ACTION_COL,
- EPHY_COMPLETION_KEYWORDS_COL,
- EPHY_COMPLETION_RELEVANCE_COL,
- EPHY_COMPLETION_URL_COL,
- EPHY_COMPLETION_EXTRA_COL,
- EPHY_COMPLETION_FAVICON_COL);
- g_object_unref (model);
-
- ephy_location_entry_set_match_func (controller->location_entry,
- match_func,
- controller->location_entry,
- NULL);
-
- add_completion_actions (controller, controller->location_entry);
-
- g_signal_connect_object (controller->title_box, "notify::mode",
- G_CALLBACK (title_box_mode_changed_cb), controller, 0);
-
- sync_address (controller, NULL, widget);
- g_signal_connect_object (controller, "notify::address",
- G_CALLBACK (sync_address), widget, 0);
- g_object_bind_property (controller, "editable",
- controller->location_entry, "editable",
- G_BINDING_SYNC_CREATE);
-
- g_object_bind_property (controller, "icon",
- controller->location_entry, "favicon",
- G_BINDING_SYNC_CREATE);
-
- g_object_bind_property (controller, "show-icon",
- controller->location_entry, "show-favicon",
- G_BINDING_SYNC_CREATE);
-
- g_signal_connect_object (widget, "drag-data-received",
- G_CALLBACK (entry_drag_data_received_cb),
- controller, 0);
- g_signal_connect_object (widget, "activate",
- G_CALLBACK (entry_activate_cb),
- controller, 0);
- g_signal_connect_object (widget, "user-changed",
- G_CALLBACK (user_changed_cb), controller, 0);
- g_signal_connect_object (widget, "lock-clicked",
- G_CALLBACK (lock_clicked_cb), controller, 0);
- g_signal_connect_object (widget, "get-location",
- G_CALLBACK (get_location_cb), controller, 0);
- g_signal_connect_object (widget, "get-title",
- G_CALLBACK (get_title_cb), controller, 0);
- g_signal_connect_object (widget, "focus-in-event",
- G_CALLBACK (focus_in_event_cb), controller, 0);
- g_signal_connect_object (widget, "focus-out-event",
- G_CALLBACK (focus_out_event_cb), controller, 0);
+ EphyLocationController *controller = EPHY_LOCATION_CONTROLLER (object);
+ EphyHistoryService *history_service;
+ EphyBookmarks *bookmarks;
+ EphyCompletionModel *model;
+ GtkWidget *notebook, *widget;
+
+ G_OBJECT_CLASS (ephy_location_controller_parent_class)->constructed (object);
+
+ notebook = ephy_window_get_notebook (controller->window);
+ widget = GTK_WIDGET (controller->location_entry);
+
+ g_signal_connect (notebook, "switch-page",
+ G_CALLBACK (switch_page_cb), controller);
+
+ history_service = EPHY_HISTORY_SERVICE (ephy_embed_shell_get_global_history_service (ephy_embed_shell_get_default ()));
+ bookmarks = ephy_shell_get_bookmarks (ephy_shell_get_default ());
+ model = ephy_completion_model_new (history_service, bookmarks);
+ ephy_location_entry_set_completion (controller->location_entry,
+ GTK_TREE_MODEL (model),
+ EPHY_COMPLETION_TEXT_COL,
+ EPHY_COMPLETION_ACTION_COL,
+ EPHY_COMPLETION_KEYWORDS_COL,
+ EPHY_COMPLETION_RELEVANCE_COL,
+ EPHY_COMPLETION_URL_COL,
+ EPHY_COMPLETION_EXTRA_COL,
+ EPHY_COMPLETION_FAVICON_COL);
+ g_object_unref (model);
+
+ ephy_location_entry_set_match_func (controller->location_entry,
+ match_func,
+ controller->location_entry,
+ NULL);
+
+ add_completion_actions (controller, controller->location_entry);
+
+ g_signal_connect_object (controller->title_box, "notify::mode",
+ G_CALLBACK (title_box_mode_changed_cb), controller, 0);
+
+ sync_address (controller, NULL, widget);
+ g_signal_connect_object (controller, "notify::address",
+ G_CALLBACK (sync_address), widget, 0);
+ g_object_bind_property (controller, "editable",
+ controller->location_entry, "editable",
+ G_BINDING_SYNC_CREATE);
+
+ g_object_bind_property (controller, "icon",
+ controller->location_entry, "favicon",
+ G_BINDING_SYNC_CREATE);
+
+ g_object_bind_property (controller, "show-icon",
+ controller->location_entry, "show-favicon",
+ G_BINDING_SYNC_CREATE);
+
+ g_signal_connect_object (widget, "drag-data-received",
+ G_CALLBACK (entry_drag_data_received_cb),
+ controller, 0);
+ g_signal_connect_object (widget, "activate",
+ G_CALLBACK (entry_activate_cb),
+ controller, 0);
+ g_signal_connect_object (widget, "user-changed",
+ G_CALLBACK (user_changed_cb), controller, 0);
+ g_signal_connect_object (widget, "lock-clicked",
+ G_CALLBACK (lock_clicked_cb), controller, 0);
+ g_signal_connect_object (widget, "get-location",
+ G_CALLBACK (get_location_cb), controller, 0);
+ g_signal_connect_object (widget, "get-title",
+ G_CALLBACK (get_title_cb), controller, 0);
+ g_signal_connect_object (widget, "focus-in-event",
+ G_CALLBACK (focus_in_event_cb), controller, 0);
+ g_signal_connect_object (widget, "focus-out-event",
+ G_CALLBACK (focus_out_event_cb), controller, 0);
}
static void
-ephy_location_controller_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EphyLocationController *controller = EPHY_LOCATION_CONTROLLER (object);
-
- switch (prop_id)
- {
- case PROP_ADDRESS:
- ephy_location_controller_set_address (controller, g_value_get_string (value));
- break;
- case PROP_EDITABLE:
- controller->editable = g_value_get_boolean (value);
- break;
- case PROP_ICON:
- if (controller->icon != NULL)
- {
- g_object_unref (controller->icon);
- }
- controller->icon = GDK_PIXBUF (g_value_dup_object (value));
- break;
- case PROP_SHOW_ICON:
- controller->show_icon = g_value_get_boolean (value);
- break;
- case PROP_WINDOW:
- controller->window = EPHY_WINDOW (g_value_get_object (value));
- break;
- case PROP_LOCATION_ENTRY:
- controller->location_entry = EPHY_LOCATION_ENTRY (g_value_get_object (value));
- break;
- case PROP_TITLE_BOX:
- controller->title_box = EPHY_TITLE_BOX (g_value_get_object (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
- }
+ephy_location_controller_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EphyLocationController *controller = EPHY_LOCATION_CONTROLLER (object);
+
+ switch (prop_id) {
+ case PROP_ADDRESS:
+ ephy_location_controller_set_address (controller, g_value_get_string (value));
+ break;
+ case PROP_EDITABLE:
+ controller->editable = g_value_get_boolean (value);
+ break;
+ case PROP_ICON:
+ if (controller->icon != NULL) {
+ g_object_unref (controller->icon);
+ }
+ controller->icon = GDK_PIXBUF (g_value_dup_object (value));
+ break;
+ case PROP_SHOW_ICON:
+ controller->show_icon = g_value_get_boolean (value);
+ break;
+ case PROP_WINDOW:
+ controller->window = EPHY_WINDOW (g_value_get_object (value));
+ break;
+ case PROP_LOCATION_ENTRY:
+ controller->location_entry = EPHY_LOCATION_ENTRY (g_value_get_object (value));
+ break;
+ case PROP_TITLE_BOX:
+ controller->title_box = EPHY_TITLE_BOX (g_value_get_object (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
}
static void
-ephy_location_controller_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EphyLocationController *controller = EPHY_LOCATION_CONTROLLER (object);
-
- switch (prop_id)
- {
- case PROP_ADDRESS:
- g_value_set_string (value, ephy_location_controller_get_address (controller));
- break;
- case PROP_EDITABLE:
- g_value_set_boolean (value, controller->editable);
- break;
- case PROP_ICON:
- g_value_set_object (value, controller->icon);
- break;
- case PROP_SHOW_ICON:
- g_value_set_boolean (value, controller->show_icon);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
- }
+ephy_location_controller_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EphyLocationController *controller = EPHY_LOCATION_CONTROLLER (object);
+
+ switch (prop_id) {
+ case PROP_ADDRESS:
+ g_value_set_string (value, ephy_location_controller_get_address (controller));
+ break;
+ case PROP_EDITABLE:
+ g_value_set_boolean (value, controller->editable);
+ break;
+ case PROP_ICON:
+ g_value_set_object (value, controller->icon);
+ break;
+ case PROP_SHOW_ICON:
+ g_value_set_boolean (value, controller->show_icon);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
}
static void
ephy_location_controller_dispose (GObject *object)
{
- EphyLocationController *controller = EPHY_LOCATION_CONTROLLER (object);
- GtkWidget *notebook;
-
- notebook = ephy_window_get_notebook (controller->window);
-
- if (notebook == NULL ||
- controller->location_entry == NULL) {
- return;
- }
-
- g_signal_handlers_disconnect_matched (controller, G_SIGNAL_MATCH_DATA,
- 0, 0, NULL, NULL, controller->location_entry);
- g_signal_handlers_disconnect_matched (controller->location_entry, G_SIGNAL_MATCH_DATA,
- 0, 0, NULL, NULL, controller);
- g_signal_handlers_disconnect_matched (controller->title_box, G_SIGNAL_MATCH_DATA,
- 0, 0, NULL, NULL, controller);
- g_signal_handlers_disconnect_matched (notebook, G_SIGNAL_MATCH_DATA,
- 0, 0, NULL, NULL, controller);
- controller->location_entry = NULL;
-
- G_OBJECT_CLASS (ephy_location_controller_parent_class)->dispose (object);
+ EphyLocationController *controller = EPHY_LOCATION_CONTROLLER (object);
+ GtkWidget *notebook;
+
+ notebook = ephy_window_get_notebook (controller->window);
+
+ if (notebook == NULL ||
+ controller->location_entry == NULL) {
+ return;
+ }
+
+ g_signal_handlers_disconnect_matched (controller, G_SIGNAL_MATCH_DATA,
+ 0, 0, NULL, NULL, controller->location_entry);
+ g_signal_handlers_disconnect_matched (controller->location_entry, G_SIGNAL_MATCH_DATA,
+ 0, 0, NULL, NULL, controller);
+ g_signal_handlers_disconnect_matched (controller->title_box, G_SIGNAL_MATCH_DATA,
+ 0, 0, NULL, NULL, controller);
+ g_signal_handlers_disconnect_matched (notebook, G_SIGNAL_MATCH_DATA,
+ 0, 0, NULL, NULL, controller);
+ controller->location_entry = NULL;
+
+ G_OBJECT_CLASS (ephy_location_controller_parent_class)->dispose (object);
}
static void
ephy_location_controller_class_init (EphyLocationControllerClass *class)
{
- GObjectClass *object_class = G_OBJECT_CLASS (class);
-
- object_class->finalize = ephy_location_controller_finalize;
- object_class->dispose = ephy_location_controller_dispose;
- object_class->constructed = ephy_location_controller_constructed;
- object_class->get_property = ephy_location_controller_get_property;
- object_class->set_property = ephy_location_controller_set_property;
-
- /**
- * EphyLocationController::lock-clicked:
- * @controller: the object which received the signal.
- *
- * Emitted when the user clicks on the security icon of the internal
- * #EphyLocationEntry.
- */
- signals[LOCK_CLICKED] = g_signal_new (
- "lock-clicked",
- EPHY_TYPE_LOCATION_CONTROLLER,
- G_SIGNAL_RUN_FIRST | G_SIGNAL_RUN_LAST,
- 0, NULL, NULL, NULL,
- G_TYPE_NONE,
- 0);
-
- /**
- * EphyLocationController:address:
- *
- * The address of the current location.
- */
- obj_properties[PROP_ADDRESS] =
- g_param_spec_string ("address",
- "Address",
- "The address of the current location",
- "",
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-
- /**
- * EphyLocationController:editable:
- *
- * Whether the location bar entry can be edited.
- */
- obj_properties[PROP_EDITABLE] =
- g_param_spec_boolean ("editable",
- "Editable",
- "Whether the location bar entry can be edited",
- TRUE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-
- /**
- * EphyLocationController:icon:
- *
- * The icon corresponding to the current location.
- */
- obj_properties[PROP_ICON] =
- g_param_spec_object ("icon",
- "Icon",
- "The icon corresponding to the current location",
- GDK_TYPE_PIXBUF,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-
- /**
- * EphyLocationController:show-icon:
- *
- * If we should show the page icon.
- */
- obj_properties[PROP_SHOW_ICON] =
- g_param_spec_boolean ("show-icon",
- "Show Icon",
- "Whether to show the favicon",
- TRUE,
- G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-
- /**
- * EphyLocationController:window:
- *
- * The parent window.
- */
- obj_properties[PROP_WINDOW] =
- g_param_spec_object ("window",
- "Window",
- "The parent window",
- G_TYPE_OBJECT,
- G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY);
-
- /**
- * EphyLocationController:location-entry:
- *
- * The controlled location entry.
- */
- obj_properties[PROP_LOCATION_ENTRY] =
- g_param_spec_object ("location-entry",
- "Location entry",
- "The controlled location entry",
- G_TYPE_OBJECT,
- G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY);
-
- /**
- * EphyLocationController:title-box:
- *
- * The #EphyLocationController sets the address of this title box.
- */
- obj_properties[PROP_TITLE_BOX] =
- g_param_spec_object ("title-box",
- "Title box",
- "The title box whose address will be managed",
- G_TYPE_OBJECT,
- G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY);
-
- g_object_class_install_properties (object_class, LAST_PROP, obj_properties);
+ GObjectClass *object_class = G_OBJECT_CLASS (class);
+
+ object_class->finalize = ephy_location_controller_finalize;
+ object_class->dispose = ephy_location_controller_dispose;
+ object_class->constructed = ephy_location_controller_constructed;
+ object_class->get_property = ephy_location_controller_get_property;
+ object_class->set_property = ephy_location_controller_set_property;
+
+ /**
+ * EphyLocationController::lock-clicked:
+ * @controller: the object which received the signal.
+ *
+ * Emitted when the user clicks on the security icon of the internal
+ * #EphyLocationEntry.
+ */
+ signals[LOCK_CLICKED] = g_signal_new (
+ "lock-clicked",
+ EPHY_TYPE_LOCATION_CONTROLLER,
+ G_SIGNAL_RUN_FIRST | G_SIGNAL_RUN_LAST,
+ 0, NULL, NULL, NULL,
+ G_TYPE_NONE,
+ 0);
+
+ /**
+ * EphyLocationController:address:
+ *
+ * The address of the current location.
+ */
+ obj_properties[PROP_ADDRESS] =
+ g_param_spec_string ("address",
+ "Address",
+ "The address of the current location",
+ "",
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+ /**
+ * EphyLocationController:editable:
+ *
+ * Whether the location bar entry can be edited.
+ */
+ obj_properties[PROP_EDITABLE] =
+ g_param_spec_boolean ("editable",
+ "Editable",
+ "Whether the location bar entry can be edited",
+ TRUE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+ /**
+ * EphyLocationController:icon:
+ *
+ * The icon corresponding to the current location.
+ */
+ obj_properties[PROP_ICON] =
+ g_param_spec_object ("icon",
+ "Icon",
+ "The icon corresponding to the current location",
+ GDK_TYPE_PIXBUF,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+ /**
+ * EphyLocationController:show-icon:
+ *
+ * If we should show the page icon.
+ */
+ obj_properties[PROP_SHOW_ICON] =
+ g_param_spec_boolean ("show-icon",
+ "Show Icon",
+ "Whether to show the favicon",
+ TRUE,
+ G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+ /**
+ * EphyLocationController:window:
+ *
+ * The parent window.
+ */
+ obj_properties[PROP_WINDOW] =
+ g_param_spec_object ("window",
+ "Window",
+ "The parent window",
+ G_TYPE_OBJECT,
+ G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY);
+
+ /**
+ * EphyLocationController:location-entry:
+ *
+ * The controlled location entry.
+ */
+ obj_properties[PROP_LOCATION_ENTRY] =
+ g_param_spec_object ("location-entry",
+ "Location entry",
+ "The controlled location entry",
+ G_TYPE_OBJECT,
+ G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY);
+
+ /**
+ * EphyLocationController:title-box:
+ *
+ * The #EphyLocationController sets the address of this title box.
+ */
+ obj_properties[PROP_TITLE_BOX] =
+ g_param_spec_object ("title-box",
+ "Title box",
+ "The title box whose address will be managed",
+ G_TYPE_OBJECT,
+ G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY);
+
+ g_object_class_install_properties (object_class, LAST_PROP, obj_properties);
}
static int
compare_actions (gconstpointer a,
- gconstpointer b)
-{
- EphyNode *node_a = (EphyNode *)a;
- EphyNode *node_b = (EphyNode *)b;
- const char *title1, *title2;
- int retval;
-
- title1 = ephy_node_get_property_string (node_a, EPHY_NODE_BMK_PROP_TITLE);
- title2 = ephy_node_get_property_string (node_b, EPHY_NODE_BMK_PROP_TITLE);
-
- if (title1 == NULL)
- {
- retval = -1;
- }
- else if (title2 == NULL)
- {
- retval = 1;
- }
- else
- {
- char *str_a, *str_b;
-
- str_a = g_utf8_casefold (title1, -1);
- str_b = g_utf8_casefold (title2, -1);
- retval = g_utf8_collate (str_a, str_b);
- g_free (str_a);
- g_free (str_b);
- }
-
- return retval;
+ gconstpointer b)
+{
+ EphyNode *node_a = (EphyNode *)a;
+ EphyNode *node_b = (EphyNode *)b;
+ const char *title1, *title2;
+ int retval;
+
+ title1 = ephy_node_get_property_string (node_a, EPHY_NODE_BMK_PROP_TITLE);
+ title2 = ephy_node_get_property_string (node_b, EPHY_NODE_BMK_PROP_TITLE);
+
+ if (title1 == NULL) {
+ retval = -1;
+ } else if (title2 == NULL) {
+ retval = 1;
+ } else {
+ char *str_a, *str_b;
+
+ str_a = g_utf8_casefold (title1, -1);
+ str_b = g_utf8_casefold (title2, -1);
+ retval = g_utf8_collate (str_a, str_b);
+ g_free (str_a);
+ g_free (str_b);
+ }
+
+ return retval;
}
static void
init_actions_list (EphyLocationController *controller)
{
- GPtrArray *children;
- guint i;
+ GPtrArray *children;
+ guint i;
- children = ephy_node_get_children (controller->smart_bmks);
- for (i = 0; i < children->len; i++)
- {
- EphyNode *kid;
+ children = ephy_node_get_children (controller->smart_bmks);
+ for (i = 0; i < children->len; i++) {
+ EphyNode *kid;
- kid = g_ptr_array_index (children, i);
+ kid = g_ptr_array_index (children, i);
- controller->actions = g_list_prepend
- (controller->actions, kid);
- }
+ controller->actions = g_list_prepend
+ (controller->actions, kid);
+ }
- controller->actions =
- g_list_sort (controller->actions, (GCompareFunc) compare_actions);
+ controller->actions =
+ g_list_sort (controller->actions, (GCompareFunc)compare_actions);
}
static void
update_actions_list (EphyLocationController *controller)
{
- remove_completion_actions (controller, controller->location_entry);
+ remove_completion_actions (controller, controller->location_entry);
- g_list_free (controller->actions);
- controller->actions = NULL;
- init_actions_list (controller);
+ g_list_free (controller->actions);
+ controller->actions = NULL;
+ init_actions_list (controller);
- add_completion_actions (controller, controller->location_entry);
+ add_completion_actions (controller, controller->location_entry);
}
static void
-actions_child_removed_cb (EphyNode *node,
- EphyNode *child,
- guint old_index,
- EphyLocationController *controller)
+actions_child_removed_cb (EphyNode *node,
+ EphyNode *child,
+ guint old_index,
+ EphyLocationController *controller)
{
- update_actions_list (controller);
+ update_actions_list (controller);
}
static void
-actions_child_added_cb (EphyNode *node,
- EphyNode *child,
- EphyLocationController *controller)
+actions_child_added_cb (EphyNode *node,
+ EphyNode *child,
+ EphyLocationController *controller)
{
- update_actions_list (controller);
+ update_actions_list (controller);
}
static void
-actions_child_changed_cb (EphyNode *node,
- EphyNode *child,
- guint property_id,
- EphyLocationController *controller)
+actions_child_changed_cb (EphyNode *node,
+ EphyNode *child,
+ guint property_id,
+ EphyLocationController *controller)
{
- update_actions_list (controller);
+ update_actions_list (controller);
}
static void
ephy_location_controller_init (EphyLocationController *controller)
{
- controller->address = g_strdup ("");
- controller->editable = TRUE;
- controller->bookmarks = ephy_shell_get_bookmarks (ephy_shell_get_default ());
- controller->smart_bmks = ephy_bookmarks_get_smart_bookmarks
- (controller->bookmarks);
- controller->sync_address_is_blocked = FALSE;
-
- init_actions_list (controller);
-
- ephy_node_signal_connect_object (controller->smart_bmks,
- EPHY_NODE_CHILD_ADDED,
- (EphyNodeCallback)actions_child_added_cb,
- G_OBJECT (controller));
- ephy_node_signal_connect_object (controller->smart_bmks,
- EPHY_NODE_CHILD_REMOVED,
- (EphyNodeCallback)actions_child_removed_cb,
- G_OBJECT (controller));
- ephy_node_signal_connect_object (controller->smart_bmks,
- EPHY_NODE_CHILD_CHANGED,
- (EphyNodeCallback)actions_child_changed_cb,
- G_OBJECT (controller));
+ controller->address = g_strdup ("");
+ controller->editable = TRUE;
+ controller->bookmarks = ephy_shell_get_bookmarks (ephy_shell_get_default ());
+ controller->smart_bmks = ephy_bookmarks_get_smart_bookmarks
+ (controller->bookmarks);
+ controller->sync_address_is_blocked = FALSE;
+
+ init_actions_list (controller);
+
+ ephy_node_signal_connect_object (controller->smart_bmks,
+ EPHY_NODE_CHILD_ADDED,
+ (EphyNodeCallback)actions_child_added_cb,
+ G_OBJECT (controller));
+ ephy_node_signal_connect_object (controller->smart_bmks,
+ EPHY_NODE_CHILD_REMOVED,
+ (EphyNodeCallback)actions_child_removed_cb,
+ G_OBJECT (controller));
+ ephy_node_signal_connect_object (controller->smart_bmks,
+ EPHY_NODE_CHILD_CHANGED,
+ (EphyNodeCallback)actions_child_changed_cb,
+ G_OBJECT (controller));
}
static void
ephy_location_controller_finalize (GObject *object)
{
- EphyLocationController *controller = EPHY_LOCATION_CONTROLLER (object);
+ EphyLocationController *controller = EPHY_LOCATION_CONTROLLER (object);
- if (controller->icon != NULL)
- {
- g_object_unref (controller->icon);
- }
+ if (controller->icon != NULL) {
+ g_object_unref (controller->icon);
+ }
- g_list_free (controller->actions);
- g_free (controller->address);
+ g_list_free (controller->actions);
+ g_free (controller->address);
- G_OBJECT_CLASS (ephy_location_controller_parent_class)->finalize (object);
+ G_OBJECT_CLASS (ephy_location_controller_parent_class)->finalize (object);
}
/**
@@ -832,9 +809,9 @@ ephy_location_controller_finalize (GObject *object)
const char *
ephy_location_controller_get_address (EphyLocationController *controller)
{
- g_return_val_if_fail (EPHY_IS_LOCATION_CONTROLLER (controller), "");
+ g_return_val_if_fail (EPHY_IS_LOCATION_CONTROLLER (controller), "");
- return controller->address;
+ return controller->address;
}
/**
@@ -846,14 +823,14 @@ ephy_location_controller_get_address (EphyLocationController *controller)
**/
void
ephy_location_controller_set_address (EphyLocationController *controller,
- const char *address)
+ const char *address)
{
- g_return_if_fail (EPHY_IS_LOCATION_CONTROLLER (controller));
+ g_return_if_fail (EPHY_IS_LOCATION_CONTROLLER (controller));
- LOG ("set_address %s", address);
+ LOG ("set_address %s", address);
- g_free (controller->address);
- controller->address = g_strdup (address);
+ g_free (controller->address);
+ controller->address = g_strdup (address);
- g_object_notify_by_pspec (G_OBJECT (controller), obj_properties[PROP_ADDRESS]);
+ g_object_notify_by_pspec (G_OBJECT (controller), obj_properties[PROP_ADDRESS]);
}