summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2004-11-08 15:07:30 +0000
committerAlexander Larsson <alexl@src.gnome.org>2004-11-08 15:07:30 +0000
commit1a263dbcbd2ba12636aec9011d0d20f3a446377c (patch)
treec48c6d31f09caf2ae23cb3889c7da2c0727a43d7
parent663e381090fd74c092e59a1489e0ac231ab57384 (diff)
downloadnautilus-1a263dbcbd2ba12636aec9011d0d20f3a446377c.tar.gz
Turn NautilusNotesSidebar into NautilusNotesViewer that is also a property
2004-11-08 Alexander Larsson <alexl@redhat.com> * src/Makefile.am: * src/nautilus-application.c: (nautilus_application_instance_init): * src/nautilus-notes-sidebar.[ch]: * src/nautilus-notes-viewer.[ch]: Turn NautilusNotesSidebar into NautilusNotesViewer that is also a property page
-rw-r--r--ChangeLog9
-rw-r--r--src/Makefile.am4
-rw-r--r--src/nautilus-application.c4
-rw-r--r--src/nautilus-notes-sidebar.c447
-rw-r--r--src/nautilus-notes-sidebar.h49
5 files changed, 13 insertions, 500 deletions
diff --git a/ChangeLog b/ChangeLog
index f75e489d1..7ad826bb3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
2004-11-08 Alexander Larsson <alexl@redhat.com>
+ * src/Makefile.am:
+ * src/nautilus-application.c: (nautilus_application_instance_init):
+ * src/nautilus-notes-sidebar.[ch]:
+ * src/nautilus-notes-viewer.[ch]:
+ Turn NautilusNotesSidebar into NautilusNotesViewer that is also a
+ property page
+
+2004-11-08 Alexander Larsson <alexl@redhat.com>
+
* components/Makefile.am:
Remove emblem subdir
diff --git a/src/Makefile.am b/src/Makefile.am
index a55f6cd94..c401d5c33 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -87,8 +87,8 @@ nautilus_SOURCES = \
nautilus-navigation-window-menus.c \
nautilus-navigation-window.c \
nautilus-navigation-window.h \
- nautilus-notes-sidebar.c \
- nautilus-notes-sidebar.h \
+ nautilus-notes-viewer.c \
+ nautilus-notes-viewer.h \
nautilus-profiler.c \
nautilus-profiler.h \
nautilus-property-browser.c \
diff --git a/src/nautilus-application.c b/src/nautilus-application.c
index 3573cdc3f..19aab92d2 100644
--- a/src/nautilus-application.c
+++ b/src/nautilus-application.c
@@ -37,7 +37,7 @@
#include "file-manager/fm-tree-view.h"
#include "nautilus-information-panel.h"
#include "nautilus-history-sidebar.h"
-#include "nautilus-notes-sidebar.h"
+#include "nautilus-notes-viewer.h"
#include "nautilus-emblem-sidebar.h"
#include <sys/types.h>
#include <sys/stat.h>
@@ -178,7 +178,7 @@ nautilus_application_instance_init (NautilusApplication *application)
nautilus_information_panel_register ();
fm_tree_view_register ();
nautilus_history_sidebar_register ();
- nautilus_notes_sidebar_register ();
+ nautilus_notes_viewer_register ();
nautilus_emblem_sidebar_register ();
}
diff --git a/src/nautilus-notes-sidebar.c b/src/nautilus-notes-sidebar.c
deleted file mode 100644
index 8edbe53f1..000000000
--- a/src/nautilus-notes-sidebar.c
+++ /dev/null
@@ -1,447 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
-
-/*
- * Nautilus
- *
- * Copyright (C) 2000, 2001 Eazel, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this library; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * Author: Andy Hertzfeld <andy@eazel.com>
- *
- */
-
-/* notes sidebar panel -- allows editing per-directory notes */
-
-#include <config.h>
-
-#include "nautilus-notes-sidebar.h"
-
-#include <eel/eel-debug.h>
-#include <eel/eel-gtk-extensions.h>
-#include <eel/eel-string.h>
-#include <gtk/gtkmain.h>
-#include <gtk/gtksignal.h>
-#include <gtk/gtktextbuffer.h>
-#include <gtk/gtktextview.h>
-#include <gtk/gtkvbox.h>
-#include <gtk/gtkscrolledwindow.h>
-#include <bonobo/bonobo-property-bag.h>
-#include <libnautilus-private/nautilus-file-attributes.h>
-#include <libnautilus-private/nautilus-file.h>
-#include <libnautilus-private/nautilus-global-preferences.h>
-#include <libnautilus-private/nautilus-metadata.h>
-#include <libnautilus-private/nautilus-clipboard.h>
-#include <libnautilus-private/nautilus-bonobo-extensions.h>
-#include <libnautilus-private/nautilus-sidebar-factory.h>
-#include <libnautilus-private/nautilus-theme.h>
-
-#define SAVE_TIMEOUT (3 * 1000)
-
-static void load_note_text_from_metadata (NautilusFile *file,
- NautilusNotesSidebar *notes);
-static void notes_save_metainfo (NautilusNotesSidebar *notes);
-static void nautilus_notes_sidebar_iface_init (NautilusSidebarIface *iface);
-static void on_changed (GtkEditable *editable,
- NautilusNotesSidebar *notes);
-
-typedef struct {
- GtkScrolledWindowClass parent;
-} NautilusNotesSidebarClass;
-
-G_DEFINE_TYPE_WITH_CODE (NautilusNotesSidebar, nautilus_notes_sidebar, GTK_TYPE_SCROLLED_WINDOW,
- G_IMPLEMENT_INTERFACE (NAUTILUS_TYPE_SIDEBAR,
- nautilus_notes_sidebar_iface_init));
-
-
-struct _NautilusNotesSidebarDetails {
- NautilusWindowInfo *window;
- GtkWidget *note_text_field;
- GtkTextBuffer *text_buffer;
- char *uri;
- NautilusFile *file;
- guint save_timeout_id;
- char *previous_saved_text;
- GdkPixbuf *icon;
-};
-
-static gboolean
-schedule_save_callback (gpointer data)
-{
- NautilusNotesSidebar *notes;
-
- notes = data;
-
- /* Zero out save_timeout_id so no one will try to cancel our
- * in-progress timeout callback.
- */
- notes->details->save_timeout_id = 0;
-
- notes_save_metainfo (notes);
-
- return FALSE;
-}
-
-static void
-cancel_pending_save (NautilusNotesSidebar *notes)
-{
- if (notes->details->save_timeout_id != 0) {
- g_source_remove (notes->details->save_timeout_id);
- notes->details->save_timeout_id = 0;
- }
-}
-
-static void
-schedule_save (NautilusNotesSidebar *notes)
-{
- cancel_pending_save (notes);
-
- notes->details->save_timeout_id = g_timeout_add (SAVE_TIMEOUT, schedule_save_callback, notes);
-}
-
-/* notifies event listeners if the notes data actually changed */
-static void
-set_saved_text (NautilusNotesSidebar *notes, char *new_notes)
-{
- char *old_text;
-
- old_text = notes->details->previous_saved_text;
- notes->details->previous_saved_text = new_notes;
-
- if (eel_strcmp (old_text, new_notes) != 0) {
- g_signal_emit_by_name (NAUTILUS_SIDEBAR (notes),
- "tab_icon_changed");
- }
-
- g_free (old_text);
-}
-
-/* save the metainfo corresponding to the current uri, if any, into the text field */
-static void
-notes_save_metainfo (NautilusNotesSidebar *notes)
-{
- char *notes_text;
- GtkTextIter start_iter;
- GtkTextIter end_iter;
-
- if (notes->details->file == NULL) {
- return;
- }
-
- cancel_pending_save (notes);
-
- /* Block the handler, so we don't respond to our own change.
- */
- g_signal_handlers_block_matched (notes->details->file,
- G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA,
- 0, 0, NULL,
- G_CALLBACK (load_note_text_from_metadata),
- notes);
-
- gtk_text_buffer_get_start_iter (notes->details->text_buffer, &start_iter);
- gtk_text_buffer_get_end_iter (notes->details->text_buffer, &end_iter);
- notes_text = gtk_text_buffer_get_text (notes->details->text_buffer,
- &start_iter,
- &end_iter,
- FALSE);
-
- nautilus_file_set_metadata (notes->details->file,
- NAUTILUS_METADATA_KEY_ANNOTATION,
- NULL, notes_text);
-
- g_signal_handlers_unblock_matched (notes->details->file,
- G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA,
- 0, 0, NULL,
- G_CALLBACK (load_note_text_from_metadata),
- notes);
-
- set_saved_text (notes, notes_text);
-}
-
-static void
-load_note_text_from_metadata (NautilusFile *file,
- NautilusNotesSidebar *notes)
-{
- char *saved_text;
-
- g_assert (NAUTILUS_IS_FILE (file));
- g_assert (notes->details->file == file);
-
- saved_text = nautilus_file_get_metadata (file, NAUTILUS_METADATA_KEY_ANNOTATION, "");
-
- /* This fn is called for any change signal on the file, so make sure that the
- * metadata has actually changed.
- */
- if (eel_strcmp (saved_text, notes->details->previous_saved_text) != 0) {
- set_saved_text (notes, saved_text);
- cancel_pending_save (notes);
-
- /* Block the handler, so we don't respond to our own change.
- */
- g_signal_handlers_block_matched (notes->details->text_buffer,
- G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA,
- 0, 0, NULL,
- G_CALLBACK (on_changed),
- notes);
- gtk_text_buffer_set_text (notes->details->text_buffer, saved_text, -1);
- g_signal_handlers_unblock_matched (notes->details->text_buffer,
- G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA,
- 0, 0, NULL,
- G_CALLBACK (on_changed),
- notes);
- } else {
- g_free (saved_text);
- }
-}
-
-static void
-done_with_file (NautilusNotesSidebar *notes)
-{
- cancel_pending_save (notes);
-
- if (notes->details->file != NULL) {
- nautilus_file_monitor_remove (notes->details->file, notes);
- g_signal_handlers_disconnect_matched (notes->details->file,
- G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA,
- 0, 0, NULL,
- G_CALLBACK (load_note_text_from_metadata),
- notes);
- nautilus_file_unref (notes->details->file);
- }
-}
-
-static void
-notes_load_metainfo (NautilusNotesSidebar *notes)
-{
- NautilusFileAttributes attributes;
-
- done_with_file (notes);
- notes->details->file = nautilus_file_get (notes->details->uri);
-
- /* Block the handler, so we don't respond to our own change.
- */
- g_signal_handlers_block_matched (notes->details->text_buffer,
- G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA,
- 0, 0, NULL,
- G_CALLBACK (on_changed),
- notes);
- gtk_text_buffer_set_text (notes->details->text_buffer, "", -1);
- g_signal_handlers_unblock_matched (notes->details->text_buffer,
- G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA,
- 0, 0, NULL,
- G_CALLBACK (on_changed),
- notes);
-
- if (notes->details->file == NULL) {
- return;
- }
-
- attributes = NAUTILUS_FILE_ATTRIBUTE_METADATA;
- nautilus_file_monitor_add (notes->details->file, notes, attributes);
-
- if (nautilus_file_check_if_ready (notes->details->file, attributes)) {
- load_note_text_from_metadata (notes->details->file, notes);
- }
-
- g_signal_connect (notes->details->file, "changed",
- G_CALLBACK (load_note_text_from_metadata), notes);
-}
-
-static void
-loading_uri_callback (NautilusSidebar *sidebar,
- const char *location,
- NautilusNotesSidebar *notes)
-{
- if (strcmp (notes->details->uri, location) != 0) {
- notes_save_metainfo (notes);
- g_free (notes->details->uri);
- notes->details->uri = g_strdup (location);
- notes_load_metainfo (notes);
- }
-}
-
-static gboolean
-on_text_field_focus_out_event (GtkWidget *widget,
- GdkEventFocus *event,
- gpointer callback_data)
-{
- NautilusNotesSidebar *notes;
-
- notes = callback_data;
- notes_save_metainfo (notes);
- return FALSE;
-}
-
-static void
-on_changed (GtkEditable *editable, NautilusNotesSidebar *notes)
-{
- schedule_save (notes);
-}
-
-static void
-nautilus_notes_sidebar_init (NautilusNotesSidebar *sidebar)
-{
- char *image_path;
- NautilusNotesSidebarDetails *details;
-
- details = g_new0 (NautilusNotesSidebarDetails, 1);
- sidebar->details = details;
-
- details->uri = g_strdup ("");
-
- image_path = nautilus_theme_get_image_path ("note-indicator.png");
- if (image_path) {
- details->icon = gdk_pixbuf_new_from_file (image_path, NULL);
- g_free (image_path);
- }
-
- /* create the text container */
- details->text_buffer = gtk_text_buffer_new (NULL);
- details->note_text_field = gtk_text_view_new_with_buffer (details->text_buffer);
-
- gtk_text_view_set_editable (GTK_TEXT_VIEW (details->note_text_field), TRUE);
- gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (details->note_text_field),
- GTK_WRAP_WORD);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sidebar),
- GTK_POLICY_NEVER,
- GTK_POLICY_AUTOMATIC);
- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sidebar),
- GTK_SHADOW_IN);
- gtk_scrolled_window_set_hadjustment (GTK_SCROLLED_WINDOW (sidebar), NULL);
- gtk_scrolled_window_set_vadjustment (GTK_SCROLLED_WINDOW (sidebar), NULL);
- gtk_container_add (GTK_CONTAINER (sidebar), details->note_text_field);
-
- g_signal_connect (details->note_text_field, "focus_out_event",
- G_CALLBACK (on_text_field_focus_out_event), sidebar);
- g_signal_connect (details->text_buffer, "changed",
- G_CALLBACK (on_changed), sidebar);
-
- gtk_widget_show_all (GTK_WIDGET (sidebar));
-
- /* handle selections */
-#ifdef GNOME2_CONVERSION_COMPLETE
- nautilus_clipboard_set_up_editable_in_control
- (GTK_EDITABLE (notes->note_text_field),
- nautilus_view_get_bonobo_control (notes->view),
- FALSE);
-#endif
-}
-
-static void
-nautilus_notes_sidebar_finalize (GObject *object)
-{
- NautilusNotesSidebar *sidebar;
-
- sidebar = NAUTILUS_NOTES_SIDEBAR (object);
-
- done_with_file (sidebar);
- if (sidebar->details->icon != NULL) {
- g_object_unref (sidebar->details->icon);
- }
- g_free (sidebar->details->uri);
- g_free (sidebar->details->previous_saved_text);
- g_free (sidebar->details);
-
- G_OBJECT_CLASS (nautilus_notes_sidebar_parent_class)->finalize (object);
-}
-
-
-static void
-nautilus_notes_sidebar_class_init (NautilusNotesSidebarClass *class)
-{
- G_OBJECT_CLASS (class)->finalize = nautilus_notes_sidebar_finalize;
-}
-
-static const char *
-nautilus_notes_sidebar_get_sidebar_id (NautilusSidebar *sidebar)
-{
- return NAUTILUS_NOTES_SIDEBAR_ID;
-}
-
-static char *
-nautilus_notes_sidebar_get_tab_label (NautilusSidebar *sidebar)
-{
- return g_strdup (_("Notes"));
-}
-
-static GdkPixbuf *
-nautilus_notes_sidebar_get_tab_icon (NautilusSidebar *sidebar)
-{
- NautilusNotesSidebar *notes;
-
- notes = NAUTILUS_NOTES_SIDEBAR (sidebar);
-
- if (notes->details->previous_saved_text != NULL &&
- notes->details->previous_saved_text[0] != '\0') {
- return g_object_ref (notes->details->icon);
- }
-
- return NULL;
-}
-
-static void
-nautilus_notes_sidebar_is_visible_changed (NautilusSidebar *sidebar,
- gboolean is_visible)
-{
- /* Do nothing */
-}
-
-static void
-nautilus_notes_sidebar_iface_init (NautilusSidebarIface *iface)
-{
- iface->get_sidebar_id = nautilus_notes_sidebar_get_sidebar_id;
- iface->get_tab_label = nautilus_notes_sidebar_get_tab_label;
- iface->get_tab_icon = nautilus_notes_sidebar_get_tab_icon;
- iface->is_visible_changed = nautilus_notes_sidebar_is_visible_changed;
-}
-
-static void
-nautilus_notes_sidebar_set_parent_window (NautilusNotesSidebar *sidebar,
- NautilusWindowInfo *window)
-{
- sidebar->details->window = window;
-
- g_signal_connect_object (window, "loading_uri",
- G_CALLBACK (loading_uri_callback), sidebar, 0);
-
- g_free (sidebar->details->uri);
- sidebar->details->uri = nautilus_window_info_get_current_location (window);
- notes_load_metainfo (sidebar);
-}
-
-static NautilusSidebar *
-nautilus_notes_sidebar_create (NautilusWindowInfo *window)
-{
- NautilusNotesSidebar *sidebar;
-
- sidebar = g_object_new (nautilus_notes_sidebar_get_type (), NULL);
- nautilus_notes_sidebar_set_parent_window (sidebar, window);
- g_object_ref (sidebar);
- gtk_object_sink (GTK_OBJECT (sidebar));
-
- return NAUTILUS_SIDEBAR (sidebar);
-}
-
-static NautilusSidebarInfo notes_sidebar = {
- NAUTILUS_NOTES_SIDEBAR_ID,
- nautilus_notes_sidebar_create,
-};
-
-void
-nautilus_notes_sidebar_register (void)
-{
- nautilus_sidebar_factory_register (&notes_sidebar);
-}
-
diff --git a/src/nautilus-notes-sidebar.h b/src/nautilus-notes-sidebar.h
deleted file mode 100644
index 3aa1707f7..000000000
--- a/src/nautilus-notes-sidebar.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-
-/*
- * Nautilus
- *
- * Copyright (C) 1999, 2000, 2004 Red Hat, Inc.
- * Copyright (C) 2000, 2001 Eazel, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this library; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * Authors: Andy Hertzfeld <andy@eazel.com>
- * Alexander Larsson <alexl@redhat.com>
- */
-#ifndef _NAUTILUS_NOTES_SIDEBAR_H
-#define _NAUTILUS_NOTES_SIDEBAR_H
-
-#include <gtk/gtktreeview.h>
-#include <libnautilus-private/nautilus-view.h>
-#include <libnautilus-private/nautilus-window-info.h>
-#include <gtk/gtkscrolledwindow.h>
-
-#define NAUTILUS_NOTES_SIDEBAR_ID "NautilusNotesSidebar"
-
-#define NAUTILUS_TYPE_NOTES_SIDEBAR (nautilus_notes_sidebar_get_type ())
-#define NAUTILUS_NOTES_SIDEBAR(obj) (GTK_CHECK_CAST ((obj), NAUTILUS_TYPE_NOTES_SIDEBAR, NautilusNotesSidebar))
-
-typedef struct _NautilusNotesSidebarDetails NautilusNotesSidebarDetails;
-
-typedef struct {
- GtkScrolledWindow parent;
- NautilusNotesSidebarDetails *details;
-} NautilusNotesSidebar;
-
-GType nautilus_notes_sidebar_get_type (void);
-void nautilus_notes_sidebar_register (void);
-
-#endif