mirror of
https://github.com/Gnucash/gnucash.git
synced 2024-12-01 13:09:41 -06:00
Push the summarybar inside of the created page widget. This solves
several problems with window resizing when switching between pages, or when turning the summary bar off and on. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@11827 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
b8641ed7ea
commit
f7a382607b
17
ChangeLog
17
ChangeLog
@ -1,3 +1,20 @@
|
|||||||
|
2005-11-03 David Hampton <hampton@employees.org>
|
||||||
|
|
||||||
|
* src/business/business-gnome/gnc-plugin-page-invoice.c:
|
||||||
|
* src/gnome-utils/gnc-main-window.c:
|
||||||
|
* src/gnome-utils/gnc-plugin-page.[ch]:
|
||||||
|
* src/gnome/gnc-plugin-page-register.c:
|
||||||
|
* src/gnome/gnc-plugin-page-account-tree.c: Push the summarybar
|
||||||
|
inside of the created page widget. This solves several problems
|
||||||
|
with window resizing when switching between pages, or when turning
|
||||||
|
the summary bar off and on.
|
||||||
|
|
||||||
|
* src/register/register-gnome/gnucash-sheet.c
|
||||||
|
(compute_optimal_height): This routine should always return the
|
||||||
|
minimal height the widget will accept, not the current height of
|
||||||
|
the widget. Returning the current height causes all sorts of
|
||||||
|
problems such as windows that are impossible to resize down.
|
||||||
|
|
||||||
2005-11-03 Neil Williams <linux@codehelp.co.uk>
|
2005-11-03 Neil Williams <linux@codehelp.co.uk>
|
||||||
|
|
||||||
* Various Makefile.am : Remove .cvsignore from
|
* Various Makefile.am : Remove .cvsignore from
|
||||||
|
@ -365,7 +365,7 @@ gnc_plugin_page_invoice_create_widget (GncPluginPage *plugin_page)
|
|||||||
{
|
{
|
||||||
GncPluginPageInvoice *page;
|
GncPluginPageInvoice *page;
|
||||||
GncPluginPageInvoicePrivate *priv;
|
GncPluginPageInvoicePrivate *priv;
|
||||||
GtkWidget *regWidget;
|
GtkWidget *regWidget, *widget;
|
||||||
|
|
||||||
ENTER("page %p", plugin_page);
|
ENTER("page %p", plugin_page);
|
||||||
page = GNC_PLUGIN_PAGE_INVOICE (plugin_page);
|
page = GNC_PLUGIN_PAGE_INVOICE (plugin_page);
|
||||||
@ -373,11 +373,15 @@ gnc_plugin_page_invoice_create_widget (GncPluginPage *plugin_page)
|
|||||||
if (priv->widget != NULL)
|
if (priv->widget != NULL)
|
||||||
return priv->widget;
|
return priv->widget;
|
||||||
|
|
||||||
priv->widget = gnc_invoice_create_page(priv->iw, page);
|
priv->widget = gtk_vbox_new (FALSE, 0);
|
||||||
gtk_widget_show (priv->widget);
|
gtk_widget_show (priv->widget);
|
||||||
|
|
||||||
|
widget = gnc_invoice_create_page(priv->iw, page);
|
||||||
|
gtk_widget_show (widget);
|
||||||
|
gtk_box_pack_start(GTK_BOX (priv->widget), widget, TRUE, TRUE, 0);
|
||||||
|
|
||||||
plugin_page->summarybar = gnc_invoice_window_create_summary_bar(priv->iw);
|
plugin_page->summarybar = gnc_invoice_window_create_summary_bar(priv->iw);
|
||||||
gtk_widget_show(plugin_page->summarybar);
|
gtk_box_pack_end(GTK_BOX (priv->widget), plugin_page->summarybar, FALSE, FALSE, 0);
|
||||||
|
|
||||||
regWidget = gnc_invoice_get_register(priv->iw);
|
regWidget = gnc_invoice_get_register(priv->iw);
|
||||||
if (regWidget) {
|
if (regWidget) {
|
||||||
|
@ -123,9 +123,6 @@ struct GncMainWindowPrivate
|
|||||||
GtkWidget *statusbar;
|
GtkWidget *statusbar;
|
||||||
GtkWidget *progressbar;
|
GtkWidget *progressbar;
|
||||||
|
|
||||||
GtkWidget *summarybar_dock;
|
|
||||||
gboolean show_summarybar;
|
|
||||||
|
|
||||||
GtkActionGroup *action_group;
|
GtkActionGroup *action_group;
|
||||||
|
|
||||||
GncPluginPage *current_page;
|
GncPluginPage *current_page;
|
||||||
@ -1169,11 +1166,6 @@ gnc_main_window_disconnect (GncMainWindow *window,
|
|||||||
gnc_plugin_page_unmerge_actions (page, window->ui_merge);
|
gnc_plugin_page_unmerge_actions (page, window->ui_merge);
|
||||||
gnc_plugin_page_unselected (page);
|
gnc_plugin_page_unselected (page);
|
||||||
window->priv->current_page = NULL;
|
window->priv->current_page = NULL;
|
||||||
|
|
||||||
if (page->summarybar) {
|
|
||||||
gtk_container_remove(GTK_CONTAINER(window->priv->summarybar_dock),
|
|
||||||
page->summarybar);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Remove it from the list of pages in the window */
|
/* Remove it from the list of pages in the window */
|
||||||
@ -1608,12 +1600,6 @@ gnc_main_window_setup_window (GncMainWindow *window)
|
|||||||
gtk_box_pack_start (GTK_BOX (main_vbox), priv->notebook,
|
gtk_box_pack_start (GTK_BOX (main_vbox), priv->notebook,
|
||||||
TRUE, TRUE, 0);
|
TRUE, TRUE, 0);
|
||||||
|
|
||||||
priv->show_summarybar = TRUE;
|
|
||||||
priv->summarybar_dock = gtk_vbox_new (FALSE, 0);
|
|
||||||
gtk_widget_show (priv->summarybar_dock);
|
|
||||||
gtk_box_pack_start (GTK_BOX (main_vbox), priv->summarybar_dock,
|
|
||||||
FALSE, TRUE, 0);
|
|
||||||
|
|
||||||
priv->statusbar = gtk_statusbar_new ();
|
priv->statusbar = gtk_statusbar_new ();
|
||||||
gtk_widget_show (priv->statusbar);
|
gtk_widget_show (priv->statusbar);
|
||||||
gtk_box_pack_start (GTK_BOX (main_vbox), priv->statusbar,
|
gtk_box_pack_start (GTK_BOX (main_vbox), priv->statusbar,
|
||||||
@ -1710,6 +1696,29 @@ gnc_main_window_add_widget (GtkUIManager *merge,
|
|||||||
gtk_widget_show (widget);
|
gtk_widget_show (widget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Should a summary bar be visible in this window? In order to
|
||||||
|
* prevent synchronization issues, the "ViewSummaryBar"
|
||||||
|
* GtkToggleAction is the sole source of information for whether or
|
||||||
|
* not any summary bar should be visibile in a window.
|
||||||
|
*
|
||||||
|
* @param window A pointer to the window in question.
|
||||||
|
*
|
||||||
|
* @param action If known, a pointer to the "ViewSummaryBar"
|
||||||
|
* GtkToggleAction. If NULL, the function will look up this action.
|
||||||
|
*
|
||||||
|
* @return TRUE if the summarybar should be visible.
|
||||||
|
*/
|
||||||
|
static gboolean
|
||||||
|
gnc_main_window_show_summarybar (GncMainWindow *window, GtkAction *action)
|
||||||
|
{
|
||||||
|
if (action == NULL)
|
||||||
|
action = gtk_action_group_get_action(window->priv->action_group,
|
||||||
|
"ViewSummaryAction");
|
||||||
|
if (action == NULL)
|
||||||
|
return TRUE;
|
||||||
|
return gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(action));
|
||||||
|
}
|
||||||
|
|
||||||
/** This function is invoked when the GtkNotebook switches pages. It
|
/** This function is invoked when the GtkNotebook switches pages. It
|
||||||
* is responsible for updating the rest of the window contents
|
* is responsible for updating the rest of the window contents
|
||||||
* outside of the notebook. I.E. Updating the user interface, the
|
* outside of the notebook. I.E. Updating the user interface, the
|
||||||
@ -1725,26 +1734,18 @@ gnc_main_window_switch_page (GtkNotebook *notebook,
|
|||||||
gint pos,
|
gint pos,
|
||||||
GncMainWindow *window)
|
GncMainWindow *window)
|
||||||
{
|
{
|
||||||
GtkWidget *child, *summarybar, *summarybar_dock;
|
GtkWidget *child;
|
||||||
GncPluginPage *page;
|
GncPluginPage *page;
|
||||||
gboolean immutable;
|
gboolean immutable, visible;
|
||||||
|
|
||||||
ENTER("Notebook %p, page, %p, index %d, window %p",
|
ENTER("Notebook %p, page, %p, index %d, window %p",
|
||||||
notebook, notebook_page, pos, window);
|
notebook, notebook_page, pos, window);
|
||||||
g_return_if_fail (GNC_IS_MAIN_WINDOW (window));
|
g_return_if_fail (GNC_IS_MAIN_WINDOW (window));
|
||||||
|
|
||||||
summarybar_dock = window->priv->summarybar_dock;
|
|
||||||
|
|
||||||
if (window->priv->current_page != NULL) {
|
if (window->priv->current_page != NULL) {
|
||||||
page = window->priv->current_page;
|
page = window->priv->current_page;
|
||||||
gnc_plugin_page_unmerge_actions (page, window->ui_merge);
|
gnc_plugin_page_unmerge_actions (page, window->ui_merge);
|
||||||
gnc_plugin_page_unselected (page);
|
gnc_plugin_page_unselected (page);
|
||||||
|
|
||||||
/* Remove old page's summarybar too */
|
|
||||||
if (page->summarybar) {
|
|
||||||
gtk_container_remove(GTK_CONTAINER(summarybar_dock),
|
|
||||||
page->summarybar);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
child = gtk_notebook_get_nth_page (notebook, pos);
|
child = gtk_notebook_get_nth_page (notebook, pos);
|
||||||
@ -1759,24 +1760,8 @@ gnc_main_window_switch_page (GtkNotebook *notebook,
|
|||||||
if (page != NULL) {
|
if (page != NULL) {
|
||||||
/* Update the user interface (e.g. menus and toolbars */
|
/* Update the user interface (e.g. menus and toolbars */
|
||||||
gnc_plugin_page_merge_actions (page, window->ui_merge);
|
gnc_plugin_page_merge_actions (page, window->ui_merge);
|
||||||
|
visible = gnc_main_window_show_summarybar(window, NULL);
|
||||||
/* install new summarybar (if any) */
|
gnc_plugin_page_show_summarybar (page, visible);
|
||||||
summarybar = page->summarybar;
|
|
||||||
if (summarybar) {
|
|
||||||
if (GTK_OBJECT_FLOATING(summarybar)) {
|
|
||||||
/* Own this object. This will prevent it from being deleted by
|
|
||||||
* gtk when it is removed from the summarybar. */
|
|
||||||
g_object_ref (summarybar);
|
|
||||||
gtk_object_sink (GTK_OBJECT (summarybar));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (window->priv->show_summarybar)
|
|
||||||
gtk_widget_show(summarybar);
|
|
||||||
else
|
|
||||||
gtk_widget_hide(summarybar);
|
|
||||||
gtk_box_pack_start(GTK_BOX(summarybar_dock), summarybar,
|
|
||||||
FALSE, TRUE, 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Allow page specific actions */
|
/* Allow page specific actions */
|
||||||
gnc_plugin_page_selected (page);
|
gnc_plugin_page_selected (page);
|
||||||
@ -1891,10 +1876,12 @@ gnc_main_window_cmd_view_toolbar (GtkAction *action, GncMainWindow *window)
|
|||||||
static void
|
static void
|
||||||
gnc_main_window_cmd_view_summary (GtkAction *action, GncMainWindow *window)
|
gnc_main_window_cmd_view_summary (GtkAction *action, GncMainWindow *window)
|
||||||
{
|
{
|
||||||
if (gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(action))) {
|
GList *item;
|
||||||
gtk_widget_show (window->priv->summarybar_dock);
|
gboolean visible;
|
||||||
} else {
|
|
||||||
gtk_widget_hide (window->priv->summarybar_dock);
|
visible = gnc_main_window_show_summarybar(window, action);
|
||||||
|
for (item = window->priv->installed_pages; item; item = g_list_next(item)) {
|
||||||
|
gnc_plugin_page_show_summarybar(item->data, visible);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1959,8 +1946,8 @@ gnc_main_window_cmd_window_move_page (GtkAction *action, GncMainWindow *window)
|
|||||||
g_object_unref(page);
|
g_object_unref(page);
|
||||||
|
|
||||||
/* just a little debugging. :-) */
|
/* just a little debugging. :-) */
|
||||||
DEBUG("Moved page %p (sb %p) from window %p to new window %p",
|
DEBUG("Moved page %p from window %p to new window %p",
|
||||||
page, page->summarybar, window, new_window);
|
page, window, new_window);
|
||||||
DEBUG("Old window current is %p, new window current is %p",
|
DEBUG("Old window current is %p, new window current is %p",
|
||||||
window->priv->current_page, new_window->priv->current_page);
|
window->priv->current_page, new_window->priv->current_page);
|
||||||
}
|
}
|
||||||
|
@ -164,6 +164,22 @@ gnc_plugin_page_destroy_widget (GncPluginPage *plugin_page)
|
|||||||
return klass->destroy_widget (plugin_page);
|
return klass->destroy_widget (plugin_page);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gnc_plugin_page_show_summarybar (GncPluginPage *page,
|
||||||
|
gboolean visible)
|
||||||
|
{
|
||||||
|
g_return_if_fail (GNC_IS_PLUGIN_PAGE (page));
|
||||||
|
|
||||||
|
if (!page->summarybar)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (visible) {
|
||||||
|
gtk_widget_show(page->summarybar);
|
||||||
|
} else {
|
||||||
|
gtk_widget_hide(page->summarybar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gnc_plugin_page_merge_actions (GncPluginPage *page,
|
gnc_plugin_page_merge_actions (GncPluginPage *page,
|
||||||
GtkUIManager *ui_merge)
|
GtkUIManager *ui_merge)
|
||||||
@ -410,10 +426,6 @@ gnc_plugin_page_finalize (GObject *object)
|
|||||||
priv->books = NULL;
|
priv->books = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (page->summarybar) {
|
|
||||||
g_object_unref(G_OBJECT(page->summarybar));
|
|
||||||
page->summarybar = NULL;
|
|
||||||
}
|
|
||||||
page->window = NULL; // Don't need to free it.
|
page->window = NULL; // Don't need to free it.
|
||||||
|
|
||||||
gnc_gobject_tracking_forget(object);
|
gnc_gobject_tracking_forget(object);
|
||||||
|
@ -93,6 +93,14 @@ GType gnc_plugin_page_get_type (void);
|
|||||||
GtkWidget *gnc_plugin_page_create_widget (GncPluginPage *plugin_page);
|
GtkWidget *gnc_plugin_page_create_widget (GncPluginPage *plugin_page);
|
||||||
void gnc_plugin_page_destroy_widget (GncPluginPage *plugin_page);
|
void gnc_plugin_page_destroy_widget (GncPluginPage *plugin_page);
|
||||||
|
|
||||||
|
/** Show the summarybar associated with this page.
|
||||||
|
*
|
||||||
|
* @param page The page whose summarybar visibility should be changed.
|
||||||
|
*
|
||||||
|
* @param visible Whether or not the summarybar should be shown..
|
||||||
|
*/
|
||||||
|
void gnc_plugin_page_show_summarybar (GncPluginPage *page, gboolean visible);
|
||||||
|
|
||||||
void gnc_plugin_page_merge_actions (GncPluginPage *plugin_page,
|
void gnc_plugin_page_merge_actions (GncPluginPage *plugin_page,
|
||||||
GtkUIManager *merge);
|
GtkUIManager *merge);
|
||||||
void gnc_plugin_page_unmerge_actions (GncPluginPage *plugin_page,
|
void gnc_plugin_page_unmerge_actions (GncPluginPage *plugin_page,
|
||||||
|
@ -500,6 +500,8 @@ gnc_plugin_page_account_tree_create_widget (GncPluginPage *plugin_page)
|
|||||||
gnc_get_current_session());
|
gnc_get_current_session());
|
||||||
|
|
||||||
plugin_page->summarybar = gnc_main_window_summary_new();
|
plugin_page->summarybar = gnc_main_window_summary_new();
|
||||||
|
gtk_box_pack_end (GTK_BOX (page->priv->widget), plugin_page->summarybar,
|
||||||
|
FALSE, FALSE, 0);
|
||||||
gtk_widget_show(plugin_page->summarybar);
|
gtk_widget_show(plugin_page->summarybar);
|
||||||
|
|
||||||
LEAVE("widget = %p", page->priv->widget);
|
LEAVE("widget = %p", page->priv->widget);
|
||||||
@ -524,11 +526,6 @@ gnc_plugin_page_account_tree_destroy_widget (GncPluginPage *plugin_page)
|
|||||||
page->priv->component_id = 0;
|
page->priv->component_id = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (plugin_page->summarybar) {
|
|
||||||
g_object_unref(G_OBJECT(plugin_page->summarybar));
|
|
||||||
plugin_page->summarybar = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
LEAVE("widget destroyed");
|
LEAVE("widget destroyed");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -615,8 +615,11 @@ gnc_plugin_page_register_create_widget (GncPluginPage *plugin_page)
|
|||||||
gnc_plugin_page_register_update_menus (page);
|
gnc_plugin_page_register_update_menus (page);
|
||||||
|
|
||||||
plugin_page->summarybar = gsr_create_summary_bar(priv->gsr);
|
plugin_page->summarybar = gsr_create_summary_bar(priv->gsr);
|
||||||
if (plugin_page->summarybar)
|
if (plugin_page->summarybar) {
|
||||||
gtk_widget_show_all(plugin_page->summarybar);
|
gtk_widget_show_all(plugin_page->summarybar);
|
||||||
|
gtk_box_pack_end(GTK_BOX (priv->widget), plugin_page->summarybar,
|
||||||
|
FALSE, FALSE, 0);
|
||||||
|
}
|
||||||
|
|
||||||
priv->component_manager_id =
|
priv->component_manager_id =
|
||||||
gnc_register_gui_component(GNC_PLUGIN_PAGE_REGISTER_NAME,
|
gnc_register_gui_component(GNC_PLUGIN_PAGE_REGISTER_NAME,
|
||||||
|
Loading…
Reference in New Issue
Block a user