Fix the "View" menu items to track properly when a new data file is

opened. #99598


git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@8322 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
David Hampton
2003-05-17 06:06:18 +00:00
parent 85bcf951b2
commit d2863ba63a
4 changed files with 287 additions and 105 deletions
+10
View File
@@ -1,3 +1,13 @@
2003-05-16 David Hampton <hampton@employees.org>
* src/gnome/window-main.c:
* src/gnome-utils/gnc-mdi-utils.c:
* src/gnome-utils/gnc-mdi-utils.h: Fix the "View xxxbar" menu
items to track properly when a new data file is opened. #99598
Consolidate the code for manipulating the View/Statusbar and
View/Summarybar menu items. Work around a Gnome MDI bug as best
as possible.
2003-05-16 Derek Atkins <derek@ihtfp.com>
* src/gnome/reconcile-list.[ch]: Port to the gnc-query-list.
+199 -8
View File
@@ -28,6 +28,7 @@
#include "dialog-utils.h"
#include "global-options.h"
#include "gnc-component-manager.h"
#include "gnc-engine-util.h"
#include "gnc-html.h"
#include "gnc-mdi-utils.h"
#include "gnc-ui-util.h"
@@ -35,8 +36,13 @@
#define GNC_MDI_CM_CLASS "gnc-mdi"
static short module = MOD_GUI;
static GNCMDIInfo *gnc_mdi_current = NULL;
static gboolean gnc_toolbar_visible = TRUE;
static gboolean gnc_statusbar_visible = TRUE;
static gboolean gnc_summarybar_visible = TRUE;
/*
* These strings must match the dispatch enum listed at the start of
@@ -90,12 +96,36 @@ gnc_mdi_get_toolbar_visibility (void)
return(gnc_toolbar_visible);
}
gboolean
gnc_mdi_get_statusbar_visibility (void)
{
return(gnc_statusbar_visible);
}
gboolean
gnc_mdi_get_summarybar_visibility (void)
{
return(gnc_summarybar_visible);
}
void
gnc_mdi_set_toolbar_visibility (gboolean visible)
{
gnc_toolbar_visible = visible;
}
void
gnc_mdi_set_statusbar_visibility (gboolean visible)
{
gnc_statusbar_visible = visible;
}
void
gnc_mdi_set_summarybar_visibility (gboolean visible)
{
gnc_summarybar_visible = visible;
}
void
gnc_mdi_show_progress (const char *message, double percentage)
{
@@ -459,13 +489,131 @@ gnc_mdi_show_toolbar (GNCMDIChildInfo *mc)
{
GtkWidget *dockitem = GTK_WIDGET(mc->toolbar)->parent;
ENTER("mc=%p, mc->app=%p", mc, mc ? mc->app : 0);
if (gnc_toolbar_visible) {
DEBUG("showing toolbar");
gtk_widget_show(dockitem);
} else {
gtk_widget_hide(dockitem);
if (mc->app)
DEBUG("hiding toolbar");
if (mc->app) {
gtk_widget_queue_resize(mc->app->dock);
DEBUG("dock resize");
}
}
LEAVE(" ");
}
/**
* gnc_mdi_show_statusbar
*
* @mc: A pointer to the child data structure for the GNC child
* whose statusbar should be shown/hidden.
*
* This routine shows or hides the gnome dock item containing the
* statusbar.
*/
void
gnc_mdi_show_statusbar (GNCMDIChildInfo *mc)
{
ENTER("mc=%p, mc->app=%p", mc, mc ? mc->app : 0);
if (!mc || !mc->app) {
LEAVE("oops");
return;
}
if (gnc_statusbar_visible) {
gtk_widget_show(mc->app->statusbar);
} else {
gtk_widget_hide(mc->app->statusbar);
gtk_widget_queue_resize(mc->app->statusbar->parent);
}
LEAVE(" ");
}
/**
* gnc_mdi_show_summarybar
*
* @mc: A pointer to the child data structure for the GNC child
* whose summarybar should be shown/hidden.
*
* This routine shows or hides the gnome dock item containing the
* summarybar.
*/
void
gnc_mdi_show_summarybar (GNCMDIChildInfo *mc)
{
GnomeDockItem *summarybar;
guint dc1, dc2, dc3, dc4;
ENTER("mc=%p, mc->app=%p", mc, mc ? mc->app : 0);
if (!mc || !mc->app) {
LEAVE("oops");
return;
}
summarybar = gnome_dock_get_item_by_name(GNOME_DOCK(mc->app->dock),
"Summary Bar",
&dc1, &dc2, &dc3, &dc4);
if (!summarybar) {
LEAVE("no summarybar");
return;
}
if (gnc_summarybar_visible) {
gtk_widget_show(GTK_WIDGET(summarybar));
} else {
gtk_widget_hide(GTK_WIDGET(summarybar));
gtk_widget_queue_resize(mc->app->dock);
}
LEAVE(" ");
}
/**
* gnc_mdi_tweak_menus
*
* @mc: A pointer to the GNC MDI child associated with the Main
* window.
*
* This routine tweaks the View window in the main window menubar so
* that the menu checkboxes correctly show the state of the Toolbar,
* Summarybar and Statusbar. There is no way to have the checkboxes
* start checked. This will trigger each of the callbacks once, but
* they are designed to ignore the first 'sync' callback. This is a
* suboptimal solution, but I can't find a better one at the moment.
*/
static void
gnc_mdi_tweak_menus(GNCMDIChildInfo * mc)
{
GtkWidget *widget;
GnomeMDI *info;
ENTER(" ");
info = mc->gnc_mdi->mdi;
widget = gnc_mdi_child_find_menu_item(mc, "_View/_Toolbar");
gtk_signal_handler_block_by_data(GTK_OBJECT(widget), info);
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widget), gnc_toolbar_visible);
gtk_signal_handler_unblock_by_data(GTK_OBJECT(widget), info);
widget = gnc_mdi_child_find_menu_item(mc, "_View/_Status Bar");
gtk_signal_handler_block_by_data(GTK_OBJECT(widget), info);
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widget), gnc_statusbar_visible);
gtk_signal_handler_unblock_by_data(GTK_OBJECT(widget), info);
widget = gnc_mdi_child_find_menu_item(mc, "_View/S_ummary Bar");
gtk_signal_handler_block_by_data(GTK_OBJECT(widget), info);
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widget), gnc_summarybar_visible);
gtk_signal_handler_unblock_by_data(GTK_OBJECT(widget), info);
LEAVE(" ");
}
static void
gnc_mdi_show_bars (GNCMDIChildInfo *mc)
{
gnc_mdi_show_toolbar (mc);
gnc_mdi_show_statusbar (mc);
gnc_mdi_show_summarybar (mc);
gnc_mdi_tweak_menus(mc);
}
static void
@@ -517,6 +665,7 @@ gnc_mdi_app_destroyed_cb (GnomeApp * app, gpointer user_data)
GNCMDIInfo * mainwin = user_data;
GnomeMDI * mdi = mainwin->mdi;
ENTER(" ");
if (mainwin->shutdown && (g_list_length (mdi->windows) == 0))
mainwin->shutdown (0);
else
@@ -541,6 +690,7 @@ gnc_mdi_app_destroyed_cb (GnomeApp * app, gpointer user_data)
}
}
}
LEAVE(" ");
}
static void
@@ -549,6 +699,7 @@ gnc_mdi_app_created_cb (GnomeMDI * mdi, GnomeApp * app, gpointer data)
GNCMDIInfo * mainwin = data;
/* enable save and restore of menubar positions */
ENTER(" ");
gnome_app_enable_layout_config (app, TRUE);
/* flag the app as gnc mdi created */
@@ -558,6 +709,7 @@ gnc_mdi_app_created_cb (GnomeMDI * mdi, GnomeApp * app, gpointer data)
gtk_signal_connect (GTK_OBJECT (app), "destroy",
GTK_SIGNAL_FUNC (gnc_mdi_app_destroyed_cb),
mainwin);
LEAVE(" ");
}
/**
@@ -579,6 +731,7 @@ gnc_mdi_destroy_cb (GtkObject * w, gpointer data)
{
GNCMDIInfo * gnc_mdi = data;
ENTER(" ");
gnc_mdi->mdi = NULL;
if (gnc_mdi->shutdown)
@@ -590,6 +743,7 @@ gnc_mdi_destroy_cb (GtkObject * w, gpointer data)
gnc_unregister_gui_component (gnc_mdi->component_id);
g_free (gnc_mdi);
LEAVE(" ");
}
/**
@@ -617,8 +771,6 @@ gnc_mdi_child_menu_tweaking (GNCMDIChildInfo * mc)
if (mc->menu_tweaking)
mc->menu_tweaking(mc);
if (mc->gnc_mdi->menu_tweaking)
mc->gnc_mdi->menu_tweaking(mc);
}
/**
@@ -664,6 +816,7 @@ gnc_mdi_child_changed_cb (GnomeMDI * mdi, GnomeMDIChild * prev_child,
GnomeApp * new_app = NULL;
GnomeDockItemBehavior behavior;
ENTER(" ");
if (prev_child)
{
prevwin = gtk_object_get_user_data (GTK_OBJECT(prev_child));
@@ -690,7 +843,7 @@ gnc_mdi_child_changed_cb (GnomeMDI * mdi, GnomeMDIChild * prev_child,
{
if (oldbar->parent)
gtk_widget_hide (GTK_WIDGET(oldbar)->parent);
gnc_mdi_show_toolbar(childwin);
gnc_mdi_show_bars(childwin);
}
}
else if (childwin->app)
@@ -717,7 +870,7 @@ gnc_mdi_child_changed_cb (GnomeMDI * mdi, GnomeMDIChild * prev_child,
gtk_toolbar_set_style (GTK_TOOLBAR(childwin->toolbar),
gnc_get_toolbar_style ());
gnc_mdi_show_toolbar(childwin);
gnc_mdi_show_bars(childwin);
}
else
{
@@ -733,7 +886,7 @@ gnc_mdi_child_changed_cb (GnomeMDI * mdi, GnomeMDIChild * prev_child,
gtk_toolbar_set_style (GTK_TOOLBAR(childwin->toolbar),
gnc_get_toolbar_style ());
gnc_mdi_show_toolbar(childwin);
gnc_mdi_show_bars(childwin);
gnc_mdi_child_menu_tweaking(childwin);
}
@@ -764,6 +917,7 @@ gnc_mdi_child_changed_cb (GnomeMDI * mdi, GnomeMDIChild * prev_child,
gnome_app_install_menu_hints (new_app, hintinfo);
gnc_mdi_update_widgets(childwin, TRUE);
}
LEAVE(" ");
}
static void
@@ -773,6 +927,7 @@ gnc_mdi_configure_toolbar_cb (gpointer data)
GtkToolbarStyle tbstyle;
GList * child;
ENTER(" ");
tbstyle = gnc_get_toolbar_style ();
for (child = mi->children; child; child = child->next)
@@ -786,6 +941,7 @@ gnc_mdi_configure_toolbar_cb (gpointer data)
}
}
}
LEAVE(" ");
}
static void
@@ -793,7 +949,9 @@ gnc_mdi_configure_mdi_cb (gpointer data)
{
GNCMDIInfo * mi = data;
ENTER(" ");
gnome_mdi_set_mode (mi->mdi, gnc_get_mdi_mode ());
LEAVE(" ");
}
static int
@@ -872,7 +1030,9 @@ gnc_mdi_new (const char *app_name,
{
GNCMDIInfo * gnc_mdi;
ENTER(" ");
if (gnc_mdi_current) {
LEAVE("already exists");
return gnc_mdi_current;
}
g_return_val_if_fail (app_name != NULL, NULL);
@@ -891,7 +1051,7 @@ gnc_mdi_new (const char *app_name,
gnc_mdi->restore_cb = restore_cb;
gnc_mdi->mdi = GNOME_MDI (gnome_mdi_new (app_name, title));
DEBUG("gnc_mdi=%p, mdi=%p", gnc_mdi, gnc_mdi->mdi);
gnc_mdi->component_id = gnc_register_gui_component (GNC_MDI_CM_CLASS,
NULL, NULL, gnc_mdi);
@@ -921,6 +1081,7 @@ gnc_mdi_new (const char *app_name,
gnc_mdi_current = gnc_mdi;
LEAVE("set gnc_mdi_current");
return gnc_mdi;
}
@@ -936,6 +1097,7 @@ gnc_mdi_add_child (GNCMDIInfo * wind, GNCMDIChildInfo * child)
g_return_if_fail (wind != NULL);
g_return_if_fail (child != NULL);
ENTER("GNCMDIInfo=%p, GNCMDIChildInfo=%p, mdi_child=%p", wind, child, child->child);
wind->children = g_list_append (wind->children, child);
child->gnc_mdi = wind;
@@ -948,14 +1110,17 @@ gnc_mdi_add_child (GNCMDIInfo * wind, GNCMDIChildInfo * child)
gnome_mdi_generic_child_set_config_func (mdi_child,
gnc_mdi_child_save_func, NULL);
}
LEAVE(" ");
}
void
gnc_mdi_remove_child (GNCMDIInfo * gnc_mdi, GNCMDIChildInfo * child)
{
ENTER(" ");
if (!gnc_mdi || !child) return;
gnc_mdi->children = g_list_remove (gnc_mdi->children, child);
LEAVE(" ");
}
void
@@ -971,6 +1136,22 @@ gnc_mdi_child_refresh (GNCMDIChildInfo *child)
gnc_mdi_child_set_title (child);
}
GNCMDIChildInfo *
gnc_mdi_child_find_by_app (GnomeApp *app)
{
GNCMDIChildInfo *child;
GList *item;
g_return_val_if_fail (gnc_mdi_current != NULL, NULL);
for (item = gnc_mdi_current->children; item; item = g_list_next(item)) {
child = item->data;
if (child->app == app)
return child;
}
return NULL;
}
GNCMDIInfo *
gnc_mdi_get_current (void)
{
@@ -1045,6 +1226,7 @@ gnc_mdi_destroy (GNCMDIInfo * gnc_mdi)
GNCMDIChildInfo *gnc_child;
GnomeMDIChild *active;
ENTER(" ");
if (!gnc_mdi) return;
gnc_mdi->shutdown = NULL;
@@ -1071,6 +1253,7 @@ gnc_mdi_destroy (GNCMDIInfo * gnc_mdi)
if (gnc_mdi->mdi)
gtk_object_destroy (GTK_OBJECT (gnc_mdi->mdi));
LEAVE(" ");
}
void
@@ -1079,8 +1262,11 @@ gnc_mdi_save (GNCMDIInfo * gnc_mdi, char * filename)
char * encoded;
char * session_name;
if (!gnc_mdi)
ENTER(" ");
if (!gnc_mdi) {
LEAVE("oops");
return;
}
encoded = gnc_html_encode_string (filename);
session_name = g_strdup_printf ("/%s/MDI : %s",
@@ -1091,6 +1277,7 @@ gnc_mdi_save (GNCMDIInfo * gnc_mdi, char * filename)
if (filename && *filename != '\0')
gnome_mdi_save_state (GNOME_MDI (gnc_mdi->mdi), session_name);
LEAVE(" ");
g_free (session_name);
}
@@ -1102,6 +1289,7 @@ gnc_mdi_restore (GNCMDIInfo * gnc_mdi, const char * filename)
GList * old_children;
GList * c;
ENTER(" ");
old_children = g_list_copy (gnc_mdi->mdi->children);
encoded = gnc_html_encode_string (filename);
session_name = g_strdup_printf ("/%s/MDI : %s",
@@ -1124,6 +1312,7 @@ gnc_mdi_restore (GNCMDIInfo * gnc_mdi, const char * filename)
gnome_mdi_remove_child (gnc_mdi->mdi, GNOME_MDI_CHILD(c->data), TRUE);
g_list_free (old_children);
LEAVE(" ");
}
void
@@ -1132,6 +1321,7 @@ gnc_mdi_create_child_toolbar (GNCMDIInfo * mi, GNCMDIChildInfo * child)
GnomeUIInfo * tbinfo;
GtkToolbar * tb;
ENTER(" ");
g_return_if_fail (mi != NULL);
g_return_if_fail (child != NULL);
@@ -1149,4 +1339,5 @@ gnc_mdi_create_child_toolbar (GNCMDIInfo * mi, GNCMDIChildInfo * child)
child->toolbar = GTK_WIDGET (tb);
gnome_app_fill_toolbar (tb, tbinfo, NULL);
LEAVE(" ");
}
+7 -1
View File
@@ -73,7 +73,6 @@ typedef struct
GList * children;
GNCShutdownFunc shutdown;
GNCMDIAutoSetup menu_tweaking;
GNCMDICanRestoreCB can_restore_cb;
GNCMDIRestoreCB restore_cb;
@@ -116,6 +115,7 @@ void gnc_mdi_add_child (GNCMDIInfo * wind, GNCMDIChildInfo * child);
void gnc_mdi_remove_child (GNCMDIInfo * gnc_mdi, GNCMDIChildInfo * child);
void gnc_mdi_child_refresh (GNCMDIChildInfo *child);
GNCMDIChildInfo * gnc_mdi_child_find_by_app (GnomeApp *app);
GNCMDIInfo * gnc_mdi_get_current (void);
gboolean gnc_mdi_has_apps (void);
@@ -135,8 +135,14 @@ GtkWidget * gnc_mdi_child_find_toolbar_item(GNCMDIChildInfo *mc, gchar *name);
void gnc_mdi_set_dispatch_cb (GNCMDIChildInfo * mc, GNCMDIDispatchType type,
GtkCallback cb, gpointer data);
gboolean gnc_mdi_get_toolbar_visibility (void);
gboolean gnc_mdi_get_statusbar_visibility (void);
gboolean gnc_mdi_get_summarybar_visibility (void);
void gnc_mdi_set_toolbar_visibility (gboolean visible);
void gnc_mdi_set_statusbar_visibility (gboolean visible);
void gnc_mdi_set_summarybar_visibility (gboolean visible);
void gnc_mdi_show_toolbar (GNCMDIChildInfo *mc);
void gnc_mdi_show_statusbar (GNCMDIChildInfo *mc);
void gnc_mdi_show_summarybar (GNCMDIChildInfo *mc);
#endif
+71 -96
View File
@@ -70,8 +70,7 @@
#include "messages.h"
#include "guile-mappings.h"
static gboolean gnc_show_status_bar = TRUE;
static gboolean gnc_show_summary_bar = TRUE;
static short module = MOD_GUI;
static void gnc_main_window_create_menus(GNCMDIInfo * maininfo);
static GnomeUIInfo * gnc_main_window_toolbar_prefix (void);
@@ -91,18 +90,52 @@ static GnomeUIInfo * gnc_main_window_toolbar_suffix (void);
static GNCMDIChildInfo *
gnc_main_window_get_mdi_child (void)
{
GNCMDIChildInfo *child_info;
GNCMDIInfo *main_info;
GnomeMDIChild *child;
GnomeMDI *mdi;
GnomeApp *app;
GtkWidget *view;
ENTER(" ");
main_info = gnc_mdi_get_current ();
if (!main_info)
if (!main_info) {
LEAVE("main_info is NULL");
return(NULL);
}
mdi = main_info->mdi;
if (!mdi || !mdi->active_child)
return(NULL);
if (!mdi) {
LEAVE("null mdi");
return NULL;
}
return(gtk_object_get_user_data(GTK_OBJECT(mdi->active_child)));
child = gnome_mdi_get_active_child(mdi);
if (child) {
child_info = gtk_object_get_user_data(GTK_OBJECT(child));
LEAVE("child=%p", child_info);
return(child_info);
}
/* Grrr. There should have been an active child but the MDI code has
* some rough edges, to put it politely. If we hit this case and
* the user has more than one child window, this code may or may not
* select the right child. There's absolutely no way to tell from
* the available data which view is in front. */
DEBUG("mdi=%p, mdi->active_child=%p", mdi, child);
app = gnome_mdi_get_active_window(mdi);
if (app) {
/* Force the MDI to have a valid view. */
view = gnome_mdi_get_view_from_window (mdi, app);
gnome_mdi_set_active_view (mdi, view);
child_info = gnc_mdi_child_find_by_app(app);
LEAVE("child=%p", child_info);
return(child_info);
}
LEAVE("oops. No valid no child or app");
return(NULL);
}
/********************************************************************
@@ -141,6 +174,7 @@ gnc_main_window_app_created_cb(GnomeMDI * mdi, GnomeApp * app,
GtkWidget * statusbar;
/* add the summarybar */
ENTER(" ");
summarybar = gnc_main_window_summary_new();
{
@@ -184,6 +218,7 @@ gnc_main_window_app_created_cb(GnomeMDI * mdi, GnomeApp * app,
/* make sure the file history is shown */
gnc_history_update_menu (GTK_WIDGET (app));
LEAVE(" ");
}
static void
@@ -191,6 +226,7 @@ gnc_refresh_main_window_info (void)
{
GList *containers = gtk_container_get_toplevels ();
ENTER(" ");
while (containers)
{
GtkWidget *w = containers->data;
@@ -203,6 +239,7 @@ gnc_refresh_main_window_info (void)
containers = containers->next;
}
LEAVE(" ");
}
@@ -220,9 +257,11 @@ gnc_main_window_create_child(const gchar * configstring)
char * location;
char * label;
ENTER(" ");
if (!configstring)
{
gnc_main_window_open_accounts (FALSE);
LEAVE("no configstring");
return NULL;
}
@@ -240,6 +279,7 @@ gnc_main_window_create_child(const gchar * configstring)
child = NULL;
}
LEAVE(" ");
return child;
}
@@ -254,41 +294,12 @@ gnc_main_window_can_restore_cb (const char * filename)
GNC_COMMODITY_NS_LEGACY);
}
/**
* gnc_main_window_tweak_menus
*
* @mc: A pointer to the GNC MDI child associated with the Main
* window.
*
* This routine tweaks the View window in the main window menubar so
* that the menu checkboxes correctly show the state of the Toolbar,
* Summarybar and Statusbar. There is no way to have the checkboxes
* start checked. This will trigger each of the callbacks once, but
* they are designed to ignore the first 'sync' callback. This is a
* suboptimal solution, but I can't find a better one at the moment.
*/
static void
gnc_main_window_tweak_menus(GNCMDIChildInfo * mc)
{
GtkWidget *widget;
widget = gnc_mdi_child_find_menu_item(mc, "_View/_Toolbar");
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widget), TRUE);
widget = gnc_mdi_child_find_menu_item(mc, "_View/_Status Bar");
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widget), TRUE);
widget = gnc_mdi_child_find_menu_item(mc, "_View/S_ummary Bar");
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widget), TRUE);
mc->gnc_mdi->menu_tweaking = NULL;
}
/**
* gnc_main_window_flip_toolbar_cb
*
* @widget: A pointer to the menu item selected. (ignored)
* @data: The user data for this menu item. (ignored)
* @data: The user data for this menu item. This is a pointer to a
* GNCMDIInfo data structure. (ignored)
*
* This routine flips the state of the toolbar, hiding it if currently
* visible, and showing it if not. This routine has to grovel through
@@ -301,23 +312,17 @@ static void
gnc_main_window_flip_toolbar_cb(GtkWidget * widget, gpointer data)
{
GNCMDIChildInfo * mc;
static gboolean in_sync = FALSE;
gboolean toolbar_visibility = !gnc_mdi_get_toolbar_visibility();
if (!in_sync) {
/*
* Sync the hard way. Syncing by calling the xxx_set_active
* function causes an infinite recursion.
*/
in_sync = TRUE;
ENTER("widget=%p, data=%p", widget, data);
mc = gnc_main_window_get_mdi_child();
if (!mc) {
LEAVE("oops");
return;
}
mc = gnc_main_window_get_mdi_child();
if (!mc)
return;
gnc_mdi_set_toolbar_visibility(toolbar_visibility);
gnc_mdi_show_toolbar(mc);
LEAVE("flipped");
}
/**
@@ -337,29 +342,17 @@ static void
gnc_main_window_flip_status_bar_cb(GtkWidget * widget, gpointer data)
{
GNCMDIChildInfo * mc;
static gboolean in_sync = FALSE;
if (!in_sync) {
/*
* Sync the hard way. Syncing by calling the xxx_set_active
* function causes an infinite recursion.
*/
in_sync = TRUE;
return;
}
gnc_show_status_bar = !gnc_show_status_bar;
gboolean statusbar_visibility = !gnc_mdi_get_statusbar_visibility();
ENTER(" ");
mc = gnc_main_window_get_mdi_child();
if (!mc || !mc->app)
if (!mc) {
LEAVE("oops");
return;
if (gnc_show_status_bar) {
gtk_widget_show(mc->app->statusbar);
} else {
gtk_widget_hide(mc->app->statusbar);
gtk_widget_queue_resize(mc->app->statusbar->parent);
}
gnc_mdi_set_statusbar_visibility(statusbar_visibility);
gnc_mdi_show_statusbar(mc);
LEAVE("flipped");
}
/**
@@ -379,36 +372,17 @@ static void
gnc_main_window_flip_summary_bar_cb(GtkWidget * widget, gpointer data)
{
GNCMDIChildInfo * mc;
GnomeDockItem *summarybar;
guint dc1, dc2, dc3, dc4;
static gboolean in_sync = FALSE;
if (!in_sync) {
/*
* Sync the hard way. Syncing by calling the xxx_set_active
* function causes an infinite recursion.
*/
in_sync = TRUE;
return;
}
gnc_show_summary_bar = !gnc_show_summary_bar;
gboolean summarybar_visibility = !gnc_mdi_get_summarybar_visibility();
ENTER(" ");
mc = gnc_main_window_get_mdi_child();
if (!mc || !mc->app)
if (!mc) {
LEAVE("oops");
return;
summarybar = gnome_dock_get_item_by_name(GNOME_DOCK(mc->app->dock),
"Summary Bar",
&dc1, &dc2, &dc3, &dc4);
if (!summarybar) return;
if (gnc_show_summary_bar) {
gtk_widget_show(GTK_WIDGET(summarybar));
} else {
gtk_widget_hide(GTK_WIDGET(summarybar));
gtk_widget_queue_resize(mc->app->dock);
}
gnc_mdi_set_summarybar_visibility(summarybar_visibility);
gnc_mdi_show_summarybar(mc);
LEAVE("flipped");
}
/********************************************************************
@@ -421,6 +395,7 @@ gnc_main_window_new (void)
{
GNCMDIInfo * retval;
ENTER(" ");
retval = gnc_mdi_new ("GnuCash", "GnuCash",
gnc_main_window_toolbar_prefix (),
gnc_main_window_toolbar_suffix (),
@@ -446,9 +421,7 @@ gnc_main_window_new (void)
GTK_SIGNAL_FUNC(gnc_main_window_app_created_cb),
retval);
/* handle show/hide items in view menu */
retval->menu_tweaking = gnc_main_window_tweak_menus;
LEAVE(" ");
return retval;
}
@@ -1016,10 +989,12 @@ gnc_main_window_create_menus(GNCMDIInfo * maininfo)
GNOMEUIINFO_END
};
ENTER(" ");
gnome_mdi_set_menubar_template(GNOME_MDI(maininfo->mdi),
gnc_main_menu_template);
gnc_file_history_add_after ("Open _Recent/");
LEAVE(" ");
}
static GnomeUIInfo *