static gboolean nautilus_entry_motion_notify (GtkWidget *widget, GdkEventMotion *event) { int result; gboolean old_had, new_had; int old_start, old_end, new_start, new_end; NautilusEntry *entry; GtkEditable *editable; entry = NAUTILUS_ENTRY (widget); editable = GTK_EDITABLE (widget); old_had = gtk_editable_get_selection_bounds (editable, &old_start, &old_end); result = GTK_WIDGET_CLASS (nautilus_entry_parent_class)->motion_notify_event (widget, event); /* Send a signal if dragging the mouse caused the selection to change. */ if (result) { new_had = gtk_editable_get_selection_bounds (editable, &new_start, &new_end); if (old_had != new_had || (old_had && (old_start != new_start || old_end != new_end))) { g_signal_emit (widget, signals[SELECTION_CHANGED], 0); } } return result; }
void nautilus_location_entry_focus (NautilusLocationEntry *entry) { /* Put the keyboard focus in the text field when switching to this mode, * and select all text for easy overtyping */ gtk_widget_grab_focus (GTK_WIDGET (entry)); nautilus_entry_select_all (NAUTILUS_ENTRY (entry)); }
static void on_selection_changed (GtkTreeSelection *treeselection, gpointer user_data) { NautilusBookmark *selected; const char *name = NULL; char *entry_text = NULL; GFile *location; g_assert (GTK_IS_ENTRY (name_field)); g_assert (GTK_IS_ENTRY (uri_field)); selected = get_selected_bookmark (); if (selected) { name = nautilus_bookmark_get_name (selected); location = nautilus_bookmark_get_location (selected); entry_text = g_file_get_parse_name (location); g_object_unref (location); } /* Set the sensitivity of widgets that require a selection */ gtk_widget_set_sensitive (remove_button, selected != NULL); gtk_widget_set_sensitive (jump_button, selected != NULL); gtk_widget_set_sensitive (name_field, selected != NULL); gtk_widget_set_sensitive (uri_field, selected != NULL); g_signal_handler_block (name_field, name_field_changed_signal_id); nautilus_entry_set_text (NAUTILUS_ENTRY (name_field), name ? name : ""); g_signal_handler_unblock (name_field, name_field_changed_signal_id); g_signal_handler_block (uri_field, uri_field_changed_signal_id); nautilus_entry_set_text (NAUTILUS_ENTRY (uri_field), entry_text ? entry_text : ""); g_signal_handler_unblock (uri_field, uri_field_changed_signal_id); text_changed = FALSE; name_text_changed = FALSE; g_free (entry_text); }
static void nautilus_location_entry_update_current_uri (NautilusLocationEntry *entry, const char *uri) { g_free (entry->details->current_directory); entry->details->current_directory = g_strdup (uri); nautilus_entry_set_text (NAUTILUS_ENTRY (entry), uri); set_position_and_selection_to_end (GTK_EDITABLE (entry)); }
static gboolean nautilus_entry_key_press (GtkWidget *widget, GdkEventKey *event) { NautilusEntry *entry; GtkEditable *editable; int position; gboolean old_has, new_has; gboolean result; entry = NAUTILUS_ENTRY (widget); editable = GTK_EDITABLE (widget); if (!gtk_editable_get_editable (editable)) { return FALSE; } switch (event->keyval) { case GDK_KEY_Tab: /* The location bar entry wants TAB to work kind of * like it does in the shell for command completion, * so if we get a tab and there's a selection, we * should position the insertion point at the end of * the selection. */ if (entry->details->special_tab_handling && gtk_editable_get_selection_bounds (editable, NULL, NULL)) { position = strlen (gtk_entry_get_text (GTK_ENTRY (editable))); gtk_editable_select_region (editable, position, position); return TRUE; } break; default: break; } old_has = gtk_editable_get_selection_bounds (editable, NULL, NULL); result = GTK_WIDGET_CLASS (nautilus_entry_parent_class)->key_press_event (widget, event); /* Pressing a key usually changes the selection if there is a selection. * If there is not selection, we can save work by not emitting a signal. */ if (result) { new_has = gtk_editable_get_selection_bounds (editable, NULL, NULL); if (old_has || new_has) { g_signal_emit (widget, signals[SELECTION_CHANGED], 0); } } return result; }
static gboolean select_all_at_idle (gpointer callback_data) { NautilusEntry *entry; entry = NAUTILUS_ENTRY (callback_data); nautilus_entry_select_all (entry); entry->details->select_idle_id = 0; return FALSE; }
static void on_selection_changed (GtkTreeSelection *treeselection, gpointer user_data) { NautilusBookmark *selected; char *name = NULL, *uri = NULL; g_assert (GTK_IS_ENTRY (name_field)); g_assert (GTK_IS_ENTRY (uri_field)); selected = get_selected_bookmark (); if (selected) { name = nautilus_bookmark_get_name (selected); uri = nautilus_bookmark_get_uri (selected); } /* Set the sensitivity of widgets that require a selection */ gtk_widget_set_sensitive (remove_button, selected != NULL); gtk_widget_set_sensitive (jump_button, selected != NULL); gtk_widget_set_sensitive (name_field, selected != NULL); gtk_widget_set_sensitive (uri_field, selected != NULL); g_signal_handler_block (name_field, name_field_changed_signal_id); nautilus_entry_set_text (NAUTILUS_ENTRY (name_field), name ? name : ""); g_signal_handler_unblock (name_field, name_field_changed_signal_id); g_signal_handler_block (uri_field, uri_field_changed_signal_id); nautilus_entry_set_text (NAUTILUS_ENTRY (uri_field), uri ? uri : ""); g_signal_handler_unblock (uri_field, uri_field_changed_signal_id); text_changed = FALSE; name_text_changed = FALSE; g_free (name); g_free (uri); }
static void on_selection_changed (GtkTreeSelection *treeselection, gpointer user_data) { NautilusBookmarksWindow *self = user_data; NautilusBookmark *selected; const char *name = NULL; char *entry_text = NULL; GFile *location; selected = get_selected_bookmark (self); if (selected) { name = nautilus_bookmark_get_name (selected); location = nautilus_bookmark_get_location (selected); entry_text = g_file_get_parse_name (location); g_object_unref (location); } update_widgets_sensitivity (self); g_signal_handler_block (self->priv->name_field, self->priv->name_changed_id); nautilus_entry_set_text (NAUTILUS_ENTRY (self->priv->name_field), name ? name : ""); g_signal_handler_unblock (self->priv->name_field, self->priv->name_changed_id); g_signal_handler_block (self->priv->uri_field, self->priv->uri_changed_id); nautilus_entry_set_text (NAUTILUS_ENTRY (self->priv->uri_field), entry_text ? entry_text : ""); g_signal_handler_unblock (self->priv->uri_field, self->priv->uri_changed_id); self->priv->text_changed = FALSE; self->priv->name_text_changed = FALSE; g_free (entry_text); }
static void nautilus_entry_finalize (GObject *object) { NautilusEntry *entry; entry = NAUTILUS_ENTRY (object); if (entry->details->select_idle_id != 0) { g_source_remove (entry->details->select_idle_id); } g_free (entry->details); G_OBJECT_CLASS (nautilus_entry_parent_class)->finalize (object); }
static void nautilus_entry_delete_text (GtkEditable *editable, int start_pos, int end_pos) { NautilusEntry *entry; entry = NAUTILUS_ENTRY (editable); /* Fire off user changed signals */ if (entry->details->user_edit) { g_signal_emit (editable, signals[USER_CHANGED], 0); } parent_editable_interface->delete_text (editable, start_pos, end_pos); g_signal_emit (editable, signals[SELECTION_CHANGED], 0); }
static void nautilus_entry_insert_text (GtkEditable *editable, const gchar *text, int length, int *position) { NautilusEntry *entry; entry = NAUTILUS_ENTRY(editable); /* Fire off user changed signals */ if (entry->details->user_edit) { g_signal_emit (editable, signals[USER_CHANGED], 0); } parent_editable_interface->insert_text (editable, text, length, position); g_signal_emit (editable, signals[SELECTION_CHANGED], 0); }