Index: app/commands.c
===================================================================
--- app/commands.c (revision 3687)
+++ app/commands.c (working copy)
@@ -867,28 +867,12 @@
if (!ddisp) return;
if (!gtk_toggle_action_get_active (action)) {
- if (GTK_WIDGET_VISIBLE (ddisp->origin)) {
- gtk_widget_unmap (ddisp->origin);
- gtk_widget_unmap (ddisp->hrule);
- gtk_widget_unmap (ddisp->vrule);
-
- GTK_WIDGET_UNSET_FLAGS (ddisp->origin, GTK_VISIBLE);
- GTK_WIDGET_UNSET_FLAGS (ddisp->hrule, GTK_VISIBLE);
- GTK_WIDGET_UNSET_FLAGS (ddisp->vrule, GTK_VISIBLE);
-
- gtk_widget_queue_resize (GTK_WIDGET (ddisp->origin->parent));
+ if (ddisp->rulers_are_showing) {
+ display_rulers_hide (ddisp);
}
} else {
- if (!GTK_WIDGET_VISIBLE (ddisp->origin)) {
- GTK_WIDGET_SET_FLAGS (ddisp->origin, GTK_VISIBLE);
- GTK_WIDGET_SET_FLAGS (ddisp->hrule, GTK_VISIBLE);
- GTK_WIDGET_SET_FLAGS (ddisp->vrule, GTK_VISIBLE);
-
- gtk_widget_map (ddisp->origin);
- gtk_widget_map (ddisp->hrule);
- gtk_widget_map (ddisp->vrule);
-
- gtk_widget_queue_resize (GTK_WIDGET (ddisp->origin->parent));
+ if (!ddisp->rulers_are_showing) {
+ display_rulers_show (ddisp);
}
}
}
Index: app/display.c
===================================================================
--- app/display.c (revision 3687)
+++ app/display.c (working copy)
@@ -210,7 +210,7 @@
}
create_display_shell(ddisp, prefs.new_view.width, prefs.new_view.height,
filename, prefs.new_view.use_menu_bar, !app_is_embedded());
-
+
ddisplay_update_statusbar (ddisp);
ddisplay_set_origo(ddisp, ddisp->visible.left, ddisp->visible.top);
@@ -808,18 +808,13 @@
GtkToggleAction *snap_to_grid;
ddisp->grid.snap = snap;
- if (is_integrated_ui ())
- {
- snap_to_grid = GTK_TOGGLE_ACTION (menus_get_action ("ViewSnaptogrid"));
- }
- else
- {
if (ddisp->menu_bar == NULL) {
snap_to_grid = GTK_TOGGLE_ACTION (menus_get_action ("ViewSnaptogrid"));
+ if (is_integrated_ui ())
+ integrated_ui_toolbar_grid_snap_synchronize_to_display (ddisp);
} else {
snap_to_grid = GTK_TOGGLE_ACTION (gtk_action_group_get_action (ddisp->actions, "ViewSnaptogrid"));
}
- }
/* Currently, this can cause double emit, but that's a small problem.
*/
gtk_toggle_action_set_active (snap_to_grid, ddisp->grid.snap);
@@ -844,6 +839,8 @@
if (ddisp->menu_bar == NULL) {
mainpoint_magnetism = GTK_TOGGLE_ACTION (menus_get_action ("ViewSnaptoobjects"));
+ if (is_integrated_ui ())
+ integrated_ui_toolbar_object_snap_synchronize_to_display (ddisp);
} else {
mainpoint_magnetism = GTK_TOGGLE_ACTION (gtk_action_group_get_action (ddisp->actions, "ViewSnaptoobjects"));
}
@@ -1099,8 +1096,10 @@
/* This calls ddisplay_really_destroy */
if (ddisp->is_standalone_window)
gtk_widget_destroy (ddisp->shell);
- else
+ else {
gtk_widget_destroy (ddisp->container);
+ ddisplay_really_destroy (ddisp);
+ }
}
static void
@@ -1220,9 +1219,9 @@
ddisplay_do_update_menu_sensitivity (ddisp);
-
+
gtk_toggle_action_set_active (rulers,
- GTK_WIDGET_VISIBLE (ddisp->hrule) ? 1 : 0);
+ ddisp->rulers_are_showing);
gtk_toggle_action_set_active (visible_grid,
ddisp->grid.visible);
gtk_toggle_action_set_active (snap_to_grid,
@@ -1340,6 +1339,54 @@
gdk_window_set_cursor(ddisp->canvas->window, cursor);
}
+/**
+ * Shows the rulers and sets flag ddisp->rulers_are_showing. This
+ * is needed to detect whether a show() has been issued. There is a
+ * delay between the time that gtk_widget_show() is called and the time
+ * when GTK_WIDGET_IS_VISIBLE(w) will indicate true.
+ * @param ddisp The display to show the rulers on.
+ */
+void display_rulers_show (DDisplay *ddisp)
+{
+ if (ddisp)
+ {
+ GtkWidget *parent = GTK_WIDGET (ddisp->origin->parent);
+
+ gtk_widget_show (ddisp->origin);
+ gtk_widget_show (ddisp->hrule);
+ gtk_widget_show (ddisp->vrule);
+
+ if (GTK_WIDGET_VISIBLE (parent))
+ gtk_widget_queue_resize (parent);
+
+ ddisp->rulers_are_showing = TRUE;
+ }
+}
+
+/**
+ * Hides the rulers and resets the flag ddisp->rulers_are_showing. This
+ * is needed to detect whether a hide() has been issued. There is a
+ * delay between the time that gtk_widget_hide() is called and the time
+ * when GTK_WIDGET_IS_VISIBLE(w) will indicate false.
+ * @param ddisp The display to hide the rulers on.
+ */
+void display_rulers_hide (DDisplay *ddisp)
+{
+ if (ddisp)
+ {
+ GtkWidget *parent = GTK_WIDGET (ddisp->origin->parent);
+
+ gtk_widget_hide (ddisp->origin);
+ gtk_widget_hide (ddisp->hrule);
+ gtk_widget_hide (ddisp->vrule);
+
+ if (GTK_WIDGET_VISIBLE (parent))
+ gtk_widget_queue_resize (parent);
+
+ ddisp->rulers_are_showing = FALSE;
+ }
+}
+
void
ddisplay_update_statusbar(DDisplay *ddisp)
{
@@ -1393,12 +1440,12 @@
/* Snap to grid */
ddisplay_set_snap_to_grid (ddisp, ddisp->grid.snap); /* menus */
- integrated_ui_toolbar_grid_snap_synchronize_to_display (ddisp);
/* Object snapping */
ddisplay_set_snap_to_objects (ddisp, ddisp->mainpoint_magnetism);
- integrated_ui_toolbar_object_snap_synchronize_to_display (ddisp);
+ display_update_menu_state (ddisp);
+
}
} else {
/* TODO: Prevent gtk_window_set_transient_for() in Integrated UI case */
Index: app/display.h
===================================================================
--- app/display.h (revision 3687)
+++ app/display.h (working copy)
@@ -102,6 +102,8 @@
/* Points to widget containing the diagram if not standalone window */
GtkWidget *container;
+
+ gboolean rulers_are_showing;
};
extern GdkCursor *default_cursor;
@@ -154,6 +156,9 @@
void ddisplay_set_cursor(DDisplay *ddisp, GdkCursor *cursor);
void ddisplay_set_all_cursor(GdkCursor *cursor);
+void display_rulers_show (DDisplay *ddisp);
+void display_rulers_hide (DDisplay *ddisp);
+
gboolean ddisplay_scroll(DDisplay *ddisp, Point *delta);
gboolean ddisplay_autoscroll(DDisplay *ddisp, int x, int y);
void ddisplay_scroll_up(DDisplay *ddisp);
Index: app/app_procs.c
===================================================================
--- app/app_procs.c (revision 3687)
+++ app/app_procs.c (working copy)
@@ -99,6 +99,10 @@
extern DiaExportFilter png_export_filter;
#endif
+static void
+integrated_ui_create_initial_diagrams_callback (GtkWidget *widget,
+ gpointer user_data);
+
static gboolean
handle_initial_diagram(const char *input_file_name,
const char *export_file_name,
@@ -950,17 +954,13 @@
if (dia_is_interactive && files == NULL && !nonew) {
if (prefs.use_integrated_ui)
{
- /* Use the same function call to create a new diagram as that used by
- * the menu and toolbar */
- GList * list;
- file_new_callback(NULL);
- list = dia_open_diagrams();
- if (list)
- {
- Diagram * diagram = list->data;
- diagram_update_extents(diagram);
- diagram->is_default = TRUE;
- }
+ /* 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);
}
else
{
@@ -984,6 +984,26 @@
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/dia_embedd.c
===================================================================
--- app/dia_embedd.c (revision 3687)
+++ app/dia_embedd.c (working copy)
@@ -64,6 +64,7 @@
gtk_widget_show(ddisp->origin);
gtk_widget_show(ddisp->hrule);
gtk_widget_show(ddisp->vrule);
+ ddisp->rulers_are_showing = TRUE;
gtk_widget_show(ddisp->hsb);
gtk_widget_show(ddisp->vsb);
gtk_widget_show(ddisp->zoom_status->parent);
@@ -74,6 +75,7 @@
gtk_widget_hide(ddisp->origin);
gtk_widget_hide(ddisp->hrule);
gtk_widget_hide(ddisp->vrule);
+ ddisp->rulers_are_showing = FALSE;
gtk_widget_hide(ddisp->hsb);
gtk_widget_hide(ddisp->vsb);
gtk_widget_hide(ddisp->zoom_status->parent);
Index: app/interface.c
===================================================================
--- app/interface.c (revision 3687)
+++ app/interface.c (working copy)
@@ -423,41 +423,18 @@
}
/**
- * Updates toolbar and menu items to reflect the active display
+ * @param button The notebook close button.
+ * @param user_data Container widget (e.g. VBox).
*/
-void synchronize_ui_to_active_display (DDisplay *ddisp)
-{
- /* TOOLBAR ITEM */
-
- /* Zoom */
-
- /* Snap-to-grid */
-
- /* Object Snapping */
-
-}
-
-
-/**
- * @param ddisp The diagram display object that a window is created for
- * @param width Diagram widgth
- * @param height Diagram Height
- * @param title Window title
- * @param use_mbar Flag to indicate whether to add a menubar to the window
- * @param top_level_window
- */
void
close_notebook_page_callback (GtkButton *button,
gpointer user_data)
{
GtkBox *page = user_data;
- GtkNotebook *notebook = g_object_get_data (G_OBJECT (page), "GtkNotebook");
- gint page_num = gtk_notebook_page_num (notebook, GTK_WIDGET(page));
DDisplay *ddisp = g_object_get_data (G_OBJECT (page), "DDisplay");
-
+
+ /* When the page widget is destroyed it removes itself from the notebook */
ddisplay_close (ddisp);
- /*gtk_notebook_remove_page (notebook, page_num);*/
- /* gtk_widget_destroy( GTK_WIDGET (page)); */
}
/**
@@ -482,9 +459,17 @@
ddisp->is_standalone_window = FALSE;
ddisp->shell = GTK_WIDGET (ui.main_window);
+
+ /* Statusbar */
+ ddisp->modified_status = GTK_WIDGET (ui.statusbar);
/* Create a new tab page */
ddisp->container = gtk_vbox_new(FALSE, 0);
+ gtk_widget_set_events (ddisp->container,
+ GDK_POINTER_MOTION_MASK |
+ GDK_POINTER_MOTION_HINT_MASK |
+ GDK_FOCUS_CHANGE_MASK);
+
tab_label_container = gtk_hbox_new(FALSE,3);
label = gtk_label_new( title );
@@ -515,19 +500,10 @@
gtk_widget_show (close_button);
gtk_widget_show (image);
- gtk_notebook_append_page (GTK_NOTEBOOK(ui.diagram_notebook),
- ddisp->container,
- tab_label_container);
-
g_object_set_data (G_OBJECT (ddisp->container), "DDisplay", ddisp);
g_object_set_data (G_OBJECT (ddisp->container), "tab-label", label);
g_object_set_data (G_OBJECT (ddisp->container), "window", ui.main_window);
- gtk_widget_set_events (ddisp->container,
- GDK_POINTER_MOTION_MASK |
- GDK_POINTER_MOTION_HINT_MASK |
- GDK_FOCUS_CHANGE_MASK);
-
/* the table containing all widgets */
table = gtk_table_new (3, 3, FALSE);
gtk_table_set_col_spacing (GTK_TABLE (table), 0, 1);
@@ -618,34 +594,18 @@
gtk_table_attach (GTK_TABLE (table), navigation_button, 2, 3, 2, 3,
GTK_FILL, GTK_FILL, 0, 0);
- /* the statusbars */
- status_hbox = gtk_hbox_new (FALSE, 2);
-
ddisp->common_toolbar = ui.toolbar;
- /* TODO: Migrate Zoom, Grid Status to main window toolbar */
+ ddisp->menu_bar = NULL;
+
/* Zoom status pseudo-optionmenu */
ddisp->zoom_status = NULL;
-/*create_zoom_widget(ddisp);
- zoom_hbox = gtk_hbox_new(FALSE, 0);
- zoom_label = gtk_label_new(_("Zoom"));
- gtk_box_pack_start (GTK_BOX(zoom_hbox), zoom_label,
- FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX(zoom_hbox), ddisp->zoom_status,
- FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX (status_hbox), zoom_hbox, FALSE, FALSE, 0);
-*/
-
/* Grid on/off button */
ddisp->grid_status = NULL;
-/*
- g_signal_connect(G_OBJECT(ddisp->grid_status), "toggled",
- G_CALLBACK (grid_toggle_snap), ddisp);
-*/
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,
@@ -653,41 +613,29 @@
gtk_box_pack_start (GTK_BOX (status_hbox), ddisp->mainpoint_status,
FALSE, FALSE, 0);
- /* Statusbar */
- ddisp->modified_status = GTK_WIDGET (ui.statusbar);
-/*
- gtk_box_pack_start (GTK_BOX (status_hbox), ddisp->modified_status,
- TRUE, TRUE, 0);
-
- gtk_table_attach (GTK_TABLE (table), status_hbox, 0, 3, 3, 4,
- GTK_FILL, GTK_FILL, 0, 0);
-*/
-
gtk_widget_show (ddisp->hsb);
gtk_widget_show (ddisp->vsb);
- gtk_widget_show (ddisp->origin);
- gtk_widget_show (ddisp->hrule);
- gtk_widget_show (ddisp->vrule);
-/* Zoom-status not migrated yet */
-/*
- gtk_widget_show (ddisp->zoom_status);
- gtk_widget_show (zoom_hbox);
- gtk_widget_show (zoom_label);
-*/
- gtk_widget_show (status_hbox);
+ 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 */
- gtk_notebook_set_current_page (ui.diagram_notebook,
- gtk_notebook_get_n_pages (ui.diagram_notebook)-1);
-
+ if (gtk_notebook_get_n_pages (ui.diagram_notebook) > 1)
+ {
+ gtk_notebook_set_current_page (ui.diagram_notebook,
+ gtk_notebook_get_n_pages (ui.diagram_notebook)-1);
+ }
+
integrated_ui_toolbar_grid_snap_synchronize_to_display (ddisp);
integrated_ui_toolbar_object_snap_synchronize_to_display (ddisp);
+ gtk_notebook_append_page (GTK_NOTEBOOK(ui.diagram_notebook),
+ ddisp->container,
+ tab_label_container);
+
/* TODO: Figure out how to detect if anti-aliased renderer was set */
/** For the distributed display this is called when the ddisp->canvas is shown.
* The show causes a GDK_CONFIGURE event but this is not happening here. If this
@@ -963,9 +911,7 @@
gtk_widget_show (ddisp->hsb);
gtk_widget_show (ddisp->vsb);
- gtk_widget_show (ddisp->origin);
- gtk_widget_show (ddisp->hrule);
- gtk_widget_show (ddisp->vrule);
+ display_rulers_show (ddisp);
gtk_widget_show (ddisp->zoom_status);
gtk_widget_show (zoom_hbox);
gtk_widget_show (zoom_label);
Index: app/menus.c
===================================================================
--- app/menus.c (revision 3687)
+++ app/menus.c (working copy)
@@ -61,6 +61,9 @@
static void
add_toolbox_plugin_actions (GtkUIManager *ui_manager);
+static gchar*
+build_ui_filename (const gchar* name);
+
/* Actions common to toolbox and diagram window */
static const GtkActionEntry common_entries[] =
{
@@ -329,22 +332,6 @@
return TRUE;
}
-/**
- * Temporary hack
- */
-static gboolean
-toolbar_callback (GtkWidget *toolbar, gpointer data)
-{
- if (data)
- {
- void (*callback)(GtkAction *action);
-
- callback = data;
- callback(NULL);
- }
- return FALSE;
-}
-
static void
integrated_ui_toolbar_grid_snap_set_state(int state)
{
@@ -360,7 +347,7 @@
* @param param Display to synchronize to.
*/
void
-integrated_ui_toolbar_object_snap_synchronize_to_display(gpointer *param)
+integrated_ui_toolbar_object_snap_synchronize_to_display(gpointer param)
{
DDisplay *ddisp = param;
if (ddisp && ddisp->common_toolbar)
@@ -392,7 +379,7 @@
* @param param Display to synchronize to.
*/
void
-integrated_ui_toolbar_grid_snap_synchronize_to_display(gpointer *param)
+integrated_ui_toolbar_grid_snap_synchronize_to_display(gpointer param)
{
DDisplay *ddisp = param;
if (ddisp && ddisp->common_toolbar)
@@ -445,40 +432,20 @@
GtkWidget *w;
GtkAction *action;
int i;
+ GError *error = NULL;
+ const gchar *uifile;
- struct item_t {
- const gchar * stock_id;
- void (*callback)(GtkAction *);
- } item[] = {
- { GTK_STOCK_NEW, file_new_callback },
- { GTK_STOCK_OPEN, file_open_callback },
- { GTK_STOCK_SAVE, file_save_callback },
- { GTK_STOCK_SAVE_AS, file_save_as_callback },
- { 0 },
- { GTK_STOCK_ZOOM_IN, view_zoom_in_callback },
- { GTK_STOCK_ZOOM_OUT, view_zoom_out_callback },
- };
- size_t num_items = sizeof(item)/sizeof(struct item_t);
-
- toolbar = GTK_TOOLBAR (gtk_toolbar_new ());
-
- for(i = 0 ; i < num_items ; i++)
- {
- if (item[i].stock_id)
- {
- button = gtk_tool_button_new_from_stock (item[i].stock_id);
- gtk_toolbar_insert (toolbar, button, -1);
- gtk_signal_connect (GTK_OBJECT (button),"clicked",
- GTK_SIGNAL_FUNC (toolbar_callback), item[i].callback);
- gtk_widget_show (GTK_WIDGET (button));
- }
- else
- {
- sep = gtk_separator_tool_item_new ();
- gtk_toolbar_insert (toolbar, sep, -1);
- gtk_widget_show (GTK_WIDGET (sep));
- }
+ uifile = build_ui_filename ("ui/toolbar-ui.xml");
+ if (!gtk_ui_manager_add_ui_from_file (integrated_ui_manager, uifile, &error)) {
+ g_warning ("building menus failed: %s", error->message);
+ g_error_free (error);
+ error = NULL;
+ toolbar = GTK_TOOLBAR (gtk_toolbar_new ());
}
+ else {
+ toolbar = gtk_ui_manager_get_widget (integrated_ui_manager, "/Toolbar");
+ }
+ g_free (uifile);
tool_item = gtk_tool_item_new ();
w = gtk_label_new ("100%");
Index: app/menus.h
===================================================================
--- app/menus.h (revision 3687)
+++ app/menus.h (working copy)
@@ -73,10 +73,10 @@
integrated_ui_toolbar_set_zoom_text (GtkToolbar *toolbar, const gchar * text);
void
-integrated_ui_toolbar_grid_snap_synchronize_to_display (gpointer *ddisp);
+integrated_ui_toolbar_grid_snap_synchronize_to_display (gpointer ddisp);
void
-integrated_ui_toolbar_object_snap_synchronize_to_display (gpointer *ddisp);
+integrated_ui_toolbar_object_snap_synchronize_to_display (gpointer ddisp);
/* TODO: rename: menus_get_integrated_ui_menubar() */
void menus_get_integrated_ui_menubar (GtkWidget **menubar, GtkWidget **toolbar,
Index: lib/diainteractiverenderer.c
===================================================================
--- lib/diainteractiverenderer.c (revision 3687)
+++ lib/diainteractiverenderer.c (working copy)
@@ -74,6 +74,8 @@
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/toolbar.xml
===================================================================
--- data/toolbar.xml (revision 3687)
+++ data/toolbar.xml (working copy)
@@ -1,6 +0,0 @@
-
-
-
-
-
-
Index: data/toolbar-ui.xml
===================================================================
--- data/toolbar-ui.xml (revision 3687)
+++ data/toolbar-ui.xml (working copy)
@@ -1,6 +1,11 @@
-
-
+
+
+
+
+
+
+