mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Move more mdi code into gnome-utils.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@5425 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
e222f9e9c3
commit
3dbb1df403
@ -71,8 +71,8 @@
|
|||||||
|
|
||||||
(define gnc:*save-options-hook*
|
(define gnc:*save-options-hook*
|
||||||
(gnc:hook-define
|
(gnc:hook-define
|
||||||
'ui-shutdown-hook
|
'save-options-hook
|
||||||
"Functions to run at ui shutdown. Hook args: ()"))
|
"Functions to run when saving options. Hook args: ()"))
|
||||||
|
|
||||||
;; save-all-options: this is the actual hook that gets called at
|
;; save-all-options: this is the actual hook that gets called at
|
||||||
;; shutdown. right now, we put all the options in the same file so
|
;; shutdown. right now, we put all the options in the same file so
|
||||||
|
@ -25,9 +25,15 @@
|
|||||||
|
|
||||||
#include <gnome.h>
|
#include <gnome.h>
|
||||||
|
|
||||||
|
#include "dialog-utils.h"
|
||||||
|
#include "gnc-mdi-utils.h"
|
||||||
|
#include "gnc-ui-util.h"
|
||||||
#include "gnc-ui.h"
|
#include "gnc-ui.h"
|
||||||
|
|
||||||
|
|
||||||
|
static GNCMDIInfo *gnc_mdi_current = NULL;
|
||||||
|
|
||||||
|
|
||||||
gncUIWidget
|
gncUIWidget
|
||||||
gnc_ui_get_toplevel (void)
|
gnc_ui_get_toplevel (void)
|
||||||
{
|
{
|
||||||
@ -37,18 +43,18 @@ gnc_ui_get_toplevel (void)
|
|||||||
for (; containers; containers = containers->next)
|
for (; containers; containers = containers->next)
|
||||||
{
|
{
|
||||||
GtkWidget *w = containers->data;
|
GtkWidget *w = containers->data;
|
||||||
GnomeMDI *mdi;
|
GNCMDIInfo *gnc_mdi;
|
||||||
|
|
||||||
if (!GNOME_IS_APP (w))
|
if (!GNOME_IS_APP (w))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
app = GNOME_APP (w);
|
app = GNOME_APP (w);
|
||||||
|
|
||||||
mdi = gtk_object_get_data (GTK_OBJECT (w), "gnc_mdi");
|
gnc_mdi = gtk_object_get_data (GTK_OBJECT (w), "gnc_mdi");
|
||||||
if (!mdi)
|
if (!gnc_mdi)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
app = gnome_mdi_get_active_window (mdi);
|
app = gnome_mdi_get_active_window (gnc_mdi->mdi);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -58,3 +64,351 @@ gnc_ui_get_toplevel (void)
|
|||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gnc_mdi_child_set_title (GNCMDIChildInfo *childwin)
|
||||||
|
{
|
||||||
|
GNCBook *book;
|
||||||
|
const char *filename;
|
||||||
|
char *title;
|
||||||
|
|
||||||
|
if (!childwin || !childwin->app)
|
||||||
|
return;
|
||||||
|
|
||||||
|
filename = gnc_book_get_url (gnc_get_current_book ());
|
||||||
|
|
||||||
|
if (!filename)
|
||||||
|
filename = _("<no file>");
|
||||||
|
else if (strncmp ("file:", filename, 5) == 0)
|
||||||
|
filename += 5;
|
||||||
|
|
||||||
|
if (!childwin->title)
|
||||||
|
title = g_strdup_printf ("%s (%s)", childwin->gnc_mdi->title, filename);
|
||||||
|
else
|
||||||
|
title = g_strdup_printf ("%s - %s (%s)", childwin->title,
|
||||||
|
childwin->gnc_mdi->title, filename);
|
||||||
|
|
||||||
|
gtk_window_set_title (GTK_WINDOW(childwin->app), title);
|
||||||
|
|
||||||
|
g_free (title);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gnc_mdi_app_destroyed_cb (GnomeApp * app, gpointer user_data)
|
||||||
|
{
|
||||||
|
GNCMDIInfo * mainwin = user_data;
|
||||||
|
GnomeMDI * mdi = mainwin->mdi;
|
||||||
|
|
||||||
|
if (mainwin->shutdown && (g_list_length (mdi->windows) == 0))
|
||||||
|
mainwin->shutdown (0);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
GtkWidget *toolbar = gtk_object_get_user_data (GTK_OBJECT (app));
|
||||||
|
GList * child;
|
||||||
|
|
||||||
|
if (toolbar)
|
||||||
|
gtk_widget_unref (toolbar);
|
||||||
|
|
||||||
|
gtk_object_set_user_data (GTK_OBJECT (app), NULL);
|
||||||
|
|
||||||
|
for (child = mainwin->children; child; child = child->next)
|
||||||
|
{
|
||||||
|
GNCMDIChildInfo * mc = child->data;
|
||||||
|
|
||||||
|
if (mc && mc->toolbar && mc->app && (mc->app == app))
|
||||||
|
{
|
||||||
|
/* we need to pull the toolbar out to prevent its being destroyed */
|
||||||
|
gtk_widget_ref (mc->toolbar);
|
||||||
|
gtk_container_remove (GTK_CONTAINER(mc->toolbar->parent), mc->toolbar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gnc_mdi_app_created_cb (GnomeMDI * mdi, GnomeApp * app, gpointer data)
|
||||||
|
{
|
||||||
|
GNCMDIInfo * mainwin = data;
|
||||||
|
|
||||||
|
/* enable save and restore of menubar positions */
|
||||||
|
gnome_app_enable_layout_config (app, TRUE);
|
||||||
|
|
||||||
|
/* flag the app as gnc mdi created */
|
||||||
|
gtk_object_set_data (GTK_OBJECT (app), "gnc_mdi", mainwin);
|
||||||
|
|
||||||
|
/* add a signal to preserve the toolbar on destroy */
|
||||||
|
gtk_signal_connect (GTK_OBJECT (app), "destroy",
|
||||||
|
GTK_SIGNAL_FUNC (gnc_mdi_app_destroyed_cb),
|
||||||
|
mainwin);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gnc_mdi_destroy_cb (GtkObject * w, gpointer data)
|
||||||
|
{
|
||||||
|
GNCMDIInfo * gnc_mdi = data;
|
||||||
|
|
||||||
|
gnc_mdi->mdi = NULL;
|
||||||
|
|
||||||
|
if (gnc_mdi->shutdown)
|
||||||
|
gnc_mdi->shutdown (0);
|
||||||
|
|
||||||
|
if (gnc_mdi_current == gnc_mdi)
|
||||||
|
gnc_mdi_current = NULL;
|
||||||
|
|
||||||
|
g_free (gnc_mdi);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gnc_mdi_child_changed_cb (GnomeMDI * mdi, GnomeMDIChild * not_used,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
GNCMDIInfo * mainwin = data;
|
||||||
|
GNCMDIChildInfo * childwin = NULL;
|
||||||
|
GnomeUIInfo * hintinfo;
|
||||||
|
GtkWidget * oldbar;
|
||||||
|
GnomeApp * new_app = NULL;
|
||||||
|
GnomeDockItemBehavior behavior;
|
||||||
|
|
||||||
|
if (mdi && mdi->active_child)
|
||||||
|
{
|
||||||
|
childwin = gtk_object_get_user_data (GTK_OBJECT(mdi->active_child));
|
||||||
|
new_app = gnome_mdi_get_app_from_view (childwin->contents);
|
||||||
|
}
|
||||||
|
|
||||||
|
behavior = GNOME_DOCK_ITEM_BEH_EXCLUSIVE;
|
||||||
|
if (!gnome_preferences_get_toolbar_detachable ())
|
||||||
|
behavior |= GNOME_DOCK_ITEM_BEH_LOCKED;
|
||||||
|
|
||||||
|
if (childwin && childwin->toolbar)
|
||||||
|
{
|
||||||
|
if (childwin->app && (childwin->app == new_app))
|
||||||
|
{
|
||||||
|
oldbar = gtk_object_get_user_data (GTK_OBJECT(new_app));
|
||||||
|
if (oldbar && (oldbar != childwin->toolbar))
|
||||||
|
{
|
||||||
|
if (oldbar->parent)
|
||||||
|
gtk_widget_hide (GTK_WIDGET(oldbar)->parent);
|
||||||
|
gtk_widget_show (GTK_WIDGET(childwin->toolbar)->parent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (childwin->app)
|
||||||
|
{
|
||||||
|
oldbar = gtk_object_get_user_data (GTK_OBJECT(new_app));
|
||||||
|
if (oldbar && oldbar->parent && (oldbar != childwin->toolbar))
|
||||||
|
gtk_widget_hide (GTK_WIDGET(oldbar)->parent);
|
||||||
|
|
||||||
|
/* we need to move the toolbar to a new App (mdi mode probably
|
||||||
|
* changed) */
|
||||||
|
if (GTK_WIDGET(childwin->toolbar)->parent)
|
||||||
|
{
|
||||||
|
gtk_widget_ref (GTK_WIDGET(childwin->toolbar));
|
||||||
|
gtk_container_remove (GTK_CONTAINER
|
||||||
|
(GTK_WIDGET(childwin->toolbar)->parent),
|
||||||
|
GTK_WIDGET(childwin->toolbar));
|
||||||
|
}
|
||||||
|
|
||||||
|
childwin->app = new_app;
|
||||||
|
gnome_app_add_toolbar (GNOME_APP(childwin->app),
|
||||||
|
GTK_TOOLBAR(childwin->toolbar),
|
||||||
|
"Toolbar", behavior,
|
||||||
|
GNOME_DOCK_TOP, 1, 0, 0);
|
||||||
|
|
||||||
|
gtk_toolbar_set_style (GTK_TOOLBAR(childwin->toolbar),
|
||||||
|
gnc_get_toolbar_style ());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
oldbar = gtk_object_get_user_data (GTK_OBJECT(new_app));
|
||||||
|
if (oldbar && oldbar->parent && (oldbar != childwin->toolbar))
|
||||||
|
gtk_widget_hide (GTK_WIDGET(oldbar)->parent);
|
||||||
|
|
||||||
|
childwin->app = new_app;
|
||||||
|
gnome_app_add_toolbar (GNOME_APP(childwin->app),
|
||||||
|
GTK_TOOLBAR(childwin->toolbar),
|
||||||
|
"Toolbar", behavior,
|
||||||
|
GNOME_DOCK_TOP, 1, 0, 0);
|
||||||
|
|
||||||
|
gtk_toolbar_set_style (GTK_TOOLBAR(childwin->toolbar),
|
||||||
|
gnc_get_toolbar_style ());
|
||||||
|
}
|
||||||
|
|
||||||
|
oldbar = gtk_object_get_user_data (GTK_OBJECT(new_app));
|
||||||
|
if (oldbar)
|
||||||
|
gtk_widget_unref (oldbar);
|
||||||
|
|
||||||
|
if (childwin->toolbar)
|
||||||
|
gtk_widget_ref (childwin->toolbar);
|
||||||
|
|
||||||
|
gtk_object_set_user_data (GTK_OBJECT(new_app), childwin->toolbar);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* set the window title */
|
||||||
|
gnc_mdi_child_set_title (childwin);
|
||||||
|
|
||||||
|
/* install menu hints if relevant */
|
||||||
|
if (mdi->active_child)
|
||||||
|
{
|
||||||
|
/* the arg to this callback is SUPPOSED to be the last active child,
|
||||||
|
* but it gets to be NULL under some circumstances */
|
||||||
|
hintinfo = gnome_mdi_get_menubar_info (new_app);
|
||||||
|
if (hintinfo)
|
||||||
|
gnome_app_install_menu_hints (new_app, hintinfo);
|
||||||
|
|
||||||
|
hintinfo = gnome_mdi_get_child_menu_info (new_app);
|
||||||
|
if (hintinfo)
|
||||||
|
gnome_app_install_menu_hints (new_app, hintinfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
GNCMDIInfo *
|
||||||
|
gnc_mdi_new (const char *app_name, const char *title,
|
||||||
|
GNCShutdownFunc shutdown)
|
||||||
|
{
|
||||||
|
GNCMDIInfo * gnc_mdi;
|
||||||
|
|
||||||
|
if (gnc_mdi_current)
|
||||||
|
return gnc_mdi_current;
|
||||||
|
|
||||||
|
g_return_val_if_fail (app_name != NULL, NULL);
|
||||||
|
g_return_val_if_fail (title != NULL, NULL);
|
||||||
|
|
||||||
|
gnc_mdi = g_new0 (GNCMDIInfo, 1);
|
||||||
|
|
||||||
|
gnc_mdi->shutdown = shutdown;
|
||||||
|
gnc_mdi->title = g_strdup (title);
|
||||||
|
|
||||||
|
gnc_mdi->mdi = GNOME_MDI (gnome_mdi_new (app_name, title));
|
||||||
|
|
||||||
|
gtk_signal_connect (GTK_OBJECT(gnc_mdi->mdi), "destroy",
|
||||||
|
GTK_SIGNAL_FUNC(gnc_mdi_destroy_cb),
|
||||||
|
gnc_mdi);
|
||||||
|
|
||||||
|
gtk_signal_connect (GTK_OBJECT(gnc_mdi->mdi), "app_created",
|
||||||
|
GTK_SIGNAL_FUNC(gnc_mdi_app_created_cb),
|
||||||
|
gnc_mdi);
|
||||||
|
|
||||||
|
gtk_signal_connect (GTK_OBJECT(gnc_mdi->mdi), "child_changed",
|
||||||
|
GTK_SIGNAL_FUNC(gnc_mdi_child_changed_cb),
|
||||||
|
gnc_mdi);
|
||||||
|
|
||||||
|
gnc_mdi_current = gnc_mdi;
|
||||||
|
|
||||||
|
return gnc_mdi;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
gnc_mdi_child_save_func (GnomeMDIChild * child, gpointer user_data)
|
||||||
|
{
|
||||||
|
return g_strdup (child->name);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gnc_mdi_add_child (GNCMDIInfo * wind, GNCMDIChildInfo * child)
|
||||||
|
{
|
||||||
|
g_return_if_fail (wind != NULL);
|
||||||
|
g_return_if_fail (child != NULL);
|
||||||
|
|
||||||
|
wind->children = g_list_append (wind->children, child);
|
||||||
|
child->gnc_mdi = wind;
|
||||||
|
|
||||||
|
if (GNOME_IS_MDI_GENERIC_CHILD (child->child))
|
||||||
|
{
|
||||||
|
GnomeMDIGenericChild *mdi_child;
|
||||||
|
|
||||||
|
mdi_child = GNOME_MDI_GENERIC_CHILD (child->child);
|
||||||
|
|
||||||
|
gnome_mdi_generic_child_set_config_func (mdi_child,
|
||||||
|
gnc_mdi_child_save_func, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gnc_mdi_remove_child (GNCMDIInfo * gnc_mdi, GNCMDIChildInfo * child)
|
||||||
|
{
|
||||||
|
if (!gnc_mdi || !child) return;
|
||||||
|
|
||||||
|
gnc_mdi->children = g_list_remove (gnc_mdi->children, child);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gnc_mdi_child_refresh (GNCMDIChildInfo *child)
|
||||||
|
{
|
||||||
|
g_return_if_fail (child != NULL);
|
||||||
|
|
||||||
|
gnome_mdi_child_set_name (child->child, child->child->name);
|
||||||
|
gnome_mdi_update_child (child->gnc_mdi->mdi, child->child);
|
||||||
|
|
||||||
|
/* pesky child_set_name tries to change the window title. Set it back. */
|
||||||
|
if ((child->gnc_mdi->mdi->active_child == child->child) && child->app)
|
||||||
|
gnc_mdi_child_set_title (child);
|
||||||
|
}
|
||||||
|
|
||||||
|
GNCMDIInfo *
|
||||||
|
gnc_mdi_get_current (void)
|
||||||
|
{
|
||||||
|
return gnc_mdi_current;
|
||||||
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
gnc_mdi_has_apps (void)
|
||||||
|
{
|
||||||
|
GList *toplevels;
|
||||||
|
|
||||||
|
for (toplevels = gtk_container_get_toplevels ();
|
||||||
|
toplevels;
|
||||||
|
toplevels = toplevels->next)
|
||||||
|
{
|
||||||
|
GNCMDIInfo *gnc_mdi;
|
||||||
|
|
||||||
|
if (!GNOME_IS_APP (toplevels->data))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (GTK_OBJECT_DESTROYED (toplevels->data))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
gnc_mdi = gtk_object_get_data (GTK_OBJECT (toplevels->data), "gnc_mdi");
|
||||||
|
if (!gnc_mdi)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gnc_app_set_title (GnomeApp *app)
|
||||||
|
{
|
||||||
|
GNCMDIChildInfo *childwin;
|
||||||
|
GNCMDIInfo *mainwin;
|
||||||
|
GnomeMDIChild *child;
|
||||||
|
GtkWidget *view;
|
||||||
|
|
||||||
|
g_return_if_fail (app != NULL);
|
||||||
|
|
||||||
|
mainwin = gtk_object_get_data (GTK_OBJECT (app), "gnc_mdi");
|
||||||
|
if (!mainwin || !mainwin->mdi)
|
||||||
|
return;
|
||||||
|
|
||||||
|
view = gnome_mdi_get_view_from_window (mainwin->mdi, app);
|
||||||
|
if (!view) return;
|
||||||
|
|
||||||
|
child = gnome_mdi_get_child_from_view (view);
|
||||||
|
if (!child) return;
|
||||||
|
|
||||||
|
childwin = gtk_object_get_user_data (GTK_OBJECT (child));
|
||||||
|
if (!childwin) return;
|
||||||
|
|
||||||
|
gnc_mdi_child_set_title (childwin);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gnc_mdi_destroy (GNCMDIInfo * gnc_mdi)
|
||||||
|
{
|
||||||
|
if (!gnc_mdi) return;
|
||||||
|
|
||||||
|
gnc_mdi->shutdown = NULL;
|
||||||
|
|
||||||
|
if (gnc_mdi->mdi)
|
||||||
|
gtk_object_destroy (GTK_OBJECT (gnc_mdi->mdi));
|
||||||
|
}
|
||||||
|
@ -25,19 +25,25 @@
|
|||||||
#define GNC_MDI_UTILS_H
|
#define GNC_MDI_UTILS_H
|
||||||
|
|
||||||
#include <gnome.h>
|
#include <gnome.h>
|
||||||
|
#include <guile/gh.h>
|
||||||
|
|
||||||
|
typedef void (*GNCShutdownFunc) (int exit_status);
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
GnomeMDI * mdi;
|
GnomeMDI * mdi;
|
||||||
|
char * title;
|
||||||
int component_id;
|
int component_id;
|
||||||
SCM toolbar_change_callback_id;
|
SCM toolbar_change_callback_id;
|
||||||
SCM mdi_change_callback_id;
|
SCM mdi_change_callback_id;
|
||||||
GList * children;
|
GList * children;
|
||||||
|
GNCShutdownFunc shutdown;
|
||||||
} GNCMDIInfo;
|
} GNCMDIInfo;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
GnomeMDIChild * child;
|
GnomeMDIChild * child;
|
||||||
|
GNCMDIInfo * gnc_mdi;
|
||||||
GtkWidget * contents;
|
GtkWidget * contents;
|
||||||
GnomeApp * app;
|
GnomeApp * app;
|
||||||
|
|
||||||
@ -51,4 +57,18 @@ typedef struct
|
|||||||
char * title;
|
char * title;
|
||||||
} GNCMDIChildInfo;
|
} GNCMDIChildInfo;
|
||||||
|
|
||||||
|
|
||||||
|
GNCMDIInfo * gnc_mdi_new (const char *app_name, const char *title,
|
||||||
|
GNCShutdownFunc shutdown);
|
||||||
|
void gnc_mdi_destroy (GNCMDIInfo * gnc_mdi);
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
GNCMDIInfo * gnc_mdi_get_current (void);
|
||||||
|
gboolean gnc_mdi_has_apps (void);
|
||||||
|
|
||||||
|
void gnc_app_set_title (GnomeApp *app);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -101,8 +101,6 @@ static void gnc_configure_register_hint_font(void);
|
|||||||
/* This static indicates the debugging module that this .o belongs to. */
|
/* This static indicates the debugging module that this .o belongs to. */
|
||||||
static short module = MOD_GUI;
|
static short module = MOD_GUI;
|
||||||
|
|
||||||
static GNCMDIInfo * app = NULL;
|
|
||||||
|
|
||||||
static int gnome_is_running = FALSE;
|
static int gnome_is_running = FALSE;
|
||||||
static int gnome_is_initialized = FALSE;
|
static int gnome_is_initialized = FALSE;
|
||||||
static int gnome_is_terminating = FALSE;
|
static int gnome_is_terminating = FALSE;
|
||||||
@ -131,16 +129,10 @@ gnucash_ui_is_terminating(void)
|
|||||||
return gnome_is_terminating;
|
return gnome_is_terminating;
|
||||||
}
|
}
|
||||||
|
|
||||||
GNCMDIInfo *
|
|
||||||
gnc_ui_get_data (void)
|
|
||||||
{
|
|
||||||
return app;
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gnc_ui_can_cancel_save (void)
|
gnc_ui_can_cancel_save (void)
|
||||||
{
|
{
|
||||||
return gnc_main_window_can_cancel_save (app);
|
return gnc_main_window_can_cancel_save (gnc_mdi_get_current ());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -553,7 +545,9 @@ gnucash_ui_init(void)
|
|||||||
gnc_options_dialog_set_global_help_cb (gnc_global_options_help_cb, NULL);
|
gnc_options_dialog_set_global_help_cb (gnc_global_options_help_cb, NULL);
|
||||||
|
|
||||||
/* initialize gnome MDI and set up application window defaults */
|
/* initialize gnome MDI and set up application window defaults */
|
||||||
app = gnc_main_window_new();
|
if (!gnc_mdi_get_current ())
|
||||||
|
gnc_main_window_new ();
|
||||||
|
|
||||||
/* Run the ui startup hooks. */
|
/* Run the ui startup hooks. */
|
||||||
{
|
{
|
||||||
SCM run_danglers = gh_eval_str("gnc:hook-run-danglers");
|
SCM run_danglers = gh_eval_str("gnc:hook-run-danglers");
|
||||||
@ -575,10 +569,9 @@ gnc_ui_shutdown (void)
|
|||||||
if (gnome_is_running && !gnome_is_terminating)
|
if (gnome_is_running && !gnome_is_terminating)
|
||||||
{
|
{
|
||||||
gnome_is_terminating = TRUE;
|
gnome_is_terminating = TRUE;
|
||||||
/* gnc_main_window_save(app); */
|
|
||||||
gnc_main_window_destroy(app);
|
|
||||||
app = NULL;
|
|
||||||
gtk_main_quit();
|
gtk_main_quit();
|
||||||
|
|
||||||
#ifdef USE_GUPPI
|
#ifdef USE_GUPPI
|
||||||
gnc_html_guppi_shutdown();
|
gnc_html_guppi_shutdown();
|
||||||
#endif
|
#endif
|
||||||
@ -602,11 +595,7 @@ gnc_ui_destroy (void)
|
|||||||
gnc_unregister_option_change_callback_id(register_font_callback_id);
|
gnc_unregister_option_change_callback_id(register_font_callback_id);
|
||||||
gnc_unregister_option_change_callback_id(register_hint_font_callback_id);
|
gnc_unregister_option_change_callback_id(register_hint_font_callback_id);
|
||||||
|
|
||||||
if (app != NULL)
|
gnc_mdi_destroy (gnc_mdi_get_current ());
|
||||||
{
|
|
||||||
gnc_main_window_destroy(app);
|
|
||||||
app = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
gnc_extensions_shutdown ();
|
gnc_extensions_shutdown ();
|
||||||
|
|
||||||
|
@ -30,8 +30,6 @@
|
|||||||
gboolean gnucash_ui_is_running(void);
|
gboolean gnucash_ui_is_running(void);
|
||||||
gboolean gnucash_ui_is_terminating(void);
|
gboolean gnucash_ui_is_terminating(void);
|
||||||
int gnucash_ui_init(void);
|
int gnucash_ui_init(void);
|
||||||
|
|
||||||
GNCMDIInfo * gnc_ui_get_data(void);
|
|
||||||
void gnc_ui_shutdown(void);
|
void gnc_ui_shutdown(void);
|
||||||
void gnc_ui_destroy(void);
|
void gnc_ui_destroy(void);
|
||||||
int gnc_ui_start_event_loop(void);
|
int gnc_ui_start_event_loop(void);
|
||||||
|
@ -130,7 +130,7 @@ gnc_acct_tree_view_destroy(GtkObject * obj, gpointer user_data) {
|
|||||||
GNCMDIChildInfo * mc = user_data;
|
GNCMDIChildInfo * mc = user_data;
|
||||||
GNCAcctTreeWin * w = mc->user_data;
|
GNCAcctTreeWin * w = mc->user_data;
|
||||||
|
|
||||||
gnc_main_window_remove_child(gnc_ui_get_data(), mc);
|
gnc_mdi_remove_child(gnc_mdi_get_current (), mc);
|
||||||
gnc_acct_tree_window_destroy(w);
|
gnc_acct_tree_window_destroy(w);
|
||||||
g_free(mc->toolbar_info);
|
g_free(mc->toolbar_info);
|
||||||
g_free(mc->menu_info);
|
g_free(mc->menu_info);
|
||||||
@ -144,6 +144,12 @@ gnc_acct_tree_view_destroy(GtkObject * obj, gpointer user_data) {
|
|||||||
* create a new account view.
|
* create a new account view.
|
||||||
********************************************************************/
|
********************************************************************/
|
||||||
|
|
||||||
|
static void
|
||||||
|
gnc_acct_tree_view_refresh (gpointer data)
|
||||||
|
{
|
||||||
|
gnc_mdi_child_refresh (data);
|
||||||
|
}
|
||||||
|
|
||||||
static GtkWidget *
|
static GtkWidget *
|
||||||
gnc_acct_tree_view_new(GnomeMDIChild * child, gpointer user_data) {
|
gnc_acct_tree_view_new(GnomeMDIChild * child, gpointer user_data) {
|
||||||
GNCMDIInfo * maininfo = user_data;
|
GNCMDIInfo * maininfo = user_data;
|
||||||
@ -170,11 +176,11 @@ gnc_acct_tree_view_new(GnomeMDIChild * child, gpointer user_data) {
|
|||||||
gtk_signal_connect(GTK_OBJECT(child), "destroy",
|
gtk_signal_connect(GTK_OBJECT(child), "destroy",
|
||||||
gnc_acct_tree_view_destroy, mc);
|
gnc_acct_tree_view_destroy, mc);
|
||||||
|
|
||||||
gnc_main_window_add_child(maininfo, mc);
|
gnc_mdi_add_child (maininfo, mc);
|
||||||
|
|
||||||
win->name_change_callback_id =
|
win->name_change_callback_id =
|
||||||
gnc_option_db_register_change_callback(win->odb,
|
gnc_option_db_register_change_callback(win->odb,
|
||||||
gnc_main_window_child_refresh,
|
gnc_acct_tree_view_refresh,
|
||||||
mc,
|
mc,
|
||||||
N_("Account Tree"),
|
N_("Account Tree"),
|
||||||
N_("Name of account view"));
|
N_("Name of account view"));
|
||||||
@ -204,10 +210,10 @@ gnc_acct_tree_view_new(GnomeMDIChild * child, gpointer user_data) {
|
|||||||
|
|
||||||
GnomeMDIChild *
|
GnomeMDIChild *
|
||||||
gnc_acct_tree_window_create_child(const gchar * url) {
|
gnc_acct_tree_window_create_child(const gchar * url) {
|
||||||
GNCMDIInfo * maininfo = gnc_ui_get_data();
|
GNCMDIInfo * maininfo = gnc_mdi_get_current ();
|
||||||
GnomeMDIGenericChild * accountchild =
|
GnomeMDIGenericChild * accountchild =
|
||||||
gnome_mdi_generic_child_new(url);
|
gnome_mdi_generic_child_new(url);
|
||||||
|
|
||||||
gnome_mdi_generic_child_set_label_func(accountchild,
|
gnome_mdi_generic_child_set_label_func(accountchild,
|
||||||
gnc_acct_tree_view_labeler,
|
gnc_acct_tree_view_labeler,
|
||||||
maininfo);
|
maininfo);
|
||||||
@ -225,7 +231,7 @@ gnc_acct_tree_window_create_child(const gchar * url) {
|
|||||||
|
|
||||||
void
|
void
|
||||||
gnc_main_window_open_accounts(gint toplevel) {
|
gnc_main_window_open_accounts(gint toplevel) {
|
||||||
GNCMDIInfo * maininfo = gnc_ui_get_data();
|
GNCMDIInfo * maininfo = gnc_mdi_get_current ();
|
||||||
GnomeMDIChild * accountchild = gnc_acct_tree_window_create_child(NULL);
|
GnomeMDIChild * accountchild = gnc_acct_tree_window_create_child(NULL);
|
||||||
gnome_mdi_add_child(GNOME_MDI(maininfo->mdi),
|
gnome_mdi_add_child(GNOME_MDI(maininfo->mdi),
|
||||||
GNOME_MDI_CHILD(accountchild));
|
GNOME_MDI_CHILD(accountchild));
|
||||||
|
@ -72,50 +72,6 @@
|
|||||||
|
|
||||||
static void gnc_main_window_create_menus(GNCMDIInfo * maininfo);
|
static void gnc_main_window_create_menus(GNCMDIInfo * maininfo);
|
||||||
|
|
||||||
/********************************************************************
|
|
||||||
* gnc_main_window_destroy_cb()
|
|
||||||
* Shut down the Gnucash ui windows
|
|
||||||
********************************************************************/
|
|
||||||
|
|
||||||
static void
|
|
||||||
gnc_main_window_destroy_cb(GtkObject * w, gpointer data) {
|
|
||||||
gnc_shutdown (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/********************************************************************
|
|
||||||
* gnc_main_window_app_destroyed_cb()
|
|
||||||
* called when a top-level GnomeApp is destroyed.
|
|
||||||
********************************************************************/
|
|
||||||
|
|
||||||
static void
|
|
||||||
gnc_main_window_app_destroyed_cb(GnomeApp * app, gpointer user_data) {
|
|
||||||
GNCMDIInfo * mainwin = user_data;
|
|
||||||
GNCMDIChildInfo * mc = NULL;
|
|
||||||
GnomeMDI * mdi = mainwin->mdi;
|
|
||||||
GtkWidget *toolbar;
|
|
||||||
GList * child;
|
|
||||||
|
|
||||||
if(g_list_length(mdi->windows) == 0) {
|
|
||||||
gnc_shutdown(0);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
toolbar = gtk_object_get_user_data (GTK_OBJECT (app));
|
|
||||||
if (toolbar)
|
|
||||||
gtk_widget_unref (toolbar);
|
|
||||||
gtk_object_set_user_data (GTK_OBJECT (app), NULL);
|
|
||||||
|
|
||||||
for(child = mainwin->children; child; child = child->next) {
|
|
||||||
mc = child->data;
|
|
||||||
if(mc && mc->toolbar && mc->app && (mc->app == app)) {
|
|
||||||
/* we need to pull the toolbar out to prevent its being
|
|
||||||
* destroyed */
|
|
||||||
gtk_widget_ref(mc->toolbar);
|
|
||||||
gtk_container_remove(GTK_CONTAINER(mc->toolbar->parent), mc->toolbar);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/********************************************************************
|
/********************************************************************
|
||||||
* gnc_main_window_app_created_cb()
|
* gnc_main_window_app_created_cb()
|
||||||
@ -129,12 +85,6 @@ gnc_main_window_app_created_cb(GnomeMDI * mdi, GnomeApp * app,
|
|||||||
GtkWidget * summarybar;
|
GtkWidget * summarybar;
|
||||||
GtkWidget * statusbar;
|
GtkWidget * statusbar;
|
||||||
|
|
||||||
/* enable save and restore of menubar positions */
|
|
||||||
gnome_app_enable_layout_config( app, TRUE );
|
|
||||||
|
|
||||||
/* flag the app as gnc mdi created */
|
|
||||||
gtk_object_set_data (GTK_OBJECT (app), "gnc_mdi", mdi);
|
|
||||||
|
|
||||||
/* add the summarybar */
|
/* add the summarybar */
|
||||||
summarybar = gnc_main_window_summary_new();
|
summarybar = gnc_main_window_summary_new();
|
||||||
|
|
||||||
@ -174,11 +124,6 @@ gnc_main_window_app_created_cb(GnomeMDI * mdi, GnomeApp * app,
|
|||||||
statusbar = gnome_appbar_new(FALSE, TRUE, GNOME_PREFERENCES_USER);
|
statusbar = gnome_appbar_new(FALSE, TRUE, GNOME_PREFERENCES_USER);
|
||||||
gnome_app_set_statusbar(app, statusbar);
|
gnome_app_set_statusbar(app, statusbar);
|
||||||
|
|
||||||
/* add a signal to preserve the toolbar on destroy */
|
|
||||||
gtk_signal_connect(GTK_OBJECT(app), "destroy",
|
|
||||||
GTK_SIGNAL_FUNC (gnc_main_window_app_destroyed_cb),
|
|
||||||
mainwin);
|
|
||||||
|
|
||||||
/* set up extensions menu and hints */
|
/* set up extensions menu and hints */
|
||||||
gnc_extensions_menu_setup (app);
|
gnc_extensions_menu_setup (app);
|
||||||
|
|
||||||
@ -186,60 +131,6 @@ gnc_main_window_app_created_cb(GnomeMDI * mdi, GnomeApp * app,
|
|||||||
gnc_history_update_menu (GTK_WIDGET (app));
|
gnc_history_update_menu (GTK_WIDGET (app));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
gnc_main_window_child_set_title (GNCMDIChildInfo *childwin)
|
|
||||||
{
|
|
||||||
GNCBook *book;
|
|
||||||
const char *filename;
|
|
||||||
char *title;
|
|
||||||
|
|
||||||
if (!childwin || !childwin->app)
|
|
||||||
return;
|
|
||||||
|
|
||||||
filename = gnc_book_get_url (gnc_get_current_book ());
|
|
||||||
|
|
||||||
if (!filename)
|
|
||||||
filename = _("<no file>");
|
|
||||||
else if (strncmp ("file:", filename, 5) == 0)
|
|
||||||
filename += 5;
|
|
||||||
|
|
||||||
if (!childwin->title)
|
|
||||||
title = g_strdup_printf("GnuCash (%s)", filename);
|
|
||||||
else
|
|
||||||
title = g_strdup_printf("%s - GnuCash (%s)", childwin->title, filename);
|
|
||||||
|
|
||||||
gtk_window_set_title(GTK_WINDOW(childwin->app), title);
|
|
||||||
|
|
||||||
g_free(title);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
gnc_app_set_title (GnomeApp *app)
|
|
||||||
{
|
|
||||||
GNCMDIChildInfo *childwin;
|
|
||||||
GNCMDIInfo *mainwin;
|
|
||||||
GnomeMDIChild *child;
|
|
||||||
GtkWidget *view;
|
|
||||||
|
|
||||||
if (!app)
|
|
||||||
return;
|
|
||||||
|
|
||||||
mainwin = gnc_ui_get_data ();
|
|
||||||
if (!mainwin || !mainwin->mdi)
|
|
||||||
return;
|
|
||||||
|
|
||||||
view = gnome_mdi_get_view_from_window (mainwin->mdi, app);
|
|
||||||
if (!view) return;
|
|
||||||
|
|
||||||
child = gnome_mdi_get_child_from_view (view);
|
|
||||||
if (!child) return;
|
|
||||||
|
|
||||||
childwin = gtk_object_get_user_data (GTK_OBJECT (child));
|
|
||||||
if (!childwin) return;
|
|
||||||
|
|
||||||
gnc_main_window_child_set_title (childwin);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gnc_refresh_main_window_info (void)
|
gnc_refresh_main_window_info (void)
|
||||||
{
|
{
|
||||||
@ -259,119 +150,6 @@ gnc_refresh_main_window_info (void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/********************************************************************
|
|
||||||
* gnc_main_window_child_remove_cb()
|
|
||||||
* called when a child is removed
|
|
||||||
********************************************************************/
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
gnc_main_window_child_remove_cb(GnomeMDI * mdi, GnomeMDIChild * child,
|
|
||||||
gpointer data) {
|
|
||||||
GNCMDIInfo * mainwin = data;
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/********************************************************************
|
|
||||||
* gnc_main_window_child_changed_cb()
|
|
||||||
* called when the active child changes. Not sure what this means
|
|
||||||
* with top-level windows. focus, maybe?
|
|
||||||
********************************************************************/
|
|
||||||
|
|
||||||
static void
|
|
||||||
gnc_main_window_child_changed_cb(GnomeMDI * mdi, GnomeMDIChild * not_used,
|
|
||||||
gpointer data) {
|
|
||||||
GNCMDIInfo * mainwin = data;
|
|
||||||
GNCMDIChildInfo * childwin = NULL;
|
|
||||||
GnomeUIInfo * hintinfo;
|
|
||||||
GtkWidget * oldbar;
|
|
||||||
GnomeApp * new_app = NULL;
|
|
||||||
GnomeDockItemBehavior behavior;
|
|
||||||
|
|
||||||
if(mdi && mdi->active_child) {
|
|
||||||
childwin = gtk_object_get_user_data(GTK_OBJECT(mdi->active_child));
|
|
||||||
new_app = gnome_mdi_get_app_from_view(childwin->contents);
|
|
||||||
}
|
|
||||||
|
|
||||||
behavior = GNOME_DOCK_ITEM_BEH_EXCLUSIVE;
|
|
||||||
if (!gnome_preferences_get_toolbar_detachable ())
|
|
||||||
behavior |= GNOME_DOCK_ITEM_BEH_LOCKED;
|
|
||||||
|
|
||||||
if(childwin && childwin->toolbar) {
|
|
||||||
if(childwin->app && (childwin->app == new_app)) {
|
|
||||||
oldbar = gtk_object_get_user_data(GTK_OBJECT(new_app));
|
|
||||||
if(oldbar && (oldbar != childwin->toolbar)) {
|
|
||||||
if (oldbar->parent)
|
|
||||||
gtk_widget_hide(GTK_WIDGET(oldbar)->parent);
|
|
||||||
gtk_widget_show(GTK_WIDGET(childwin->toolbar)->parent);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(childwin->app) {
|
|
||||||
oldbar = gtk_object_get_user_data(GTK_OBJECT(new_app));
|
|
||||||
if(oldbar && oldbar->parent && (oldbar != childwin->toolbar)) {
|
|
||||||
gtk_widget_hide(GTK_WIDGET(oldbar)->parent);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* we need to move the toolbar to a new App (mdi mode probably
|
|
||||||
* changed) */
|
|
||||||
if(GTK_WIDGET(childwin->toolbar)->parent) {
|
|
||||||
gtk_widget_ref(GTK_WIDGET(childwin->toolbar));
|
|
||||||
gtk_container_remove(GTK_CONTAINER
|
|
||||||
(GTK_WIDGET(childwin->toolbar)->parent),
|
|
||||||
GTK_WIDGET(childwin->toolbar));
|
|
||||||
}
|
|
||||||
childwin->app = new_app;
|
|
||||||
gnome_app_add_toolbar(GNOME_APP(childwin->app),
|
|
||||||
GTK_TOOLBAR(childwin->toolbar),
|
|
||||||
"Toolbar", behavior,
|
|
||||||
GNOME_DOCK_TOP, 1, 0, 0);
|
|
||||||
gtk_toolbar_set_style(GTK_TOOLBAR(childwin->toolbar),
|
|
||||||
gnc_get_toolbar_style());
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
oldbar = gtk_object_get_user_data(GTK_OBJECT(new_app));
|
|
||||||
if(oldbar && oldbar->parent && (oldbar != childwin->toolbar)) {
|
|
||||||
gtk_widget_hide(GTK_WIDGET(oldbar)->parent);
|
|
||||||
}
|
|
||||||
|
|
||||||
childwin->app = new_app;
|
|
||||||
gnome_app_add_toolbar(GNOME_APP(childwin->app),
|
|
||||||
GTK_TOOLBAR(childwin->toolbar),
|
|
||||||
"Toolbar", behavior,
|
|
||||||
GNOME_DOCK_TOP, 1, 0, 0);
|
|
||||||
gtk_toolbar_set_style(GTK_TOOLBAR(childwin->toolbar),
|
|
||||||
gnc_get_toolbar_style());
|
|
||||||
}
|
|
||||||
|
|
||||||
oldbar = gtk_object_get_user_data(GTK_OBJECT(new_app));
|
|
||||||
if (oldbar)
|
|
||||||
gtk_widget_unref (oldbar);
|
|
||||||
|
|
||||||
if (childwin->toolbar)
|
|
||||||
gtk_widget_ref (childwin->toolbar);
|
|
||||||
|
|
||||||
gtk_object_set_user_data(GTK_OBJECT(new_app), childwin->toolbar);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* set the window title */
|
|
||||||
gnc_main_window_child_set_title (childwin);
|
|
||||||
|
|
||||||
/* install menu hints if relevant */
|
|
||||||
if(mdi->active_child) {
|
|
||||||
/* the arg to this callback is SUPPOSED to be the last active child,
|
|
||||||
* but it gets to be NULL under some circumstances */
|
|
||||||
hintinfo = gnome_mdi_get_menubar_info(new_app);
|
|
||||||
if(hintinfo) {
|
|
||||||
gnome_app_install_menu_hints(new_app, hintinfo);
|
|
||||||
}
|
|
||||||
|
|
||||||
hintinfo = gnome_mdi_get_child_menu_info(new_app);
|
|
||||||
if(hintinfo) {
|
|
||||||
gnome_app_install_menu_hints(new_app, hintinfo);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/********************************************************************
|
/********************************************************************
|
||||||
* gnc_main_window_configure_toolbar_cb
|
* gnc_main_window_configure_toolbar_cb
|
||||||
@ -445,45 +223,16 @@ gnc_main_window_create_child(const gchar * configstring) {
|
|||||||
return child;
|
return child;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/********************************************************************
|
|
||||||
* gnc_main_window_child_save_func()
|
|
||||||
********************************************************************/
|
|
||||||
|
|
||||||
static char *
|
|
||||||
gnc_main_window_child_save_func(GnomeMDIChild * child, gpointer user_data) {
|
|
||||||
return g_strdup(child->name);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/********************************************************************
|
/********************************************************************
|
||||||
* gnc_main_window_can_*()
|
* gnc_main_window_can_*()
|
||||||
********************************************************************/
|
********************************************************************/
|
||||||
|
|
||||||
static gboolean
|
|
||||||
gnc_main_window_has_apps (GNCMDIInfo * wind)
|
|
||||||
{
|
|
||||||
GList *toplevels;
|
|
||||||
|
|
||||||
toplevels = gtk_container_get_toplevels ();
|
|
||||||
while (toplevels)
|
|
||||||
{
|
|
||||||
if (GNOME_IS_APP (toplevels->data) &&
|
|
||||||
!GTK_OBJECT_DESTROYED (toplevels->data))
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
toplevels = toplevels->next;
|
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
gnc_main_window_can_save (GNCMDIInfo * wind)
|
gnc_main_window_can_save (GNCMDIInfo * wind)
|
||||||
{
|
{
|
||||||
if (!wind) return FALSE;
|
if (!wind) return FALSE;
|
||||||
|
|
||||||
return gnc_main_window_has_apps (wind);
|
return gnc_mdi_has_apps ();
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
@ -491,10 +240,9 @@ gnc_main_window_can_cancel_save (GNCMDIInfo *wind)
|
|||||||
{
|
{
|
||||||
if (!wind) return FALSE;
|
if (!wind) return FALSE;
|
||||||
|
|
||||||
return gnc_main_window_has_apps (wind);
|
return gnc_mdi_has_apps ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/********************************************************************
|
/********************************************************************
|
||||||
* gnc_main_window_save()
|
* gnc_main_window_save()
|
||||||
* save the status of the MDI session
|
* save the status of the MDI session
|
||||||
@ -505,6 +253,9 @@ gnc_main_window_save(GNCMDIInfo * wind, char * filename) {
|
|||||||
char * encoded;
|
char * encoded;
|
||||||
char * session_name;
|
char * session_name;
|
||||||
|
|
||||||
|
if (!wind)
|
||||||
|
return;
|
||||||
|
|
||||||
encoded = gnc_html_encode_string(filename);
|
encoded = gnc_html_encode_string(filename);
|
||||||
session_name = g_strdup_printf("/GnuCash/MDI : %s",
|
session_name = g_strdup_printf("/GnuCash/MDI : %s",
|
||||||
encoded ? encoded : "");
|
encoded ? encoded : "");
|
||||||
@ -569,16 +320,18 @@ gnc_main_window_close_children(GNCMDIInfo * wind) {
|
|||||||
|
|
||||||
GNCMDIInfo *
|
GNCMDIInfo *
|
||||||
gnc_main_window_new(void) {
|
gnc_main_window_new(void) {
|
||||||
GNCMDIInfo * retval = g_new0(GNCMDIInfo, 1);
|
GNCMDIInfo * retval;
|
||||||
|
|
||||||
|
retval = gnc_mdi_new ("GnuCash", "GnuCash", gnc_shutdown);
|
||||||
|
g_return_val_if_fail (retval != NULL, NULL);
|
||||||
|
|
||||||
retval->mdi = GNOME_MDI(gnome_mdi_new("GnuCash", "GnuCash"));
|
|
||||||
retval->component_id =
|
retval->component_id =
|
||||||
gnc_register_gui_component (WINDOW_MAIN_CM_CLASS, NULL, NULL,
|
gnc_register_gui_component (WINDOW_MAIN_CM_CLASS, NULL, NULL,
|
||||||
retval);
|
retval);
|
||||||
|
|
||||||
/* these menu and toolbar options are the ones that are always
|
/* these menu and toolbar options are the ones that are always
|
||||||
* available */
|
* available */
|
||||||
gnc_main_window_create_menus(retval);
|
gnc_main_window_create_menus (retval);
|
||||||
|
|
||||||
/* set up the position where the child menus/toolbars will be
|
/* set up the position where the child menus/toolbars will be
|
||||||
* inserted */
|
* inserted */
|
||||||
@ -600,77 +353,13 @@ gnc_main_window_new(void) {
|
|||||||
gnome_mdi_set_mode(retval->mdi, gnc_get_mdi_mode ());
|
gnome_mdi_set_mode(retval->mdi, gnc_get_mdi_mode ());
|
||||||
|
|
||||||
/* handle top-level signals */
|
/* handle top-level signals */
|
||||||
gtk_signal_connect(GTK_OBJECT(retval->mdi), "destroy",
|
|
||||||
GTK_SIGNAL_FUNC(gnc_main_window_destroy_cb),
|
|
||||||
retval);
|
|
||||||
gtk_signal_connect(GTK_OBJECT(retval->mdi), "app_created",
|
gtk_signal_connect(GTK_OBJECT(retval->mdi), "app_created",
|
||||||
GTK_SIGNAL_FUNC(gnc_main_window_app_created_cb),
|
GTK_SIGNAL_FUNC(gnc_main_window_app_created_cb),
|
||||||
retval);
|
retval);
|
||||||
gtk_signal_connect(GTK_OBJECT(retval->mdi), "remove_child",
|
|
||||||
GTK_SIGNAL_FUNC(gnc_main_window_child_remove_cb),
|
|
||||||
retval);
|
|
||||||
gtk_signal_connect(GTK_OBJECT(retval->mdi), "child_changed",
|
|
||||||
GTK_SIGNAL_FUNC(gnc_main_window_child_changed_cb),
|
|
||||||
retval);
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
/********************************************************************
|
|
||||||
* gnc_main_window_add_child()
|
|
||||||
********************************************************************/
|
|
||||||
|
|
||||||
void
|
|
||||||
gnc_main_window_add_child(GNCMDIInfo * wind, GNCMDIChildInfo * child) {
|
|
||||||
wind->children = g_list_append(wind->children, child);
|
|
||||||
|
|
||||||
if(GNOME_IS_MDI_GENERIC_CHILD(child->child)) {
|
|
||||||
gnome_mdi_generic_child_set_config_func
|
|
||||||
(GNOME_MDI_GENERIC_CHILD(child->child),
|
|
||||||
gnc_main_window_child_save_func, NULL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/********************************************************************
|
|
||||||
* gnc_main_window_remove_child()
|
|
||||||
********************************************************************/
|
|
||||||
|
|
||||||
void
|
|
||||||
gnc_main_window_remove_child(GNCMDIInfo * wind, GNCMDIChildInfo * child) {
|
|
||||||
wind->children = g_list_remove(wind->children, child);
|
|
||||||
}
|
|
||||||
|
|
||||||
/********************************************************************
|
|
||||||
* gnc_main_window_destroy()
|
|
||||||
* free MDI toplevel resources
|
|
||||||
********************************************************************/
|
|
||||||
|
|
||||||
void
|
|
||||||
gnc_main_window_destroy(GNCMDIInfo * wind) {
|
|
||||||
g_free(wind);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/********************************************************************
|
|
||||||
* gnc_main_window_child_refresh(GNCMDIChildInfo * child)
|
|
||||||
* send an update event to the child
|
|
||||||
********************************************************************/
|
|
||||||
|
|
||||||
void
|
|
||||||
gnc_main_window_child_refresh(gpointer data) {
|
|
||||||
GNCMDIChildInfo *child = data;
|
|
||||||
|
|
||||||
gnome_mdi_child_set_name(child->child, child->child->name);
|
|
||||||
gnome_mdi_update_child(gnc_ui_get_data()->mdi, child->child);
|
|
||||||
|
|
||||||
/* pesky child_set_name tries to change the window title... set
|
|
||||||
* it back. */
|
|
||||||
if((gnc_ui_get_data()->mdi->active_child == child->child) && child->app) {
|
|
||||||
gnc_main_window_child_set_title (child);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/********************************************************************
|
/********************************************************************
|
||||||
* menu/toolbar data structures and callbacks
|
* menu/toolbar data structures and callbacks
|
||||||
* these are the "templates" that are installed in every toplevel
|
* these are the "templates" that are installed in every toplevel
|
||||||
@ -845,7 +534,7 @@ gnc_main_window_file_close_cb(GtkWidget * widget, GnomeMDI * mdi) {
|
|||||||
{
|
{
|
||||||
GNCMDIInfo *main_info;
|
GNCMDIInfo *main_info;
|
||||||
|
|
||||||
main_info = gnc_ui_get_data ();
|
main_info = gnc_mdi_get_current ();
|
||||||
if (!main_info) return;
|
if (!main_info) return;
|
||||||
|
|
||||||
mdi = main_info->mdi;
|
mdi = main_info->mdi;
|
||||||
|
@ -38,11 +38,6 @@ void gnc_main_window_restore(GNCMDIInfo * wind,
|
|||||||
const char * session);
|
const char * session);
|
||||||
void gnc_main_window_create_child_toolbar(GNCMDIInfo * mi,
|
void gnc_main_window_create_child_toolbar(GNCMDIInfo * mi,
|
||||||
GNCMDIChildInfo * child);
|
GNCMDIChildInfo * child);
|
||||||
void gnc_main_window_add_child(GNCMDIInfo * main,
|
|
||||||
GNCMDIChildInfo * child);
|
|
||||||
void gnc_main_window_remove_child(GNCMDIInfo * main,
|
|
||||||
GNCMDIChildInfo * child);
|
|
||||||
void gnc_main_window_child_refresh(gpointer data);
|
|
||||||
GnomeMDIChild * gnc_main_window_create_child(const gchar * configstring);
|
GnomeMDIChild * gnc_main_window_create_child(const gchar * configstring);
|
||||||
void gnc_main_window_close_children(GNCMDIInfo * main);
|
void gnc_main_window_close_children(GNCMDIInfo * main);
|
||||||
|
|
||||||
|
@ -129,7 +129,8 @@ static void
|
|||||||
gnc_report_window_view_destroy(GtkObject * obj, gpointer user_data) {
|
gnc_report_window_view_destroy(GtkObject * obj, gpointer user_data) {
|
||||||
GNCMDIChildInfo * mc = user_data;
|
GNCMDIChildInfo * mc = user_data;
|
||||||
gnc_report_window * w = mc->user_data;
|
gnc_report_window * w = mc->user_data;
|
||||||
gnc_main_window_remove_child(gnc_ui_get_data(), mc);
|
|
||||||
|
gnc_mdi_remove_child(gnc_mdi_get_current(), mc);
|
||||||
g_free(mc->toolbar_info);
|
g_free(mc->toolbar_info);
|
||||||
g_free(mc->menu_info);
|
g_free(mc->menu_info);
|
||||||
g_free(mc->title);
|
g_free(mc->title);
|
||||||
@ -157,7 +158,7 @@ gnc_report_window_view_new(GnomeMDIChild * child, gpointer user_data) {
|
|||||||
mc->child = child;
|
mc->child = child;
|
||||||
mc->title = g_strdup("Report");
|
mc->title = g_strdup("Report");
|
||||||
|
|
||||||
gnc_main_window_add_child(maininfo, mc);
|
gnc_mdi_add_child (maininfo, mc);
|
||||||
|
|
||||||
type = gnc_html_parse_url(gnc_report_window_get_html(win),
|
type = gnc_html_parse_url(gnc_report_window_get_html(win),
|
||||||
child->name, &url_location, &url_label);
|
child->name, &url_location, &url_label);
|
||||||
@ -197,7 +198,7 @@ GnomeMDIChild *
|
|||||||
gnc_report_window_create_child(const gchar * configstring) {
|
gnc_report_window_create_child(const gchar * configstring) {
|
||||||
GnomeMDIGenericChild * reportchild =
|
GnomeMDIGenericChild * reportchild =
|
||||||
gnome_mdi_generic_child_new(configstring);
|
gnome_mdi_generic_child_new(configstring);
|
||||||
GNCMDIInfo * maininfo = gnc_ui_get_data();
|
GNCMDIInfo * maininfo = gnc_mdi_get_current();
|
||||||
|
|
||||||
gnome_mdi_generic_child_set_label_func(reportchild,
|
gnome_mdi_generic_child_set_label_func(reportchild,
|
||||||
gnc_report_window_view_labeler,
|
gnc_report_window_view_labeler,
|
||||||
@ -224,7 +225,7 @@ gnc_main_window_open_report(int report_id, gint toplevel) {
|
|||||||
void
|
void
|
||||||
gnc_main_window_open_report_url(const char * url, gint toplevel) {
|
gnc_main_window_open_report_url(const char * url, gint toplevel) {
|
||||||
GnomeMDIChild * reportchild = gnc_report_window_create_child(url);
|
GnomeMDIChild * reportchild = gnc_report_window_create_child(url);
|
||||||
GNCMDIInfo * maininfo = gnc_ui_get_data();
|
GNCMDIInfo * maininfo = gnc_mdi_get_current();
|
||||||
|
|
||||||
gnome_mdi_add_child(GNOME_MDI(maininfo->mdi),
|
gnome_mdi_add_child(GNOME_MDI(maininfo->mdi),
|
||||||
GNOME_MDI_CHILD(reportchild));
|
GNOME_MDI_CHILD(reportchild));
|
||||||
@ -440,6 +441,12 @@ gnc_report_window_option_change_cb(gpointer data) {
|
|||||||
* called after a report is loaded into the gnc_html widget
|
* called after a report is loaded into the gnc_html widget
|
||||||
********************************************************************/
|
********************************************************************/
|
||||||
|
|
||||||
|
static void
|
||||||
|
gnc_report_window_refresh (gpointer data)
|
||||||
|
{
|
||||||
|
gnc_mdi_child_refresh (data);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gnc_report_window_load_cb(gnc_html * html, URLType type,
|
gnc_report_window_load_cb(gnc_html * html, URLType type,
|
||||||
const gchar * location, const gchar * label,
|
const gchar * location, const gchar * label,
|
||||||
@ -491,7 +498,7 @@ gnc_report_window_load_cb(gnc_html * html, URLType type,
|
|||||||
win->initial_odb = gnc_option_db_new(gh_call1(get_options, inst_report));
|
win->initial_odb = gnc_option_db_new(gh_call1(get_options, inst_report));
|
||||||
win->name_change_cb_id =
|
win->name_change_cb_id =
|
||||||
gnc_option_db_register_change_callback(win->initial_odb,
|
gnc_option_db_register_change_callback(win->initial_odb,
|
||||||
gnc_main_window_child_refresh,
|
gnc_report_window_refresh,
|
||||||
win->mc,
|
win->mc,
|
||||||
"General", "Report name");
|
"General", "Report name");
|
||||||
}
|
}
|
||||||
|
@ -131,7 +131,7 @@ the account instead of opening a register.") #f))
|
|||||||
(if (not save-file?) (gnc:warn (_ "Can't save window state")))
|
(if (not save-file?) (gnc:warn (_ "Can't save window state")))
|
||||||
|
|
||||||
(if (and save-file? conf-file-name
|
(if (and save-file? conf-file-name
|
||||||
(gnc:main-window-can-save? (gnc:get-ui-data)))
|
(gnc:main-window-can-save? (gnc:mdi-get-current)))
|
||||||
(let ((book-path (build-path (getenv "HOME") ".gnucash" "books"
|
(let ((book-path (build-path (getenv "HOME") ".gnucash" "books"
|
||||||
conf-file-name)))
|
conf-file-name)))
|
||||||
(with-output-to-port (open-output-file book-path)
|
(with-output-to-port (open-output-file book-path)
|
||||||
@ -149,7 +149,7 @@ the account instead of opening a register.") #f))
|
|||||||
#t gnc:*acct-tree-options*)
|
#t gnc:*acct-tree-options*)
|
||||||
|
|
||||||
(force-output)))
|
(force-output)))
|
||||||
(gnc:main-window-save (gnc:get-ui-data) book-url)))))
|
(gnc:main-window-save (gnc:mdi-get-current) book-url)))))
|
||||||
|
|
||||||
(define (gnc:main-window-book-close-handler book-url)
|
(define (gnc:main-window-book-close-handler book-url)
|
||||||
(gnc:main-window-save-state book-url)
|
(gnc:main-window-save-state book-url)
|
||||||
@ -182,7 +182,7 @@ the account instead of opening a register.") #f))
|
|||||||
(dead-reports '()))
|
(dead-reports '()))
|
||||||
(if conf-file-name
|
(if conf-file-name
|
||||||
(try-load conf-file-name))
|
(try-load conf-file-name))
|
||||||
(gnc:main-window-restore (gnc:get-ui-data) book-url)))
|
(gnc:main-window-restore (gnc:mdi-get-current) book-url)))
|
||||||
|
|
||||||
(gnc:hook-add-dangler gnc:*book-opened-hook*
|
(gnc:hook-add-dangler gnc:*book-opened-hook*
|
||||||
gnc:main-window-book-open-handler)
|
gnc:main-window-book-open-handler)
|
||||||
|
Loading…
Reference in New Issue
Block a user