mirror of
https://github.com/Gnucash/gnucash.git
synced 2026-08-04 02:13:29 -05:00
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:
@@ -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.
|
||||
|
||||
@@ -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(" ");
|
||||
}
|
||||
|
||||
@@ -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
@@ -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 *
|
||||
|
||||
Reference in New Issue
Block a user