void main_change_verse_tab_history(gint historynum) { PASSAGE_TAB_INFO *tab = cur_passage_tab; gchar *key; tab->current_history_item = historynum; settings.addhistoryitem = tab->first_back_click; XI_print(("commod = %s\n", tab->history_list[historynum].commod)); XI_print(("textmod = %s\n", tab->history_list[historynum].textmod)); key = main_update_nav_controls(tab->history_list[historynum].textmod, tab->history_list[historynum].verseref); main_display_commentary(tab->history_list[historynum].commod, key); main_display_bible(tab->history_list[historynum].textmod, key); main_keep_bibletext_dialog_in_sync(key); if (key) g_free(key); }
void shutdown_frontend(void) { if (pixbufs->pixbuf_closed) g_object_unref(pixbufs->pixbuf_closed); if (pixbufs->pixbuf_opened) g_object_unref(pixbufs->pixbuf_opened); if (pixbufs->pixbuf_helpdoc) g_object_unref(pixbufs->pixbuf_helpdoc); /* free verse list used for saving search results */ if (list_of_verses) { GList *chaser = list_of_verses; while (chaser) { RESULTS *list_item = (RESULTS *)chaser->data; g_free(list_item->module); g_free(list_item->key); g_free(list_item); chaser = g_list_next(chaser); } g_list_free(list_of_verses); list_of_verses = NULL; } gui_save_bookmarks_treeview(); /* if study pad file has changed since last save */ xml_save_settings_doc(settings.fnconfigure); xml_free_settings_doc(); main_shutdown_list(); XIPHOS_HTML_SHUTDOWN(); gui_notebook_main_shutdown(settings.browsing); /* free dir and file stuff */ g_free(settings.gSwordDir); g_free(settings.fnconfigure); g_free(settings.swbmDir); main_dialogs_shutdown(); main_delete_sidebar_search_backend(); main_delete_parallel_view(); g_string_free(navbar_versekey.module_name, TRUE); g_string_free(navbar_versekey.key, TRUE); XI_print(("\n%s\n", "Xiphos is shutdown")); }
void frontend_init(void) { XI_print(("%s\n", "Initiating Xiphos")); settings.comm_showing = TRUE; settings.displaySearchResults = FALSE; /* * setup sidebar */ gui_create_sidebar(widgets.epaned); /* * parallel stuff */ if (settings.havebible) { main_check_parallel_modules(); main_init_parallel_view(); gui_create_parallel_page(); gtk_widget_realize(widgets.html_parallel); main_set_parallel_options_at_start(); } settings.paratab_showing = FALSE; main_dialogs_setup(); gui_set_sidebar_program_start(); /* bring the major html widgets to life, then flush them clean. */ if (!gtk_widget_get_realized(GTK_WIDGET(widgets.html_text))) gtk_widget_realize(widgets.html_text); if (!gtk_widget_get_realized(GTK_WIDGET(widgets.html_comm))) gtk_widget_realize(widgets.html_comm); if (!gtk_widget_get_realized(GTK_WIDGET(widgets.html_book))) gtk_widget_realize(widgets.html_book); if (!gtk_widget_get_realized(GTK_WIDGET(widgets.html_dict))) gtk_widget_realize(widgets.html_dict); if (!gtk_widget_get_realized(GTK_WIDGET(widgets.html_previewer_text))) gtk_widget_realize(widgets.html_previewer_text); if (!gtk_widget_get_realized(GTK_WIDGET(sidebar.html_viewer_widget))) gtk_widget_realize(sidebar.html_viewer_widget); main_flush_widgets_content(); gui_show_previewer_in_sidebar(settings.show_previewer_in_sidebar); main_init_previewer(); }
void create_mainwindow(void) { char *imagename; GtkWidget *vbox_gs; GtkWidget *menu; GtkWidget *hbox25; GtkWidget *tab_button_icon; GtkWidget *label; #ifndef USE_WEBKIT2 GtkWidget *scrolledwindow; #endif GtkWidget *box_book; GdkPixbuf *pixbuf; /* GTK_SHADOW_NONE GTK_SHADOW_IN GTK_SHADOW_OUT GTK_SHADOW_ETCHED_IN GTK_SHADOW_ETCHED_OUT */ settings.shadow_type = GTK_SHADOW_IN; XI_print(("%s xiphos-%s\n", "Starting", VERSION)); XI_print(("%s\n\n", "Building Xiphos interface")); widgets.studypad_dialog = NULL; /* A rough scektch of the main window (widgets.app) and it's children * widgets.app * | * vbox_gs * | * +--|----+ * | | * menu hbox25 * | * widgets.epaned * | * widgets.vboxMain * | | * widgets.hboxtb widgets.page * | | * widgets.hpaned nav_toolbar * | | * widgets.vpaned---+ +----------------------------widgets.vpaned2---------------+ * | | | | * widgets.vbox_previewer widgets.vbox_text widgets.notebook_comm_book widgets.box_dict * | | | * widgets.notebook_bible_parallel widgets.box_comm box_book * | * widgets.notebook_text * */ // The toplevel Xiphos window widgets.app = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(widgets.app), _("Xiphos - Bible Study Software")); g_object_set_data(G_OBJECT(widgets.app), "widgets.app", widgets.app); gtk_widget_set_size_request(widgets.app, 680, 425); gtk_widget_set_can_focus(widgets.app, 1); gtk_window_set_resizable(GTK_WINDOW(widgets.app), TRUE); // The app icon. // FIXME:: This should be a big copy of the logo because GTK does the scaling (GTK 3.16?) imagename = image_locator("gs2-48x48.png"); pixbuf = gdk_pixbuf_new_from_file(imagename, NULL); g_free(imagename); gtk_window_set_icon(GTK_WINDOW(widgets.app), pixbuf); // The main box for our toplevel window. UI_VBOX(vbox_gs, FALSE, 0); gtk_widget_show(vbox_gs); gtk_container_add(GTK_CONTAINER(widgets.app), vbox_gs); // Add the main menu. menu = gui_create_main_menu(); gtk_box_pack_start(GTK_BOX(vbox_gs), menu, FALSE, TRUE, 0); // Another box UI_HBOX(hbox25, FALSE, 0); gtk_widget_show(hbox25); gtk_box_pack_start(GTK_BOX(vbox_gs), hbox25, TRUE, TRUE, 0); // widgets.epaned widgets.epaned = UI_HPANE(); gtk_widget_show(widgets.epaned); #ifndef HAVE_GTK_314 gtk_container_set_border_width(GTK_CONTAINER(widgets.epaned), 4); #endif gtk_box_pack_start(GTK_BOX(hbox25), widgets.epaned, TRUE, TRUE, 0); // Another box UI_VBOX(widgets.vboxMain, FALSE, 0); gtk_widget_show(widgets.vboxMain); gtk_paned_pack2(GTK_PANED(widgets.epaned), widgets.vboxMain, TRUE, TRUE); #ifndef HAVE_GTK_314 gtk_container_set_border_width(GTK_CONTAINER(widgets.vboxMain), 2); #endif /* * Notebook to have separate passages opened at once the passages are not * actually open but are switched between similar to bookmarks */ UI_HBOX(widgets.hboxtb, FALSE, 0); if (settings.browsing) gtk_widget_show(widgets.hboxtb); gtk_box_pack_start(GTK_BOX(widgets.vboxMain), widgets.hboxtb, FALSE, FALSE, 0); widgets.button_new_tab = gtk_button_new(); // Don't show button here in case !settings.browsing #ifdef HAVE_GTK_310 tab_button_icon = gtk_image_new_from_icon_name("tab-new-symbolic", GTK_ICON_SIZE_SMALL_TOOLBAR); #else tab_button_icon = gtk_image_new_from_stock(GTK_STOCK_ADD, GTK_ICON_SIZE_SMALL_TOOLBAR); #endif gtk_widget_show(tab_button_icon); gtk_container_add(GTK_CONTAINER(widgets.button_new_tab), tab_button_icon); gtk_button_set_relief(GTK_BUTTON(widgets.button_new_tab), GTK_RELIEF_NONE); gtk_box_pack_start(GTK_BOX(widgets.hboxtb), widgets.button_new_tab, FALSE, FALSE, 0); gtk_widget_set_tooltip_text(widgets.button_new_tab, _("Open a new tab")); widgets.notebook_main = gtk_notebook_new(); gtk_widget_show(widgets.notebook_main); gtk_box_pack_start(GTK_BOX(widgets.hboxtb), widgets.notebook_main, TRUE, TRUE, 0); gtk_widget_set_size_request(widgets.notebook_main, -1, 25); gtk_notebook_set_scrollable(GTK_NOTEBOOK(widgets.notebook_main), TRUE); gtk_notebook_popup_enable(GTK_NOTEBOOK(widgets.notebook_main)); gtk_notebook_set_show_border(GTK_NOTEBOOK(widgets.notebook_main), FALSE); // Main passage tabbed notebook end // Another box UI_VBOX(widgets.page, FALSE, 0); gtk_widget_show(widgets.page); gtk_box_pack_start(GTK_BOX(widgets.vboxMain), widgets.page, TRUE, TRUE, 0); //nav toolbar nav_toolbar = gui_navbar_versekey_new(); gtk_box_pack_start(GTK_BOX(widgets.page), nav_toolbar, FALSE, FALSE, 0); // widgets.hpaned widgets.hpaned = UI_HPANE(); gtk_widget_show(widgets.hpaned); gtk_box_pack_start(GTK_BOX(widgets.page), widgets.hpaned, TRUE, TRUE, 0); // widgets.vpaned widgets.vpaned = UI_VPANE(); gtk_widget_show(widgets.vpaned); gtk_widget_set_size_request(widgets.vpaned, 50, -1); gtk_paned_pack1(GTK_PANED(widgets.hpaned), widgets.vpaned, TRUE, FALSE); // widgets.vpaned2 widgets.vpaned2 = UI_VPANE(); gtk_widget_show(widgets.vpaned2); gtk_widget_set_size_request(widgets.vpaned2, 50, -1); gtk_paned_pack2(GTK_PANED(widgets.hpaned), widgets.vpaned2, TRUE, FALSE); // widgets.vbox_text UI_VBOX(widgets.vbox_text, FALSE, 0); gtk_widget_show(widgets.vbox_text); gtk_paned_pack1(GTK_PANED(widgets.vpaned), widgets.vbox_text, TRUE, TRUE); // Bible/parallel notebook widgets.notebook_bible_parallel = gtk_notebook_new(); gtk_widget_show(widgets.notebook_bible_parallel); gtk_box_pack_start(GTK_BOX(widgets.vbox_text), widgets.notebook_bible_parallel, TRUE, TRUE, 0); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(widgets.notebook_bible_parallel), GTK_POS_BOTTOM); gtk_notebook_set_show_tabs(GTK_NOTEBOOK(widgets.notebook_bible_parallel), TRUE); gtk_notebook_set_show_border(GTK_NOTEBOOK(widgets.notebook_bible_parallel), FALSE); gtk_container_set_border_width(GTK_CONTAINER(widgets.notebook_bible_parallel), 1); g_signal_connect(G_OBJECT(widgets.notebook_bible_parallel), "change-current-page", G_CALLBACK(on_notebook_bible_parallel_switch_page), NULL); // Text notebook (The bible text show in the standard view) widgets.notebook_text = gui_create_bible_pane(); gtk_container_add(GTK_CONTAINER(widgets.notebook_bible_parallel), widgets.notebook_text); label = gtk_label_new(_("Standard View")); gtk_widget_show(label); gtk_notebook_set_tab_label(GTK_NOTEBOOK(widgets.notebook_bible_parallel), gtk_notebook_get_nth_page(GTK_NOTEBOOK(widgets.notebook_bible_parallel), 0), label); // Another box (For the previewer?) UI_VBOX(widgets.vbox_previewer, FALSE, 0); gtk_widget_show(widgets.vbox_previewer); gtk_paned_pack2(GTK_PANED(widgets.vpaned), widgets.vbox_previewer, TRUE, TRUE); gtk_container_set_border_width(GTK_CONTAINER(widgets.vbox_previewer), 2); #ifndef USE_WEBKIT2 scrolledwindow = gtk_scrolled_window_new(NULL, NULL); gtk_widget_show(scrolledwindow); gtk_box_pack_start(GTK_BOX(widgets.vbox_previewer), scrolledwindow, TRUE, TRUE, 0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type((GtkScrolledWindow *) scrolledwindow, settings.shadow_type); #endif widgets.html_previewer_text = GTK_WIDGET(XIPHOS_HTML_NEW(NULL, FALSE, VIEWER_TYPE)); gtk_widget_show(widgets.html_previewer_text); #ifdef USE_WEBKIT2 gtk_box_pack_start(GTK_BOX(widgets.vbox_previewer), widgets.html_previewer_text, TRUE, TRUE, 0); #else gtk_container_add(GTK_CONTAINER(scrolledwindow), widgets.html_previewer_text); #endif // Commentary/book notebook widgets.notebook_comm_book = gtk_notebook_new(); gtk_widget_show(widgets.notebook_comm_book); gtk_paned_pack1(GTK_PANED(widgets.vpaned2), widgets.notebook_comm_book, TRUE, TRUE); gtk_container_set_border_width(GTK_CONTAINER(widgets.notebook_comm_book), 1); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(widgets.notebook_comm_book), GTK_POS_BOTTOM); gtk_notebook_set_show_tabs(GTK_NOTEBOOK(widgets.notebook_comm_book), TRUE); gtk_notebook_set_show_border(GTK_NOTEBOOK(widgets.notebook_comm_book), FALSE); // Commentary pane widgets.box_comm = gui_create_commentary_pane(); gtk_container_add(GTK_CONTAINER(widgets.notebook_comm_book), widgets.box_comm); label = gtk_label_new(_("Commentary View")); gtk_widget_show(label); gtk_notebook_set_tab_label(GTK_NOTEBOOK(widgets.notebook_comm_book), gtk_notebook_get_nth_page(GTK_NOTEBOOK(widgets.notebook_comm_book), 0), label); // Book pane box_book = gui_create_book_pane(); gtk_container_add(GTK_CONTAINER(widgets.notebook_comm_book), box_book); label = gtk_label_new(_("Book View")); gtk_widget_show(label); gtk_notebook_set_tab_label(GTK_NOTEBOOK(widgets.notebook_comm_book), gtk_notebook_get_nth_page(GTK_NOTEBOOK(widgets.notebook_comm_book), 1), label); // Dict/lex widgets.box_dict = gui_create_dictionary_pane(); gtk_paned_pack2(GTK_PANED(widgets.vpaned2), widgets.box_dict, TRUE, TRUE); // Statusbar widgets.appbar = gtk_statusbar_new(); if (settings.statusbar) { gtk_widget_show(widgets.appbar); } #ifndef USE_GTK_3 gtk_statusbar_set_has_resize_grip(GTK_STATUSBAR(widgets.appbar), TRUE); #endif gtk_box_pack_start(GTK_BOX(vbox_gs), widgets.appbar, FALSE, TRUE, 0); gui_set_statusbar(_("Welcome to Xiphos")); g_signal_connect((gpointer)vbox_gs, "key_press_event", G_CALLBACK(on_vbox1_key_press_event), NULL); g_signal_connect((gpointer)vbox_gs, "key_release_event", G_CALLBACK(on_vbox1_key_release_event), NULL); g_signal_connect(G_OBJECT(widgets.notebook_comm_book), "switch_page", G_CALLBACK(on_notebook_comm_book_switch_page), NULL); g_signal_connect(G_OBJECT(widgets.app), "delete_event", G_CALLBACK(delete_event), NULL); g_signal_connect((gpointer)widgets.app, "configure_event", G_CALLBACK(on_configure_event), NULL); g_signal_connect(G_OBJECT(widgets.epaned), "button_release_event", G_CALLBACK(epaned_button_release_event), (gchar *)"epaned"); g_signal_connect(G_OBJECT(widgets.vpaned), "button_release_event", G_CALLBACK(epaned_button_release_event), (gchar *)"vpaned"); g_signal_connect(G_OBJECT(widgets.vpaned2), "button_release_event", G_CALLBACK(epaned_button_release_event), (gchar *)"vpaned2"); g_signal_connect(G_OBJECT(widgets.hpaned), "button_release_event", G_CALLBACK(epaned_button_release_event), (gchar *)"hpaned1"); gtk_widget_grab_focus(navbar_versekey.lookup_entry); gtk_window_set_default_size((GtkWindow *)widgets.app, settings.gs_width, settings.gs_height); main_window_created = TRUE; }
void frontend_display(const char *tabs) { GdkScreen *screen = gdk_screen_get_default(); gint screen_width = gdk_screen_get_width(screen); gint screen_height = gdk_screen_get_height(screen); XI_print(("%s\n", "Displaying Xiphos")); gui_show_main_window(); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widgets.viewtexts_item), settings.showtexts); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widgets.viewcomms_item), settings.showcomms); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widgets.viewdicts_item), settings.showdicts); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widgets.viewpreview_item), settings.showpreview); gui_show_hide_preview(settings.showpreview); gui_show_hide_texts(settings.showtexts); gui_show_hide_dicts(settings.showdicts); gui_show_hide_comms(settings.showcomms); /* * a little paranoia: * clamp geometry values to a reasonable bound. * sometimes xiphos gets insane reconfig events as it dies, * especially if it's due to just shutting linux down. */ if (settings.app_x < 0) settings.app_x = 0; if (settings.app_x > (screen_width - 100)) settings.app_x = screen_width - 100; if (settings.app_y < 0) settings.app_y = 0; if (settings.app_y > (screen_height - 100)) settings.app_y = screen_height - 100; if (settings.maximized) gtk_window_maximize(GTK_WINDOW(widgets.app)); gtk_window_move(GTK_WINDOW(widgets.app), settings.app_x, settings.app_y); /* gecko needs the widgets to be visible before writing */ sync_windows(); // setup passage notebook // if (settings.browsing) { gui_notebook_main_setup(settings.browsing, tabs); /* } else { url = g_strdup_printf("sword://%s/%s",settings.DictWindowModule, settings.dictkey); main_url_handler(url); g_free(url); gtk_widget_realize(widgets.html_book); url = g_strdup_printf("sword://%s/%d",settings.book_mod, settings.book_offset); main_url_handler(url); g_free(url); settings.addhistoryitem = FALSE; url = g_strdup_printf("sword://%s/%s",settings.MainWindowModule, settings.currentverse); main_url_handler(url); g_free(url); } */ /* must be set after tab stuff is done */ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widgets.parallel_tab_item), settings.showparatab); g_signal_connect(G_OBJECT(widgets.parallel_tab_item), "toggled", G_CALLBACK(gui_parallel_tab_activate), NULL); gui_show_previewer_in_sidebar(settings.show_previewer_in_sidebar); /* open saved windows as needed */ if (settings.display_parallel) on_undockInt_activate(NULL); if (settings.display_modmgr) gui_open_mod_mgr(); if (settings.display_advsearch) main_open_search_dialog(); if (settings.display_prefs) gui_setup_preferences_dialog(); if (settings.showdevotional) main_display_devotional(); else main_init_previewer(); gtk_widget_grab_focus(sidebar.module_list); XI_print(("%s\n\n", "done")); }
static void dialog_destroy(GObject *object, gpointer data) { g_free(dialog); dialog = NULL; XI_print(("\nall done\n")); }