Index: app/commands.c =================================================================== --- app/commands.c (revision 3692) +++ app/commands.c (working copy) @@ -969,8 +969,34 @@ diagram_properties_show(ddisp->diagram); } +void +view_main_toolbar_callback (GtkAction *action) +{ + if (gtk_toggle_action_get_active (action) == TRUE) + { + integrated_ui_main_toolbar_show (); + } + else + { + integrated_ui_main_toolbar_hide (); + } +} void +view_main_statusbar_callback (GtkAction *action) +{ + if (gtk_toggle_action_get_active (action) == TRUE) + { + integrated_ui_main_statusbar_show (); + } + else + { + integrated_ui_main_statusbar_hide (); + } +} + + +void objects_place_over_callback (GtkAction *action) { diagram_place_over_selected(ddisplay_active_diagram()); Index: app/display.c =================================================================== --- app/display.c (revision 3692) +++ app/display.c (working copy) @@ -825,8 +825,11 @@ static void update_snap_grid_status(DDisplay *ddisp) { - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ddisp->grid_status), - ddisp->grid.snap); + if (ddisp->grid_status) + { + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ddisp->grid_status), + ddisp->grid.snap); + } } /** Set the display's mainpoint magnetism setting, updating menu and button @@ -855,8 +858,11 @@ static void update_mainpoint_status(DDisplay *ddisp) { - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ddisp->mainpoint_status), - ddisp->mainpoint_magnetism); + if (ddisp->mainpoint_status) + { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ddisp->mainpoint_status), + ddisp->mainpoint_magnetism); + } } /** Scroll display to where point x,y (window coords) is visible */ Index: app/commands.h =================================================================== --- app/commands.h (revision 3692) +++ app/commands.h (working copy) @@ -63,6 +63,9 @@ void view_redraw_callback (GtkAction *action); void view_diagram_properties_callback (GtkAction *action); +void view_main_toolbar_callback (GtkAction *action); +void view_main_statusbar_callback (GtkAction *action); + void objects_place_over_callback (GtkAction *action); void objects_place_under_callback (GtkAction *action); void objects_place_up_callback (GtkAction *action); Index: app/app_procs.c =================================================================== --- app/app_procs.c (revision 3692) +++ app/app_procs.c (working copy) @@ -954,13 +954,16 @@ if (dia_is_interactive && files == NULL && !nonew) { if (prefs.use_integrated_ui) { - /* Add Diagram after window is shown */ - GtkWidget *ui = interface_get_toolbox_shell(); - - g_signal_connect (G_OBJECT (ui), - "window-state-event", - integrated_ui_create_initial_diagrams_callback, - NULL); + GList * list; + + file_new_callback(NULL); + list = dia_open_diagrams(); + if (list) + { + Diagram * diagram = list->data; + diagram_update_extents(diagram); + diagram->is_default = TRUE; + } } else { @@ -984,26 +987,6 @@ dynobj_refresh_init(); } -static void -integrated_ui_create_initial_diagrams_callback (GtkWidget *widget, - gpointer user_data) -{ - GList * list; - - file_new_callback(NULL); - list = dia_open_diagrams(); - if (list) - { - Diagram * diagram = list->data; - diagram_update_extents(diagram); - diagram->is_default = TRUE; - } - - g_signal_handler_disconnect (widget, - integrated_ui_create_initial_diagrams_callback); -} - - #if 0 /* app_procs.c: warning: `set_true_callback' defined but not used */ static void Index: app/interface.c =================================================================== --- app/interface.c (revision 3692) +++ app/interface.c (working copy) @@ -494,7 +494,7 @@ gtk_container_add (GTK_CONTAINER(close_button), image); gtk_signal_connect (GTK_OBJECT (close_button), "clicked", GTK_SIGNAL_FUNC (close_notebook_page_callback), ddisp->container); - /* */ + /* */ gtk_box_pack_start( GTK_BOX(tab_label_container), close_button, FALSE, FALSE, 0 ); gtk_widget_show (close_button); @@ -559,7 +559,7 @@ /* Canvas */ ddisp->canvas = dia_canvas_new(); - /* Dia's canvas does it' double buffering alone so switch off GTK's */ + /* Dia's canvas does it's double buffering alone so switch off GTK's */ gtk_widget_set_double_buffered (ddisp->canvas, FALSE); gtk_widget_set_events (ddisp->canvas, CANVAS_EVENT_MASK); @@ -574,9 +574,7 @@ G_CALLBACK(display_drop_callback), NULL); g_signal_connect (GTK_OBJECT (ddisp->canvas), "drag_data_received", G_CALLBACK(display_data_received_callback), ddisp); -/* - gtk_object_set_user_data (GTK_OBJECT (ddisp->canvas), (gpointer) ddisp); -*/ + /* place all the widgets */ gtk_table_attach (GTK_TABLE (table), ddisp->origin, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0); @@ -596,29 +594,23 @@ ddisp->common_toolbar = ui.toolbar; + /* Stand-alone window menubar */ ddisp->menu_bar = NULL; - /* Zoom status pseudo-optionmenu */ + /* Stand-alone window Zoom status/menu */ ddisp->zoom_status = NULL; - /* Grid on/off button */ + /* Stand-alone window Grid on/off button */ ddisp->grid_status = NULL; - ddisp->mainpoint_status = dia_toggle_button_new_with_icons(dia_mainpoints_on_icon, - dia_mainpoints_off_icon); - g_signal_connect(G_OBJECT(ddisp->mainpoint_status), "toggled", - G_CALLBACK (interface_toggle_mainpoint_magnetism), ddisp); - gtk_tooltips_set_tip(tool_tips, ddisp->mainpoint_status, - _("Toggles object snapping for this window."), NULL); - gtk_box_pack_start (GTK_BOX (status_hbox), ddisp->mainpoint_status, - FALSE, FALSE, 0); + /* Stand-alone window Object Snapping button */ + ddisp->mainpoint_status = NULL; + gtk_widget_show (ddisp->container); + gtk_widget_show (table); gtk_widget_show (ddisp->hsb); gtk_widget_show (ddisp->vsb); display_rulers_show (ddisp); - gtk_widget_show (table); - gtk_widget_show (ddisp->container); - gtk_widget_show (ddisp->canvas); /* Ensure that the the new page is showing */ @@ -1593,8 +1585,6 @@ /* Applicatioon Statusbar */ statusbar = gtk_statusbar_new (); gtk_box_pack_end (GTK_BOX (main_vbox), statusbar, FALSE, TRUE, 0); - gtk_widget_show (statusbar); - /* HBox for everything below the menubar and toolbars */ hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_end (GTK_BOX (main_vbox), hbox, TRUE, TRUE, 0); @@ -1658,6 +1648,11 @@ ui.diagram_notebook = GTK_NOTEBOOK (notebook); ui.statusbar = GTK_STATUSBAR (statusbar); + /* NOTE: These functions use ui.xxx assignments above and so must come after + * the user interface components are set. */ + integrated_ui_main_toolbar_show (); + integrated_ui_main_statusbar_show (); + /* For access outside here: */ g_object_set_data (G_OBJECT (ui.main_window), DIA_MAIN_NOTEBOOK, notebook); @@ -1785,3 +1780,76 @@ return toolbox_shell; } + +/* Indicate if the integrated UI toolbar is showing. + * @return TRUE if showing, FALSE if not showing or doesn't exist + */ +gboolean integrated_ui_main_toolbar_is_showing (void) +{ + if (ui.toolbar) + { + return GTK_WIDGET_VISIBLE (ui.toolbar)? TRUE : FALSE; + } + return FALSE; +} + +/* show() integrated UI main toolbar and set pulldown menu action. */ +void integrated_ui_main_toolbar_show (void) +{ + if (ui.toolbar) + { + gtk_widget_show (GTK_WIDGET (ui.toolbar)); + GtkAction * action = menus_get_action (VIEW_MAIN_TOOLBAR_ACTION); + if (action) + gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), TRUE); + } +} + +/* hide() integrated UI main toolbar and reset pulldown menu action. */ +void integrated_ui_main_toolbar_hide (void) +{ + if (ui.toolbar) + { + gtk_widget_hide (GTK_WIDGET (ui.toolbar)); + GtkAction * action = menus_get_action (VIEW_MAIN_TOOLBAR_ACTION); + if (action) + gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), FALSE); + } +} + +/* Indicate if the integrated UI statusbar is showing. + * @return TRUE if showing, FALSE if not showing or doesn't exist + */ +gboolean integrated_ui_main_statusbar_is_showing (void) +{ + if (ui.statusbar) + { + return GTK_WIDGET_VISIBLE (ui.statusbar)? TRUE : FALSE; + } +} + +/* show() integrated UI main statusbar and set pulldown menu action. */ +void integrated_ui_main_statusbar_show (void) +{ + if (ui.statusbar) + { + gtk_widget_show (GTK_WIDGET (ui.statusbar)); + GtkAction * action = menus_get_action (VIEW_MAIN_STATUSBAR_ACTION); + if (action) + gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), TRUE); + } +} + +/* hide() integrated UI main statusbar and reset pulldown menu action. */ +void integrated_ui_main_statusbar_hide (void) +{ + if (ui.statusbar) + { + gtk_widget_hide (GTK_WIDGET (ui.statusbar)); + GtkAction * action = menus_get_action (VIEW_MAIN_STATUSBAR_ACTION); + if (action) + gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), FALSE); + } +} + + Index: app/interface.h =================================================================== --- app/interface.h (revision 3692) +++ app/interface.h (working copy) @@ -45,7 +45,17 @@ void create_integrated_ui (void); +gboolean integrated_ui_main_toolbar_is_showing (void); +void integrated_ui_main_toolbar_show (void); +void integrated_ui_main_toolbar_hide (void); + +gboolean integrated_ui_main_statusbar_is_showing (void); +void integrated_ui_main_statusbar_show (void); +void integrated_ui_main_statusbar_hide (void); + +/* void synchronize_ui_to_active_display (DDisplay *ddisp); +*/ int is_integrated_ui (void); Index: app/disp_callbacks.c =================================================================== --- app/disp_callbacks.c (revision 3692) +++ app/disp_callbacks.c (working copy) @@ -600,7 +600,7 @@ if (transient_tool) break; if (ddisp->menu_bar == NULL) { - if (bevent->state & GDK_CONTROL_MASK) { + if (bevent->state & GDK_CONTROL_MASK || is_integrated_ui ()) { /* for two button mouse users ... */ popup_object_menu(ddisp, bevent); break; Index: app/menus.c =================================================================== --- app/menus.c (revision 3692) +++ app/menus.c (working copy) @@ -90,6 +90,13 @@ { "FileTree", NULL, N_("_Diagram tree..."), "F8", NULL, G_CALLBACK (diagtree_show_callback) } }; +/* Toggle-Actions for toolbox menu */ +static const GtkToggleActionEntry integrated_ui_view_toggle_entries[] = +{ + { VIEW_MAIN_TOOLBAR_ACTION, NULL, N_("Show Toolbar"), NULL, NULL, G_CALLBACK (view_main_toolbar_callback) }, + { VIEW_MAIN_STATUSBAR_ACTION, NULL, N_("Show Statusbar"), NULL, NULL, G_CALLBACK (view_main_statusbar_callback) } +}; + /* Actions for diagram window */ static const GtkActionEntry display_entries[] = { @@ -823,6 +830,8 @@ G_N_ELEMENTS (toolbox_entries), NULL); gtk_action_group_add_actions (integrated_ui_actions, display_entries, G_N_ELEMENTS (display_entries), NULL); + gtk_action_group_add_toggle_actions (integrated_ui_actions, integrated_ui_view_toggle_entries, + G_N_ELEMENTS (integrated_ui_view_toggle_entries), NULL); gtk_action_group_add_toggle_actions (integrated_ui_actions, toolbox_toggle_entries, G_N_ELEMENTS (toolbox_toggle_entries), NULL); Index: app/menus.h =================================================================== --- app/menus.h (revision 3692) +++ app/menus.h (working copy) @@ -94,5 +94,8 @@ void menus_set_recent (GtkActionGroup *actions); void menus_clear_recent (void); +#define VIEW_MAIN_TOOLBAR_ACTION "ViewMainToolbar" +#define VIEW_MAIN_STATUSBAR_ACTION "ViewMainStatusbar" + #endif /* MENUS_H */ Index: lib/diainteractiverenderer.c =================================================================== --- lib/diainteractiverenderer.c (revision 3692) +++ lib/diainteractiverenderer.c (working copy) @@ -74,8 +74,6 @@ g_return_if_fail (irenderer != NULL); g_return_if_fail (irenderer->set_size != NULL); -printf(__FILE__": dia_renderer_set_size()---> %d <--------------\n", __LINE__); irenderer->set_size (renderer, window, width, height); -printf(__FILE__": dia_renderer_set_size()---> %d <--------------\n", __LINE__); } Index: data/integrated-ui.xml =================================================================== --- data/integrated-ui.xml (revision 3692) +++ data/integrated-ui.xml (working copy) @@ -68,13 +68,16 @@ + + + - +