[bijiben] Fix switch to already opened note



commit 9cf65b0a02f534c06a3a93546b3ea8867737460a
Author: Pierre-Yves Luyten <py luyten fr>
Date:   Thu Feb 7 01:53:45 2013 +0100

    Fix switch to already opened note
    
    We can't rely on window's title since a long time. Use a pointer to the note.

 src/bjb-main-view.c         |   25 ++++++++++++++-----------
 src/bjb-note-view.c         |    1 +
 src/bjb-window-base.c       |   33 ++++++++++++++++++++++++++++-----
 src/bjb-window-base.h       |    4 ++++
 src/libbiji/biji-note-obj.c |   14 ++++++--------
 src/libbiji/biji-note-obj.h |    2 +-
 6 files changed, 54 insertions(+), 25 deletions(-)
---
diff --git a/src/bjb-main-view.c b/src/bjb-main-view.c
index 7ecbfd3..e2ad649 100644
--- a/src/bjb-main-view.c
+++ b/src/bjb-main-view.c
@@ -190,29 +190,32 @@ switch_to_note_view (BjbMainView *self, BijiNoteObj *note)
 }
 
 static void
-show_window_if_title_same(GtkWindow *window, BijiNoteObj *to_open)
+show_window_if_note (gpointer data, gpointer user_data)
 {
-  if ( g_strcmp0 (gtk_window_get_title (window),
-                  biji_note_obj_get_title(to_open)) == 0 )
-  {
-    gtk_window_present(window);
-  }
+  BjbWindowBase *window = data;
+  BijiNoteObj *to_open = user_data;
+  BijiNoteObj *cur = NULL;
+
+  cur = bjb_window_base_get_note (window);
+
+  if (cur && biji_note_obj_are_same (to_open, cur))
+    gtk_window_present (data);
 }
 
 static void
-switch_to_note(BjbMainView *view, BijiNoteObj *to_open)
+switch_to_note (BjbMainView *view, BijiNoteObj *to_open)
 {
-  // If the note is already opened in another window, just show it.
-  if ( biji_note_obj_is_opened(to_open) )
+  /* If the note is already opened in another window, just show it. */
+  if (biji_note_obj_is_opened (to_open))
   {
     GList *notes ;
 
     notes = gtk_application_get_windows(GTK_APPLICATION(g_application_get_default()));
-    g_list_foreach (notes,(GFunc)show_window_if_title_same,to_open);
+    g_list_foreach (notes, show_window_if_note, to_open);
     return ;
   }
 
-  // Otherwise, leave main view to show this note into current window.
+  /* Otherwise, leave main view */
   switch_to_note_view(view,to_open);
 }
 
diff --git a/src/bjb-note-view.c b/src/bjb-note-view.c
index d49493e..f0261b9 100644
--- a/src/bjb-note-view.c
+++ b/src/bjb-note-view.c
@@ -605,6 +605,7 @@ bjb_note_view_constructed (GObject *obj)
 
   /* Show & let's go */
   gtk_widget_show_all (priv->window);
+  bjb_window_base_set_note (BJB_WINDOW_BASE (priv->window), priv->note);
   bjb_window_base_switch_to (BJB_WINDOW_BASE (priv->window), NOTE_VIEW);
 }
 
diff --git a/src/bjb-window-base.c b/src/bjb-window-base.c
index f51fd6b..c9a739c 100644
--- a/src/bjb-window-base.c
+++ b/src/bjb-window-base.c
@@ -29,11 +29,12 @@ struct _BjbWindowBasePriv
   GtkWidget            *notebook;
   BjbWindowViewType     current_view;
   BjbMainView          *view;
-  BjbNoteView          *note_view;
-
   ClutterActor         *stage, *note_stage, *frame;
   gchar                *entry;
 
+  /* when a note is opened */
+  BijiNoteObj          *note;
+
   /* To avoid loiding several times */
   PangoFontDescription *font ;
 };
@@ -97,7 +98,8 @@ bjb_window_base_init (BjbWindowBase *self)
                                            BJB_TYPE_WINDOW_BASE,
                                            BjbWindowBasePriv);
   priv = self->priv;
-    
+  priv->note = NULL;
+
   gtk_window_set_default_size (GTK_WINDOW (self), BJB_WIDTH, BJB_HEIGHT);
   gtk_window_set_position (GTK_WINDOW (self),GTK_WIN_POS_CENTER);
   gtk_window_set_title (GTK_WINDOW (self), BIJIBEN_MAIN_WIN_TITLE);
@@ -227,12 +229,33 @@ bjb_window_base_get_stage (BjbWindowBase *bwb, BjbWindowViewType type)
 }
 
 void
+bjb_window_base_set_note (BjbWindowBase *self, BijiNoteObj *note)
+{
+  g_return_if_fail (BJB_IS_WINDOW_BASE (self));
+
+  self->priv->note = note;
+}
+
+BijiNoteObj *
+bjb_window_base_get_note (BjbWindowBase *self)
+{
+  g_return_val_if_fail (BJB_IS_WINDOW_BASE (self), NULL);
+
+  return self->priv->note;
+}
+
+void
 bjb_window_base_switch_to (BjbWindowBase *bwb, BjbWindowViewType type)
 {
+  BjbWindowBasePriv *priv = bwb->priv;
+
   if (type == MAIN_VIEW)
-    bjb_main_view_connect_signals (bwb->priv->view);
+  {
+    priv->note = NULL;
+    bjb_main_view_connect_signals (priv->view);
+  }
 
-  gtk_notebook_set_current_page (GTK_NOTEBOOK (bwb->priv->notebook), type);
+  gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook), type);
 }
 
 BijiNoteBook *
diff --git a/src/bjb-window-base.h b/src/bjb-window-base.h
index bf7e87b..9333d80 100644
--- a/src/bjb-window-base.h
+++ b/src/bjb-window-base.h
@@ -67,6 +67,10 @@ gchar * bjb_window_base_get_entry(GtkWidget *win) ;
 
 gpointer bjb_window_base_get_main_view (BjbWindowBase *self);
 
+BijiNoteObj * bjb_window_base_get_note (BjbWindowBase *self);
+
+void bjb_window_base_set_note (BjbWindowBase *self, BijiNoteObj *note);
+
 // DEBUG 
 void biji_application_print_note_id(GtkWindow* win);
 
diff --git a/src/libbiji/biji-note-obj.c b/src/libbiji/biji-note-obj.c
index 9168adc..b4409d5 100644
--- a/src/libbiji/biji-note-obj.c
+++ b/src/libbiji/biji-note-obj.c
@@ -310,15 +310,13 @@ biji_note_obj_get_note_book(BijiNoteObj *note)
 }
 
 gboolean 
-note_obj_are_same(BijiNoteObj *a, BijiNoteObj* b)
-{ 
-  if ( biji_note_id_equal (a->priv->id,b->priv->id) )
-  {
-    if ( g_strcmp0 (a->priv->raw_text ,b->priv->raw_text) == 0 )
-      return TRUE ;
-  }
+biji_note_obj_are_same (BijiNoteObj *a, BijiNoteObj* b)
+{
+  if (biji_note_id_equal (a->priv->id,b->priv->id)
+      && g_strcmp0 (a->priv->raw_text ,b->priv->raw_text) == 0)
+    return TRUE;
 
-  return FALSE ;
+  return FALSE;
 }
 
 /* First cancel timeout
diff --git a/src/libbiji/biji-note-obj.h b/src/libbiji/biji-note-obj.h
index ce27b0a..3fe0863 100644
--- a/src/libbiji/biji-note-obj.h
+++ b/src/libbiji/biji-note-obj.h
@@ -73,7 +73,7 @@ void _biji_note_obj_set_book(BijiNoteObj *note, gpointer biji_note_book);
 
 gboolean biji_note_obj_trash (BijiNoteObj *dead);
 
-gboolean note_obj_are_same(BijiNoteObj *a, BijiNoteObj* b);
+gboolean biji_note_obj_are_same(BijiNoteObj *a, BijiNoteObj* b);
 
 ///////////////////////////////////////////////////////////////////// Metadata 
 


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