From 819699c541f2811c669f7b30a5b03edc7d128e1f Mon Sep 17 00:00:00 2001 From: Dave Peticolas Date: Wed, 18 Apr 2001 21:31:36 +0000 Subject: [PATCH] Bill Gribble's mdi patch. * src/gnome/dialog-options.c: don't destroy options dialog twice. * src/gnome/window-main.c: hopefully last MDI fixes; rearrange menu and replace "New Window" with "Move to New Window." git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@3993 57a11ea4-9604-0410-9ed3-97b8803252fd --- ChangeLog | 7 +++++ src/gnome/dialog-options.c | 10 ++++++ src/gnome/window-main.c | 64 +++++++++++--------------------------- 3 files changed, 35 insertions(+), 46 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4c2e002a9f..2795424c90 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2001-04-18 Bill Gribble + + * src/gnome/dialog-options.c: don't destroy options dialog twice. + + * src/gnome/window-main.c: hopefully last MDI fixes; rearrange + menu and replace "New Window" with "Move to New Window." + 2001-04-18 Dave Peticolas * src/gnc-ui-util.c (gnc_ui_account_get_balance): use current diff --git a/src/gnome/dialog-options.c b/src/gnome/dialog-options.c index ceb6e8b173..871c9dabec 100644 --- a/src/gnome/dialog-options.c +++ b/src/gnome/dialog-options.c @@ -1909,6 +1909,12 @@ gnc_options_dialog_help_stub_cb(GtkWidget * w, gpointer data) { static int gnc_options_dialog_close_stub_cb(GtkWidget * w, gpointer data) { GNCOptionWin * window = data; + + gtk_signal_disconnect_by_func(GTK_OBJECT(window->container), + GTK_SIGNAL_FUNC + (gnc_options_dialog_close_stub_cb), + data); + if(window->close_cb) { (window->close_cb)(window, window->close_cb_data); return TRUE; @@ -1985,6 +1991,10 @@ gnc_options_dialog_new(gboolean make_toplevel) { GTK_SIGNAL_FUNC(gnc_options_dialog_close_stub_cb), retval); + gtk_signal_connect(GTK_OBJECT(retval->container), "destroy", + GTK_SIGNAL_FUNC(gnc_options_dialog_close_stub_cb), + retval); + gtk_box_pack_start(GTK_BOX(buttonbox), ok_button, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(buttonbox), apply_button, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(buttonbox), help_button, TRUE, TRUE, 0); diff --git a/src/gnome/window-main.c b/src/gnome/window-main.c index 7adb9e071d..ef5e57b86d 100644 --- a/src/gnome/window-main.c +++ b/src/gnome/window-main.c @@ -74,19 +74,6 @@ gnc_main_window_destroy_cb(GtkObject * w) { } -/******************************************************************** - * gnc_main_window_remove_view_cb() - * we only have one view per child, so destroy the child - ********************************************************************/ - -static gint -gnc_main_window_remove_view_cb(GnomeMDI * mdi, GnomeMDIChild * child, - gpointer data) { - GNCMainInfo * mainwin = data; - gtk_object_destroy(GTK_OBJECT(child)); - return TRUE; -} - /******************************************************************** * gnc_main_window_app_destroyed_cb() * called when a top-level GnomeApp is destroyed. @@ -96,6 +83,7 @@ static void gnc_main_window_app_destroyed_cb(GnomeApp * app, gpointer user_data) { GNCMainInfo * mainwin = user_data; GNCMainChildInfo * mc = NULL; + GnomeMDI * mdi = mainwin->mdi; GtkWidget *toolbar; GList * child; @@ -243,11 +231,15 @@ static void gnc_main_window_child_changed_cb(GnomeMDI * mdi, GnomeMDIChild * not_used, gpointer data) { GNCMainInfo * mainwin = data; - GNCMainChildInfo * childwin = - gtk_object_get_user_data(GTK_OBJECT(mdi->active_child)); + GNCMainChildInfo * childwin = NULL; GnomeUIInfo * hintinfo; GtkWidget * oldbar; - GnomeApp * new_app = gnome_mdi_get_app_from_view(childwin->contents); + GnomeApp * new_app = NULL; + + 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); + } if(childwin && childwin->toolbar) { if(childwin->app && (childwin->app == new_app)) { @@ -325,19 +317,6 @@ gnc_main_window_child_changed_cb(GnomeMDI * mdi, GnomeMDIChild * not_used, } -/******************************************************************** - * gnc_main_window_view_changed_cb() - * called when the view changes. - ********************************************************************/ - -static void -gnc_main_window_view_changed_cb(GnomeMDI * mdi, GnomeApp * app, - gpointer data) { - GNCMainInfo * mainwin = data; - /* don't do anything ATM */ -} - - /******************************************************************** * gnc_main_window_configure_toolbar_cb * called when the toolbar button style changes @@ -443,9 +422,6 @@ gnc_main_window_new(void) { gtk_signal_connect(GTK_OBJECT(retval->mdi), "destroy", GTK_SIGNAL_FUNC(gnc_main_window_destroy_cb), retval); - gtk_signal_connect(GTK_OBJECT(retval->mdi), "remove_view", - GTK_SIGNAL_FUNC(gnc_main_window_remove_view_cb), - retval); gtk_signal_connect(GTK_OBJECT(retval->mdi), "app_created", GTK_SIGNAL_FUNC(gnc_main_window_app_created_cb), retval); @@ -455,10 +431,6 @@ gnc_main_window_new(void) { gtk_signal_connect(GTK_OBJECT(retval->mdi), "child_changed", GTK_SIGNAL_FUNC(gnc_main_window_child_changed_cb), retval); - gtk_signal_connect(GTK_OBJECT(retval->mdi), "view_changed", - GTK_SIGNAL_FUNC(gnc_main_window_view_changed_cb), - retval); - return retval; } @@ -574,13 +546,13 @@ gnc_main_window_file_new_window_cb(GtkWidget * widget, GnomeMDI * mdi) { char * location; char * label; - if(mdi->active_child) { + if(mdi->active_child && mdi->active_view) { if(!strcmp(mdi->active_child->name, _("Accounts"))) { gnc_main_window_open_accounts(TRUE); } else { - GnomeMDIChild * child = - gnc_main_window_create_child(mdi->active_child->name); + GnomeMDIChild * child = mdi->active_child; + gnome_mdi_remove_view(mdi, mdi->active_view, FALSE); gnome_mdi_add_toplevel_view(mdi, child); } } @@ -735,13 +707,6 @@ gnc_main_window_create_menus(GNCMainInfo * maininfo) { 'i', GDK_CONTROL_MASK, NULL }, GNOMEUIINFO_SEPARATOR, - { - GNOME_APP_UI_ITEM, - N_("New _Window"), - N_("Open a new top-level GnuCash window"), - gnc_main_window_file_new_window_cb, NULL, NULL, - GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL - }, { GNOME_APP_UI_ITEM, N_("New _Account Tree"), @@ -750,6 +715,13 @@ gnc_main_window_create_menus(GNCMainInfo * maininfo) { GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL }, GNOMEUIINFO_SEPARATOR, + { + GNOME_APP_UI_ITEM, + N_("Move to New Window"), + N_("Open a new top-level GnuCash window for the current view"), + gnc_main_window_file_new_window_cb, NULL, NULL, + GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL + }, { GNOME_APP_UI_ITEM, N_("Close _Window"),