}
pub fn select_note_from(&mut self, from: NoteSelectFrom) -> Option<()> {
- self.detach_current_note();
- self.selected_note = None;
- self.selected_index = None;
-
let mut add_to_nav = false;
let (selected_index, note) = match from {
NoteSelectFrom::ListSelection(s) => {
let index = s.selected_index()?;
+ if let Some(current_selection) = self.selected_index {
+ if current_selection == index {
+ return None
+ }
+ }
self.detach_current_note();
let note = s.selected_element_mut(self.notes.data_mut())?;
add_to_nav = true;
},
NoteSelectFrom::NavigationItem(nav) => {
let index = self.find_note(&nav.note_id?)?;
+ if let Some(current_selection) = self.selected_index {
+ if current_selection == index {
+ return None
+ }
+ }
self.detach_current_note();
self.notes.select_with_event(index as i32, false);
let note = self.notes.data_mut().get_mut(index)?;
(index, note)
}
};
+
self.selected_index = Some(selected_index);
let is_new = note.is_new();
g_object_set_data(G_OBJECT(obj->widget), "ui_window_splitview", content);
g_object_set_data(G_OBJECT(obj->widget), "ui_left_panel", vbox);
g_object_set_data(G_OBJECT(obj->widget), "ui_right_panel", right_vbox);
+ g_object_set_data(G_OBJECT(obj->widget), "ui_left_panel_top", toolbar_view);
+ g_object_set_data(G_OBJECT(obj->widget), "ui_right_panel_top", right_panel);
}
-
+
GtkWidget *content_box = vbox;
-
+
if(sidebar) {
GtkWidget *splitview = adw_overlay_split_view_new();
adw_application_window_set_content(ADW_APPLICATION_WINDOW(obj->widget), splitview);
-
+
GtkWidget *sidebar_toolbar_view = adw_toolbar_view_new();
adw_overlay_split_view_set_sidebar(ADW_OVERLAY_SPLIT_VIEW(splitview), sidebar_toolbar_view);
headerbar_sidebar = adw_header_bar_new();
adw_header_bar_set_show_title(ADW_HEADER_BAR(headerbar_sidebar), FALSE);
adw_toolbar_view_add_top_bar(ADW_TOOLBAR_VIEW(sidebar_toolbar_view), headerbar_sidebar);
-
+
adw_overlay_split_view_set_content(ADW_OVERLAY_SPLIT_VIEW(splitview), content);
-
+
g_object_set_data(G_OBJECT(obj->widget), "ui_sidebar", sidebar_toolbar_view);
} else {
adw_application_window_set_content(ADW_APPLICATION_WINDOW(obj->widget), content);
}
-
+
const char *show_title = ui_get_property("ui.gtk.window.showtitle");
if(show_title) {
if(!strcmp(show_title, "main") && sidebar) {
adw_header_bar_set_show_title(ADW_HEADER_BAR(headerbar_sidebar), TRUE);
}
}
-
+
adw_toolbar_view_add_top_bar(ADW_TOOLBAR_VIEW(toolbar_view), headerbar_main);
g_object_set_data(G_OBJECT(obj->widget), "ui_headerbar", headerbar_main);
-
+
if(!simple) {
ui_fill_headerbar(obj, headerbar_sidebar, headerbar_main, headerbar_right);
}
//GtkWidget *hb = ui_create_headerbar(obj);
//gtk_window_set_titlebar(GTK_WINDOW(obj->widget), hb);
}
-
+
GtkWidget *content_box = ui_gtk_vbox_new(0);
WINDOW_SET_CONTENT(obj->widget, vbox);
if(sidebar || splitview) {
g_object_set_data(G_OBJECT(obj->widget), "ui_sidebar", sidebar_vbox);
gtk_paned_set_position(GTK_PANED(paned), 200);
}
-
+
if(splitview) {
GtkWidget *content_paned = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL);
gtk_paned_set_position(GTK_PANED(content_paned), splitview_pos);
PANED_SET_CHILD2(paned, content_paned);
-
+
GtkWidget *right_content_box = ui_gtk_vbox_new(0);
PANED_SET_CHILD1(content_paned, content_box);
PANED_SET_CHILD2(content_paned, right_content_box);
-
+
g_object_set_data(G_OBJECT(obj->widget), "ui_window_splitview", content_paned);
g_object_set_data(G_OBJECT(obj->widget), "ui_left_panel", content_box);
g_object_set_data(G_OBJECT(obj->widget), "ui_right_panel", right_content_box);
+ g_object_set_data(G_OBJECT(obj->widget), "ui_left_panel_top", content_box);
+ g_object_set_data(G_OBJECT(obj->widget), "ui_right_panel_top", right_content_box);
} else {
PANED_SET_CHILD2(paned, content_box);
}
-
+
BOX_ADD_EXPAND(GTK_BOX(vbox), paned);
} else {
BOX_ADD_EXPAND(GTK_BOX(vbox), content_box);
}
-
+
#endif
-
+
// window content
// the content has a (TODO: not yet) configurable frame
// TODO: really? why
GtkWidget *frame = gtk_frame_new(NULL);
gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_NONE);
gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0);
-
+
// content vbox
GtkWidget *content_box = ui_gtk_vbox_new(0);
gtk_container_add(GTK_CONTAINER(frame), content_box);
*/
UiContainer *container = ui_box_container(obj, content_box, UI_CONTAINER_VBOX);
uic_object_push_container(obj, container);
-
+
nwindows++;
return obj;
}
UIEXPORT void ui_splitview_window_set_visible(UiObject *obj, int pane, UiBool visible) {
GtkWidget *panel = NULL;
if(pane == 0) {
- panel = g_object_get_data(G_OBJECT(obj->widget), "ui_left_panel");
+ panel = g_object_get_data(G_OBJECT(obj->widget), "ui_left_panel_top");
} else if(pane == 1) {
- panel = g_object_get_data(G_OBJECT(obj->widget), "ui_right_panel");
+ panel = g_object_get_data(G_OBJECT(obj->widget), "ui_right_panel_top");
}
if(panel == NULL) {