[bijiben] Fix switch to already opened note
- From: Pierre-Yves Luyten <pyluyten src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [bijiben] Fix switch to already opened note
- Date: Thu, 7 Feb 2013 00:54:50 +0000 (UTC)
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]