[Goodies-commits] r1789 - xfce4-notes-plugin/trunk/panel-plugin

Mike Massonnet mmassonnet at xfce.org
Mon Jul 24 22:01:57 CEST 2006


Author: mmassonnet
Date: 2006-07-24 20:01:54 +0000 (Mon, 24 Jul 2006)
New Revision: 1789

Modified:
   xfce4-notes-plugin/trunk/panel-plugin/notes-options.c
   xfce4-notes-plugin/trunk/panel-plugin/notes-window.c
   xfce4-notes-plugin/trunk/panel-plugin/notes-window.h
   xfce4-notes-plugin/trunk/panel-plugin/notes.c
   xfce4-notes-plugin/trunk/panel-plugin/notes.h
Log:
Support for multiple notes through a notebook

Modified: xfce4-notes-plugin/trunk/panel-plugin/notes-options.c
===================================================================
--- xfce4-notes-plugin/trunk/panel-plugin/notes-options.c	2006-07-24 19:59:41 UTC (rev 1788)
+++ xfce4-notes-plugin/trunk/panel-plugin/notes-options.c	2006-07-24 20:01:54 UTC (rev 1789)
@@ -39,6 +39,7 @@
 static void     on_toggle_task_switcher (GtkWidget *, NotesPlugin *);
 static void     on_toggle_always_on_top (GtkWidget *, NotesPlugin *);
 static void     on_toggle_stick (GtkWidget *, NotesPlugin *);
+static void     on_toggle_vscrollbar (GtkWidget *, NotesPlugin *);
 
 
 GtkWidget *
@@ -46,6 +47,8 @@
 {
     GtkWidget *dialog, *vbox;
     GtkWidget *cb_show, *cb_task_switcher, *cb_always_on_top, *cb_stick;
+    GtkWidget *hseparator;
+    GtkWidget *cb_vscrollbar;
     NotesOptions *options;
 
     DBG ("New Notes Options");
@@ -68,7 +71,7 @@
     vbox = GTK_DIALOG (dialog)->vbox;
     gtk_box_set_spacing (GTK_BOX (vbox), 2);
 
-    cb_show = gtk_check_button_new_with_label (_("Show the notes on startup"));
+    cb_show = gtk_check_button_new_with_label (_("Show the notes at startup"));
     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cb_show), options->show);
     gtk_box_pack_start (GTK_BOX (vbox), cb_show, FALSE, FALSE, 0);
     gtk_widget_show (cb_show);
@@ -102,6 +105,23 @@
 
     g_signal_connect (cb_stick, "toggled", G_CALLBACK (on_toggle_stick), notes);
 
+    hseparator = gtk_hseparator_new ();
+    gtk_box_pack_start (GTK_BOX (vbox), hseparator, FALSE, FALSE, 0);
+    //gtk_widget_show (hseparator);
+
+    cb_vscrollbar = 
+        gtk_check_button_new_with_label (_("Always show vertical scrollbar"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cb_vscrollbar), 
+                                  options->vscrollbar);
+    gtk_tooltips_set_tip (GTK_TOOLTIPS (notes->tooltips),
+                          cb_vscrollbar, _("A restart of the panel is needed"),
+                          NULL);
+    gtk_box_pack_start (GTK_BOX (vbox), cb_vscrollbar, FALSE, FALSE, 0);
+    //gtk_widget_show (cb_vscrollbar);
+
+    g_signal_connect (cb_vscrollbar, "toggled", 
+                      G_CALLBACK (on_toggle_vscrollbar), notes);
+
     gtk_widget_show (dialog);
 
     return dialog;
@@ -162,3 +182,31 @@
 
     DBG ("Set option stick: %d", toggle_value);
 }
+
+static void
+on_toggle_vscrollbar (GtkWidget *widget, NotesPlugin *notes)
+{
+    gboolean toggle_value;
+    GtkPolicyType vpolicy;
+    gint i;
+    GList *pages;
+    NotePage *page;
+
+    g_object_get (G_OBJECT (widget), "active", &toggle_value, NULL);
+    notes->options.vscrollbar = toggle_value;
+
+    vpolicy = (toggle_value) ? GTK_POLICY_AUTOMATIC : GTK_POLICY_ALWAYS;
+    pages = g_list_nth (notes->note->pages, 0);
+
+    for (i = 0, page = (NotePage *)g_list_nth_data (pages, i); page != NULL;
+         i++, page = (NotePage *)g_list_nth_data (pages, i))
+      {
+        gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (page->scroll), 
+                                        GTK_POLICY_AUTOMATIC, vpolicy);
+        /* This is being very obvious... it doesn't work!
+         * But the setting is correct if you restart the panel */
+      }
+
+    DBG ("Set option vscrollbar: %d", toggle_value);
+}
+

Modified: xfce4-notes-plugin/trunk/panel-plugin/notes-window.c
===================================================================
--- xfce4-notes-plugin/trunk/panel-plugin/notes-window.c	2006-07-24 19:59:41 UTC (rev 1788)
+++ xfce4-notes-plugin/trunk/panel-plugin/notes-window.c	2006-07-24 20:01:54 UTC (rev 1789)
@@ -33,21 +33,27 @@
 #define PLUGIN_NAME "xfce4-notes-plugin"
 
 
+static void     note_page_load_data (XfcePanelPlugin *, NotePage *);
 static gboolean on_note_delete ();
+static void     on_note_close (GtkWidget *, GtkToggleButton *);
 static gboolean on_title_press (GtkWidget *, GdkEventButton *, GtkWindow *);
 static gboolean on_title_scroll (GtkWidget *, GdkEventScroll *, Note *);
+static gboolean on_note_key_press (GtkWidget *, GdkEventKey *, NotesPlugin *);
+static void     on_note_changed (GtkWidget *, NotesPlugin *);
+static void     on_page_create (GtkWidget *, NotesPlugin *);
+static gboolean on_page_delete (GtkWidget *, GdkEventButton *, NotesPlugin *);
 
 
 Note *
-note_new (XfcePanelPlugin *plugin)
+note_new (NotesPlugin *notes)
 {
     Note *note;
 
     DBG ("Create Note Window");
 
     note = g_new0 (Note, 1);
+    note->pages = NULL;
 
-
     /* Window */
     note->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
 
@@ -76,19 +82,32 @@
     gtk_container_add (GTK_CONTAINER (note->frame), note->vbox);
 
 
-    /* Horizontal box: icon + title + close button */
+    /* Horizontal box: create new page button + title + close button */
     note->hbox = gtk_hbox_new (FALSE, 2);
     gtk_widget_show (note->hbox);
 
     gtk_box_pack_start (GTK_BOX (note->vbox), note->hbox, FALSE, FALSE, 0);
 
-    /* Icon */
-    note->icon = gtk_image_new_from_stock (GTK_STOCK_EDIT,
-                                           GTK_ICON_SIZE_MENU);
-    gtk_widget_show (note->icon);
+    /* Create new page button + icon */
+    note->create_page_button = xfce_create_panel_button ();
+    gtk_widget_show (note->create_page_button);
 
-    gtk_box_pack_start (GTK_BOX (note->hbox), note->icon, FALSE, FALSE, 0);
+    gtk_tooltips_set_tip (GTK_TOOLTIPS (notes->tooltips),
+                          note->create_page_button, _("Open a new page"), NULL);
+    gtk_widget_set_size_request (note->create_page_button, 22, 22);
+    gtk_box_pack_start (GTK_BOX (note->hbox), note->create_page_button, FALSE,
+                        FALSE, 0);
 
+    note->create_page_icon =
+	    gtk_image_new_from_stock (GTK_STOCK_EDIT, GTK_ICON_SIZE_MENU);
+    gtk_widget_show (note->create_page_icon);
+
+    gtk_container_add (GTK_CONTAINER (note->create_page_button),
+                       note->create_page_icon);
+
+    g_signal_connect (note->create_page_button, "clicked",
+                      G_CALLBACK (on_page_create), notes);
+
     /* Event box move + Title */
     note->move_event_box = gtk_event_box_new ();
     gtk_widget_show (note->move_event_box);
@@ -113,7 +132,7 @@
     note->close_button = xfce_create_panel_button ();
     gtk_widget_show (note->close_button);
 
-    gtk_widget_set_size_request (note->close_button, 16, 16);
+    gtk_widget_set_size_request (note->close_button, 22, 22);
     gtk_box_pack_start (GTK_BOX (note->hbox), note->close_button, FALSE, FALSE,
                         0);
 
@@ -123,27 +142,130 @@
 
     gtk_container_add (GTK_CONTAINER (note->close_button), note->close_icon);
 
+    g_signal_connect (note->close_button, "clicked", G_CALLBACK (on_note_close),
+                      notes->button);
 
+
+    /* Notebook */
+    note->notebook = gtk_notebook_new ();
+    gtk_widget_show (note->notebook);
+
+    gtk_notebook_set_show_tabs (GTK_NOTEBOOK (note->notebook), FALSE);
+    gtk_notebook_set_tab_pos (GTK_NOTEBOOK (note->notebook), GTK_POS_LEFT);
+    gtk_notebook_set_scrollable (GTK_NOTEBOOK (note->notebook), TRUE);
+
+    gtk_box_pack_start (GTK_BOX (note->vbox), note->notebook, TRUE, TRUE, 0);
+
+    return note;
+}
+
+void
+note_page_new (XfcePanelPlugin *plugin, NotesPlugin *notes)
+{
+	NotePage *page;
+	Note *note;
+    GtkTextBuffer *buffer;
+    gchar note_id[8];
+
+    DBG ("Create a new page");
+
+	page = g_new0 (NotePage, 1);
+	note = notes->note;
+    note->pages = g_list_append (note->pages, page);
+
+    /* HBox */
+    page->hbox = gtk_hbox_new (FALSE, 0);
+    gtk_widget_show (page->hbox);
+
+    /* Label + Close eventbox/icon */
+    g_snprintf (note_id, 8, "%d", g_list_length (note->pages));
+    page->label = gtk_label_new (note_id);
+    gtk_widget_show (page->label);
+
+    gtk_label_set_justify (GTK_LABEL (page->label), GTK_JUSTIFY_RIGHT);
+    gtk_box_pack_start (GTK_BOX (page->hbox), page->label, TRUE, TRUE, 0);
+
+    page->close_eventbox = gtk_event_box_new ();
+    gtk_widget_show (page->close_eventbox);
+
+    gtk_event_box_set_above_child (GTK_EVENT_BOX (page->close_eventbox), TRUE);
+
+    page->close_icon = gtk_image_new_from_stock (GTK_STOCK_CLOSE,
+                                                 GTK_ICON_SIZE_MENU);
+    gtk_widget_show (page->close_icon);
+
+    gtk_container_add (GTK_CONTAINER (page->close_eventbox), page->close_icon);
+    gtk_box_pack_start (GTK_BOX (page->hbox), page->close_eventbox, FALSE,
+                        FALSE, 0);
+
     /* Scrolled window + Text view */
-    note->scroll = gtk_scrolled_window_new (NULL, NULL);
-    gtk_widget_show (note->scroll);
+    page->scroll = gtk_scrolled_window_new (NULL, NULL);
+    gtk_widget_show (page->scroll);
 
-    gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (note->scroll),
-                                         GTK_SHADOW_IN);
-    gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (note->scroll),
+    //GtkPolicyType vpolicy = (notes->options.vscrollbar) ? GTK_POLICY_ALWAYS 
+    //                        : GTK_POLICY_AUTOMATIC;
+    gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (page->scroll),
                                     GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
-    gtk_box_pack_start (GTK_BOX (note->vbox), note->scroll, TRUE, TRUE, 0);
 
     /* Text view */
-    note->text = gtk_text_view_new ();
-    gtk_widget_show (note->text);
+    page->text = gtk_text_view_new ();
+    gtk_widget_show (page->text);
 
-    gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (note->text), GTK_WRAP_WORD);
-    gtk_container_add (GTK_CONTAINER (note->scroll), note->text);
+    gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (page->text), GTK_WRAP_WORD);
+    gtk_container_add (GTK_CONTAINER (page->scroll), page->text);
 
-    return note;
+
+    /* Append the widget to the notebook */
+    page->id = gtk_notebook_append_page (GTK_NOTEBOOK (note->notebook),
+                                         page->scroll, page->hbox);
+    gtk_notebook_set_show_tabs (GTK_NOTEBOOK (note->notebook),
+                                (gboolean) page->id);
+
+
+    note_page_load_data (plugin, page);
+
+    g_signal_connect (page->close_eventbox, "button-release-event",
+                      G_CALLBACK (on_page_delete), notes);
+    g_signal_connect (page->text, "key-press-event",
+                      G_CALLBACK (on_note_key_press), notes);
+    buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (page->text));
+    g_signal_connect (buffer, "changed", G_CALLBACK (on_note_changed), notes);
 }
 
+static void
+note_page_load_data (XfcePanelPlugin *plugin, NotePage *page)
+{
+    gchar *file;
+    gchar note_entry[12];
+    XfceRc *rc;
+
+    if (!(file = xfce_panel_plugin_lookup_rc_file (plugin)))
+        return;
+
+    DBG ("Look up file (%s)", file);
+
+    rc = xfce_rc_simple_open (file, FALSE);
+    g_free (file);
+
+    if (rc)
+      {
+        GtkTextBuffer *buffer;
+        const gchar *text;
+
+        g_snprintf (note_entry, 12, "note%d", page->id);
+        text = xfce_rc_read_entry (rc, note_entry, "");
+
+        DBG ("Note %d (%s): %s", page->id, note_entry, text);
+
+        buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (page->text));
+        gtk_text_buffer_set_text (buffer, text, -1);
+
+        gtk_text_view_set_buffer (GTK_TEXT_VIEW (page->text), buffer);
+
+        xfce_rc_close (rc);
+      }
+}
+
 static gboolean
 on_note_delete ()
 {
@@ -151,6 +273,12 @@
     return TRUE;
 }
 
+static void
+on_note_close (GtkWidget *widget, GtkToggleButton *panel_button)
+{
+    gtk_toggle_button_set_active (panel_button, FALSE);
+}
+
 static gboolean
 on_title_press (GtkWidget *widget, GdkEventButton *event, GtkWindow *window)
 {
@@ -165,25 +293,119 @@
 static gboolean
 on_title_scroll (GtkWidget *widget, GdkEventScroll *event, Note *note)
 {
-    gint width, height;
-
-    gtk_window_get_default_size (GTK_WINDOW  (note->window), &width, &height);
-
     if (event->type == GDK_SCROLL)
       {
+        if (GTK_WIDGET_VISIBLE (note->notebook))
+            gtk_window_get_size (GTK_WINDOW (note->window), &note->w, &note->h);
+        else
+            gtk_window_get_size (GTK_WINDOW (note->window), &note->w, NULL);
+
         if (event->direction == GDK_SCROLL_UP)
           {
             /* Hide the text view */
-            gtk_widget_hide (note->scroll);
-            gtk_window_resize (GTK_WINDOW (note->window), width, 1);
+            gtk_widget_hide (note->notebook);
+            gtk_window_resize (GTK_WINDOW (note->window), note->w, 1);
           }
         else if (event->direction == GDK_SCROLL_DOWN)
           {
             /* Show the text view */
-            gtk_widget_show (note->scroll);
-            gtk_window_resize (GTK_WINDOW (note->window), width, height);
+            gtk_widget_show (note->notebook);
+            gtk_window_resize (GTK_WINDOW (note->window), note->w, note->h);
           }
       }
 
     return FALSE;
 }
+
+static gboolean
+on_note_key_press (GtkWidget *widget, GdkEventKey *event, NotesPlugin *notes)
+{
+    if (event->type == GDK_KEY_PRESS && event->keyval == GDK_Escape)
+        on_note_close (widget, GTK_TOGGLE_BUTTON (notes->button));
+
+    return FALSE;
+}
+
+static void
+on_note_changed (GtkWidget *widget, NotesPlugin *notes)
+{
+    if (notes->timeout_id > 0)
+      {
+        g_source_remove (notes->timeout_id);
+        notes->timeout_id = 0;
+      }
+
+    notes->timeout_id = g_timeout_add (60000, (GSourceFunc) save_on_timeout,
+                                       notes);
+}
+
+static void
+on_page_create (GtkWidget *widget, NotesPlugin *notes)
+{
+    note_page_new (notes->plugin, notes);
+    gtk_notebook_set_current_page (GTK_NOTEBOOK (notes->note->notebook), -1);
+}
+
+static gboolean
+on_page_delete (GtkWidget *widget, GdkEventButton *event, NotesPlugin * notes)
+{
+    if (event->type == GDK_BUTTON_RELEASE && event->button == 1)
+      {
+        gint id;
+        GtkNotebook *notebook;
+        GList *pages;
+        NotePage *page;
+        gchar tab_label[8];
+
+        notebook = GTK_NOTEBOOK (notes->note->notebook);
+        id = gtk_notebook_get_current_page (notebook);
+
+        DBG ("Delete id %d", id);
+
+        notes->note->pages = g_list_nth (notes->note->pages, 0);
+        pages = g_list_nth (notes->note->pages, id);
+
+        notes->note->pages = g_list_remove_link (notes->note->pages, pages);
+        g_list_free_1 (pages);
+        gtk_notebook_remove_page (notebook, id);
+
+        pages = g_list_nth (notes->note->pages, 0);
+
+        for (id = 0, page = (NotePage *)g_list_nth_data (pages, id);
+             page != NULL;
+             id++, page = (NotePage *)g_list_nth_data (pages, id))
+          {
+            page->id = id;
+
+            DBG ("id:%d", id);
+
+            g_snprintf (tab_label, 8, "%d", id+1);
+            gtk_label_set_text (GTK_LABEL (page->label), tab_label);
+          }
+
+        gchar *file;
+        gchar note_entry[12];
+        XfceRc *rc;
+
+        if (!(file = xfce_panel_plugin_save_location (notes->plugin, TRUE)))
+            return TRUE;
+
+        rc = xfce_rc_simple_open (file, FALSE);
+        g_free (file);
+
+        if (rc)
+          {
+            g_snprintf (note_entry, 12, "note%d", g_list_length (pages));
+
+            xfce_rc_delete_entry (rc, note_entry, TRUE);
+            xfce_rc_close (rc);
+          }
+        gtk_notebook_set_show_tabs (notebook,
+                                    (gboolean)g_list_length (pages)-1);
+
+        save_on_timeout (notes);
+      }
+
+    return TRUE;
+}
+

Modified: xfce4-notes-plugin/trunk/panel-plugin/notes-window.h
===================================================================
--- xfce4-notes-plugin/trunk/panel-plugin/notes-window.h	2006-07-24 19:59:41 UTC (rev 1788)
+++ xfce4-notes-plugin/trunk/panel-plugin/notes-window.h	2006-07-24 20:01:54 UTC (rev 1789)
@@ -22,27 +22,39 @@
 
 typedef struct
 {
+    GtkWidget *hbox;
+    GtkWidget *label;
+    GtkWidget *close_eventbox;
+    GtkWidget *close_icon;
+
+    GtkWidget *scroll;
+    GtkWidget *text;
+
+    gint id;
+}
+NotePage;
+
+typedef struct
+{
     GtkWidget *window;
-
     GtkWidget *frame;
 
-    GtkWidget *icon;
+    GtkWidget *create_page_icon;
+    GtkWidget *create_page_button;
     GtkWidget *move_event_box;
     GtkWidget *title;
     GtkWidget *close_button;
     GtkWidget *close_icon;
 
-    GtkWidget *scroll;
-    GtkWidget *text;
+    GtkWidget *notebook;
+    GList *pages;
 
     GtkWidget *vbox;
     GtkWidget *hbox;
 
-    /* Window position */
-    gint x, y;
+    /* Window geometry */
+    gint x, y, w, h;
 }
 Note;
 
-Note *          note_new (XfcePanelPlugin *);
-
 #endif

Modified: xfce4-notes-plugin/trunk/panel-plugin/notes.c
===================================================================
--- xfce4-notes-plugin/trunk/panel-plugin/notes.c	2006-07-24 19:59:41 UTC (rev 1788)
+++ xfce4-notes-plugin/trunk/panel-plugin/notes.c	2006-07-24 20:01:54 UTC (rev 1789)
@@ -39,14 +39,10 @@
 static void     notes_construct (XfcePanelPlugin *);
 static void     notes_free_data (XfcePanelPlugin *, NotesPlugin *);
 static void     notes_save (XfcePanelPlugin *, NotesPlugin *);
-gboolean        save_on_timeout (NotesPlugin *);
 static void     notes_configure (XfcePanelPlugin *, NotesPlugin *);
 static gboolean notes_set_size (XfcePanelPlugin *, int size, NotesPlugin *);
 static void     notes_load_data (XfcePanelPlugin *, NotesPlugin *);
 static void     notes_button_toggled (XfcePanelPlugin *, NotesPlugin *);
-static void     on_note_close (GtkWidget *, GtkToggleButton *);
-static gboolean on_note_key_press (GtkWidget *, GdkEventKey *, NotesPlugin *);
-static void     on_note_changed (GtkWidget *widget, NotesPlugin *notes);
 static void     on_options_response (GtkWidget *, int response, NotesPlugin *);
 
 
@@ -75,10 +71,6 @@
     char *file;
     XfceRc *rc;
 
-    GtkTextBuffer *buffer;
-    GtkTextIter start, end;
-    gchar *text;
-
     DBG ("Save: %s", PLUGIN_NAME);
 
     if (!(file = xfce_panel_plugin_save_location (plugin, TRUE)))
@@ -89,22 +81,19 @@
 
     if (rc)
       {
-        buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (notes->note->text));
-        gtk_text_buffer_get_bounds (buffer, &start, &end);
-        text = gtk_text_buffer_get_text (GTK_TEXT_BUFFER (buffer), &start,
-                                         &end, TRUE);
-
-        xfce_rc_write_entry (rc, "note", text);
-        g_free (text);
-
         if (GTK_WIDGET_VISIBLE (notes->note->window))
           {
             gtk_window_get_position (GTK_WINDOW (notes->note->window),
                                      &notes->note->x, &notes->note->y);
+            gtk_window_get_size (GTK_WINDOW (notes->note->window),
+                                 &notes->note->w, &notes->note->h);
           }
 
+
         xfce_rc_write_int_entry (rc, "pos_x", notes->note->x);
         xfce_rc_write_int_entry (rc, "pos_y", notes->note->y);
+        xfce_rc_write_int_entry (rc, "width", notes->note->w);
+        xfce_rc_write_int_entry (rc, "height", notes->note->h);
 
         xfce_rc_write_bool_entry (rc, "show", notes->options.show);
         xfce_rc_write_bool_entry (rc, "task_switcher",
@@ -112,7 +101,37 @@
         xfce_rc_write_bool_entry (rc, "always_on_top",
                                   notes->options.always_on_top);
         xfce_rc_write_bool_entry (rc, "stick", notes->options.stick);
+        xfce_rc_write_bool_entry (rc, "vscrollbar", notes->options.vscrollbar);
 
+
+        gint id;
+        NotePage *page;
+        GList *pages;
+        GtkTextBuffer *buffer;
+        GtkTextIter start, end;
+        gchar *text;
+        gchar note_entry[12];
+
+        pages = notes->note->pages;
+
+        for (id = 0, page = (NotePage *)g_list_nth_data (pages, id);
+             page != NULL;
+             id++, page = (NotePage *)g_list_nth_data (pages, id))
+          {
+            g_snprintf (note_entry, 12, "note%d", id);
+
+            buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (page->text));
+            gtk_text_buffer_get_bounds (buffer, &start, &end);
+            text = gtk_text_buffer_get_text (GTK_TEXT_BUFFER (buffer), &start,
+                                             &end, TRUE);
+
+            DBG ("Note %d (%s): %s", id, note_entry, text);
+
+            xfce_rc_write_entry (rc, note_entry, text);
+            g_free (text);
+          }
+
+
         xfce_rc_close (rc);
       }
 }
@@ -205,7 +224,6 @@
 notes_new (XfcePanelPlugin *plugin)
 {
     NotesPlugin *notes;
-    GtkTextBuffer *buffer;
 
     DBG ("New Notes Plugin");
 
@@ -226,31 +244,21 @@
                           _("Notes\nClick this button to show/hide your notes"),
                           NULL);
 
-    notes->note = note_new (plugin);
+    notes->note = note_new (notes);
     notes_load_data (plugin, notes);
 
-    g_signal_connect (notes->note->close_button, "clicked",
-                      G_CALLBACK (on_note_close), notes->button);
-
-    g_signal_connect (notes->note->text, "key-press-event",
-                      G_CALLBACK (on_note_key_press), notes);
-
-    buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (notes->note->text));
-    g_signal_connect (buffer, "changed", G_CALLBACK (on_note_changed), notes);
-
     return notes;
 }
 
 static void
 notes_load_data (XfcePanelPlugin *plugin, NotesPlugin *notes)
 {
-    char *file;
+    gchar *file;
     XfceRc *rc;
+    gchar note_entry[12];
+    gint id;
 
-    GtkTextBuffer *buffer;
-    const gchar *text;
-
-    if (!(file = xfce_panel_plugin_lookup_rc_file (plugin)))
+    if (!(file = xfce_panel_plugin_save_location (plugin, TRUE)))
         return;
 
     DBG ("Look up file (%s)", file);
@@ -260,22 +268,29 @@
 
     if (rc)
       {
-        text = xfce_rc_read_entry (rc, "note", "");
+        id = 0;
+        g_snprintf (note_entry, 12, "note%d", id++);
+        while (xfce_rc_has_entry (rc, note_entry))
+          {
+            note_page_new (plugin, notes);
+            g_snprintf (note_entry, 12, "note%d", id++);
+          }
+        if (id == 1 && !xfce_rc_has_entry (rc, note_entry))
+            note_page_new (plugin, notes);
 
-        buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (notes->note->text));
-        gtk_text_buffer_set_text (buffer, text, -1);
-
-        gtk_text_view_set_buffer (GTK_TEXT_VIEW (notes->note->text), buffer);
-
         notes->note->x = xfce_rc_read_int_entry (rc, "pos_x", -1);
         notes->note->y = xfce_rc_read_int_entry (rc, "pos_y", -1);
+        notes->note->w = xfce_rc_read_int_entry (rc, "width", 242);
+        notes->note->h = xfce_rc_read_int_entry (rc, "height", 200);
 
         notes->options.show = xfce_rc_read_bool_entry (rc, "show", FALSE);
         notes->options.task_switcher =
-            xfce_rc_read_bool_entry (rc, "task_switcher", FALSE);
+            xfce_rc_read_bool_entry (rc, "task_switcher", TRUE);
         notes->options.always_on_top =
             xfce_rc_read_bool_entry (rc, "always_on_top", FALSE);
-        notes->options.stick = xfce_rc_read_bool_entry (rc, "stick", FALSE);
+        notes->options.stick = xfce_rc_read_bool_entry (rc, "stick", TRUE);
+        notes->options.vscrollbar = 
+            xfce_rc_read_bool_entry (rc, "vscrollbar", TRUE);
 
         xfce_rc_close (rc);
       }
@@ -289,8 +304,11 @@
     /* Show/hide the note */
     if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (notes->button)))
       {
-        gtk_window_move (GTK_WINDOW (notes->note->window), notes->note->x,
-                                     notes->note->y);
+      	if (notes->note->x != -1 && notes->note->y != -1)
+            gtk_window_move (GTK_WINDOW (notes->note->window), notes->note->x,
+                                         notes->note->y);
+        gtk_window_resize (GTK_WINDOW (notes->note->window), notes->note->w,
+                           notes->note->h);
 
         gtk_widget_show (notes->note->window);
 
@@ -306,40 +324,14 @@
       {
         gtk_window_get_position (GTK_WINDOW (notes->note->window),
                                  &notes->note->x, &notes->note->y);
+        gtk_window_get_default_size (GTK_WINDOW (notes->note->window),
+                                     &notes->note->w, &notes->note->h);
 
         gtk_widget_hide (notes->note->window);
       }
 }
 
 static void
-on_note_close (GtkWidget *widget, GtkToggleButton *panel_button)
-{
-    gtk_toggle_button_set_active (panel_button, FALSE);
-}
-
-static gboolean
-on_note_key_press (GtkWidget *widget, GdkEventKey *event, NotesPlugin *notes)
-{
-    if (event->type == GDK_KEY_PRESS && event->keyval == GDK_Escape)
-        on_note_close (widget, GTK_TOGGLE_BUTTON (notes->button));
-
-    return FALSE;
-}
-
-static void
-on_note_changed (GtkWidget *widget, NotesPlugin *notes)
-{
-    if (notes->timeout_id > 0)
-      {
-        g_source_remove (notes->timeout_id);
-        notes->timeout_id = 0;
-      }
-
-    notes->timeout_id = g_timeout_add (5000, (GSourceFunc) save_on_timeout,
-                                       notes);
-}
-
-static void
 on_options_response (GtkWidget *widget, int response, NotesPlugin *notes)
 {
     xfce_panel_plugin_unblock_menu (notes->plugin);

Modified: xfce4-notes-plugin/trunk/panel-plugin/notes.h
===================================================================
--- xfce4-notes-plugin/trunk/panel-plugin/notes.h	2006-07-24 19:59:41 UTC (rev 1788)
+++ xfce4-notes-plugin/trunk/panel-plugin/notes.h	2006-07-24 20:01:54 UTC (rev 1789)
@@ -30,6 +30,7 @@
     gboolean task_switcher;
     gboolean always_on_top;
     gboolean stick;
+    gboolean vscrollbar;
 }
 NotesOptions;
 
@@ -49,6 +50,8 @@
 NotesPlugin;
 
 NotesPlugin *   notes_new (XfcePanelPlugin *);
+Note *          note_new (NotesPlugin *);
+void            note_page_new (XfcePanelPlugin *, NotesPlugin *);
+gboolean        save_on_timeout (NotesPlugin *);
 
 #endif
-




More information about the Goodies-commits mailing list